一名平庸程序员的自白

时间:2019-05-14 17:37:21下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《一名平庸程序员的自白》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《一名平庸程序员的自白》。

第一篇:一名平庸程序员的自白

一名平庸程序员的自白

来源:王昱(2010-5-15 16:30:49)

作者:阿兰·诺顿(Alan Norton)

翻译:Purple Endurer

导读:阿兰·诺顿揭示了他作为一名平庸程序员的生存之道:如何让自己一般般的编程技能发挥出最佳效果。

我一直以编写代码为乐,起因并不是我精于此道,而要部分归因于它是一大挑战。我发现没有什么比指挥个人电脑在显示器上显示“Hello World!”更令人激动的了。而在显示器上显示三个红桃或者黑桃A(Ace)和J(Jack)则是一个完全不同的问题。我毕业后写的第一个程序是用Northstar Basic为NorthStar Horizon编写一个自动售货机程序,后来又为Northstar Advantage编写了基于图形的21点纸牌(Blackjack)游戏程序。

PurpleEndurer注:

1、Northstar Basic:是源自NorthStar Horizon 和 NorthStar Advantage的一种BASIC语言。详见 http://en.wikipedia.org/wiki/NorthStar_BASIC2、NorthStar Horizon:是North Star Computers公司生产、以ZiLOG Z80A为处理器的8位电脑。详见http://en.wikipedia.org/wiki/NorthStar_Horizon

尽管如此陶醉于编程,但我必须坦白地承认:我是一个平庸的程序员,总在寻找一种方法来获得大的回报 - 即程序没有语法错误并能正常运行。这并不奇怪,我从未像一名程序员那样做好本职工作;我发现自己具有成为一名优秀开发人员的天赋。但是,在我们继续往下谈之前,我要给“平庸程序员”下一个定义。

平庸程序员——会使用一些现成工具的程序员。他只知道最简单的命令语法,但懂得在哪能

找到更复杂命令的语法。他不知道如何编写最高效的代码,但懂得在必要时如何重写和测试比较高效的代码。他可以克服重重困难独辟蹊径达到目标,但他把每个困难视为挑战,并自信会找到每一个困难的解决方法。他可能需要较长时间才能完成,但总能达到目标。他不知道如何创建一个DLL,但在必要时可以弄懂。他与大多数程序员一样,并不特别喜欢做工作记录,之所以这样做是因为他是一个专家。

工作决定技能

虽然我很想继续编写游戏,但为了填饱肚子,我只得迁就本地就业市场;公司们有“必需胜任实际工作”这个奇怪的要求是众所周知的。产品、人力资源、会计、库存跟踪和数据报告只是做生意必要的一些东西 - 你知道,很无聊的东西。

当我真正为报酬而编写程序时,我的技能发生了戏剧性地变化。它不需要采用大量先进的编码技术来围着数据团团转,并耍魔术般地变成信息。

我被 休斯飞机(Hughes Aircraft)公司雇用,通过IT服务来为产品控制部门提供支持。我的工作需要开发/分析技能,我热爱我的工作。编程不过是达到目的的手段。

开发人员身兼数职

程序员只是开发人员所扮演的诸多角色中的一个,通常你要身兼以下数职:

购买方(带预算)Buyer(with budget)

清道夫(无预算)Scavenger(no budget)

分析师(Analyst)

设计师(Designer)

规划师(Planner)

程序员(Programmer)

协调员(Coordinator)

测试员(Tester)

文档管理员(Documenter)

技术支持员(Support technician)

当开发人员未被认可为一个或更多角色中的专家时并不太令人奇怪。对我来说,工作职能就是编程。

我的生存之道

尽管我的编程技能不尽如人意,我仍然是一个非常成功的开发人员。这里有一些我多年来学到的诀窍,以及如何我作为一个平庸程序员,发挥出最佳平均编码技能水平的生存之道:

▲ 明确要求——我会预先得到完整、精确的系统要求清单。如果你直接开始编码就意味着你没有针对系统设计的要求来进行。

▲ 分析和设计——我获得了分析和设计权。一名普通程序员获得了分析和设计权,就拥有了一个超越一名伟大的程序员的优势。

▲ 项目计划——坦白来说,我早期职业生涯中没有用过正式的项目计划,一直到我加入了CSC,不得不使用更多的正式文档编制技术,从而开始使用项目计划。由此我充分认识到使用经过慎重考虑后的项目计划也是平庸程序员的一个优势。

考材料。经常翻阅手册、指南——我总是备有手册、指南以供不时之需。我也研究了其它的参

▲ 拷贝-粘贴程序员——我不介意承认自己是一名拷贝-粘贴程序员。多年来,我写了许多可以在新项目中重复使用的代码。因为我至少花时间写了一次代码,所以我对这些代码如何工作略知一二。在工作中我从不拷贝其他人写的代码,并且我从不使用我在其他公司写的代码。黄金规则和版权法都适用于知识产权:您不得复制和使用别人的代码,除非明确允许,或者你可以得到特别的许可。

▲ 毅力——我永不放弃,我一直相信自己能完成任何编程任务。工具——当我需要一台更快的电脑但这又不在预算之列时,我发现了一个经理愿意用他们的一部分预算资金为我购买。你可以通过乞求、借用,或交易来获取所需工具,从而完成自己的任务,要经常向你的经理提出自己的要求;只这些要求是合理的,一个优秀的经理会尽最大努力找到一种方式来获得软件,硬件,手册,或者你所需要的帮助。

▲ 手气好(Serendipity)——也被称为“代码一写就好”策略。有几次我像一个初级程序员那样写了代码,而这些代码运行得很好。我把它比作是国际象棋,你在下棋的过程中突然发现,自己走两步就有将死的机会。这不是编程应有的方法,但由于我在检讨自己的职业中的罪过,我不得不纳入此项。

底线

我要做一个最终坦白:我不喜欢被看作是次等的团队成员。我见识卓越,而幼稚的程序员却真的相信:不能写出“先进”代码的人对团队和公司来说毫无价值。这些精英认为平庸的程序员能力有限,不足以生产高品质的代码,几乎总是犯错,令人不快。有个观念令我感觉既可笑又惊讶:如果你不能________(填空),就不是优秀的程序员。

你不必成为一个出色的程序员或伟大的开发者,特别是正在开发商用系统的时候。没错,我是一个平庸的程序员,其主要原因是我从来不需要成为一个伟大的程序员。

我不是纵容平庸。不论做什么,都要尽力做好——包括编程。“最好”的代码可能难以确定,但越高效的代码可能也越难维护。可以说,任何可以完成工作的代码就是好的代码。代码是像索玛立方体(Soma cube),有240种途径可以解决索玛难题,同样,也有许多代码编写方法可以用来完成任务。底线就是尽可能做好工作——这是任何一个平庸的程序员都可以做到的。(完)

第二篇:如何成为一名程序员

苦逼中的战斗鸡:如何成为一名程序员

下面要说的是我在成为一名程序员的道路上做的几件事情。写在这里除了要让自己铭记在心外,我还希望它能对别人有些用处。1.建立一个博客

这是我后来才认识到的事,其实应该很早就去做。如果你是跟我类似的情况,你应该尽早开通一个博客——尽管还不知道该写什么。注册一个域名,买一个 空间。你会惊奇的发现有很多可写的东西。你可以记录下你成为一名程序员的过程,或写一下你感兴趣的技术方面的东西。我一直以为没什么好写的,可当真正思考 这些问题时,却发现有很多值得写的。最重要的事情是开始去做。2.开发一些东西

开发什么并不重要。选一种编程语言,任何一种都行,开始干。你不必去花大量的时间来决定应该使用什么语言。直接开始学一种语言,事实上最重要的是学习编程语言的基础知识,而不是劳神费力的去选择一种“最好的编程语言”。我选择的是PHP。因为它是一种被广泛使用的语言,在网上有大量的学习范例,我已经通过搭建一个WordPress网站而熟练的掌握了它。没有丝毫的遗憾。它使我学到了很多 基础知识。我还学习了其它语言吗?当然,我后来涉猎了很多脚本语言,我要在下一个项目上试试Ruby。编程语言不断的在变化,不要只盯着一个不放。3.注册你的GitHub帐户

我已经在Bitbucket上有了一个代码库。我最初选择注册Bitbucket是因为它能提供5个免费的私有库。后来我决定在GitHub上注册。事实上,我丝毫没有拖延,看看我的成果吧。4.向开源项目捐赠代码

我早该如此做了。我起初低估了做这种事情的重要性,说老实话,我现在仍需要进一步重视。向开源项目捐赠代码,这是一种很好的学习别人如何编程的方法,并且能把自己的代码公开。我今晚的就要去列一个准备去参与的开源项目的清单。5.热心参与

这也是我需要改进的方面。我应该到stackoverflow网站上去回答更多的问题,在一些博客,科技网站上分享自己的东西。去那些网站,让大家看到你。不在网上露面,就相当于待在屋里不出门却想找一份做巴黎导游的工作。重复做第2,4和5点 其它一些事情

很明显,每一个有志向的程序员都应该每天阅读Hacker News和其它开发/科技/编程类的博客文章。

我打听到了不少的技术讨论会。这周末我准备去参加一个。我会把那里的情况写出来。我在这里并没有提读书。我喜欢阅读,但我们没有买任何的关于web开发的书籍。这是我个人的做法。我相信很多人都会建议首先买一本书看看。

找一些能和你讨论你的web开发/技术/编程想法的人和群体。如果我做了更多的第5项,我可能找到了更多的这样的人。

好了,这就是我要说的。这些就是在过去的一年里我成为一个程序员的成长之路上做到事情。如果有人觉得在这个清单里我还应该加入什么,请给我留言。我永远都希望听到新的观点。

第三篇:如何做好一名程序员

如何做好一名合格的程序员

一、90%的编程工作来自内部软件

(90% of programming jobs are in creating Line of Business software)计算机专业的学生,可能有一种印象,觉得大部分程序员,都在编写公开出售的软件或者通用软件。

这种看法是不对的。大部分程序员,实际上编写的是不公开的企业内部软件,比如追踪费用的软件、优化装运成本的软件、帮助记账的软件、设计新部件的软件、计算保单价格的软件、识别恶意订单的软件等等。

各种各样的商业公司,开发内部软件,解决它们自己的问题。市场上对程序员的大部分需求来源于此,只有极少数程序员直接编写面向外部顾客的软件。内部软件的开发,通常非常乏味,令人厌倦。因为它们的技术复杂性低、技术决策非常保守、预算很少、缺乏长远考虑。但是,世界上大部分编程工作都是这种。

二、别人雇你的目的,是让你创造利润,不是让你编程

(Engineers are hired to create business value, not to program things)商业公司最关心的(或者说唯一在乎的)事情,就是增加收入、降低成本。因此,它们实际上需要的不是程序员,而是能够帮助它们增加收入、降低成本的人。

开发优美的软件,解决技术难题,编写没有 bug 的代码,这些都不是商业公司的目的。它们雇佣你,是为了让你帮它们完成某个可以增加收入、降低成本的项目,而不是因为你是 geek。

你个人对于公司的唯一价值,就在于你能多大程度上为它们增加收入、降低成本。

三、不要自称为程序员

(Don't call yourself a programmer)

很多公司的经理不懂计算机,在他们心目中,“程序员”就是一群高成本的劳动力,只会在一台复杂的机器上干一些难懂的事情。

如果你自称为“程序员”,当公司需要压缩成本的时候,某些经理首先就会想到解雇你。有一家公司叫 Salesforce,口号是“没有软件”,意思就是如果经理们购买了他们的服务,就不再需要别的软件管理销售业务了,也就是说,不再需要自己雇佣程序员了。

正确的做法是,你应该把自己描述成与增加收入、降低成本有关系的人,比如“xx 产品的开发者”或“改进者”。有一个 Google Adsense 程序员的自我介绍,是这样写的:“Google 公司97%的收入,与我的代码有关。”

四、不要限定自己

(You are not defined by your chosen software stack)

年轻学生经常会问,应该选择哪种语言或平台?学会 Java,是不是比学会.NET 容易找工作?

过分强调某一种语言或平台,都是不必要的。如果你把自己限定为 Java 程序员或.NET 程序员,你就已经输了,因为首先你不应该自称为程序员(理由见上一点),其次这种限定使得你自动被排除在世界上大多数编程工作之外。现实生活中,学会一种新语言,只需要几个星期,然后再过半年到一年,你

就会变成老手。那时,根本没人在乎你以前用什么语言。

天才程序员是很少的,可是需要天才程序员的工作机会却很多很多,大多数场合都是需求远远大于供给。这意味着,即使你不是天才程序员,只要你是一个优秀工程师,那些招聘公司也会立刻录用你,因为它们知道招聘到天才程序员的机会微乎其微。(重复一遍,所谓“优秀工程师”,就是你的履历上有一连串增加收入、降低成本的记录。)

某些公司的人事部门,会根据某个关键词(比如 Java 或.NET)过滤简历。虽然这样的公司根本不值得去,但是如果你真的想过这一关,也很容易:投入几个晚上和周末,在你当前的项目中设法用到这个关键词,然后再把它写进简历就行了。

五、如何提高求职时的谈判能力?

(How do I become better at negotiation?)

(1)记住你不是在求职,不是在展示编程技巧,而是在推销某种商业需求(增加收入或降低成本)的解决方案。

(2)面试时,要有自信,要平等的对话。你要的是一个互利的录用合同,不要每次对方提出要求,你都说 Yes。

(3)雇主可能会问“你的上一份工资是多少”,他们其实在说“给我一个理由,压低你的报酬”。你要想好如何适当地回答这个问题。

(4)要还价。这里不仅仅指钱,还指其它你关心的方面。如果你无法要求更高的薪水,那就试着要求更多的假期。

(5)在对方决定录用你以后,才开始讨论薪水。因为那时,他们已经在你身上,投入了大量的时间和金钱,产生了一定的成本,此时他们可能觉得一些小问题已经不值得再纠缠了,比如每年的工资增加几千元。

六、创业公司是否适合应届毕业生?

(Are startups great for your career as a fresh graduate?)

如果你一毕业就加入创业公司,最可能的结果是,接下来几年你都工作得非常辛苦,然后公司悲惨地失败了,你失业了,不得不又去另一家创业公司工作。如果你真的想去创业公司,应该首先找一家大公司干上两年,攒一点钱,积累一些经验,然后精心挑选后再去创业公司。

在创业公司工作,一般情况下,你遇到的都是创业者。他们大多数人没有能力在两年后雇佣你;而在大公司工作,你遇到的都是其他大公司的人,他们中很多人将来有能力雇用你或者帮你介绍工作。

七、在创业公司工作是否值得推荐?

(So would you recommend working at a startup?)

选择创业公司,就是选择一条职业道路,而不是选择一种生活方式。可惜很多人把这两者颠倒了,他们推荐创业公司,实际上是在推荐一种你感兴趣的生活方式。

如果你确实喜欢这种生活方式,老实说,你在大公司里也可以得到它们。在许许多多大公司里,你都有机会钻研最新的技术,而且还能5点半准时回家照顾孩子。

八、沟通技能是最重要的职业技能

(Your most important professional skill is communication)

前面说过,工程师被雇佣,不是因为会编程,而是因为能够创造商业价值。所以,你让人们相信你能创造价值,这是帮助你找到工作的最重要的能力。这种

能力与你真的能创造多少价值,实际上联系不是很紧密。

我认识的一些最优秀的程序员,往往拙于表达。因此,别人不是不想与他们一起工作,就是低估了他们的价值。相反地,如果你看上去很会编程,并且很善于表达,别人就会真的这样看待你

第四篇:码农故事:一位中级程序员的自白(写写帮推荐)

码农故事:一位中级程序员的自白

我是一名中级程序员。

我有相当不错的基本技能。我犯了足够多的错误才明白为什么那些被称为错误。我很清楚我还需要了解更多东西。最重要的是,我知道那些东西大概是什么,并且我正在努力而积极地提升自己。

勇敢地承认自己不过是水平一般的程序员,这花了我一些时间。我不再感觉有必要去抓住那些我并不了解的观点。当人们发现我对某样东西不了解时,我也不再感到害怕。事情并非从来如此。你可能对此不以为然,但是我曾经自诩为编程大师。

这种对自己能力的不正确的评估,很大程度归因于我在一个相对封闭的环境中学习技能。在过去那些日子里,有电脑就已经很特别了;更不用说知道如何使用了。

在我自己看来,我当时是一个知识渊博并且经验丰富的程序员。在我不到20岁的时候我已经用C++、Pascal、C#、JavaScript写过程序。当然我最引以为傲的是,曾经徒手用PHP编了一个电子商务平台。

事实上,我可能只是人们平时谈话中提到的“我有个朋友的儿子很会写网站”。我和别的程序员没有任何交流,所以我仅有的比较对象是我周围的人;要么是一些根本不在意电脑的人,要么是那些会用电脑,但是在IE窗口中塞了5个没用的工具栏的人。那些可能会说“我的网坏了”这种话的人。

接下来这个故事就是讲我如何产生自己很厉害的幻觉的。

天才的起源

当我九岁的时候,我的一个朋友家里有卫星电视。而在我们家里,我们只能收到四个英国的频道(你能想象第五频道出现之前的日子吗?),我热切地盼望有一台普通的电视机。我们所需要的只是那些“卫星盘子”,或者我称为“卫星”的东西——那样我就随时可以看QVC台或者Eurosport台。由于隐约意识到自己的某种天分,我开始搭建自己的卫星!我的设计包括了一把打开的伞和一条铜质音频线,一段接在伞的金属柄上,另一端接在电视机天线上。必须承认我的设计有一些缺陷,并直接导致我没有得到想要的结果。但是这个小故事仅仅想表达我童年和青少年时期对技术的渴望。我认识的人中从没人想过制造“卫星”。几年后,当我父亲的办公室得到一个14.4k的猫时,我成为了最早一批网民一员。我能回忆起花了整个星期六下午的时间等待这个火焰漫画图标被加载,每个帧的动画大概要过一分钟才显示。我甚至用Netscape搭建了我自己的网站。由于不知道互联网的架构,我把所有的HTML文件存放在本地,并且期待有一天他们会出现在互联网上。然而这些细节并没有削弱一个事实:我认识的人中没有一个制作了他们自己的网站。

在我十多岁的时候,我发现了自己天才中的黑暗面。在装备了Jolly Rogers的食谱后,我和一群小伙伴们准备动摇整个九十年代英格兰的技术和道德根基。破解电话系统是我们的专长。我们用手提式声音耦合器和公用电话,给我们在ICQ上认识的美国姑娘们打免费国际电话,以及在私人交换机上设立语音信箱。最终学业和滑板阻止了我们在这条路上越走越

远,如果没有这些干扰,我们无疑已经在制造凝固汽油,黑进政府网站并且徒手杀人了。尽管我们没有把自己的能力发挥到极致,但事实是除了我们没有其他人哪怕拥有声音耦合器。

尽管到那个时候我已经经历了一些冒险和失败,我还是缺少一些东西。我的想法总是要超前我自身能力好几步-正如在“卫星”一节里体现出来的。我需要一种把我脑海中想法表达出来的方式。我需要一个直接的介于我想象和现实之间的接口。

Fuck 生成器

真正的转机出现在我十四岁的时候。我购买了一份PC Plus杂志,其中附赠了带有完整版Borland C++编译器的CD。我安装了,并且认真学习了杂志上的“hello world”教程。

就这样,一个崭新的世界在我面前打开了。物质世界对于我想象力的限制消失了。我的创造力被解放了,我脑海中的大教堂要成为现实了!我该把这个新工具用于怎样崇高的事业呢?很显然,Fuck生成器。

简单而优雅的Fuck生成器是一个命令行程序,也是我即”hello world”之后第一个里程碑。程序开始运行后会提示用户输入一个数字n,然后它会输出字符串”fuck”,n次。最后用户被提示可以重复以上过程或是退出。尽管功能有限,我还是沉醉于我所品尝到的成就。这是任何程序员都能享受到的一种快感,即看着机器执行你的命令,不管这个任务有多简单。它在运行了,并且你知道为什么它能够运行。它除了在那里运行不会做任何别的事。

过了些时日,另一期的PC Plus附赠了一个完整版的Borland Delphi。有了这个,我把程序升级为带有窗口界面并且可以随机生成彩色的4种不同的脏话。当别的孩子在玩PlayStation的时候,我正在投身于一项更有意义和创造性的事业,我在生成很多fuck。

到那时,一切都预示着我是注定要成大事的。我要向世人展示我真正可以做的事情。我的巨著

在90年代晚期,我为一家小型并且扩张迅速的邮件订购零售商创建了一个网站。一开始,这个站点只包含一些静态的页面——关于商品的小册子,一个导航菜单和一个访问数量计数器。

当我们的访问量越来越大时,我们决定加入电子商务功能。我们遍历了一些现成的工具包,它们的质量从差到极差不等。我印象中第一个版本大部分建立在摆弄cgi脚本以及怪异地把