当前位置: 首页 > 编程日记 > 正文

关于年长程序员的5个误传

原文链接:http://kb.cnblogs.com/page/150932/

英文原文:Five Pervasive Myths About Older Software Developers

最近我刚过完40岁生日,一个朋友向我开玩笑地说“嘿,你已经老了,不适合做程序员了!”我虽然附和地笑了笑,但是却有所感触。在我们这行,年龄歧视已经司空见惯。COBOL那些人在若干年前就已经遇到了这个问题,随着Java的流行和上升,我们这些写Java程序的人嘲笑他们留下的代码以及面对新技术时的顽固不化。

现在同样的事情降临到我的头上。也许你也是。即使现在还没有,很快就会轮到你的。现在你还笑得出来吗?是的,我是这么认为的。

来自:CRE Taulbee调查[译注],2007-2008,5月9日发布

  译注:Taulbee调查:CRA 计算机研究组织针对北美计算机行业(计算机科学CS、计算机工程CE)从业人员就业、工作及薪资的调查,调查依据学位、性别等进行分类。往年信息可以参见CRA网站。


来自:CRE Taulbee报告

我们这行在很多方面都有年龄歧视。我们热衷热门的新技术,用从未听说过的速度学习新东西,疯狂地工作,将产品推向市场,这些在我们这行总被认为是年轻人干的事情。我说过年轻的工人会更便宜对吧?真的便宜很多。但是计算机学位趋势调查并不支持我们的经理可以永远拥有大量便宜的工人随意指挥。事实上,所有的数据都指向一个结论:在几乎10年的时间里,学习计算机科学(CS)学生数量略有下降或者与往年持平。甚至于如 Jeff Atwood 所言,雇佣程序员的选择也选来越少。你的下一个项目可能需要雇人来完成了,与此同时外包面临强烈抵制,Egon,你会向谁寻求帮助?

如果你以为能够避免软件开发的“灰质”问题,请三思而行。在IT行业里,有一些关于程序开发老手的误传根深蒂固,莫名其妙地让年长的、有经验的工人在行业中处于不利的境地。这些误传大部分都是无稽之谈,说什么每个人过了40岁以后都会不同程度地因为年纪太大而变得愚蠢。让我们一个个地击穿这些误传的真相。

  误传1:年长程序员比新手要价更高,因而年轻的开发人员更受欢迎。

  事实:有经验的开发人员之所以被打上“昂贵”的标签,是因为在任何软件公司里员工的薪水永远是最大的支出。事实上,年轻就意味着廉价。但是,尽管年轻但没有什么经验的开发人员能够帮你节省掉一些预算,但是如果你的团队里只有年轻人,长远来看你要付出的会更多。年轻的开发人员并没有经历过失败的历练。他们甚至还没有足够的时间来经历失败。猜猜他们会用谁的钱来教学费?你的。错过截止时间并且交付没有完工的项目会给你带来多大的损失?请再好好想想吧。

的确,年长程序员比年轻人的工资要高一些。但是你多花的钱究竟花到哪里了呢?一个经验丰富的软件开发人员,你付出的薪水买到的是他从过去项目开发中学到的经验与教训。这些就是在你成为他的经理期间需要付出的昂贵的学费。但是如果你招入一名有经验的工人,你就不会重复项目管理和软件开发过程中常犯的错误。也就意味着在年底的考核中你会因为雇佣了会做事的员工而得到良好的评价。

  误传2:年长程序员受到他们已有知识的限制,灵活性和学习新技术的能力不及年轻的开发人员。

  事实:事实上正是因为他们过去的经验,年长程序员能够在更深入的层次转向新技术、框架以及系统。例如,如果了解C/C++编写的GUI框架,你会对消息传递、事件处理、MVC模式有概念,而这些知识能够帮助你在设计系统时把表示层和底层的逻辑进行分离。

当你第一次接触GUI框架的时候,除了学习代码的文法,你还需要掌握示例以及相关的代码库,不仅如此,与之相关的所有概念也都需要了解。当第二次、第三次或者以后的更多次实现GUI框架时,你会发现在代码文法之外更深的地方它们有着相似之处。你甚至可能会注意到,新的GUI框架会克服以前你花费很大力气才能解决的潜在限制。这些领悟会以你不能直接衡量的方式提高生产率。

  误传3:年长程序员有家庭以及其他因素的影响,因此不能承担艰苦的软件开发任务(解读:长时间、艰苦地工作),而年轻人没有这些负担。

  事实: 公平地讲,有经验的软件开发人员较少会长时间、艰苦地工作,因为他们从实践(失败)中学到连续数月每周工作80个小时最终会到达生产率的极限。这种情况会让你精疲力尽,我敢打赌任何曾经历过这种情况的人都不想再尝试。即使有这样的倾向,所谓的“家庭负担”是不存在的。

有经验的高效的软件工程师是无情的时间管理者,那些已经有家庭的工程师会更积极地在分配的时间内完成工作。他们也许会参加舞会或者足球赛,但是他们会把这些时间安排在业余时间,在每个礼拜的40个小时工作中他们会高度专注在自己的工作上。已经成家的优秀软件工程师必须高效地管理自己的私人时间,否则他们很快就会被蜂拥而来的工作埋掉。

  传说4:年长程序员不如年轻人思路敏捷。

  事实:时光的确会对大脑产生影响,有很多证据显示年长的工人在思考速度上会稍逊一筹。但是思路敏捷只是判断标准的一部分。思考得更快并不总是代表考虑得更好。对于判断力情况又是如何呢?有句老话:好的判断来自经验,而经验则是从错误的判断得来。

想想他们具备比年轻人更多的见识、完成的工作以及经历的成功和失败,就知道以思维不再敏捷作为不雇佣年长的软件工程师是一个糟糕的借口。有经验的开发人员可以从大量的项目中汲取经验来为今天的项目避免错误的决定。年轻的开发人员有很多重要的新点子,但是却没有经过测试和验证。同时具备这两个方面会给你的团队带来巨大的价值。

  误传5:年长程序员对于工作感到厌倦并且不屑一顾,因此在公司不如年轻人受欢迎。年轻的开发人员比他们对工作更有热情。

  事实:说这些话的人可能不喜欢自己的观点被别人批评,批评他们的人已经在这个行业里面久经考验,一次又一次看到愚蠢的决定被付诸行动。有经验的软件开发人员会很早就发现问题。对于你所说的这个产品不会受到市场欢迎这样的说法,他们不会买帐。因为他们与客户打了多年的交道,并且知道你这么说只是为了不在将来某个时候被公司解雇。他们不会因为客户希望软件下个月交货就接受经理每周工作80个小时的要求。他们会告诉你要实现与客户定好的特性还需要3个多月。

年轻的开发人员并不经常遇到那样的情形,因此,对糟糕的管理习惯也没有什么抵抗力。管理者在这种情况下需要的只是天真的新手。如果你希望拥有一个伟大的团队和伟大的产品,那么有可以在你作出错误决定的时候能够提醒你的人,会为你一次又一次地避免遭受损失。但这得在你有勇气承认自己并不是无所不知的前提下才会发生。

热情会逐渐散去,所以你不能说是年纪抑制了热情。如果事实真是如此,Donald Knuth, Ward Cunningham, Bill Joy, Bill Gates 以及其他数以百计的突破40岁魔咒的人就应该因为年纪的关系而对软件行业不再有兴趣。但是他们不是。热情就是热情。如果在你40岁的时候具有热情,你还是可以爱上你所在的领域。这种热爱不是一夜情。年轻的开发人员仍然能够以短暂的热情开始他们的事业,但是如果面对困难和挑战的时候短暂的热情会很快消退。

最后,请让我澄清几件事:年轻不都是坏事,年长也不都是好事。最重要的是,一个人如果编程能力不行,那么无论年纪大小都不会被录用。保持团队年龄和经验的多样性。有差异存在,就能学习和进步。但是如果你是需要雇人的老板,请不要马上把坐在你对面有白头发的兄弟拒掉。忘掉你对年龄的偏见,看看他们能否打动你。

有一天那位兄弟(姐妹)可能就是你。

英文原文:Dave Rodenbaugh    编译:伯乐在线 – 唐尤华

相关文章:

java中getter_Java中的Getter和Setters解释了

java中getterGetters and setters are used to protect your data, particularly when creating classes. Getter和Setter用于保护数据,尤其是在创建类时。 For each instance variable, a getter method returns its value while a setter method sets or updates…

Loadrunner手动关联详解

Loadrunner手动关联详解 一、关联的含义: 关联(correlation):在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中…

解决Visual Studio禁止使用strlen函数的问题

问题描述: 在学习C的复制构造函数以及复制赋值运算符的重载时,需要用到使用C风格的字符串作为引入,由于我用的是VS2015(社区版),在编译时出错。编译器提醒strcpy函数是不安全的,建议改用strlen_…

求整型数组所有子串的和中的最大值

#include <iostream> using namespace std;const int MIN_INT -2147483647;int maxSum(const int *arr, int len){int my_max MIN_INT;int tmp 0;for(int i 0; i < len; i){//从头到尾。。tmp arr[i];//遍历相加。if(my_max < tmp){//更新my_maxmy_max tmp;}…

c语言中的if语句_If ... C中的其他语句解释

c语言中的if语句Conditional code flow is the ability to change the way a piece of code behaves based on certain conditions. In such situations you can use if statements.条件代码流是根据某些条件更改一段代码的行为的能力。 在这种情况下&#xff0c;可以使用if语句…

设计模式之笔记--装饰模式(Decorator)

装饰模式&#xff08;Decorator&#xff09; 定义 装饰模式&#xff08;Decorator&#xff09;&#xff0c;动态地给一个对象添加一些额外的职责&#xff0c;就增加功能来说&#xff0c;装饰模式比生成子类更为灵活。 类图 描述 Component&#xff1a;被装饰者和装饰者共有的基…

整型数组负数放左面,其他放右面,要求时空复杂度:O(n), O(1)。

例如&#xff1a;处理前&#xff1a;{5 -3 6 -7 -6 1 8 -4 0 0}&#xff0c;处理后&#xff1a;{-3 -7 -6 -4 5 6 1 8 0 0}. #include <iostream> #include <algorithm> using namespace std;const int LEN 10; void printInt(int c){cout<<c<<"…

[bzoj] 1176 Mokia || CDQ分治

原题 给出WW的矩阵&#xff08;S没有用&#xff0c;题目有误&#xff09;&#xff0c;给出无限次操作&#xff0c;每次操作的含义为&#xff1a; 输入1:你需要把(x,y)(第x行第y列)的格子权值增加a 输入2:你需要求出以左下角为(x1,y1),右上角为(x2,y2)的矩阵内所有格子的权值和,…

sql子查询示例_SQL更新查询示例说明

sql子查询示例In this article, were going to learn how to use the SQL update statement - what it is, what it can do, and what you need to be aware of before using it.在本文中&#xff0c;我们将学习如何使用SQL更新语句-它是什么&#xff0c;它可以做什么以及在使用…

keepalived+nginx安装

安装keepalivednginx做为公司服务器前端高可用反向代理安装nginx 1、yum install -y pcre pcre-devel gcc-c zlib zlib-devel openssl openssl-devel 2、cd /usr/local/soft 3、wget http://nginx.org/download/nginx-1.12.2.tar.gz 4、tar -zxvf nginx-1.12.2.tar.gz 5、cd ng…

Nexus Repository Manager 3.0 发布

著名仓库管理工具Nexus&#xff0c;在2016年4月6日发布3.0版本&#xff08;包括OSS版&#xff09;&#xff0c;相较2.*版本有很大的改变&#xff1a; 1. 从底层重构&#xff0c;从而提高性能&#xff0c;增强扩展能力&#xff0c;并改善用户体验 2. 升级界面&#xff0c;增加更…

计算整型数的二进制中包含多少个1

方法很多啊&#xff0c;比如&#xff1a;//1.靠循环&#xff1a; int calculate(unsigned int n){int count 0;unsigned int mark 0x1;for(int i 0; i < 32; i){if(n&mark){count;mark<<1;}}return count; }//2. 据说不用循环就能算出来的牛叉方法。木有测试。…

nvm npm不是内部命令_npm作弊表-最常见的命令和nvm

nvm npm不是内部命令npm or the Node Package Manager, is one of the most used tools for any Node.js developer. Heres a list of the most common commands youll use when working with npm.npm或Node Package Manager是Node.js开发人员最常用的工具之一。 这是使用npm时…

快速排序的实现与注意点

先上实现了的C代码&#xff1a; 1 #include <ctime>2 #include <cstdio>3 #include <cstdlib>4 #include <iostream>5 using namespace std;6 const int maxn 100;7 int a[maxn], n;8 void quick_sort(int left, int right) {9 if(left > …

iOS 线程之GCD的高级使用方法

之前的一篇关于线程的blog已经为大家介绍了GCD的简单使用方式及样例说明&#xff0c;今天因为项目中有特殊的应用GCD的实例&#xff0c;为大家介绍两种特殊需求的使用GCD的方法。 目的&#xff1a;实现一件事情做完&#xff0c;再做下一件事情。确保函数的运行周期。 解决方式…

构造次优查找树

似乎有些错误&#xff0c;但是错在哪了呢&#xff1f; #include <iostream> #include <cmath> using namespace std;const int NUM 9;int value[NUM] {1,2,3,4,5,6,7,8,9}; float weight[NUM] {1,1,2,5,3,4,4,3,5}; float sum_weight[NUM]; void init_sum_weigh…

同步等待 异步等待_异步/等待和承诺的解释

同步等待 异步等待The async / await operators make it easier to implement many async Promises. They also allow engineers to write clearer, more succinct, testable code.async / await 运算符使实现许多异步Promises变得更加容易。 它们还允许工程师编写更清晰&#…

使用 GDB 调试多进程程序

使用 GDB 调试多进程程序 来源 https://www.ibm.com/developerworks/cn/linux/l-cn-gdbmp/index.html GDB 是 linux 系统上常用的 c/c 调试工具&#xff0c;功能十分强大。对于较为复杂的系统&#xff0c;比如多进程系统&#xff0c;如何使用 GDB 调试呢&#xff1f;考虑下面这…

理解Lucene索引与搜索过程中的核心类

理解索引过程中的核心类 执行简单索引的时候需要用的类有&#xff1a; IndexWriter、Directory、Analyzer、Document、Field 1、IndexWriter IndexWriter&#xff08;写索引&#xff09;是索引过程的核心组件&#xff0c;这个类负责创建新的索引&#xff0c;或者打开已有的索引…

lua的table+setfenv+setmetatable陷阱

--file1.lua x funciton() print("this is x") end ------------- --file2.lua local t {} local _G _G setfenv(1,t) --设置了这个之后&#xff0c;只要是在本文件中对未声明变量的访问&#xff0c;全部会导致递归。 _G.setmetatable(t, { __index fu…

rest api_REST API

rest api历史 (History) REST stands for Representational State Transfer protocol. Roy Fielding defined REST in his PhD dissertation in 2000.REST代表再表象小号泰特贸易交接协议。 Roy Fielding在2000年的博士学位论文中定义了REST。 什么是REST API&#xff1f; (Wh…

0414复利计算6.0--结对

结对同伴&#xff1a;姓名&#xff1a;柯晓君学号&#xff1a;201406114210博客园地址&#xff1a;http://www.cnblogs.com/950525kxj/一、项目简介 开发工具&#xff1a;eclipse 开发语言&#xff1a;java 主要功能&#xff1a;复利单利的计算、贷款的计算以及投资运算三大功能…

把简单做到极致

我真的还没有认真想过我已经是一名即将毕业的大三学生了。关于自己的过去&#xff0c;关于自己的未来。 有时候也有想过好好反思一下自己的过去&#xff0c;却发现自己的过去总是被太多的无奈与遗憾填满。有时候想畅想一下自己的未来&#xff0c;却发现未来总是充满了未知与迷茫…

作为程序员,要取得非凡成就需要记住的15件事。

作为程序员&#xff0c;要取得非凡成就需要记住的15件事。1、走一条不一样的路在有利于自己的市场中竞争&#xff0c;如果你满足于“泯然众人矣”&#xff0c;那恐怕就得跟那些低工资国家的程序员们同场竞技了。2、了解自己的公司以我在医院、咨询公司、物流企业以及大技术公司…

craigslist_Craigslist,Wikipedia和丰富经济

craigslistYou’ve heard it before. Maybe you’ve even said it. “There’s no such thing as a free lunch.”你以前听过 也许你甚至已经说过了。 “没有免费的午餐之类的东西。” “You can’t get something for nothing.”“你不能一无所获。” “Somebody has to pay…

EXCEL基础篇(二)

本章主要内容 一、单元格操作 二、插入批注 三、自动求和 四、填充序列 五、查找、替换 六、对齐方式 七、定位 八、插入形状及设置形状 九、页面设置 一单元格操作 1、插入 a、插入单元格 一个单元格选中状态---右击插入&#xff08;单元左右移&#xff09;--即可 b、插入单…

lua5.2调用c函数成功的例子

1. main.c-----------------//动态库#include <stdio.h>#include <stdlib.h>#include <string.h>#ifdef _cplusplusextern "C"{#endif#include <lua.h>#include <lauxlib.h>#include <lualib.h>static void checktoptype(lua_St…

【转】Android Activity原理以及其子类描述,androidactivity

Android Activity原理以及其子类描述&#xff0c;androidactivity 简介 Activity是Android应用程序组件&#xff0c;实现一个用户交互窗口&#xff0c;我们可以实现布局填充屏幕&#xff0c;也可以实现悬浮窗口。一个app由很多个Actvitiy组合而成&#xff0c;它们之间用intent-…

python 文件追加写入_Python写入文件–解释了打开,读取,追加和其他文件处理功能

python 文件追加写入欢迎 (Welcome) Hi! If you want to learn how to work with files in Python, then this article is for you. Working with files is an important skill that every Python developer should learn, so lets get started.嗨&#xff01; 如果您想学习如何…

带有中文的字符串各个字符的获取c++程序

简单易懂&#xff0c;上代码&#xff1a; #include <iostream> #include <cstring> #include <string> #include <cstdlib> #include <vector> using namespace std;class CStr{char *c;typedef struct {int start;bool isChinese;} counter;int…