Sunday, August 28, 2016

The Path to Full Stack developer

Lately a new type of Software engineering title has emerged, commonly known as "Full Stack Developer", you have probably encounter it at some LinkedIn job description or title, or when seeking for a developer job, so what it is? Who qualifies? Keep reading.

The Full Stack:
[Figure-1] Illustrate a common Full Stack Client Server Application

A Full Stack involves both server and client sides and all above layers of software.

It's important to point out that Client Server applications can be developed in numerous ways, the varieties of Programming language, Frameworks, DataBases and client platforms, are endless, here is only a handful of some:

Client Platforms: Web Sites, Business Applications, Mobile Applications, IoT, Wearables, ...
Programming Languages: Java, C++, C#, Phython, Rubi, Scala, JavaScript, PHP, ...
Server Frameworks: J2EE, NodeJS, WEBrick, Django, ASP.NET, ...
DataBases: SQL, Hadoop, Sparks, MongoDB, Cassandra, ...

Building a Full Stack Web Site for example, might require knowledge in HTML5, CSS, JavaScript, Ajax and SQL.

In the other hand Android/J2EE Client Server application can be developed using only one programming language (Java) and still require an enormous amount of knowledge.

There are many more options, and in correlation a different set of knowledge requirements and expertise.

Usually the way it works, a company will look for a Full Stack Developer which knows enough technologies and programming languages within the company developing stack, so he or she will be able to contribute and even lead the development effort both in server and client sides.

The Path:
Most of us don't have the privilege of selecting the technologies on which we build our career on,
this is usually done by the company we are hired to work for and the technologies it is using,
but still there is much we can do:
  • The first thing to do is become an expert in at least one programming language, This will take time, to get there you will need to get familiar with Design Patterns, Object Oriented Programming concepts, Code conventions, good coding practices and software architecture, those will give you tools to write and design better software, have a higher point of view on the code, get recognized by your peer's as a professional developer and in consequence get a wider range and more challenging software tasks.
  • Move to the other side, if you started as Client developer then go do some Server development and vice versa, wait for the right opportunity and go for it (maybe some outsourcing between teams in your company), it will require you to do a change that might be out of your comfort zone, but in return you will leap ahead in your path to Full Stack Developer, with time you will get more confidence going into unfamiliar code territories and learn new technologies that were out of your scope till now.
  • Get familiar with as much technologies and frameworks as you can, be up-to-date on your domain expertise as frequently as possible.
After this you will be without a doubt a professional Full Stack Developer that will be hunted by leading companies and teams.