No no, I said ‘critical examination’

The expected tripe has rolled in after my previous post was publicised on reddit (thanks gst whoever you are ;)).

Here are some of the wonderful accusations:

      What a controlling, elitist piece of shit. Worthless article.

      Elitist? I’ll accept that and so what? There is nothing wrong with elitism; in fact, I encourage it. Of course, bragging about it publicly is a little distasteful, but that was never the intention. Controlling? I seem to have controlled you, but nobody else. What else can I say? The response is full of gems of insight!

      What else did you expect? It is Tony Morris, after all.

      Ever heard the term, Ad Hominem fallacy? Such… a critical examination, um, yeah.

      …here we have a Haskell zealot…

      WTF? I use many languages, one of which is Haskell, but certainly nothing that could be described as ‘zealous’. This seems to be an outright statement of ‘I have tricked myself into describing something other than reality’, since I find absolutely no evidence to support it.

      …banned Java from his 6 year-old son’s computer, lest it pollutes his mind. And then he criticises people for being closed-minded!

      I concede on this one and should have made my point clear. I have no intention of hiding Java from my son indefinitely. I’m not going to show him a horror film until he a sound moral basis to conduct himself with his peers for the same reason that I will not show him Java until he has a sound basis with which to apply reason and understands the foundations of what it is he is doing (programming).

      Well I think we’ve all seen this kind of attitude to some extent, but it all seems to proliferate quite extensively from the ivory towers of academia, i.e. the functional programming community.

      They look down on other people who dirty their hands doing “real work” instead of spending time worrying about how pure their language is.

      This one is a classic! First, I’d like to dissolve the apparent rift between ‘the functional programmers’ and ‘the imperative programmers’. There simply is no clear distinction and it’s a pointless exercise anyway. Second, I am a member of both communities.

      Finally, I’d like you to describe for me what “real work” is. Is it repeating yourself indefinitely because your programming language demands it? No really, I’m asking for a formal definition that we can have a discussion about. You do realise that almost all of Java’s language features started off in “the academic world” (i.e. someone though of a clever idea) and were subsequently perverted before finalising in a JSR (i.e. they were dumbed down to appeal to the masses), right? The results of these JSR teams are merely acts of intellectual fraud. I wish they gave public tours of these circuses so you could see for yourself.

      So Tony hangs around mediocre programmers. Big deal.

      Perhaps I do, but there is no evidence supporting this position. I have only described quite a small subset of all programmers that I could potentially know of. I think that most people only know one language, but I could be mistaken (from the samples I have anyway). i.e. Java, C#, VB, C, etc. are all the same language under this description. How many people do you know who look to advanced languages for insight?

      He only hit the grey mass of average programmers. These used to program in C++ and Visual Basic, and before that in FORTRAN. This grey mass of programmers never have in depth knowledge of the programming language or tools they are using, and are too intelectually lazy to actually learn it. I don’t think java create this kind of guys, but it seems to have the qualities that attracts them.

      On a positive note, this response is one that I have not considered enough to my own satisfaction and I thank that respondent for it! ;) Specifically, the response that Java may not create self-delusion, but attracts those who seek it. I’ll have to think about it some more, thanks again.

Thanks for some of the other positive responses that attempt to refute my argument (read: outburst of frustration) with a rational response, it is most appreciated.
THINK

3 Responses to “No no, I said ‘critical examination’”

  1. John "Z-Bo" Zabroski Says:

    The basic problem with education is students aren’t learning enough life-long skills. Your 6 year old might end up becoming the next Alan Turing, but first make sure he is building up skills that will become instincts through practice.

    Skills like search strategies, avoiding information overload, determining information credibility, troubleshooting, computer-assisted presentation skills, &c. are abilities you have acquired and probably now take for granted. Information credibility seems to be what you are really concerned about. The amount of bad information available regarding Java is overwhelming. Therefore, I submit that you should teach your son how to identify intellectual garbage.

    I don’t really care if your son learns Java or not. Personally, I wouldn’t teach it to a 6 year old because Java is an ancient technology in today’s ever changing world. In addition, your argument for not teaching Java hinges on the either the behaviorist belief that learning is a result of operant conditioning, or the constructivist belief that learning is active, discovery-based, and knowledge-building. In either case, teaching a 6 year old Java is an extremely difficult task. One approach might be Java: An Eventful Approach by Kim Bruce. Bruce focuses on event-based programming, objects-first and concurrency instead of traditional line-by-line examples first illustrated in K&R.

    A more general, more acceptable idea for me is that 6 year olds should be learning event-based programming instead of traditional line-by-line examples. It’s not about Java vs. Haskell; it’s about messaging models and design. Most approaches to Java continue to teach programming in the K&R style. However, this is unnecessary.

    At some point, make sure your son understands the evolution of good design. These days, the prominent idea in computer science is to teach examples of good design (patterns) instead of how that good design came about (through a series of refactorings). By only viewing good design and not evolution toward good design, there is understanding of how to achieve great design. As my Albanian math professor would always say in a heavy accent, “How do you solve a problem you don’t know how to solve?” Pausing, he would answer lightly, “You go with what you know… you go with what you know.”

  2. Tony Morris Says:

    Thanks John for the advice. I really should correct myself and say, “my son is teaching himself using his own initiative.” He first started exploring the mathematical properties of small numbers by asking me questions, then pointing out certain observations (for example, he told me that two numbers when added together yields the same result as swapping those numbers and adding them). Of course, I told him this has a name, “that addition is commutative”.

    I gave him Haskell to explore his own ideas of this nature (without telling him what it was he was doing - he still thinks computers are for games). However, I truly fear for the mental well-being of anyone (including my son) when I observe the behaviour of the general Java community. I truly find it difficult to have a meaningful discussion where there is a disagreement, with someone who is not even arguing their position very well (i.e. even I could do a better job).

    It is this “state of delusion” that I wish to shield a vulnerable mind from, for now :)

  3. John "Z-Bo" Zabroski Says:

    “State of delusion” is a little harsh. People underestimate nuances. Everyone acknowledges poor habits are easy to develop, and good habits are hard to maintain. However, when programming, good habits do not map perfectly to other languages.

    Good habits programming in C are poor habits programming in Java. A linked list in C might use a null to indicate the end of the list, whereas a linked list in Java might define an List interface and define Cons and Empty as concrete List instances. Doing it the right way in Java will prevent NullPointerException bugs and eliminate Dangling Composite bug patterns.

    I’ve heard college professors tell me they hate teaching Java and wished they could teach C, and the biggest problem isn’t their hatred of Java but their unwillingness to learn the Java way to do things. Thus, you end up with Computer Science graduates who take Data Structures & Algorithms courses in Java where the code smells everywhere due to a Dangling Composite bug pattern. The unfortunate thing is the professors advocate this form of programming, and they tell me “I know how to program, so it doesn’t really matter what language I teach in, but I still hate teaching it in Java!” Right now, there are many AP Computer Science teachers in the United States who used to teach C++ and are now teaching Java. Many of these teachers are probably unwittingly making the same mistakes.

    Again, the real problem is people do not realize how dramatic subtle nuances are. The greatest offender of this is the “If you know C++, I can teach you Java!” books. All too often, these books focus on superficial understanding of the syntax of the new language and not enough focus on the deeper meaning. As a result, you have somewhat experienced programmers who understand basic concepts like recursion, stacks and heaps, but not enough experience to realize it’s what you want to say that matters most. How you say something is a matter of realizing a sledgehammer isn’t necessary when a few gentle taps of a hammer will do.

    Nicole McNeil is a psychologist at Notre Dame University. She has extensively studied the ways children learn math. One thing she points out is that students often misinterpret the equals symbol as “calculate the total”. Thus, when a student sees 4 + ? = 11, the answer 15 might be given. As a TA for Calculus 1 and 2 for three years at college, I saw similar problems in weaker students. They would consistently use u-substitution method and avoid integration by parts. My belief is that they had a poor understanding of the concept of substitution and principles of term rewriting systems. Substitution is a threshold concept in entry-level calculus: Once students truly understand it, there abilities to solve problems increase dramatically.

    None of my business, but did you buy an XO? Several of my friends bought one for a niece or nephew.

Leave a Reply