即使拥有40年的编程经验,我唯一能确定的就是肯定有比我更好的程序员。但是我并没有放弃,我会继续尝试并提高自己的编程技能。
我认为有五件事可以帮助任何人成为更好的程序员。有些是我个人的经验,有的则是我从网上和其他程序员那里学到的方法。
查找适合您的学习方法
我们每个人都以不同的方式学习。例如,我不是视频学习的忠实拥护者,而是宁愿从书本或网站上学习。而且我敢肯定我并不孤单:对于许多人来说,一段30分钟的视频(甚至更长)太慢了。这就是为什么YouTube上一些最受欢迎的编程视频往往很短的原因-在许多情况下,时间在5到12分钟之间。
如果您在学习视频方面遇到困难,建议您去上学,阅读。回到我刚开始的时候,编译器附带了广泛的纸质手册,您可以从头到尾阅读。现在所有软件文档似乎都在线上,您可以按照自己的进度阅读。
如果您不是被动学习的爱好者(无论是基于视频还是基于文本),那么还有另一种可行的方法:编写比赛代码。您不必取胜,但是将自己的技能与其他人置于快节奏的环境中通常会教给您一些新的技巧。而且,如果您确实赢了-嘿,通常会有现金奖。Project Euler[2],TopCoder[3],Coderbyte[4]等几个网站都可以挑战您。
无论选择哪种教育方式,都要确保离开舒适区。您需要投入未知才能成为更好的程序员。即使您有多年的经验,仍然有很多东西要学习。
简化您的代码
只要有问题的代码写得好并且易于遵循,阅读其他人生成的代码就很有见识。如果您在编写和维护代码时遇到麻烦,检查有经验的程序员如何处理类似的任务是挑选一些指针的好方法。通常,您会发现这些专业人士尽可能地简化了他们的代码。
这是我多年来积累的一些简化技巧:
删除明显的复制和粘贴代码。如果您在不同的地方看到相同的代码,则很可能成为类中的函数或方法的候选者。
将大型代码块拆分为较小的代码块。同样,您可以将这些巨大的块简化为函数或方法,即使它们仅被调用一次:具有有意义名称的代码块也更易于遵循。您并非总是能够将代码简化为单一功能,但这是您可以追求的目标。
使用重构工具使变量名更具描述性。另外,添加有意义的注释。从简单的函数开始,以便您可以理解它们,并力求在每个函数,类和方法的顶部至少有一行注释。
学习不同的编程语言
同样,作为一名程序员而提高意味着要超越自己的舒适区。例如,如果您了解面向对象的语言,请尝试一种功能性的语言。对于C#,显而易见的功能语言是F#。同样,如果您仅编程桌面应用程序,请尝试学习移动或Web开发[5];如果您知道C#,则可以将Xamarin用于移动开发[6],也可以将ASP.NET MVC用于Web。我知道台式机C#和Xamarin,但不了解ASP.NET MVC,我最近开始学习在线课程。
尽管它可能对您的编程无济于事,但我鼓励Windows开发人员学习如何使用Linux[7]。您可以将其安装在旧PC或Windows机器上;如果要对网站进行编程,请尝试在Linux[8]上设置Apache Web服务器。
学习新编程语言的首选方法是转换现有的实用程序或小型程序。因为您已经知道它的作用以及它的工作方式,并且获得了输出或测试结果,所以使用新语言确实可以简化学习过程。例如,我通过获取现有Z80编辑器/汇编器的源代码并从中编写6502交叉汇编器来学习Z80汇编器编程。我没有调试器,这可能有点极端,但是它对我有用。
探索不同的做事方式
这可能是这五件事中最难做到的。遇到编程问题时,我的直觉总是锁定解决问题的特定方式。但是通常有更多的方法可以解决它。一旦用通常的方法解决了问题,就可以通过更快或更节省内存的方法来重做舒适区。起初可能会令人沮丧,但它可能使您成为功能更丰富的程序员。
在调试器中单步执行代码
您可能会认为所有程序员都这样做;但是在我的职业生涯中,我遇到了至少两个没有这么做的人,他们留下了一个漏洞被客户发现。(“生产测试”,我曾听说过这种说法,但这并不是对职业的友好举动。)如果您确信自己的软件没有错误,那么可以采用著名计算机科学家Donald Knuth[9]的方法:他将奖励支票邮寄给发现自己编写的软件有错误的任何人。
不愿意冒险吗?单步执行代码。您将对正在发生的事情有一个更好的了解,确定自己思维中的薄弱环节,并在下次构建类似的软件时学习做什么(或不做什么)。
结论
我会练习这些技巧吗?多半是对的。正如任何程序员所知道的那样,当您忙于工作时,很难找到学习和成长的时间。尽管如此,重要的是要保留时间尝试新事物。尽可能地保持技能的磨练不仅是保留您的工作,而且还可以完成您实际想要做的项目的最佳方法。
References
[1] David Bolton: https://insights.dice.com/author/dhbolton/
[2] Project Euler: https://projecteuler.net/
[3] TopCoder: https://www.topcoder.com/challenges/?pageIndex=1
[4] Coderbyte: https://coderbyte.com/
[5] Web开发: https://www.dice.com/jobs/q-Web+development-jobs
[6] 移动开发: https://www.dice.com/jobs/q-Mobile+development-jobs
[7] Linux: https://www.dice.com/jobs/q-Linux+Administrator-jobs
[8] Linux: https://www.dice.com/jobs/q-Linux+Administrator-jobs
[9] Donald Knuth: https://en.wikipedia.org/wiki/Knuth_reward_check
原文链接
https://insights.dice.com/2017/08/29/5-ways-improve-programming-skills/