文档结构  
翻译进度:27%     翻译赏金:0 元 (?)    ¥ 我要打赏

能从原型到构造出最小化可行产品的全栈开发者一直都被认为是万金油式、啥都不精的程序员,这种偏见有理有据。为了重新定义现代的全栈开发者,我们需要关注以前的全栈开发者是做了什么。

当年的全栈开发者

很久以前, 大约2000年吧 (在互联网时代, 17年真的是很久的了), 全栈开发者是能做下面这些事的人:

  • 用类似photoshop或fireworks的adobe工具勾画网页轮廓。
  • 将页面设计转为html, css和图片上的热点(哇,还记得这些吗)。
  • 写些简单的php4.0脚本(非面向对象的php已经慢慢放弃了)来处理服务端的逻辑。
  • 储存所有的动态数据到mysql,并可能做一些优化。
  • 通过ftp把所有的代码上传到服务端,然后等待领取薪水。
第 1 段(可获 1.9 积分)

注意我们这里讨论的是PHP全栈开发者 - 跟Flash或者Coldfusion开发者在流程上是有一点点区别的。

那时候做开发很简单,生活很美好。 一个人单位一个开发者这种现象比比皆是(一人抗把子),人们下班后也有时间陪陪家人。

但是现在呢?

现在的全栈工程师都需要了解哪些东西呢?

最近以来,我们遇到了下面这些讨厌的 问题  – 究竟为什么会变成这样呢?

App developer doesn't see his kids due to schedule

要想在一个饱和的市场里获得成功,作为我们开发人员(他们通常是完美主义者) – 我们通常会有这样的疑虑,“要想把事情做对做好,就必须三思而后行”。这迫使我们必须偷偷的躲在角落学习任何开发上的东西(才能在开发过程中做通盘考虑),所以通常成为一个全栈工程师通常意味着你得点满一下的技能点。

第 2 段(可获 1.61 积分)

服务端开发/管理能力

作为开发者必须了解基本的服务器管理知识。这些知识包含但不仅限于如下几点:

  • 在没有图形环境的情况下使用终端连接控制服务器
  • 基本的shell脚本编写能力
  • 在服务器上管理用户和组的能力
  • 管理服务器上的应用程序的能力,例如Apache、Nginx等
  • 管理防火墙和服务器权限
  • 安装新软件,更新软件的能力

来自 GIPHY 的内容

除了这些基础的知识,开发者还应该能够搭建良好的、纯净的开发环境,像Docker或者其他虚拟机(Vagrant)的搭建工作。如果你对上面这些内容感到很陌生,我们有本书专门做了相关介绍 购买链接

第 3 段(可获 1.36 积分)

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.

Cloud

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.


via GIPHY

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.

第 4 段(可获 1.88 积分)

Back End

On the back end, apart from knowing the language of choice – in our case PHP and its multitude of frameworks and CMSes – a developer needs to be familiar with:

  • 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
第 5 段(可获 1.93 积分)

Database

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.

Database illustration

What’s worse, these are all on the server, under the control of the developer. There’s also several remote solutions like the Mongo-like RestDB or the Google-owned Firebase, etc.

Front End

On the front end, there’s true chaos.


via GIPHY

For a comprehensive overview of what’s needed for a healthy front end workflow these days, please see this excellent post on the JavaScript channel, but as a TL;DR it includes the following:

第 6 段(可获 1.58 积分)
  • NodeJS and NPM
  • Yarn
  • 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

Design

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:

第 7 段(可获 1.5 积分)
  • 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
  • everything from the Front End section above for the JavaScript mocking
  • ways to deploy a prototype online for customers to see it and give you feedback – Ngrok is very useful for this

Logging

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.

第 8 段(可获 2.03 积分)


via GIPHY

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.

Mobile

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

第 9 段(可获 1.96 积分)

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.

第 10 段(可获 1.63 积分)

I might not be the “JavaScript rockstar”, “Elasticsearch ninja”, “MySQL guru”, “Devops maniac”, or “Mobile wrangler” you’d fawn over, but in my case, being full stack lets me spread my wings, test out different technologies, and offer alternative, uncommon solutions to my clients when freelancing. The money can come from all sides, and contracts I can take up range from server work to WP plugin development and everything in between because I’m moderately familiar with all those things (the former more than the latter, admittedly). For me, being full stack is definitely worth it and if I compare it with my Flash-only days, while I did enjoy the work more back then (no JavaScript!), the pay was lower and the projects harder to get.

How about you? Are you full stack or specialized? Whichever it is, do you feel like it’s worth it?

第 11 段(可获 1.83 积分)

文章评论