Hacker News new | past | comments | ask | show | jobs | submit login
What if I went to a Java school Joel? (thinkingdigitally.com)
19 points by muriithi on July 30, 2008 | hide | past | favorite | 14 comments



He says that "if American Universities are going to keep up, they need to switch back to ... using C in the classroom."

Unfortunately, he doesn't understand the goals of most American schools. The goal is not to give the students a well-rounded education to serve as a foundation of lifelong achievement. The goal is to get paid.

A lot of schools used C because it was popular, and because the industry would support a system that produced C programmers. Now Java is popular and the industry supports schools that produce Java programmers.

If Haskell becomes the next big trend in enterprise development, then kids will start getting good CS educations again.


Exactly.

At some point [I'm assuming based on legend and claims it once was] the american "higher" education system became a business, rather than a true academic institution. The purpose has nothing to do with giving students a solid education: it has entirely to do with getting their money, and giving them a good "social" experience that convinces them to convince friends, family and offspring to go to the school.

In some cases, I suspect there is genuine "let's use Java because it's heavily used in industry." But in most cases, it's "Let's use Java because Java is EASY, and our students don't want to take hard classes with things like pointer math and C".


My advice is to just teach yourself the stuff you want to know. If you want to learn C, pick up "The C Programming Language" and start writing programs in it.

I have never even heard of fixed point theory either. Instead of blaming my college I'm going to take charge and learn about it myself. We are truly fortunate to be living in a time where information is available at the touch of a button.

As a side note, the ability to learn by teaching yourself is much more valuable than the ability to learn in a classroom. Getting practice now will put you ahead in the future.


I tried to post a comment on his blog, but it's inaccessible.

Short version: pick a systems programming project to learn C. I think implementing a memory allocator is a good one. You can code a brain-dead simple memory allocator in less than a few dozen lines. It will perform horribly and waste resources, but it's still functionally complete. As you learn more, you can make the allocator more sophisticated.

(Although I'm biased since memory allocation was a research project of mine.)


Any serious CS program should have a class like this:

http://moodle.cs.huji.ac.il/course/view.php?id=66

Workshop In Computer Construction - From Nand to Tetris

(book page: http://www1.idc.ac.il/tecs/)

CS students need to be exposed to the lowest possible level of how computers work at least once, just to know that it exists. After that, it depends on each individual's curiosity.


Not only does this give a sense of the lowest levels, but you also get to build your own Object Oriented language and write your own kernel and Operating System! This is one of the best and most practical ways of getting the whole enchilada I know of.


I have to say, UC Irvine (the school discussed in the article) isn't really a Java school. Introductory students are taught Scheme, and the required curriculum includes language design, algorithms, and operating systems. Optional courses that I took included cryptography, computer graphics, computational geometry, and artificial intelligence. Some of these classes used Java, others didn't.

That being said, the threshold for just passing the classes never seemed very high. The education was there if you wanted it, but most students didn't seem to, and were happy to get by with a barely passing grade. This is obviously a problem, but different from the one discussed in the Spolsky article.


One way to get some C-learnin' in Java school is to get a Computer Engineering degree instead of CS or Software Engineering. Microcontrollers and embedded stuff still has a lot of assembly and C.

That's what I did, anyways. Now I'm an embedded software engineer, writing in C++, and able to handle pointers and memory and such.

My issue is how to learn functional programming. Can't learn it on the job, as this is a C++/Java/C# shop. And I haven't found a decent way to learn it as a hobby.

Hobbies are for scratching an itch, which usually means Python frankenscripts to make some mundane piece of work easier, or quick one-offs in PHP to amuse friends, or python/html/css projects that'll never be finished but seemed cool when I started.

Maybe someday the dirt cheap shared web hosting space will have RoR or Erland or Arc...


Not dirt cheap, but you can get decent VPS hosting from Slicehost for $20/month


Yeah... Slicehost is what I use, but linode.com offers plans with more RAM for the same price, though their service isn't as "mature".

http://news.ycombinator.com/item?id=258958


I'm on Dreamhost shared hosting - they have RoR.


"In addition, there are very few things that actually need to be written in C. Operating systems and compilers are the two big areas where use of C is nearly always required. Both are territory that I am not interested in venturing into at this point."

First, why is C nearly always required for writing compilers? I've written one in C and a few in higher-level languages, and the HLL ones were easier due largely to garbage collection.

Second, those two things, if learned, would teach him vastly more about computer science than just learning C. For a better understanding why, Steve Yegge's essay "Rich Programmer Food" is what you want to read.


First, why is C nearly always required for writing compilers?

Because the author is clueless. Sure, you might want to compile your language down to C, but there's no point in writing the compiler in C, unless you want to make your life difficult for no good reason. Nobody cares how fast your compiler runs. (What I should say is, tokenizing the input, building the AST, and traversing the AST is going to be just as fast implemented in Lisp/ML/Perl/Ruby as it is implemented in C. Except you'll get a more correct compiler in less time. "malloc" is for chumps.)

But, these days, there's no point in compiling down to C. It's much easier (and yields a potentially faster runtime) to compile to LLVM or the JVM or Parrot.


Nobody cares how fast your compiler runs.

I take it you've never written a C++ program which depends on heavy template metaprogramming.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: