你认为拥有一个伟大的记忆是一个伟大的程序员吗?
我不认为自己是一个伟大的程序员,但我认为我很体面.但我的记忆真的很糟糕,所以我发现自己总是不得不提醒自己该怎么做.我的意思是"我知道在哪里看"但有时它让我觉得我只是一个蹩脚的程序员.更糟糕的是,我总是忘记源代码中的内容或我在某些情况下使用的算法.
回想一下你在生活中遇到过的优秀程序员,难道他们似乎都没有惊人的回忆吗?
肯定是圣洁的,但这是爱因斯坦的号码:
记者采访了阿尔伯特爱因斯坦.在采访结束时,记者询问他是否可以拥有爱因斯坦的电话号码,以便他可以打电话,如果他有进一步的问题.
"当然"爱因斯坦回答道.他拿起电话簿查看了他的电话号码,然后把它写在一张纸上,递给了记者.
记者傻眼了,说:"你被认为是世界上最聪明的人,你不记得自己的电话号码?"
爱因斯坦回答说:"当我知道在哪里找到它时,为什么要记住一些东西呢?"
将您的短期记忆视为堆叠(不是静态的),并且不要期望它更多.我回到了一个月前我写的代码,它几乎就像别人写的那样......它只需要一段时间才能回到同一区域.
我被戏弄了,经常是为了给自己留下评论,比如面包屑......但它确实有效.如果我完成一些功能并说"AHA,那绝对是非常棒的!",我立即评论我的复杂性,因为我肯定会忘记.
那么现在,用两个问题回答一个问题:
你上周三午餐吃了什么?
hash_foo()中'counter'的目的是什么?
至少,使用#2,您可以快速返回并查看/记住.
只要你能记住google是如何拼写的,你就没事了.:)
但是说真的,你确实需要在yoru短期记忆中同时保留几件事.我认为长期记忆不那么重要.只要你知道存在某些东西,你之前就已经看到了某些东西,等等,当它变得相关时,你会知道你可以挖掘它.
经验丰富的程序员通常可以反复使用API,小细节等等,但根据我的经验,这从来就不是一个坐下来记住死记硬背的情况.这是一次又一次地使用东西的自然结果.
我有这个同事编写非常糟糕的代码,难以维护.我得出结论,他的问题是好记忆.他只是能够记住他在哪里放置了什么功能.因此,他不必编写不言自明的代码.他只记得那个垃圾.我们其他人很难搞清楚他的代码.
我敢肯定,良好的记忆不是那个人唯一的问题.但我相信如果他的记忆变得更糟,他的代码会有所改善.
我会说相反,拥有良好的记忆可能会导致编写只有作者才能理解的代码,因为她记得其逻辑的细节.另一方面,我有糟糕的记忆,记录我的代码并尽可能清楚地写出来.
我只用一个词就可以回答这个问题:不.拥有记忆所有关于编程的美好记忆不是必须的.经验和实践中的繁琐学习是最好的.
我也经历过这个.如果您有足够的经验(或可能是几年)创建应用了最佳实践的软件,那么您就是自己的工作或用于创建软件的编程语言的真正掌握者.如果你有不好的回忆,请不要难过,但努力学习和练习可以打败你的记忆力弱点.
老实说,我发现可怜的记忆力是一种资产,即使是短期内存也很差.糟糕的短期记忆真的迫使你打破分离的担忧.最终结果是非常干净,非常简单,封装好的代码.我实际上有很好的短期记忆,但是我已经学会了在编写代码的几次经验之后尝试非常努力不使用它,而我却分心,我不能立刻保留很多.我真的很震惊地发现,代码实际上比我过去开发的代码要清晰得多.
糟糕的长期记忆是一种资产,因为你最终在如何查找和学习技术,API,算法等方面训练自己.它还倾向于鼓励你找到一小组共同的主题来指导你的工作.
总而言之,优秀程序员的标志不是复杂性(没有良好的记忆就很难实现),而是简单性(本质上不需要太多内存).
对我来说,世界上有两种程序员.第一个出生是为了做到这一点,第二个是学到的.在这两个群体中,他们的范围从令人难以置信的贫穷到令人难以置信的伟大.记忆是否表示这些评级?不,绝对不是.虽然良好的记忆力可以帮助你学习,但没有什么比练习和理解更能帮助你.毕竟,能够记住整个百科全书百科全书,如果没有理解就没有任何意义.我的服务器存储是一个典型的例子.
编程是关于逻辑的,包括代码和解决问题的方法.如果你想要清晰,易于理解的代码,那么你很可能会将问题分解成小的可管理的块(即在你的整体中适合你的头脑)并在每一个上工作.然后,每个函数都会缩减为一个命令,以用于下一个复杂阶段.在下一阶段结束时,如果还有另一个阶段,您将再次拥有一组单个命令来构建.逻辑命名,逻辑分区,逻辑汇编......我认为我的逻辑点正确;)
我的记忆令人震惊,我的意思是骇人听闻.我可以介绍给3个人,到时候#3的名字就说我已经忘记了#1是谁.我仍然可以写一些好的代码,而不是每次或每天; 当你在这个区域时,它就是别的东西,那时它就是艺术.所以,把你的记忆放在一边,让自己成为一个非常安静的空间或粉红色的噪音发生器并潜入.唯一能使你成为更好的程序员的是练习,练习和练习.唯一要记住的是,编程是一种技能和技能,并且最好在能够提供建设性批评和建议的朋友中实践......比如Stack Overflow :)
为这个答案的大部分道歉,但我不记得我已经写了什么;)