在为新系统编写代码时,我不想在设计中引入我可能永远不需要的不必要的复杂性。所以我在这里关注YAGNI,而是重构,因为我认为需要更多的灵活性或责任变得更加清晰。这让我可以更快地移动。
但是这里与初级开发者存在一个问题,因为他们无法识别何时进行重构或在何处构建设计。他们只是在现有设计中添加了更多代码。
那么,解决这个问题的最佳方法是什么?我是否应该更经常地构建一个更具前瞻性的设计,所以当添加它时,他们有一个很好的例子可以遵循,即使我们可能永远不必添加任何东西?或者我应该继续进行更多的代码审查,教育等?或两者兼而有之?
你们有没有遇到过这类问题的经历?你是怎么解决的?
答案 0 :(得分:11)
我会推荐代码评论或配对编程。它让您有机会教育您的开发人员并提高整体质量。
答案 1 :(得分:9)
也许你首先明确认识到你的工作部分是帮助培养初级开发者。如果你不是老板,管理层应该签字。管理层需要认识到您的选择是现在开发它们或者在以后清理它们,并且您需要管理层支持这个时间。
代码评论和结对编程是很好的想法。他们特别好,因为他们不是“只为初级人士” - 我和我的一位同事一起做;我们一起将近100岁,拥有超过70年的编程经验: - )
但是这里存在一个更大的问题:使您最有效的编程方法(YAGNI +重构)对您的初级合作伙伴无效。我的经验是需要多年的学习时间YAGNI的好处,所以如果你希望他们只是学习你的做事方式,你就会让自己失望。
我鼓励您确定一些您认为对您的初级合作伙伴有用的方法。特定的方法可能无关紧要(异端邪说!);我在复合/结构化设计,基于对象的设计,代数规范(!)和极端编程方面取得了成功。但是
选择一些有名称和一些文献的东西,你的大三学生可以为学习而自豪,这是他们可以为未来的项目带来的技能。
为了表明它味道鲜美,您可能需要自己吃狗粮。选择一些你可以忍受的东西并提高工作效率。
仔细观察您的小辈,并教他们一个决定程序,他们可以用来确定他们何时应该向您寻求指导。
答案 2 :(得分:2)
有一个原因,他们是大三,你是高级。
实现何时需要改变设计的能力就是其中之一。
我会像你一样继续,但鼓励他们在事情变得艰难时来找你。然后,如果需要,您可以与他们一起改变设计,这对您来说比重构更容易,并且可以帮助您将知识传授给初级开发人员。
答案 3 :(得分:1)
展示设计构建范围的一个非常好的方法是指定设计在构建时将执行的操作,然后编写测试以涵盖新功能。测试通过后,开发完成。
你可能会意识到你忘了测试什么。这很好,并且是有用的反馈,可以帮助您下次更好地指定。写下缺失的测试,只有足够的代码使它们通过。
然后重构。在重构时知道要寻找什么需要一些练习。从
开始重复这几十次,它会变得更容易。
答案 4 :(得分:1)
另一种看待YAGNI的方法是,对代码的任何更改都需要合理化。
要求任何提交需要相关的单元测试(或BDD用户故事,选择你的毒药)可能会有帮助吗?它有助于传达您的意图(您希望人们考虑他们为什么要添加此功能)并且您可以免费获得回归测试。
也让新手开始考虑模块化(通常需要使你的代码可测试),如果你以后需要重构,它会有很多帮助。
答案 5 :(得分:0)
我都是代码审查和教学,但我认为未来的设计也很重要。也许您可以从设计API和使用API的初级开发人员的角度来考虑它。通过这种方式,你是那些努力工作的人,他们会搞砸(识别重复的代码并消除它),同时他们完成所有那些不能充分利用你时间的繁重工作。
当然,这必须与培养初级开发人员技能的需求相平衡。等式的任何一方都不能被忽略。
答案 6 :(得分:0)
它可能有助于确定他们将做什么工作,然后验证它以帮助建立他们的判断感,这正是你所要求的,在我看来。配对是一种选择,但是如果你不能节省那么多时间,那么就要有一个“检查点”来看看它们是如何做的,并阻止它们走错路。