

What if I went to a Java school Joel? - muriithi
http://thinkingdigitally.com/archive/what-if-i-went-to-a-java-school-joel/

======
jcromartie
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.

~~~
rit
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".

------
kylec
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.

------
scott_s
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.)

------
diego
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.

~~~
stcredzero
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.

------
prospero
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.

------
spydez
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...

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

~~~
rms
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>

------
randrews
"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.

~~~
jrockway
_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.

~~~
scott_s
_Nobody cares how fast your compiler runs._

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

