很久以前, 大约2000年吧 (在互联网时代, 17年真的是很久的了), 全栈开发者是能做下面这些事的人:
- 将页面设计转为html, css和图片上的热点(哇，还记得这些吗)。
注意我们这里讨论的是PHP全栈开发者 - 跟Flash或者Coldfusion开发者在流程上是有一点点区别的。
最近以来，我们遇到了下面这些讨厌的 问题 – 究竟为什么会变成这样呢?
要想在一个饱和的市场里获得成功，作为我们开发人员（他们通常是完美主义者） – 我们通常会有这样的疑虑，“要想把事情做对做好，就必须三思而后行”。这迫使我们必须偷偷的躲在角落学习任何开发上的东西（才能在开发过程中做通盘考虑）,所以通常成为一个全栈工程师通常意味着你得点满一下的技能点。
来自 GIPHY 的内容
The developer should also be intimately familiar with version control systems in order to be able to reliably produce backups and shareable, collaborative collections of code, tracked for changes across time. No modern developer workflow is complete without version control these days. We have a fantastic video course about this for purchase here.
Apart from actual managed or virtualized servers, a developer might need to know about the cloud – hosting on platforms like Heroku, Google Cloud, Azure, AWS, and others.
There’s a fair bit to be said about platforms and tools that are more hype than immediately useful, but being familiar with the services everyone is talking about can come in handy in the long run – a client could demand a switch of providers any day now, and it pays to be ready. Luckily, we have the ultimate guide to deploying to all these cloud hosts.
- web servers like Nginx and Apache which ties into Devops above
- unfortunately, NodeJS for compiling JS, CSS, and other assets into statically hostable ones. Fortunately, there are ways to avoid NodeJS by using PHP.
- tools like Composer for package and dependency management in PHP itself – no modern developer’s environment is complete without it
- good API design, since most new websites today are API-based and merely talk to a detached front-end (more on that below).
- search engines like ElasticSearch (introduction here) are really important for performance
- cronjobs and background jobs with tools like Gearman or libraries like Crunz
- knowing about caching with Varnish, Redis, and similar powerful tools that slice hosting costs into the single digits will often make or break a project
The database is a separate section because apart from a good grasp of relational databases for data the schema of which won’t often change (like MySQL or PostgreSQL), a developer needs to know about noSQL databases like MongoDB, Redis, or Cassandra – not to mention graph databases like Neo4j.
On the front end, there’s true chaos.
- NodeJS and NPM
- Preprocessors and transpilers (like Babel) for things like Typescript, ES6, LESS, SCSS, SaSS
- Builders and task runners like Grunt and Gulp
- Frameworks like VueJS, React, Angular
- Module bundlers like Webpack, Browserify, Rollup
In design, a developer needs to know how to sketch out a prototype of an application before converting it into a usable format like HTML and CSS. This can then be made interactive with some JS, back-ends can be simulated with fake JS endpoints, and only once this shell app is done and its user experience design and interface design are ready can true development begin. This in and of itself is a huge undertaking and warrants a special set of tools like:
- Photoshop and/or Illustrator or an open source alternative like Gimp / Inkscape – find out all about this on the Design channel
- a good, fast editor like Atom or Sublime Text (here are 10 ST plugins for the full stack dev)
- pattern pickers like Subtlepatterns and color pickers that match colors to one another
- grid systems for CSS
- ways to deploy a prototype online for customers to see it and give you feedback – Ngrok is very useful for this
To effectively keep an eye on an app’s health, a developer will need to be able to track error and access logs and extract valuable information from them. They’ll need to be able to recognize and flag trends, as well as notice upticks in CPU or I/O usage in order to prevent downtime on time. This ties into Devops a little, but demands its own particular set of skills.
We have an excellent post about the ELK stack that’ll get you as ready as you need to be for all your logging needs – it combines ElasticSearch for searching logs, Logstash for collecting them, and Kibana for a dashboard in which to show them into a fine stack for user-friendly monitoring. There are even hosted solutions that take care of this for you, like Logz.io.
Finally, there’s mobile to consider. With webview on both iOS and Android becoming more and more performant, and the advent of PWAs (progressive web apps), native apps are losing their charm because of the complex process of developing them. A full stack developer thus has to be familiar with either PWAs, or go with something like React Native or a full on webview like NativeScript, Tabris, Cordova, Phonegap, or other implementation to get a good “client app” going for their API (see back end section above).
Is Being a Full Stack Developer Worth It?
So after all this, is it worth it?
First of all, it should be noted that very few full stack developers are this full stack – many focus on just most of these technologies and aspects, not all, simply because it’s not possible to pay good attention to them all.
Secondly, knowing at least a little bit of everything might not make you a master of a specific craft, that much is true, but it’ll make you capable of understanding what goes into a project and which ones of these technologies a project actually needs. This is a priceless skill when delegating, opening an agency, or just guiding an existing team back from a lost path onto a well defined road.
How about you? Are you full stack or specialized? Whichever it is, do you feel like it’s worth it?