在学校的最后两年,我就开始往一个Web开发的方向发展,基本上属于自学成才的全栈Web开发工程师,从前端到后端无一不做,但是没一个精通的,看到这里是不是很失望?确实,如果真是“无一不精”,我也没空在这里写文章了。
现在工作四年多了,我才刚刚有点摸到了成为一个牛逼Web开发的门路。不敢自珍。一点看法,与诸君分享。
我感觉,编程,整个就是一个抽象的过程,对世界建立抽象的模型,然后让他们运作起来。编程的抽象,是双向的,对底层,程序员要去抽象计算机的实现,往上层,程序员要去抽象纷繁复杂的客观世界。而更高一级的抽象,往往就是更低一层的抽象的一个组装。所以,越是大型的系统,就组装了越多的抽象。
如果以计算机硬件作为程序的底层来看,越低层次的抽象,对客观世界的表达能力就越薄弱,越高层次的抽象,表达能力就越强,但是会丧失灵活性。
Web开发从这个角度去理解的话,本质上工作在一个非常高的抽象层次上,因为Web开发下面,有操作系统,浏览器,解释器,引擎,框架,所以,Web开发对客观世界的表达能力很强。
可是即便如此,我工作这么多年来发现,我们踏入这个行业以来,学习到的东西,抽象层次还是如此之低,以至于根本没法做出什么巨大的,或者众多的工作成果。
所以,分析到这里,我就觉得,如果我们希望自己变成一个牛逼的开发,首要变成一个高产的开发,那么你必须有一个你的工具箱一样的东西,当然是一个抽象的工具箱,这个工具箱,应该包含了各个层次的抽象组件。一年又一年的重复工作,我们要做的不是拿一份月薪而已,而是往自己的抽象工具箱里放入一个又一个抽象组件。这个叫做积累。
而且,我觉得比较好的方式,是使用拿来主义,千万别自己发明。自己发明只有利于你理解原理,但是那不利于你做出一个巨大的或者众多的工作成果。
比如,有些人问,学哪种语言,语言只是一个表达法,其抽象层次之低,不能帮你构建任何东西。从这个角度来说,语言应该是最简单的东西,简单到了一个普通程序员可以学会任何语言的程度,所以不必问学习什么语言,哪个好用,就去学会就行了。
语言上面有框架。哪个框架好用,就去掌握住,然后所有的开发,都尽可能用这个框架。
在框架之上,有系统,系统也需要去积累。因为人世间的业务模型,无非就是这么几个,一旦掌握全了,等于你一个人能构建一个超级系统出来,只要把你掌握的每个系统接驳起来就可以了。
我举个例子,比如我是PHP程序员,然后用Yii框架,然后我掌握了CMS系统,网店系统,社区系统,CRM系统,销售支持系统等几个系统。然后,任何新型业务,暂时都没有脱离这几个东西,于是我可以去帮助任何新型业务快速的生产他们的系统。但是我发现,我在网站或者交互表现上有所欠缺,所以我要掌握类似Bootstrap这样的前端框架,帮助我在前端表现和交互上能有所补全。
所以,后续的工作模式,就是不断去积累各种层级的抽象工具和系统。以后我就会成为一个牛逼开发,可以搞定任何系统的开发。
这就是我想与大家分享的。