关山难越,谁悲失路之人;萍水相逢,尽是他乡之客。
百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程教程 > 技术文章 > 正文

「龙腾网」真正糟糕的程序员都有哪些共同的特点?

guanshanw 2023-09-29 21:42 25 浏览 0 评论

正文翻译


What qualities do really bad programmers share?

真正糟糕的程序员都有哪些共同的特点?

原创翻译:龙腾网 http://www.ltaaa.cn 转载请注明出处


评论翻译
Nick Bailey, Engineering Manager at Rally Health
“All happy families are alike, every unhappy family is unhappy in its own way”
Anna Karenina, Leo Tolstoy
There are many ways to be a bad programmer, and no traits that are common to all, but I think I can break down bad programmers into four broad categories:
The narrow minded. This is I think the most common kind of bad programmer. They know one language, one tools set, and don't know how to move beyond that. They can only program if it followsthe patterns they learned in school. These are the developers who call MySql ‘SQL’ or try to write websites that work like Swing apps because they can't think outside of one way of doing things.
The indifferent. These are the developers who don't see the problem with a hack solution. They never refactoring and never improve. They don't look for better processes or tools. They don't give a damb if the company goes under. They're fine plugging away at their 10 year old ASP app.
The arrogant. These are developers who think they're hot shit. They don't write , cause their code ‘has no bugs.’ They don't take feedback. They write hard to read, hard to manage code, because ‘if you don't understand it you must not be smart enough.’ They take their favorite language or paradigm and try to jam it everywhere. These are the most dangerous of the bad developers, because they are often quite smart, and can get stuff done, until Thierry hubris brings the whole system crashing down.
The just plain incompetent. Some folks, are just bad. The devs who put comma delimited strings in SQL databases, write empty catch blocks and use all global variables. They're rarer, but you see them.
I'd say, if I were giving advice, watch out for becoming narrow minded. The fact that you are asking this question means you aren't indifferent or arrogant. But it is very easy to get complacent. Constantly try to talk with developers who do different kinds of programming from you. Learn a weird language like Haskell or Prolog or Clojure. Learn about the alternatives to the tech you use. If you use Java, learn about .NET. if you use jQuery, learn ReactJS. No matter what, learn the implementation details. Don't ever stop running!

幸福的家庭都是相似的,不幸的家庭各有各的不幸——安娜·卡列尼娜,列夫·托尔斯泰。
成为一个糟糕的程序员有很多种方式,并没有什么所谓的共同特征,但我认为我可以将糟糕的程序员分为四大类:
第一类: 思想狭隘的程序员。这是我认为最常见的糟糕的程序员。他们只懂得一种计算机语言和一套工具,还不想着该如何去超越它,不知道要去多学一种语言。他们只有套用在学校里学到的那套模式,才能编程。这些开发者称MySql为“SQL”,他们尝试编写像 Swing 应用程序一样工作的网站,因为他们无法跳出这一种做事方式进行思考。
第二类:对什么都漠不关心的程序员。这些开发人员从不想着去解决黑客制造的问题。他们从不重构,也从不改进。他们不去寻找那些更好的程序或工具。如果公司倒闭了,他们也一点都不在意。他们可以继续使用他们已经用了10年的 ASP 应用程序。
第三类:傲慢的程序员。这都是些自以为自己很了不起的程序员。他们不改代码,是因为他们觉得自己的代码“没有任何的错误”。他们也不接受别人的反馈。如果你觉得他们写的代码很难读懂,而且还很难管理的话,那肯定是因为你自己不够聪明。他们采用的代码都是他们自己最喜欢的语言或范式,并试图将这些语言用到任何地方。这些糟糕的开发人员都是非常危险的,因为他们通常都很聪明,而且他们能够完成你交代的任务,但是他们的狂妄自大最终会导致整个系统都崩溃。
这些程序员简直就是无能,毕竟有些人就是很糟糕。有些开发人员会将逗号分隔的字符串放入SQL数据库、编写空的catch块并使用所有全局变量,虽然这些程序员并不常见,但你有时候还是会看到它们的。
我想表达的是,如果你让我给你提建议的话,那我要提醒你,不要变成一个心胸狭窄的人。事实上,当你问这个问题的时候,就意味着你并不是一个冷漠或傲慢的人,但人们很容易沾沾自喜。你可以试着去和不同编程风格的开发人员交流。你可以去学习一门与众不同的语言,比如Haskell、Prolog或Clojure。去了解你所使用技术的替代方案。如果你使用的是Java的话,那你可以去了解一下NET。如果你使用的是jQuery,那你可以去学习一下ReactJS。不管怎样,去学习一些新东西。永远不要停止进步!
Hans Brinkhof, Senior Java Developer (2017-present)
A few examples
They consider themselves the only person who’ll ever read their code.
Why bother using variable names that explain what the variable does, if you can just call them a1, a2, … After all, I know what they do, right?
They don’t or hardly document their code. Whether they do it in the code, or in some wiki/external documentation doesn’t matter, but somewhere there should be an accessible documentation about the project, both functionally, as technically.
They believe refactoring is a dirty word.
Why changing the code as it is now? It works. It always worked.
Well, chances are you’ve been using deprecated methods, which have been replaced by better alternatives by now, and, which might be removed from the language altogether soon enough, which would lead to problems when updating the language.
When they do refactor, they believe every change they do in code is “refactoring”. No, only actual improvements without changing the functionality is refactoring. Changing the code into something that has the same functionality, but is ten times as hard to read, not to mention maintain, is not refactoring, it’s called “screwing up”.
They understand the code they write, but they don’t (try to) understand the context of the project they’re working on.
It’s nice being able to write small snippets, and implementing them. It’s crap if you have no idea what the impact of them on the entire project might be.
They consider themselves good programmers. “If I wrote it, the code is good” kind of mentality. Usually, it isn’t, but if the code review is done by someone equally bad, it might actually make it into production. If it’s done by a good programmer, it might be a repetitive waste of his time.
They either don’t test their code, or only for a (very) limited number of scenario’s, leaving the most untested
And the list goes on …

我来举几个例子:
有些程序员认为自己是唯一一个会解读他们代码的人。
为什么要用变量名来表达这些变量的作用呢,如果你可以将它们命名为a1、a2的话,那我就会知道它们是做什么的了,对吧?
他们几乎从来都不记录他们自己的代码。无论是在代码中,还是在某些wiki或外部文档中,他们都不会记录自己的代码,虽然在这些地方不记录并没有什么关系,但是在某个地方应该有一个关于这个项目的可访问文档。无论是功能上的还是技术上的文档,都应该准备一个。
他们认为重构自己的程序就是在侮辱他们。
为什么要像现在这样更改代码呢?因为从它的工作原理上来说,更改代码是有效果的。
好吧,可能你现在一直在使用的方法已经被弃用了,他们已经被更好的方法所取代了,并且可能很快就会从语言中完全删除,如果还不更改的话,可能会导致更新语言时出现问题。
当这些程序员进行重构时,他们相信他们在代码中所做的每一个更改都是“重构”。但其实不是,只有在不改变功能的前提下,实际所进行的改进才是重构。仅仅只是把代码修改成具有相同功能的代码,但读起来要难十倍,而且维护起来更困难,这并不是重构,这叫做“搞砸”。
他们只理解自己所编写的代码,但他们从不试图理解他们正在处理的这个项目的上下代码。
能够编写小片段的代码并实现它们是很好的一件事。但如果你不知道这些小片段对整个项目的影响,那就太糟糕了。
他们认为自己是优秀的程序员。他们的想法通常是“如果这个代码是我写的,那肯定很好”。但通常情况下并不是这样,如果代码评审是由同样糟糕的人完成的,那么它可能真的会投入生产。如果它是由一个优秀的程序员完成的,那么这么做可能是在做重复地工作,是在浪费时间。
他们要么不测试代码,要么只测试数量非常有限的场景,剩下很多未测试的场景。
这样的例子不胜枚举……

相关推荐

七条简单命令让您玩转Git
七条简单命令让您玩转Git

凭借着出色的协作能力、快速部署效果与代码构建辅助作用,Git已经得到越来越多企业用户的青睐。除了用于开发商业及消费级应用之外,众多科学及政府机构也开始尝试使用这...

2023-10-07 12:14 guanshanw

基本完整的关于Git分支branch的操作
基本完整的关于Git分支branch的操作

Git使用背景项目中要用到dev或者其他分支开发完代码,需要将该分支合并到master的需求操作步骤下面以dev名称为lex为分支名为例来操作一遍客户端操作:...

2023-10-07 12:14 guanshanw

Git 进阶(合并与变基)
Git 进阶(合并与变基)

在Git中整合来自不同分支的修改主要有两种方法:合并(merge)以及变基(rebase)合并(merge)merge流程图merge的原理是找到这两个分...

2023-10-07 12:13 guanshanw

Git学习笔记 003 Git进阶功能 part5 合并(第一部分)

合并(merge)是很常用的操作。尤其是一个庞大的很多人参与开发的企业级应用。一般会设定一个主分支,和多个副分支。在副分支开发完成后,合并到主分支中。始终保持主分支是一个完整的,稳定的最新状态的分支。...

非标题党,三张图帮你理解git merge和git rebase的区别
非标题党,三张图帮你理解git merge和git rebase的区别

初始场景:基于正常的开发分支修改几个小bug,然后在合并到开发分支上。gitmergegitcheckoutfeaturegitmergeho...

2023-10-07 12:13 guanshanw

git 初次使用(01)
git 初次使用(01)

先从github上克隆代码下来:使用vscode克隆代码如下图,填写上github仓库地址:vscode有时候克隆代码速度比较慢,可以用命令行方式克隆gitc...

2023-10-07 12:12 guanshanw

Git 远程操作

4.Git远程操作命令说明gitremote远程版本库操作gitfetch从远程获取版本库gitpull下载远程代码并合并gitpush上传远程代码并合并4.1远程版本库操作gitre...

Git常用命令-总结
Git常用命令-总结

创建git用户$gitconfig--globaluser.name"YourName"$gitconfig--globaluser.em...

2023-10-07 12:12 guanshanw

git中删除从别人clone下来项目的git信息,并修改为自己的分支

如果你从别人的Git存储库中克隆了一个项目,并想要删除与该存储库相关的Git信息,并将其修改为你自己的分支,则可以执行以下步骤:使用gitclone命令克隆存储库:gitclone<u...

git系列-回滚和放弃本地修改

回滚历史提交就是reset的功能。这种情况是已经提交远程仓库,需要回滚到之前的提交。gitreset--hardcommitId//注:强制提交后,当前版本后面的提交版本将会删掉!gi...

GIT使用小技巧大全
GIT使用小技巧大全

在大型软件工程的开发过程中,版本控制是无法绕过去的;目前来说,最火的版本控制软件就是GIT了。早两年SVN比较火,不过被大神linus喷了几次后,就日落西山了,...

2023-10-07 12:11 guanshanw

git相关命令-上
git相关命令-上

这些命令都是看了文档后,个人觉得比较有用的一些,展示给大家。回到远程仓库的状态抛弃本地所有的修改,回到远程仓库的状态。gitfetch--all&...

2023-10-07 12:10 guanshanw

Git命令行接口:掌握Git的必备技能
Git命令行接口:掌握Git的必备技能

Git是一款强大的分布式版本控制工具,它支持命令行界面操作。熟练掌握Git命令行接口,是开发者使用Git的必备技能之一。在这篇文章中,我们将介绍Git命令行接口...

2023-10-07 12:10 guanshanw

Git命令详解
Git命令详解

相信各位小伙伴们应该都对git有一些了解,毕竟作为代码管理的神器,就算不是IT行业的小伙伴肯定也或多或少的听说过一些。今天就来和小伙伴们分享一下自己总结的常用命...

2023-10-07 12:10 guanshanw

工作7年收集到的git命令
工作7年收集到的git命令

概念git中的术语解释:仓库也叫版本库(repository)stage:暂存区,add后会存到暂存区,commit后提交到版本库git安装linux...

2023-10-07 12:10 guanshanw

取消回复欢迎 发表评论: