大多数程序员最重要的应该学习什么?

                   
banq
15-01-06 3 6581 21

大多数人以为他们需要学习特定技术、算法、数学或其他形式的具体知识。 但是在Joost看来,这些从来都不是最主要的。 最主要的是他们需要学习“ 自律 ”。这是来自What most young programmers need to learn一文的观点:

过去七年半以来我在Ronimo辅导了很多编程实习生,数百名学生和毕业生,在他们身上我看到一样同样的东西需要学习,也许有人认为,他们应该是需要学习特定技术、算法、数学或其他形式的具体知识。 但是在Joost看来,这些从来都不是最主要的。 最主要的是他们需要学习“ 自律 ”。有纪律地编写清晰代码,有纪律地在代码变得混沌时重构它们;有纪律地删除未使用的代码和添加备注。

我在这个主题上花了大部分时间辅导实习生,不是解释先进的技术或我们的引擎的细节,而是让他们编写更好的代码,我总是询问有工作经验的开发者,他们认为成为优秀程序员最重要的是需要什么?他们通常回答代码应该清晰,易于理解和维护。这确实也是我想听的,但是年轻的程序员罕有能始终遵循的。

记住自律,不要停息,如果所有变量的名称都错了,但是功能完美,那么代码将超级混乱,从功能代码中逐步理清虽然在短期内可能得不到回报,但这就是迈向自律的第一步,这也是作为实习生的好的导师通常非常注意代码质量,从而能迫使实习生迈出正确的第一步。

下面是我经常看到的一些例子:

假的函数/变量/类

这些函数 类和变量实际做的事情并不是它们名称的意思所代表的,而是实现其他功能,它们的名字是假的,名不符实,很明显,名字应该是正确的,但是让我们惊讶的是很少见完全封闭的名称。

......
(banq注:缓存失效和命名是计算机科学最难的两件事)


纠结在一起的类

我看到另外一个问题是泥团一样黏糊在一起的类,做了很多无关的事情,无关的新特性新功能一点点加入,让简单的类变得臃肿,塞入各种与该类名无关的行为,有时一个类的大小超过几百行代码。

...

避免这个问题的办法应该总是想:我在这里添加的功能符合类名本身吗?如果不是,那么重新命名类的名称,或者分成两个独立的类。

如果你不能想出一个代码类的合适名称,就会发出坏味道,那类的内部就会变得混杂。有时可能一个需要分成两个部分,才能找到合适的名称分别代表它们。

超大号的类
随着时间推移,越来越多代码添加到一个类,变得非常臃肿,虽然这个类还能工作,但是代码太长,非常繁琐,容易发生很多bug,方向和细节混同在一起。

切分一个非常大的类的工作是枯燥的,也是一个挑战,类中代码高度交织在一起,运行中不断修复添加新功能,最后结果是必须有自律才能阻止它变得更大。

一般经验是我们尽量保持类代码低于500行,函数低于50行,有时虽然不可行,但是我们总能寻找到办法来重构它,切分成更小 更易于管理的代码块。

代码的注释
如果没有注释,代表没有任何信息,这是临时破碎的代码吗?被取代的旧代码在哪里呢?
..

并行逻辑和重复代码
举一个例子,有某个结构特征的名称暗示我们一些它是什么的信息,比如“TreeBackground.dds”. 为了了解这个特征能被用于一个tree类,我们需要检查文件名中是否以单词“Tree”开始. 通过使用 filename.beginsWith(”Tree”)检查得很快. 这段代码如此短,但是我们在不同地方需要它,这样我们就拷贝粘贴它,这就造成了重复代码,当然每个人知道重复代码不好,但是这段代码真的很短,拷贝粘贴非常容易,我们这里面临的问题很明显:也许以后我们会检查这个结构特征是否适合树tree的改变,那是我们就需要在每个地方单独一个个去解决(因为这段短代码被复制到这些地方)

一般经验是,这段代码不应该被复制,应该放在一个函数中,即使它超级短,主要因为做一个函数再调用需要许多代码,而直接复制粘贴更直接简单?

本文讨论的事情似乎很简单,它们应该是大学第一年教,但是面临的挑战是如何让他们花时间去遵循,总是记住它们,这就是这为什么是最重要的事情,他们最应该学习的不是知识,而自律。

21
sinaID59023
2015-01-10 08:35

的确

tecentID7C790
2016-04-22 17:56

自律代表的是一种态度。

tecentID7C790
2016-04-25 13:55

纪律比知识更重要。态度决定一切。