20年老码农分享20条编程经验,你pick哪些?

C语言与CPP编程 2022-04-04 17:20

Alex 发自 凹非寺
量子位 | 公众号 QbitAI

一位20年老程序员分享的编程经验突然火了,在Hacker News上,一天之内就收获了467热度。

这位老哥从1999年就开始编程,从早期的Basic、Pascal、Delphi,到后来的C,C++ ,Javasript等主流语言都用过。

职业生涯上从研究员、架构师一直干到过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


C语言与CPP编程 C语言/C++开发,C语言/C++基础知识,C语言/C++学习路线,C语言/C++进阶,数据结构;算法;python;计算机基础等
评论
  • HDMI 2.2 规格将至,开启视听新境界2025年1月6日,HDMI Forum, Inc. 宣布即将发布HDMI规范2.2版本。新HDMI规范为规模庞大的 HDMI 生态系统带来更多选择,为创建、分发和体验理想的终端用户效果提供更先进的解决方案。新技术为电视、电影和游戏工作室等内容制作商在当前和未来提供更高质量的选择,同时实现多种分发平台。96Gbps的更高带宽和新一代 HDMI 固定比率速率传输(Fixed Rate Link)技术为各种设备应用提供更优质的音频和视频。终端用户显示器能以最
    百佳泰测试实验室 2025-01-09 17:33 84浏览
  • 一个真正的质量工程师(QE)必须将一件产品设计的“意图”与系统的可制造性、可服务性以及资源在现实中实现设计和产品的能力结合起来。所以,可以说,这确实是一种工程学科。我们常开玩笑说,质量工程师是工程领域里的「侦探」、「警察」或「律师」,守护神是"墨菲”,信奉的哲学就是「墨菲定律」。(注:墨菲定律是一种启发性原则,常被表述为:任何可能出错的事情最终都会出错。)做质量工程师的,有时会不受欢迎,也会被忽视,甚至可能遭遇主动或被动的阻碍,而一旦出了问题,责任往往就落在质量工程师的头上。虽然质量工程师并不负
    优思学院 2025-01-09 11:48 94浏览
  • 故障现象一辆2017款东风风神AX7车,搭载DFMA14T发动机,累计行驶里程约为13.7万km。该车冷起动后怠速运转正常,热机后怠速运转不稳,组合仪表上的发动机转速表指针上下轻微抖动。 故障诊断 用故障检测仪检测,发动机控制单元中无故障代码存储;读取发动机数据流,发现进气歧管绝对压力波动明显,有时能达到69 kPa,明显偏高,推断可能的原因有:进气系统漏气;进气歧管绝对压力传感器信号失真;发动机机械故障。首先从节气门处打烟雾,没有发现进气管周围有漏气的地方;接着拔下进气管上的两个真空
    虹科Pico汽车示波器 2025-01-08 16:51 111浏览
  • 在过去十年中,自动驾驶和高级驾驶辅助系统(AD/ADAS)软件与硬件的快速发展对多传感器数据采集的设计需求提出了更高的要求。然而,目前仍缺乏能够高质量集成多传感器数据采集的解决方案。康谋ADTF正是应运而生,它提供了一个广受认可和广泛引用的软件框架,包含模块化的标准化应用程序和工具,旨在为ADAS功能的开发提供一站式体验。一、ADTF的关键之处!无论是奥迪、大众、宝马还是梅赛德斯-奔驰:他们都依赖我们不断发展的ADTF来开发智能驾驶辅助解决方案,直至实现自动驾驶的目标。从新功能的最初构思到批量生
    康谋 2025-01-09 10:04 73浏览
  • 在智能网联汽车中,各种通信技术如2G/3G/4G/5G、GNSS(全球导航卫星系统)、V2X(车联网通信)等在行业内被广泛使用。这些技术让汽车能够实现紧急呼叫、在线娱乐、导航等多种功能。EMC测试就是为了确保在复杂电磁环境下,汽车的通信系统仍然可以正常工作,保护驾乘者的安全。参考《QCT-基于LTE-V2X直连通信的车载信息交互系统技术要求及试验方法-1》标准10.5电磁兼容试验方法,下面将会从整车功能层面为大家解读V2X整车电磁兼容试验的过程。测试过程揭秘1. 设备准备为了进行电磁兼容试验,技
    北汇信息 2025-01-09 11:24 80浏览
  • 在当前人工智能(AI)与物联网(IoT)的快速发展趋势下,各行各业的数字转型与自动化进程正以惊人的速度持续进行。如今企业在设计与营运技术系统时所面临的挑战不仅是技术本身,更包含硬件设施、第三方软件及配件等复杂的外部因素。然而这些系统往往讲究更精密的设计与高稳定性,哪怕是任何一个小小的问题,都可能对整体业务运作造成严重影响。 POS应用环境与客户需求以本次分享的客户个案为例,该客户是一家全球领先的信息技术服务与数字解决方案提供商,遭遇到一个由他们所开发的POS机(Point of Sal
    百佳泰测试实验室 2025-01-09 17:35 78浏览
  • 职场是人生的重要战场,既是谋生之地,也是实现个人价值的平台。然而,有些思维方式却会悄无声息地拖住你的后腿,让你原地踏步甚至退步。今天,我们就来聊聊职场中最忌讳的五种思维方式,看看自己有没有中招。1. 固步自封的思维在职场中,最可怕的事情莫过于自满于现状,拒绝学习和改变。世界在不断变化,行业的趋势、技术的革新都在要求我们与时俱进。如果你总觉得自己的方法最优,或者害怕尝试新事物,那就很容易被淘汰。与其等待机会找上门,不如主动出击,保持学习和探索的心态。加入优思学院,可以帮助你快速提升自己,与行业前沿
    优思学院 2025-01-09 15:48 68浏览
  • 光伏逆变器是一种高效的能量转换设备,它能够将光伏太阳能板(PV)产生的不稳定的直流电压转换成与市电频率同步的交流电。这种转换后的电能不仅可以回馈至商用输电网络,还能供独立电网系统使用。光伏逆变器在商业光伏储能电站和家庭独立储能系统等应用领域中得到了广泛的应用。光耦合器,以其高速信号传输、出色的共模抑制比以及单向信号传输和光电隔离的特性,在光伏逆变器中扮演着至关重要的角色。它确保了系统的安全隔离、干扰的有效隔离以及通信信号的精准传输。光耦合器的使用不仅提高了系统的稳定性和安全性,而且由于其低功耗的
    晶台光耦 2025-01-09 09:58 56浏览
  • 根据环洋市场咨询(Global Info Research)项目团队最新调研,预计2030年全球中空长航时无人机产值达到9009百万美元,2024-2030年期间年复合增长率CAGR为8.0%。 环洋市场咨询机构出版了的【全球中空长航时无人机行业总体规模、主要厂商及IPO上市调研报告,2025-2031】研究全球中空长航时无人机总体规模,包括产量、产值、消费量、主要生产地区、主要生产商及市场份额,同时分析中空长航时无人机市场主要驱动因素、阻碍因素、市场机遇、挑战、新产品发布等。报告从中空长航时
    GIRtina 2025-01-09 10:35 71浏览
  • 1月7日-10日,2025年国际消费电子产品展览会(CES 2025)盛大举行,广和通发布Fibocom AI Stack,赋智千行百业端侧应用。Fibocom AI Stack提供集高性能模组、AI工具链、高性能推理引擎、海量模型、支持与服务一体化的端侧AI解决方案,帮助智能设备快速实现AI能力商用。为适应不同端侧场景的应用,AI Stack具备海量端侧AI模型及行业端侧模型,基于不同等级算力的芯片平台或模组,Fibocom AI Stack可将TensorFlow、PyTorch、ONNX、
    物吾悟小通 2025-01-08 18:17 69浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦