A lifetime ago I used to be a developer. I started coding when I was in 9’th grade with GW-Basic on an IBM PC which ran an Intel 8086 processor with 256kb RAM. I have to admit this was the most fun I had as a 12 year old and I was hooked. I pushed the boundaries of the GW-BASIC interpreter by using commands like Peek and Poke which the elders told me to stay away from. In short Peek and Poke let you do some wild things with the language like prodding the brain of the computer. However you start to realize that as fine as an entry level language GW-BASIC was, you can only push the boundaries to an extent. (Developing a hotel management system entirely using Random Access Files in GW-Basic that used its own custom index scheme to locate records using B-Trees was quite painful).
This was all fun and good, but taking a full day to run all of the month end accounting sucked. Enter dBase III plus and Foxbase which rocked my world for the next couple of years. As I graduated high school, I got introduced to sexy Pascal and finally C – the mother of all languages. (I did dabble in some 8086 assembly, but I figured I wasn’t a masochist and gave that up).
C taught me the discipline to code right. You do not take anything for granted. You could not assume you “freed” a pointer. Or that array you allocated had enough space to capture that crazy user input which will someday cause a buffer overflow. In my first paid gig at caterpillar I had to write a symbol table implementation that created a memory manager for strings in C. This memory manager wrapped the alloc() and free() to keep track of all strings being handled within the application (that automagically built a service manual for a giant caterpillar earth mover).
At this stage I was starting to explore C++ but it seemed like an abusive relationship. It just didn’t feel very natural and I wasn’t too excited to switch my primary development tool of choice at that point in time. This is when a new kid on the block emerged- Java.
Java was touted as “Write once – Run Anywhere”. In fact, it was so hyped up at that time the whole world went crazy and tried to shove Java in places where it should not belong to. (I am looking at you Sony – for committing the crime of writing your entire blu ray spec/stack in Java which in my opinion is one of the worst conceived ideas ever).
By the time the world woke up and got to its senses, enough damage had been done in the form of Java applets. However, the one saving grace that came out of this debacle was server side Java. While Sun Microsystems was busy in a pissing match with Microsoft and others, the enterprise application server market started blossoming with players like BEA and IBM making good contributions on the Java Enterprise scene. (Remember the venerable pet-store application?)
Today, many of the commercial enterprise level applications and services are powered by software written in Java. The ecosystem and development tool chain are supported by a robust set of offerings by players like the Eclipse Foundation, JetBrains and Oracle.
Around this timeframe, the concept of n-tier application development hit main stream. Java borrowed some good ideas like MVC from Smalltalk and made it commercially successful. While Java did a great job on the Controller side, it did have some weakness on the Model and View side tools. The native database support for Java existed in the java.sql package. Any database developer worth his salt would let you know how much CRUD code you needed to develop in order to get the backend model represented properly and it was quite the chore.
Enter ORM mapping tools like Hibernate. They simplified the idea of building models in a more natural fashion by taking away the complexity involved in writing plumbing code. Java took note of this and introduced these features as part of the core language as Java Persistence API in future releases.
Web Frameworks: Angular JS, ReactJS, EmberJS, Meteor.
Front End Development – This list is long, I am hyperlinking it here.
Build/automation Tools – Grunt, Gulp
Package Managers – npm, bower, yarn
Mobile Cross platform Development – Sencha Touch, Phonegap, Ionic, Kendo UI, Mobile Angular UI, Intel XDK
Backend Development – Node.js, Express, Koa, Horizon, socket.io, Redux,
(Image Credit – Marvel Studios).
What would you like to change in your past and why?