`
langgufu
  • 浏览: 2307122 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

程序员10个糟糕的特征[转]

阅读更多
这里,我们主要讨论十个糟糕程序员的特征,主要是需要让我们去避免和小心的。
1) 情绪化的思维
如果你开始使用不同颜色的眼光来看待这个世界的话,那么你可能会成为一个很糟糕的程序员。情绪化的思维或态度很有可能会把自己变成一个怪物。相信你经常可以看到很多很糟糕的程序会使用下面的这些语句:
我的程序不可能有这种问题。
Java就是shit。
我最恨的就是使用UML做设计。
需求怎么老在变,没办干了。
受不了这些人,他们到底懂不懂啊。
…… ……
这些带着情绪化的思维和态度,不但可以让你成为一个很糟糕的程序员,甚至可以影响你的前途。因为,情绪化通常都是魔鬼,会让你做出错误的判断和决定,错误码率的判断和决定直接决定了你的人生。

2) 怀疑别人
糟糕的程序总是说:“我的代码一定是正确的,我怀疑编译器有问题”,“我这应该没有问题吧,STL库怎么这么难用啊”。我曾经见过有程序员这样使用STL类:map ,当他发现这样放入字符串后却取不出来,觉得那是STL库的BUG,然后自己写了一个map!我的天啊!
某些时候,过早的下结论是一个很不好的习惯,任何事情都有其原因,只有知道了原因,你才能知道是谁的问题。一般来说,总是自己出的问题。

3) 过多关注实现,陷入问题细节
有些时候,当我们面对一个问题或是一个需求的时候,糟糕的程序员总是会马上去找一个解决方案或是实现,这是一个很不好的习惯。设计模式告诉我们,“喜欢接口,而不是实现”就是告诉我们,认清问题的本质和特性要比如何实现更重要。
对于一个客户的问题来说,首先应该想到的是如何先让用户正常工作,如果恢复正在“流血”的系统,而不是把用户放在一边而去分析问题的原因和解决方案。
对于解决一个bug来说,重现bug,了解原来程序的意图是首先重要的事,而不是马上去修改代码,否则必然会引入更多的BUG。
对于一个需求来说,我们需要了解的需求后面的商业背景,use case和真实意图,而不是去讨论如果实现。只有了解了用户的真实意图,实现使用,你才能真正如果去做设计。
糟糕的程序总是容易陷入细节,争论于如何实现,问题的根本原因,而忽略了比这些更重要的东西。只有看懂了整个地图,你才知道要怎么去走。

4) 使用并不熟悉的代码
糟糕的程序员最好的朋友是 Ctrl-C 和 Ctrl-V ,有些时候,他们并不知道代码的确切含义,就开始使用它,有证据表明,由拷贝粘贴引发的bug点了绝大多数。因为,代码总是只能在特定的环境下才能正常地工作,如果代码的上下文改变了,很有可能让使得代码产生很多你不知道的行为,当你连代码都控制不住了,你还能编出什么好的程序呢?

5) 拼命工作而不是聪明的工作
对于糟糕的程序员,我们总是能看到他们拼命地修正他们的bug,总是花非常多时间并重复地完成某一工作。而好的程序可能会花双倍的时间来准备一个有效的开发环境,工具,以及在开发的时候花双倍甚至10倍的时间来避免一些错误。好的程序员总是会利用一切工具或手段来让自己的工作变得更有效率,总是为在开发的时候尽可能得不出错。后期出错的成本将会是巨大的,而且那时改正错误的压力也是巨大的。所以,糟糕的程序通常会让自己进入一种恶性循环,他们看上去总是疲惫的,总是很辛苦的,所以更没有时间来改善,越没有时间来改善,就有越多的问题。所以,拼命工作有些时候可能表明你不是一个好的程序员。

6) 总是在等待、找借口以及抱怨
当需求不明确的时候,当环境不是很满意的时候,他们总是在等待别人的改善。出现问题的时候,总是在找借口,或是抱怨这也不好,那也不好,所以自己当然就没有做好。糟糕的程序员总是希望自己的所处的环境是最好的,有明确的需求,有非常不错的开发环境,有足够的时间,有不错的QA,还有很强的team leader,以及体贴自己的经理,有足够的培训,有良好的讨论,有别人强有力的支持……,这是一种“饭来张口,衣来伸手”的态度,这个世界本来就不完美,一个团队需要所有人去奋斗,况且,如果什么都变得完美了,那么,你的价值何在吗?driving instead of waiting, leading instead of following.

7) 滋生办公室政治
有句话叫“丑女多作怪”,意思是说如果一个自己没有真实的能力的话,那么他一定会在其它方面作文章。糟糕的程序员也是这样,如果他们程序编不好的话,比不过别人的话,他们通常会去靠指责别人,推脱责任,或是排挤有能力的人,等等不正常的手段来保全自己。所以,糟糕的程序通常伴随着办公室政治。

8 ) 说得多做得少
糟糕的程序员总是觉得自己什么都懂,他们并不会觉得自己的认识和知识都是有限的。这就是所谓的夸夸其谈,是的,什么都做不好的程序员能靠什么混日子呢?就是吹啊吹啊。
另一个表现方式是他们在评论起别人的程序或是设计,总是能挑出一堆毛病,但自己的程序写得也很烂。总是批评抱怨,而没有任何有建设性的意见,或是提出可行的解决方案。
这些糟糕的程序员,总是喜欢以批评别人的程序而达到显示自己的优秀。

9) 顽固
当你给出一打证据说明那里有一个更好的方案,那里有一个更好的方向的时候,他们总是会倔强的认为他们自己的做法才是最好的。一个我亲身经历的事例就是,当我看到一个新来的程序在解决一个问题的时候走到了错误的方向上时,我提醒他,你可能走错了,应该是另外那边,并且我证明了给他看还有一个更为简单的方法,有。然而,这位程序员却告诉我,“那是我的方法,我一定要把之走下去,不然我会非常难受”,于是,在三天后的代码评审中,在经过顽固地解释以及一片质疑声中,他不得不采用了我最先告诉他的那个方法。
这些程序员,从来不会去想,也不会去找人讨论还有没有更好的方法,而是坚持自己的想法,那怕是条死路都一往直前,不撞南墙永不回头。

10) 写“聪明”的代码他们写出来的代码需要别的同事查看程序语言参考手册,或是其程序的逻辑或是风格看上去相当时髦,但却非常难读。代码本应该简洁和易读,而他们喜欢在代码中表现自己,并尝试另类的东西,以显示自己的才气。是的,只有能力有问题的程序员才需要借助这样的显示。
记得以前的一个经历,一位英语很不错的程序员加入公司,本来对我们这些英语二把刀来说,我们喜欢看到的是简单和易读的英文文档,然后,那位老兄为了展示他的英语如何牛,使用了很多GRE中比较生僻的短语和词汇。让大家阅读得很艰苦。最有讽刺意味的是,有一位native的美国人后来在其邮件中询问他某个单词的意思。呵呵
分享到:
评论

相关推荐

    程序员的八重境界

    通过以上对《程序员的八重境界》的解读,我们可以发现,无论处于哪个阶段,每个程序员都应该清楚自己的定位和目标,并为之不懈努力。更重要的是,每个人都应该找到自己真正热爱的东西,并为之付出努力。在这个过程中...

    程序员考试大纲 程序员考试大纲

    1. 数制及其转换:二进制、十进制、十六进制等常用数制及其相互转换。 2. 数据的表示:数的表示(原码、反码、补码表示)、非数值表示(字符和汉字的机内表示、声音和图像的机内表示)。 3. 算术运算和逻辑运算:...

    C++黑马程序员学习资料

    C++黑马程序员学习资料,附赠《InterviewGuide第四版By阿秀》、《LeetCode刷题手册》、《背包问题九讲》、《算法图解》pdf版本,三个基础课程文档手册及三个实验项目,由简到繁分别为《通讯录管理系统》、《职工管理...

    程序员数学3 的源代码

    《程序员数学3》是一本专为程序员设计的数学学习书籍,其主要目的是帮助读者理解并应用数学在实际编程中的重要性。这本书强调易懂性,通过简洁明了的讲解方式,使得复杂的数学概念变得平易近人。尤其适合那些希望...

    《程序员教程》 电子书下载

    本书涵盖了数据挖掘、商业智能、商业分析和行业应用等多个重要领域,是提升程序员综合素质的重要资源。 在数据挖掘部分,书中可能会介绍基本的挖掘技术和工具,如SQL查询语言,用于从大型数据库中提取信息;Python...

    程序员的数学系列.pptx

    还介绍了特征值、特征向量和矩阵对角化的概念。这些知识可以帮助程序员在处理矩阵和向量运算时更高效地进行计算,并且对于理解线性规划和优化算法也非常有用。 离散数学是研究离散对象及其关系的数学分支。本书首先...

    10丨软件设计的目的:糟糕的程序员比优秀的程序员差在哪里?.pdf

    3. 糟糕设计的特征: - 僵化性:代码间耦合度过高,导致任何改动都需要大规模修改,延长开发周期。 - 脆弱性:微小改动可能导致意想不到的错误或崩溃,关联性不易理解。 - 牢固性:软件难以拆分和复用,阻碍模块...

    C程序员成长攻略

    最后第10章总结了C程序员的发展历程,分析现状,并展望未来。 本书适合所有想要提高C编程能力的人士,无论是初学者还是有一定经验的程序员,或者是系统分析员、系统测试员和企业IT经理等专业人士。此外,书中所有的...

    程序员的思维修炼

    能够抽取问题的本质特征,忽略无关紧要的细节,可以帮助程序员编写更清晰、可维护的代码。 3. 系统思维:系统思维是理解整个系统以及其子系统是如何工作的能力。程序员需要能够理解软件是如何在不同的层次上交互的...

    程序员常用英语词汇.pdf

    44. attribute: 特性、属性,对象或类所具有的特征。 45. authenticationservice: 验证服务,用于验证用户身份的服务。 46. authorization: 授权,给予用户使用资源或执行操作的权限。 B1. background: 背景、后台...

    《写给程序员的数据挖掘实践指南》源代码

    本资源提供的源代码可能涵盖了数据预处理、特征选择、建模、模型评估等多个阶段,帮助程序员将理论知识转化为实际操作能力。 1. 数据预处理:在进行数据挖掘之前,通常需要对原始数据进行清洗和转换。这包括处理...

    程序员英语词汇1700词.pdf

    10. **list** - 列表:包含多个元素的有序集合。 11. **by** - 凭借:在编程中常表示依据或通过某种方式。 12. **press** - 按:如按下键盘上的键。 13. **with** - 使用:配合某个工具或资源进行操作。 14. **...

    新程序员考试大纲新程序员考试大纲

    * 数制及其转换(二进制、十进制、十六进制等) * 数据的表示(数的表示、非数值表示、校验方法和校验码) * 算术运算和逻辑运算(二进制数的运算方法、逻辑代数的基本运算和逻辑表达式的化简) * 数学应用(常用...

    程序员的数学1,2,3

    《程序员的数学1,2,3》是一套专为编程人员设计的数学学习书籍,旨在帮助程序员提升数学素养,理解并解决实际工作中遇到的数学问题。这套书包含了三本分册,分别是《程序员的数学1:数学思维》、《程序员的数学2:...

    高效程序猿的7个共同特征

    Justin James在文章中提出了高效程序员所应具备的七个共同特征,这些特征涵盖了学习态度、工作方法、解决问题的技巧、职业热情、团队合作精神、对技术的深入理解以及个人的进取心。 首先,高效程序员通常具有主动...

    2020程序员人群洞察报告.pdf

    程序员主要由85后构成,以男性为主,占比超过90%,呈现出年轻化和高学历的特征,大部分拥有本科及以上学历。 在经济能力方面,程序员的月薪普遍过万,有超过七成的人拥有房产,购车比例也高于平均水平,他们在一线...

    程序员必学数学.zip

    "程序员必学数学.zip"这个压缩包文件聚焦于两个关键的数学领域:线性代数和概率学,这对于程序员的成长和技能提升是至关重要的。 首先,线性代数是计算机科学中的基石,特别是在计算机图形学、机器学习、数据分析...

    程序员必须掌握的600个英语单词

    程序员必须掌握的英语单词 在编程和计算机领域中,有很多专业术语和英文单词。下面我们将对这些单词进行解释和说明,以便程序员更好地掌握和理解。 1. 应用程式(application):指的是计算机程序或软件,用于执行...

Global site tag (gtag.js) - Google Analytics