Tuesday, January 08, 2008

Programming in JAVA Damages Brain Cells!

Heh. Ok, maybe that's a bit overly sensationalized, :)

To provide some context for my post for those that don't know my background: I've been working in the IS/IT industry for over 20 years. I was University educated as a Software Engineer back in the 90s and have programmed in Pascal, Basic, COBOL, FORTRAN, C, C++, Ada, Lisp, 6809 Assembler and VAX Assembler. For the last 12 years I've been a consultant in the IT, IT & Operations Management and Project Management space to a variety of clients ranging from small companies to large Global spanning Enterprises.

Some of you who have known me for a long time heard me rant about this over a decade ago when the new Point-n-Click, Drag-n-Drop, Visual "Programming" was starting to become the latests rage. So I guess this blogpost is just my little way of saying "Neener Neener Neener...I told you so...I told you so", but in a more mature sophisticated fashion.

A recent article in CrossTalk: the Journal of Defense Software Engineering asks the question "Where are our Software Engineers of tomorrow?" The observation that they put forth is "It is our view that Computer Science (CS) education is neglecting basic skills, in particular in the areas of programming and formal methods. We consider that the general adoption of Java as a first programming language is in part responsible for this decline. We examine briefly the set of programming skills that should be part of every software professional’s repertoire."

The article itself touches on a few "techy" concepts that a non-programmer might not grasp in full, but not so much that the main ideas are missed by the reasonably educated non-technical reader. So I encourage you to read the article for yourself. However I can sum it up as follows.

1) Math requirements in CompSci programs have been shinking

2) To make programming "more fun" and easier, Java has become the most widely used language in introductory programming courses.

3) Observational evidence showed that Java programming courses didn't prepare students for basic systems courses, much less more advanced courses.

4) Students had difficulty writing programs that didn't have a graphical interface.

5) Programmer's thinking habits are strongly shaped by the first programming language they learn and those habits are hard to shake when you only ever progame in one language.

6) Programmers need to be comfortable in a number of different languages.

7) Industry (specifically T&T, IBM, Intel, Bloomberg, NI, Microsoft, Lockheed-Martin, and more) has begun to complain to Universities about their approach to training and the quality of CompSci professionals they produce.

8) "A well-rounded CS curriculum will include an advanced course in programming languages that covers a wide variety of languages, chosen to broaden the understanding of the programming process, rather than to build a résumé in perceived hot languages."

"The irresistible beauty of programming consists in the reduction of complex formal processes to a very small set of primitive operations. Java, instead of exposing this beauty, encourages the programmer to approach problem-solving like a plumber in a hardware store: by rummaging through a multitude of drawers (i.e. packages) we will end up finding some gadget (i.e. class) that does roughly what we want. How it does it is not interesting! The result is a student who knows how to put a simple program together, but does not know how to program."


9) The skills of today's CompSci graduates are insufficient to the needs of today's software industry, but their skill do match well with what is available cheaply from offshore resources in countries like India and Malaysia. In other words the current system is training easily replaceable CompSci professionals.

Let me stress that last point because it's an important distinction;
the current system is training easily replaceable CompSci professionals. A new graduate might say "this is silly, Java is very popular, everybody uses Java and .Net and such, everything will be web-based, there will be plenty of work for me." The issue for a new graduate is not that what CompSci students are being taught doesn't have a use in the market, but that the skill sets that they end up with after all those years at University (and all that money) are easily available coding sweatshops in India for less than half the cost. For the more complex work, the work that is not so easily sent offshore, it would appear that the current system of education is not preparing new CompSci professionals to fill these roles to the level needed and expected by the industry. Beyond the impact to the individual new CompSci professional with their reduced market value, what does this mean to the competitiveness of the US technology market as a whole in the long term?

2 comments:

Churt(Elfkind) said...

I think you have the title right. I have programmed some Java and it is so sensitive when it comes to syntax. Just about drives me crazy. Most commands in Java have to be upper and lower case in just the right sequence. Exp: getObjectById(''). It's just obnoxious. It becomes a burden to concentrate on a program flow chart when your busy looking for the missing cap or the cap that shouldn't be there. I still can't believe that the concat operator for java is the '+' sign. That's just annoying. I realize that's not the problem with JAVA the article is talking about but it's my problem with JAVA.

As for the quality of programmers I have to agree. I have programmed in assembly, C++, java, php, visual basic and dabbled in perl. Some might not think of all those as complete programing languages but in the end they all have their quirks. If you don't have access to all the function libraries and have to build something yourself it helps to be able to program the complex stuff. The basic principles of flowcharting your program, building your function set, optimizing your code, tracking your changes and properly commenting your code are missed by many. The ability to code complex operations with as few lines as possible takes practice. Writing intricate loops and solving logic riddles is required to program well. But it's also very important to be able to figure out why you did something a year down the road. That's where the comments and change tracking comes in. I have seen code where the same set of commands was used over and over instead of making them into a function and calling them when needed. When someone takes 200 lines to do what a 4 line loop could have done if they understood the math needed to make the loop work, it just makes me cringe to look any farther into their code.

The Mad Builder of Periwinkle said...

Yup. As with many other things, the Universities appear to be favoring making things "fun" and easy to attract more students when their first priority should be providing the education that is required. Not everyone is cut out to be a CS professional. If it's too hard or if prospective students are turned off or turned away because its not fun, then they shouldn't be in the CS program IMNSHO. Fun??!? If you want fun, get a job at an amusement park making minimum wage for the rest of your life. If you want to do something more with your life, you have to work for it...and guess what...its not all going to be fun.