43 | 阻碍你成为优秀程序员的两个坏习惯
你好,这里是卖桃者说。今天跟你聊聊程序员的两个坏习惯。
程序员是一个很有意思的职业,入门门槛并不高,如果你学习能力强,自学几个月就能写出简单的程序,还能成功运行起来。但它的晋级路线却很陡峭,也就是易学难精。以前看到过一个比喻还挺贴切的,人人都会做饭吧,但不是人人都可以当厨师。
程序员在成长过程中,会有无数坑和障碍阻止你从新手成长为优秀程序员,数据结构要学,算法和编译原理要懂,还有各种软技能,甚至,你在不经意间养成的坏习惯都会阻止你进一步提升自己。
有些坏习惯并不那么引人瞩目,只是会在潜移默化中阻碍你发挥自己的能力。今天,我就跟你聊聊可能阻碍你成为优秀程序员的两个坏习惯。
1.只是会用,而没有真正掌握一门编程语言
我经常跟初入职场的程序员同学们讲,编程语言之于程序员,就如同青龙偃月刀之于关羽,如意金箍棒之于孙悟空。你想写出一手好代码,那最起码需要精通一门编程语言,为此花费再多的精力也不为过。
然而在实际中,很多人对编程语言的掌握程度也就是会用,迫于工作需求,粗粗掌握一些语法、看过示例代码就撸起袖子开干,然后边查 Google 边写,也就是所谓的“在实践中学习”。这的确是快速学会一门语言的高效方法,实践出真知嘛。如果你学习能力好的话,说不定写出来的代码质量还不差。
但这种方法也有弊端,很多人大概率只能掌握语言中最常用的 50%,也满足于这 50%,毕竟已经能解决工作中的大部分问题了。剩下的 50%,平时看着不会有什么影响,当你想更进一步的时候就会跳出来成为拦路虎,就算你通过翻阅各种资料侥幸解决问题,也依然是知其然不知其所以然,下次很有可能踩进同样的坑里。
所以,对于你选择的语言,千万不要止步于会用、能写代码就行,而是要牢牢掌握它,做到真正精通,这是你日后在所有领域拓展的根基。以 Java 为例,Java 的那些核心语法你都掌握了么?抽象和继承都搞清楚了么?常用的类库和工具你都熟悉么?面向对象的思想还有多线程等技术难点都掌握了么?
就像范学雷老师在他的专栏《代码精进之路》里写的,编程语言就像一套功法,练得越多,练得越纯熟,用起来就越得心应手。武侠小说里,一套功法只有练了全套,才有最大的威力。对于编程语言,我们了解得越多,熟知的招式就越多,可选择的范围就越大,我们就有更多的活动空间和解决问题的办法。
另外,编程语言之间基本上是相通的,掌握了第一门,第二门语言学起来就会快很多,第三门语言会更快。现在我们几乎都是多语言使用者,但一定要先精通一门语言,达到像用筷子那样的熟练程度。
听到这,你不妨问一下自己,今天常用的编程语言,你真的掌握了吗?写代码的时候能做到胸中有丘壑,还是需要时不时去 Google 一下呢?
2.只是 Copy & Paste,但不加以消化
说句老实话,很多程序员在编程早期都有过 Copy & Paste 的经历,很多时候也是不得已为之,俗称面向拷贝粘贴编程。
尤其是最近几年,软件开发行业越来越追求速度,“开发过程越快越好,越快越有竞争力”成了不少从业者的共识。这也无可厚非,快速开发、快速发布可以快速得到用户的反馈,从而更快地验证用户价值假设。
落到实际工作中,快速上线这个目标最终都会压到程序员头上,为了赶工期,很多程序员往往会选择各种“捷径”,比如要开发已有功能的一个相似功能,因为时间很紧就先 Copy & Paste,先保证功能按时上线再说。
我对 Copy & Paste 本身持中立态度,复用本来就是编程的要素之一,它确实能让我们在短期内保证快速交付,满足业务发展需求;但复用不是复制粘贴,也不鼓励一味的拷贝别人的代码,复用是一种高级技术,而不是走捷径的做法。一时的投机取巧,并不能让你找到问题的最优解。短期或可一用,长期这么做,不同来源、不同风格的代码堆砌在一起,很容易形成技术债,反而让速度慢下来。
简单来说,除了帮助你赶工完成任务,Copy & Paste 并不会给你带来更多的实际价值,比如知识的积累、能力的增长之类的。你不可能 Copy 一遍就记住代码的内容,弄懂它的原理。
如果你不得已 Copy & Paste 了,那之后最好抽时间再自己把代码写一遍,想想它为什么这么写,用到了哪些方法和设计模式,原理是什么,然后根据自己的理解把代码敲出来。这样,你 Copy 过来的内容才能变成你自己的东西。很多人写了 5 年的代码,能力成长还不如只写了 1 年的新手,区别就在这儿。
总的来说, Copy & Paste 不是问题,问题在于你有没有进一步消化,把代码及其背后的逻辑与原理内化成自己的东西,最终写出带有自己风格的优秀代码,不再 Copy & Paste。
当然,程序员的坏习惯并不只有这两点,其他的还有:没想清楚就直接上手写代码、不重视文档、不声明类型、不写注释、使用无意义的命名、上下文频繁切换导致注意力不集中等等,最终都会影响到你的成就。
其实,这些坏习惯归根到底是态度问题。一个人的潜力往往来自于三个方面,知识、技能和态度,而态度能决定你会怎样去完成你的项目,以及从中收获多少。很多时候,决定你高度的不是你的天资,而是你的态度。
最后做个小调查,你会在工作中 Copy & Paste 么?频率如何?会把 Copy 来的代码再次重构和优化么?
好,今天的话题就聊到这里,卖桃者说,明天见。
(编辑:夏天)