写代码的人

Posts tagged ‘程序员’

程序员达到最高效率的一种境界

本文是从 Living in the zone 这篇文章翻译而来。

跟程序员相处你一定会有很多的挫折感。比如,程序员会把能让他们达到最高效率的那种神奇的境界叫做”那里“。

”那里“是真实存在的。至少对于我是这样的,很有可能你也很熟悉那里,只是情形不一样。对于非程序员的人来说,跟程序员的这种境界相对应的情形是, 当你完全投入进一本书或一场电影,你感觉整个世界都消失了,唯一留下了的只有你正在关注的东西。如果你有丰富的创作力,那有可能是在你写一本书或绘一副画 时候。

当你正全神贯注的读一本书上,有人打断了你,通常这会需要你花很长的时间重回到那种状态。通常,当我在读一本书,有人或什么事情(电话!)打断我, 他需要重读刚才那一页,试图接上刚才的思路。甚至一章的结束也会造成思路的打断,需要你花一段时间才能重新进入你刚才的那种阅读状态中。

我第一次进入这种境界是我深深的陷入了编程的状态,当时很年轻,大概17岁。我想写一个程序,在计算机屏幕上进行音乐合成。那是我第一次使用”结构 化编程“,是从一个朋友那里听来的。我在晚饭后开始干活,之后完全忘掉了时间,当我回过神来后,发现已经是早晨,鸟儿在树上鸣叫着向朝阳打招呼,到上班时 间了。我的第一反应是:”哇!,不会这么晚了吧!“我的感觉好像只忙了几个小时,但事实上已经过去将近10个小时了。

这次之后,这种状态出现了很多次,每次我都进入了一种忘我的境界,做事情比平时注意力不能集中或不能真正专注时又快又好。

一旦我知道了这种状态,我试图能重复它,进入它,试图能让这种状态保留更长的时间,获得更大的工作效率,或者能进入这种状态解决难题。很显然,对于 我,这种情形产生在绝对安静的环境里,在我面前的屏幕上只有一种东西(通常是文本编辑器)时,而且需要一个专用的时间,让我意识到不会被什么事情打搅。

数年过去了,生活越来越忙,如今更忙,我进入这种境界的频率越来越少。是否需要进入这种状态另说,现在进入这种状态可以做的大概就是闭上双眼,背着手想事情,如果遇到真正困难的问题或完全不熟悉的新任务,那会更好。

另一件让我印象深刻的事情是,当我处在这种状态里时,有人打断了我,我通常会表现的不太和蔼。我通常需要极大的忍耐不去发火(ok,我说实话,当我被打断时,我会发驴脾气,我的第一反应是发火,我怎么也忍不住。这方面需要多下功夫)。

原因很难说清楚,但我想改正这个毛病。当编写很复杂的程序时(有些问题会挑战我的能力的极限,但对你也许不是难题,而对我却是)我力图保持大脑里这 种我一直想达到的思维状态。一个打搅——不管多么的轻微和细小——整个心境都跌落到地上摔的粉碎。我必须重新构建整个状态才能工作下去,至少需要15分钟 甚至超过1小时。所以,30秒的打搅对于我的实际作用会延长至数十倍的时间,前提是我还能重回的之前的状态,而很多情形下是回不去了。

这种状态下效率的提高是如此的显著,以至于当想真正的干一件事时,我的办法是特意的为这种状态创造一种环境,我会等所有人都睡了,泡一壶新茶,把所有能造成分心的东西都关了(手机,辅助显示器等。)这样把可能的打搅降到最小。通常在这几个小时(2或3个)里,我把最困难的事情解决掉。其它较容易的事情在平时解决。

完全的专注具有强大的力量,它能让你完成你日常生活中或平时状态下不能完成的任务。

如果你总是处在一个噪杂和易分心的工作环境中,有时发现一些难关怎么也翻越不过去,你可以试试进入这种状态,当你真正的集中精力时你才会发现你究竟具有什么样的能力。

处在那种境界里并不是没有代价的,我通常需要好一段时间才能恢复,但终究收获大于损失,特别是它能让我解决在其它状态中不能解决的问题,以及能更快速的解决问题。

如果你也是一个生活在这种境界里的人,我真的想知道你的体验如何,请在评论里告诉我。谢谢。

后记:好几个人都推荐我看这个维基百科链接:意识流(心理学)。

本文转载自: 外刊IT评论 http://www.aqee.net/

Advertisements

有理想的程序员必须知道的15件事

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

1.走一条不一样的路

在有利于自己的市场中竞争,如果你满足于“泯然众人矣”,那恐怕就得跟那些低工资国家的程序员们同场竞技了。

2.了解自己的公司

以我在医院、咨询公司、物流企业以及大技术公司工作的经验来看,这一点所言不虚。

不同公司的运营模式差异极大。如果你理解企业的运营模式,那你就不一样了!在这家公司中(或者对客户而言),你是参与业务运营的资产,你的工作能直接产生效益!

3.与最优秀的人为伍

很早以前,我喜欢打篮球,被分配到一个水平比较高的队里。一开始适应的确很困难,但环境的压力越大(重大比赛),我的长进也就越明显。

每个领域其实都一样:你周围人的水平(以及对你的期望)越高,你就会变得越优秀。

4.制造差异

每年学习一门新编程语言。为什么不呢?不断尝试新事物,你关注的技术种类越多,脚下的路就越宽广,你的职业生涯就会日新月异。不知道几年后Java的趋势如何?那就学习Clojure。学Ruby还是Python?这两种语言都可以试试啊。然后你才能知道哪种语言更适合某个特定的项目。看,掌握的语言多了,才能在需要的时候信手拈来吧。

5.畏惧,是最大的敌人

还是直接从书中摘一句吧:“在畏惧中做出的职业规划,很可能会让自己后半辈子就一直被‘圈禁’在小隔断里,永远不会有创造明天辉煌的时刻。没错,那样是安全,但有意思吗?”

6.要成为多面手

如果你掌握了所在领域的知识,那你只能是一名专业人士。用PHP编程?花点时间设置一台Apache服务器,让PHP和MySQL都跑起来。一直在用jQuery?试试Prototype。你懂了吧。

7.一个字:做

别指望别人过来教你该怎么做,出去,自己学着去做!

8.找一位好老师

找一位好老师可以让你在学习技术的时候有的放矢。作者给我们讲述了别人是怎么指导他学习的(顺便说一句,作者在这本书里讲了很多个人经历的小故事,他居然从一位演奏家转行来做软件开发!):“好好研究一下目录服务,熟悉一种UNIX变体,然后再掌握一门脚本语言。”

请记住这句禅宗谚语:“循路觅宗师,形影不相离,师知吾亦知,吾乃成宗师。”

9.主动教会别人

教会别人是一种最好的学习方式。写一篇博客能帮你搞清楚一个问题。为此,你必须先掌握很多材料,同时还要有条有理地讲给别人听(写作技能)。如书中所言:“要想知道自己是不是真的明白,你就讲给别人听听。”

10.实践,实践,再实践(训练)

只有进行大量实践(花大量的时间)才能掌握某种技术。看的很多,写的很少,遇到问题,改一改,又去读代码……(这样下去是不行的)。

要特别警惕拖延症。其实,往往只要有了开头就好办了。

自我加压,效果会更好。我曾在一篇博客中提到帕金森定律:紧张的时限可以让你提高工作效率。为什么不把这个定律用到学习上呢,比如说在y时间内学会x?

11.从小处入手

每天都取得一项小成果,每天都要坚持做(写在博客上?)。这样一来,你只能让自己比昨天更进步,而不能说自己比上星期进步了一点。

12.享受过程

关注当下,而不是目标,享受那些在追逐未来目标的途中可能无暇顾及的小胜利。人总要生活在当下。我享受编程的过程,就像享受编程的结果一样。

13.不要丧失危机感

越是成功,就越容易犯重大错误。永远不要忘了危机感,特别是要认识到你今天所知道的,到了明天可能就会一文不值。过去的荣耀不能保你永远无虞。

据书中所说,你最好是要让自己能够“通用”,而不要对哪种技术或哪个公司产生依赖。你所掌握的某些技能,甚至你的工作,到了明天都可能会变得毫无价值。因此要不断提高/丰富/扩展自己的技能。

14.推销自己

为某个项目贡献自己的一份力量,写一篇博客,共享自己的源代码,成为对某个社区有用的人。

当然,做这些事可能需要激情,要看你的爱好,但这些事也会间接地推广你的工作成果,证明你的实力,提高你的知名度。

15.关注市场

书中还提到了“预警极客”,也就是那些始终引领技术发展的人。这些人说过的话往往带有预见性,他们提到事物也许过几天就会成为头条新闻。关注这些人,常看他们的Twitter和博客。

原文出自:cnbeta

支撑软件开发人员的三种精神

原文作者Andriy Solovey从事软件开发已有15年,做过开发人员、软件经理和系统架构师。关注构建优质、可靠和可用的软件。我注意到有三种精神指引着软件开发人员的灵魂——伟大的艺术家精神,可信赖的员工精神和自私的实用主义精神。

伟大的艺术家精神

如果你听到一种声音说“你不能这样画”,然后,你继续这样画,这种反对的声音就会被压倒。——文森特·梵高。

第一个精神是能推动我们团队程序员接受新挑战的伟大艺术家精神,能够创新方法,寻求自我实现。这种精神给我们创造最新解决方案的力量与渴望,使我们通 过学 习和实践不断进步。最好的软件背后都蕴藏这种伟大的艺术精神,它会使开发人员跳出思维框架,为了写出完美的编码而两耳不闻窗外事。但对于传统的公司,这种 精 神既是有力的支柱同时也存在危险——因为无法预见也无法保证开发人员不会因此而忽略客户的需求。在这种精神的指引下,程序员会拒绝平庸,但却有足够好的解 决 方案,他会用自己的方法达到超越所需的效果。这样的开发人员无法容忍拙劣的代码,对于一些重要的代码,即使在演示前一晚,在测试员回家休息之后,他们也会 进 行重构……

可信赖的员工精神

没有人是一座孤岛,自成一体,每个人都是大陆的一小块。——约翰邓恩

第二个精神是可信赖的员工,他能在第一时间为团队,公司以及客户的利益着想。在这种精神的指引下,开发人员会完全的将自己投入到为项目的成功以及获得 更大的 利益上。可信赖的员工精神会抑制创造性,但另一方面,他们绝不会放任不被认可而可能导致失败的代码的存在。 这样的程序员在最后期限会熬夜完成工作或修复令人尴尬的代码。他会在测试员测试之后再行测试,在管理员安装后再行验证安装。这种无私的精神会使开发人员专 注、负责并遵守公司的各项纪律,但有时也会引起压力,不安,或浪费才能的感觉。这种精神的危害在于如果一家公司不关心开发人员的辛劳工作以及牺牲精神,那 么 这种精神会很快消失。

自私的实用主义精神

生活就是你在忙于做计划时发生的事情。——约翰·列侬

这种自私实用主义精神与个人利益、金融福祉、工作保障以及事业发展密切相关。这种精神促使开发人员接受负面信息,更多的关注薪水以及管理者的认可程度 问题。 随着年龄的增长,家事和私事日益取代了编写完美编码的梦想,日常生活问题日益取代了致力于工作、忠诚于工作之信仰,自私实用主义精神也随之变得越发强烈。 有时,开发人员在这种精神的影响下,开始更关注与对个人发展有利的工作,为了更好的工作保障而编辑混乱的代码,为了长期合作而增加代码的复杂性,或者甚至 只 专注于自己的项目和业务,或者干脆就在网上浪费时间。这种精神是人们想要实现个人目标的本能愿望,确保自己的未来,并且生活愉快。这种精神的危害在于,开 发员可能获得适得其反的结果,不关心工作质量以及公司和项目的长期利益。

每一种精神都有它积极的影响:伟大的艺术家精神可以提供给你具有创造性的力量,可靠的员工会促使你严守纪律并专注结果,自私实用主义精神可以满足你的 个人 利益。但他们也有其消极的影响:过分的艺术精神可能会错过一些真正的需求,可靠的员工可能会导致失败或者惧怕改变。自私实用主义会淡化公司和客户的最大利 益。

这些精神颠覆了许多经验匮乏的开发人员的想法,并防止其在脑中形成和平思想。这场精神战斗一般以什么结果收场呢?我看到许多开发人员最后都由一种精神 统治了其 灵魂。不幸的是通常都是自私实用主义者精神,他们都不再奋斗,其他开发人员根据具体情况也徘徊在这样的精神中:一些公司欢迎有创造性的伟大艺术家,一些则 排斥自私的实用主义者。

这些精神的存在只是我的主观观察以及结论,但是可以帮助我们解释一些软件团队生活中的有趣现象。因此,亲爱的读者朋友,我有几个问题留给您。

你同意这些精神的存在吗?你能控制并使之达到平衡吗?是不是我还遗漏了一些指引软件开发人员的重要精神吗?欢迎在评论中分享你的观点。

译文出处:伯乐在线 – 职场博客
译文链接:http://www.jobbole.com/entry.php/618
原文:Andriy Solovey 文章推荐:关关 翻译:伯乐在线 敏捷翻译组 –祝佳

 

程序出错后,程序员给测试人员的20条高频回复

编者按:程序员和软件测试员之间的关系无须多言。这些经典回复是国外程序员总结分享的,“全球通用”。

20. “That’s weird…” 很奇怪……
19. “It’s never done that before.” 以前没这样过的。
18. “It worked yesterday.” 昨天还好好的。
17. “How is that possible?” 那怎么可能?(怎么会出问题?)
16. “It must be a hardware problem.” 这一定是硬件问题。

15. “What did you type in wrong to get it to crash?” 你输入什么东西后才崩溃的?
14. “There is something funky in your data.” 你的数据有问题。
13. “I haven’t touched that module in weeks!” 我好几个礼拜没动那个程序了!
12. “You must have the wrong version.” 你一定在用错误的版本。
11. “It’s just some unlucky coincidence.” 这只是凑巧。

10. “I can’t test everything!” 我无法测试所有东西。(我的机器环境下,无法测试所有的可能情况。)
09. “THIS can’t be the source of THAT.” “这”不可能是问题的原因。
08. “It works, but it hasn’t been tested.” 程序能用,不过还没有测试。
07. “Somebody must have changed my code.” 一定有人改了我的代码。
06. “Did you check for a virus on your system?” 你的电脑扫描病毒了么?

05. “Even though it doesn’t work, how does it feel? 即便程序不行了,(你觉得)程序写得如何?
04. “You can’t use that version on your system.” 你不能在你系统上使用那个版本的程序。(程序版本和系统有冲突。)
03. “Why do you want to do it that way?” 你怎么会想着那样操作啊?
02. “Where were you when the program blew up?” 程序崩溃时,你在做什么呢?(做了哪些操作?)

第1条会是什么?猜猜看吧!

01. “It works on my machine” 在我机器上好好的!!!(潜台词:怎么在你那就出问题了呢!!!)

编者后话

虽然已经远离编程,但经常还是会用到第20、19条,当然也不会“错过”第1条。各位看过之后,不知你都用上了哪几条哦~

来自:http://www.oschina.net/news/16877/20-answers-programmer-give-to-tester

如何正确有效的管理开发人员(一)

如何正确有效的管理开发人员(一)

-所有的程序员都应该有良好的装备

在2011年,最低配的开发用电脑是8GB内容、4核处理器、快速启动驱动器、1Tb的硬盘、游戏质量级的显卡,以及1900X1200分辨率的显示器,甚至更好的固态硬盘。提供他们喜欢的鼠标和键盘是必须的。

许多开发者应该有个不错的手提电脑,比如配固态硬盘的联想W500。

这些都不是昂贵的,如果你给他们的装备够格,那么你的开发者将获得更多的工作乐趣。实在没有理由使你的团队的装备差。

你还可以做更多。许多开发人员需要一组测试系统。这些系统,他们可以自行做调试、诊断等,或者安装操作系统或其他软件的测试版本。这些应该是KVM系统上,桌面不会被显示器和键盘搞凌乱。

如果其中的一个测试系统属于“低配”,那就好了。比如老式的奔4电脑,带1G内存,英特尔945G显卡,4200转速的硬盘。这可以保证你的开发人员的软件可以运行在低性能的系统上。英特尔Atom的系统,也是低配测试系统之选。

加分项目?当然还有。让你的开发人员使用他们偏好的代码编辑器,哪怕是收费的代码编辑器,当然大部分不错的代码编辑器都是免费的,收费的也不贵。开发者用自己喜欢的编辑器,效率会更高。

满足他们额外要求的工具。比如 RedGate的Reflector就是对.NET开发很重要的工具,仅是35美元。

有时,开发人员需要特别的设备,也要搞定来满足他们。如果他们需要gizmo,贯穿开发环节,那就每人一个,别让他们分享。只有非常不好搞到的东西,才共享来用。如果他们需要的频率高于每周1次或2次,或几天时间需要一次,那么让他们分享,可是件痛苦的事儿,将非常没效率。你想让他们有效率,不是嘛?

切记,确保您的团队有他们想要的设备和软件工具,他们的工作才会干好。

最好的问候
– Foredecker

作者Foredecker是微软开发经理。有兴趣可以查看简历

《如何正确有效的管理开发人员》系列文章陆续推出,敬请关注。

如何正确有效的管理开发人员 系列文章:

如何正确有效的管理开发人员(引)

来自:http://www.oschina.net/news/16554/a-return-to-good-code

 

两个程序员 (Chris 和 Steve) 的故事

当 MSX和Atari ST还很‘火’的时候,我在荷兰的一家叫做Aackosoft的游戏公司里短暂的就职过一段时间,这个公司位于Leiderdorp —— 离海牙不远的一个小镇。之所以短暂,原因是这个公司神奇的倒闭了(一天晚上财务主管一进来就开始粉碎各种文件,我只好拿起公文包离开了)。除了管理方面的 问题外,这里工作的人都很不错。

要开发的程序非常有趣,这里的薪水还行(假如你是拿薪水过日子的),开发过程伴随着大量的知识学问,让我惊叹不已。这里的设计人员都非常的优秀,他 们让这不通用的显示效果能够在各种平台上使用。对于我,有两个人格外的吸引我:Steve 和 Chris,他们都是英国人。我们大部分人下班后都会一起坐一段很长的路程,我们住在“校园宿舍”里 —— 因为对这栋建筑的这个部分最好的描述就是校园宿舍。下班后我们就待在一起,我们叫了匹萨或泰国食品,聊天、玩游戏,有时是我们自己的游戏 (Indy500, FlightDeck),有时是竞争对手的(是否还有人记得Gauntlet?)。

Steve 和 Chris 这两个人极不相似。Steve 讨厌大量的编码工作,他有时会疯狂的花上几个昼夜的时间把一个游戏的框架搭建起来,之后他就会像泄漏气的脾气,行动慢慢腾腾,像个蜗牛。而大概就在这个节 骨眼上,Chris入场了。他捡起Steve已经完成的那一大堆代码,一个字节一个字节的,规整清理,使之可靠、高效。他们之间是如此了解,根本不需要讨 论哪段代码是干什么、为什么这样写,只是用这种方式来回交替的进行,直到任务完成,通常都是迅速顺利的搞定。

这其中的奥秘显然是得益于他们值得称赞的性格,长期共处培养出来的融洽,以及形成的一种依赖于对方的习惯,而不是相反的用大量的时间来相互传授自己的知识和用意。Chris 已经无数次的这样配合Steve,已经十分清楚的知道Steve想干什么。

如今我们也许可以称这为“结对编程”,而这种结对的方式产生的效果远超了他们两个作为单独个体的总和。Chris 如果一直依赖于这种工作方式,那他将不会有自己的原创作品。而Steve一旦失去了Chris,将不能完整的完成任何一个工作。可作为一个团队,他们做出 了出色的东西。就像是他们在搭起骨架,填充内容之前,脑海中有了共同的图纸,这是他们能成功完成任务的基础。

数年里,Steve已经积攒了犹如大百科全书那样丰富的有用的程序代码,这些足够Chris用来发现他的思维轨迹。

这是程序员中的合作依赖。之后我再也没有遇到这种情况,我也并不是真的想盼望看到这样的组合出现,这只是那些日子里能让我感到独特、至今回忆的一件小事,就像发生在昨天。

我所看到的是一种‘热情’。我看到了Steve的(从个性上来讲,我更喜欢他,但当我发现有趣的事情时,我却不能像他那样富有激情的工作)。我看到了Chrise的。

他们曾徘徊在各大公司里寻找他们的精神伙伴,但从来没有遇到这样能够相知、能超出工作范畴、从个人角度上相互接受的人。这让我产生奇想,也许应该有 个“程序员约会服务系统”,像Steve和Chris这样的人能够遇到一起,一起合作创造出他们各自独自根本无法想到的奇迹来。

本文转载自: 外刊IT评论 http://www.aqee.net/

 

不需要计算机的程序员

本文是从 Programmers without computers 这篇文章翻译而来。

当我第一次以程序员的身份参加工作时,我就惊讶于同事们竟然花如此多的时间在他们的计算机上。当然了,一个计算机程序员必然需要花相当多的时间坐在计算机前,但为什么要用去几乎100%的时间呢?我很不理解,我以前从没这样干过。我以前总是在做计算机之外的事情和坐计算机前的事交替的进行。

让我更困惑的是当网络不通时(这是经常发生的),我们有一半的人是用Windows PC机的,另一半人用Unix工作站。当网络不通时,使用PC机的人可以继续工作,因为他们的工作环境就在本机上。

但是使用Unix的兄弟只能待在办公区里等着网络恢复,或者,如果网络看起来一时半会儿不会好,那就回家。他们桌上有电脑,但这些电脑只是一个连接服务器的终端。所以,没有网络,这些使用Unix的家伙基本上相当于没有电脑。他们知道,没有网络他们什么都做不了。这看起来很古怪。

那时,我开始知道如何去编程,但我仍然对专业软件开发一无所知。我很多的想法都很天真。但是回首看去,我想有一件事是对的:程序员需要去站起来,多去思考。但经常的,人们在最后才会意识到这个问题。

本文转载自: 外刊IT评论 http://www.aqee.net/