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