[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.欢迎加入 技术翻译小组.转载请参见文章末尾处的要求. 一些人觉得编程无聊,一些人觉得它很好玩. ...
随机推荐
- 直接拿来用!十大Material Design开源项目
来自:http://www.csdn.net/article/2014-11-21/2822753-material-design-libs/1 介于拟物和扁平之间的Material Design自面 ...
- Android悬浮窗实现 使用WindowManager
Android悬浮窗实现 使用WindowManager WindowManager介绍 通过Context.getSystemService(Context.WINDOW_SERVICE)可以获得 ...
- Java File类总结和FileUtils类
Java File类总结和FileUtils类 文件存在和类型判断 创建出File类的对象并不代表该路径下有此文件或目录. 用public boolean exists()可以判断文件是否存在. Fi ...
- XMPP学习——3、XMPP协议学习补充
流基础 两个基本概念,使得XMPP实体之间的小的结构化信息有效载荷能快速地进行异步交换:XML流和XML节.这些术语的定义如下. XML流的定义: XML流是一个容器,用于任何两个实体通过网络进行XM ...
- Android Handler机制(四)---Handler源码解析
Handler的主要用途有两个:(1).在将来的某个时刻执行消息或一个runnable,(2)把消息发送到消息队列. 主要依靠post(Runnable).postAtTime(Runnable, l ...
- Android客户端与服务器
就是普通的服务器端编程,还不用写界面,其实还比服务器编程简单一些.跟J2EE一样的服务器,你android这一方面只要用json或者gson直接拿数据,后台的话用tomcat接受请求操作数据,功能不复 ...
- iOS 音乐
iOS 音乐 这篇博客介绍的是较长的音频播放-音乐... 有关音效的介绍可以点击下面的连接进入... iOS 音效 首先导入框架:AVFoundation.framework 导入框架后我们在需要使用 ...
- Android按键事件处理流程 -- KeyEvent
刚接触Android开发的时候,对touch.key事件的处理总是一知半解,一会是Activity里的方法,一会是各种View 中的,自己始终不清楚到底哪个在先哪个在后,总之对整个处理流程没能很好的把 ...
- Android开发框架--AndroidAnnotations(一)
annotation:注解 什么是框架 框架是基石 android开发中哪些内容可以做成框架呢 网络模块 图片缓存模块 数据库模块 UI基础模块 开发框架给我们带来了哪些好处 提升开发效率 代码简洁 ...
- Atitit.论图片类型 垃圾文件的识别与清理 流程与设计原则 与api概要设计 v2 pbj
Atitit.论图片类型 垃圾文件的识别与清理 流程与设计原则 与api概要设计 v2 pbj 1. 俩个问题::识别垃圾文件与清理策略1 2. 如何识别垃圾图片1 2.1. 体积过小文件<1 ...