Alistair has posted 1 posts at DZone. View Full User Profile

Java Isn’t The Problem

06.16.2008
| 17577 views |
  • submit to reddit

Quite a few people recently have been blaming Java for part of the downfall in current computer science (CS) graduates. While I don’t particularly like java, I’d like to go to its defence to say that teaching Java is not the real reason that a lot of CS graduates are no good these days. I know this is a touchy subject for some people so I apologise in advance if I’ve offended anyone.

It’s not about Language

To jump straight into it, the first language that students learn doesn’t have a lot to do with how good they will end up. Most of the “core languages” (Java, C#, C/C++, VB.NET etc) that you see being taught at universities allow the teaching of the core programming principles:

  • Low Level - sequence, conditions and loops
  • Mid level - functions, objects and recursion
  • Hi Level - Modular design, design patterns, API creation
  • High level optimizations - orders of complexity and algorithmic optimization

These principles cover a large amount of “learning to program” and you can teach all of them in any of the languages listed above. So what things are missing from some of these languages (particularly, Java)?

  • Pointers
  • Low level optimizations
  • How operations map down to machine code

The important point here is that these are a small subset of the skills required to program and they don’t require the first language that is taught to students to be C/C++ (or equivalent). Teaching these languages early on is definitely required; however they can easily fit outside the scope of the core introduction courses. The extra bonus from not teaching C/C++ as the first language is that it forces students to learn at least two languages during their first steps into programming and this is a good thing.

So what is the problem with CS graduates?

1. Lack of Passion

Basically it comes down to the fact that lecturers aren’t getting students passionate about programming. One of the key qualities I look for in a great programmer is their love for programming. I’ve found that the best way to get passionate about something is for someone to pass their passion on to you. The best way of doing this is through teaching. I had this very problem while at university and thankfully during my course I did some Microsoft training where our teacher’s passion was passed on to me.

It seems that lecturers are confusing fun with enjoyment/passion. Something doesn’t need to be fun for people to be passionate about it and trying to make courses “more fun” and less boring is not the right approach. The ability to create something has an almost primal feeling of enjoyment and power. Lecturers need to tap into this and get students excited and passionate about what they are creating even if it is hard work.

2. Lack of algorithms and Mathematics

One area that could easily be seen as boring is algorithms and mathematics. If not taught correctly this can certainly be true. However these are a core part of learning to program. The fact that they are language independent proves that Java is not to blame, and that they are more important than mere language choice. With a solid understanding of algorithms and mathematics, programmers can write good code in almost any language.

If algorithms and mathematics are being dropped because lecturers think they are too boring, they need to find someone that can make them exciting! To give an example, I was taught matrix math both at high school and at university. At high school I understood it straight away and had no issues with its use. At university we spent just as long learning it, however it was so convoluted that it almost confused me into forgetting what I had initially learnt. The way in which it was taught was both dry and boring, but also counter-intuitive to the average student that doesn’t have a PHD in mathematics. Any subject matter can be boring if taught badly, lecturers need to stop blaming the content and start looking at their teaching styles.

Conclusion

So the problem at the moment isn’t java but instead the courses and those creating them. I don’t think it matters what language you teach. Without creating passion, teaching core algorithms and mathematics students are never going to be good programmers.

From http://www.doolwind.com/blog

Published at DZone with permission of its author, Alistair Doolwind.

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)

Tags:

Comments

Maxim Zakharenkov replied on Mon, 2008/06/16 - 11:23am

- Similar topic was covered recently by Cay Horstman in his blog: http://weblogs.java.net/blog/cayhorstmann/archive/2008/06/what_do_cs_stud.html

There are also several other aspects covered there.

 

Max Smart replied on Mon, 2008/06/16 - 11:26am

Didn't really know this was a problem to start with. I've been out of college for about 12 years and I can tell you the quality of the people in the industry proves your points.

If I was to take a guess at what the real issue is it would be based on your point about passion. Even back 12 years ago the Web was just starting out, people like myself were in the know preaching to others about this thing called the Web. Writing programs were still mostly windows/mac based. College courses were mostly C/C++. So back then you really needed to want to be in CS because the courses were not really "friendly" to put it nicely.

My guess is now the Web is taken for granted, CS courses are dumbed down to fit "Web friendly technology". People take CS courses not out of the love or passion but because it's the common thing to take for doing Web stuff, and make good money. Just my 2 cents.

Chris Keene replied on Mon, 2008/06/16 - 12:12pm

The problem is not and has never been the language. The problem is that the language is and has always been controlled by a commercial entity that was more interested in making a buck than in making a great language. The first time I met Alan Baratz, he told me two things: 1) that Java was going to be a $1B business for Sun within 2 years and 2) that they could not afford to license our O/R mapping software because they had to be able to give Java away for free to compete with Microsoft.

This Normal 0 false false false MicrosoftInternetExplorer4 /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} schizophreniahas continued even to this day - just look at the Java FX debacle, in which Sun once again is trying to shove a DOA, me-too Java client down the community's throat rather than putting its weight behind one of the many open source Ajax toolkits. See <a href="http://java.dzone.com/articles/java-has-flu">the Dzone posting on Java has the flue</a> for more!

Cody A_ replied on Mon, 2008/06/16 - 12:15pm

I think you've gotten this one right, Doolwind.

I recently graduated (Oct 06) and I can remember all too well how tedious our programming work was. We were taught 3-4 C++ courses as a pre-req. and finally an intro to Java. I can truthfully say that the C++ foundation was a huge help in learning the concepts of Java (mainly the course surrounding OO design) When it comes to the lack of passion between students/professors, I think its a combination of a learning curve (for those of us whom need to hear things at least twice), and project choice. (on the professor's side)

 I could see students and professors having more "passion" if everyone is on the same page, but at a large university this can be very difficult to achieve. Therefore, the professors are stuck giving monotonous assignments out to students who can program them in their sleep. If there was a way to separate the students at the lower end of the curve from those who are more advanced, I think that professors would have the flexibility to be "passionate" about their teachings, rather than trying to get everyone learning at the same level. (DOES THAT MAKE SENSE?)

Just my opinion. 

-dzoneCody

Raveman Ravemanus replied on Mon, 2008/06/16 - 12:47pm

I remember my first programming class, i had turbo pascal and it was very boring. we just did some useless stuff. i think the power of programmin is to do usefull stuff. maybe i write weird code at my job and at home, but i never had to use anything that i learn on mathematics (except *,+,%, / operators). I did some graphic calculation for pdf rendering, but that was just using basic math. I dont understand the need for algorithms also, i only had to remember how to do sorting for job interviews(many of those people dont know that it is in java.utils.Collections or maybe its too slow for them). If i need to calculate the shortest road between two point i can look-up algorithms on-line (or maybe just find ready to use lib). i think the problem is experiance and not job experiance, but coding experiance. If you only write simple algotithms at work you wont be a good programmer. when i started programming i wrote old-school c-style very compex algorithms and then i patch it to do more things and so on and on. maybe that is the right way to start programming ?

i think the problem is that too many people are programmers because they learn it at school and are not lazy enough to be admins. 

Slava Imeshev replied on Mon, 2008/06/16 - 6:30pm


I have had a chance to talk to people who have taught CS for quite some time. I have taught a releated course myself (microprocessors), which has not been extensive but let me deal with students face-to-face.

At the time the conclusion was that some 2 to 3 percent of graduates had that "passion" or talent for the profession. Personally I am not sure if this is a problem. Passion is good but there is work to be done, and lots of it.

Regards,

Slava Imeshev

Cacheonix - Distrbuted Java Cache

 

Jakob Jenkov replied on Mon, 2008/06/16 - 3:40pm

I  think Hollywood is to blame :-)  Teenagers today grow up believing that life should be ever exciting and fun, like  in the Hollywood movies. Guess what? Life isn't. Work hard, keep your mouth shut and get your work done. Its not fun. Its surviving. Its life. CS is not always fun to learn, nor to do. Football isn't much different. It is fun while you play with all your friends, but once you go pro and perhaps even get benched, its hard work like every other job. Work doesn't have to be fun. It has to put food on the table.

... I'm wondering everyday when I myself finally realize that :-) I feel like a spoiled teenager at work sometimes. Why do I have to learn this? Why work with that crappy legacy system? Why do I have to sit inside when the sun i shining outside? Why can't I just sit in the shade of a tree and sleep? .. pick some fruits when I get hungry? ... and then I tell myself "shut up, open the books, learn the stuff, finish your work". I believe Bill Clinton said that the US greatest threat was people getting too comfortable. This is definately true in Denmark too.

Nick Brown replied on Mon, 2008/06/16 - 4:09pm

Actually if you were to read the Dewar/Schonberg article (and not just all the half-brained blog entries that have been written because of it), they are not blaiming the Java language at all. What they are blaming is curriculums that are apparently becoming more and more common which focus not on mathematics and the fundementals of programming, but on teaching programming "cookbook style" with a focus just on how to use the Java APIs.

Of course I can't comment on the validity of that claim as my univeristy (Virginia Tech, class of 2004) did teach me all those fundementals (in fact, I remember complaining at the time that we weren't learning enough practical stuff, though that might have been partially my fault for double majoring in math and taking a lot of theoretical courses by choice).

Slava Imeshev replied on Mon, 2008/06/16 - 6:47pm in response to: Nick Brown

[quote=nwbrown]

What they are blaming is curriculums that are apparently becoming more and more common which focus not on mathematics and the fundementals of programming, but on teaching programming "cookbook style" with a focus just on how to use the Java APIs.

[/quote]

Funny that you said this because my recent exeprience with fresh grads was exacly this: deep knowledge of how to traverse red-black reverse trees and total lack any connection with real world.

CS depts could look at med schools as a model. For example, the first three years could be very heavy on theory and then the next three would be almost solely supervized practice.

Slava

 

Nick Brown replied on Mon, 2008/06/16 - 7:09pm in response to: Slava Imeshev

Well thats not all within the university setting. Med schools generally work closely with hospitals, which is where the students get their real world practice (first as interns, then as residents). So it would require lots of support from employers, not just the schools. Now in fairness, the current program does include internships/co-ops and undergraduate research programs which can give this if students take advantage of them (I know I did and it did help me begin my career). But I think this could be improved if employers were to stop treating fresh grads with nothing but a BS in CS ready to go potential employees and instead spent some time training them with the specific technologies they will need to use. I know some employers do that, but they seem to be in the vast minority.

Slava Imeshev replied on Mon, 2008/06/16 - 9:44pm in response to: Nick Brown

[quote=nwbrown]Well thats not all within the university setting. Med schools generally work closely with hospitals, which is where the students get their real world practice (first as interns, then as residents). So it would require lots of support from employers, not just the schools. [/quote]

Yes, that's what I meant. 

Regards,

Slava Imeshev 

Mike P(Okidoky) replied on Mon, 2008/06/16 - 11:57pm

I initially learned how to program through an obsession to re-create arcade video games.  I was forever obsessed of being able to play space invaders and pac man at home.  If I had to teach young people how to program, I would teach how to create these types of simple video games.  It's fun, and very educational.

Kristian Rink replied on Tue, 2008/06/17 - 1:16am

Agreed on both (1) and (2), and, alike some others, adding "bad educational methods" to the list of problems. Looking at my programming education history so far:

- C/C++ education, basically, focused on doing pointer arithmetics for pretty much two semesters. Though this is to a good extend helpful to do meaningful C development, it probably won't get you anywhere next to a well-crafted, working application suited to meet its requirements.

 - Java development, in our case, has been taught by someone who obviously spent half of his life working with C and taught Java accordingly (few large methods, using classes just in situation where "required by the framework" (Swing, ...)). 

Overally I am convinved the choice of language is not the problem. Maybe however in many situations people should learn that the language is next to the last tools to make use of in the process of software development, and quite a bunch of "important" things have to be mastered before dealing with that...

Cheers,

K.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.