经常有读者问我,一个优秀的程序员需要具备怎样的品质?普通程序员和优秀程序员有什么区别?这种问题回答起来也挺泛的,不同的人,也有不同的理解。
我 工作的时间比大家长些,见识的人也比较多,我 讲几点我认为比较重要的, 供大家参考参考。
架构,架构模式,谁都可以聊,看一本架构相关的书,看几节视频课程,记几个高大上的名字:微服务,业务中台,云部署 ... 然后感觉就高大上了。
这些词呢,程序员侃大山,或者销售去外面忽悠客户的时候说说就行,但我们具体做事的时候,就少说为好了。
架构意识要有,但架构设计是不能套的,架构设计是一个特别容易,也是一个特别难的事情。
容易的是,知晓几个名字,就可以侃侃而谈,难的是,如果你没有丰富的经验,丰富的知识储备,你就是把团队往死人坑里带。
一个同事面试过一个实习生,上来就跟他谈架构,谈的云里雾里,他也无法判断实习生说的,是对还是错。
我们听完,都笑道:“实习生都来设计架构了,那代码谁写呢?”
虽然只是一个段子,但也侧面说明了架构设计需要积累。
为什么说成为一个合格的架构师那么难?成为一个高级架构师更难?
因为要有很丰富的实战经验,这个是跟时间正相关的,所以一个实习生,一个毕业生,上来就谈架构,凭常识判断就不靠谱(当然一些顶级的天才除外)。
架构是权衡的艺术,权衡的好坏取决于架构师以往的项目经验,甚至是设计直觉。
这些从书本都不能获得,只有真刀真枪干过几年,才能略有心得!
这个道理在很多领域都适用,软件领域也是一样。记得有个面试者跟我说,他不认可我的面试方式,觉得我纠细节,然后跟我谈整体思维。
不好意思,如果你的细节描述不到位,就是过不了我这关的。
大型软件是构筑在一行行代码之上的,一个标点符号少了,编译器都会报错,然后你跟编译器说,不要太纠细节,不就少了个分号吗?你觉得可行吗?
其实很多大型软件,甚至很多知名软件的设计,比较关键的,可能就是几个特别的算法或一两个核心模块的实现。
如果你仔细研究,会发现它们都是逻辑严密,一分一毫不差的,你会发现,现代信息社会就是构筑在这种严谨之上的。
思考,你可以天马行空,但写代码,出方案的时候,就要纠细节,就要有严谨的态度。
这是一个良好的职业习惯,一旦养成,能给你的人生带来很大的助益。除了技术,就算你后面从事了其它工作,也能带来很大的助益。
基础,一个老生常谈的问题。这确实是成为一个优秀程序员的必要条件。
无论你有多聪明,基础不牢,你的技术天花板,职业天花板就会受限制,你很快就会遇到瓶颈,很快就会停滞不前。
觉得自己这个语言,那个框架都会了,但就感觉没长进,而对很多的技术细节又老感到飘忽,这种就是典型的基础不扎实的表现。
学习基础知识最好的时期是大学,大学时期,时间充沛,而且不用为了赶项目,草率翻翻,可以有充足的时间,慢慢学,慢慢吸收。
当然,基础知识也不是过了大学时期,就不能学了,工作之后也还是可以的,只是相对会更累些。
不过这些付出都是值得的,几年后,再回过头来看,学习基础知识看似浪费了时间,但因为基础扎实,你对很多技术细节,技术原理的理解更深刻,使得你的技术视野,技术能力可以一直有提升,最后反而是事半功倍的事情。
天才程序员有吗 ?确实有。但毕竟不是每个人都是天才,天赋这种东西也是可遇不可求的。
弥补天赋的只有努力!
前段时间跟一个我觉得很有天赋的产品经理闲聊,我赞他产品能力特别强,特别有想法。他淡淡说了一句,他觉得这个并不是来自他的天赋,只是他在这方面花了更多的时间。
如果是一般人说这句话,我听了也不会有啥感觉,但这句话从他的嘴里说出,并且带着不客套且很真诚的语气的时候,我确实吃了一惊。
我突然意识到了努力的重要性,意识到了我们大部分人的努力,还远未到拼天赋的程度。
很多厉害的大牛,外人在谈起他们的时候,都称赞他们的天赋异禀,但真的跟他们深入交流的时候,你才发现,实际情况并非如外人所想。
很多时候,他们只是很喜欢这件事情,沉迷其中,并享受其中的过程,然后花费了比一般人多的多的时间。
当积累达到一定的程度,量变产生质变,你便成为了人们眼中的大师!
优秀的程序员之所以优秀是有道理的。正是以上的这些优秀品质使得一个程序员变得卓越。这些点大部分读者其实都是知道的,但要践行起来也确实不容易,但人与人之间的差距,也是在这日复一日,年复一年的坚持中拉开的。
当然,我估计也有些读者不知晓这些品质对于一个程序员的重要性,希望不知晓这些点的读者(比如我上面说的实习生)看完后能有所启发。
推荐阅读:
几个人生难题
普通人的逆袭
一盆冷水!
如果你陷入职业迷茫,就看看这些建议!
基础知识真的是九阳神功吗?
不要信仰BAT!
你好,我是大飞, 十年互联网人!
如果你喜欢我的文章,就给 公众号加个星标 吧,方便阅读。