

The Perils of JavaSchools (2005) - aycangulez
http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html

======
jchonphoenix
I've read this article before, and I somewhat agree with it. However, java is
a much more practical language to program in than c unless you're doing work
where c is absolutely necessary. Programming speed is usually preferable.

What I don't agree with is pointers and recursion making people's heads
explode. Pointers are just another language construct and with enough practice
anyone will get used to them. Recursion is a mathematical concept. Thus, for
all its elegance and simplicity, people still find it difficult in the same
way they find mathematics difficult.

The real weeder classes that I've seen are generally theory and discrete math
classes. The truly challenging systems and programming related classes usually
aren't offered until the latter years of a student's CS career (such as OS,
Distributed Systems, etc).

Disclaimer: My experiences come only with my university - Carnegie Mellon, and
chatting with friends from others

~~~
electronvolt
To be fair, Joel makes that point. He claims that: "It may be a fine language
to work in, but that's not today's topic. I would even go so far as to say
that the fact that Java is not hard enough is a feature..."

In my experience at UVa, the weeder class is where they introduce pointers,
re-introduce recursion, and do basic data structures, and start people with a
language other than Java (C++ and x86 assembly; there is also an option to do
the first class in Scheme, but that is only open to some people). Someone here
was obviously listening to Joel.

\-----

I think that the perils of a "Java school" are reasonably similar to the
perils of a "C School" or a "Lisp school", though: you are only learning one
programming language. As a CS student who has written nontrivial programs in
5-6 languages _, I do not believe you can produce even reasonably competent
computer scientists who are limited by the one language they know and cannot
think outside of that limitation on their conceptualizing of problems.
Although the individual issues with, say, C might be different (you -will-
understand pointers), your thought processes are still limited to the one
language that you know.

_ Disclaimer: I don't claim to be exceptionally experienced in those
languages, but enough to have hit the "I get how to do basic things in this
language" point. I'm reasonable with really 2 languages, and nowhere near
mastery of programming.

------
jbooth
"Instead what I'd like to claim is that Java is not, generally, a hard enough
programming language that it can be used to discriminate between great
programmers and mediocre programmers."

I'd like to clarify that doing a bunch of pointer arithmetic and manual memory
management does not necessarily make someone a great programmer. In many
cases, it distinguishes them as a "midgrade and needs to learn something about
premature optimization" programmer.

Great programmers write solutions that make hard problems look easy, and
mediocre programmers write solutions that make medium problems look very hard.
Java makes it easy to do either of those -- anyone who's reviewed a decent
quantity of Java code can attest to this (compare the code style in, say,
Guava or Lucene with your typical J2EE app).

~~~
api
This is quite correct.

The real problem with JavaSchools is the lack of higher-level concept
exposure... things like higher mathematics, machine learning, combinatorics,
really deep algorithm analysis, etc.

We all have supercomputers on our desks and we're using them to do stupid
stuff because most programmers don't know enough real theory to make them do
better.

Programming languages are more of a pragmatic choice. You can do cool stuff in
C, Java, C++, Python, etc. I care more about what you do than what language
it's in.

------
johnl87
What is sad that all the cool hardcore C programming jobs are going oversees -
unless you're a computer engineer and deal with hardware. Everyone is looking
for php, ajax, python, etc, basically C-based type-less languages which anyone
competent in C can pick up in a matter of days. But try to apply to those
companies with C, C++ and x86 assembler on your resume, no one will get back
to you.

~~~
jchonphoenix
Have you been applying to jobs lately?

Microsoft still requires C++ from their applicants. Nvidia and Intel both
require C and C++. Google also heavily uses C/C++. I believe you're confusing
"web companies" with "companies." It makes sense for web companies to use
other languages, but C, C++, and assembler are things that should be on your
resume.

If someone claimed to be a competent programmer, but didn't know how asm
related to C, I would seriously question the merit of their statements.

------
c1sc0
I still remember this about-face, makes me chuckle every time: "Now, don't get
me wrong: there's nothing wrong with Java as an implementation language.

Wait a minute, I want to modify that statement. I'm not claiming, in this
particular article, that there's anything wrong with Java as an implementation
language. There are lots of things wrong with it but those will have to wait
for a different article."

------
extension
Java has pointers. What it doesn't have is pointers overloaded as arrays and
iterators, pointers to stack objects, pointers to pointers, or pointers with
undefined values.

Point being, there's nothing wrong with pointers but there may be something
wrong with the way memory is used in C.

