当前位置: 首页 > news >正文

糟糕程序员的20个坏习惯

ff6f29961be205cf1f9904af88c03b38.gif

今天聊一聊优秀程序员的基本素养。

我想你肯定遇到过这样一类程序员:他们无论是写代码,还是写文档,又或是和别人沟通,都显得特别专业。每次遇到这类人,我都在想,他们到底是怎么做到的?

随着工作时间的增长,渐渐地我也总结出一些经验,他们身上都保持着一些看似很微小的优秀习惯,但正是因为这些习惯,体现出了一个优秀程序员的基本素养。

但今天我们来换个角度,来看看一个糟糕程序员有哪些坏习惯?只要我们都能避开这些问题,就可以逐渐向一个优秀程序员靠近。

1、技术名词拼写不规范

无论是个人简历,还是技术文档,我经常看到拼写不规范的技术名词,例如 JAVA、javascript、python、MySql、Hbase、restful。

正确的拼写应该是 Java、JavaScript、Python、MySQL、HBase、RESTful,不要小看这个问题,很多面试官很有可能因为这一点刷掉你的简历。

2、写文档,中英文混排不规范

中文描述使用英文标点符号,英文和数字使用了全角字符,中文与英文、数字之间没有空格等等。

其中很多人会忽视中文和英文、数字之间加一个「空格」,这样排版阅读起来会更舒服。之前我的文章排版,都是遵循了这些细节。

3、重要逻辑不写注释,或写得很拖沓

复杂且重要的逻辑代码,很多程序员不写注释,除了自己能看懂代码逻辑,其他人根本看不懂。或者是注释虽然写了,但写得很拖沓,没有逻辑可言。

重要的逻辑不止要写注释,还要写得简洁、清晰。如果是一眼就能读懂的简单代码,可以不加注释。

4、写复杂冗长的函数

一个函数几百行,一个文件上千行代码,复杂函数不做拆分,导致代码变得越来越难维护,最后谁也不敢动。

基本的设计模式还是要遵守的,例如单一职责,一个函数只做一件事,开闭原则,对扩展开放,对修改关闭。

如果函数逻辑确实复杂,也至少要保证主干逻辑足够清晰。

5、不看官方文档,只看垃圾博客

很多人遇到问题不先去看官方文档,而是热衷于去看垃圾博客,这些博客的内容都是互相抄袭,错误百出。

其实很多软件官方文档写得已经非常好了,常见问题都能找到答案,认真读一读官方文档,比看垃圾博客强一百倍,要养成看官方文档的好习惯。

6、宣扬内功无用论

有些人天天追求日新月异的开源项目和框架,却不肯花时间去啃一啃底层原理,常见问题虽然可以解决,但遇到稍微深一点的问题就束手无策。

很多高大上的架构设计,思路其实都源于底层。想一想,像计算机体系结构、操作系统、网络协议这些东西,经过多少年演进才变为现在的样子,演进过程中遇到的复杂问题比比皆是,理解了解决这些问题的思路,再看上层技术会变得很简单。

7、乐于炫技

有些人天天把「高大上」的技术名词挂在嘴边,生怕别人不知道自己学了什么高深技术,嘴上乐于炫技,但别人一问他细节就会哑口无言。

8、不接受质疑

自己设计的方案,别人提出疑问时只会回怼,而不是理性分析利弊,抱着学习的心态交流。

这些人学了点东西就觉得自己很有本事,殊不知只是自己见识太少。

9、接口协议不规范

和别人定 API 协议全靠口头沟通,不给规范的文档说明,甚至到了测试联调时会发现,竟然和协商的还不一样,或者改协议了却不通知对接方,合作体验极差。

10、遇到问题自己死磕

很初级程序员容易犯的问题,遇到问题只会自己死磕,拖到 deadline 也没有产出,领导来问才知道有问题解决不了。

有问题及时反馈才是对自己负责,对团队负责。

11、一说就会,一写就废

平时技术方案吹得天花乱坠,一让他写代码就废,典型的眼高手低选手。

12、表达没有逻辑,不站在对方角度看问题

讨论问题不交代背景,上来就说自己的方案,别人听得云里雾里,让你从头描述你又讲不明白。

学会沟通和表达,是合作的基础。

13、不主动思考,伸手党

遇到问题不去 google,不做思考就向别人提问,喜欢做伸手党。

每个人的时间都很宝贵,大家都更喜欢你带着自己的思考来提问,一来可以规避很多低级问题,二来可以提高交流质量。

14、经常犯重复的错误

出问题后说下次会注意,但下次问题依旧,对自己不负责任,说到底是态度问题。

15、加功能不考虑扩展性

加新功能只关注某一小块业务,不考虑系统整体的扩展性,堆代码行为严重。

要学会分析需求和未来可能发生的变化,设计更通用的解决方案,降低后期开发成本。

16、接口不自测,出问题不打日志

自己开发的接口不自测就和别人联调,出了问题又说没打日志,协作效率极低。

17、提交代码不规范

很多人提交代码不写描述,或者写的是无意义的描述,尤其是修改很少代码时,这种情况会导致回溯问题成本变高。

制定代码提交规范,能让你在每一次提交代码时,不会做太随意的代码修改。

18、手动修改生产环境数据库

直连生产环境数据库修改数据,更有 UPDATE / DELETE SQL 忘写 WEHRE 条件的情况,产生数据事故。

修改生产环境数据库一定要谨慎再谨慎,建议操作前先找同事 review 代码再操作。

19、没理清需求就直接写代码

很多程序员接到需求后,不怎么思考就开始写代码,需求和自己理解的有偏差,造成无意义返工。

多花些时间梳理需求,能规避很多不合理的问题。

20、重要设计不写文档

重要的设计没有文档输出,和别人交接系统时只做口头描述,丢失关键信息。

有时候理解一个设计方案,一个好的文档要比看几百行代码更高效。

总结

以上这些不良习惯,你命中几个呢?或者你身边有没有碰到这样的人?

我认为提早规避这些问题,是成为一个优秀程序员必须要做的。这些习惯总结起来大致分为这 4 个方面:

  • 良好的编程修养

  • 谦虚的学习心态

  • 良好的沟通和表达

  • 注重团队协作

优秀程序员的专业技能,我们可能很难在短时间内学会,但这些基本的职业素养,是可以在短期内做到的。

希望你我可以有则改之,无则加勉。

RECOMMEND

推荐阅读

e7c389246ba8fa515f111d3b48f61155.png

01

《编程原则:来自代码大师Max Kanat-Alexander的建议》

912baea4dfb71a123aae422199dd080c.png

编程大师向你展示如何让简约设计的思想回归到计算机编程中

作者:[美]马克斯·卡纳特-亚历山大(Max Kanat-Alexander)

译者:李光毅

推荐阅读

在本书中,富有传奇色彩的编程大师马克斯·卡纳特-亚历山大(Max Kanat-Alexander)将会向你展示如何让简约设计的思想回归到计算机编程中。马克斯会解释程序员为何会感到力不从心,以及应该如何持续改善。世界上存在太多复杂的事物。复杂并不可取,因为它会给我们的工作带来隐患。
马克斯从他久负盛名的技术博客CodeSimplicity中精选了一部分文章,对如何在软件行业工作以及取得成功给出了自己的想法和建议。相信这43篇文章能够让你学会如何在工作中避免复杂,拥抱简约,从而让你的职业生涯更加顺利和成功。

f07c991f19c2f75e3a20cd98aba78ca4.png

02

《面向对象的思考过程》

21b061bfdee03cd556d59f5b53786dd7.png

作者:[美]马特·魏斯费尔德(Matt Weisfeld)

译者:黄博文 冯冠军 张轲

推荐阅读

面向对象编程(OOP)是现代编程语言(包括C++、Java、C#、Visual Basic .NET、Ruby、Objective-C和Swift)的基础。对象也构成了许多Web技术(如JavaScript、Python和PHP)的基础。
在开始使用面向对象的开发环境之前,了解面向对象的基本概念至关重要。OOP促进了良好的设计实践、代码可移植性和重用性,但是需要转变思维才能完全理解OOP。刚接触OOP的程序员应该抵制直接跳入特定编程语言或建模语言的诱惑,首先花时间学习本书作者提出的“面向对象的思考过程”。
尽管编程技术多年来一直在变化和发展,但是无论平台如何演进,面向对象仍然是一个不变的概念。本书侧重于在过去20年中幸存下来并保持其核心的OOP技术,其中包括新的和扩展的设计模式、避免依赖关系以及SOLID原则,以帮助开发人员使软件设计易于理解、灵活和可维。

3db59a704cddc41c5829c79598b4d6e5.png

03

《如何写出好程序》

ab3b148e9729a03164126773fa0add43.png

编程初学者、萌新程序员和编程“老兵”必读的宝藏级编程“说明书”

赶走你的编程焦虑

作者:[英] 佩蒂塔·史蒂文斯(Perdita Stevens)

译者:王磊、周训杰、万学凡

推荐阅读

学习编程并不仅仅是学习编程语言的细节:要想成为一名优秀的程序员,就必须成为调试代码、测试代码、编写清晰代码的专家,并且能解决遇到的任何疑难问题。同样,要想在编程课程中获得好成绩,就必须学会如何在作业和考试中取得高分。本书通过丰富的小提示、故事和关键术语的解释,清晰地传授各种编程技巧。书中包含Python、Java和Haskell的示例,无论你正在学习哪一种编程语言,都能帮助你。

1da970d8241492a860f47ca71fa25b17.png

扫码关注【华章计算机】视频号

每天来听华章哥讲书

5d88bce7f3b34ba7e3f5bcc775351a9c.gif

更多精彩回顾

书讯 | 11月书讯(上)| 拿下这些新书,赢在起跑线

书讯 | 11月书讯(下) | 拿下这些新书,赢在起跑线

资讯 | 什么是ETL?一文掌握ETL设计过程

书单 | 8本书助你零基础转行数据分析岗

干货 | 架构设计的新思路,《架构之道》读书笔记

收藏 | 终于有人把微服务讲明白了

上新 | 【新书速递】构建高质量软件:持续集成与持续交付系统实践

f3732ec4f61ac28c74bb7757d574497c.gif

995ee7859fe3cd3e1015abc621226d83.gif

点击阅读全文购买

相关文章:

  • SQL性能优化策略之联合索引优化方法
  • 计算机图形学经典教材《计算机图形学原理及实践》作者荣获2021年计算机历史博物馆Fellow奖...
  • 双十一囤书攻略
  • 盘点云原生的5大特征
  • 一文读懂逻辑门
  • 【新书速递】金融商业算法建模手册
  • 开源 12 年后,Go 语言成为一刀流剑客
  • 被 CSAPP 虐了!
  • 7张图揭晓RocketMQ存储设计的精髓
  • 看漫画来告诉你:什么是 “元宇宙” ?
  • 【第80期】浅谈如何成为技术一号位?
  • SpringBoot 实战:加载和读取资源文件内容
  • 终于有人把云计算与数据库的关系讲明白了
  • 为什么 Rust 是编程的未来?
  • 四种代码洁癖类型,程序员看了直呼内行
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • Apache Spark Streaming 使用实例
  • classpath对获取配置文件的影响
  • java中具有继承关系的类及其对象初始化顺序
  • Objective-C 中关联引用的概念
  • PhantomJS 安装
  • Redash本地开发环境搭建
  • TCP拥塞控制
  • Tornado学习笔记(1)
  • 初探 Vue 生命周期和钩子函数
  • 将回调地狱按在地上摩擦的Promise
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 排序算法学习笔记
  • 盘点那些不知名却常用的 Git 操作
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 山寨一个 Promise
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 通信类
  • Prometheus VS InfluxDB
  • (2)STL算法之元素计数
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (全注解开发)学习Spring-MVC的第三天
  • (转)Sql Server 保留几位小数的两种做法
  • (转)详解PHP处理密码的几种方式
  • .NET Core中的去虚
  • .net Signalr 使用笔记
  • .Net Winform开发笔记(一)
  • .NET6实现破解Modbus poll点表配置文件
  • .NetCore部署微服务(二)
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • /bin/rm: 参数列表过长"的解决办法
  • @SuppressWarnings注解
  • [2016.7 Day.4] T1 游戏 [正解:二分图 偏解:奇葩贪心+模拟?(不知如何称呼不过居然比std还快)]
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件
  • [2024最新教程]地表最强AGI:Claude 3注册账号/登录账号/访问方法,小白教程包教包会
  • [3D游戏开发实践] Cocos Cyberpunk 源码解读-高中低端机性能适配策略