You got heart, kid.

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).

Sean Bean Write Once.jpg

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.

While the model side of the world settled with solutions like this, the View on front end was not a pretty scene. Java server pages technology was the recommended way to build the front end of web apps. This was not a great solution in many ways as the graphic designers would mock-up HTML and Java developers would take this and translate that into backend code. In order to perform front end dynamic validations you resorted to Javascript.

Now Java developers always looked down Javascript as an inferior development language. There was a philosophical difference between Java as a strongly typed language v.s. Javascript, which was interpreted at runtime.  Javascript developers were called/treated as “script kiddies” and Javascript as a language was not being considered for any serious development (primarily due to its applications on the front end side in the browser).

This all changed in the last few years. A powerful set of libraries started emerging for Javascript and lot of serious development started to happen. With companies like Google, Yahoo and Facebook committing to Javascript development, we started seeing some new unique tools and features which are making web experiences more engaging and realtime.

The pivotal moment for this development can be attributed to the advent of Node.js (a Javascript runtime environment that allows JS code to be executed on client as well as the server using Google’s powerful V8 Javascript engine). JQuery created and abstract layer on the front end end for Javascript which took care of many of the browser level rendering idiosyncrasies.

In fact so much development is being done for Javascript these days that there is a rich array of options a developer can choose from:

Web Frameworks: Angular JS, ReactJS, EmberJS, Meteor.

Front End Development – This list is long, I am hyperlinking it here.

Compilers – Babel, traceur

Build/automation Tools – Grunt, Gulp

Package Managers – npm, boweryarn

Mobile Cross platform Development – Sencha Touch, Phonegap, Ionic, Kendo UI, Mobile Angular UI, Intel XDK

Backend Development – Node.js, Express, KoaHorizon, socket.io, Redux,

Javascript Databases – RethinkDB, TaffyDB, PouchDB, LokiJS

I was quite amazed by how rich the Javascript ecosystem has grown. Javascript is the #1 language in github with the most number of active repositories and commits as seen here at Githut.

To summarize, I have developed quite the respect for the Javascript ecosystem. As Captain America said – You got heart kid!

cap-america

(Image Credit – Marvel Studios).