Why Studying C++ and Java at University led to my lifelong hatred of Programming.
How an unresolved trauma at university has led to a lifelong antipathy.
I hate programming languages with a serious passion; From Algol 60 to Cobol and from C++ to Java and everything else that has come ever since. And please don’t mention the latest incarnation —python — to me, under any circumstances, if you don’t want to end up being eviscerated on a grand scale.
The supreme paradox, here, is that my diploma and bachelor’s degree were in acquired in Computer programming and Information Systems, a lifetime ago.
For those who came of age, back in the 1990s in the United Kingdom, A levels or BTEC in computer studies meant learning about the control units (CU), central processing units (CPU), random access memory (RAM) and of course, languages, such as C++ and Java.
For all would be medium readers, already bored senseless, wondering what on earth C++ and Java are, I will provide a quick synopsis, with the aid of Wikipedia.
According to its inventor Bjarne Stroustrop, C++ signifies an evolutionary upgrade from its predecessor, C.
Its underpinning philosophy are as follows:
- It must be driven by actual problems and its features should be immediately useful in real world programs.
- Every feature should be implementable (with a reasonably obvious way to do so).
- Programmers should be free to pick their own programming style, and that style should be fully supported by C++.
- Allowing a useful feature is more important than preventing every possible misuse of C++.
- It should provide facilities for organising programs into separate, well-defined parts, and provide facilities for combining separately developed parts.
- No implicit violations of the type system (but allow explicit violations; that is, those explicitly requested by the programmer).
- User-created types need to have the same support and performance as built-in types.
- Unused features should not negatively impact created executables (e.g. in lower performance).
- There should be no language beneath C++ (except assembly language).
- C++ should work alongside other existing programming languages, rather than fostering its own separate and incompatible programming environment.
- If the programmer’s intent is unknown, allow the programmer to specify it by providing manual control.
This is essentially an upgrade on C++, unlike C++ which combines the syntax and structure for object oriented language programming, Java was built almost exclusively as an object oriented language.
This programming language was created with the following goals in mind:
- It must be simple, object-oriented, and familiar.
- It must be robust and secure.
- It must be architecture-neutral and portable.
- It must execute with high performance.
- It must be interpreted, threaded, and dynamic.
Given the highly illuminating explanations above, how did it become the object of so much hatred?
Back in the day at my old university, degree courses in Business Information Systems ( Computer studies) were all encompassing — which meant that modules (electives or compulsory) were a mishmash of the following: management information systems, network systems, ethics, project planning and management and above all else, computer programming.
My lecturers were a diverse bunch — from all over the world and the United Kingdom, but there was one thing, that they all had in common; They simply weren’t the best and they did their hardest in making sure that what was being taught was irrelevant to the real world.
My programming languages professor said that learning C++ and java was as easy as learning to bake a piece of cake, but nothing he ever said, made any sense, throughout the semester.
Part of the criticisms that C++ has had leveled at it, over the years is its complexity and Joshua Bloch, a prominent software programmer, made the following comments:
I think C++ was pushed well beyond its complexity threshold, and yet there are a lot of people programming it. But what you do is you force people to subset it. So almost every shop that I know of that uses C++ says, “Yes, we’re using C++ but we’re not doing multiple-implementation inheritance and we’re not using operator overloading.” There are just a bunch of features that you’re not going to use because the complexity of the resulting code is too high. And I don’t think it’s good when you have to start doing that. You lose this programmer portability where everyone can read everyone else’s code, which I think is such a good thing.
It was because of the profound complexity of trying to get to grips with writing a code to demonstrate understanding of the programming language that led to me lashing out at the lecturer, which all but guaranteed my failure.
Failing the programming course, meant doing a retake, which gave only a pass, which inevitably counted towards my final classification.
C++ and Java, are the single biggest reasons for graduating with a second class lower, all those years ago.
My inability to conquer this subject during my time at university, remains one of my great disappointments, hence the ferocity of my visceral antipathy, twenty years later.
If there’s any medium reader, well versed in programming languages, reading this and is in a position to recommend literature that can help in overcoming my lifelong hatred, I am open to suggestions.
Thanks very much for taking the time to read this.