前段时间听说一个新名词:"全栈程序员",google 了一下, 被引导到了知乎的一个讨论上: http://www.zhihu.com/question/22420900 . 楼主提出了一个问题: 怎样成为全栈程工程师, 本人也在上面情不自禁地回复了一下. 回头想来似乎还有话要说. 由于这个话题很容易跑偏, 本文只把范围限定在全栈 web 软件工程师, 简称 FSD(Full Stack Developer).
把技术当成生活, 自己逼自己的结果
其实在任何公司工作, 光凭工作的内容, 很难成为 FSD. 有朋友可能不同意了, 说在创业公司有很多机会做不同的工作啊, 我想说的是, 即便是创业公司, 公司总是有主营的业务和方向的, 就算能从前到后一个人做一个网站, 那又怎样, 从技术上说, 无非也就是掌握了一种或几种数据库, 一门或几门后台语言, 掌握了 html,js,CSS... 大公司呢? 更难了, 大公司虽然方向很多, 但是越是大的公司, 个人的螺丝钉效应越明显, 你可能成为领域专家, 但很难有机会成为完整的机器的. 那么全栈程序员的磨练靠的是什么? 靠的是一种打心底里的执着和毅力, 把技术当成生活, 自己逼自己不断的猎取知识.
难以界定, 每个人都有不同的理解
刚才其实没有鄙视能够完整做网站的人, 相反, 很是钦佩. 至少本人现在在 css 上还不能算能完全独立. 不过每个人对 FSD 的定义其实不一样, 这跟个人的阅历有一定的关系. 只想说, 既不要对自己过分自信, 也不要过分贬低. 一方面, 人外有人, 天外有天, 每个人覆盖到技术领域是有差异的; 另一方面, FSD 其实挺不容易的, 不仅不容易达到, 而且不容易获得存在感. 正因为见的多, 所以就越觉得自己渺小, 我们经常说的, 真正的大牛从来就是低调和谦虚的. 而 FSD 在任何领域都不是那种呼风唤雨的专家, 别人在讨论的时候可能永远都没有你插话的机会, 其实你心里知道, 自己还很肤浅. 个人自认为是比较接近这么一个性质的程序猿, 可以从我的博客的文章内容略窥一二. 但是正如我不敢斩钉截铁地将自己定性到这么个层次, 恐怕很多全栈程序员也不能将自己明确在这个定位上, 因为总有人能站出来给你一个 "反例".
何去何从
从知乎上的回答来看, FSD 似乎并不吃香. 纵观人类发展历程, 更细致的社会分工造就了生产力的提高. 就程序员行业而言, 越来越趋于细分话, 似乎也是正常的趋势. 作为 FSD, 实际上挺难的, 主要是因为精力的限制, 无法在广度和深度上兼顾. 尽管如此, 个人觉得 FSD 还是有很明显的优势的:
见多识广, 解决问题的手段比较多, 而且往往能够触类旁通的思考;
不容易被某种技术的新衰而左右, 很容易转型;
合格的 FSD 往往具有超强的毅力和极客精神, 这在某些情况下是很有用的;
由于能力广泛, 又吃苦耐劳, 适合创业;
个人理解
针对 Web 开发的话, 稍稍谈一谈个人对全栈程序员能力的界定, 大牛们轻拍:
用户体验层面, html45,javascript,css23, 各种前端的框架...
后台业务逻辑层面, 各种编程语言, 现在主流的有 Java,C#,Python,Ruby,PHP,Node.js..., 以及配套的各种开发框架...
辅助层面可能会涉及到 C,C++ 等较为古老的编程语言, 需要一定程度上熟悉掌握...
数据库, 会设计和使用几种常用的数据库, mssql,mysql,oracle..., 数据库分析和优化
架构层面, 能够设计灵活可靠, 易扩展的软件架构和硬件架构. 这个层面上要掌握的东西就很多了, 网络, 存储, 操作系统, web 服务器, web 架构, 安全等等...
一些基础理论层面的东西, 算法数据结构, 编译原理, 网络基础...
数据分析, 数据挖掘
管理层面, 众人拾柴火焰高, 一个人再牛 b, 精力是有限的, 如果能够聚集并领导更多的人, 那就更全面了. 这包括项目管理, 持续集成, 敏捷开发, 版本控制...
移动开发
如果你是 FSD, 有什么想说的呢? 欢迎全栈程序员们留言交流
程序员能力矩阵
一个挺有意思的程序员能力界定, 从程序员能力矩阵 http://static.icybear.net/[CN]Programmer competency matrix.htm 转载:
注意: 每个层次的知识都是渐增的, 位于层次 n, 也蕴涵了你需了解所有低于层次 n 的知识.
来源: http://www.jianshu.com/p/1b97f06d1bde