我是一个程序员,有些实在话想对你说
我个人是一个程序员,关注web、分布式和数据处理。
我将web看做最流行的、天然跨平台的展现和可视化技术,将分布式看做程序协作、协作程序的最适架构,将数据处理看作需要基础、技巧、认知、视野以及领域知识兼而有之的事,所以做数据处理,会提升基础、技巧、认知、视野以及领域知识。 我认为能力的提升来自厚积,所以对于基础的东西,应该保持持续的热情。
认为基础应该包括但远不限于: 数据结构和算法、 算法、 网络(tcp/ip、p2p、http等等)、 计算机体系和操作系统(内存管理、高速缓冲与缓存、线程与并发、资源与争用、CPU周期、局部性原理等等)。
认为以上基础永远没有精通一说,至少在我这个智力层次看来。比如你看到严蔚敏数据结构了,挺好,你又看了算法导论了,更好,能看看普林斯顿的算法,你挺不错,你又看了些论文,而你确实又用vim、emacs、vs、eclipse或者sublime敲了,那你应该可以一眼就看出满世界的博客的算法文章中的纰漏和层次,那你还是有点功力了。
知识结构的重要性与项目经验会相互影响。同样的项目,类似的角色,因为知识结构的不同,带来的提升和总结也会不同,这种提升对于下一个项目或者更复杂的项目带来的裨益也会有所差别,更长的时间之下,这种差别巨大到值10W还是100W。
有十年工作经验,还是一件事重复了十年,差别可能就在这里。
认为类似“精通java”之类的说辞是存在的,但不谈JVM是耍流氓。类库和框架的熟悉来自工程和项目,可以熟悉一个简单的API,也可以追着理解AOP,可以应用地很简单也可以很复杂。如果关注性能的场景,那么应该自觉地关注JVM。但是JVM是浩大的工程,所以理解它是一个长期的过程,所以精通是一件比较困难的事。但是很多常用的场景,比如BufferedReader和FileChannel、mmap都可以是I/O的一种选择,何者更加适合,往往要看虚拟机里面和操作系统做了些什么,才会理出最佳实践,附带的,对Xss、Xmx、directMemory之类的简单配置也会有更深的理解。同时有助于看到基于虚拟机的语言的局限,比如HBase的BlockBuffer本身是提高读取的效率的设计,但因为JVM的堆和GC机制,这个设计可能会拖垮HBase。
这一点同样应该适用于C#&CLR。
工作了多年的人都会认为或者自恃自己在某些方面达到精通的水准,有的人的确达到了,但附带着会有些装、虚伪和极爱抖机灵,他不会和你好好地探讨问题。这种人可能会存在于朋友、同学、同事、上司当中,一个程序员不会活在独立的容器之中,除了在实力方面要保持自信和谦逊以及付出更多的努力之外,还要注重坚持自己的一些原则而不受一些不够正能量的企业文化、圈子文化影响,做自己,才能更好的对待技术,才能给雇主带来更佳的气场感受和实际价值。
这个世界不缺乏喷子,有的喷子本身也很厉害,甚至比自己厉害的多,这是他们活着的方式,情绪控制不是什么技巧,你理解的越透彻,你就越能看清什么是喷子,什么是恨铁不成钢。
关于技术实用论,总有一种观点是没去过美国就不应该知道星条旗。比如,不是每个公司,每个程序员都会接触到大数据,但是人类在没有飞天的远古,就已经通过图腾和壁画来开启文明的探索和解读了,这种东西,其实是信仰的力量,说俗一点就是兴趣所在,再俗一点,就是机会总是留给有准备的人,愿意不愿意准备看态度和理解,准备了能不能够将来用得上,看机遇,实力和运气都挺重要,但运气你控制不了。
人类的大部分知识来自间接渠道,比如阅读书籍、观看媒体、道听途说,离开了学校,但并没有离开知识的媒介。好的知识来源,比好的学习方法更加重要,这通常也是牛逼的院校和不牛逼的院校的主要区别。有的学校的老师在微博还在成长的阶段就开始讲授社会计算了,如果你没有这个知识渠道,应该不会认识到ETL、数据挖掘和倒排索引的意思,可能你已经熟练的修改、添加、编译lucene了。
但是,再好的知识,离开了实践,均不会得到升华,认为一个好的程序员,应该关注代码和实现,但应该摒弃简单copy原则,虽然copy大多数情况下对付工作够用了。私下里,一段关键代码写个十来遍真傻,挺蠢的,但如果每种写法有个思考和理解在里面,有选择地这么做了,再看设计模式和重构,哦,真是这么回事,用茴香豆的方式当傻子不是那么不堪忍受的事,至少理解了什么是错误,什么是差别,也给你创造了工作之外的提升场景。
很多人持这种观点,中国人,技术都是差的,也是写不出hadoop的,挣钱最重要,但自己又觉得自己很厉害。
其实将写出hadoop和挣钱作为标准,这个观点本身就太局限了,人这辈子,钱当然重要,写出能用的hadoop还是写出mini操作系统还是mini虚拟机,都不必太当回事,阅读源码和自己实现所营造出的理解深度天上地下,这种愚公移山的做法,更多在于逼迫你去了解更多、更准、更深刻。大部分hadoop专家,其实都是仅仅看了源码而已,就已经能出书了,事实上很多公司在实际中也只是跑一些很简单、很成熟的挖掘算法,爱奇艺的工程师做线性回归也是实用即可,大部分公司还是在处理日志,有时候想了很牛逼的算法,还没有换成SSD重要,所以没那个环境,没那个条件,就不研究了?我想不是的。
关于挣钱,我觉得,只要兴趣所在,能把事做好,钱自己就会来。收入上不去,往往是做的事情就不在高收入的那个区间,写程序很难出富翁。说实话,外围一天的消费可能就是你工资的好几倍,不用说外围的收入了。夜总会想玩的high一点不开两瓶路易十三,可能还会被小姐骂伪土豪,你不送你喜爱的红、蓝、绿牌花束,你都不好意思和她回小区或者宾馆探讨遗传算法。
那么和外围一起探讨遗传算法的王总、李工的收入更不是写程序的可以比的了。所以不要太刻意地把写程序这件事和挣钱挂起来,局限了你挣钱的本事。但理解废话,对我来说,不是那么简单的事。 |