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

一位20年老程序员分享的20条编程经验火了不要与工具作斗争弄清楚问题后再编程复制粘贴会带来Bug

  一位 20 年老程序员分享的编程经验突然火了,在 Hacker News 上,一天之内就收获了 467 热度。
  这位老哥从 1999 年就开始编程,从早期的 Basic、Pascal、Delphi,到后来的 C,C++ ,JavaScript 等主流语言都用过。职业生涯上从研究员、架构师一直干到过 CTO,另外也当过技术产品经理,技术指导,老师等角色,可谓经验丰富。
  其实这篇帖子所包含的观点大都是编程圈子里较常见的概念,但是这些年来有的话题一直很具备争议性。对他的大多数经验,网友很赞同。比如:代码终究还是给人写的,注释是为了让未来的自己和其他同事能看懂。
  不过针对有的观点,大家各执己见。最为突出的是下面这条,网友们对此讨论了 60 多楼:
  要完全搞清楚要解决的问题,否则就先别急着敲代码。
  一种有代表性的观点是:大体上同意,但我发现要真正完全理解一个问题,还是至少要先写一个解决方案。
  因为当我把一个问题分解成可编码的组件时,我学到了很多;在实际实现这些部分的过程中,我经常发现边缘情况或未定义的情况;现实情况下,真正的问题是什么,通常在开始并不清楚。
  但也有一些网友认为:对于小型的、偏算法的问题,先在纸上或脑海中过一遍,比上来就写代码有效率的多。emmm…… 这样讨论下去简直成了"先有鸡还是先有蛋"。这个问题看来不会有确定的答案了,不过这篇经验分享整体上还有更多有价值的观点。
  下面让我们具体来看看吧。20 年浓缩成 20 条经验
  1. 不要与工具作斗争
  所谓工具,包括库、语言、平台等。尽可能多地使用原生的开发方式。这样可以保证程序或软件的数据都存在于本地,能够及时检索,保证程序或软件的合作速度和流畅度。不要被技术捆绑,也不要被问题捆绑。应该为工作选择合适的工具,而不是为了工具寻找合适的工作。
  举个例子:编程实现在一个文件中找到给定单词出现的位置并统计出现次数。如果用 C++ 写的话需要 92 行代码,而使用 Python 的话只用 26 行代码就可以完成了。
  由此可见,对于同一个问题,换一个工具也许可以简化编程,提高效率。
  2. 写让人可以看懂的代码
  程序员们不是为机器编写代码,而是为了同行们和未来的自己编写代码。写代码的终极目标往往是完成一个项目或给后来者作为参考。
  3.善于合作
  任何重要且有价值的软件都是协作的结果,有效沟通和公开合作很重要。能用众智,则无畏于圣人矣。
  4.对各模块分而治之
  编写相互联系却又彼此保持独立的单个模块。先分别测试每个部分,然后一起集成测试。既要保证测试接近实际,也要测试边缘实例。
  5. 敢于分享自己的原创代码
  一个程序员不要成为那位唯一明白某段代码的人。可以对自己的原创代码进行优化,以便人们找到修复 Bug 的方式,和向代码添加功能的方法。这样也能使程序员自己轻松点,以早点进入下一个项目或公司。想要提高水平的话,不要使一段代码仅自己可见。
  6. 安全是分层的
  分层安全是一种应用多种安全措施的实践,每一层都与前一层和下一层重叠,以创建一个安全控制网络,这些网络可以一起工作以保护技术系统。每一层都需要单独评估,但也需要与整体相关。
  风险是一种商业决策,与脆弱性和概率有直接关系。每个产品或组织都有不同的风险偏好,通常这三个关注点会相互冲突:用户体验、安全性和性能。
  7. 代码也有生死
  要认识到,每段代码都有一个生命周期,并且会最终失效。有时,一段代码甚至还没上线发布就被废弃了。程序员要学会放手,弄明白 4 类特征的区别,然后想清楚应该在哪些方面投入时间和精力:
  核心:就像汽车的引擎。没有它,产品就没有意义。
  必要之处:就像汽车的备用轮子。它很少被使用,但当需要时,它的功能决定了系统的成功。
  附加值:就像汽车的杯座。有它很好,但产品没有它也完全可用。
  独特卖点:人们应该购买你的产品而不是你的竞争对手的主要原因。
  8. 保护好个人信息
  程序员不要将个人身份信息附加到代码中,也不要把其他人的身份附加到他们的代码上。人是独立于他们的工作产出物之外的。不要把对代码的批评当成是针对个人的,当然也在批评他人的代码时也要谨慎。
  9. 尽量规避技术债务
  技术债务是开发团队在设计或架构选型时,为了快速地解决问题,而采取的不规范的方案。偶尔的技术债务是可以接受的,但如果长期负债往往会快速地扼杀产品。
  10. 可参考以下优先级
  为解决方案做决定时,假设其他条件都是一样的,可以按照这个优先级:
  安全性 > 可用性 (可访问性和用户体验) > 可维护性 > 简单性(开发人员体验 / DX)> 简短性(代码长度) > 性能
  但是也不要盲目地遵循这个规则,还要考虑到产品的性质。例如,在设计游戏引擎时,性能是最重要的;但在创建银行应用程序时,安全性是最重要的因素。
  11. 复制粘贴会带来 Bug
  有时复制粘贴后,会出现 Bug,这个几乎无法避免。为了检查是否有问题,每次都需要搞明白复制过来的内容,并审核导入的内容。
  12. 不要只为乐观场景写代码
  还要写出好的错误提示,回答其为什么会发生,如何检测到它,以及如何解决它。
  13. 尽量不要使用依赖库
  若调用一个动态库 A 时,A 需要调用动态库 B,则 B 是 A 的依赖库。
  尽量不要使用依赖库,除非导入、维护、处理边界情况时出现 Bug,或者当代码不满足需求时,重构的成本远远低于你拥有的代码。
  14. 不要盲目跟风
  可以去了解热炒的新技术,但不要被拽着走,要坚持自己对技术的品位。
  15. 坚持学习
  16. 最好的代码都有良好的注释
  一些人认为,代码写的够好,就不用写注释了。但最优秀的的代码中往往都包含着良好的注释。这样,即使是没有经历过这段代码的调试、测验过程,且暂时不具备写出此代码能力的人都可以使用它。
  可以说,未文档化的功能是不存在的功能,不存在的功能不该有代码。
  17. 尽量避免重写、继承和隐藏信息
  写纯函数 (Pure Function)。对于纯函数,相同输入总是会返回相同的输出,执行过程中不产生副作用,且不依赖于外部状态。它们更容易测试和推理。
  在执行一个非纯函数时,除了得到函数的返回值以外,还在函数调用时产生了附加的影响,如:修改了全局变量的状态,修改了传入的参数等。
  任何非纯函数都应该是类,任何具有不同函数的代码构造都应该具有不同的名称。
  18. 弄清楚问题后再开始编程
  面对一个问题,首先要弄清解决思路,再开始编程。在编程过程中还需要逐步经历"编码-测试-改进"周期,并不断深入探索,直到完成。
  19. 不要去解决不存在的问题
  不要进行投机性编程。只有在确定代码将来会被扩展时,才去花功夫提高代码的扩展性。
  因为当代码要被扩展时,有很大的可能性问题定义已经与代码初次编写时不同了。
  20. 巧用社区、积极探讨
  合作完成一个程序或软件往往更有趣。许多程序员包括技术大牛们都会在一些专业论坛(如 Github、Stackoverflow 等)上分享自己的原创代码,供他人参考、提建议以及修复 Bug。
  除了利用已有的论坛、网站外,还可以为自己的项目创建一个良好的社区。
  这 20 条建议中是否有让你受到启发的?你还有哪些编程经验可以分享?
  参考链接
  [1].https://alexewerlof.medium.com/my-guiding-principles-after-20-years-of-programming-a087dc55596c
  [2].https://blog.daftcode.pl/hype-driven-development-3469fc2e9b22

韩媒三星决定在GalaxyS21系列中重新引入中国厂商的电池IT之家10月7日消息据韩国媒体TheLec昨日报道,三星电子明年的旗舰机型GalaxyS21(未定名)系列将搭载中国ATL(AmperexTechnologyLimited,新能联想王忠设计本需求会越来越大,即将推出全球首款折叠屏电脑行至中年的联想正试图向年轻人靠拢。近日,联想ThinkBook秋季新品发布会推出ThinkBook新青年创造本系列新品,包括视觉系创造本ThinkBook15p锐智系创造本Thin微软公布XboxSeriesS史上最小Xbox问世,售价299美元IT之家9月8日消息继今天上午多家外媒持续曝光低价版次世代主机后,今天下午,微软突然于官方推特公布了这款传闻已久的主机XboxSeriesS,并称其为史上最小体积的Xbox主机。微中国超高清视频CUVA高动态范围(HDR)标准发布,腾讯视频首先商用IT之家9月8日消息近期,中国超高清视频产业联盟(CUVA)于北京梅地亚中心举办HDR标准发布会,正式发布CUVA高动态范围(HDR)标准。为加快推动超高清视频产业发展,提升超高清LG化学三星SDISK创新动力电池装机量增长迅猛,宁德时代承压9月3日消息,据外媒报道,韩国能源市场分析公司SNEResearch近日发布的调查结果显示,2020年17月全球动力电池总装机量同比减少16。8,但LG化学三星SDISK创新三大韩华为云联合虎牙发布昇腾AI内容审核解决方案7月17日,在华为云2020互联网5G创新峰会上,华为云联合虎牙等5GX联创营伙伴,发布了三大联合创新解决方案。其中,华为云联合虎牙发布了昇腾AI内容审核解决方案。基于昇腾全栈创新华为申请车辆定位方法折叠式电子设备等多项专利天眼查知识产权信息显示,近日,华为技术有限公司新增了多项专利信息。其中,专利类型为发明专利的包括秘钥访问控制方法和装置车辆定位的方法装置控制器智能车和系统无线充电方法及电子设备一种第一!华为5G手机出货量超三星,份额全球40中国63IT之家7月17日消息据财联社消息,华为终端相关负责人表示,截至今年一季度末,华为5G手机中国市场份额已达63,全球5G手机出货量份额达40,领先三星,市场第一。截至一季度末,华为微软推出ProjectFreta服务可在系统内存快照中查找恶意软件IT之家7月8日消息微软本周推出了一款名为ProjectFreta的全新反恶意软件服务,可在系统内存快照中,帮助用户查找和识别恶意软件。微软官方对其的描述为微软研究院开发的免费服务三星发现全新半导体材料有望用于内存闪存领域IT之家7月6日消息三星电子周一宣布,发现了一种全新半导体材料无定形氮化硼(amorphousboronnitride),简称aBN,并表示有望推动下一代半导体芯片的加速发展。近年台积电将发行185亿元台币公司债,其中5年期利率0。36据知情人士,台积电今年第七批的无担保普通公司债已定价完毕,将分三种年期发行185亿元台币,各年期利率较上次下跌。其中5年期利率0。36,发行金额19亿元台币7年期利率0。41,发行
HTC人事变动CEO任职不到一年辞职,王雪红二度兼任IT之家9月3日消息宏达电(HTC)今日发布公告,原CEOYvesMaitre因不能兼顾家庭与工作,辞职获准,宏达电表示,对于他的未来发展给予祝福,CEO一职将由董事长王雪红兼任。HTC王雪红虚拟空间可以提供安全无阻碍的互动方式6月18日消息,6月16日,HTCVIVE举办了以共聚后常态,憧憬新未来为主题的2020行业生态大会。大会由HTCVIVE主办,VRCORE承办。HTC董事长王雪红表示纵观历史人类HTC发布两款新机HTCU205G和HTCDesire20ProIT之家6月16日消息HTC现任CEO伊夫迈特斯(YvesMaitres)于2019年10月曾透露HTC已经停止在智能手机的硬件方面进行创新,重心将逐渐转移至VR业务。HTC上一款HTC加入5G行列,有望7月推出首款5G手机据多家台湾媒体报道,台湾预计下半年提供5G服务,宏达电则不会缺席5G智能手机市场。宏达电近几年积极布局VR领域,在智能手机市场上没有什么表现,更没有发布5G手机。但是市场预计,宏达国家邮政局有能力完成快递业务量955亿件目标IT之家7月13日消息据证券时报报道,国家邮政局发展研究中心业务研究三部副主任王岳含指出,下半年,行业完全有能力完成年初设定的快递业务量955亿件的目标。据介绍,业务量的增长并不是中消协点名快递不送货上门不能无视用户感受IT之家6月25日消息6月25日,中消协发布618消费维权舆情分析报告,监测期内,共收集快递外卖配送类负面信息63043条,负面信息在6月2日出现峰值。消费者吐槽较多的配送类问题主发改委等多部门到2025年,电商快件基本实现不再二次包装IT之家7月7日消息今日,国家发展改革委等多部门印发十四五循环经济发展规划的通知。IT之家了解到,通知提出,快递包装绿色转型推进行动。强化快递包装绿色治理,推动电商与生产商合作,实国家邮政局市场监管司就违法收寄危险违禁物品对德邦快递进行监管约谈IT之家6月23日消息国家邮政局市场监管司今天就违法收寄危险违禁物品对德邦物流股份有限公司进行监管约谈。IT之家获悉,国家邮政局市场监管司表示,近年来,各级邮政管理部门高度重视寄递中兴通讯股价大幅波动,深交所重点监控并及时采取监管措施感谢IT之家网友软媒用户1810087的线索投递!8月9日,中兴通讯A股小幅高开后逐渐走低,最终闪崩并触及跌停,最终A股收于27。9元,跌幅7。74H股盘中大跌近20,最终收于20中兴行人重识别技术算法刷新世界纪录近日,中兴通讯行人重识别(PersonReidentification,简称ReID)技术方面取得突破,在三大主流ReID数据集Market1501DukeMTMCreIDCUHK贾跃亭再被限制高消费IT之家1月18日消息企查查App显示,贾跃亭于2021年1月12日新增限制高消费令,执行机构为宁波市中级人民法院,案号(2021)浙02执22号,申请人江苏红土创业投资管理有限公