范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

陷入了写代码的完美主义陷阱怎么办?

  "如何提升代码能力,以及如何克服这种又菜又想追求完美导致低效的问题呢?我们总结了鹅厂程序员们的方法。"
  鹅厂内部,有一个关于"陷入了写代码的完美主义陷阱怎么办"的帖子,题主是这样写的:
  自认为代码编写和设计能力不弱,一般的代码逻辑也比较清晰。但是当要设计一个略大的项目,或者接手一个相对较新的代码,想要适当地做一些较大的重构的时候,就总是会感觉这样也不好,那样也不好,怎么做都会有一些缺陷,难以下笔。虽然能合理地拆分成几个模块,但是对每个模块的代码怎么写还是十分纠结,然后总觉得自己还是思路不够清晰,没有想清楚怎么继续调整,空耗了一些时间,最后还是以一个自己不满意的结构写完,这个过程中虽然有思考,但是有明显的局限,也导致效率有下降。
  求教:如何提升代码能力,以及如何克服这种又菜又想追求完美导致低效的问题。
  这大概是很多技术同学都想了解的问题,那么如何解决这个问题呢?我们总结了鹅厂程序员们的方法: 1. 一边写代码,一边继续思考@A生.
  看到问题比较能感同身受,因为我记得自己有一个阶段也是这样。可能是对"代码完美主义"心有余悸,我在写完自己的书《Python 编程进阶相关》时,还特意在结尾时留了一页,这么写道:
  > 本书的最后,我想额外啰唆几句。
  > 虽然本书自始至终都在说"如何把 Python 代码写得更好"这件事,但我还是希望最后提醒你一句:不要掉进完美主义的陷阱。因为写代码不是什么纯粹的艺术创作,完美的代码是不存在的。有时,代码只要能满足当前需求,又为未来扩展留了空间就足够了。
  "完美主义"如何产生危害?主要在于当我们面对规模较大的任务时(比如你提到的"设计大项目"、"较大的重构"),盘旋在脑海里的想法和声音太多了,每一个都在对我们说:"这样做最好,能保你之后万事无忧!"。在它们的包围中,我们先是花了大量时间纠结,之后无论做出哪种选择,似乎都"不够好"——不仅效率受到影响,心理上也十分难受。
  要从"完美主义"的消极影响里走出来,最简单的办法就是不管它:继续写代码,继续纠结。当你重复做一件事情足够多次以后,那些宝贵的经验会自然而然地让你跳出"完美主义",不再纠结。
  除了放任"完美主义"不管之外,另一个行之有效的办法则是"测试驱动开发(TDD)"。采用 TDD 后,你能更流畅地在两种角色之间转换:设计者(编写测试时)和实现者(编写代码时)。不同的角色能有效为你的思维"设限",让你更清晰地思考,从而打磨出更好的设计。
  除此之外,TDD 对于克服"完美主义"还有以下优势: 编写测试本身就有助于写出耦合更低、结构更优良、更趋近于"完美"的代码 当你纠结于代码好坏时,单元测试会像一位旁观者一样告诉你:"代码没毛病,别瞎纠结。" 当你发现旧设计有问题,想重构时,单元测试也会辅助你在追求"完美"的路上万无一失
  最后,"完美主义"虽然有一些坏处,但适度追求完美也是必要的。反过来说,如果大家写代码时从不纠结,关于代码的最高指导思想就四个字:"能跑就行",这样也很可怕吧。 @B生.
  绝大多数好的设计不是一蹴而就的,而是逐步演进出来的,除非要应对的场景本身就在我们的经验范围之内。
  大致路线可能是:先理解清楚业务需求,调研业界类似场景的解决方案。如果有解决方案,那这个设计一般已经是在别人那里演进过多轮了,结合自身场景的特殊性,加以适配使用现场的方案即可。如果没有解决方案,那首先应该感到兴奋,因为你正在做的事情很可能是在创新或者至少是微创新。这时候先设计一个版本把系统跑起来,后续迭代中再逐步去优化也是无可厚非的。
  上述过程中,可能方案调研是一个关键环节了,就像写论文中的综述部分。 2. 给代码一个进化的过程@C生.
  当接到完整的需求或者接手已有项目的代码,这种情况会存在两个问题:
  一是大量需求并不是你和需求提出者一点点讨论、磨合出来的,没有经过长时间的需求分析、讨论,对需求的理解不够深刻。
  二是在全部需求都已知的情况下你试图一下子设计一套完整的结构、框架,不像新项目先设计一个简单但灵活的框架,然后随着需求的滚动增长不断调整设计、不断重构,同时也对需求理解更加深刻,我管这个叫做"给代码一个生长、发育的过程"或者"给代码一个进化的过程"。
  想一步到位设计出完美的架构是不可能的,编程最大的技巧就是无限深入需求,不断思考需求,让代码从小到大不断发展、重构,当然很多时候客观条件不允许,那就放下对完美代码的执着吧。
  顺便说一句,我反对大部分代码重构的原因是:大部分重构人只是新接触一个项目,重构的理由有时是"我比较闲、有时间",或者对之前的设计感到不舒服。但他们缺乏重构的最重要条件,就是对需求比以前更加深刻地理解,和需求摸爬滚打在一起的决心。 @D生.
  引用 React 官网的一段话,也作为我陷入类似情况的一个破局之道——不要过度思考。
  如果你刚刚开始一个项目,不要花超过五分钟在选择项目文件组织结构上。选择任何一种模版结构(或提出自己的方式)并开始编写代码。因为,在你编写了一些真正的代码之后,你将很有可能会重新考虑它。
  如果您感觉完全卡住,请先将所有文件保存在同一个文件夹中。它最终会变得足够大,以至于让你想要将其中一些文件拆分出去。到那时,你将有足够的知识去区分你最频繁编辑的文件。通常,将经常一起变化的文件组织在一起是个好主意。这个原则被称为 "colocation"。
  随着项目规模的扩大,人们通常会在实践中混搭使用各种方式。因此,在开始时选择"正确"的那个方式并不是很重要。 3. "够好即可"不意味着糟糕的代码@E生.
  如《IEEE 软件》杂志上一篇由爱德华·尤登写的文章《够好即可的软件就是最好的》所述:
  你能训练自己写出够好即可的软件——对用户、未来的维护者来说够好即可,只要好的程度能让你自己内心平静就可以。你会发现,你变得更有效率,用户也更快乐。而且,可能让你更开心的是,更短的孵化期促使你的程序实际上更好了。
  在进一步讨论之前,我们需要对将要讨论的内容做一些限定。"够好即可"这个词并不意味着草率或糟糕的代码。所有系统必须达到用户的需求才算完成,需要达到基本的性能、隐私和安全标准。你做的东西,从用户需求角度来说是否足够好?最好还是留给用户一个机会,让他们能亲自参与评判。
  与构想中的明天那个完美的软件相比,今天就还不错的软件通常更讨人喜欢。如果你早点给用户一点东西玩,他们的反馈常常能引领你做出更好的最终方案。
  —— 《程序员修炼之道》 第 51 页 话题 12:曳光弹 @F生.
  《重构》的作者Kent Beck的有个"两顶帽子"说法我觉得很有道理:就是软件开发的过程应该有两顶帽子换着戴,一顶是开发新功能的帽子,一顶是重构的帽子。
  简单来说,就是楼主想添加新功能时,先不管实现是否优美,先把功能给写了;然后再切换成重构帽子,把它优化一下。注意,这两顶帽子是不断快速切换的,不是说你一下子写完好大一个模块再重构它,那是不行的。很多作家写作时大体也和这差不多。
  我觉得挺好用的。但是实践中也有很多别的问题,比如开始选得不好后面不好改啊,写出来难得重构啦,选来选去也选不好啊等等。我觉得这些可以靠经验解决啦,如果很熟练的话就应该就能做到胸有成竹了。作为一个小菜鸡,我还不够有经验,我希望我有一天能做到胸有成竹。 @H生.
  分享一下我的见解:
  (1) 因为"设计一个略大的项目,或者接手一个相对较新的代码"是一个开放性的问题,较为抽象的问题。"代码编写和设计能力不弱"对于"维护老的项目,做一些需求的改动"这种依赖边界清晰的、具体的问题是足够的。要解决抽象的问题,还需要‘分析问题的能力’,以及‘创新能力’--解决新问题。
  (2) 要能很好地认识新问题,你需要给自己时间思考、分析问题。不要急于写下第一行代码。
  (3) 我们不要从头发明看似简单的‘牛顿经典力学’,从课本里学习,初中生就能掌握,自己去思考,可能一辈子也不够。所以,面对新问题,我们首先要去调查其他人遇到过么,积累了哪些思考、实践、认知。
  (4) 工程师的能力的提升,就是解决越来越抽象的、边界不清晰的、依赖不清楚的、依赖众多的问题。比如,极度抽象的,spaceX项目。

佳能相机自动对焦模式单次自动对焦ONESHOT单次自动对焦每次只会进行一次对焦操作,这种模式比较适合拍摄一些静止或者缓慢移动中的物体,如自然风光花卉和静物。半按快门时,相机会开始对焦并在和焦后发出提示普涨之后,今天的市场如何寻找上车时机?昨天市场是普涨行情,日内赚钱效应显著,而今天会出现明显分化,冲高回落的个股会很多,毕竟结构性行情才是主基调,至于大盘日内会突破昨天的高点,然后再遇阻回落,整固之后后续再去挑战367近六成小学生拥有智能手机,为什么老年人却喜欢用老年机呢?现在的小学生,一般都用智能手机,因为智能机可以打游戏,还有就是能上网,由于疫情,随时都可能上网课。只能用智能手机。而老年人,以前买的手机,沒有坏,还可以用,舍不得换,所以就一直沿用橙心优选专注做好平台服务功能优化橙批发结构谋发展滴滴打造的社区电商零售平台橙心优选决定把重点转向批发业务,孵化交易产品橙批发。社区团购是消费互联网和产业互联网交融的最佳模式,同时社区团购具有BC一体化的特征,在这种情况下,BC缺首发丨让快餐的营养成分可量化,维小饭获近亿元A轮融资创业邦12月9日获悉,曾以一份价值1。5亿的小盒饭的天使投资消息出圈的新快餐品牌维小饭,于今日宣布完成达亿元的A轮融资。本轮融资由天图资本独家投资,融资将主要用于市场开拓终端建设产说一说你对CyclicBarrier的理解死记硬背概念CyclicBarrier即循环栅栏,就是一个可以循环利用的屏障。它也是一个同步辅助类,允许两个或者多个线程在某个点上进行同步。原理CyclicBarrier使用一个整人工智能赛道持续获得资本关注又一家人工智能(AI)企业拟登陆资本市场。在通过港交所上市聆讯后不久,12月7日,人工智能(AI)软件公司商汤科技启动全球招股,拟最多募集60亿港元。今年以来,被市场称为AI四小龙人工智能的半人马时代大多数人都知道俄罗斯国际象棋大师加里卡斯帕罗夫(GarryKasparov)前世界象棋冠军,与超级电脑下棋比赛的故事。尽管加里在1996年赢得了头六场比赛,但一年后他失去了与IBM东湖评论筑牢个人信息安全防线和朋友闲聊时提到某个话题,过一会儿手机上就会收到该话题的推送在下载注册某个APP时,会被反复询问是否允许索取定位发送通知访问设备照片拨打电话等权限,否则便无法下载使用打开咨询类AP聚焦经营痛点微宝贝或破实体店发展难题新湖南客户端12月9日讯(通讯员王佳)新一轮科技革命和产业变革下,经济社会数字化转型呈现加速深化趋势。实体店经营在电子商务的冲击下迎来了巨大挑战。一方面,受互联网冲击房租人力提高等你不知道的冬奥事大道至简北京冬奥物流为世界奥林匹克运动贡献中国智慧新华社北京12月9日电题大道至简北京冬奥物流为世界奥林匹克运动贡献中国智慧新华社记者马邦杰9日下午1点50分,一辆绿色牌照的新能源运输车辆停在北京冬奥会和冬残奥会主物流中心的一个仓
现在互联网行业还有什么发展么?互联网的发展无疑是非常速度的,信息社会对于咨询的传播效率,沟通效率非常高。互联网的发展影响各行各业,老百姓的生活也和互联网息息相关。目前无论是阿里巴巴腾讯今日头条等比较知名的互联网DxOMark公布尼康Z9成绩电子快门竟有98总分不久前DxOMark公布了尼康旗舰无反相机Z9的成绩,即使是有且只有电子快门,总分仍达到了98,追平索尼A1。根据DxOMark的测试,尼康Z9总分为98分,其中色彩深度为26。3为何华为手机不适用买新不买旧的原则?某些老机型反而更香买新不买旧,这是数码爱好者秉承的一贯原则,原本这个原则是适用于每个品牌的,可是由于比较特殊的原因,让华为的手机产品不再适用这个原则,细心的朋友一定会发现,华为后面出的新机都没有以前美国近期研究全球海洋发现5000多种新病毒来源环球时报环球时报记者甄翔今日美国报11日报道称,美国俄亥俄州立大学研究团队近期发布在科学期刊上的研究结果显示,海洋中存在超过5000种新型病毒。根据遗传物质的不同,病毒可以分为美国着急了,垄断手术机器人15年一台就卖2千万,又被中国攻克医疗领域一直是我国的短板,然而在这样的情况下,中国打破了美国15年的垄断,成功突破,又给干到了白菜价,美国这下又开始着急了。而这就是手术机器人,美国对于手术机器人的生产,已经垄断1三星暗讽苹果抄袭,网友搬起石头砸自己的脚苹果春季发布会刚结束,三星就在其海外官方社交媒体账号上对苹果嗤之以鼻。这个讽刺有两层意思一是AppleM1Ultra的全名灵感来自三星另一个是iPhone13系列新发布的苍灵绿的灵自动驾驶咋还不落实?网友解放双手可以,可不兴解放脑子近日,有媒体报道,一位车友开着新能源电动汽车在国道上行驶,行驶过程中开启智能驾驶辅助功能,路遇前方失事车辆时,该功能没有进行紧急制动刹车,这时车主对媒体表示,自己在行驶的过程中,踩iPhoneSE3砍单严重,网友表示买红米K50不香吗?苹果公司在今年三3月份推出了一款中端智能手机iPhoneSE3,这款机器采用的是和iPhone6系列相似的外观设计,例如正面为4。7英寸LCD屏幕保留了TouchID按键,背面为单Android13重磅来袭支持运行Win11子系统!你会更新吗关注安卓系统的朋友或许都知道,Android9101112的更新好像都没有太大的感觉,而当Android13发布后,原本还以为也就跟从前差不多,但万万没想到,惊喜可真不少呢这惊喜就魅族开始发力,爆料搭载天玑8100和512GB存储,售价3999元时间过得很快,2022年一转眼,第一季度就过了,时间仿佛瞬间来到了第二季度,而在这刚刚进入的4月份中,我们现在来回顾之前的时间,我们会发现,像主流小米荣耀OPPOvivo等手机厂商为什么懂行人都在等台积电版骁龙8Gen1,而不看好天玑9000?有一个很奇怪的现象尽管天玑9000的已经确认领先骁龙8Gen1一代,但是懂行人却都在等5月份发布的台积电版骁龙8Gen1,对天玑9000反而不太看好,这是为什么呢?原因很简单,天玑