每一年都有无数年轻程序员,加入软件行业。程序员
他们在学校里学过编程,可是对这个行业的现实一无所知。面试
Patrick McKenzie是美国一家小软件公司的老板,他写了一篇长文,介绍这个行业的一些实际状况。我看了之后很感慨,有些地方很受启发。我选择了一部分,翻译以下。编程
==================================ide
1、90%的编程工做来自内部软件优化
(90% of programming jobs are in creating Line of Business software)spa
计算机专业的学生,可能有一种印象,以为大部分程序员,都在编写公开出售的软件或者通用软件。翻译
这种见解是不对的。大部分程序员,实际上编写的是不公开的企业内部软件,好比追踪费用的软件、优化装运成本的软件、帮助记帐的软件、设计新部件的软件、计算保单价格的软件、识别恶意订单的软件等等。设计
各类各样的商业公司,开发内部软件,解决它们本身的问题。市场上对程序员的大部分需求来源于此,只有极少数程序员直接编写面向外部顾客的软件。开发
内部软件的开发,一般很是乏味,使人厌倦。由于它们的技术复杂性低、技术决策很是保守、预算不多、缺少长远考虑。可是,世界上大部分编程工做都是这种。get
2、别人雇你的目的,是让你创造利润,不是让你编程
(Engineers are hired to create business value, not to program things)
商业公司最关心的(或者说惟一在意的)事情,就是增长收入、下降成本。所以,它们实际上须要的不是程序员,而是可以帮助它们增长收入、下降成本的人。
开发优美的软件,解决技术难题,编写没有bug的代码,这些都不是商业公司的目的。它们雇佣你,是为了让你帮它们完成某个能够增长收入、下降成本的项目,而不是由于你是geek。
你我的对于公司的惟一价值,就在于你能多大程度上为它们增长收入、下降成本。
3、不要自称为程序员
(Don't call yourself a programmer)
不少公司的经理不懂计算机,在他们心目中,"程序员"就是一群高成本的劳动力,只会在一台复杂的机器上干一些难懂的事情。
若是你自称为"程序员",当公司须要压缩成本的时候,某些经理首先就会想到解雇你。有一家公司叫Salesforce,口号是"没有软件",意思就是若是经理们购买了他们的服务,就再也不须要别的软件管理销售业务了,也就是说,再也不须要本身雇佣程序员了。
正确的作法是,你应该把本身描述成与增长收入、下降成本有关系的人,好比"xx产品的开发者"或"改进者"。有一个Google Adsense程序员的自我介绍,是这样写的:"Google公司97%的收入,与个人代码有关。"
4、不要限定本身
(You are not defined by your chosen software stack)
年轻学生常常会问,应该选择哪一种语言或平台?学会Java,是否是比学会.NET容易找工做?
过度强调某一种语言或平台,都是没必要要的。若是你把本身限定为Java程序员或.NET程序员,你就已经输了,由于首先你不该该自称为程序员(理由见上一点),其次这种限定使得你自动被排除在世界上大多数编程工做以外。
现实生活中,学会一种新语言,只须要几个星期,而后再过半年到一年,你就会变成老手。那时,根本没人在意你之前用什么语言。
天才程序员是不多的,但是须要天才程序员的工做机会却不少不少,大多数场合都是需求远远大于供给。这意味着,即便你不是天才程序员,只要你是一个优秀工程师,那些招聘公司也会马上录用你,由于它们知道招聘到天才程序员的机会微乎其微。(重复一遍,所谓"优秀工程师",就是你的履历上有一连串增长收入、下降成本的记录。)
某些公司的人事部门,会根据某个关键词(好比Java或.NET)过滤简历。虽然这样的公司根本不值得去,可是若是你真的想过这一关,也很容易:投入几个晚上和周末,在你当前的项目中设法用到这个关键词,而后再把它写进简历就好了。
5、如何提升求职时的谈判能力?
(How do I become better at negotiation?)
(1)记住你不是在求职,不是在展现编程技巧,而是在推销某种商业需求(增长收入或下降成本)的解决方案。
(2)面试时,要有自信,要平等的对话。你要的是一个互利的录用合同,不要每次对方提出要求,你都说Yes。
(3)雇主可能会问"你的上一份工资是多少",他们其实在说"给我一个理由,压低你的报酬"。你要想好如何适当地回答这个问题。
(4)要还价。这里不只仅指钱,还指其它你关心的方面。若是你没法要求更高的薪水,那就试着要求更多的假期。
(5)在对方决定录用你之后,才开始讨论薪水。由于那时,他们已经在你身上,投入了大量的时间和金钱,产生了必定的成本,此时他们可能以为一些小问题已经不值得再纠缠了,好比每一年的工资增长几千元。
6、创业公司是否适合应届毕业生?
(Are startups great for your career as a fresh graduate?)
若是你一毕业就加入创业公司,最可能的结果是,接下来几年你都工做得很是辛苦,而后公司悲惨地失败了,你失业了,不得不又去另外一家创业公司工做。
若是你真的想去创业公司,应该首先找一家大公司干上两年,攒一点钱,积累一些经验,而后精心挑选后再去创业公司。
在创业公司工做,通常状况下,你遇到的都是创业者。他们大多数人没有能力在两年后雇佣你;而在大公司工做,你遇到的都是其余大公司的人,他们中不少人未来有能力雇用你或者帮你介绍工做。
7、在创业公司工做是否值得推荐?
(So would you recommend working at a startup? )
选择创业公司,就是选择一条职业道路,而不是选择一种生活方式。惋惜不少人把这二者颠倒了,他们推荐创业公司,其实是在推荐一种你感兴趣的生活方式。
若是你确实喜欢这种生活方式,老实说,你在大公司里也能够获得它们。在许许多多大公司里,你都有机会钻研最新的技术,并且还能5点半准时回家照顾孩子。
8、沟通技能是最重要的职业技能
(Your most important professional skill is communication)
前面说过,工程师被雇佣,不是由于会编程,而是由于可以创造商业价值。因此,你让人们相信你能创造价值,这是帮助你找到工做的最重要的能力。这种能力与你真的能创造多少价值,实际上联系不是很紧密。
我认识的一些最优秀的程序员,每每拙于表达。所以,别人不是不想与他们一块儿工做,就是低估了他们的价值。相反地,若是你看上去很会编程,而且很善于表达,别人就会真的这样看待你。