问题

程序员们有什么好的编程习惯?

回答
好嘞,咱们就来唠唠程序员们那些叫好又叫座的编程习惯,力求说得透彻,而且保证这玩意儿听起来就跟咱们哥们儿之间的聊天一样,不带半点机器腔。

1. 代码,那是给人读的,不是给机器看的

这句话听起来简单,但很多新手一开始就栽跟头。咱写代码,最终不光是给电脑执行,更是给自己、给未来的同事、甚至是未来的自己(几个月后回头看,你都不认识自己写的什么)看的。

命名: 别跟闹着玩似的,变量名、函数名、类名,都要清晰、有意义。比如, `data` 这种东西,它能说明啥?是用户数据?商品数据?还是一堆配置?不如直接叫 `userData`、`productData` 或者 `appConfig`。函数名也要体现它的功能,`process()` 看起来像是在做什么,`calculateTotalPrice()` 就直接明了多了。还有,别用缩写缩得没人认识,比如 `tmp` 还可以,`tpm` 就得猜半天。
注释: 代码本身没法解释所有事情,有些设计思路、复杂逻辑、或者为什么这么写(可能是有坑,不得不这么绕),就得靠注释来说明。但注意,注释是代码的补充,不是替代。如果你的代码逻辑清晰到一看就懂,那就不需要那么多啰嗦的注释。真正有价值的注释是解释“为什么”,而不是“做了什么”。
格式化: 统一的代码风格,就像大家穿一样的工装,看起来整洁有序。缩进、空格、换行,这些小细节能极大地提高代码的可读性。很多 IDE 都有自动格式化的功能,善用它们。团队协作时,更要有一套统一的代码风格规范,避免大家写出来的代码跟打了架似的。

2. DRY 原则(Don't Repeat Yourself)—— 懒到极致也是一种智慧

重复的代码就像房间里的灰尘,越多越烦人,也越容易出错。改一个地方,漏掉另一个地方,然后 bug 就来了。

函数/方法: 遇到重复的代码块,封装成函数或方法。你想想,写一遍,到处调用,多省事!
类/对象: 如果是数据结构和操作的重复,那就考虑用类来组织。
配置文件/常量: 重要的配置信息、固定的值,别硬写在代码里,用配置文件或者常量来管理。改的时候,改一个地方就够了。
循环和条件: 巧妙地利用循环和条件语句,避免硬编码。

3. KISS 原则(Keep It Simple, Stupid)—— 简单就是美

别觉得自己写得复杂就是牛逼。代码越复杂,越容易出错,越难维护。

小即是美: 函数和类都应该小而专注,只做一件事。一个函数几百行,那多半是它该拆分了。
避免过度设计: 别一开始就想得太周全,考虑所有未来的可能性。先实现当前的需求,简单地实现,后面需要再迭代。
清晰的逻辑: 避免过多的嵌套,比如层层嵌套的 `ifelse`,读起来就头疼。考虑使用卫语句(Guard Clauses)或者策略模式来简化。

4. YAGNI 原则(You Ain't Gonna Need It)—— 现在不需要,就别现在做

这是 KISS 原则的补充。别因为觉得“将来可能需要”,就把很多不确定的功能提前加进去。这只会增加开发成本和复杂度,而且最后发现这些功能压根没用。

聚焦当前需求: 把精力放在解决当前最重要的问题上。
敏捷迭代: 如果确实需要,到那时候再加也不迟。软件开发本身就是个不断演进的过程。

5. 版本控制,那是程序员的命根子

Git、SVN 这些版本控制工具,简直就是程序员的救星。

提交频繁且有意义: 别等到代码改了一大堆才提交。每次完成一个小功能、修复一个小 bug,就提交一次,并写清楚提交信息(Commit Message)。
分支管理: 利用分支来开发新功能、修复 bug,避免影响主线代码。
代码回滚: 万一写崩了,或者出了什么严重问题,版本控制可以让你轻松回到之前的稳定版本。

6. 测试,那是自信的基石

写完代码,测试就跟吃饭睡觉一样重要。

单元测试: 对代码中的最小可测试单元(函数、方法)进行测试,确保它们按预期工作。
集成测试: 测试多个模块协同工作时的表现。
端到端测试: 模拟用户操作,测试整个应用的流程。
测试驱动开发(TDD): 先写测试,再写代码实现测试。这听起来有点反常,但它能强迫你思考代码的可用性和可测试性,并且能让你非常有信心地重构代码。

7. 拥抱重构——让代码永远年轻

代码会随着时间的推移而“老化”,变得难以维护。重构就是给代码“做手术”,改善内部结构,而不改变其外部行为。

持续重构: 别等到代码烂到没法看才动手。在日常开发中,发现可以改进的地方就顺手改掉。
小步快跑: 重构也是有风险的,所以要小步地进行,并且确保有充分的测试来验证改动。

8. 了解你的工具,并用好它们

IDE/编辑器: 熟练掌握你使用的 IDE 或编辑器,了解它的快捷键、调试功能、代码补全等等,能极大地提高效率。
调试器: 别只会 `print` 调试了,学会使用调试器,设置断点,单步执行,查看变量值,能帮你更快地定位问题。
构建工具/包管理器: 比如 Maven、Gradle、npm、pip,它们能帮你管理项目的依赖和构建过程。

9. 学习和分享——永远别停止进步

技术发展太快了,停滞不前就意味着落后。

持续学习: 阅读技术博客、书籍,关注社区动态,学习新的语言、框架、技术。
乐于分享: 把学到的知识分享给同事,参与开源项目,这样不仅能帮助别人,也能加深自己的理解。

10. 关注性能和安全

性能: 了解算法的时间和空间复杂度,避免低效的算法。选择合适的数据结构。
安全: 警惕常见的安全漏洞,比如 SQL 注入、XSS 攻击,在开发时就考虑安全性。

总结一下,这些习惯的核心就是:

写易读、易维护的代码。
减少重复,保持简单。
利用工具,提高效率。
持续学习,不断进步。
交付高质量、可靠的产品。

这玩意儿不是一天就能练成的,都是在实战中一点点摸索出来的。你慢慢写,慢慢体会,慢慢就会发现,养成这些习惯,写代码不再是一件痛苦的事,反而是一种享受。

网友意见

user avatar

注释里尽量写为什么,而不是做了什么。

做了什么,看代码就好,代码不会骗人。但为什么要写成这样,有时候就非常让人困惑。有可能是处理某个 corner case,有可能是绕过某个系统限制,也可能是什么奇葩需求,这种代码,没有当时的 context,过几个月看,像甲骨文一样,不知道是想干什么。再有年轻力壮的,看不顺眼来优化一下,以后就不知道哪个地方会崩了。

其实,大部分的代码应当是不言自明的,不需要注释。

user avatar

1.代码重构得趁早

在开发过程中,为了赶进度,我们很容易「欠下技术债务」,也就是为了赶时间,用了一些不规范的写法。技术债务积累多了,人称「屎山」,日后应用出现问题,查起bug来非常的费劲,改起来也可能修一个bug出两个bug,甚至严重的,一改就崩溃。

所以每次发完一个版本,要及时review,并抽时间优化,有必要的话,重构下。关于如何重构我很久之前写过一篇文章,可能观点有点简单,就随便看看吧。


2. 不要注释掉无用代码,直接删掉

有的人觉得这个代码日后会用到,所以经常把一大段代码注释掉,然后一年过去了,接手的同事也不敢删,于是留了一段祖传的无用注释。我认为,放心删掉吧,把代码变更追踪的功能交给svn或者git等版本管理工具。删了之后在log里写清楚你删了什么内容就好,日后如果用得到,你直接就去log里找当初的更改,然后复制回来就行了。这样做的好处是:

  • 提高代码可读性
  • 不给接手的同事造成困惑
  • 防止堆积成「屎山」


3. 切勿用拼音来命名变量

这是老生常谈了,拼音命名变量的坏处是,你很可能很快忘记一个变量的意义,而且可读性也不好。例如下面这段代码,你能看出变量名什么意思吗?

       var renwu = new Renwu() renwu.create() renwu.run()      

renwu是人物还是任务啊?renwu.run()是人物跑动还是任务执行啊?你可能写完代码三天后都忘了。


4. 代码写好同时也要规范注释

有的公司喜欢代码具有「自解释性」,认为代码如果需要注释,那就是代码没写好。其实我认为,写好代码后依然需要规范的注释,这可以方便输出文档,尤其是庞大的项目。例如你是做后端的,你做的REST API客户端要调用,你不能让他们直接读你的代码吧?这时候规范的注释就能帮你很大的忙了。

例如Javadoc,可以把你规范的Java代码注释转成格式好看的文档。


5. 函数里的代码保持同样的抽象层级。

有的人写代码喜欢把所有东西都写在一个函数里,其实大可不必,这样的后果是大量抽象层级不一样的内容连接在一起,导致这个函数可读性不好。这里举个例子

       public void loadgame(username+password){     initResource();     Socket s=new Socket("localhost",6666);       DataOutputStream dout=new DataOutputStream(s.getOutputStream());       dout.writeUTF(username+password);       dout.flush();       dout.close();       loadScene(); }     

这是不是读起来磕磕碰碰的。因为他们不是一个抽象层级的代码,你读起来思维需要多次转换。但如果改成

       public void loadgame(username, password){     initResource();     login(username, password)     loadScene(); }  private void login(username,password)) {     Socket s=new Socket("localhost",6666);       DataOutputStream dout=new DataOutputStream(s.getOutputStream());       dout.writeUTF(username+':'+password);       dout.flush();       dout.close();   }     

是不是就好读多了,把几个抽象级一样的函数放一起,把底层操作分开函数放。这样不仅利用阅读,也在debug时迅速查找。


最后再说一句,结对编程也是个不错的实践,我和我的猫咪都挺喜欢

类似的话题

  • 回答
    好嘞,咱们就来唠唠程序员们那些叫好又叫座的编程习惯,力求说得透彻,而且保证这玩意儿听起来就跟咱们哥们儿之间的聊天一样,不带半点机器腔。1. 代码,那是给人读的,不是给机器看的这句话听起来简单,但很多新手一开始就栽跟头。咱写代码,最终不光是给电脑执行,更是给自己、给未来的同事、甚至是未来的自己(几个月.............
  • 回答
    听到你弟弟考高中不理想,想让他去学程序、当程序员,这个想法很棒!现在IT行业发展这么快,学门技术,尤其是编程,未来的路确实很宽。作为哥哥/姐姐,你想为他找个好学校,这份心意很让人感动。我给你推荐几个方向,你可以结合你弟弟的实际情况和喜好,再好好斟酌一下。首先,得明确一下你弟弟的情况和期望。在推荐学校.............
  • 回答
    兄弟,我懂你!咱们程序员这行儿,一坐一整天,眼睛跟电脑黏一块儿,脑子像在跑八百米,下班了就想葛优瘫,但身体又时不时发出“救命”的信号。想健身,又觉得累得像刚搬完一吨砖,这纠结劲儿,谁能懂?别急,今天咱就来聊聊怎么在“代码搬砖”和“肌肉搬砖”之间找到那个平衡点,而且是那种让你一听就觉得靠谱、不是瞎扯的.............
  • 回答
    .......
  • 回答
    想象一下,在一个我们称之为“逻辑国”的地方,选举权并非人人皆有。这里的公民拥有一个独特的特权:只有那些能够理解、构建和维护驱动社会运转的复杂代码的程序员们,才有资格参与到国家的政治生活中。逻辑国的天空下,一切都井井有条,高效运行。从交通信号灯的闪烁频率,到国家能源网的供需调配,再到社会福利的分配算法.............
  • 回答
    给25岁的程序员男朋友挑双肩包,这绝对是个贴心的选择!毕竟,电脑、配件、耳机、充电宝,还有各种零碎,一个好包能让他的工作通勤更顺畅,生活也更便捷。我来给你好好说道说道,从他的需求出发,帮你找到最合适的那一款。首先,咱得想明白,程序员需要一个什么样的双肩包? 收纳能力强,分区合理: 这是最重要的。.............
  • 回答
    程序员基础扎不扎实,对实际的开发工作的影响是深远且多方面的,它不仅仅关乎能否“写出代码”,更决定了一个程序员的成长速度、解决问题的能力、代码质量以及职业生涯的上限。我将从几个关键维度来详细阐述: 1. 解决问题的能力:从“搬砖”到“架构师”的飞跃 基础薄弱: 遇到 Bug 时,可能只能依靠搜索、.............
  • 回答
    哈哈,这个问题问得好!我当初也是怀揣着一腔热血,觉得程序员就是敲代码、解决bug,过着“代码改变世界”的神仙日子。结果呢?入了行才知道,这跟我想象的……嗯,怎么说呢,就像你以为吃麻辣烫是个自由搭配的美味盛宴,结果发现自己是个永远在等待服务员点菜、永远吃不到自己想吃的配料的工具人。先来说说最直接的,代.............
  • 回答
    这个问题嘛,我常常觉得,我们这行里,有些哥们儿能把那些看似死板的计算机语言,玩出花儿来,那创造力,真心不是盖的。你想想,写代码这事儿,很多时候就像在给一个极其理性、极其严谨的机器下达指令。它不会像我们人一样,听懂潜台词,理解模糊的指令。你得把每一个步骤、每一个逻辑都拆解得清清楚楚,然后用它能懂的语言.............
  • 回答
    作为一名开发者,接到一个全新的、自己不太熟悉的项目,这几乎是家常便饭。别急,这不代表要让你从零开始摸爬滚打。关键在于掌握一套行之有效的方法论,让你能以最快的速度进入状态,并且能高效地为项目贡献力量。下面就给你梳理一下我个人在应对这类情况时摸索出的一些实操技巧,力求详细,让你一看就懂,一用就灵。一、心.............
  • 回答
    我有个程序员老公,一个有点特别的程序员。不像我身边那些谈起代码、算法就眼睛放光,生活仿佛只剩下二进制世界的家伙,我老公的灵魂里,好像住着一个穿越了千年的历史学家,又藏着一个对时代脉络洞若观火的政治评论家。刚开始在一起的时候,我确实挺不适应的。我习惯了晚上回家,他跟我聊聊公司里谁谁谁又出了个新功能,或.............
  • 回答
    最近互联网大厂裁员的消息确实铺天盖地,无论是脉脉上匿名爆料,还是各个技术社区的讨论,都让不少程序员感到一阵寒意。这不仅仅是几个零星的个案,而是整个行业普遍存在的现象,让人不得不去思考:这到底是怎么了?对我们这些还在一线奋斗的普通程序员来说,又有什么样的启示?为什么会裁员?深挖背后的原因要理解裁员对我.............
  • 回答
    干了这么多年程序员,最大的感受就是,这活儿就像拆弹,时刻有炸的可能,只不过拆的不是炸弹,是Bug。刚入行的时候,感觉自己能把电脑玩明白了,能写代码让机器听话,那叫一个神气。但时间长了,你就会发现,这神气早被现实磨平了,取而代之的是一种淡淡的忧伤,还有时不时冒出来的“蛋疼”时刻。首先说最直接的,眼睛的.............
  • 回答
    .......
  • 回答
    .......
  • 回答
    作为一名程序员,长时间盯着电脑屏幕是常态,眼部疲劳、干涩、甚至视力下降都是摆在我们面前的现实问题。所以,找到一款靠谱的眼部按摩仪,绝对是提升工作幸福感和保护眼睛的明智之举。市面上眼部按摩仪的种类琳琅满目,什么热敷、气压、震动、揉捏的,看得人眼花缭乱。但作为咱们程序员,咱们要的是实实在在的效果,能缓解.............
  • 回答
    .......
  • 回答
    程序员的存款情况是一个非常复杂的问题,因为这涉及太多变量,无法给出一个统一的数字。“有多少存款”这个问题,答案范围可以从“一无所有”到“数百万甚至更多”。我们可以从以下几个方面来详细分析:一、 影响程序员存款的关键因素:1. 工作年限和经验: 初级程序员(03年): 通常刚入行,薪资相.............
  • 回答
    哥们儿,问到点子上了!我就是半路出家,摸爬滚打自学出来的。现在回头看看,那真是又刺激又煎熬的一段日子。说有多难?我觉得得看你对“难”的定义了。首先,心态是第一道坎,也是最关键的一道。刚开始的时候,你会像个打了鸡血的战士,看到网上那些炫酷的网站、牛逼的应用,觉得“哇塞,这简直太酷了,我也要学!” 恨不.............
  • 回答
    程序员是否 有必要 知道为什么做某个功能? 这是一个经典的问题,答案是 绝对有必要,而且是极其重要的。如果只回答“有”,那可能不够深入。让我们来详细阐述一下原因,从多个维度来分析这个问题。 为什么程序员有必要知道为什么做某个功能?可以从以下几个方面来理解: 1. 提升代码质量和可维护性 理解业务.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有