Being a Full-stack Developer

A full-stack developer is a person who is comfortable working with all the technologies required to get an idea to a finished product. Full-stack developer must be familiar with all the layers of software development.

Being a full-stack developer means to have an open mind towards new technologies, having your hands dirty in each one and to have an understanding of how a web application gets done from a concept to design to the finished product.

A full-stack developer is capable of performing tasks at any level of the technical stack in which they reside. It means:

  • Designing a business object model, and using a popular framework to build prototype of application from scratch.
  • Working with systems infrastructure (knowing what hardware to ask for, what OS to install, how to prepare the system and dependencies for all software)
  • Understanding, creating, manipulating, and querying databases
  • Can performance tune a system, and estimate work load.
  • API/back-end code in one or more languages, e.g. Java, Python, PHP, etc.
  • Front-end code in one or more languages, e.g. HTML, Javascript, etc.
  • Project management/client work, e.g. gathering requirements, creating technical specifications and architecture documents, creating good documentation, managing a project timeline (e.g. knows Agile/SCRUM/Kanban)

In general a full-stack developer has knowledge that is a mile wide, but not necessarily very deep, and has core competencies in the pieces of the stack in which they work most.

However in the 2010s, since API first and Single page apps have become popular,  it requires for-stack web developer as well, and old LAMP full-stack developer become rare.

full-stack

So Let’s try to beak down and categorize the main technology stacks that are required for a full-stack developer today (may be changed after 2020, :)) (source by George Fekete)

System administration:

  1. Linux and basic shell scripting
  2. Cloud computing: Amazon, Rackspace, etc.
  3. Background processing: Gearman, Redis
  4. Search: Elasticsearch, Sphinx, Solr
  5. Caching: Varnish, Memcached, APC / OpCache
  6. Monitoring: Nagios

Linux powering most of the Internet, it’s a de-facto operating system in web development (not to dismiss .NET). In addition, a full-stack developer should know how cloud hosting works, Amazon / Rackspace or other providers and its APIs.

Search is an integral part of most websites – a developer should know how to set up and use search servers such as Sphinx or Elasticsearch.

Caching is also important, Varnish, reverse proxy, Memcached and opcode caching. He needs to know what each of these is and how to use it.

Web development tools:

  1. Version control: Git, Mercurial, SVN
  2. Virtualization: VirtualBox, Vagrant, Docker

Today, it’s unnaceptable not to use version control, even if you’re a solo developer.

With virtualisation tools, having separated development environments on a per project basis is really nice to have, and easy to set up with VirtualBox and Vagrant at least.

If you want to work with Vagrant you also need to know the basic syntax of Ruby and shell scripts as well.

Back-end tech:

  1. Web servers: Apache, Nginx
  2. Programming language: PHP, NodeJS, Ruby
  3. Database: MySQL, MongoDB, Cassandra, Redis, SQL / JSON in general

Apache and Nginx are the norm for web development. A full-stack developer should know how to set up these applications and serve the contents of his website.

PHP is what needs to be mastered on a high level, NodeJS, Ruby is nice to know as well.

In addition to web server and programming languages, database management is also a requirement for a full-stack developer which in itself is another beast.

Relational (such as MySQL, PostgreSQL) vs non-relational databases (like MongoDB, Redis or Cassandra) are differences the full-stack developer needs to know, along with knowing the syntax of XML / JSON.

Front-end tech:

  1. HTML / HTML5: Semantic web
  2. CSS / CSS3: LESS, SASS, Media Queries
  3. JavaScript: jQuery, AngularJS, Knockout, etc.
  4. Compatibility quirks across browsers
  5. Responsive design
  6. AJAX, JSON, XML, WebSocket

Here comes the fun part. If you want to present your website, you’d better know these and all their quirks.

JavaScript was a joke in the early days, grown into one of the most popular and powerful languages today. New methodologies and frameworks are popping up each day, MVC, MVVM, MVP, Angular, Knockout, Ember, etc.

Alongside HTML, CSS, Javascript, a full-stack developer should also know about responsive design and how to work with media queries and CSS preprocessors like LESS and SASS.

One should also know how to communicate with the back-end via AJAX or WebSockets.

Design:

  1. Converting website design into front-end code
  2. UI
  3. UX

In addition to front-end technologies, a full-stack developer also understands what is possible and what not to create with the constraints of HTML / CSS / Javascript and convert the design (Photoshop/Illustrator files) accordingly.

With many of the mentioned technologies a developer can get away with not knowing to code or use, such as Ruby or specific JavaScript libraries, but all these are interconnected in one way or another.

For example if you want to set up Vagrant you need to know Ruby’s syntax, as simplified as it is or if you want to manipulate DOM elements, jQuery is a good to know technology.

One other category that deserves mentioning is mobile technologies. It’s a very dynamic industry and closely related to web development:

  1. iOS
  2. Android
  3. Hybrid: PhoneGap, Appcelerator

One of the biggest disparities today is between web and mobile development, but the gap is rapidly closing.

A full-stack developer should know about these technologies as well.

 

Advertisements

About qianggan

Sr. Software Engineer
This entry was posted in Computers and Internet, Uncategorized. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s