程序员分好多种,顶端的比如阿里腾讯头条的大拿、算法博士、资深架构师等(这里笔者只讨论纯粹技术开发,管理岗不在讨论范围之内);中端的往往是有几年开发经验的工程师,老实说在笔者看来这个阶段的程序员绝大部分都搞不清楚怎么写出优雅的代码;最低端的当然是刚出校门的小白了,没有什么实战经验,在学校里学的又是老掉牙的技术,出了校门基本可以说是两眼一抹黑吧。
笔者这里并没有鄙视任何人的想法,毕竟软件是一门实践性很强的技术,同时根据笔者多年的工作体会,中国的程序员普遍缺乏两个东西:一个是软件的设计方法学;另一个是编程技术的学习方法论。
在展开论述如何成为高手之前,先统一几个认识。
首先,什么才是编程高手?是不是懂java优化、懂sql优化、会用kafka、会用hbase、写过一堆乱七八糟的软件就是高手了?
高手的代码一定是简洁的,别人都能看得懂的。大家承不承认这一点?如果代码写的很晦涩,别人都看不懂,那能成为高手吗?会几十种拳法就是高手吗?把一套太祖长拳打的天下无敌才是最高的高手,古人说大道至简一定是正确的。
怎么学习呢?是不是把每种大数据技术都学一遍?学的过来吗,谁有那么多时间和精力。笔者的看法,学编程和打仗是一个道理,一定要集中优势兵力打一个地方,大数据技术说白了核心是分布式技术,分布式技术又分分布式存储和分布式计算两种。不管你产品怎么变,技术怎么更新,内在原理是变不了的。就拿笔者来说,学习大数据也才2年的时间,但笔者把Zookeeper和Spark的源码啃了个遍,因此学其他技术就特别容易,我想高手都是这样,一定是抓住了本质。
设计模式是一定要熟悉的,并且要有意识的用,单例模式、命令模式、代理模式、桥接模式等等,只有掌握了设计模式,你的代码才是给人看的,别人才能看得懂,才具有可维护性。不懂设计模式,代码最后一定是越写越乱,没人看的懂。笔者职业生涯就干了好几次代码重构的活,真的是苦不堪言。
最后还想说一句,不管你是从事哪个领域的开发,一定要专,把自己的领域吃透。最忌讳一山望着一山高,什么都学什么都不精,白白浪费自己的宝贵时间。