如何提高自己的编码能力

210 阅读7分钟

曾经有人问,如何提高自己的编码能力,所以就写了这样一篇文章,分享一些技术大牛,包括本人的一些经验。

什么是编码能力,什么是技术能力

本文中提到的编码能力和技术能力是有一些区别的

  • 编码能力:对代码的掌控能力,编写代码的效率高低、代码的可读性的好坏、代码的性能好坏、代码的结构是否有条理、代码的逻辑是否完善等等等。
  • 技术能力:技术的掌握程度,对技术的深度、广度的研究,以及运用技术解决实际问题的能力,技术能力在一定程度也包含编码能力。

总之,编码能力讲的是对代码的掌控能力,技术能力是对技术的掌控能力。

如何提升编码能力

在我刚学编程的时候,有一堂课是老师带我们写一个简单的web项目,我们看到老师一刻不停的写代码,创建包、创建类、创建方法,各种快捷键用的飞起,感觉他写代码都不用思考,之后有同学就问老师,为什么你写代码那么快?老师傲娇的回了一句:

无他,唯手熟尔

在之前的一家公司,CTO发现我写代码很快,就问我说,你写代码这么快都不用思考吗,不会出bug吧?我回复说,因为这个项目我非常熟悉。

其实对项目熟悉只是一个原因,另一个原因是自己作为主力,对于类似的代码已经写了无数遍,这些代码哪些地方需要封装哪些需要继承哪些需要利用设计模式哪些地方需要用缓存、参数如何设计、系统交互用MQ还是接口调用、是否需要重用、业务是否需要隔离等等,其实已经在脑子打过草稿了,看似即兴发挥,其实也是靠很多年反复练习才达成的

做更多,勤总结

可能有人觉得,经常写类似的代码,对自己技术能力提升帮助不大吧。

很多业务需求,反映到项目中,其实都是增删改查,看似代码相似度很高,但是写每个需求时考虑的点是不一样的,有些考虑性能、有些考虑复用、有些需要我们考虑代码隔离,可能最后还是写了类似的代码,但是前期的思考过程也是一种锻炼。

至于对技术能力提升大不大,这个要分情况,如果基本功比较差,对于java的四大特性运用的不熟练,对于设计模式的理解仅限于几篇博客教程,那么多写一些类似的代码可以提升基本功,写的多了,自然会越写越好,比如以前写增删改查不需要考虑很多,现在写增删改查,需要考虑性能、安全、参数设计、系统交互、是否需要重用等等,每一次写,只要加入自己的思考,都会有新的收获。

程序员编码能力是基本功,多编码可以锻炼思维能力

其它一些经验

  • 多学习别人优秀的代码,学习代码的最佳实践
  • 代码Review
  • 良好的编程习惯(代码注释、代码格式、重视自测、重视重构等等)

国外大牛的经验

来自前美国宇航局工程师,python大神Daniel Roy Greenfeld的博客中的一篇《code,code,code》,旨在帮助新手程序员知道如何才能提高自己的编程技能。

译文

这里是我的方法。它不一定完全适用于你,这些方法也不存在任何的先后顺序,它们中的任何一条都可以作为你开始的途径。

  1. 我会大量的编码,从简单的脚本,到自动化的任务,再到尝试去写成熟的项目。不管是工作还是兴趣所致,我失败了很多次,但是在编程的过程中,我学到了很多。
  2. 我不会在各种语言之间来回切换,相反,我会专注于一种语言很多年,并把我的学习重点放在那些工具上。我19年的职业生涯可以归纳为FoxPro,然后是Java,然后是Python。在这些期间,我还学习过JavaScript。当然,我也玩弄过一些其他的语言(Lisp,Haskell,Lua,Perl,ColdFusion,Go),但是仅仅只关注一些方面,有个基本了解。
  3. 我大量编码。是的,这个和#1是重复的
  4. 一旦我掌握了一门语言的基础知识,我就会去寻找每个知识点的最佳实践。然后,我会果断的吸收它们并坚持使用,甚至作为一种教条来规范自己。通常,这就意味着我的代码会更容易阅读,更容易调试,最重要的是,更容易被分享。
  5. 我有没有提到我会大量编码?除非你练习,否则你永远无法做任何事情。这是对于#1的又一次重复
  6. 我克服了害怕提问题的弱点,尽管,大多数时候,我仍然时不时的会害怕。实际上来讲,通过提问你不仅不会显示你的无知,反而会表现出你愿意学习的欲望。另外,学着搞清楚如何去提出问题的这个简单行为可以让你以正确的思考方式去决定你要的答案。
  7. 只要我问了一个问题,不管我是否得到了答案,我又编了一些代码。编码,编码,编码,再一次重复#1
  8. 一旦我掌握了一种语言,我就会找到这个语言的cookbook或是手册作为参考资料。对于技术书籍,我偏爱阅读纸质书(其他领域的我统统都是看电子书)。Cookbook中的方法技巧成为我语言工具的基础。简单易懂的手册提示可以让我更轻便的学习。
  9. 我会将学到的方法技巧和以及参考应用到我的编码中,一次又一次地编码实践,无论是在工作时间或玩耍时间。Practice makes perfect!。为什么我在不断重复#1
  10. 多年来,我一直使用易上手的且稳定的IDE或文本编辑器。是的,我知道有一些非常强大的工具与强大的命令(Vim,EMACS等),但我不会停止去使用新工具。我的目的是编码,而不是修复桌面工具或神秘的文本编辑器。
  11. 再次反复提及#1,我使用文本编辑器编写代码。编码, 编码, 编码! 直到我的手指和手受伤,直到我不得不学会如何处理腕管综合征。编码, 编码, 编码!这就像学习武术,吉他或其他任何东西一样,重复简单的动作可以让你有信心把这些动作组合成更强大的东西,或者学习更复杂的东西。

我希望我做了什么

  • 研究计算机科学。如果我能再做一遍,那将是我学术研究的重点。它不会取代我的列表上的任何东西,我声明的学习方法依旧会保持不变。编码,编码,编码!
  • 我应该有更多的教程当然是没错的。如果没有机会可以像在网上或面对面的教练那样引导你走上正确的道路。那么你可以选择编码,编码,编码!

Practice makes perfect, right?