当前位置: 首页 > 科技观察

20岁码农分享20条编程心得,你选哪条?

时间:2023-03-12 10:10:29 科技观察

本文经AI新媒体量子比特(公众号ID:QbitAI)授权转载,转载请联系出处。一位20岁程序员分享的编程经验一下子火了起来。在HackerNews上,它在一天内获得了467的人气。这位老哥从1999年开始编程,从早期的Basic、Pascal、Delphi,到后来的C、C++、Javasript等主流语言。在他的职业生涯中,从研究员、架构师到CTO,也做过技术产品经理、技术指导、教师等,可谓阅历丰富。事实上,这篇文章中包含的大部分观点都是编程圈中比较常见的概念,但有些话题多年来一直存在很大争议。网友们对他的大部分经历表示认同。比如:代码终究还是给人写的,注释是为了以后的自己和其他同事看得懂。但是,对于一些观点,每个人都各执一词。最突出的就是下面这一条,已经被网友讨论了60多楼:必须充分理解要解决的问题,否则不要急着敲代码。一个典型的观点是:大体同意,但我发现要真正完全理解一个问题,至少还是得先写出解决方案。因为当我将问题分解为可编码的组件时,我学到了很多东西;在实际实现这些部分的过程中,我经常会发现边缘情况或未定义的情况;实际上,真正的问题是什么,通常一开始并不清楚。但也有一些网友认为:对于小的、面向算法的问题,先在纸上或脑子里过一遍,比一开始就写代码效率更高。emmm...这种讨论就像是“先有鸡还是先有蛋”。这个问题似乎不会有一个确定的答案,但从整体上看,这次的经验分享中有更多有价值的观点。让我们详细看一下。20年浓缩成20条经验1、不要和工具作对所谓工具包括库、语言、平台等,尽量使用原生的开发方式。这样可以保证程序或软件的数据在本地存在并能被及时调取,保证程序或软件的配合速度和流畅性。不要被技术束缚,也不要被问题束缚。为工作选择合适的工具,而不是为工具选择合适的工作。例如:程序查找文件中给定单词的出现次数并计算出现次数。如果用C++写,需要92行代码,但是用Python,只需要26行代码就可以完成。可见,对于同样的问题,换一种工具可能会简化编程,提高效率。2.编写人们可以理解的代码。程序员不是为机器编写代码,他们是为同龄人和未来的自己编写代码。写代码的最终目的往往是为了完成一个项目或者给后来者做一个参考。3、善于合作任何重要的、有价值的软件都是协作的结果,有效的沟通和开放的合作非常重要。能用一切智慧,不惧圣人。4.分而治之每个模块,编写相互关联但又相互独立的单独模块。首先分别测试每个部分,然后将它们集成在一起。既要保证测试贴近实际,又要测试边缘情况。5.敢于分享自己的原创代码。程序员不应该是唯一理解某段代码的人。您可以优化自己的原始代码,以便人们找到修复错误的方法,以及向代码添加功能的方法。这也使得程序员更容易更早地转到下一个项目或公司。为了变得更好,不要让一段代码只对你可见。6.安全是分层的分层安全是应用多种安全措施的做法,每一层都与前一层和下一层重叠,以创建一个安全控制网络,共同保护技术系统。每一层都需要单独评估,但也需要结合整体进行评估。风险是与脆弱性和可能性有直接关系的业务决策。每个产品或组织对风险的偏好不同,这三个问题通常会发生冲突:用户体验、安全性和性能。7.代码也有生死。认识到每一段代码都有一个生命周期,最终都会失败。有时,一段代码甚至在上线之前就被废弃了。程序员一定要学会放手,搞清楚4类特性的区别,然后弄清楚把时间和精力投入到什么地方:核心:就像汽车的引擎。没有它,产品就毫无意义。为什么有必要:就像汽车上的备用轮胎。它很少被使用,但当需要时,它的功能决定了系统的成功与否。附加值:像汽车杯架。拥有它很好,但没有它,该产品也可以完美使用。独特卖点:人们应该购买您的产品而不是竞争对手的主要原因。8.保护个人信息程序员不要将个人身份信息附加到他们的代码中,也不要将其他人的身份附加到他们的代码中。人们独立于他们的工作产品。不要把对代码的批评当成针对自己的,当然在批评别人的代码时也要谨慎。9、尽量避免技术债技术债是开发团队在设计或选择架构时,为了快速解决问题而采用的一种不定期的解决方案。偶尔的技术债务是可以接受的,但长期债务往往会很快扼杀产品。10.在决定解决方案时,假设所有其他条件相同,可以考虑以下优先级:安全性>可用性(可访问性和用户体验)>可维护性>简单性(开发人员体验/DX)>简洁性(代码长度)>性能但不一味遵循这个规律,也要考虑到产品的性质。例如,在设计游戏引擎时,性能是最重要的因素;但是在创建银行应用程序时,安全性是最重要的因素。11、复制粘贴会带来bug有时候复制粘贴后会出现bug,这几乎是不可避免的。为了检查是否有问题,每次都需要理解复制的内容,并对导入的内容进行审核。12.不要只为乐观的场景编写代码,还要写出好的错误信息,回答为什么会发生,如何检测,以及如何解决。13、尽量不要使用依赖库。如果A在调用动态库A时需要调用动态库B,那么B就是A的依赖库。尽量不要使用依赖库,除非导入、维护、处理边缘情况有bug,或者代码没有满足要求,重构的成本比你拥有的代码要低很多。14、不要盲目跟风。你可以了解热门的新技术,但不要被拖走,坚持自己对技术的品味。15.不断学习16.最好的代码有好的注释有些人认为如果代码写得好,就不需要写注释了。但最好的代码通常有很好的注释。这样,即使是没有经历过这段代码的调试和测试过程,暂时不具备编写这段代码能力的人,也可以使用。可以说,无证函数就是不存在的函数,不存在的函数就不应该有代码。17、尽量避免改写、继承和隐藏信息来编写纯函数(PureFunction)。纯函数总是为相同的输入返回相同的输出,执行时没有副作用,并且不依赖于外部状态。它们更容易测试和推理。在执行非纯函数时,除了获取函数的返回值外,在调用函数时还有附加作用,如:修改全局变量的状态,修改传入的参数等。任何非纯函数都应该是类,任何具有不同函数的代码结构都应该有不同的名称。18.弄清楚问题后开始编程。面对问题,首先要想出解决方案,然后再开始编程。编程过程也需要逐步经历“代码-测试-改进”的循环,不断深入探索,直至完成。19.不解决不存在的问题。不要推测性地编程。如果您确定将来会扩展代码,则只投资于使您的代码更具可扩展性。因为当代码要被扩展时,很有可能问题定义已经和代码刚写的时候不一样了。20、利用社区,积极讨论合作完成一个程序或软件,往往更有趣。很多程序员,包括技术专家,都会在一些专业的论坛(如Github、Stackoverflow等)上分享自己的原始代码,供他人参考、提出建议和修复bug。除了使用现有的论坛和网站,您还可以为自己的项目创建一个良好的社区。