Why Universities need to stop teaching Java
I remember my first days at university, when I was told that I had to learn an obscure programming language called ML. And being told that I wasn't going to learn how to program in C for 2 years (C was the dominant language in the market back then) - and Java wasn't on the course at all. My thoughts at the time that this was not correctly preparing us for the outside world and that the Computer Laboratory, headed by the late and great Roger Needham, was outmoded and had lost touch with the outside world.
My thoughts on this matter were compounded by Roger's unintelligible lectures on Algorithmics (was he drunk or was that just the way he was?) and the many other bizarre and obscure courses that were forced upon us. Compiler Theory? I don't want to ever write a compiler, why do I need to know that?
As my career has progressed however, it occurs to me that this provided me an end-end perspective on the technology world. We wrote compilers and programmed actual physical circuits. We learnt how to write security exploits (and tried it out on our peers, sorry Simon, I know you will forgive me one day for what I did to your thesis). I might never write a compiler (I haven't yet, let's hope it stays that way) but I know how one works. I suspect that 12 years on, this gives me a competitive advantage because I have a high level picture of how it's all connected.
Where they failed us at that time was to link it together to Business Process knowledge. I never understood why it was all connected and how business and IT interact – and I suspect this style of teaching has compounded the typical business/IT wars that have been going on for the last 20 years. They didn't explain the large IT business processes like procure to pay or order to cash and we were the poorer for it.
Where are tomorrow's thought leaders?
We have a serious problem in the market today because development is being outsourced to India and China which means that the market is no longer employing junior developers in the UK. All well and good, but where will our principal technical and solution architects come from in 10 years time? Where are our future practice leads in the UK market? Who is going to lead us?
So we sought to make sure that we build them in house: for the good of the market and for selfish reasons. In any case, the SAP market has a dearth of real innovators. It's great at process efficiency. Building complex supply chain systems or reducing debtor days. Where we're not great in the SAP space is in building great usability-focused solutions.
And this is what tomorrow's SAP market is going to be all about – driving competitive advantage through innovation. We need people who can make a Windows Phone 7 app next week to allow people to pay their gas bills on the move. Or whatever else comes along. This is to say we need technologists who are not evolutionary – they are chameleons who can do whatever is needed.
Onto the Bluefin Solutions Graduate Program
When I fast forward 12 years to our graduate recruitment program, I found a very interesting learning experience. Bluefin Solutions was looking to recruit some top technology graduates, which would sit within my business unit and I decided to directly involve myself in the process because, as you may have figured, I have some strong opinions.
We took this pretty seriously and I'm told we had some 1000 applicants. Given that we've not got a huge recruitment team, I suspect they worked pretty hard. I spent several days (several evenings, in other words) researching interview processes and looking at how great technologists are made.
We had quite a lot of applicants with Computer Science degrees that made it through to the final stages and this is where it got interesting. To be clear, especially if you are reading this and thinking of applying to Bluefin Solutions, that we don’t just employ people with Computer Science degrees – they are just one of the pools of people we employ from.
I read in excess of 100 articles and research articles on current thinking and there is some incredibly interesting research on this topic. My favourite though was a blog by Paul Graham titled Beating the Averages. It captures the problem precisely. The Blub Paradox states that unless you know the most powerful programming language, you always think of what you have as being good enough because they operate in the context of what they know "What he sees are merely weird languages. He probably considers them about equivalent in power to Blub, but with all this other hairy stuff thrown in as well. Blub is good enough for him, because he thinks in Blub."
The Blub Paradox is a serious problem in the SAP space. The latest NetWeaver 7.x versions of the ABAP programming language are now pretty powerful and are a long way from the R/2 COBOL style that we once knew. ABAP adopts many of the latest OO concepts and a good foundation in programming theory is of serious benefit.
What’s wrong with Java?
There’s nothing wrong with Java. It’s a neat, strongly typed, language, which is simple enough to explain to just about anyone and whose documentation is second to none. It encompasses object theory. It runs on any platform. It’s great. I was never taught Java and I can get by if I need to fix things occasionally. And this is the point – a good programmer will pick up and run with a language like Java in a few days and this is mostly to learn the IDE. The IDE (f…..) is the key to good programming practice and this is where you should spend your time.
The problem with Java is that it epitomizes the Blub Paradox. If you are a Java programmer than learning ABAP will be hard. Objective C harder – and this is the problem.
Who knows what is coming next because Oracle has bought Sun Microsystems who were for years the custodians of Java and slowly “got” the Open Source software model. Oracle doesn’t have a good track record in Open Source and it is not clear if they will be a good custodian of Java. Hasso Plattner, the Chairman of the Advisory board at SAP doesn’t get on so well with Larry Ellison – if you don’t believe this then read this news story.
Vishal Sikka, the CTO of SAP is very closely aligned with Hasso (though he’s not reported to have mooned anyone at Oracle yet) and so it’s mooted that for both political, commercial and personal reasons, SAP are moving away from Java. Maybe they are and maybe they’re not and it certainly won’t happen quickly if they do. But the point is clear – aligning yourself to one programming language just isn’t enough.
Integration is the norm
Segwaying onto the next piece, this is compounded by the fact that integration has become the norm. The world is now a very heterogeneous place and systems talk to systems, all the time. Of course as an ABAP programmer, I can write interfaces in my walled garden that allow connections to the outside world. We’ve been writing interfaces for 20 years after all. But what if I want to write an iPhone app that connects into ABAP? Well then you need to find an iPhone developer, and try to speak in the same language.
What if you just picked up a book on Objective C and wrote the iPhone app yourself? If you had a background in development then that would be pretty easy. But as a Java developer, you will see as Objective C as a bit like Java but with lots of nasty stuff and none of the structure. Poor error and stack handling. An unintuitive IDE. The Blub Paradox again comes out.
A message to the university lecturer or head of department?
If you’re reading this and you fall into that category, then please take a moment to think. The market only has a short term need for vocationally qualified programmers who know Blub. If what your course does is to train them up in a language which is a marketable skill for now, you may be setting them up to fail in the wider scheme of their career. And what’s more, in the complex world of Enterprise IT, they won’t be skilled enough to deal with complex integration and heterogeneous IT systems.
We need a return to students who come out with a solid knowledge of algorithms. I want them to be able to describe the difference between a Quicksort and a Bubble Sort and how to write a hash table. They need to know Object Theory and Lamba Calculus. I want to sit back and discuss Deontic Logic. These things might sound irrelevant in the commercial world but they’re not – it’s what makes great technologists.
Get them on the Xilinx programmer and make them burn real chips, not just the ones from the Van of Death at 2am. Make them feel the disappointment when they realise they wrote sloppy code and burnt another dud CPU. And make these courses compulsory - students don’t ever know what the right electives are.
Above all focus on giving the next generation of students the tools to learn ABAP or Java. But don’t focus on the programming languages too much because if you’ve skilled them up correctly for us, we can teach them ABAP in days, and we know how to turn great technologists into great ABAP programmers. What we can’t do is turn a bad Blub programmer into a great technologist. That takes 3 years of education at a decent University.
Will program ABAP code for food
I love this picture and it epitomizes the problem. Actually it’s bordering on abuse of the homeless, but that’s a separate battle. If you’re a student or prospective Computer Sciences student then I hope my message is already clear. I’ll repeat it, just in case…
Find a course that turns you into a great technologist and not a Blub programmer.
Go to the Java electives if you so wish (actually they’re probably compulsory so you’ve got no choice anyhow) but make sure you do the core stuff first. Whatever you do, don’t avoid going to courses on Compiler Theory because they seem hard.
This will ensure that if you want a career in Enterprise IT, you will be able to be in the top few percentiles of Computer Science graduates – and this will give you a real competitive advantage. Unfortunately this does mean some hard work and difficult electives, but it will pay dividends.