快速原型是一切的基础。没有快速拿出可以迭代的最小可用化产品的能力,其他都是扯淡。
也许大团队还可以混混,但是无论是盖茨, Linus 还是 Hotz ,无论经历了多少代,你会发现这些最顶尖的传奇程序员中,快速原型的能力从来没有失传。
社交网络电影里,扎克伯格也完美的演示了,虽然 idea 都差不多,
但是在快速原型面前,
他有钱有团队有技术的同学,
也一样是战五渣。
原型一时爽,迭代愁断肠。
程序员经历了多年需求变更和 debug 的毒打之后,其中高水平的,会在这方面有不小的进步。(所谓适应技术迭代,无非是这个能力下一个小小的基本功而已。。。)
需求变更和 bug 都是不可避免地,重构也时不时发生,这时候用敲键盘的速度去对应,已经不是高水平的表现了。
如何选择数据库,服务器架构,搭建业务中间层,规范大家的通讯协议?如何解耦整个项目,确保大家协同并且独立,能更快,更低成本的对应必然发生的变化?
高水平老炮,必然在这方面会积累非常多的经验教训。
计算机世界的所有基础不是 01,而是最简单的几个电路。如果计算机科班出身,那么会对整个计算机世界有着更加深刻的了解。
这时候无论是代码水平,还是架构能力,尤其是 debug 的方式,都会不一样。
原理理解不透彻的程序员,往往会得出一些很傻的解释,比如几乎不会有人给今天非科班的程序员讲解什么叫线程的锁死,因为默认系统和框架能避免。但是只要是代码就不可能完美,在面临这种问题的时候,理解原理的程序员更容易正确理解和快速解决问题。
而很多软件的性能问题,其实用硬件考虑往往有意想不到的解决方案。。scalable做好了,海量服务器面前,性能甚至可靠性都不是关键。而长期的软件优化,可能还不如一颗 FPGA 来的痛快。
所以我一直认为,计算机专业的本科训练,对于程序员来说是必须的。
debug 是每个程序员的基本能力,但是我有幸做过几年 Trouble Shooting :他和 debug 的区别在于,需要在真实服务器的运行时定位,分析,处理和最终解决问题。
而这需要考验你从基本技术细节,到系统架构,业务逻辑,计算机世界的基本原理,现实世界的抗压能力等全面的知识和经验。
能用比较短的年限胜任这种岗位的 coder ,一定都是高水平的。
那么你对他唯一存在疑问的,就是他的项目管理和组织能力了。
这个就很难说是纯粹程序员的能力了。但是和技术仍然有很大的关系。
架构选择,技术业务方案的解耦合,scalable设计等等,都对项目管理的进度,能管理好的项目规模有决定性的影响。
不看好非 coder 出身的软件项目管理者,这是最大的理由。(当然也要承认,从以往的经验看,往往非 Coder 出身的项目管理者,对需求有更好的控制力,这也的确相当重要。。。甚至更加重要。。。)