# Response to: The Perils of Java Schools

I read this good article here: http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html It is a very good rant, you should read it! While you don't need to read it to make sense of my response, it is still a response/thoughts about. Anyway, here is my response I initially wrote as an email to a former high school CS teacher.

----

First, I think he has many good and strong points. We should be teaching recursion and pointers and threading much earlier than we are. If I had any suggestions for your [my old teacher's] AP CS class this year, it would be to teach it faster, especially if many of the students have passed your C++ class and should have a pretty decent grasp of the OOP material, if not a better one. (Also teach Researching by, for example, giving a somewhat challenging final problem on tests/quizzes requiring them to write code and give the students access to the internet. They are expected to only be able to solve it if they do research, so nothing so simple it comes up completed as a Yahoo Answer.)

Second, [insert rant about why it's stupid to not allow calculators in upper level math classes, which yes includes Calculus.] We can say how programmers should learn Assembly because old programmers had to in order to be thought smart, but that's insulting to their intelligence. Serious assembly programming takes the full force of human intelligence, expecting that AND a complete understanding of all this other higher level stuff is just not feasible on a mass scale. I'm also sick of all this reinventing the wheel of data structures classes. Yes it has merits, and since I'm interested in what's under the hood I don't complain personally, but I think it would be much more useful and enlightening to see what sort of problems binary trees can solve, rather than learning how to implement one. Perl 6 is at the bottom of my languages to learn because it's not stabilized yet, but also because it plans to bring parsers to the same level that old-Perl brought regular expressions. That is, everyday usage. (And yet some CS grads never hear of or use regexes? That is the problem, and it is DEFINITELY not a problem with Java, which has awesome regex support built in a lot of things without needing to even import anything.) I'm much more interested in using regexes to do things than learn how to implement regexes, though that is interesting.

Third, I think it does take a certain amount of brainpower to comfortably work with something like this:

Map<String, Map<String, Map<String, Map<String, String>>> > meta_data =
new LinkedHashMap<String, Map<String, Map<String, Map<String, String>>> >();

(I implemented that to replace a very hackish and revealed-to-be-buggy string buffering implementation that did a lot of wacky things.) Java's not simple, it's bureaucratic. The law we have today should be simple, as were the American founders' dreams, but it is not simple, it is bureaucratic. The concepts they teach in JavaSchools tend to be really simple, but it has nothing to do with Java. In short, Java's not to blame. This is a typical criticism of PHP, that stupid people use it, write and publish stupid code with it, but if you can't see why that's not a problem with the PHP language or a mark against the people who use it to build nice things... Getting to competency with the LAMP stack and HTML and JavaScript aren't things to wave off, and they're certainly more important for any definition of importance than understanding how to implement a red-black tree.

Fourth, society needs more people who have at least had exposure to programming, let alone competent programmers. As technology starts replacing many of our lower simple-labor jobs, the economy must compensate with more difficult jobs that require human or near-human level intelligence. If we don't start raising the waterline now, the unemployment crisis in the future if hard, strong AI doesn't take off looks very scary. For the past few years the housing market has been crap, and people whose only skill was that of building housing (which there is a lot of info to learn concerning framing and foundations and so on, it's likely not going to go anywhere in the next few years) have found it very hard to find work. Now imagine that happening across every sector of the economy on account of not only being no jobs, but not ever being any jobs for those things, since machines have replaced them entirely. The immediate future involves us making new, better machines, and fixing the ones we have. Programming must be as basic a skill as writing. The whole point of this line is that JavaSchools aren't necessarily bad. There's strong reason to believe if someone doesn't have that special something when they first start out programming that makes them really good at it, they never will. The geniuses will do okay at any school, but as long as schools like MIT survive for geniuses to really thrive in, it will work out.

Fifth, I totally agree about teaching functional programming. At DigiPen they get half the equation right by doing hardcore C and C++ and even some Assembly programming with optimization being considered frequently, but they need to do higher level languages too. I've heard multiple times upper-classmen being told about or just talking about in a very first-timer inexperienced way these magical things called "functors" which simplify so many problems, though if you use something besides C++ there's a whole world of advanced functional programming to learn from and explore besides passing functions as arguments.

#### Posted on 2010-07-24 by Jach

Tags: learning, programming, rant, response

Back to the top

Anonymous June 30, 2011 07:04:57 PM I got to the point where you called calculus "upper level math" and couldn't continue.

Entry-level freshmen courses are not "upper level math" by any stretch of the imagination.
Jach June 30, 2011 08:22:36 PM Anonymous, I agree. However Calculus is very much upper-level math for most of the country considering they barely get past Algebra 2, and as such I think it's silly to forbid calculators in a Calculus course. See these two links for more on the problem of calculators/computers in math and where I'm coming from:

http://www.telegraph.co.uk/education/6719451/We-need-to-base-maths-lessons-on-computers.html

http://theodoregray.com/BrainRot/

(In particular for the last one, a quote: "To think that a modern human should be able to do everything that previous generations have been able to do (hunt, speak Latin, do square roots by hand, etc.), and also have any time left over to learn anything new (microbiology, email, calculus), is basically insulting to all those previous generations, since it implies that they under-employed their intelligence. It is also quite false." ~Theo Gray)

It's too bad that my parenthetical was so insulting that you couldn't get through to the main point of the posting. Go play with your manifolds and quaternions (or use the Geometric Algebra abstraction) I guess.

Comment using the form below

(Only if you want to be notified of further responses, never displayed.)

LaTeX allowed in comments, use $\\...\\$\$ to wrap inline and $$...$$ to wrap blocks.