软件蚕食一切,未来属于程序员。所以人人都想当程序员。但是并不是每个人都能当好程序员。在你做出决定前还是先看看自己能不能当好程序员吧。

要记住的是,编程不是什么精英才能干的事情。

这个行业永远都缺人。所以除非你一点都不喜欢编程,或者也没有准备好看在钱的份上忍住这种不喜欢,否则都可以来编程。

优秀程序员的几个表现:

1、先进行实验是他们的本能反应


编译器和运行环境通常能比人更快地解释一个问题。一个优秀的程序猿在拿着问题去向别人寻求帮助之前,会自己试试看并判断方法是否有用,而不是直接找一个高级程序员问“我这么做有用吗?”。

2、对待代码和设计不要情绪化


代码就像纸巾:它有用你就用,没用了就扔掉。几乎我们所有人都认为代码复用( code-reuse )很重要,尽管确实如此,但是这也不意味着要像养孩子那样去对待代码。代码没有感觉也不会在乎,它们会像法兰克斯坦( Frankenstein )怪物那样攻击你。代码只是一堆字节,是一种责任( liability )。

3、对编程有激情


很多程序员干这一行只是为了挣钱,如果有更好的职业,他们会毫不犹豫的辞掉程序员的工作。而优秀的程序员热爱编程,喜欢钻研代码中的问题,他们感到能指挥电脑来帮助人们和自己解决现实生活中的问题是一种神奇的能力。当遇到问题无法解决时,他们会茶不思、饭不想,无法入睡。

4、君子善假于物


优秀的程序员知道如何能更高效的完成任务,如何更能有效的解决问题。当遇到问题时,不钻牛角尖,善于利用外部工具解决自己的问题,特别是能熟练应用搜索引擎。初级的程序员只会使用百度和百度知道搜索问题,而高级的程序员/优秀程序员使用谷歌和Stack Overflow或者MSDN forums这类网站寻找更优秀的答案。

5、不仅关心技术方面的知识,同时关注非技术方面的知识


不称职的程序员喜欢临时抱佛脚,只有在需要的时候才去学习。而优秀的程序员会去主动学习各种相关知识,对各种知识来源都有一种开放的心态,而不会象有的人那样固步自封。 而且,并不只局限在跟职业相关的技术类知识,同时他也会学习任何感到有趣的知识,比如沟通技巧等。

糟糕程序员的几个表现:

(1)无法对代码进行推理

对代码进行推理意味着能跟随代码的执行路径(“在脑子里运行程序”),同时清楚地知道代码执行的目标。

(2)补救措施

程序猿可以通过实践来克服这个缺点,如果 IDE 自带的调试器能单步调试,就把它作为助手使用。比如说在 Visual Studio 里,这就意味着要在问题区域的起始处打上断点,然后按下‘ F11 ’单步调试,查看变量的值(变化前后都要查看),直到你明白了代码正在做什么。如果你的目标环境不具备这种特性,那就找一个拥有这种特性的环境去实践。

这么做的目的是,让你做到不再需要调试器就能在脑子里跟随代码的流程,而且有足够的耐心去思考代码正在对整个程序的状态做什么。这么做的好处就是能够识别出冗余且无用的代码,而且不需要从头执行整个路径就能在当前代码中找出 bug。

(3)难以理解语言的编程模型

面向对象编程( Object Oriented Programming )就是一种语言模型,正如函数式编程( Functional programming )或声明式编程( Declarative programming )一样。它们每一个都和过程式或命令式编程有着显著不同,就像过程式编程明显不同于汇编或基于 GOTO 的编程。此外,虽然有很多语言都跟随同一个主流编程模型(如面向对象的编程),但它们都只介绍自己的改进,例如递推式构造列表( list comprehensions )、泛型( generics )、鸭式分类( duck-typing )等等。

(4)不使用版本控制

版本控制确实是一个非常有用的技术。它不仅可以跟踪解决方案中的每个文件,存储整个历史,还可以区分不同的版本到分支,知道什么时间是谁改变了什么(并且如果提交的信息足够详细,还可以知道原因)。

(5)使用糟糕的变量名

知道将variable1和variable2作为变量名有什么问题吗?变量应该根据它们做什么或者它们包含什么来命名。对了,Visual Studio有一些强大的重构工具,可以相对容易的让它们回到井然有序的状态。

(6)重复代码

非常推崇《Pragmatic Programmer》(《程序员修炼之道》)这本书,上面推荐的第一个秘诀就是不要重复代码。上面要求无论如何都不得重复代码,在我看来过于极端了。如果相同的代码需要重复4次,那么可以为这段代码创建一个函数,这将极大地改善你的代码。

糟糕程序员和优秀程序员的区别?相关推荐

  1. 普通程序员和优秀程序员的距离究竟有多大?

    " 一夜暴富不容易,但一夜间改变自己成为一名更优秀的程序员还是可以的. 今天小编给大家推荐一些行业内优质技术号,这些号的主人在技术圈深耕多年. 关注这些技术号可以让我们第一时间了解行业前沿技 ...

  2. 一般程序员 vs 优秀程序员,没有对比就没有伤害

    1. 对需求更加谨慎 优秀程序员:在有需求与任务时,会不断的询问需求与任务,并且多次确认想要的结果,再动手写代码. 一般程序员:接到任务就闷头写代码,反正做错了也是你们要求的,不是我的锅. 2. 编码 ...

  3. 卓越程序员和优秀程序员有哪些区别?

    能够在完美主义和实用主义之间找到平衡--卓越的程序员既能够做出熟练.快速但是劣迹斑斑的解决方案,也能用简洁.优雅并且健壮的方法解决问题,他们能够明智地选择适合于所给问题的解决方法.一些稍欠火候的程序员 ...

  4. 优秀程序员因何而优秀?

    这些年我曾和很多程序员一起工作,他们之中的一些人非常厉害,而另一些人显得平庸.不久前因为和一些技术非常熟练的程序员工作感觉很愉快,我花了一些时间在考虑我佩服他们什么呢?什么原因让优秀的程序员那么优秀, ...

  5. 03 _ 优秀程序员的六个关键特质

    什么样的程序员才是优秀的程序员呢? 如果去问一个程序员,得到的答案有可能是,"写的一手好代码,做过几个大项目,设计.编程样样不在话下".如果去问程序员的同学,得到的答案有可能是,& ...

  6. 优秀程序猿因何而优秀?

    这些年我曾和非常多程序猿一起工作,他们之中的一些人非常厉害,而还有一些人显得平凡. 不久前由于和一些技术非常熟练的程序猿工作感觉非常愉快,我花了一些时间在考虑我佩服他们什么呢?什么原因让优秀的程序猿那 ...

  7. 写给程序员的秘籍:你跟优秀程序员的差距,其实就在这几个方面!

    软件蚕食一切,未来属于程序员.所以人人都想当程序员.但是并不是每个人都能当好程序员.在你做出决定前还是先看看自己能不能当好程序员吧. 要记住的是,编程不是什么精英才能干的事情. 这个行业永远都缺人.所 ...

  8. 【译】成为优秀程序员(和人类)的101个技巧

    1.擅长谷歌搜索 作为一个编码者,意味着你需要搜索你问题的答案.通过有效地使用谷歌,你将节省很多开发时间. 2.承诺和交付 最好让你的团队知道一项任务将花费三周的时间,并以两种方式交付的事情.通过给予 ...

  9. 纯干货:优秀程序员和普通程序员的差距就在这7个关键点

    最近好几个读者问:如何成为牛逼的程序员?编码能力如何成长.回答完后,有些心得也给大家分享下. 其实程序员最关键的技能远不止编码能力,架构思维.底层知识的深度等等,同样很重要. 程序员这个行业,是一个区 ...

最新文章

  1. C++之头文件与源文件
  2. 无人驾驶急需解决:规划控制和传感器价格高两大问题
  3. Qt Creator添加3D视图
  4. 零基础学前端开发之CSS基础
  5. 【计算几何】【预处理】【枚举】Urozero Autumn Training Camp 2016 Day 5: NWERC-2016 Problem K. Kiwi Trees...
  6. SqlServer自定义排序
  7. 7.5 GRASP原则五:高内聚 High Cohesion
  8. equals null报错吗_轻轻松松教你搞定Java中的==和equals
  9. Java集合--LinkedList
  10. matlab循环取出矩阵的某一行并标示上A1 A2 A3
  11. spring扩展点六:监听spring容器刷新事件
  12. mysql 多表联合查询
  13. 如何恢复磁盘中被删除的数据
  14. 返利网app android版
  15. 魔性计时器html,PDD西卡脸抽不断 拜年秀播出倒计时1天
  16. lgg7深度详细参数_深度学习显卡参数详细对比
  17. 网页怎么与服务器进行连接,如何实现网页与服务器的连接
  18. C++之模板类模板函数
  19. 强化学习——初探强化学习
  20. 访问者模式(JAVA)

热门文章

  1. 智慧酒店RCU客控系统布线放线事项
  2. linux ubuntu 关闭防火墙命令,LINUX关闭防火墙的方法
  3. 神州战神 z7m sl7 EFI 下载
  4. 关于神舟战神z7m笔记本使用U盘装载Ubuntu系统的一点心得
  5. webform MySQL_asp.net webform使用MySQL数据库
  6. python-pycrypto的完全版安装
  7. 中国网络直播行业创新前景调研及投资竞争力分析报告2021-2027年
  8. macOS升级到10.15.1开机后CPU温度稳定保持在95度发烫(macs测试)
  9. ssh默认端口修改 Centos 6.6 正式版_32位
  10. 《Qt-OpenGL系列编程》课程学习记录(1):相关概念、VAO、VBO、绘制三角形、使用OpenGL原生方式编译链接着色器程序