大多数人以为他们需要学习特定技术、算法、数学或其他形式的具体知识。 但是在Joost看来,这些从来都不是最主要的。 最主要的是他们需要学习“ 自律 ”。这是来自What most young programmers need to learn一文的观点:
过去七年半以来我在Ronimo辅导了很多编程实习生,数百名学生和毕业生,在他们身上我看到一样同样的东西需要学习,也许有人认为,他们应该是需要学习特定技术、算法、数学或其他形式的具体知识。 但是在Joost看来,这些从来都不是最主要的。 最主要的是他们需要学习“ 自律 ”。有纪律地编写清晰代码,有纪律地在代码变得混沌时重构它们;有纪律地删除未使用的代码和添加备注。
我在这个主题上花了大部分时间辅导实习生,不是解释先进的技术或我们的引擎的细节,而是让他们编写更好的代码,我总是询问有工作经验的开发者,他们认为成为优秀程序员最重要的是需要什么?他们通常回答代码应该清晰,易于理解和维护。这确实也是我想听的,但是年轻的程序员罕有能始终遵循的。
记住自律,不要停息,如果所有变量的名称都错了,但是功能完美,那么代码将超级混乱,从功能代码中逐步理清虽然在短期内可能得不到回报,但这就是迈向自律的第一步,这也是作为实习生的好的导师通常非常注意代码质量,从而能迫使实习生迈出正确的第一步。
下面是我经常看到的一些例子:
假的函数/变量/类
这些函数 类和变量实际做的事情并不是它们名称的意思所代表的,而是实现其他功能,它们的名字是假的,名不符实,很明显,名字应该是正确的,但是让我们惊讶的是很少见完全封闭的名称。
......
(banq注:缓存失效和命名是计算机科学最难的两件事)
纠结在一起的类
我看到另外一个问题是泥团一样黏糊在一起的类,做了很多无关的事情,无关的新特性新功能一点点加入,让简单的类变得臃肿,塞入各种与该类名无关的行为,有时一个类的大小超过几百行代码。
...
避免这个问题的办法应该总是想:我在这里添加的功能符合类名本身吗?如果不是,那么重新命名类的名称,或者分成两个独立的类。
如果你不能想出一个代码类的合适名称,就会发出坏味道,那类的内部就会变得混杂。有时可能一个需要分成两个部分,才能找到合适的名称分别代表它们。
超大号的类
随着时间推移,越来越多代码添加到一个类,变得非常臃肿,虽然这个类还能工作,但是代码太长,非常繁琐,容易发生很多bug,方向和细节混同在一起。
切分一个非常大的类的工作是枯燥的,也是一个挑战,类中代码高度交织在一起,运行中不断修复添加新功能,最后结果是必须有自律才能阻止它变得更大。
一般经验是我们尽量保持类代码低于500行,函数低于50行,有时虽然不可行,但是我们总能寻找到办法来重构它,切分成更小 更易于管理的代码块。
代码的注释
如果没有注释,代表没有任何信息,这是临时破碎的代码吗?被取代的旧代码在哪里呢?
..
并行逻辑和重复代码
举一个例子,有某个结构特征的名称暗示我们一些它是什么的信息,比如“TreeBackground.dds”. 为了了解这个特征能被用于一个tree类,我们需要检查文件名中是否以单词“Tree”开始. 通过使用 filename.beginsWith(”Tree”)检查得很快. 这段代码如此短,但是我们在不同地方需要它,这样我们就拷贝粘贴它,这就造成了重复代码,当然每个人知道重复代码不好,但是这段代码真的很短,拷贝粘贴非常容易,我们这里面临的问题很明显:也许以后我们会检查这个结构特征是否适合树tree的改变,那是我们就需要在每个地方单独一个个去解决(因为这段短代码被复制到这些地方)
一般经验是,这段代码不应该被复制,应该放在一个函数中,即使它超级短,主要因为做一个函数再调用需要许多代码,而直接复制粘贴更直接简单?
本文讨论的事情似乎很简单,它们应该是大学第一年教,但是面临的挑战是如何让他们花时间去遵循,总是记住它们,这就是这为什么是最重要的事情,他们最应该学习的不是知识,而自律。
相关推荐
ADS仿真设计平行定向耦合器学习笔记
ADS仿真设计平行定向耦合器
为什么程序员要坚持学习呢?
进行社招面试时,有一个问题几乎是必问的:"你为什么要离开上一家公司?"其实这个问题主要是想试探一下求职者的核心诉求,并借此预估一下他在本公司工作的稳定性。常见的答案也无非就是这么几种:对薪酬不满意、干得不爽,或者是想换个环境。然而,我遇到过好几个初次跳槽的求职者给出的答案是:「在原来的公司学不到技术」。一听到这个,我就不由得叹口气:今天这一小时又算是白费了,这人基本上没戏。因为根据我的经验,这句话
吹气压力传感器US6310 US6330调试
更换压力传感器, 从US6310 更换为US6330。 6310有一个准备好引脚,AD转换完成后会给MCU一个脉冲 而6330就没有这个功能,6330这个引脚是用来选择SPI还是I2C接口的。(6330没有复位引脚,内部有POR功能) 因此在实现上是有根本区别的, 其它方面使用的命令也不一样, 6310 A8 A9两条命令,一个命令模块醒来,一个命令模块休眠, 6330只有一条命令AA, 命令模块开始转换。 针对这2个模块作为2种处理方法, 1. 6310,可以设置一...
程序员工作重要还是学习重要_程序员可以学习的最重要技能
程序员工作重要还是学习重要No, no, no, no, and no. And no. 不,不,不,不,不。 和不。 A big NO. Clear as that. 一个大号 那样清楚。 All you have to do is to bring those two letters together and say the word. 您要做的就是将这两个字母放在一起并说出单词。 No...
金蝶EAS uploadlogo漏洞实战:如何快速检测你的系统是否受影响
本文详细解析了金蝶EAS uploadlogo任意文件上传漏洞的检测与防护方法,帮助企业安全团队快速识别系统风险。通过资产发现、漏洞验证和应急响应方案,有效防范财务数据泄露和系统入侵风险,提升企业整体安全防护能力。
【第07例】IPD体系进阶: 6 个技术评审点(TR)
TR技术评审点
程序员的学习能力和独自面对问题的解决能力到底有多重要?
我觉得学习能力,可以看出一个程序员对待程序这个行业的态度和对自己未来在和程序行业上的预期. 如果您只是为了混口饭吃,那可能什么样的态度都适合您,也许您心里也有早就做好的其他打算,如果您想在这个行业中走的更稳更远,那不停地丰富自己的只是储备那一定是必须的. 解决问题的能力,其实在这方面说白了,就是能看出一个人的脑子灵不灵活,是不是灵光,都说勤能补拙,大量问题的解决经验可以让你对突发的问题有一个大概的...
Arcgis中的模型构建器(ModelBuilder)技术之批量图层转KML
这段时间全省各地都在开展耕地流出图斑整改恢复工作,期间或多或少都需要村委会协助摸排举证,除了举证软件外,奥维、外业精灵等软件想必大家接触得也很多。这就经常需要我们转kmz文件给业主或者摸排人员,那么有没有什么方法在arcgis下快速批量转kmz文件呢,今天就介绍一下如何在模型构建器(ModelBuilder)构建批量图层转KML的模型。
程序员除了编程能力,还需具备哪三个最重要能力?
见字如面,我是军哥!这个话题我发过一个视频,但我还是想写篇文章说说,个人感觉这个话题对程序员/产品经理非常有价值。众所周知,编程能力是程序员的第一能力,也是程序员理解世界的最起初能力,但是...
USB驱动(URB)
本文介绍了Linux内核中USB驱动开发的核心概念URB(USB Request Block)。URB是主机与USB设备间传输数据的抽象结构体,包含目标设备、端点信息、数据缓冲区等关键字段。文章详细解析了URB的生命周期(分配、填充、提交、回调、释放)、四种传输类型(控制、批量、中断、等时)及其应用场景,并提供了鼠标设备的中断传输示例代码。最后强调了URB使用注意事项,包括DMA缓冲区分配、错误处理和资源释放等。URB作为USB驱动与内核通信的桥梁,是构建稳定USB驱动程序的基础。
12、有杆泵抽油系统:原理、性能与选择
本文全面介绍了有杆泵抽油系统的原理、性能分析和设备选择方法。有杆泵抽油系统广泛应用于石油开采领域,通过地面抽油装置与井下柱塞泵的配合,实现高效、稳定的原油提升。文章详细解析了系统的工作原理、组成结构、光杆运动特性、载荷计算、泵输送能力及功率需求,并提供了抽油装置的选择流程和实际案例分析。此外,还探讨了泵的容积效率影响因素、示功图的作用及系统优化运行的建议,为石油开采工程提供了理论支持和实践指导。
做程序员,需要学习哪些专业知识?
一、两大能力 1、学习能力 为什么需要学习能力,因为技术不会一直停着不动,可能当你刚在学校出来的时候,是公司的佼佼者,但是如果你不学习,当别人会HTML6/7/8的时候,你还只是在HTML5上徘徊。而且当你遇到困难的时候,如果是有大牛给你解决了问题,但是你只是照搬并没有真正掌握这个问题关键所在,那么下次你还是不会,不是每次都会有人会在你旁边,及时给你解决问题的;再重点提醒一下,一定要保持随时学...
SQL Server数据库备份与恢复
在 SQL Server 中,数据库备份与恢复是保障数据安全的核心操作。
对九个超级程序员的采访
这篇访谈源自2006年,最先发布在波兰程序员 Jaroslaw “sztywny” Rzeszótko (AKA “Stiff”) 的博客上。但是这篇博文现在找不到了。非常感谢他能授权我重新发布这个博文。 在一个炎热无聊的下午,我突发奇想。我想通过电子邮件的方式对那些我非常感兴趣和非常敬重的程序员问10个问题。准备这10个问题我只花了5分钟,这些都是我个人想问他们的问题,所以,我基本上没想太
WINCC7.3破解文件
WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!
计算机控制技术及应用
《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。
作为一名程序员,你觉得最重要的能力是什么?
前言 有人问我,作为一名程序员,你觉得最重要的能力是什么?是技术吗? 什么最重要这个是哲学问题,谁也不能肯定的说什么是最重要的,对于小编来说的话,比较重要的有两点。 第一解决问题的能力 程序员至少60%的精力都在解决问题上,而解决问题80%的时间都是在解决逻辑和Bug当中。所以我认为一个好的程序员解决问题的能力绝对很强; 几乎所有雇主都把解决问题的能力放在首位。如果你是创业者,顾客就是你的雇主,你提供的产品是解决方案,你能帮客户解决的麻烦越大,你的产品也越有价值,但是在提供方案前,先想你要解决的问题。 程
数学建模模型总结
这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!
程序员最重要的能力是什么?
不管是什么行业,无论是工作还是学习,我们经常会思考一个问题:对于目前的职业来说,最重要的能力是什么?今天我们邀请了 4 名淘系技术的工程师,给大家分享一些他们认为最重要的能力,希望能够为你...
锂电池充电器电路设计 里面有电路
锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。
程序员最核心的竞争力是什么?
程序员最核心的竞争力——「学习力」 如果有人问我:你在面试程序员时,最看中的是什么能力?那我的答案一定是:学习力。 互联网时代的技术来得快,去得更快。就像Flash这样曾经雄霸天下多年的技术,都有被人人唾弃的一天。如果没有足够强的学习能力,就无法跟上变化,被淘汰只是迟早的事。想想看,你苦心钻研多年引以为傲的技术,一夜之间就没有用武之地了,难免会有一种「身体被掏空」的感觉
程序员最重要的品质是什么?
有时候我常常在想,作为一个程序员最重要的品质是啥?是高智商,还是超强的学习能力?结合我个人的学习生活经验得出的结论是作为一个程序员最重要的品质因该是要有一个好的心态。 程序员都要和bug打交道,大家都知道找bug是一个非常让人恼火的事情。但是恼火是无济于事的,并不能让我们更快的找到bug,相反会让我们出于一个更加焦躁的状态,更加影响我们找bug。最快的办法就是静下心来,一行一行地浏览代...
程序员最核心的竞争力--学习力
如果有人问我:你在面试程序员时,最看中的是什么能力?那我的答案一定是:学习力。 互联网时代的技术来得快,去得更快。就像Flash这样曾经雄霸天下多年的技术,都有被人人唾弃的一天。如果没有足够强的学习能力,就无法跟上变化,被淘汰只是迟早的事。想想看,你苦心钻研多年引以为傲的技术,一夜之间就没有用武之地了,难免会有一种「身体被掏空」的感觉。 学习力强的程序员敢大胆地体验尝试新技术,他们的技术栈始终...
程序员需要学习英语吗?
答案在这里
程序员最紧急、最重要的事情!
首先声明一点,写这篇文章并不是标题党,而是有感而发,去年我朋友圈的一位创业的朋友,不幸离开了,虽然打交道不多,但是之前的印象一直是健康、开朗的。 最近发生的45岁创业者因为生病不幸离世的消息,又勾起了我的回忆和深深担忧。因为我知道身体的恶化是会突然发生的,我也有相关的经历,最近随着天气变冷,我的运动也有所懈怠。 做程序员这些年,很多刚工作的朋友问我,你觉得最宝贵的经验和教训是什么?或者其他的相似的...
程序员面试什么最重要?
程序员面试什么最重要? 发布者:sea_bug|发布时间: 2014-1-8 00:19|评论数: 4 程序员面试一直是社区乐于讨论的热门话题。我自己从06年实习以来,先后经历了4家软件公司,全部是外企,其中有世界500强的通信企业,有从事期权期货交易的欧 洲中等规模的金融公司,也有为大型汽车制造商开发Android智能汽车的新兴...
作为程序员来说, 最重要的东西是什么。
小弟作为初学者,想请教各路大侠。对于程序员来说 最重要的东西是什么。
程序员副业100问 | Q15:副业初期最重要的三件事
完整的链路:用户从哪里来提供什么价值如何实现转化怎么持续变现。
1万+



被折叠的 条评论
为什么被折叠?



