On ubiquitous JavaScript and the unreasonable expectations developers can set themselves

For a long time there were clear boundaries between programming languages. You had a large number of options from low level systems languages to scripting macros in Excel.

Today there are probably more programming languages used daily than ever before. out of those JavaScript is everywhere…

…but if everything is JavaScript, where do you draw the line between writing plugins to the browser with WebAssembly and adding some simple interactivity to a submit button on a web page?

Back in the day web development when server side programmers were the elite and front end developers were mostly focused on churning out the view layer with designs. The division of roles was rather simple in my opinion. Trying to mix the two was like mixing oil and water.

It was fun to get started with web development through some HTML and JavaScript interactions. The server side was first a place far away, one that you didn’t accidentally wander over to. You had to deliberately go there. Both developers and employers understood this.

Today setting these expectations is not as clear. JavaScript is literally everywhere, but having a single language does not mean everyone has the time and the capacity to do all the things possible with that language.

Platform and syntax are only means to an end

Learning a new programming language syntax is largely a waste. This is why consolidating the to a more universal one is very appealing and there is nothing wrong with that at all. The trouble boils down to the expectations set by developers and their prospective employers.

Job boards are bursting with ads searching for JavaScript Rock Stars and Full Stack Developers. It’s easy to see how from a high level that JavaScript solved all the problems for hiring talent — just get a JavaScript developer and you’ve got it all!

The thing is that the same target platform (JavaScript) is now more accessible to developers with a .NET background (through TypeScript), low level C and C++ developers (through WebAssembly and Asm.js), native mobile development (through React Native) as well as front end developers through something like jQuery or Angular.

Each of the above mentioned programming domains have their unique aspects and areas requiring expertise. Sharing a language syntax and platform does not make the skills needed to actually solve the problems within those donations interchangeable.

Exceptional talent can handle everything from Assembler to web development to Excel macros with ease, but most people simply don’t have the capacity. JavaScript is becoming a better programming language, but I think most should consider dropping down the JS expertise level in their CVs.

Consciously limit your interests

Developers getting into web development should consciously limit their interest to a certain niche in the beginning. Being able to use the same syntax later on for solving other kind of problems, but picking up modern ES6 syntax won’t give you immediate skills to write AI bots for games in JavaScript.

To add to the mix, expectations for web developers have never been higher. People use incredibly complex JavaScript applications like email clients like Outlook.com and real time messaging tools like Slack day in and day out. Them being built in JavaScript may give you a false expectations that everyone should (and could) be able to build something like that.

Writing a complex application in any language continues to be a vast undertaking. Trying to build something as complex as the original Gmail released over a decade ago in 2004 would still be very hard. I would argue, that regardless of the technical advancements many teams would fail in delivery largely because of not understanding the problem at hand.

I don’t exactly cry myself to sleep over not understanding the details on the new Parallel Primitives coming to Javascript. Nowadays I need to consciously ignore certain things to avoid myself going through the JavaScript rabbit hole and feeling like an idiot at the end. The problem is that they are now accessible to me — in theory, as each passing day I know relatively less about JavaScript.

For the first time ever I am embracing strong typing through TypeScript, but at the same time I am aware I need to embrace low level functionalities like Web Workers through higher level abstractions like ones for Angular 2 for mobile web applications.

You don’t need to know how to handle memory management or the complexities multithreaded systems development just to create a website.