怎样才算得上是全栈程序员?

与其余互联网热词同样,”全栈“程序员也是英译过来的,英文全文是:Full-Stack Developer,你想啊,中国人民怎么会用客栈的栈、堆栈的栈来形容工程师呢?javascript

谈论一个概念,首先得给伊个定义,通常来讲,全栈工程师就是指技术多面手,掌握多种技能,可以独立完成 non-trivial application 的人。non-trivial 怎么解呢?就是有必定复杂度的,具有必定规模的意思。基于此,我和个人程序员朋友们,对全栈工程师的认识是:在技术栈的各个领域都可以作到出色的工程师。有了这个标准,我和程序员们面面相觑,发现没有一个是全栈工程师。技术领域浩如烟海,更新换代之迅猛如炸雷不及掩耳,别说盗铃了。互联网短短 20 年的发展,累积的技术信息已经不是咱们终其一辈子可以消化的了,知道尚不可为,何以作到出色?前端

可是,这个标准稍稍下降一点,早期的程序员差很少就都能叫全栈了。2001 年左右咱们开发 B/S 产品,用来展示 UI 和数据的程序代码中混杂了 Java、HTML、CSS 和 JavaScript,根本不可能把前端和后端拆开编写,然后端业务逻辑自己就是 Java 实现的,你不写谁写?懂了业务逻辑和算法还不行,你得把数据存数据库和文件系统吧,什么?你不懂 SQL?我靠那你仍是程序员吗?你不能每次和数据库交互都让一个进程去敲门吧,数据库招你惹你了?这时候就得有个链接线程池。异常得统一处理吧,得支持集群吧,给用户部署了得能自动扩展吧,没测试怎么办?你本身写的代码写的业务逻辑写的界面,你不保证正确性谁保证?……java

总之在那个年代,每一个程序员差很少什么都得会点,但有的人在这个领域强一些,有的人在那个领域出色一些,不一而足。git

如今看来,那时候咱们应该叫全沾工程师,什么都会点,能解决问题,可是单我的,除了本身擅长的技术,在其余领域,都没能作到出色。程序员

若是这个标准再下降一点,好比说把「non-trivial」去掉,随便作个 Application,那就容易多了,一个零基础智力正常的成年人去培训班培训几个月,差很少就能作出一个网站、一个移动 App 还包括后端,或者一个数据挖掘的展现页面。但这个范围仅仅局限在会上,和作好、出色,差距明显。能够看作是入门级的工程师,只不过和前端工程师、移动开发工程师、Java 工程师相比,什么技术都懂一点点而已。github

这种工程师,咱们能够把他们叫作全站工程师,基本上,进入企业以后,都得有老师傅带着,手把手教,练习和实战,才能作「non-trivial」的项目。为啥叫全站呢,意思就是老师傅讲东西的时候,都在旁边站着。算法

有没有真正的全栈工程师?有,好比菲尔普斯在游泳层面勉强算全栈,奥运会咔咔拿 7 枚金牌,你服不服?你说我也会四种泳姿……您那叫会,会和作好,差着几十个二把刀。固然了,二把刀也没什么很差,至少比拿根儿木头杵着强多了。鼓励你们在立足本职成为专家的基础上,成为一个认真的二把刀。数据库

什么是程序领域的全栈工程师呢?我以为云风算是游戏领域的全栈工程师,他自幼编程,在语言层面对汇编、C、C++、Lisp、Java、Python、Lua 都有深刻的理解,使用起来如臂指使,对游戏领域的策划、引擎、协议和服务端架构也是驾经就熟,最新开源出来的 skynet —— 基于 Lua 实现的网络游戏服务器框架,极具参考和实用意义( https://github.com/cloudwu )……可是云风不作 Web 游戏啊,他对 JavaScript 的评价是:javascript 真是门恶心的语言!编程

领我编程入门的师兄 baby,也是一个编程奇才,他对操做系统、编程语言、数据库均有透彻的了解,学习新技术只能用迅猛来形容,每次技术选型以后,他就会趴在办公室里敲敲打打几天,而后丢给咱们一个用新语言实现的框架,告诉咱们,用!一用之下,几乎没有 bug。这样的人,可称全栈。他们并非在编程领域样样精通,而是在须要的时候可以在极短的时间内达到常人须要长时间练习才能达到的水准。后端

正如我在书中写到,高手并非懂得多,他们只是学得快而已。

如今 baby 早有了本身的公司,估计技术也作的少了,如今想起他那训疾如风的键盘指法和闪电般的学习速度,仍是让人一声叹息。

总体来讲,我以为程序员们不必去追逐什么「全栈工程师」,在工做和生活中,花 200% 的时间让本身在擅长的领域成为超越 80% 的人,而后,须要学什么就去学什么,一味追求大而全,反而会拔苗助长。

以前推荐的公众号「刘炯」曾经写过一篇「想当全才的自我检讨」,其中一段大意以下:

就像有人给本身设定目标要学英语、学乐器、学编程、学设计、学会计、学书法、学厨艺最终一事无成同样,我骨子里也但愿本身作个「样样精通」的「全才」,然而事实上本身把时间更多的花在收集信息和焦虑上,反而没有将时间用在真正的技能学习上,最终得到了「样样稀松」的结果。

这就如同不少游戏中的稀缺技能点同样,玩家永远加不满全部的技能树,如何有策略的使用有限的技能点来解决对应的问题,成了每一个玩家必修的课程。

现实生活中,亦是如此!