成为优秀的程序员是极其困难的,并且这个过程不可能一蹴而就。

我们不可能期待去种一些树,然后一夜间收获有着2000年树龄的红杉树,无论其需求有多大。

人格特点

一个人首先得是自学者来学习编程。仅仅是超过你能写出可用的小程序这个基本水平,你也需要很多年在实践中学习一切必要的技能。从没有人仅通过上课和读书就成为了一个卓越的程序员。这通常需要无数小时的编程实践。并且和普遍流行的观点相反,计算机专业不是教你编程的,而是传授理论的。

作为程序员,你必须得有几乎无尽的毅力来不断继续尝试调错、修复和开发。坚持做到这些的人是需要具备特殊本领的,尤其是当你看起来没有取得任何进步的时候。这是非常需要具备的一项人格特点,而没有这种层次的毅力,足以使大多数没有毅力的人远离程序员这一职业。

 你需要精通数学和善于解决问题。编程是解决各种各样的问题的。

 你需要有出色的短时记忆(和长时记忆)能力,这样你才能在大脑中像变戏法一样同时处理它们,而且你还要记得一个月前你写了什么。

 你需要对事物间如何相互关联的以及如何设计优良的架构有着深刻的了解。如果我在这个地方改动了一点,在其他地方可能会产生什么样的破坏呢?

 你需要对细节进行高度关注。"接近"这一词在编程中并不适用。在哪儿忘了一个分号?程序无法通过编译!错拼了一个函数名?你的程序可能在做和你期望中完全不同的事。

不具备以上这些特点,足以淘汰多数人。

Subject Matter 学科特点

 你需要对数据结构和类的概念有很深入的理解,并且知道何时以及如何使用它们。

 你需要熟知一些已经开发出来的函数库,这样才不至于去重复造轮子。

 你需要知道大量的基础(和高级)的算法,同样才不会去重复造轮子。

 通常你需要知道工作中的硬件的极限,这样你才可以做类似于恰当管理内存并且避免耗尽内存的事情,又或者合理利用内存来消除处理器内浪费的数据传输耗时从而加快处理过程。

到这里你可以写程序了。好极了!但是你知道什么是包的结构,TCP/IP、HTML、CSS、用户接口设计,或者数据库吗?程序不是孤立地运行的。

有大量的知识你需要知道,而且它们还在不断变化!除非是你的主要关注领域,否则你不可能真正精通它。你不可能是一个"周末程序员*"。

*译者注:意为程序员在周末也需要学习。

工作/生活环境

你需要有大块不被打断的时间,这样你才不至于在编程(和学习编程)时注意力分散。很多人的工作(和家庭)环境很难提供这一点。电话又响了?好的,你又得花15分钟来重拾你的思路了。

你经常不得不在忙忙碌碌中对一些权衡利弊做出决定。当然,你可以写个程序来处理每件事情,但是一个人又会有多久才将"0"作为输入呢*?除此之外,我们跟不上计划,更重要的是立马使得程序启动并且正确运行。

*译者注:这个问题旨在说明为每件事写程序意义不大,因为事情重复出现的概率很小。

基于这些,你认为是下一种热门的编程语言也会过时并且5年之后没人会用它。现在你正在使用下一门很酷的语言,而它很有可能5年之后并不会被用到。你不得不时常关注这些事。

还有管理层面的考虑

程序员经常被当做工厂工人一样对待。没有编程才能(而且很少有商业头脑)的人经常去负责一些项目。他们认为程序员就是机器中的零件。而真相是:程序员是工匠,要从项目中得到最好的结果,最明智的做法就是去问精通编程的人事情该如何去做!对于每个最终超出预算和落后于进度的项目,往往是逼迫程序员去花大量没有补偿而且不被欣赏的时间去发布一款设计和测试都很槽糕的产品。

优秀的程序员意识到他们不会比蹩脚的程序员得到更多报酬,因为管理上看不出区别,在此之上还要做出额外工作来弥补低劣程序员的不足。而且优秀程序员会说出事情并且试着去优化,这经常会令想要摆脱他们的经理生畏(这种常见的就业趋势在其他文章中也被讨论到)。

够了,这些就容易明白为什么很多人对程序员这个职业感到厌倦,尤其是有大量的其他机会时。而一些甚至是一般般的程序员,只要他们擅长和人交往,就有足够的本事在其他各种各样的工作中取得成功。程序员这个行业可以很容易换行,而转进来却不同。

优秀程序员貌似不太可能随随便便去找工作

找程序员容易,找优秀程序员不容易。蹩脚的程序员可能一直在找工作。而优秀的程序员,如果公司意识到他们是优秀的,就该做所有能做的去留着他们,所以他们可能找工作的情况就少多了。而且一旦他们出来找工作,他们就会很挑剔他们想要工作的地方,而这点也可以解释为何一些公司声称"没有什么好程序员了-我们能招到的都是蹩足的。"

记得有个地方说过,一个优秀的程序员的价值是一般程序员的好几倍(见《一些鲜为人知的编程真相》),而蹩足的程序员实际上还有副作用。对于一般的和蹩足的程序员来说要成为优秀程序员真的很难(就算不是不可能)——而且对于一般的初创企业来说,作为本该专注于快速开发推出产品的他们显然不值得这份投资。

[No000023]为何没有更多人从事程序员的工作?程序员常有,优秀程序员不常有!的更多相关文章

  1. 从零自学Java-2.初步理解Java程序使如何工作的

    1.学习Java应用程序是如何工作的 2.构成一个应用程序 3.向应用程序传递参数 4.学习Java程序是如何组织的 5.在应用程序中创建一个对象 程序Root:输出225的正平方根 package ...

  2. 关闭”xx程序已停止工作”提示窗口

    运行注册表编辑器,依次定位到HKEY_CURRENT_USER\Software\Microsoft\Windows\WindowsError Reporting,在右侧窗口中找到并双击打开Donts ...

  3. MIS的趋势必定是围绕机器取代人手,分工越来越细(小餐厅都支持微信自助点餐,结账时就打个折,相当于省了1、2个人手,SQL发明以后,程序员的工作更多了)

    最后,我还想简略的谈谈MIS及MIS快速开发工具的未来. MIS的趋势必定是围绕机器取代人手,分工越来越细.比如:现在有些小型的咖啡厅里的财务子系统就简单到不需要使用者有会计知识,相当于省了会计人手: ...

  4. 程序员需要经纪人吗?10x 最好的程序员其生产力相当于同行的 10 倍~

    原文地址 10x 起源于技术界一个流行的说法,即最好的程序员是超级明星,其生产力相当于同行的 10 倍: Google 园区以好玩的设施闻名:小憩舱.球坑.按摩.干洗.随便吃到饱的自助餐.(为了拍人才 ...

  5. 程序员的又一春,微信小程序带来的一个赚钱机遇

    微信小程序可能是原生的机遇,在程序员面对微信小程序的恐惧中说其实也是我们程序员创业的春天或者挣外快的一个机遇. 为什么这么说呢?且听我慢慢给你分析 成本角度 你想想,会ios开发的可能只会ios,会安 ...

  6. <转载> 优秀程序员必备的23条好习惯

    转自 优秀程序员必备的23条好习惯 编程是一项聪明人玩的游戏,它既是对智力的考验,也是对习惯的考验,智力的好坏取决于父母的基因,人们无从左右,但习惯的好坏却是可以不断培养.一项由美国芝加哥大学国家研究 ...

  7. 工作了3年的JAVA程序员应该具备什么技能?(zhuan)

    http://www.500d.me/article/5441.html **************************************** 来源:五百丁 作者:LZ2016-03-18 ...

  8. 程序员提高工作效率的15个技巧【Facebook】

    程序员提高工作效率的15个技巧[Facebook] 作者: habadog 日期: 2015 年 02 月 13 日发表评论 (0)查看评论 程序员提高工作效率的15个技巧[Facebook] 1,D ...

  9. 能让你成为更优秀程序员的10个C语言资源

    能让你成为更优秀程序员的10个C语言资源 本文由 伯乐在线 - archychu 翻译自 mycplus.欢迎加入 技术翻译小组.转载请参见文章末尾处的要求. 一些人觉得编程无聊,一些人觉得它很好玩. ...

随机推荐

  1. Android 创建自己的Camera App

    在sdk中找到/sdk/docs/guide/topics/media/camera.html#custom-camera,里面有详细的api参考 在清单文件中添加相应的权限: <uses-pe ...

  2. Android 隐式意图激活另外一个Actitity

    上篇文章<Android 显示意图激活另外一个Actitity>最后谈到显示意图激活另外一个Actitity会有一些局限性和弊端 本文介绍另一种方法:隐式意图激活另外一个Actitity ...

  3. ReactiveCocoa基础知识内容2

    引用网络上一些实例的代码,针对ReactiveCocoa的运用可以更加有帮助: 1:跟AF结合时的写法,返回RACSignal - (RACSignal *)fetchQuestionWithTag: ...

  4. xcode中info.plist文件相关问题

    <一>关于提示http://访问网络不安全的解决方法 提示错误: App Transport Security has blocked a cleartext HTTP (http://) ...

  5. C文件编译、链接指令

    通过mac终端 输入指令: cc -c 文件名.c 可以把C文件编译成.o文件(其实是2进制文件) 然后通过指令 cc 文件名.o 把.o文件链接C文件所需要的C语言的底层库,成为可以直接运行的lin ...

  6. 集群服务器 时间同步 - Chrony

    greenplum,openstack等云计算项目需要集群服务器部署,服务器之间的时间需要同步,但并不是所有机器可以 直接连外网,这时可以用Chrony工具解决. 解决方法是将其中一台设为时间服务器, ...

  7. VBS进行http请求及JSON数据的读取和生成

    背景: 近期帮一个公司做第三方API的二次封装,需要部署到该公司网站.所获取的是Json数据格式.由于该公司原系统采用的ASP+VBS技术方案,因此采用VBS对API进行请求.封装. 实现: 废话不多 ...

  8. 集合迭代器快速失败行为及CopyOnWriteArrayList

    以下内容基于jdk1.7.0_79源码: 什么是集合迭代器快速失败行为 以ArrayList为例,在多线程并发情况下,如果有一个线程在修改ArrayList集合的结构(插入.移除...),而另一个线程 ...

  9. BIEE使用技巧

    索引: 1.如何清除缓存 2.通过“编辑 SQL”取得前一天的日期 3.格式化日历框参数 4.根据传入的开始时间和结束时间取得事实表中的指标(用到了3中的技巧) 5.直接调用数据库函数 6.时间格式转 ...

  10. Linux正则表达式grep

    正则表达式是一种符号表示法,用于识别文本模式.Linux处理正则表达式的主要程序是grep.grep搜索与正则表达式匹配的行,并将结果输送至标准输出. 1. grep匹配模式 grep按下述方式接受选 ...