[No000023]为何没有更多人从事程序员的工作?程序员常有,优秀程序员不常有!
成为优秀的程序员是极其困难的,并且这个过程不可能一蹴而就。
我们不可能期待去种一些树,然后一夜间收获有着2000年树龄的红杉树,无论其需求有多大。
人格特点
一个人首先得是自学者来学习编程。仅仅是超过你能写出可用的小程序这个基本水平,你也需要很多年在实践中学习一切必要的技能。从没有人仅通过上课和读书就成为了一个卓越的程序员。这通常需要无数小时的编程实践。并且和普遍流行的观点相反,计算机专业不是教你编程的,而是传授理论的。
作为程序员,你必须得有几乎无尽的毅力来不断继续尝试调错、修复和开发。坚持做到这些的人是需要具备特殊本领的,尤其是当你看起来没有取得任何进步的时候。这是非常需要具备的一项人格特点,而没有这种层次的毅力,足以使大多数没有毅力的人远离程序员这一职业。
你需要精通数学和善于解决问题。编程是解决各种各样的问题的。
你需要有出色的短时记忆(和长时记忆)能力,这样你才能在大脑中像变戏法一样同时处理它们,而且你还要记得一个月前你写了什么。
你需要对事物间如何相互关联的以及如何设计优良的架构有着深刻的了解。如果我在这个地方改动了一点,在其他地方可能会产生什么样的破坏呢?
你需要对细节进行高度关注。"接近"这一词在编程中并不适用。在哪儿忘了一个分号?程序无法通过编译!错拼了一个函数名?你的程序可能在做和你期望中完全不同的事。
不具备以上这些特点,足以淘汰多数人。
Subject Matter 学科特点
你需要对数据结构和类的概念有很深入的理解,并且知道何时以及如何使用它们。
你需要熟知一些已经开发出来的函数库,这样才不至于去重复造轮子。
你需要知道大量的基础(和高级)的算法,同样才不会去重复造轮子。
通常你需要知道工作中的硬件的极限,这样你才可以做类似于恰当管理内存并且避免耗尽内存的事情,又或者合理利用内存来消除处理器内浪费的数据传输耗时从而加快处理过程。
到这里你可以写程序了。好极了!但是你知道什么是包的结构,TCP/IP、HTML、CSS、用户接口设计,或者数据库吗?程序不是孤立地运行的。
有大量的知识你需要知道,而且它们还在不断变化!除非是你的主要关注领域,否则你不可能真正精通它。你不可能是一个"周末程序员*"。
*译者注:意为程序员在周末也需要学习。
工作/生活环境
你需要有大块不被打断的时间,这样你才不至于在编程(和学习编程)时注意力分散。很多人的工作(和家庭)环境很难提供这一点。电话又响了?好的,你又得花15分钟来重拾你的思路了。
你经常不得不在忙忙碌碌中对一些权衡利弊做出决定。当然,你可以写个程序来处理每件事情,但是一个人又会有多久才将"0"作为输入呢*?除此之外,我们跟不上计划,更重要的是立马使得程序启动并且正确运行。
*译者注:这个问题旨在说明为每件事写程序意义不大,因为事情重复出现的概率很小。
基于这些,你认为是下一种热门的编程语言也会过时并且5年之后没人会用它。现在你正在使用下一门很酷的语言,而它很有可能5年之后并不会被用到。你不得不时常关注这些事。
还有管理层面的考虑
程序员经常被当做工厂工人一样对待。没有编程才能(而且很少有商业头脑)的人经常去负责一些项目。他们认为程序员就是机器中的零件。而真相是:程序员是工匠,要从项目中得到最好的结果,最明智的做法就是去问精通编程的人事情该如何去做!对于每个最终超出预算和落后于进度的项目,往往是逼迫程序员去花大量没有补偿而且不被欣赏的时间去发布一款设计和测试都很槽糕的产品。
优秀的程序员意识到他们不会比蹩脚的程序员得到更多报酬,因为管理上看不出区别,在此之上还要做出额外工作来弥补低劣程序员的不足。而且优秀程序员会说出事情并且试着去优化,这经常会令想要摆脱他们的经理生畏(这种常见的就业趋势在其他文章中也被讨论到)。
够了,这些就容易明白为什么很多人对程序员这个职业感到厌倦,尤其是有大量的其他机会时。而一些甚至是一般般的程序员,只要他们擅长和人交往,就有足够的本事在其他各种各样的工作中取得成功。程序员这个行业可以很容易换行,而转进来却不同。
优秀程序员貌似不太可能随随便便去找工作
找程序员容易,找优秀程序员不容易。蹩脚的程序员可能一直在找工作。而优秀的程序员,如果公司意识到他们是优秀的,就该做所有能做的去留着他们,所以他们可能找工作的情况就少多了。而且一旦他们出来找工作,他们就会很挑剔他们想要工作的地方,而这点也可以解释为何一些公司声称"没有什么好程序员了-我们能招到的都是蹩足的。"
记得有个地方说过,一个优秀的程序员的价值是一般程序员的好几倍(见《一些鲜为人知的编程真相》),而蹩足的程序员实际上还有副作用。对于一般的和蹩足的程序员来说要成为优秀程序员真的很难(就算不是不可能)——而且对于一般的初创企业来说,作为本该专注于快速开发推出产品的他们显然不值得这份投资。
[No000023]为何没有更多人从事程序员的工作?程序员常有,优秀程序员不常有!的更多相关文章
- 从零自学Java-2.初步理解Java程序使如何工作的
1.学习Java应用程序是如何工作的 2.构成一个应用程序 3.向应用程序传递参数 4.学习Java程序是如何组织的 5.在应用程序中创建一个对象 程序Root:输出225的正平方根 package ...
- 关闭”xx程序已停止工作”提示窗口
运行注册表编辑器,依次定位到HKEY_CURRENT_USER\Software\Microsoft\Windows\WindowsError Reporting,在右侧窗口中找到并双击打开Donts ...
- MIS的趋势必定是围绕机器取代人手,分工越来越细(小餐厅都支持微信自助点餐,结账时就打个折,相当于省了1、2个人手,SQL发明以后,程序员的工作更多了)
最后,我还想简略的谈谈MIS及MIS快速开发工具的未来. MIS的趋势必定是围绕机器取代人手,分工越来越细.比如:现在有些小型的咖啡厅里的财务子系统就简单到不需要使用者有会计知识,相当于省了会计人手: ...
- 程序员需要经纪人吗?10x 最好的程序员其生产力相当于同行的 10 倍~
原文地址 10x 起源于技术界一个流行的说法,即最好的程序员是超级明星,其生产力相当于同行的 10 倍: Google 园区以好玩的设施闻名:小憩舱.球坑.按摩.干洗.随便吃到饱的自助餐.(为了拍人才 ...
- 程序员的又一春,微信小程序带来的一个赚钱机遇
微信小程序可能是原生的机遇,在程序员面对微信小程序的恐惧中说其实也是我们程序员创业的春天或者挣外快的一个机遇. 为什么这么说呢?且听我慢慢给你分析 成本角度 你想想,会ios开发的可能只会ios,会安 ...
- <转载> 优秀程序员必备的23条好习惯
转自 优秀程序员必备的23条好习惯 编程是一项聪明人玩的游戏,它既是对智力的考验,也是对习惯的考验,智力的好坏取决于父母的基因,人们无从左右,但习惯的好坏却是可以不断培养.一项由美国芝加哥大学国家研究 ...
- 工作了3年的JAVA程序员应该具备什么技能?(zhuan)
http://www.500d.me/article/5441.html **************************************** 来源:五百丁 作者:LZ2016-03-18 ...
- 程序员提高工作效率的15个技巧【Facebook】
程序员提高工作效率的15个技巧[Facebook] 作者: habadog 日期: 2015 年 02 月 13 日发表评论 (0)查看评论 程序员提高工作效率的15个技巧[Facebook] 1,D ...
- 能让你成为更优秀程序员的10个C语言资源
能让你成为更优秀程序员的10个C语言资源 本文由 伯乐在线 - archychu 翻译自 mycplus.欢迎加入 技术翻译小组.转载请参见文章末尾处的要求. 一些人觉得编程无聊,一些人觉得它很好玩. ...
随机推荐
- 利用IIS导出,导入快速部署 web站点
部署负载均衡站点的时候会创建多个站点拷贝.用脚本可以提高效率,并且减少错误 1 以管理员身份运行CMD 2 Cd C:\Windows\System32\inetsrv 3 导出指定的应用程序池 ap ...
- SharePoint 2013 WebPart 管理工具分享[开源]
前言 之前做门户的时候,经常要导入导出WebPart,非常的频繁,然后就需要一个个导出,然后一个个导入,非常繁琐:闲暇之际,就考虑能不能自动化一下,把这个功能写成一个工具,可以方便的管理WebPart ...
- SharePoint 2013 表单认证使用ASP.Net配置工具添加用户
前 言 上面一篇博客,我们了解到如何为SharePoint 2013配置表单身份认证,但是添加用户是一个麻烦事儿:其实,我们还可以用Asp.Net的配置工具,为SharePoint 2013添加表单用 ...
- Python学习01 Hello World
Python学习之Hello World 准备工作 去官网http://www.python.org/ 下载python的安装包: http://www.python.org/download/ 当前 ...
- System.currentTimeMillis()与SystemClock.uptimeMillis()
1.System.currentTimeMillis()获取的是系统的时间,可以使用SystemClock.setCurrentTimeMillis(long millis)进行设置.如果使用Syst ...
- .frame类库简单介绍与使用
.a静态库是Unix推出的,几乎所有平台都可以使用: .framework是Apple推出的,是对.a静态库的封装,方便使用. 1.新建framework类库项目 2.生成的类库中,自定义的源头文件需 ...
- 【C语言】C语言static和extern区别
目录: [static] [extern] 1.static · 定义一个内部函数/变量. · 声明一个内部函数/变量. 2.extern · 定义一个外部函数/变量. · 声明一个外部函数/变量. ...
- mac ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib /mysql/mysql.sock' (111)
之前装了mysql,今天打开mysql的时候报了个Can't connect to local MySQL server through socket '/var/lib /mysql/mysql.s ...
- 【Android】中兴ZTE sdcard路径的问题
测试机: ZTE U950 现象: 用Environment.getExternalStorageDirectory()取到的路径是/mnt/sdcard 真相: /mnt/sdcard/是一个空文件 ...
- centos7 ssh 设置key认证
vi /etc/ssh/sshd_config 查找RSAAuthentication.StrictModes.PubkeyAuthentication.AuthorizedKeysFile把所在行修 ...