
The 'Anti-Java' Professor and the Jobless Programmers - raganwald
http://itmanagement.earthweb.com/entdev/article.php/3761921/The+Anti-Java+Professor+and+the+Jobless+Programmers.htm
======
akeefer
I'm no fan of universities focusing just on Java programming either, but the
contentions Dewar makes are completely ludicrous. Either he's deliberately
distorting things to make his point or he's completely out of touch with real-
world engineering projects; Java is pretty much the main language for business
programmers these days, and plenty of things like financial transaction
systems are written in it, so saying it's only used in simple web applications
is laughable. A large percentage of people writing simple web-apps have moved
on to Ruby and Python anyway, leaving Java to be used primarily for back-end
enterprise systems.

Similarly, the idea of quizzing candidates on whether they can diagnose and
track down compiler or processor bugs is similarly useless; there are far more
critical skills to test for in an interview. If I was interviewing someone for
a position at a hardware company writing software for prototype chips, then
I'd probably care; if the job was for about 98% of the other programming jobs
in the world hardware knowledge is about 152nd on the list of things I'd care
about.

It's hard to imagine how someone could take this guy as an authority on how
universities should educate people and what job skills graduates will need
when he's so obviously out of touch with the real world.

~~~
jfarmer
Somehow I imagine him thinking Google is a "simple web app."

~~~
YuriNiyazov
The point is not that he thinks "Google is a simple web app". His point is
that the vast majority of engineers that learn Java as their first programming
language, and never hit systems-level stuff below that are unlikely to ever
create a system as complex as Google. That seems plausible since we know how
much low-level hardware stuff Google does to keep their systems running, from
running a custom Linux kernel to writing their own in-house programming
languages.

~~~
jfarmer
Right, but no engineer has the breadth and depth to do all these things.

If my interest is in consumer internet applications learning about compiler-
level and hardware-level bugs is probably not the best use of my time.

Do you think the first version of Google took all this into consideration? I'm
pretty sure they used NFS for distributed storage!

------
prospero
_What we need are software engineers who understand how to build complex
systems. By the way Java has almost no presence in such systems. At least as
of a few months ago, there was not a single line of safety-critical Java
flying in commercial or military aircraft._

Such a breadth of options! Surely if we teach students how to create avionics
systems for commercial aircraft _or_ military aircraft, they will never want
for jobs!

If he were to point out that using _any_ single language as a vehicle for
computer science is bad because it ties the knowledge to APIs rather than
underlying concepts, that would be one thing. If he were to further point out
that a lot of complex systems nowadays aren't written in a single language,
and that being able to quickly acquire competence in new technologies is
possibly the most valuable skill a university can give to its students, that
would lend even more weight to his argument.

But no, he's just whining that no one thinks Ada is relevant anymore. I'm sure
he's having trouble finding fresh college grads who share his passion for
safety-critical avionics systems, but I really can't muster up that much
sympathy.

~~~
michaelneale
A long long long time ago (my first out of uni job) I used to do machine
control systems (thankfully, not for aircraft) but there were often safety
issues (so you didn't burn/crush/soak people with acid etc). We never used a
turing complete programming language, as it was seen as too risky, was always
something primitive like ladder logic (which seemed intuitively easy to reason
over and forced simplicity and fail safe behaviour).

I am not sure what has changed, but I wouldn't want to be doing stuff that
different now with a general purpose programming language (be that Ada, Java
or for reasons I would never understand, C).

~~~
prospero
I dunno, you deal with the risk of standing on thin air no matter what you
use, unless you've designed your device from the silicon up.

There's not a strong argument to be made for using Java in an industrial
setting, but I'm not clear that a finite-state machine that compiled down to
JVM bytecodes would be inherently less safe than anything else.

Ada doesn't guarantee the correctness of your program, and C certainly
doesn't. This interview reads more like an inarticulate complaint about how
things keep changing than a real argument against trends in education.

~~~
cconstantine
Minor nit-pick. I work around (but not with) ada code, and a common pattern is
that if you can get your ada code to compile; it's pretty likely that it's
safe.

If you're just saying Ada doesn't guarantee that the program does what you
really need... no language can do that.

C is the 2nd most unsafe language I've worked with, asm being the first.

~~~
prospero
_If you're just saying Ada doesn't guarantee that the program does what you
really need... no language can do that._

That was basically my point.

I agree Ada's pretty cool, but Dewar listed Ada and C (!) as the only two
languages suitable for safety-critical systems.

I mean, really. What does one say to that.

~~~
cconstantine
That was poorly worded. I meant to end that sentence by saying I agree with
you :/

What does one say to someone who is using C because it's suitable for safety-
critical systems? Please don't!

------
lacker
This professor is also the CEO of AdaCore, which sells an Ada development
environment and other Ada-related tools. This explains why he is opposed to
Java and is so bothered by people who file sloppy bug reports for compilers.
Also his claim that "Java has almost no presence in complex systems" is
ridiculous. This article is junk.

~~~
pmorici
I don't think those were his main arguments. His strongest argument is much
more about out sourcing and that students need to be able to do the hard jobs.
We should also remember that the prof. didn't write the article himself so
this is some journalist paraphrasing his words.

I think the bottom line is that Students who's university career consists of
only programming in Java miss out on a lot of the low level technical details
about how a computer works. A good CS program will teach concepts instead of
tools and languages. That would be called a "technology" degree. There is a
place for Java but to teach it exclusively at the expense of C, C++, Assembly,
etc... is foolish and leads to exactly what this article says it does people
who don't really know what they are doing and are easily replaceable by cheap
overseas labor.

~~~
colgur
"[...] students need to be able to do the hard jobs".

Difficulty comes in all shapes and sizes. Your next point is better: "[...]
teach concepts instead of tools and languages".

That approach to education sees any language and/or run-time environment as an
opportunity to work with an underlying concept.

A study of any language or run-time to the exclusion of an underlying concept
is short-sighted. Any student with a language-centric approach to learning
faces many difficulties in their professional life. We must all be able to
adapt to changes in our field. We must be able to separate fad from
fundamentally different.

------
felipe
I think the main source of this confusion is the lack of understanding of the
difference between computer science and software engineering:

 _"A scientist builds in order to learn; an engineer learns in order to
build."_

<http://www.stevemcconnell.com/psd/04-senotcs.htm>

It seems to me that this professor is teaching CS to students who actually
should be enrolled in a SE program.

------
henning
> You begin to suspect that a problem you are having is due to a hardware
> problem, where the processor is not conforming to its specification.

What is the probability of that happening?

The last time this happened in any significant way was the FDIV bug on the
original Pentium. That was 1994. It was extremely rare in practice. That's a
ridiculous question and completely irrelevant to 99%+ of software development.

I agree with sofal that reading all these "you should think and work exactly
the way I do or else you're stupid" pieces I see get really fucking old.

Fucking around with disassemblers and assembly language instead of just
running on AMD chips instead of Intel until the problem gets resolved is a
massive waste of time.

~~~
dfranke
I think you're missing the point. He's not looking for hardware hackers. He's
looking for people who know how a computer works. God job candidates should
have no trouble answering that question regardless of whether they've actually
ever seen a CPU bug.

~~~
sofal
" _You begin to suspect that a problem you are having is due to a hardware
problem, where the processor is not conforming to its specification. How would
you track this down? How would you prepare a bug report for the chip
manufacturer, and how would you work around the problem?_ "

Actually he's looking for people who know how to track down a processor bug,
report it appropriately to a manufacturer, and work around it. Would it
demonstrate complete incompetence and a failure of my CS education to answer:
"I would learn how to track it down, learn how to submit a report, and then
figure out how to work around it."?

It's one thing to expect job candidates for AdaCore to be experienced
embedded-system developers, but it's another thing to expect university CS
departments to throw their resources into that small corner of computer
science so that he can hire new grads without having to bring them up on
embedded systems work. I'm sure that CS departments with tons of resources can
provide an embedded-systems track for undergraduates.

------
rkowalick
Honestly, my introductory CS class was in Java, and the dependence on
libraries is complete BS.

We were required to write all of our own data structures/classes as we learned
them.

After we proved our competence in making proper structures, our professors
would then allow us to use certain classes from libraries to get to the meat
of more advanced topics.

While I don't agree with using Java as a first CS class language solely based
on popularity, the future of students who take one or two CS classes is
greatly benefited by the word "Java" on a resume. Java isn't THAT bad. And at
least the C-style syntax matches up with a lot of the most popular languages.

~~~
andreyf
_And at least the C-style syntax matches up with a lot of the most popular
languages._

That's a low blow :-P

------
Maro
I think some of the commenters are missing the underlying message here.

The point is that if you start out by using a really high-level language like
Java or Ruby or, going even higher, JavaScript then overall you won't be a
very good _engineer_. To give an extreme example, JavaScript is Turing-
complete, so you can re-implement anything in it, but I still wouldn't hire
somebody who's only ever used JavaScript, even if he wrote an "OS" in it.

The reason is simple: sometimes you have to go down to the C/C++ level,
sometimes you have to go down to the TCP/IP level, and so on. If you can't do
that, you're not as valuable as someone who can, and you'll be outsourced.

I can even give an example from my own life: For 3 years I worked as a C/C++
programmer, where the work involved lots of debugging, dealing with memory
managers, all kinds of fairly low-level crap. It wasn't rocket science, but it
required a different mindset then working at higher levels. I hated it,
because I wanted to do more interesting, more _modern_ stuff. So I quit. The
company desperately tried to keep me on, but I wouldn't. I went to work for a
smaller company, like a startup, where I was given a small project to design
and implement on my own, since I was hired as a senior programmer. Now, I'm
not a particular fan of Java, but this project just cried out for it. 1 year
later I was basically layed off (among other reasons) because the company
realized that since the work I'm doing is not low-level, they can hire any
"PHP-monkey" for 1/3 of what I make. I've basically been "outsourced",
although not geographically.

So the lesson to engineers is: don't go work for small webby startups unless
you're a co-founder, because most of the stuff they do requires moderate
skills and thus they don't need to pay good engineers, plus they're always
short on cash =)

~~~
sofal
How does "low-level" imply difficulty? Why are low-level programming tasks
considered harder than tasks higher on the abstraction ladder? I don't think
the difficulty of your job has anything to do with with the level of
abstraction you're working at. If you hold job difficulty constant and vary
the level of abstraction you'd probably see different salaries based on the
supply and demand for programmers working at that level.

Low-level is not superior to high-level. They each have their own different
challenges. I don't think it is a bad thing to focus on high-level for your
career. That does not mean spitting out half-baked PHP web pages. Of course
it's helpful to have been exposed to low-level concepts at some point.

This is the same tired old argument about how real engineers program in binary
and you ignorant handicapped kiddies can only program in C. The only thing
that changes is the level of abstraction at which the 'real engineers' work,
and that just keeps going up.

Somewhat related: <http://www.yosefk.com/blog/low-level-is-easy.html>

~~~
Maro
The point is, low-level, as the name implies, is at a lower level than high-
level. So every once in a while, you'll run into problems at the higher
levels, and you have to dig into lower level stuff to solve a problem.

So what do you do if you cannot because you have no conception about the
lower-levels / overall architecture? I've seen PHP programmers run into bugs
and throw up their hands and yell "It just doesn't work! But the bug cannot be
in my code!". Of course the bug was in their code, they just have no deep
understanding of even their own environment.

------
scott_s
Using Java as the primary teaching language in a CS curriculum does not
necessarily mean the students are relying on libraries. From what I can tell,
it's his _perception_ that there is more reliance on libraries in course work.
He mentions no studies.

The main language we used was C++ (although for the intro course, it was the C
subset of C++, but with C++ style I/O). In our classes we were expected to
implement our own data structures, we weren't allowed to use the STL (except
for strings). When we got up to classes where they assumed we knew how to
implement the classic data structures (say, compilers), we could use the STL.

Personally, I don't think Java is a good first programming language. But it's
still possible to construct good courses that use Java - it depends more on
how the course is structured than what language is being used.

------
keefe
'Furthermore, Java is mainly used in Web applications that are mostly fairly
trivial,'

I'll add an Nth comment to how ludicrous this article is. Is building a highly
scalable server really so trivial as all that?

Higher levels of abstraction are good. Using libraries and avoiding low level
recoding of basic functionality is good. Get serious this is so obviously
trash it's not worth commenting further.

------
baha_man
'students' reliance on Java's libraries of pre-written code means they aren't
developing the deep programming skills necessary to make them invaluable...
they are not fully prepared to compete against what is now a global field of
rigorously educated software developers'

I think it's fair to say that most professional programmers in developed
countries (a) make plenty of use of existing libraries, (b) may not have 'deep
programming skills', and (c) probably don't have a formal education in
Computer Science. It also seems unlikely that the majority of developers in
India or wherever have these either.

The main reason it's hard for a CS graduate to get a job seems to be that
agencies and companies want _commercial_ experience, which can be hard to come
by.

'Dewar says that if he were interviewing applicants for a development job, he
would quickly eliminate the under-trained by asking the following questions...
"I am afraid I would be met by blank stares from most recent CS graduates"...'

...and by many 'professionals' too, I would imagine.

~~~
wallflower
The beauty of Java is that it frees the student up from making low-level
mistakes (pointer mis-initializations) and spend more time on design/making
and fixing higher-level issues. Getting core dumps in GCC while compiling C
code ain't the most stress-free experience.

~~~
jrockway
_spend more time on design/making and fixing higher-level issues_

Of course, there are "higher-level issues" that you can't express in Java.
Java convinces students (and professors, sadly) that the only kind of OO is
single-inheritance with interfaces and no MOP. Java convinces students that
programming is all about making the not-really-static types match. I won't
even mention what a hack functional programming is in Java (and I'm sure most
students never even hear how to hack in FP to Java). Checked exceptions were
widely considered a huge failure. Honestly, I think most of the time you'll
spend with Java is going to be time spent working around its retarded
limitations. Do we really want to teach kids that programming is about dealing
with limitations in your tools?

At the very least, limiting yourself to Java limits your ability to learn
programming. Java isn't a very good language. It is missing features that were
widely considered "a good thing" 20 years before its invention. Note that I
don't care about teaching memory allocation and freeing the memory, that's
monkey work, not computer science. So I'm not advocating teaching C. But
languages like Lisp will let you teach all the computer science without
workarounds, and still have all the "safety" of Java. (Plus, Lisp programmers
get paid a lot more than Java programmers. Surely that's a selling point?)

------
sofal
I'm tired of reading about how one person's favorite position on the
abstraction continuum is the most important. Or at least I'm tired of reading
that argument with nothing to back it up. Sure, CS departments may benefit
from changes, but I'd like Dr. Dewar to tell us why safety-critical systems
programming, compiler debugging, and hardware spec testing are what university
CS departments should focus on.

~~~
davidw
To be fair, there was a brief bit along the lines of "because the easy, low-
hanging fruit, web apps in Java jobs are the first ones to get outsourced".
Whether that's really true or not is another matter.

~~~
sofal
I'm all for shifting CS education away from easily outsourced commodity
skills, but Dr. Dewar goes beyond that and argues that safety-critical
embedded systems is where a CS education should be focusing. I'm sure if you
asked a CEO of another tech company with a different technology focus you'd
get a completely different take on what a CS department should be instilling
into its students. Dewar is just another special interest lobbying for changes
that will benefit his own industry.

------
jfarmer
In a nutshell: People who don't learn the skills required to work in my
problem domain will be outsourced. So, learn them (and then come work for me).

------
asif
The broad generalizations in Dewar's opinions are unhelpful. If you want to
write software for military airplanes, then you should go ahead and learn Ada
(whatever that is). If you want to build applications for the web or for "low-
tech" enterprise, then you'll probably be better off learning Ruby, Python,
Java et al. Both are perfectly viable ways of making a living and there is
plenty of demand for both types of programmers.

~~~
astine
_then you should go ahead and learn Ada (whatever that is)_

<http://en.wikipedia.org/wiki/Ada_>(programming_language)

In brief Ada is a safety and reliability oriented language popular in
aerospace and the military. It is the official (computer) language of the US
army.

~~~
asif
Perhaps my sarcasm was not communicated properly. In any case, I'll pass on
this one.

------
lupin_sansei
"In essence, he said that today’s Java-savvy college grad is tomorrow’s pizza
delivery man. Their skills are so easily outsourced that they’re heading for
near-term obsolescence."

That would only be the case if there was a finite amount of programming to do.
Since there isn't there's room for local and outsourced programmers.

------
mroman
I think that part of his point, which he has failed to articulate, is that
future programmers need to undergo the inherent rigor of low level programming
so as to build the mental muscle - so to speak - needed to solve highly
complex problems. I believe a suitable analogy is how Roman legionaries
initially trained with lead swords.

