如何做一个懂礼仪的职场人。

职业规划就是对职业生涯乃至人生进行持续的系统的计划的过程。一个完整的职业规划由职业定位、目标设定和通道设计三个要素构成。

对于好程序员,有很多好的习惯,为什么要把这个习惯放在第一个呢?有很多人如果阅读过《高效能人士的七个习惯》,其中第一个习惯就是积极主动。如果从这个角度来看,我把解决解决每一个问题放在首位从理论上是完全没问题的。但我要说说我们程序员独特的地方。

所有人都知道,程序员永远是拿着键盘在战斗的勇士。他们不能只是纸上谈兵。他们得有非常多的实战经验,人家才慢慢地说你是一个高手。可以说,高手绝对不是吹出来的,而是真枪实战干出来的。

在这里,我们不需要考试,不需要比赛。我们就看同样是一年年过去,到底谁做出来的东西最好,最多!因此,解决问题是我们提升自己能力,并且证明自己能力的非常重要的路线。我有一个非常好的朋友,大家认可他,就是因为往往全公司最难的问题,都是他解决的。还有一个朋友,就是因为他解决了全公司最大的技术问题,而得到了公司的十万元的奖金。

事实上,对我们来讲,任何一个问题,都可能是给我们打开了另外一个知识领域的大门,让我们了解到很多未曾关注的事物。这里面我有很多经验。

有一次我在研究代码注入的时候,发现Delphi的VCL对接口的实现方式。而且这个发现,让我很好的解释了,为什么在Delphi中做接口类型的强制转换的时候会发生错误。

还有一次,因为我做了一次技术分享,当时会上我的同事就提及了Ruby的不同设计思路,我当然也开始关注起来。这次事件,让我发现很多不同面向对象设计语言背后的实现思想,非常受用。像C++/C#/Java语言的继承,讲究的是类型的定义。而Ruby却可以动态修改任何一个已经定义的类。

当然了,这样的例子非常多。我们还不如反过来说说,如果我们遇到问题都绕过,或者不闻不问,或者得过且过,全然不当存在过一样。你会发现这样的人,事情分配给他的时候,他才会去做。偶尔也能看到他的聪明,但是就是看不到成绩。

是的,积极主动地解决每一个问题,让我们能够做程序员做得每天都不一样,每天都很精彩。而且,必须认识到的是,改变别人对自己的看法很难,唯有自己对事情的看法,才是我们可以,也是最容易去改变的。当我们心中真正开始热爱这些问题的时候,我们就走上了优秀程序员的长征之路。

是的,万里长征,这还只是开始!但是只要这一步走对了,下面就不会偏太多。

zc530.Com小编推荐

一个平庸程序员的自白[1]


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

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

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

工作决定技能

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

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

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

开发人员身兼数职

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

购买方(带预算)Buyer (with budget)
清道夫(无预算)Scavenger (no budget)
分析师(Analyst)
设计师(Designer)
规划师(Planner)
程序员(Programmer)
协调员(Coordinator)
测试员(Tester)
文档管理员(Documenter)
技术支持员(Support technician)

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

一个还不太老的程序员的体会


谨以此文献给所有想当程序员的朋友

(一) 文章由来及个人经历

我是一名计算机专业的本科毕业生,毕业已经1年多了。毕业后从事的是软件编程工作,经常有其他专业的朋友想从事软件编程工作,向我请教如何,因为我自觉涉行不深,不敢信口开河,无奈朋友信任,我不得不郑重考虑一下这个问题了,来帮助朋友选择和回报朋友的信任。 这也就是此文的由来。

还是先谈谈我个人的经历吧。(是不是有点俗套,但我觉得了解我的经历,有助于理解我话的含义;我一向认为不了解古龙的生活经历的,不会真正读懂古龙的作品和古龙笔下的英雄的)我本科就读于南方一所著名的高校(因为自己的不成气,愧谈母校名谓),学的就是计算机专业。上本科时,几乎没有认真的听完一门专业课程,上课看报纸睡大觉,下课看录像看小说看球赛,临考抱佛脚,每次考试和课程设计都是蒙混过关。(于之相对是,我选修的工商管理和经济贸易方面的课到是听得不亦乐乎,考的分数颇高,也许这才是我的真正兴趣所在。)

总而言之,大学是混过来了,对专业的理解和掌握程度,应该没有达到毕业要求的合格水平。(也很后悔,但是有什么用呢,当时不知道珍惜;如果上天再给我一次机会的话,我一定会抓住,多看点美国大片少看点港片;现在,重回校园是我的一大理想)但是大学的学习使我有了一个简单的知识框架(总算学费没白交),我对一个朋友这样形容过我的这个知识框架,它不是钢筋铸的,是稻草扎的,哈哈哈,不要笑,真的,我敢说很多本科毕业的朋友的本专业的知识框架也只不过是稻草扎的。直到现在,我一直觉得自己的基础知识还是很薄弱,一直想抓点时间,把基础书本好好的温习一下。(此项任务正在计划和实施中)

毕业后,分配到某研究所工作。当领导让我选择自己以后的工作方向时,我毫不犹豫的选择了软件(也不知道到底是对还是错,但我决不后悔)。此研究所主要是以硬件为核心搞通信控制设备的研发生产;软件是辅助,所以也不受什么重视,很多搞软件的人都跳槽走了,留下来的大都是一些已经废掉和行将废掉的伪/萎程序员(名副其实的软件人员)。在这里感觉不到什么高紧张和高技术程度的研究和开发;软件开发的技术含量极低,以致于大部分人只有半年的学习和开发经验,以后都是这些知识和经验的重复利用。(我问过其他到研究所工作的同学,他们说都一样,呜呼,我们的国防科研开发呀)对于软件的开发,领导的意志和老掉牙的经验在新课题的技术采用和开发中起了决定性作用,没有明确的需求,没有明确的开发计划和进度,大家在一天一天一周一周的浪费着宝贵的时间,最后开发出来的东西修来改去,直至它变成垃圾。 我越来越认识到一点,要么象那些废人一样废掉,要么自己去努力寻求出路,反正别指望从工作中得到什么高明的经验了(教训倒也许有)。期间发生了一些感情上的纠纷,严重的影响了学习计划和效果,直到现在浮躁的心仍然有些浮躁。

期间,我读了一些书,看了一些文章,编过一些小例程,搞了一些没有什么技术含量的开发工作,也和一些前辈和高手们谈过聊过。 我一直在思考几个问题;如何学习软件开发?如何搞软件开发,国外的软件开发到底其秘诀在何处?为何我们的软件业一直在低水平徘徊?我们难道真的离了Microsoft就活不了?我们的程序员到底在浪费时间干些什么?软件开发到底是如何分类的?我们如何走自己的民族软件之路?

我想了很久,一些想通了,一些还在想。但我知道有一点是肯定的,那就是我们一定要靠我们自己走出自己的软件之路!跟在别人屁股后面永远受制于人!

好了,关于经历和牢骚就先写这些吧,该进入我们的正题了。

如何成为一个真正的程序高手


经常有人问我:面对众多的开发工具/语言,我该选择哪一个?怎样才能学好一门语言?怎样才能算是一个真正的程序高手?

首先,我不算是一个什么程序高手,我也就半吊子水晃晃荡荡。我不太喜欢程序高手这个词,最多,只能算是一名熟练的开发者而已,很多时候亦是半懂不懂。我编程是靠自学的,没有人教,也没有人问。因此走了不少弯路。当然现在看来,那些走过的弯路也算是一种积累。从1994 开始,我所使用的开发工具/开发语言选择是这样一个经历:1994:GWBASIC, 1995:FOXBASE,TC,1996:VFP,VB,PB,DELPHI,1999:VC++,PHP.总的说来,各种开发工具各有秋千,应根据具体应用来采用不同的工具。例如,写MIS用PB/VB,界面设计用VB/Delphi,写系统软件,用C/C++是最好的,做网站,有PHP,ASP,JSP等等。对于初学者来说,先用一种可视化强的工具(如VFP/VB/DELPHI)比较好,容易掌握,上手也快。但如果你想走更深入一引起,我建议你还是很有必要去精通C/C++,甚至了解一些汇编。

有人说,C/C++太难学了,开发效率也不高。我先不说C/C++优越于其他语言的地方(这在很多的资料中都有介绍),就单从一个很功利的角度来说说。Delphi/ VB对于一般人来说学上几个月就可以上手了。易学的东西学的人肯定多。而对于C来说,由于它难掌握,学的人不火,但一旦你真正掌握了,你的竞争实力就比其他人强。就目前的现实来看,C/C++程序员的工资普遍高于其他程序员就是一个证明。

就我个人认为,程序员不应该拘泥于某个特定的语言,每天为某个开发工具的优劣争来争去是没有意义的。重要的只有两点:

◆你用的开发工具/开发语言能解决你所遇到的实际问题吗?实用为王,适合的,能用的,就是最好的。

◆你喜欢这个开发工具/开发语言吗?兴趣,兴趣才是最重要的。选择你所喜欢的。

那么,怎样跨越程序新手这道坎呢?下面这几点建议也许对你可能有些帮助:

◆遇到问题时从所有你能想到的方面考虑去试图解决;

◆一定多动手,学一个专题(如网络/多媒体)后写一个软件检验自己;

◆用好联机文档(如MSDN)查询函数和资料,利用网络资源;

◆掌握好的跟踪调试技巧,多看一些高手的程序,从本质上理解;

说白了,要想成为一名熟练的开发者,就是最大限度的利用现有的资源,然后加上你的汗水。没有什么稀奇的。

13个小方法,帮你成为一个积极的人


当我们谈论“积极”这个词的时候,我们往往会想到“快乐”。但是,积极的方面不止一种,即使是在你感到伤心难过的时候,在你感到愤怒或者面临挑战的时候,你都可以变成一个积极的人,而不是简单的快乐。

研究表明我们有选择积极的情绪和不同思考方式的能力。我们的经历其实都是对自己周边事物的解读和回应。想成为一个积极的人,与其说丢弃掉一些消极的情绪,不如说我们重新用不同的方式去解读和回应发生在自己身边的事情。你只需要一点点的练习,一些些的耐心,以及一些些的坚持,你钟会成为一个积极的人。

成为积极的人从认识自己开始。

1. 请接受自己。所有的改变都是从认识到问题开始。如果你认为自己有消极的想法和情绪,如果你觉得你不喜欢自己现在对待一切事物的方式,请先接受这样的自己吧。其实,所有的改变都是从自己接受自己的坏情绪开始。

*接受自己的坏情绪并不意味着你要对你的情绪和思维做出评价,请不要这样做!我想告诉你的是,当这些情绪和想法出现的时候你真的很难去控制他们,这些情绪也并不是天生就是“好的”或者“坏的”,他们只是一些“情绪”和“想法”而已。你真正能控制的是你对这些情绪和想法的解读和回应。

*请接受那些你无能为力不能改变的事情吧。如果你就是一个天生内向的人,你就是有时候需要给自己一些安静的时间缓解一下情绪,那么就请不要试图做一个外向的人。对一个内向的人来说,试图做一个外向的人只会使自己更加筋疲力尽,更加不开心!你就是现在的自己!

2. 试着给自己设定一些小的目标。有目标感会使我们看起来更积极一些。有研究表明设定一个目标往往会让人立即变得自信一些,即使我们并未立即达成目标。设定一些对自己来说有意义,和自己价值观相符的目标会更容易实现,也会让自己更有动力。

*开始设定一些小目标试试。人不能一步揽月,我们要有蜗牛爬墙的精神,虽慢但步伐坚定,总会实现最终的目标。你可以设定一些具体的目标,但是请不要把“变得积极”作为你目标的开始。虽说这个目标愿景很好,但是这个目标并不具体,也实在是太大了,大到你都不知道该如何开始。相反的,你可以试试这些目标,比如,“一周冥想两次”,或者“每天给一个陌生人大大的微笑”。

*请注意你的用词,给自己一个积极的目标。研究表明,如果你的目标都是更加积极的话语,你会更可能实现这些目标。换句话说,设定自己想努力达到的方向,而不是努力摆脱的方向。举个例子来说,“不要再吃垃圾食品”,这就是一个无力的目标,这样的目标反而会让你因为某次失误产生强烈的负罪感。你可以这样稍微修正一下,“每天吃3种不同的水果或者水蔬菜”,这是不是更具体也更让你感到积极和可行了呢?

*请基于自己的行动设定目标。你要知道,你只是你,你没有能力和权利要求别人为你改变什么。如果你的目标要求别人给你某些反馈,那么有可能你常常会因为对方没有按照你的想法行事而感到沮丧。所以,你要设定的目标往往是那些你能控制的事情。

3. 练习爱的冥想。这种冥想方式有些佛教的传统。它会放大你对家庭的爱,进而普及到世界上的每一个人。它也可以帮助你有更大的弹性——很快的从会情绪当中跳出来,很快的从和别人不愉快的关系中解脱。你可以尝试每天进行5分钟的爱的冥想。如果你不知道怎么去做,网上有一些指导性的音频材料。两个很好的网站:

The Center for Contemplative Mind in Society

UCLA Mindful Awareness Research Center

4. 养成写日记的习惯。最近有研究表明,坏情绪是有疗方的:每出现一个坏情绪你就用三个好情绪面对就好了。具体怎么做呢?写日记可以帮助到你。通过日记你可以发现自己的所有的情绪,你也可以找到你的特有的比例配方。记日记还有一个好处是你可以更多地关注到那些积极的经历,这样你会在面对坏情绪的时候想起他们。具体做法是:

*不要简单列一些你不喜欢的事物。调查显示仅仅关注那些消极的事物只会加强你不好的情绪,让你变得更加消极。

*只要写出你的感受就好。不要去评价你的感受,不管是好的还是不好的。比如,当你的同事取笑你的身材你产生了不好的情绪的时候你可以在你的日记本中这样写,“当我的同事取笑我的体重的时候我感到很受伤。”

*然后,想一想你当时是怎么回应的呢?如果你现在有机会再回应一次,你会怎么做呢?以上面的例子为例,我们可以在日记本里这样写“那时,我自己感觉很不好,感觉自己毫无价值。可是再想想的话,我意识到我的那个同事对每个人都会说一些冷漠无情的话。还有,别人并不能决定我是谁,也不能决定我的价值,只有我自己可以!”

*试着去想一想,你从这些经历当中学习到了什么呢?你能不能从中学习到成长呢?下次再面对这件事情的时候你会怎么做呢?请写在日记中。比如,我会在日记中这样写,“下次如果有人再说一些伤害我的话,我会提醒自己别人对我的评价并不能决定我什么。我会告诉我的同事他的评论是多么的无情,他的这些话伤害到了我。我也了解到我很在意我的情绪。”

*在你的日记中,请记录给那些让你感到积极的事情和经历。这些事情和经历可以是来自一个素不相识的陌生人的一次友好对待,可以是一次美丽的日落,甚至可以是你和某个朋友的一次愉快的聊天。这样的一些记忆都会让你在未来不断地回想起来。你要知道,美好的回忆总是很容易从身边溜走,你要努力去发现和记录才行啊!

5. 练习感恩。感恩这件事情并不仅仅是感受,而是一种行动。感恩这件事情总是有益的。常常是感恩使我们看事情的方式有了即刻的转变,我们感恩的越多回馈的也越多。感恩使得我们更加积极,使我们和他人的关系更加坚固,也使我们感到更多的快乐。

*有些人生来就有“感恩的特质”,他们的感激的心情会别被人更多一些。但是,我们同样也可以培养这种“感激的态度”,不管我们现在拥有的“感恩的特质”是怎样的。

*请不要怀有“应得”之心。不管什么情况,请不要认为你从别人那里获得的东西都是自己应得的。这并不是说你不值得拥有,也不是说你要忍受不公和虐待。我只是想告诉你当你获得回馈的时候,请尽量不要用“我本该有”这样的心情来面对。

*学着和别人分享你的感激之情。和别人分享你的感激之情会加强这些感受在你脑中的记忆。它也同样可以让你的朋友变得更加积极。看看你周围有没有这样的感恩伙伴,试着每天分享三件让你们感恩的事情。

*试着去寻找在你周边值得记录的一些小事。写在你的日记中,拍照传到你的微薄,或者写下来发到你的朋友圈里——这些都会帮助你记住那些你感觉值得感激的事情。比如,今天的蛋糕做的刚刚好,或者今天去办公的路上没有那么糟糕,或者你的朋友因为你的穿着给了你一个大大的赞美,等等等等。记录下来这些事情!总会积少成多!

*学会感恩美好的事物。人总是关注那些不好的事情,总是让美好的事物从身边溜走。当你记录下那些你生命中的美好,请花一些时间真心的感谢这些回忆。努力把他们记录到你的记忆中。如果你在日常散步的时候看到一朵美丽的花儿,请不要吝啬你的时间,停下来告诉自己“这是多么美好的时刻,我要为拥有这样的一个时刻而感激”。请在脑海中拍下这个时刻。

6.自我肯定。自我肯定看起来有些自欺欺人,但是研究表明这会极大的改变我们对自己的看法。你要知道,人的脑子从来都喜欢走捷径。什么是捷径?捷径就是那些我们经常走过的路。如果你总是对自己说一些积极地事情,你的脑子最终会把这些事情看作是常见的事。积极地自我对话和自我肯定同样可以减少压力和低落的情绪。

*选一些对你来说有意义的自我肯定。所有让你感到积极和使你平静下来的事情都可以进行自我肯定。

*比如,你可以这样告诉自己“我有一个健康的身体,我的思想是那么的纯洁和健康”,或者“今天我要尽量友好”,或者“今天上帝会与我同在”,等等。

*如果你在某些方面感到痛苦,你也可以在那些方面找一些积极的自我肯定。比如,如果你对自己的样貌不是很满意,你可以这样进行自我肯定“我很漂亮,我很健康”,或者“我可以学习像喜欢别人一样喜欢我自己”,或者“我值得被爱和尊重”。

7. 培养乐观主义精神。早在1970年科学家就发现这样一个现象:那些我们认为中得彩票大奖(在我们看来是极其幸运的事情)的人他们应该更加的快乐,但是事实是,在一年以后他们的快乐程度并没有比那些没有中过彩票的人更快乐。我们称这种现象叫做享乐适应。

我们每个人都有一般认知上的快乐(我们假设以我们平常的快乐程度作为基准),在遭遇到重大的外在事件之后(不管是好的还是坏的)我们都会回到一般的快乐上来,这就是享乐适应现象。

*乐观主义是解读这个世界的方式之一。你要感谢自己的大脑有这种适应性,它让你能够从不同的角度看待不同的事情。悲观主义者是这样看待这个世界上的所有事情的: “一切都不公平”,“我没有能力改变这些事情”,“我的生活一团糟,都怪我”。但是一个乐观主义者却会认为世界上的一切都是可变的。

*举个例子来说,一个看起来悲观的大提琴手如果这样告诉你:“我下周有个大提琴独奏,但是我的大提琴水平烂透了,我肯定会把事情搞砸,或许我还不如去打游戏呢”。这里这个大提琴手做了这样一种假设,他的大提琴水平永远都不可能提高,永远那么幼稚,他并没有把这种弹奏看作是可以通过刻苦努力可以改变的事情。当他说“我的大提琴水平烂透了”的时候,这里面充满了自我谴责,他把大提琴水平不高看作是一件很失败的事情而不是一件通过练习有待提高的事情。这样一种悲观主义可能意味着说他以后再也不需要练习大提琴了,因为这样做对他来说并没有意义,或者他会因为自己不擅长演奏大提琴而产生罪恶感。这两种情绪对我们自身提高来说并没有什么帮助。

*如果是一个乐观主义的人,他面对上面的那种情况可能会这样想:“下个星期就是很重要的大提琴演奏会了,我对现在自己的水平并不满意。所以我每天要比平常多花一个小时练习的时间直到那场演奏会为止,尽力就好!毕竟这是我现在唯一可以做的事情,但是至少我自己知道我为那次演奏会拼尽了全力”。乐观主义不是说那样一种演奏会不是一种挑战,更不是说我们不要有坏情绪。挑战和情绪都在,但是我们选择从不同的角度看待这种挑战和情绪。

*你要知道,这个世界上有两种乐观主义:真乐观主义和假乐观主义,而他们是很不一样的事情。如果是假乐观主义面对上面的事情可能会有期待:“我会通过那一次大提琴演奏就进入到顶级的音乐学院进修。”这种想法并不现实,不仅如此,这样的期待很可能会让你更加的失望。真正的乐观主义看得清现实,也会为面对这些现实做努力。一个真正的现实主义者可能知道自己即使花了几年的时间努力提高大提琴水平也有可能最终不被自己理想的学校录取,但是他依旧会为自己的梦想去做自己能够做的一切。

8.学会重构不好的经历。人常常犯的一个错误是总是尽量避免或者忽略掉那些不好的经历。在一定程度上是有道理的,毕竟那些经历让我们感到痛苦。但是,试图压抑或者忽略那些悲惨的境遇却会削弱你面对他们,处理他们的能力。所以,不如我们想想看如何重构那些不好的经历。你从这些经历中能够学到什么呢?你能不能从另外的角度看这些事情呢?

*曾经有一个人,叫Myshkin Ingawale的人。在20xx年的TED上他给我们讲述一个自己发明设备想拯救印度农村那些孕妇的生命的故事。他说开始的32次的努力都没有成功。很多时候,他都会把这32次没有成功的经历看做是失败,一次又一次他都想放弃掉。但是,他选择了从过去的经历中去学习,并且最终他发明出来的仪器使得印度农村怀孕妇女的死亡率下降了50%。

*不要每次遇到困难和不好经历的时候都选择马上用消极的态度来面对,试着退后一点点,重新审视现况。到底是哪里出了问题?从这次经历中你有没有获得一些经验,下次再遇到的时候用一些不同于这次的方式面对?这些悲惨的经历有没有教会你或者更加善良一些,或者更加慷慨一些,或者更加聪明一些,或者更加坚强一些?花一点点时间反思这些经历而不是简单自动的把他们看成一件消极不好的事情,这会有助于帮你重新解读他们。

9.学会利用你的身体。人的身体和大脑是紧密相连的。如果你感到让自己变得积极一点很困难,这可能是由于你的身体在对抗着你。社会心理学家研究表明,不同的肢体动作会影响到压力荷尔蒙的分泌。试着站直一下,手往后放胸往前伸,眼睛直视前方。有没有感到舒服一点?这个动作叫做“能量姿势(power pose)”,它会帮助到你让你感到更加自信和乐观。

*请保持微笑。研究表明当你微笑的时候——不管你是否感到快乐,你的大脑会提升你的情绪。当你杜尼式微笑(duchenne smile)的时候这种感觉会更明显。曾经有调查说人在接受疼痛治疗的过程中如果微笑会比那些接受治疗而没有微笑的人感到更少的痛苦。

*穿出更能够表达你自己风格。人的穿着当然会影响到我们的感觉。曾经一个调查表明在实验室工作的人在进行简单实验的时候如果穿着实验服会比那些没有穿着实验服进行实验的人表现更好。你看,仅仅是衣着的不同就会有不同的表现。找一些让你感觉还不错的衣服穿,不管别人对你的衣着如何评价。

10. 做一些运动。人在运动的时候体内会分泌多芬胺,多芬胺是让人感到快乐的物质。运动会有助于缓解紧张和消极情绪。经常适当的运动会让你更加平静,也更加健康。这里,给你一些小建议:

*每天适当运动至少30min。

*不用考虑健身方面的效果,只要是有规律的运动就可以。比如慢走,游泳甚至是园艺工作都会人让你感到更积极。

*运动除了我们平常所说的跑步,游泳等剧烈运动,也可以是一些温和的运动方式。比如冥想,瑜伽和太极也是不错的选择。

11.从内在构建自己的生命。如果你想更成功,就多关注你已经成功的方面;如果你想要更多的爱,就多关注那些关心你的还有那些你给予过爱的人;如果你想更加健康,就多关注那些让你健康的方面……

12.不要为小事烦恼。我们每个人的生活中都会面对那些在当时看起来很重要但是如果我们退后一步看的话都不是问题的问题。关注于那些事情只会占据你的精力反而让你忽略了那些需要完成而没有完成的事情。事实上,拥有以下的五件事会让你的生命丰富起来:

*积极的情绪

*专注(专注忘我到把其他事情忘掉)

*和别人融洽的关系

*感到有意义

*成就感

请记住只有你自己才能够决定一件事情对你来说是有意义还是没有意义!不要被别人定义的“有意义”或“有成就的事情”绑住了你。如果你不在自己所做的事情当中找到属于自己的意义,那么无论是物质,名声,还是钱财都不会让你快乐。

程序员职业规划解决方案


为自己做职业规划,已经不必再来讨论其重要性,只有谨慎对待。

职业规划更要根据个人的理想,从实际出发。那么怎么才算实际呢?所谓的实际应当包含以往的经验、现有掌握的技术、教育背景、现实的工作环境、以及一些其他因素。如:婚姻、年龄、学习能力。花一些时间来思考这些问题,不能总是跟个感觉走,也不能总是太理想主义。

1、经验对一个人来说是绝对重要的,频繁的跳槽无疑是职业生涯的最大忌讳。如果是为了一点点工资而转移阵地那更不值得。所以不管当初是因为兴趣、还是因为无所选择而介入这个行业,这么多年的体会也绝对是一笔财富。如何运用我们的经验以及如何掌握更多才是值得考虑的。

2、衡量一下现有掌握的技术,要不要在学习新的技术。这一点也相当重要,就这个行业来说你不学习就势必落后。但新技术太多了,很多朋友还在感慨XXXX还没用熟,XXXX又出来了。在这一点上,我对新技术的定义是,你未知的技术都是新技术,也许它已经出来好多年了,但他很好用。我们的目的是在于解决问题。所以在学习新技术也就带有了一定的选择性,不能一味的追求,什么东西比较绚,什么东西强,永远从提高生产力和时间成本上考虑。总结这一点就是,要不断的学习,从而增强自己解决问题的能力,这样就永远不会out。(但如果你是绝对新手,还是多学点新技术好)

3、我的学历很低,要去自学考一个证吗?这个可以从成本和收益上考虑。考虑一下你现在的工作一年的收益是多少。如果考到一个证书,一年的机会收入是多少。继续受教育所花费的时间、以及其他成本是多少。还要考虑其他的影响因素。我的建议是,这个证书真正有用,让你能达到一个比别人更高的起点;你的志向中学历有最基本的要求,如果有这两点当中的任一点,你就应该去考取文凭。

4、如果现实的工作环境还不错,那在好不过了。每个人都应该珍惜自己的这份工作,首先是要干好自己本职的工作。希望能根据公司的制度的到晋升。现实当中可能并不会这么尽如人意,好多人努力工作不一定能得到回报。但大多数情况,你的努力领导会看在眼里,你应当在适当的时候向领导提一下。如果你的老板不太抠门,我想10有89还是能成功的。如果实在是不行,也不能怠慢工作,你应该在工作中得到更多的行业应验、提高综合素质。如果你的所做的工作,或者是你自身已经对公司来说具足轻重的时候,我想钱不是问题。

5、还得考虑一些现实的问题,你得花一些时间来找女朋友、陪老婆逛街。还有很多事情需要考虑。

以上是在做职业规划之前需要考虑的一些实际的问题。接下来具体的分析如何实现,在最后你可以根据自身情况给出一套合理的解决方案。以下是一个帮助个人分析发展、学习的导图。其中你看得出有很强个人色彩,很多的地方都只是提到了微软的技术方案,而忽略了其他的,你也可以再此基础上加以补充。

程序员职业规划解决方案

一、在工作中寻求提升

我给出了3类程序员可能发展的方向。其中最强调的就是在工作中得到提升。在工作中提成,一般对程序员说来有2个目标。一个是做架构设计-将来可以做产品的规划,或者项目规划和指导。另一个往管理发展,将来可能涉及的不知是单纯的技术。以下的步骤只是一些常规的做法。

目标

架构方向

第一步

1、基础必备:至少看过2本语言基础书和一本领域技术书。

2、部分参与项目1-2个。

所需时间:3-12个月

第二步

1、行业知识领悟、扩展相关应用知识。

2、完整参与项目1-2个。

3、可以指导新人完成工作。

所需时间:6-12个月

第三步生涯设计

1、深刻理解面对对象知识。熟悉常用架构,对公司采用的架构能提出改善意见。

2、参与需求讨论并能提出简化方案。

3、能为决策提出一些建议。

第四步

1、能够对整体需求方案做出精确描述。

2、运用一种架构对项目、产品进行设计。

3、评估项目风险、以及预留方案。

4、实现核心组件、技术难关。

5、行业技术指导。

第五步

艺术领域

管理方向

第一步

1、学习常用项目管理工具。

2、学会人际交往、协助项目管理。

3、和三教九流交朋友学会喝酒。

第二步

1、熟练运用一种项目管理工具。

2、能采用非技术手段实现需求(不用写代码的)

3、了解行业动向。

上表中第一步、第二步是基础阶段,都可以在制定

的时间内明确的达到目标。当你进入第三步的时候,应该就有点主要开发人员或管理助理的意思。等到第四步的时候就应该上位,如果一直不上位也很难发展。至于怎么上位,也许还得学习一些其他方面的知识。后两步都跟具体的成长环境和个人领悟相关,更多地是需要你学习本行业的知识,然后运用你所学到的技能将他用软件的形式表述,具体的做法也只有到自己领悟了。到了最后就达到了艺术的领域。我的上图给出的一些知识点,关于企业级应用开发说的比较多一点。这些也最多只能让你达到第3步,如果和你所从事的领域一点不沾边,你需要针对自己所从事的行业,列出能解决自己行业需求的技能,划出主次,针对不同的步骤,找出重点学习的知识点。

和人相处、与人沟通是当中隐含的,但非常重要的一个因素,只有掌握了这一点,才有可能达到艺术的领域。

最后还是强调那句话,能够解决问题才是王道。

二、树立自己的品牌形象

这一点必须是在你经历了一定的磨练之后再能够进展,至少你应该在原先的企业内已经完成了前三步的目标。已经积累了很多的行业经验。

如果你从开始就考虑要自己干,就要从上述表格第一步的时候开始准备。要将自己本身就看做是一个品牌。在和客户、和同行、和老板沟通的时候要处处注意维护你的形象。即使你没有任何产品,你的名字就是最好的产品,把自己推销出去。很多时候客户买你的产品不是因为你们的产品有多么的好,而是认可你的公司,或者是认可你们老板,或者单纯的喜欢你。所以一定要培养自己的行业名气,最重要的是合作机会。说不定就因为某个客户的一个单子,你就起来了。

一旦你树立了自己的形象,你还需要一个属于你自己的团队。得要有一些人愿意跟着你干。你需要一个很强的可以搞业务的伙伴,也后可能你从此再没机会写代码了。有更重要的事情等着你去做。

何谓程序员?何谓中国的程序员?


程序员,曾经是很多人尤其是计算机初学者为之崇尚的一个职业,仿佛就是理想、激情和事业的象征,从此就开始了IT白领人生。计算机技术发展之初,几乎就是一个个人英雄主义时代。一个天才的程序员,几乎就可以主宰一个计算机时代,创造出无数奇迹和梦想。

今天,计算机技术的发展日新月异,技术朝着愈加复杂和简单的两个看似矛盾其实一致的方向发展。计算机技术越加普及,无数非计算机专业的人群,出于爱好或者生存的需要,也加入了这个程序开发大军,并且都称之为程序员。

软件技术的发展,已经进入了一个大分工、大整合的时代,由此导致了软件开发工作的分层和分类越加细致复杂,同为程序员,彼此之间工作的技术含量可以说有天壤之别。系统软件、应用软件,是一个大的分水岭,几乎大多数程序员,都在应用软件这个层次进行开发,国内的程序员更是几乎全部如此。

既然是应用软件,就必然要和实际应用结合,而实际应用,是非常复杂多变的,尤其是具有中国特色的国内应用。于是乎,大多数程序员都在为开发应用层面的软件忙得不亦乐乎,财务软件、ERP、CRM、OA等等,几乎成了国内软件开发的主流方向,更不用说电信、石化、铁路、电力等具体行业应用软件的开发了,这些早已被称为项目了。国外的应用软件,除了以上业务应用之外,尚且还有像CAD、3D等专业领用的软件,具有一定的核心技术。

很多工作了多年的程序员们,在回首往事的时候突然发现,自己依然是一个辛苦的打工者,一个IT行业的苦力。反思一下,我们这些自认为程序员的工作者,其实是在核心技术的外围做一些表面工作,和那些非软件开发人员相比,我们觉得自己有技术,其实我们到底掌握了多少核心技术呢?现在的很多程序员,连数据结构、编译原理、操作系统等这些基本的知识都掌握得模棱两可,天天跟着老外的屁股后面追捧所谓的新技术、新框架。其实,又有多少是我们自己的呢?作为JAVA程序员,经常听到很多人自称精通Spring、Struts、Hibernate等主流框架,并有大型项目的开发经验,其实我们只不过比那些初学者多干了几年,使用这些框架更加熟练而已。国内软件行业的面试经常有此类现象,一个面试者可能这次面试不合格,但是他回去看一下书之后,再来面试,很可能就通过了。为什么?因为我们的面试太初级,太表象化。

我们经常接触IBM、微软等公司的面试,他们一般情况下是不会考核面试者具体掌握了什么框架、什么语言的,一般都是考核的面试者最基本的逻辑思维能力和分析判断能力。这也说明了,同为程序员,其间的差别是如此之大。

作为一名程序员,尤其是国内的程序员,应该对自己有一个清醒的认识,不要被表面的感觉所迷惑。到了这个时代,不是说程序员已经失去了光彩,而是我们所从事的层次,技术门槛已经大大降低,很多人处于同质化竞争。

怎么办?很多人说软件行业是个辛苦活,国内的很多软件公司更把程序员当牲口使用。其实,根本上还是怪我们自己没有很好的反思和调整。一方面,如果对技术真的有浓厚兴趣和激情,那就不妨向软件的底层核心技术迈进,另一方面,如果觉得自己真的缺乏这方面的潜力,那就努力适应国内环境,实现技术与应用的完美结合,争取向公司的中高层发展,如果不给与机会,那就自己创业,选择好技术和市场的切入点。

此外,一名优秀的程序员,一定不能是一个唯技术论者,如果持这样的观点,即使专心做个技术专家,也会存在发展障碍。微软的例子,sun公司的例子,都生动地说明了技术与市场的辩证关系。

当然,每个人的成败观是不一样的。如果始终把技术追求放在首位,追求技术完美的境界,并以此为乐,也未尝不是一道美丽的风景。

程序员对经验的一点思考[2]


那么,个体应该怎样对待经验呢?

我个人觉得,可以从经验的形成和使用这两个角度来思考一下如何对待经验的问题。

1、经验的形成

在经验形成的过程中,不能仅仅满足于经验的获得,还要对产出经验的前因后果进行深入系统地思考,确保经验能够有机,系统地融入到自己已有的知识体系中。很多时候,我们解决问题的经验方法,思考过程,是以一种非显意识的,灵光一现的方式得出的,我们的大脑会以一种近似于直觉的形式从记忆深处跳跃性地抓取一些线索,得出问题的解决方案。这种背景下形成的经验,如果不对其加以整理,回顾,不将经验背后的东西从潜意识翻到显意识的话,不去将经验涉及到的知识点和相关事物进行整理联系的话,这种经验很容易就会淡化,甚至随着时间的推移发生扭曲。即便是没有发生扭曲和淡忘,但是因为对得出经验的前因后果不甚了解,往往在个体真正需要借鉴经验的时候很难建立出来一个有效的参考系统。在经验形成的过程中,要透过经验,去观察经验背后的本质规律,通过具体的经验接触乃至掌握了主导经验的本质规律,才能够让自己在以后遇到问题的时候有效运用经验。

2、经验的使用

在获得经验的同时,要警惕经验成为自我意识的一部分,以减弱因为人潜在的维护自我完整性的心理倾向所导致的对经验的过度使用。

保持一颗鲜活的大脑,对不符合经验的东西,对经验不能解释的东西要保持一种敏锐的觉知能力和思考的自由度。而作到这一点的关键是要确保内心的纯净,安静。在我看来,只有一颗不带欲望,不带喜好,不带情绪,不带偏见,不带过多自我意识的心,才能够在运用经验和创造经验之间获得完美的平衡。把文章发给了一位朋友,他的回复我觉得很精要,附在下面作为对自己的思考的补充吧:

关键的是要能够透过具体的经验,看到背后的规律,所谓透过现象看本质。有的人,事情只做一次,就能成为专家;有的人会不停地在类似的事情上失误,这就是对本质看法的能力不同所致。 能够看到本质的人,一定不会滥用经验。

修炼一名程序员的职业水准[4]


四、天生神力:成为系统分析员 本来就论述如何成为一名职业程序员而言,本文已基本完成任务了,但《菜根谭》有言:竭世机枢,似一滴投于巨壑,穷诸玄辩,若一毫置于太虚。既已乘兴到此,何妨多置一毫于太虚呢,作者不才,干脆尽兴写算了。 你要是运气好,直接进入了一个严格规范生产的软件企业就业,刚开始就应该是按别人做好的软件设计来实现编程,你可以有机会直接学习软件设计,当你积累的足够多了,能够对其中的一些设计提出好的改进建议,而且干得又快又好,就会渐渐地展露头角,我相信你终有一天成为一名软件设计人员(注意,不是软件产品设计人员),步入系统分析员的行列,但这还需其它的一些条件和自我修炼。如果你在一个不规范的软件企业工作,那也不错,你很可能直接就有机会进行软件设计,然后开发、测试,甚至还不得不自己定义需求,把软件开发过程的各个环节走一个遍,当然这样对你的要求更高,而且你也不容易得到及时有益的指点,在正态分布的情况下,你应该是成长的很慢。但不管就业的单位如何,如果你决心要成为顶尖软件职业选手,通常什么客观困难都阻挡不了你,然而你个人的因素可能会阻止你的前进。下面提出的观点纯属一己之见,伤人自尊之处作者在此提前道歉,并建议你除非对本文有强烈的兴趣,否则就请直接看第五节或放下别看了。丑话已说在前头了,在各种软件开发组织的发展过程中的事实也证明,只有少数程序员能成为系统分析员,我想这一点不是我杜撰的吧,因此你要是在看接下来的部分时感到气愤难当,那也实在没着,纯属活该,因为作者只是在说明自己的观点而已,你最多可以呲之以鼻,表示一下你的轻蔑好了,但没有任何理由可以骂人! 作者自己没有到微软面试过,但身处软件行业,关于微软的许多东东当然还是有耳闻的,据说微软招聘一名程序员要过五个已经成为微软程序员的面试关,而且是一票否决制,又据说大多数面试题并非编程,而是一些有关逻辑和智力的题,作者私下也做过许多流传的微软面试题,并对此做法深以为然。程序的本质就是逻辑,所以几十年前就有人提出编程是一门艺术,而艺术是要靠天份的,这一点少有人反对。一个人的逻辑能力可以不断提高,但其能到达的终极逻辑能力的层次必定为其天生智力所限制,这一点就让人不易接受了。好笑啊!人们可以公开承认自己没有某种或全部的艺术天份,但要说自己逻辑天份不够,换句话说承认自己笨、IQ不够高,往往是要怒发冲冠的,其实这又有什么区别呢?话都说到这儿了,再次建议你如果不够自信,就跳过这一节吧,直接看第五节,好吗? 好了,把话题说回来,你已经成为一门合格的职业程序员了,如果要想成为从事软件系统设计的职业系统分析员,第一件事就是悄悄找一个标准智商测试的网站或其它渠道,严格认真的测一测自己的智商,如果IQ低于130 (正常智商是110),就请别费劲了,打消掉成为系统分析员的念头吧!好!好!先请你冷静一下,好好想想,其实微软面试时就是在测你的智商和逻辑数学素质呢,这就是本节的标题为天生神力的原因,因为设计就是从无到有地进行创造,无论是软件还是其它行业都一样,可以有借鉴的,没有现成的,设计就是创造!如果你IQ在130以上,又决心要当一名职业软件系统分析员,其实你不过是要准备好吃更大的苦而已,有什么好虚荣的呢? 修炼还是从基本功开始的,过程和成为一名职业程序员差不多。必须使用设计工具这一点是不用多说的。在工作中,你基本上遇到的是两类方式的设计,一个是结构化设计,另一个是面向对象设计,就个人经验而言,面向对象的设计更好。如果你工作中不得不采用结构化的设计,你必须熟练地掌握数据流图和控制流图的分析和设计,一般来讲,如果你把一个软件中用到的数据模型设计好了,针对功能化的流程,不难设计出数据流图,但下一步设计控制流图才是挑战,如果你按照需求走不通设计好的控制流图,那么你或别人在按照这个设计编程实现时,必定也走不通,没有奇迹会发生,还是在设计阶段严格要求吧,又有一点需要牢记:返工是最慢的。当你在进行控制流图的设计时,也不要妄想得到需求人员提供给你明确的指点,通常他们要是能够把需求的功能和操作次序写完整的话,你应该就感恩戴德了,从需求中整理出功能、操作的拓扑次序和条件是你作为系统分析员的职责。看看,要是没有一点图论的基础和拓扑学的入门知识,你是当不好一个职业系统分析员的,即使你天赋不错,必要的数学和逻辑素质仍然不可或缺。也不用气馁,永远没有最好的设计,只有更好的设计,反复地进行设计迭代,勇于推翻旧的设计,你将快速进步。如果你在工作中是采用面向对象进行设计的,那就更有利了,有关面向对象设计的书太多了,不用作者在此多费口舌,建议精读一本经典的书,比如北大邵维忠等编译的《面向对象的分析》,有些方法和技巧可能过时,但其逻辑的基本原理是非常正确的,其本质是,你在逻辑上是如何认识这个世界的,你就是如何设计软件体系结构的,然后读读其它书,触类旁通,自己创造机会多实践,成功自然会到来的,总之,不管是结构化设计还是面向对象设计,评价一下自己的软件系统设计方案吧,有好多指标呢,比如是否均匀和平衡?局部独立性强不强?有没有歧异的结构?有没有层次太多或太少?有没有某个层次太大、太广?是不是逻辑结构先复杂了再化简的?还是只会设计简单的,复杂不起来(这一点是笨哦,如果出现多次,请你不要意气用事,转行吧)?最重要的一点,是否容易理解、实现和改进?你自己会得出评价的。如果有机会看到别人的设计,一定不要错过学习的机会,自己推导一遍,认真比较比较,获益会较多。 走到这一步,你就应该关注设计模式了,首先还是学习,这方面的好书有的是,但一般在工作中用到的设计模式较为单一,应该多尝试一下其它的设计模式。其次必须要明白设计模式不是设计思路,也不能代替设计思路,比方你要从A到B修一条路,设计模式只是让你选择,是修水泥的还是柏油的?是高架路还是普通的,但线路必须你自己定,而线路就是设计思路,模式对思路是有影响,但不能代替,所以如果你的智商高达250,我相信你直接用汇编语言也能写出面向对象的程序来。第三在此有一个陷阱,很多系统分析员生搬硬套设计模式,全然不懂如何融会贯通,在你的一项具体工作中,往往是以一种设计模式为主,其它模式为辅的,思维不拘泥于形式才是关键,而且也为你到达更高的软件设计的境界做好准备。 唉!都不知该怎么向下写好了,因为已达到作者水平的极限了,我胡乱说一点,你凑合看吧。软件设计最终的层次是:以无法为有法、以无限为有限,这句话是李小龙说的,不是我说的。再拾人牙慧一把,类比一个故事吧,金大侠在《倚天屠龙记》里讲到张无忌初学太极,学会的标志是把刚学的招数全忘了,记住的是太极的道理和精神,和李小龙有些相似喔,软件设计也一样,忘记所有的设计模式,随心所欲进行设计才是至高境界,所以你能到达多高的软件设计的境界最终将取决于你的哲学素质,这一点实在是不好写啊,你自己领悟吧!作者只有祝福了!

五、职业人的终极目标:全面修炼,成为Leader 这一节更不好写,涉及到太多其它非技术方面的因素,特别是个人人生观和世界观的修炼,如果本帖的点击率超过作者私下期望的一个数值,那我就争取尽力厚着脸皮再补上吧。我只说一句,虽然大家都知道软件开发是一个团队性的工作,但追求参与一个大型软件系统的成功开发,是一名软件人员的本能,就像拿破仑说的不想当元帅的士兵不是好士兵,所以不追求实现大系统的软件人员,也不是一个好的职业软件人员,但你只有成为Leader,领导一个优秀的软件开发团队,才有机会实现这个终极职业目标,对不对? 好吧,不管你现在的感受如何,我都谢谢你能读到这里!我不习惯假歉虚,就不说什么作者水平有限,本文抛砖引玉,欢迎大家批评斧正之类的客套话了,虽然作者水平确实有限。所以我认为你尽管有权砸砖,但实在没必要搞回帖、或回骂、或顶之类的玩意儿,我只是尽兴写一点多年从事软件开发工作的体验,因此接下来我就高挂免战牌,不回复任何回帖了。再次谢谢你能有耐心读到这里!希望本文对你有所裨益,祝你成功!再见!

修炼一名程序员的职业水准[3]


有自己debug的特点,下面的说法作者不敢太肯定,只是经验之谈。即使在VC这种高度完善的开放环境下,你仍然应该要求自己仅凭打印语句就能debug.这也有两点好处,第一个好处是,遇到bug你会认真想问题所在,而不是用debug工具一步步简单地追踪卡在哪儿了,你定位bug范围的方式是从大到小、从粗到精,这是一种自顶向下的思维方式,而用工具追踪,容易形成自底向上的思维方式,这不算好,你应该先看到森林,再看到树木。我反复提及:程序就是逻辑过程,大多数程序从main函数开始,是由数据结构和功能子程序组成的一个树形结构的逻辑过程(要认清即使是面向对象的程序语言也是一样的),它的执行过程是深度优先的,但你定位bug应该是广度优先的,好好想想这一点,嗯?第二个好处是强迫你思考并记住而不是用工具看到调用过程,你大脑的抽象逻辑思维能力和胳膊上肌肉的力量一样,都是练出来的,如果你的bug是程序结构上的逻辑错误引起的,这一点就非常重要了,顺便说一句,最难打的bug就是程序逻辑结构错误导致的bug.你要是真正明明白白地认识到这儿了,那我就没什么东西可以告诉你了。总之,程序员的职业水准:生产效率和程序质量,主要是取决于源码中bug的数量和debug的速度,而不是取决于编写源码的速度。给你一个我自己定义的考查一个职业程序员的指标:一个合格水准的职业程序员,编程的时间如果算一份的话,其累计debug的时间不能超过一份,真正职业高手累计debug的时间应该控制在0.5份以下,如何?你关上门悄悄问问自己,你花费在编程和debug上的时间比例是多少?如果你把程序员作为自己一生的职业,那么就永远都要牢记一点:追求做一个0 bug的优秀程序员!这是任何一个想成为职业程序员的人的理想,请相信:坚忍不拔地追求实现这个理想将让你出类拔萃! 做好程序的单元测试,这是另一项考查你是否是一名具有合格职业水准的程序员的一个必要指标。其实在你拿到需求的时候就要准备单元测试用例了,并且这些用例将直接影响你的详细设计(有关软件设计本来是该放在第四节讲的).我们还是打比方吧,当你拿到一个需求时,除了分析它静态的功能外,还应明确它动态的操作/执行过程,把这个动态过程明确地用流程图画出来,比如分为A~Z的26步,其中A又可以进一步分解为A1~A5的5步,直到不能再分解为止。又比如说A3步不可分解了,那么你应该把A3步的正常操作和所有五花八门的异常操作都列出来,确保正常的操作肯定正确,异常的操作起码程序不退出才行。这样你就要写好多好多的测试用例,说句老实话,我也从来不写!但我一般会列一个提纲,比如A3步有正常的操作a、b、c、d、e共5项,异常的操作有f、g、h、i、j、k、l、m、n共9项,你在进行单元测试时都应该跑一遍,这样的程序都还不敢说质量如何好,但起码可以说较稳定吧!如果要想在进行单元测试时干得快、效率高,那么在进行详细设计时,你就应该把A3步中对所有正常操作和异常操作的判断都设计好,在编程实现A3步时,使得程序的结构合理高效,对不对?所以,如果你在工作中是割裂地看待软件工程中从需求、分析、设计、编程、测试等各个环节,恐怕水平很有限喔!但如果你在分析需求时就能看到测试的问题,并改进设计和实现,为此做好相应的准备工作,嘿嘿,整个软件开发过程你的效率会高很多,通常你在一个开发团队中就会高度自信的,你已越过当一名偏颇、露骨的高手的境界,成为一个平静的高手,这可是The best in the best!,用周星星的话说:是高手之高高手,因为别人看不出你高在哪儿,没见你有什么高招或特拚命干,但反正你就是干得又快又好、又省力。关于进行单元测试还有很多复杂的方法,在此本文只提到了最基本的一点,目的是让你在工作上考虑周全、安排有序,其它的自己琢磨吧,没有人能替你吃饱饭! 如果你是用C++编程,我再简单谈谈有关内层释放的一个小技巧,就是对所有你编写的类,在构造和析构函数中加打印语句,统计每个类在运行程序时构造和析构的地方,如果是配对的,那么起码没有对象类一级的内层在程序运行结束时没有释放,然后你就可以把打印语句删掉了,招数虽土,但管用! 还有其它一些好习惯,在这里我随笔写一些,你要是有不同看法也请一笑过之吧。编程时应该对齐缩进,一个缩进用一个tab键,一般是4个空格,严格遵守开发团队的编程规范也是非常重要的。一个子程序不应超过30行(不算空行),其内多重循环不应超过3层,否则都应该分裂成两个子程序,个别算法程序可以长一些,但也不宜超过200行。通常一个类的所有成员函数总和不宜超过1500行,多了就应该考虑分解成两个类(这个工作最好在设计时就完成).每完成一小段程序,比如15~30行,就立即编译运行,不要假装高手,先敲它一大堆程序,再编译运行,妄想一次成功,体验一种假爽的、虚荣的快感,或炫耀给别人看,这么做只能证明自己是一个不折不扣的傻瓜,装酷而已。因为只要有一次不成功,你就会花费大量的时间来调程序,别人的进度在这时就远远地超过你了,平常心是道,还是修炼真功夫吧!孙子兵法里关于这一点有明确的阐述,我就不引用了,但建议你真的不要这么干,除非你确实就是这样总是一次就成功的天才,那你还看这篇文章干什么呢?我又不是写给你们这些天才们看的。再就是有学会买好书、读好书,关于计算机和软件方面的书太多了,时间有限,比如有一个叫侯捷的家伙,几乎写的每本书都不错,张国峰的C++编程也不错,这只是我的个人意见啊,好书多着呢,列出来比这篇文章长好多倍,我就不多说了。还有一招,要是你运气好,能搞到一些著名软件系统的源码,好好读读吧,在此我只能告诉你,Linux操作系统的一些源码不错,是开放的,你可以合法地搞到,其它的不要说是我建议你侵犯知识版权啊!

程序员对经验的一点思考[1]


曾经有一段时间对经验不是很在意,甚至有过这样一种想法:总觉得经验会制约思维的能动性,会构成个体客观思考问题的障碍。

举几个自己经历过的例子:

1、在自己现在参与的这个产品研发过程中,一开始设计一组核心数据结构的时候,我们team里一个有经验的同事对一个我和老大作出的设计提出了不同的建议,我和老大也跟他作了一番讨论,他告诉我们以前他在一家大公司里就是采用他建议的方法解决了我们在设计面对的问题,但是具体到以前他们公司为什么要采用这个方法及其前因后果,他不能详细地作出解释。所以最终我和经理还是坚持了已有的作法。数个月后,在后续开发工作中,我的老大发现之前的那个设计的确存在一定的局限,而那位同事基于他的经验提出的建议的价值也显现了出来。于是在经过又一轮讨论,并结合现有的代码进行分析以后,我们决定对以前的设计作出调整,而因为这个设计用于一个比较底层的数据结构,其调整也造成较多的代码需要进行相应的重构。

2、最近我的老大在作一件事情。这件事情从实现上来看,工作量并不是非常大。但是在确定这件事情的目标特征范围上,他花了比预期要多得多的时间。因为之前没有相应的经验,不知道这件事情作到什么程度,涵盖哪些场景会比较适宜,于是只能通过使用现有的一些工具来获得一些实验结果,对实验结果进行分析,总结,以协助确定任务的特征范围。这份实验工作消耗了他大量的时间。

3、前一段时间,自己在作一件事情,老大跟自己的观点存在不一致,老大存在不同意见的一个重要的依据是之前在他的公司里,他们对相似问题的解决办法跟我给出的办法有所不同,但是因为这件事情是我具体在负责,细节方面他并不是非常了解,所以我总是能够找到一些具体的理由来证明自己观点的正确性。

在激烈的争论之后,老大没有继续试图说服我,让我选择了自己提出的方案。事隔半年之后,在加入一个新的feature的时候,自己发现之前的设计的确存在较大的局限性,而当初跟老大争论时老大提出的建议以现在的眼光看来还是比较正确的, 自己也不得不在已经基于原始方案展开一定工作的前提下再度考虑他提出的方案。

在第三个例子里,面对一个问题,自己作完一遍,要在真正遇到障碍以后,才能意识到问题的关键,而我的老大却能在第一次看到问题的时候就作出准确的判断。我想,这固然跟个体能力的不同,思维穿透性的差异有关,但是跟老大丰富的工作经验也有一定关系。

而另两个例子则更生动地说明了经验的重要性,如果说我的老大或是我在遇到问题的时候具备相应的经验的话,我觉得在很大程度上是可以少走一些弯路,至少是可以节约一些因为在问题空间里作尝试消耗掉的时间,加快项目的开发进度。

在我看来,经验是主观个体在实践过程中获得的一种解决问题的方法以及思考模式的积累,这种积累对于以后遇到问题的时候能够提供可复用的参考以及借鉴,是有着很大的积极意义的。但是如果采用不当的方式使用经验的话,也会给个体带来一些局限。

1、随着经验越积累越多,个体会倾向于将自己的经验视作自我的一部分,个体对自己的经验会产生一种维护其正确性,确保其不受攻击的心理,这就可能带来知见障了。

2、经验获取的过程中,有的时候,因为思维的惰性,个体只会知道经验的具体表现,而未必搞清楚了经验背后的前因后果。通过这种方式积累起来的经验往往不扎实,容易随着时间的推移而淡化甚至发生扭曲变形,其参考价值和借鉴意义也就大打折扣了。

冰舒 | 每一个生命都可以——“繁花似锦”


“没有一件事物是寻常的,没有一块石头以及石头上方的云是寻常的,没有任何一个白昼以及白昼之后随之而来的夜晚是寻常的,没有任何存在是寻常的,没有任何一个人的存在是寻常的!”所有的生命均可御用----“繁花似锦”。

两年前的一个春天,周末。我的朋友和我一起在上叙事的课程。她做导演的先生独自去郊外骑自行车。途中偶然被几树不知名的花儿所吸引,便走下路去,用手机拍了些图片带回家里,剪接、配乐,取名为《繁花似锦》。我的朋友看后被感动,第二天就带到了课堂上。

两年之后的这个春天,我接到一个邀请,去某地做一个关于家长与孩子们生涯发展话题的讲座。主办方给我了一个需求反馈调查表,“孩子不好好学习,怎么办?”“孩子不听话”“孩子没有想法该怎么办?”“如何让孩子有动力”…..读着读着,我脑海里忽然闪现出两年前的这个短片,回忆起那天那几支放大到屏幕上的,满满的花朵带给人的繁花似锦的震撼,于是我请我的朋友花了一天的时间找出了那段被时间淹没的视频。

我在想,或许可以在即将遇到的这些家长和孩子的生命故事的“此处”,多一些时间停留。于是我选择做了一场不一样的“兴趣岛”探索游戏,一百几十人加入了这个过程。并且我给自己的原则是:只是提问、提问、提问。以微距的方式去呈现:呈现花朵,呈现花蕊,呈现露珠,呈现细细的经纹,甚至呈现花瓣上少许的尘,还有阳光下斑驳的影子。

这个选择的所基于的信心是,对孩子们的相信,并且相信如果,如果你愿意去靠近,去好奇,去探究一个生命,这个生命就会在这种好奇和探究里还你以颜色,绚丽的颜色。

虽然经验告诉我,会有很多意料之外的惊喜。但是,仅仅一个“为留在这个岛上做辩护”的环节,就实实在在地让我被华丽地震惊了:

一个初二的女孩子从仰慕的作家鲁迅,谈到她心里向往大同世界,谈到人们在这里友善互助生活的细节和情景,谈到她将来要成为作家的梦想…..她的姑姑兴奋的用手机拍着这个过程,不停地说一定要拿回家去给家族里的人们好好看看,他们是如何忽略了一个天才。活动结束后,小女孩悄悄来到我身边,说谢谢给了她表达的机会,她终于有机会站在台上说出自己了想说的话!然后问我下次什么时候会来,她一定要动员她的父亲也参加。

另一个小女孩兴奋地描述她将会在南极的一个科考站里工作的情形,展示着这个观测站如何可以遥观银河,又如何可以俯瞰海底;一个孩子告诉我们,如何通过他的天文台可以将神秘的星空握在手心里;两个男孩共建的机场,通过全方位战略构想,设想可以为自己的国家争取空中乃至太空优势;一个如何有序管理功能健全,严格分区的现代化城市的方案、一个讲述为什么要做一名主持公平与正义的律师的理由、一个“思想家”的思想、一幅在15分钟内就完成的山水是如何连接到环境保护研究的、一个支持民族工业的企业家、纯粹的音乐人、画家与人与梦想……一朵朵花儿在那个礼堂里纷纷绽放开来,满满的花枝,或骄傲的指向天空,或在春风里欢笑摇曳,整整一个上午,礼堂里充满了他们描绘兴趣与梦想时,从生命的深处张扬出来的力量与美。我看到了,先是被惊呆,然后赶紧拿起本子写了满满几页,生怕遗漏了孩子只言片语的母亲;摘下眼镜偷偷擦拭眼角然后抬起头深深注视着儿子的父亲……

望着盛开的此处,我又想到盛开的别处。另外的一个孩子,一个中年女性,一个……个案、工作坊,一幕幕回闪。

他是一个高三的孩子,一个垂着头的“球星”。小组里分享成就事件,他一直低着头,几乎想不出自己有什么成就……我和他慢慢去聊他平时喜欢做的事情,竟然发现他是年级里的篮球明星,三分线内投篮命中率在90%以上…….于是,我问着,他讲着,点点滴滴,从一开始别人不带他玩,到慢慢能上场,再到能超越别人成为明星。学习篮球的整整5年里他是怎样一点点透过训练、观察、模拟、拜师学艺让自己取得成就的,当这个《明星之路》的故事得以呈现,这个大男孩脸上绽放出阳光一般的笑容,那种对生命的掌控感和自豪感从心底升起…..

一个中年女性,细细讲述她生命里渴望的故事后,仿佛是在问我,实则是在自问:我真的可以这样活着吗?!然后,她说:是的!可以!“自由之心,此生无憾!”那带着泪水的笑容,如花开带雨。

一个孩子的母亲,讲述着她儿时的梦想如何在养育孩子的过程里被激活,在一年年的训练里,“坚持”是如何让她一步步从梦想成为自己喜欢的样子到一点点靠近,以及她展示的富有穿透力和感染力的歌声…..…

当活动即将结束的时候,我播放了那段《繁花似锦》的视频,望着一双双被泪水湿润的眼睛,和那满屏绽放的花蕊,我的心底已经是花枝乱颤了。

生命,无论是春兰,还是秋菊,无论是夏荷还是冬梅,也或许是路边我们叫不出名字的花朵……“我企图生出枝叶,长成树丛……我来到这里,彻彻底底,只有一次。 ”这是生命的《企图》!无论她在哪里,都在努力的绽放,极尽自己生命的颜色装点着这个世界。常常在工作里,无数个那样的瞬间将我链接到拍摄微距时带来的感动里:路边花朵、石缝的小草、叶子上的露珠、甚至茎叶上的绒毛……

你如何看世界,世界便呈现出怎样的故事。为一个生命去停留、去靠近、去探究、去欣赏、去发现,就会被那放大到满屏幕的花蕊所触及所感动,就会从仰望的视角看到几乎可以遮蔽天空的花枝呈现出的繁茂。

所以这让我愿意去靠近每个有机会遇见的生命,并为的她的灿烂所震撼、所感动。“没有一件事物是寻常的,没有一块石头以及石头上方的云是寻常的,没有任何一个白昼以及白昼之后随之而来的夜晚是寻常的,没有任何存在是寻常的,没有任何一个人的存在是寻常的!”所有的生命均可御用——“繁花似锦”。

修炼一名程序员的职业水准[1]


假设你是一名软件专业毕业的本科学子,如何在工作中修炼成为一名有较高职业水准的程序员呢,本文试图总结作者从事15年软件开发工作的感想,希望对有志成为职业程序员的人有所帮助,并借此机会感谢原昆明工学院计算机系的和智玲老师和张怀宁老师,特别感谢我的硕士导师,南京大学计算机系的博导郑国梁教授。

注:本文辞尖刻,乃作者脾气秉性使然,如果你看着有气,就请多多见谅,放下别看了。

程序就是一系列按步骤进行的操作序列,它有好多种级别,比如最低级的微程序、次低级的汇编程序、高级的各种编程语言程序、最高级的脚本语言程序,也许我列的不对,但没关系,我要说的是不管是那个级别的程序,其本质都是操作的逻辑序列。大多数系统和应用程序都是建立在高级编程语言上的,比如C、C++、C#、FORTRAN、BISIC、JAVA等等,就让我们只关注这一级的编程能力吧。因此如果一个程序员的逻辑能力不高,他永远都不能成为一名具有合格职业水准的程序员,我们在下面的讨论有关编程能力的方方面面,最终都是为了最大程度地提高和实现一名程序员的逻辑能力。

一、掌握基础知识:十六年寒窗的持续积累 从7岁读小学起,经过16年的学习,你从软件专业本科毕业后,必须完成以下几门专业课程的学习:计算机组成、操作系统原理、汇编语言、数据结构、编译原理、数据库原理、软件工程、结构性设计语言(PASCAL、C)、面向对象设计语言(C++、C#)、计算机网络等,你最好还懂一些算法分析、分布式系统、计算机图形学、形式逻辑、人工智能原理、软件设计模式、软件构架/框架等研究生的课程,16年来,你积累的除了知识,更重要的是形成最适合自己的学习方法和工作方法。这些是你具备程序员职业水准的基础能力,不要受什么计算机软件怪杰之类传奇的影响,那不过是小概率事件,而且这些怪杰们就算没有读过软件本科和研究生,也往往自学了大多数专业课程,很可能比在校学习的学生对这些课程的精髓部分理解的更好,还有他们的工作方法和思维方式是特别而高效的,但普遍性差,可以借鉴,不宜模仿。好,所以现在你只需要问问自己,那些课程和知识都学会并掌握了吗?如果是,那就准备好进行实践了。

二、在实践中提高:成为一名高水平的Coder好了,你毕业了,在校功课都不错,也找了一个专业对口的工作,你想大展鸿图了,可是别急,你的翅膀还不够硬,不信我们说来看看。 通常,你在工作中都会用到某一种单位/公司固定的操作系统和编程语言开发环境,比如Windows、UNIX、LINUX等操作系统,又比如用VC、VB、PB、Delph、JAVA、Motif/XWindow、QT、OpenGL、OpenInventor等编程语言和开发环境,我们在后面把它们合称为开发环境。就在校学习的有关开发环境的知识而言,大概你距工作需要的差距是不小的,当某个操作系统和编程语言环境成为你的饭碗时,就不应也不能用通过课程/认证考试之类的眼光和要求来评价你的能力,即使你能考100分。你需要深入地学习该操作系统和编程语言环境的各类开发手册的所有内容,你会说大多数你都用不上,其实你既对又不对,对的是单从使用的角度而言,你确实用不上开发手册的大多数内容,比如庞大的VC开发类库和复杂的开发环境,你在实际工作中能用到的不到总数的1/10或1/5,不对的地方在于,你用到的部分不是孤立存在的,它们是整个体系中的一部分,只有对整个体系有了一个较完整的了解,才能得心应手、随心所欲地用好你用到的部分,你才算初步具备在这种开发环境下进行Coding的职业水准(还远不够程序员的职业水准呢),而这只是刚开始。如何才能真正掌握一种开发环境的全面的知识呢,最原始的办法就是读开发指南/教程、参考手册,一般来讲,学习开发指南/教程时,你如果是一个认真的人,都会完成5/10~7/10左右内容的学习和练习,如果你想成为职业选手,就应该完成9/10以上内容的学习和练习。参考手册不同,大多数所谓的程序员们只是用到了才翻翻,这差的太远了,你应该象读开发指南/教程一样,每个环节都要读,比如VC,参考手册中的每个类,类的每个函数,都要读上几遍,它们往往是一小伙一小伙地纠缠在一起使用的,开始时读得你毫无头绪、心烦意乱,不要紧,还有一手呢,如果你开发环境安装的全面,它们往往都有开发商做的demo例子可看,你就进入另一个境界了,开始时你关注demo中的具体技术,后来你发现这些demo的程序写的都还算不错,结构简单但合理,如果你真的用心,就一定能发现一些个别的demo是极品,它所展现的程序逻辑结构是你设计不出来的,你现在有点更关心它的程序设计构架,甚于对你原始目的(某种相关的技术/技巧)的关注,这时的你,开始了从一名Coder向一名Programmer的转变,你会忍不住要看看开发商提供的源程序,比如。h和。cpp,通常你会找到include路径下所有的。h程序,你才知道,哇!好多好多东东在参考手册中都没提到,你要学的太多了,没时间顾及其它的业余爱好了,现在知道为什么程序员是年轻人的职业了吧,你要有足够多的时间才行,即使你的智商有160.如果你走到这一步,在你工作的团队中,已经是经常有人向你请教技术问题,经常有人请求你帮忙debug,你已是公认的高手了,别得意,因为你仍然是个Coder,为什么这么说呢,你想想,你已深入了解了这个开发环境中的各种技能,知道一名Coder如何用好这些东西,可是你能设计的出提供给Coder们用的东西吗?唔,你想了想,可能还不太行。对了,就是这样,你还是一名小我境界的程序员呢,本质是个Coder,当然已是一名高水平的Coder了,然而你需要进一步登堂入室才能成为一名真正的程序员。 让我们继续吧,通常你都是从精通一种编程环境开始的,假设你已经较为精通在Windows下用VC开发软件了,这时在技术和技巧方面你将面临一小一大两个挑战,第一个小挑战是如果公司/单位改换了开发环境,比如用LINUX下的QT交互语言工具进行开发,你不过是把前面掌握VC的过程再来一遍,由于在主观上经历了VC工具的学习过程,在客观上各种开发环境都有太多相似的方面,这回你掌握的应该较快。要小心,在这时第一次诱惑之门打开了,因为你感觉良好,看!这回这么快,我就这么好地掌握了新的开发环境,你开始关注其它暂时还用不到的同类环境,比如VB、Delph、JAVA,如饥似渴地掌握各种开发工具,证明自己的学习能力和价值,但你忘了一点,你仍然是个Coder,只不过是一个在好多开发环境下都能编程的Coder,就像你生活在中国,因而精通了汉语,工作需要你又掌握了英语,然后你就来了劲,把俄语、日语、阿拉伯语、拉丁语,等等等等,都学习个遍,我只能说,有点BT.你忘了自己是个职业人,同一类的东西工作中用得到才需学习,太多太多的Coder们喜欢在一起比较和炫耀自己会掌握了几种开发工具,不信你看看招聘时的求职书就知道了,sigh!他们中绝大多数人永远都只能停留在这个层次上,心浮气躁,一生都再也当不成真正的程序员了。

修炼一名程序员的职业水准[2]


总结一下,其实你在这时需要的是对自己掌握新开发环境的能力的自信,而不是一遍遍地重复来证明自己。第二个大挑战就是你明白了只掌握VC是不够的,你发现自己有点浅薄,有很多东东你会用但你不太懂,很多方面支持VC编程的知识你都没掌握,比如操作系统的源码、网络协议知识、Windows 的注册表、进程和线程的基础知识、硬件驱动方面的知识、ActiveX、Windows 庞大的 API,又是一个等等等等,这些基础知识的学习和掌握可是要花费大量时间的,你再一次深切地感到时间太不够用了,因为这时的你大概有许多俗务缠身了,所以有点沮丧,还不用提IT业每天不知有多少新东西在发布,KAO,永远都跟不上,越拉越远了。哎!别气馁,振作一点,你还是忘记了自己是个职业人,既然好多东东在工作中你永远都没机会用,那么干嘛要学呢?用什么才学什么,最多预测到马上要用什么,先一步学什么好了,要知道没有人是真正的、无所不精的全科大夫,除非你是神,但如果你还在耐着性子看这篇文章,你肯定是个人嘛。 OK,一般工作后三五年,你经历了上述过程,经受了诱惑和考验,终于明白了一个道理:你要的是强劲的学习知识的能力,是对某种软件知识/技能的有深度的精通,一种摸到它的根的深度,而不是已掌握的技能的种类和数量。这时无论谁用他掌握了多少种你不会的技能来吓唬你都没用,你对他的层次只有蔑视。通过几年的学习和工作,要记住最重要的一点,永远最重要:对自己学习IT知识能力的自信,一个程序员一生都要不停地进行高强度的学习,用心问问自己,有没有这个自信?别用虚荣心来骗自己哦,如果没有的话,那就不必花费你宝贵的时间向下看了,作者在此感谢你有耐心看到这里,现在建议你关闭这篇文章,趁着年轻,当机立断转行吧!

三、注重逻辑:成为一名职业程序员 好,再前进一点点,你就要成为一名职业程序员了,让我们继续来完成这个任务吧!我们在前一节提到过,你发现一些个别的demo是极品,它所展现的程序逻辑结构是你设计不出来的,你现在有点更关心它的程序设计构架,甚于对你原始目的(某种相关的技术/技巧)的关注,其实你是在关注这个demo程序作者的思维逻辑,所有程序的本质就是逻辑。技术你已经较好地掌握了,但只有完成逻辑能力的提高,你才能成为一名职业程序员。打一个比方吧,你会十八般武艺,刀枪棍棒都很精通,但就是力气不够,所以永远都上不了战场,这个力气对程序员而言就是逻辑能力(其本质是一个人的数学修养,注意,不是数学知识).逻辑能力也是逐步提高的,开始时你一定是用直观的逻辑能力来编程的,怎么想就怎么编,不对就再改,在改进中提高自己的逻辑能力,从直观逻辑能力提高到抽象逻辑能力,这是很正常的。提前说一句吧,到达逻辑能力的至高境界,其表现是用数学语言来描述问题和问题的解决办法,高度抽象!好,说回来吧,你要提高逻辑能力,最快的办法就是读别人写的结构优秀的程序。优秀的代码是百读不厌的(这句话是我抄来的),暂时放放对其中某种技术和技巧的关注吧,你要推导和学习的是这些好程序的逻辑结构,它们是被精心设计出来的。你可以先捂住这个demo程序,自己设计一个功能相同的程序结构,然后比较一下demo的程序结构,如果差距较大,那你就不应简单地改进一下,而是要把demo作者设计的过程在心里复原一遍,做到这一点也许有点困难,但这种事干的多了,你就会越干越快,越来越得心应手,你的逻辑能力飞速提升,你能看得上的逻辑结构优秀的程序开始不多了,下一步就是练习。从工作中开始吧,如果你有空闲,你需要做至少两类练习,一类是算法练习,所有的经典算法都是经典的逻辑,题目有的是,像个好学生一样吧,每年的国内国际编程竞赛都有逻辑要求非常高的题,你可以只选一两道难题来做做。当你可以把复杂的单递归程序(只有A调A)变成非递归程序时,已经不错了,如果你能看得懂双递归程序(A调A、A调B、B调A、B调B都有),我为你鼓掌!你不必往下看了,我有点不好意思啦――班门弄斧,你快滚蛋吧!另一类是把以前和当前你工作中你不满意的程序推倒重新设计一遍,这非常重要,省时省力,因为你熟悉需求,技术上也没问题,目的就是改进程序的逻辑结构,很划算哦,唯一要克服的就是:你对推翻以前工作中那点小小成就的心理障碍,如果你真想优秀,说句粗话:这点心理障碍算个屁,一遍遍反复地推倒已有的成果只能使自己快速进步,放手干吧,没什么好可惜的,马恩早就在《共。产。党宣言》里说过了:在这个过程中,你失去的只有锁链(禁锢你思想的锁链). 让我们来总结一下,经过自我否定后,再生的你尽管对过去的业绩还有一些眷恋,但已是一个初步具备职业水准的程序员了,掌握了相应的技术和技巧,具备了较高的抽象逻辑思维能力,最主要的特征是:能自觉地自我否定,不断地追求更高水平的逻辑能力。 在这个过程中,如果你能注意以下一些小的方面,你前进的步伐也许会快一些。 从编译原理的角度来理解你工作中使用的高级语言,如果你做到这一点,至少有两个好处,第一个好处是避免一大堆低水平重复出现的编译错误。一名优秀的Coder平均在一个工作日中应该完成200行以上的源码,其编译错误应该控制在5个以下,要知道这200行源码不是一次完成的,所以大多数情况下你都要追求一次编译通过,而一名职业水准的程序员,应该进一步做到即使用purify这类的工具来检查源码,也不会存在严重的内存泄露。第二个好处是可以提高源码的可读性和效率。规范地编写你的代码使你自己的逻辑清晰,因为你明白多加几个括号和空行、多换行对齐、多注释,编译器是会自动识别的,不影响程序执行的效率,反过来,控制好递归调用和循环内的if语句才是提高程序效率的关键,要全力避免递归,但要深刻理解递归,能通过自己建立堆栈来把递归程序转换成非递归程序,要求还是较高的哦! 避免思维陷阱,只要你是人就一定有自己的思维惯性,这一定又会表现在你的程序逻辑中,有时你就是从这个惯性中跳不出来(谁都有这个时候),但要心里有数才行,所以你需要帮助,如果你有几个水平相若或更高的职业伙伴,太好了,当遇到花30分钟还打不下的bug时,就别浪费时间了,找他们吧,最要紧的是能思路清晰明确地表述你的问题,通常你自己在这个过程中或者伙伴中就有人把问题解决了,又快又好。另外,有几个可以良性竞争的职业伙伴是人生的一件幸事,1+12,大家各有所长,你最好做到及时公开你的成果,技不压身嘛,IT发展的这么快,你再优秀,那点东东也没有什么值得隐藏的,所以你可以技术或水平不够高,但千万不可以让真正具有职业水准的选手鄙视你的职业品质和行为。

以上《好程序员的习惯之一 积极解决每一个问题》一文,由编辑精心撰写而成,希望对您的职业规划有所帮助,更多精彩请访问“如何做一个懂礼仪的职场人”专题!