戳蓝字“IMWeb前端社区”关注我们哦!
本文转载自众诚翻译
译/弈晨
链接:http://zcfy.cc/article/being-a-full-stack-developer-mdash-sitepoint-3548.html?t=new
如果一个全栈工程师能够根据原型实现一个完整的MVP(minimum viable product,至少可行的产品),我们通常会认为他十八般武艺样样精通,而且有足够的理由来证明这一点。为了给全栈工程师一个最新鲜的定义,我们首先来关注一下全栈工程师以前是搞什么的。
很久以前,大约在 2000 年(在互联网的次元里,17年可以说是一个非常长的时间了),一个全栈工程师必须掌握下面的本领:
注意我们在这里只讨论 PHP —— 一个全栈 Flash 或者 Coldfusion (一种 Web 服务器) 开发者可能有不同的工作方式(但是也仅仅是细微的差别)。
在那个单纯的时代,生活是如此的美好。个人开发者一抓一大把,而且程序猿工作完还有大把的时间陪伴自己的家人。
那现在呢?
现在的全栈工程师需要自带什么技能呢?
最近,我们也会产生这些恐慌——为什么工程师的生活会变成这样?
为了在这个牛逼的市场里获得成功,我们这些开发者——通常都是完美主义者——应经常把“如果你想做正确的事”当做自己的座右铭,并经常质问自己。
这会强迫我们自己集中精力在一处,而且必须学习所有东西,所以做一个全栈工程师往往要学会以下技能:
3.1 服务管理/运维
一个开发者必须了解基础的服务器管理知识。包括当不限于以下知识:
除了这些基础技能,开发者必须懂得怎样去创建一个好的、健康的、分离的开发环境,在 Docker 或者像 Vagrant 这样的虚拟机环境中。 如果上面所有的技术你都不熟悉,那我必须给你推荐一本超棒的书,点这里购买。
开发者必须对版本控制系统非常熟练,为了让开发有靠谱的生产备份和可分享、可协同的代码库,这些代码库能够根据时间来跟踪代码变化。
3.2 云
和实际管理或者虚拟服务器不同,一个开发者也许要知道云主机平台,比如Heroku, Google Cloud, Azure, AWS等等。
有一点必须说明的是,平台和工具更多的是为了炒作而不是其实用性。尽管有很多平台和工具的实用性并不如宣传的那么好,但是了解这些大家都在谈论的服务,从长远来看会很有用——客户可能会随时要求更换服务提供商。幸运的是,我们拥有这些云主机部署权威指南。
3.3 后端
3.4 数据库
数据库是一个单独的部分,因为除了很好地掌握我们基本上不会有结构变化的关系数据库(MySQL 或者 PostgreSQL)的数据模式之外,一个全栈工程师应该对非关系型数据库有所了解,如MongoDB, Redis, 或 Cassandra ,更不用说像 Neo4j 这样的图形数据库了。
不幸的是,这些都是服务器上的东西,都在全栈工程师的控制下。也有几个类似 Mongo 的远程解决方案,像RestDB或者 Google-owned Firebase 等。
3.5 前端
想知道一个正常的前端知识图谱是怎么样的,可以在JavaScript 版块看 这篇绝世好文 。但是作为一个全栈工程师,你需要了解:
在设计方面,全栈开发者需要了解怎样在一个产品变成真正可用的 HTML 、CSS 代码之前,画一个原型图 。然后就可以去用 JS 写交互、后端也可以用假数据来模拟生产环境。只有这个关键的原型图完成,用户体验设计和接口设计就绪,真正的开发才能开始。这本身就是一项艰巨的任务,需要一套特殊的工具:
为了高效监控应用的健康度,全栈开发者必须能够追踪错误,找到错误日志然后从中提取出有用的信息。全栈开发者也需要从日志中预测一些趋势,比如 CPU 或者 I/O 占用率的上涨,以防应用不知道什么时候就挂了。这部分和运维也有一些关系,但是需要一些特别的技能:
推荐一篇非常棒的 ELK stack 的文章,这会帮助你了解做日志系统所需要的知识。里面包括了查找日志的 ElasticSearch ,收集日志的 Logstash,把日志用非常棒的图表展现出来的的 Kibana,甚至还有提供解决方案的 Logz.io。
所以最后只有一个问题,值不值?
首先,应该注意到很少的全栈工程师称得上真正的全栈,大部分全栈工程师关注了上面技术的某些方面,而不是所有的,仅仅因为不可能有那么多精力放在上面所有方面。
其次,对所有方面都了解一点也许不会让你在具体方面成为大师,但是说实在的,这会让你在更好地理解项目的流程,和项目确实都需要用到的技术。当作为乙方、开一个外包公司或者给一个迷茫的团队指一条明路方面是无价的技术。
我可能不是一个“JavaScript 巨星”,“Elasticsearch 忍者”,“MySQL 大师”,“运维狂人”,或者“移动端老司机”,我不想被奉承。
但是我觉得,做一个全栈工程师让我张开了翅膀,测试不同的技术,作为自由职业者给我的客户提供与众不同的解决方案。
我可以有各种各样的赚钱方式,也能拿到从服务端工作到 WordPress 插件开发等不同的订单,因为我对所有的这些都有很多了解(迟早的事)。
对于我来说,做一个全栈工程师是非常值得的,对比我以前只做 Flash 的日子,我现在更喜欢我的工作,当时工作多而且工资低(没有 JavaScript)。
你呢,你是全栈还是也精于专呢?不管你是不是全栈,你觉得做的事情值吗?