在JD的购书通道里,看到了这样的一个书名,果断入手,看了以后果然非同凡响。
通常程序员在工作开始的几年内,很多习惯就已经定型,甚至影响一辈子了。这个规律不仅适用于程序员,也适应于其他各行各业。所以,前几年好习惯的培养,或者是学校的培养,那是相当重要的。
人总是喜欢呆在自己的舒适区,做觉得没有难度的事情。问题是,没有难度和挑战,哪来的成长和进步?很多二流程序员,会陷入自己设计的二流架构中,然后一辈子就圈在这样的陷阱中了。多跳出来看一看,多做一点让自己觉得困难的事情。
很多公司的代码库大的让人吃惊,几百万,几千万甚至上亿行。他们为什么失去了创新和快速变化的能力?因为代码太多了。代码越多, 维护成本就成倍增长,最后甚至没人能搞定它们。设计模式就像盒子, 它虽然能把代码分门别类整理的看似很规整,可是你要知道设计模式也是代码,也一定程度上恶化了问题。
这让我想起了我设计的框架,我花了两三年时间, 设计了一套C#的代码库,并精心维护它们。但大量的时间花在了维护框架本身,而不是解决问题上。虽然框架设计的还算合理,可是我明显感觉到它就像拖在我身后的麻袋,虽然装了并不好吃的口粮,但却让我越走越慢。仔细看每一个类,好像都有作用,但自己再想想,真的需要那么多吗?它们是财富,也是包袱,越通用的方案,解决特定问题的能力就越弱。如果我真要下定决心重写一遍,代码量会减少到现在的五分之一!
为什么会有那么多的代码?设计人员难推其责,不断的重复和过度设计,沟通不畅,反复的堆叠,这些自不必说。程序语言本身也有问题。比如Java,什么类都要加上Manager, Builder, Factory...又丑又重,强类型语言难以对复杂的变化做拓展,于是再被设计模式添油加醋,越写越复杂。
于是,弱类型语言就是个好选择吗?弱类型语言的动态性要强很多,能动态增加方法和属性,但这些自由也意味着一定的代价,比如不安全和一系列动态错误。这仿佛是现实世界的保守派和自由派一样,两派的争论无休无止。保守派意味着详细的文档和规范,严格的建模和测试,SQL,稳定的代码风格,拒绝新特性,各司其职和责任划分。自由派意味着弱类型,脚本风格,NoSQL,先跑起来再说,乐于接受事物,面对变化。很难说哪一派更好,对于银行业这样的系统而言,显然是保守派的天下,而如今世界纷繁多变,抢占市场,快速迭代,到底哪一种思维更好,那就是各位看官们的判断了。总之不论如何,请好好学习一门弱类型的动态语言,比如Ruby或者Python!
弱类型有缺点,比如编译器的自动支持不够好,但这些问题在未来总归是能解决的,因为有懂编译器的大牛搞定,说起编译器,基本上懂或者写过编译器的人,编程水平超出别人一大截(这不是废话吗)。于是,在简历上写“搞过编译器”,那简直是夜空中闪亮的星!如果我是面试官,一定会首先考虑!你会想这样对不懂编译器的大牛们太不公平了吧,可惜,很多事情就是如此的正相关。算法搞得好的人,他的编程,知识和技巧肯定不会差。编译原理的知识,能够让你解决大量很酷的问题,能重新审视写过的代码和系统。什么能让你彻底精通一门语言,那就是设计它的编译器!
软件需要哲学家,因为哲学能帮你更好的理解和抽象问题。而数学也非常重要,学生时代的数学课程有问题,它教了太多对程序员太不实用的东西。如果说普通数学和计算机最大的区别,那就是前者是连续的,而后者是离散的。如果你有机会把离散数学,概率论,线性代数都再学一遍,那么编程水平就会又有一个质的飞越,做到可以随手写一个机器学习的算法。
所以,趁现在还处于黄金年龄,赶紧静下心来学习吧,有无数值得看的书,要学的数学和算法,要研究的编译器(也许我真能学点皮毛呢)。避免眼高手低,去把它写出来。不要问为什么,世界顶级公司的平台,待遇和发展值得你这样去努力!也许被Google这样的公司拒绝并不好受,但要知道很多大神也被拒了两三次之多,无非就是再等半年么,相信我,时间过得很快的!
坚持做一个傻瓜!