编程很像写作——你应该从一个可用的“不完美的初稿”开始,然后经过两三次修改,一个一个地解决初稿中的问题。工程师们肯定会因为轻率地与“作家”相提并论而发笑——但是今天早上谁写了这些文档?你不是在“写代码”吗?软件开发人员从事最具创造性的工程工作。毕竟,与土木工程师建造桥梁相比,软件工程师在构建应用程序时可以发挥更多的创造力。在创意行业工作意味着您可以从写作的作家那里学到很多东西。那些经常被推荐用于解决写作困难的建议也是一些最好的写作建议。让我向您推荐“不完美的初稿”技术——因为它可以让您成为更高效的“编码员”。“不完美的草稿”把戏“不完美的草稿”把戏很常见,即使你没有读过互联网上的各种写作博客,你也可能在英语课上听说过。“不完美的初稿”的全部意义在于,即使你的初稿很糟糕,你也只需要完成它——因为任何初稿都比什么都没有的空白页要好。编辑自己的作品比从头开始编写更容易,因此您应该立即尝试编写一些能让您的代码正常工作的东西(无论它是什么)。换句话说,今天午餐前你会写100行(有效的)不完美代码还是0行完美代码?当然,最终的结果是你将以以上任何一种方式代码完成50行完美代码。但是写出“不完美的初稿”有一个心理优势:你会在压力较小的情况下体验到更大的成就感。**你会喜欢编码的!**还有什么比这更重要的吗?我如何从初稿开始?”似乎是在否定我的编码能力。您是否想成为编写“糟糕代码”的“糟糕程序员”,因为您阅读了有关编写“不完美的初稿”的建议?不,你想成为一个写出“伟大代码”的“成功的程序员”。代码”,因为您正在遵循“简单初稿”的编码技术。如果您曾经复制过代码示例,然后对其进行调整以供自己使用,那么您实际上已经学会了“简单初稿”的技巧。使用代码示例时,您不可避免地会进行大量更改,但关键是先让代码运行,然后立即对其进行改进。无论您是编码新手还是专家,您都可以使用任何编程任务的“简单初稿”方法。为什么“简单初稿”有用当您编写出有效的代码时,您会感到有成就感,这会让您处于更好的心态。简单的代码更有可能第一次写就成功。加上简单的代码好写,节省时间。确实,它可能看起来重复和冗长,你足智多谋的大脑乞求你找到一个更简洁高效的“更好”的解决方案.忽略它的诀窍是当你有这些感觉时喝一杯,然后继续简单的道路。一旦代码工作,你就重构它——一旦你有了一个工作版本,你就可以让你的想法更复杂。但在那之前,请让事情尽可能简单。写作教练AugustBirch称之为“循序渐进的写作”:写下整个东西,然后立即修改和润色它,在提炼和修改之间交替进行。但此时编程不同于写作:开发人员知道初稿何时“足够好”,因为代码必须成功执行。当你的代码能运行时,就是一个信号,要立即修改“简单初稿”,并在进行下一步之前对其进行多次优化。对于任何刚刚学习编码的人来说,这种方法可以提高两项关键技能:编写有效的代码,以及在不破坏代码的情况下改进代码。简单代码示例我最近通过LinkedIn平台指导了一位初级工程师,他正在努力应对过于复杂的编码挑战。虽然一旦您需要在实际项目中练习,这样的编码挑战就变得没那么有用了,但它是如何编写“简单的初稿”的一个很好的例子。由于问题很复杂,他打算尝试编写一个复杂的解决方案。让我们来看看这个挑战:“编写一个函数addWeirdStuff,将arrayTwo中所有奇数的总和添加到arrayOne中10以下的每个元素。同样,addWeirdStuff需要将arrayTwo中所有偶数的总和添加到arrayOne中添加那些元素arrayOne中大于或等于10的元素。另外:如果arrayOne中的元素被添加到arrayTwo中大于20的元素中,则需要额外添加1。值得注意的是,就像在现实生活中一样,他Gotanincompletespecification:thefunctionaddWeirdStuffshouldreturnanewarraycontainingitemsfromarrayOneandarrayTwo.他最初试图用for循环解决这个问题,但最终失败了。这是一个复杂的认知任务,这对一个人的工作来说一定是具有挑战性的记忆(工作记忆是短期记忆的别称),他对此无能为力。这家伙曾经联系我解决另一个代码难题,因为他不小心把return语句变成了一个复杂的循环。他还没有准备好编写干净的代码。我告诉他,他需要使用两个独立的for循环,并且为了简单起见,他应该使用for...of。这是JavaScript代码,用于查看他的代码是否有效的测试:查看GitHub要点中的原始代码这段代码很丑陋且写得不好,但它有效!而且它的可读性超强,尤其是对于那些刚开始学习基本概念的初学者。下一步就是完善这个“简单的初稿”。RefactoringtimeRefactoring,不管你爱不爱它,对于写文章的作者和修改的过程来说,相当于一个编辑器。在编程和其他类型的写作中,如果文本是自己写的(尤其是立即完成),修改起来会更容易。先用简单的语言来降低文字的复杂性,然后立即进行编辑修改。此方法适用于所有类型的写作,包括编码。我从上面的“简单初稿”重构:查看原始代码作为GitHubgist这仍然是一个具有挑战性的问题,还有许多其他方法可以解决这个问题,但这个版本是朝着正确方向迈出的重要一步被做了。在此版本的初稿中,我添加了reduce函数,因为我更喜欢在我的代码中使用函数式编程记住:“完美是优秀的敌人”。这只是您的初稿,您可以再次编辑!这是一步一步的过程。我还将可读性置于性能之上,因为我在每个内部循环中都使用.some()。这是双循环的O(n2)。对于小型数组矩阵,这对性能影响不大,但这样的操作可能会让您失业。在我下一次重构的版本中,这不是一个重要的优化项。我决定在完成“简单的初稿”之前使用.map()进行另一轮更改:将原始代码视为GitHub要点,这是“改进的初稿”。我将两个for...of循环更改为使用一个.reduce()、一个.some()和一个.map()。我更喜欢这种编码风格。但老实说,我的初稿没有任何“错误”,因为它有效,不是吗?现在,是切换编码任务并决定明天再次审查此代码的好时机。应用的真实编码场景在实际工作中,我们经常因混淆需求规范和延迟交付日期而感到压力,尤其是在使用新API时。每个编码员都会在某个时候疑惑:“为什么这段代码不起作用?”对于我指导的这个学生,他从无法将问题概念化到轻松解决问题,因为他从一个简单的for...of循环开始。由于“简单的初稿”,他没有感到困难和沮丧,而是感到成功和成就感。如果您更有经验并且可以使用.reduce()自然地解决问题,那就去吧!但是,如果您需要查找语法,请查看是否可以在不查找语法的情况下重构代码。因为你总是可以在编码阶段修改代码。同样,如果您使用的是JavaScript,您可能希望为返回添加类型检查。作为编码挑战,这不是必需的,可以考虑在第二天进行。在其他现实场景中,“简单的初稿”编码方法的缺点是您将经常进行git提交:至少,在进行逐步开发时,初稿的每个版本都需要经常犯。在完成初稿之前,您可能已经提交了三个或四个工作版本。如果你在后续的工作中发现问题,你会感谢之前的多次提交,因为你可以找到问题,并根据提交找到解决方案。此外,代码提交的数量给了我超级动力,尤其是当我远程工作时。测试根据您个人对测试的偏好,完全可以在编写代码之前先编写测试。只需遵循相同的方法:编写尽可能简单的测试,然后在测试代码运行时立即重构它。或者,像大多数程序员一样,您可能更喜欢在拥有一段可用的代码后进行测试——这完全没问题,在您编写代码并重构一两次之后,编写一些简单的测试,然后重构测试代码。我知道编写代码最快的方法就是完全按照以下方式进行:编写简单的代码编写简单的测试用简单的测试重构简单的代码重构简单的测试我喜欢说)让我更有可能先写测试,因为我真的不在乎我写的测试是否完美。您甚至可以考虑将测试视为您工作的“第二稿”并推迟测试任务到明天。不要忘记测试,就好像它是关于你、你的项目和你的公司的。结论无论你是代码新手、初级工程师还是专家,你都可以写更多代码,更快,只要你不专注于完美。从“简单的初稿”开始,并在代码上线后立即对其进行润色。向一位用10种编程语言写了100,000字关于JavaScript的技术作家学习在过去的一年里——给开发者和作家的写作技巧。我的真实建议对所有级别的程序员来说,你的初稿应该是重复的,甚至感觉像是“hack”。首先忘记本文提倡的基本编码原则(不要自己重复),然后坚持最基本的编码规则:“KISS”(KeepItSimple,Stupid!)一旦你这样做,你可以让你的代码变得很漂亮,但如果您必须花费数小时进行调试,那将是一整天的工作——甚至无法让代码正常工作。相信我,我去过那里!而且,如果您只是在学习一种新的编程语言、开发工具或代码库,则此建议是强制性的。编码愉快!原文地址:WhyYouShouldMakeYourCodeasSimpleasPossible原作者:Dr.DerekAustin??翻译自:NuggetsTranslationProject本文永久链接:https://github.com/xitu/gold-miner/blob/master/article/2020/why-you-should-make-your-code-as-simple-as-possible.md译者:NieZhuZhu(谈铁蛋)校对:YuxiaoAlisaShi,flashhu,lsvih转载自微信公众号“前端铁蛋”,可以通过以下二维码关注。转载本文请联系前端铁蛋公众号。