关于程序新手入行的分析与看法

一、关于应届生就业时选择大公司还是小公司问题

很多人在第一次求职的时候几乎都会遇到“到大公司还是到小公司”的问题。他们认为大公司的薪水高、工作稳定、技术水平高、升迁机会多,但是,大公司要求高,竞争激烈,自己怕进不了;而小公司薪水相对低一些,工作稳定性较差,技术水平参差不齐,升迁机会不多,但是,录取率相对较高。这可能是各种求职中的一个常见话题。这个选择应该是因人而异,几乎没有什么正确答案。所以,我们看到过选择大公司的人获得了成功,也看到过选择小公司的人获得了成功,相反的情况我们同样也见到过。

作为程序员的求职,我想还是具有职业特殊性的。程序员职业和一般的职业有很大的不同,程序员职业有其鲜明的特点:1)个人劳动;2)产品可复制。这两个特点注定了程序员有很大个人发展的空间。

1.个人劳动

表明其工作主要和劳动者自身有关。无论是程序员独自承担一个编程项目,还是在一个项目中承担部分编程工作,都可以归结为个人劳动。不像有的职业需要昂贵的劳动设备,依赖昂贵的设备,例如:炼钢工人必须要有炼钢厂的炼钢炉;也不像有的职业需要其他人联合劳动,例如,流水线上的装配工;也不像其他职业有严格操作规范和工作流程,例如,制药厂必须按照制药的配方生产药品。

程序员只要有台计算机(其价格可以忽略不计)就可以工作了,而且在工作时是一个人在工作(工作前后以及项目的衔接可以忽略不计)。其编程过程完全取决于程序员个人的技术水平发挥。

2.产品可复制

绝大部分企业生产出的是实物产品,每个产品都需要投入一定的原材料,价值很大限度上与其原材料的成本有关。劳动者生产一件产品,其最大的价值就限制在这个产品的售价之内了。

而程序员生产的产品是软件,软件最大的特点是可复制性,而且可复制得不计其数。因此,程序员生产软件的价值就是软件拷贝数。当拷贝数不断增加的时候,程序员生产的软件价值就在不断增大。一个软件最大的价值等于其单价乘上可能的用户数。如果这个用户数是成千上万的时候,程序员的一个劳动价值可达到一个天文数字。所以,世界上成功的软件企业,正是这种可复制性的受益者。

程序员的这两个职业特点表明程序员的发展空间很大。程序员不管是在大公司还是在小公司都能获得成功。只要这个公司能生产和销售出可复制的软件,程序员都能够获得比职业高得多的收益。关键是程序员是否具备编制这些软件的技术,这些软件能否被大量复制(定制软件价格高也行)。

比尔·盖茨正是成功通过编制软件而将微软发展成为一个软件帝国的。在现实生活中,也有一些成功的程序员自己当上了软件公司的老板。不成功的也有很多,但是,其中的原因不在此,我会在后面的内容中加以分析。

通过以上分析,当程序员面对“选择大公司还是小公司”的时候,我建议:

1)在程序员趋向于安稳工作的情况下,而且具有大公司所要求的学历、经验、证书、能力的时候,应该首选大公司。这些大公司指的是国内外著名企业,有的甚至是地区内著名企业。进入大公司后,可以保证收入高,岗位稳定。

2)在程序员技术水平一般的情况下,想进大公司也可能是一个梦想,那只好选择小公司了。小公司的好处是起点低、机会多,缺点是收入低、开发不规范。

3)对于有理想和抱负的程序员,我建议先进小公司,然后再进大公司。小公司专业化分工比较粗糙,有的甚至一个人就会负责一个项目,对人的锻炼机会很多,程序员既可以学到编程,又可以学到设计和项目管理,往往会成为一个“全能型”的程序员,这对程序员以后的发展有很大的好处。但是,程序员在完成编程积累之后,应该转向到大公司发展,学习大公司的软件开发流程、团队意识、大项目的开发经验、规范和管理、企业间的合作以及技术交流和运用等。

4)我们知道软件能否复用是软件小公司发展的关键。因此,我们在面对软件小公司的招聘的时候,我们应当对公司在软件行业应用的范围,以及软件的客户数有所了解,以判断小公司的成长性。当小公司成长性很高的时候,你的选择应该是正确的,当小公司成长性很低的时候,你若选择,就有可能不正确。

5)那些缺乏远大理想的程序员,只是把软件当做普通工作,求得平均工资和正常收入的程序员,最好能找到一些工作较为稳定的部门,以保证有一个稳定收入。这些人即使进入大公司、小公司,都可能面临解雇的危险。最好的情况就是处在一个岗位多年不动,工资多年不涨的局面。

对于有理想的程序员来说,无论进入大公司还是小公司,都是一个积累过程,都是一个锻炼自己的天地。对于普通的程序员来说,进入大公司则实现梦想更容易些,进入小公司则可能存在诸多困难。只是前者取决于自己,而后者取决于别人。而关注公司成长性则是两者都要重视的,毕竟这和自己的当前和未来收入密切相关。

总之,我想说程序员是一个很特殊的职业,它给每个程序员造就了一飞冲天的可能。关键是程序员自己是否有这个想法,能不能在进入各种公司之后,积累和提高自己的技术水平,为一飞冲天做好准备。

关于新手面试常见问题和对策:

招聘面试是一个用人单位(面试官)与招聘者之间的博弈,不同的应聘者、不同的用人单位、不同的面试官会产生不同的面试过程和不同的面试结果。因此,如何应对面试是很难有什么正确答案的。但是,大量面试沉淀下来的各种成功的经验和失败的教训却是我们可以参考的。

在日常生活当中,常常有朋友和同事找到我,向我询问他们学计算机专业的孩子在面试时要注意些什么。也有一些软件公司因为和我比较熟悉,请我在业余的时候为他们招聘人员把把关,提提意见。在单位的时候,有时候也会带上实习生,也会面临培养新员工的问题。因此,我见到新手的机会相对比较多一些,加之自己也是从新手走过来的,所以对新手相对了解一些。可以说我身兼了被招聘者和招聘者两种角色。客观了解和分析这两者的面试心理可以让我们面试时心态更从容和平和一点。

作为新手,主要是一些刚毕业的大学生,他们很少有编程经历,很少有人能把学的东西与现实对上号。但是他们求职心切,急需通过录用来证明自己的社会价值,证明自己的独立生活能力,因此,他们在应聘中一直处于弱势地位。

作为面试官,肩负着企业招聘员工的重任,知道企业招人的急迫性和招人的标准,当应聘者众多的时候,其招聘要求应更加严格;当应聘者不多的时候,要求就可能放宽。他们拥有招与不招的大权。在招聘中处于强势地位。

二、新手在面试时常见有以下几个问题

1.简历灌水

新手在求职时,往往会投寄和递交简历。这些简历对用人单位了解应聘者的意义重大,这是用人单位对其第一印象。现实中有很多简历言过其实,例如:“精通C#、Java语言”,其实远远达不到精通的水平。“开发过某某项目”,实际上仅仅是参与过这个项目,在项目中作用微乎其微。这样言过其实的部分往往会在“掌握语言”、“编程水平”、“英语水平”、“项目能力”、“团队精神”、“学习经历”、“学习成绩”有所体现。有的人明明没有学过C#,但是他敢于写上自己精通C#。

灌水的直接结果就是应聘者在面试时,显得很尴尬,显得很不诚实。例如用人单位急聘C#程序员,看到简历上精通C#之后,必然会在面试时问及C#编程情况,在某些情况下,还会出一些C#编程试题。如果这个新手并不精通或根本不会C#,其结果就可想而知了。

很多新手认为,你不写夸大一点,你可能连面试的机会都得不到。但是,到了面试,一切都会暴露的。我认为,在简历上诚实地写清自己的各种情况和水平,这可能更容易得到用人单位的认可。如果自己掌握的东西不够的话,还是应该把应该掌握的东西在应聘之前多掌握一些,把真实的自己展示在用人单位面前。

大家知道,在招聘程序员的时候,面试官中一定会有一个懂程序的高手(用人单位的高手),而这些人自信心很强,具有好斗的潜意识。你说强,他就要让你把强说出来,好让他表现自己。所以这个职业特点注定你不能太夸大自己。

2.恐惧心理

由于新手处于弱势地位,其恐惧心理很严重,有的大学生社会实践比较少,连起码的见面礼节和打招呼都忘了。有的人在介绍自己的时候话不成句,声音极小,连面试官都听不清楚,尤其是被问到程序方面问题的时候,更是紧张得词不达意。几乎所有新人都有恐惧心理,只是恐惧程度有高有低罢了。恐惧心理使应聘者留给面试官的印象不好,他会认为你社会经验比较少,沟通力差,还是一个学生。

可以通过时间和经历来克服恐惧心理,新手平时要注意这方面的改进,讲话声音尽量大一些,说话要尽可能多,话与话之间尽量连贯,在说话时,眼光要尽量看着听者。新手可以找一些同学、老师、家人当做面试官练练兵,一次不行二次,二次不行三次,多练几次就会好得多。

3.表现欲强

程序员中也有一些表现欲强的人,这类人动手能力相对强一些,对新技术有追逐的爱好,有的也做过一些项目,自己也赚过一些钱,有的认为自己已经会编程了,有的认为自己已经是高手了,他们在面试时表现出了那种过于自信的谈吐。有的甚至会问面试官知道不知道某个东西,这往往让面试官感到不快。因为在企业工作的程序员或项目经理都知道技术水平的提高是没有止境的,否则,他们也不会来招聘新人。他们既要看到应聘者的能力,又要看到应聘者表现能力的方式。他们认为,那些过高看待自己的人往往在团队合作上容易出现问题。而且夸夸其谈的人往往和那些没有真实能力的人画上等号。

面试时,缺乏能力的时候,要表现出能力;缺乏风度的时候,要表现出风度,应聘者,切记不要班门弄斧,弄斧可能伤到自己的脚,如果想要表现自己的话,可以在同学、家人、陌生人面前尽情的表现,虽然这些表现可能不会影响你的应聘。

不过,有的企业不把表现欲很强的人录用为程序员,而是把其录用为软件销售人员,这种情况在现实生活中也真的出现过。

4.准备不足

很多企业和单位在招聘的时候对招聘岗位和人员要求都是很明确的。但是,有的应聘者往往对此没有针对性、重点性的准备。例如,某用人单位要招聘有金融软件开发经验、熟练使用C#语言的程序员,很显然用人单位是要做金融方面程序的,而且缺少C#程序员。应聘者应该针对金融方面的知识和C#语言两大方面多做准备,如果你有金融软件开发经历,那就要在面试时突出这个方面的内容,如果没有,你最好多准备金融方面的知识,谈谈对金融业务的理解和自己的看法,表明你对金融软件的了解程度。同理,在C#方面,也要针对C#在金融软件方面常用到的技术做些准备。这样有的放矢地回答面试官的问题,总比摆出一副叫我做什么我就做什么的架势要好得多。

许多新手对用人单位的性质、员工人数、工资状况、同业中排名、产品方向、单位特点、发展趋势、可能笔试、面试的内容都无准备,便匆匆应聘,其结果是可想而知的。机会总是留给那些有准备的人。

5.性格内向

由于编程是一种个人劳动,很多学程序的学生很自然地沉浸于个人世界里,与外界交往和交流并不主动和积极。表现在与人打交道上很内向,少言寡语,给人看上去很“老实”的感觉。这些人往往对自己很自信,却又埋怨别人不理解自己的能力。在面试时,往往和面试官形成一问一答那种很机械的场景,严重缺乏主动性,从而给面试官留下一种很不自信的印象。除了女人找对象要找“老实人”之外,很少有软件企业要招那种性格极端内向的程序员的。

在当今项目规模越来越大,项目内部越来越需要协调、交流和合作,软件开发更需要团队精神来支持。无论是交流意识、交流方式都是优秀程序员必须具备的。所以在面试的时候,要避免一问一答,要主动地在重点问题上谈谈自己的看法和想法,主动和面试官进行沟通,这样面试官自然会对你另眼相看,我们不排除的用人单位喜欢雇用性格内向的程序员,但那毕竟是少数。

6.逻辑不清

程序员最重要特征之一就是逻辑性,凡事要讲逻辑、讲条理,有条理才能成为程序。但是,面试时也常常遇到一些应聘者答非所问。如果你要问他多高,他绝不会回答他1米70,而是可能回答“今天上午我才赶来面试的”。你要问他常用的排序方法有几个,他绝不会回答有3个,第1个是什么,第2个是什么,第3个是什么,而是回答让你不知道他在说些什么,也许其中有那么个排序的名词。对于那些没有什么正确答案的问题,那更是能回答得云里雾里,听不出其中的头绪。可以说这种人说话和思维缺乏逻辑,能把一个简单事情复杂化,能把一个真实事情虚无化。

这种人在理解别人的话的能力方面,在处理问题的能力方面,在逻辑方面都很欠缺。如果不加以注意和改进,那么进入了程序员这个行业后,自己痛苦,同时别人也会跟着痛苦。了解这些后,应聘者在面试时,一定要集中精力,要充分理解面试官提问的真正意图,回答简明而有条理,不懂也不要胡乱说。只有这样面试官才会认可你是做程序员的材料。

7.潜力不明

用人单位招收程序员一般有两种类型,一类是招来即用的,一类是培训后使用的。对于前者,用人单位招的是和自己项目开发最接近的程序员,比如之前做过此类项目最好(挖同行的人员),招人的标准很明确,能干则要,不能干就不要。针对第二类,主要是看应聘者的各方面素质,看看是否通过培训后能逐步成为单位的有用之才,所以标准比较宽泛,无论是应聘者还是招聘者都有很大的选择范围。很多应聘者并不了解这些,在面试的时候,没有主动地表现自己各个方面的素质,表明自己是一个有素质和潜质的员工,以获得面试官的认可。

有一点要特别说明,应聘者千万不要过度地表现自己的学习欲望,说一些“到单位之后,我会好好学习的”之类的话,认为用人单位是一个学校,只要当一个好学生就可以了。用人单位要的不是一个学生,不会提供一个免费培训基地,而是让你为它创造财富的。面试官特别不喜欢那些已经走出校门而思想还没有走出校门的应聘者。你不如说“我到了单位后,将多做工作,为单位创造财富贡献自己微薄之力”之类的话,这反而更能让面试官认同。

应聘者的语音语调、着装打扮、递交材料方式、等候面试、介绍自己的分寸、对用人单位的关注度、对自己未来的企盼、对自己可成长性阐述、对自己不懂问题的回答等面试中的细节,都可能是面试官对你产生印象的一个因素。这些因素的综合形成了面试官对你的素质的判断。

面试官可以理解你现在编程技术达不到所要求的水平,但是不能容忍今后你达不到所要求的水平。关键是让面试官看到你的潜质。

总之,新手在面试时,要准备充分,要端正自己的心态,即不要过分地表现自己,也不要恐惧犹豫,说话要条理清楚,注意面试中的各个细节,尽可能地向面试官展示自己良好的职业素质,展示自己未来的发展潜力,这样面试官就可能对你有一个良好的印象,有助于获得这个就业机会。

面试只是应聘者素质的集中反映。素质的形成可以是在面试之前,也可以是在面试之后。只要我们注重培养和提高自己的素质,我们就可以在任何时候面对任何的面试。

 三、关于薪水的问题

上班了!拿工资了!从学生转变成社会的劳动者,这是人生阶段的一个重要转折标志。当拿到自己的薪水之后,是喜悦、是满足、是苦恼、是无奈,每个人的感觉都是不一样的,我记得自己第一次领到上班的工资不到10元钱,兴奋异常,忙着请客庆贺。而今一个新手拿着2000多元的薪水估计也不会欣喜到哪里去。

程序员注重自己的收入与其他所有劳动者一样,注重自己的收入是天经地义的事情。只要是为了谋生而工作的(为了其他目的,如爱好、兴趣、自我实现等而工作的,不在我们谈论之列),都会注重自己的收入。几乎没有一个人会认为自己的收入高,所有的人都希望自己的收入越高越好。这个原因主要是人对金钱的追求是无止境的。

现实中程序员对自己的薪水还是有很多苦恼的。

1.从宏观上看收入

从宏观上看,由于程序员所处的行业或企业不同,其收入的差距确实存在。所以,当程序员看到在其他行业工作的同学所拿到的工资时,就会感叹自己拿的工资太少。我初步估算了一下,新进软件公司的大学生的工资收入一般是当地最低工资的2倍左右。

2.从企业内部看收入

在一个企业内部,由于各个部门或职位分工不同,其工资也存在较大差异,而且在不同的行业中这种差距也比较明显。

作为软件公司的程序员一般是公司收入最低的阶层,而作为用户单位的程序员的收入一般处於单位平均工资的中等水平。总之程序员的平均收入水平是不高的。而程序员本身也因工龄、技术能力、项目的不同而收入不同,有的程序员升任到了设计师、项目经理,其收入也能是普通程序员的5~10倍。这种眼前工资的差异也会让新进公司的程序员心中有所不平,尤其是看到和自己一样工作,甚至能力不如自己的同事,拿着比自己高的工资,这种心态尤其强烈。

3.从话语权看收入

程序员除了感到收入低之外,还会对自己的薪水制定没有话语权感到沮丧,而且也会为奖金有无,分配问题激动,还会为收入不能满足各种生活支出而感到无奈。大凡与收入挂钩的事都会让人苦恼不已。

现实,现实,还是现实。程序员不但要学习技术,还要学习适应社会,增加自己的社会知识和经验。我们无法掌控薪水的多少,薪水不是靠我们想出来的,就像发财不是靠做梦就能实现的道理一样。所以我们要学会“自己不能左右的事不要多想”,多做些自己能把控的事,例如,有想象的时间不如把自己的工作做好,把自己的学习忙好,把自己周围的人际关系搞好。

从另一个角度来看,新进公司的程序员至少在3个月到半年时间内还是处于学习和适应阶段,还没有能力为公司创造利润。从市场经济的“等价交换”原则来看,程序员此时对公司来说是负效益的。而那种只要上班就必须给我工资的想法是一种很天真的想法。在这段时期,如果程序员能想通这个道理,就不会为薪水烦恼了。

建议程序员换一种阿Q的心态,毕竟自己要比那些没找到工作的强呀。

有了好的心态,我们可能更加现实,可能更加有利于我们在这个社会的成长。今天的薪水也许很低,但是必须承认我们的水平也很低;我们眼前虽然有收入比我们高得多的程序员,但是总有一天我们也会达到他们的收入水平。如果我们能认识到这点,抓住一切时间去学习、工作、提高自己的工作能力和技术能力,提高自己的社会生存能力,我们可能就会缩短自己的成熟时间,我们也可能缩短新手的低薪水的时间,而增加自己的高薪水时间。

程序员的能力是最重要的,而能力需要得到程序员的理想支持。在程序员这个职业中,心有多高,薪水就会有多高。

四、关于工作中遇到问题如何解决的问题

我们已经知道了新手如何学习一门新的语言,那么对于已经掌握一种或一种以上的程序员如何学习一门新的语言呢?由于程序员已经有一定语言基础,形成了自己的一套学习方法和思维定式,所以这个问题还是和新手学语言有些差别的。

在现实生活中,我发现不少程序员因为工作的需要而学习新的编程语言。他们心怀恐惧,不知道自己能否学好,而且学习方法非常传统,像新手一样:首先去买本这方面的书(或者借本书,或者网上阅读),看完以后再动手。但是,我不知道他们是怎么看书的,是从头到尾地看?还是挑选着看?他们关注书中的什么内容?第二种情况是程序员动手能力特别强,先把语言安装起来,先编起来再说,但是他们不知道这个过程有多长,何时是终点。无论哪一类程序员,当你向他讨教如何学习一门新语言时,大都是仁者见仁,智者见智,而且几乎没有人能从头到尾说清楚。若不信,读者可以自己回答这个问题。

其实,程序员学新语言是有讲究的。学习与自己现在使用的不同类型的语言难度最大,相同类型的语言难度就小些。当掌握过程语言(如C语言)的人去新学面向对象的语言(如C++)时,难度就非常大,因为这两种语言的思想是完全不同的,用过去的定势去思考新的语言,那种痛苦是难以言表的。例如VB程序员去学VFP、PB等同是C/S类开发程序相对就容易得多。又例如,VB程序员去学ASP就很困难,因为一个是C/S,一个是B/S,虽然语法上相差不大,但是架构差距很大,很难马上适应。所以,学习新的语言,第一个要分析这个语言的类型自己是否已经掌握,如果已经掌握,那么学习的时间会很短,一般在一个星期到半个月就行了;如果没有学过,则学习时间会很长,一般要2~3个月或者更长,而且非常痛苦。

对程序员而言,学习新的语言,第一,建议不买什么资料,买了资料也不要花时间一字一句地去看。主要的学习手段就是动手编程序,通过在编写范例程序的过程中学习!第二,一定要找到一个懂这种语言的人,如果能够找到人问的话,一定要找人去问。这个时候和新手找人问是完全不同的,因为新手会听不懂别人所说的一些基本概念,这会引起高手的不耐烦。第三,程序员千万不要自己去“刻苦钻研”,因为,程序员有一定的语言基础,心中只要记住“流程”、“语法”、“调用”(见1.2节)就可以了。

程序员在掌握编程的流程之后,可以通过编写以下三个程序:

1)显示“hello world!”程序。

2)打印日历程序。

3)“学生学籍信息”处理程序。

来掌握新语言中的语法和调用方法。当然程序员自己也可以选择编写自己的程序以达到学习目的。

与新手不同的是:

1)要特别注意语言的语法差别。一般来说,语言的语法差别很小,但是很令人讨厌。程序员学过之后往往会混淆不同语言的语法。例如,有的语句是以分号为结束符的,有的语言中的语句是以回车符为结束符的。如果混淆了,你就会一会儿加分号,一会儿不加分号的。尤其当程序员对原先语言特别精通时,这种操作惯性是很大的,因此也特别烦人。

2)要特别注重程序的调试方法。因为除语言本身之外,如何调试也可能不太相同。调试对于程序员来说太重要了,必须加以关注。

3)要特别注重程序运行环境。程序编出来了,生成exe可执行文件了,但这并不意味着程序就能执行了。例如,用C语言编写的程序一般是不需要额外环境的,直接运行就可以了;用VFP编写的程序,则需要系统中安装VFP系统DLL,因此,VFP程序要做安装盘;C#则需要更多的环境才能执行等。

4)要特别注重程序中的各种调用。由于新学的语言往往功能更强,涉及调用功能更多,程序员要关注新语言如何调用的问题,调用也是今后程序编写的最重要的内容。

程序员按照这种方法去学习新的语言,刚开始一定会感到寸步难行,可能会遇到很多困难。但是,我相信只要程序员知道整个学习的流程,知道下一步工作的目标,他的进步会越来越快。我最不希望看到程序员在学习上表现出自发、盲目、恐惧的精神状态。

五、新手和高手

入门之前,很多程序员心里有一个高手情结。通过书籍、媒体、传说渲染,他们认为IT行业是一个高手林立的行业,好像这些高手创造了这个行业的奇迹。这些高手可能是国外的,也可能是中国的。这个高手可能是一个具体的人,也可能抽象于某些著名软件背后看不见的程序员。只知其名,不闻其声,这个时候的高手是一种无所不能的神,一种虚幻,是令程序员崇拜的偶像。

到了工作岗位之后,这种高手情结更加严重,由于新手发现自身技术水平有限,而内心想尽快摆脱这种状况,使得很多新手对高手感觉更加恐惧和渴望。我发现在IT行业中,中国程序员认为外国的程序员是高手;网下的程序员认为网上的是高手;搞硬件的人认为搞软件的是高手,搞软件的认为搞硬件是高手;搞应用程序的认为搞系统的是高手;搞界面设计的认为程序员是高手,程序员认为搞界面设计的是高手;年轻的人认为年长的是高手,年长的认为年轻的是高手;企业内的程序员认为企业的外部程序员是高手;客户单位内部的程序员认为软件公司是高手,软件公司的程序员认为客户单位内部的程序员是高手等。所有这些高手都是建立在程序员本身对某个领域无知或掌握不精的基础上。因此,高手的多少是和程序员的水平成反比的,如果程序员水平高,那他眼中的高手就会少;如果水平低,那他的眼中的高手就会多。所以,不同程序员对待高手的标准应该是不同的。

高手情结是新手的正常心理现象,它反映了程序员对未知领域的向往,说明程序员还有远大的理想,还有激情,还有奋斗的目标。关于高手,我想新手应该关注以下几个方面。

1.向身边的高手学习

身边的高手,一般是新手的第一个师傅,也就是第一个培养他的那个人。这个人对新手来说是一个决定其技术命运的人。程序员很多人可以忘记,但是第一份工作,第一次带他的人是很难忘记的。假定这个师傅带他的时间有一年以上,我想从这个程序员身上一定能够看到其师傅的某些影子。比如说,这个师傅喜欢的语言,这个师傅喜欢的编程格式等,都能在新手身上找到。

作为新手来说,除了要向他的师傅学习之外,也要把身边的同事看做高手,要向他们学习,只要单位或团队范围内有比自己强的,不管这个人是早于自己进入这个单位一天,哪怕只是一个函数、一个语句、一个调用、一个算法都值得去讨教和学习。这个时候学习是很实在的,是能解决具体问题的。

向身边的高手学习,就是要充分利用身边的优势,可以面对面地接受别人的技术传授。新手千万不要顾及面子,或不好意思,或怕麻烦别人,能请教的就赶快请教,学习是硬道理。向别人请教不仅仅是去弄懂某个问题或解决某个问题,更重要的是培养与人沟通和建立良好人际关系的习惯。

新手千万不要有那种有人会主动帮助自己的幻想,一方面是大家工作都很忙,另一方面很多程序员不习惯于主动帮助新手。

要注意身边的高手并不是所有问题都能解答的,遇到这种情况,新手不要吃惊,很多“伪高手”就是在这个时候被揭开其伪装的。对于他们,新手要怀有宽容的心态,应坦然面对,不要深究,这个人不能解答,那就去请教另一个人。新手要记住,你请教的不是高手,而是解决问题。因此,向其请教的人是否是高手并不重要。

新手千万不要太迷信不可触及的高手,因为迷信了也没有用,而且也不会对你的实际工作有什么帮助,而应该把对那些高手崇拜的时间和精力用在身边的工作上,这可能更有成效。只有当自己有了一定进步之后,确定了自己发展方向之后,我们才有本钱和资格向外部高手学习。

2.学习高手的技术

(1)软件制作流程

我记得很多新手并不会安装操作系统、不会安装开发环境、不会配置网络、不会新建项目、不会新建程序、不会编写程序、不会运行程序、不会调试程序、不会制作安装盘等。即使会也只是知其然,而不知其所以然。而一般的程序员对此驾轻就熟,而且没有太多变化,相对机械,新手死记硬背就行了。因此,新手首先要把编程的流程搞清楚。把流程搞清楚之后,我们就可以把精力放在编写程序上了。

(2)语言的掌握

在程序的编写方面,新手常常遇到的就是语法问题,如语句使用不当、变量问题、格式问题、备注问题、命名问题、函数调用问题、参数问题等,这些问题就不那么简单了,不同的程序员会给出不同的解决方案。当解决这些问题之后,只能说是新手刚刚学会编程的工具而已,接下来就要学习如何运用这些工具来开发项目了。

(3)开发项目

这个时候新手就会遇到需求问题、功能问题、处理流程问题、数据结构问题、算法问题、可靠性问题、边界处理问题等,针对这些问题,不同的程序员更是有不同的观点和看法,所以,新手要多听不同的解决方案,通过比较来加深对这些问题的认识。

(4)高级技术

以上就是满足开发的基本要求了,但是,能运行的程序并不是一个好程序,只是站在一个项目的角度上来看技术,也不是最好的技术。因此,新手要更进一步提高自己的技术水平,还要在程序的架构、接口、参数、共享、安全、效率、交互等与程序密切相关的问题上进行探讨和研究,而在这方面有所建树的程序员已经不多见了。所以,新手要多留意,自己也要多积累,在这些方面多下工夫。

3.学习高手的方法

具体的问题是永远解决不完的,尤其是编程。遇到的问题可以说是千奇百怪,无所不有,因此,新手不能把全部的精力放在学习解决问题上。新手要在学习具体问题的解决方法前提下,更要学习高手们是如何解决这类问题的。通过方法的学习,可以使新手有很大的进步。例如,高手向新手讲解一个具体程序的调试方法。新手除了掌握这个程序的调试方法之外,还要学会跳出具体程序,掌握好调试基本流程、主要调试命令和注意事项。只有这样,当新手再次遇到调试问题的时候,就可以不用再找高手指导了,可以用这种方法自己来处理了。

高手的另一特点就是站得高,看得远,一般新手的问题,他们都很轻松摆平,所以,新手也要在平时看问题时,尽量地跳到具体问题之外,站在更高的层次上看待具体问题。

4.学习高手的激情

高手除了技术水平高、工作方法好之外,还有一点是新手要学习的,那就是他们的激情、坚持、专注。高手之所以是高手,一定付出比常人更多的劳动和辛苦。而这种付出并不像工作那样是强制的,往往是他们心甘情愿的,而且乐在其中。新手可能对老程序员没日没夜地连续工作感到不可思议,但是一旦他们也这样做了,他们同样也会感受到那种付出后获得成功的喜悦。

在遇到困难的时候,新手要向高手学习那种永不放弃的精神,不战胜困难就绝不罢休。高手之所以是一个高手,那是在某个领域,他能比别人有更大发言权,因为他比别人更了解这个领域的客观规律,这个规律是他长期专注和研究的结果。因此,新手遇到各种问题时,要沉下心来,注意观察问题中的细节,不放过任何疑点。只有这样,新手对问题的理解就会比别人更加深入。

5.不迷信高手

其实,现实中并不存在完美的高手,高手总会存在这样或那样的缺陷。新手不要对高手一味盲从,编程好,不一定界面设计好;编程好,不一定设计好。所以,新手要有自己判断是非的能力。例如,高手让新手按照某种要求编写程序,而这种要求本身就可能存在问题。当新手发现这个问题时,就应该停止编程,找出问题的原因所在,最好能找出解决方法,向高手说明情况,争取高手的理解和支持。这样高手就能看到新手的进步。而新手也可以在自己发现的新方法的过程中找到自我价值。

虽然我们是新手,但是,面对高手我们无须恐惧,我们会发现,随着时间推移,自己看到的高手会越来越少。这说明自己的技术水平在不断提高,当有一天有人开始请教你问题的时候,尽管你不处在高手的最前列,但是,你已经步入了高手行列。其实,面对高手就是面对未来的自己。

 六、新手应该具备的基本素质

新手走过的路,我们都走过了,别人走过的路,我们也看过了。回首往事,我们有过很多经验和教训,但是,几乎没有人会刻意告知我们应该怎么成长,更没有人专门对我们进行素质上的要求和引导。直到今天我们才知道我们的成长是自发的。它完全取决于我们的工作环境和内容,取决于我们遇到的人和开发的项目。假如我们能够回到从前,我们一定会在年轻的时候更加注重培养自己的素质,让我们成长得更好更快。我将与程序员有关的素质方面的要求进行了一个系统性的归纳,希望这些会对程序员有所启发。

1.激情

激情是程序员的职业标志,在很多情况下,激情具有递减规律。也就是说新手的激情最高,越到最后激情越低,甚至麻木和消失。而成功的程序员几乎都是充满激情的,他们能将激情始终保留在身边。我们要对年轻的程序员说,请保持你们的激情,无论你们在工作中遇到多大的不满、委屈、挫折、失望都不要丧失你们的激情,只要你们有了激情,你们才能东山再起,才能勇往直前,才能达到事业的顶峰。

2.学习

无论是新手还是优秀程序员,无论是程序员还是其他职业人员都应该注重学习,人只有在学习中才能增加自己的知识,才能将更多知识用于自己的工作。针对程序员这个职业,由于其涉及软件技术、项目管理、用户的业务知识等方方面面,而且这些方面的知识还在不停地变化和更新,所以只有学习才跟得上职业发展的要求。刚开始的时候,我们发现若不学习,那就什么都不会,我们只好学习。后来,我们发现即使学习了,还是有很多东西不会。当我们把学习看做一种常态的时候,我们就会不断获得新知识,这样才会适应职业要求。

3.基础

“万丈高楼平地起”,这充分说明了基础的重要性。程序员在开始的时候,并没有感觉到基础的重要性,但是随着程序员不断成长,这种基础的制约现象就会很明显。很多程序员总是感觉自己的进步不大,进步不快,不知道自己的问题出在什么地方。其实,很多最根本的问题是大学生的基础问题。因为很多大学生在学校的时候,并不知道所学的基础知识用在什么地方,有什么看得见的重要性。很少有人会对基础知识有真正的理解。到了工作单位之后,一些程序员在编程的时候,复制网上的程序,还是知其然不知其所以然,基础越来越差。不单是知识基础,其他基础也很重要,例如,一些新手开始不愿意学习盲打,不肯在开始学打字的时候练习盲打,基础没打好,结果若干年后,只会一个手指头按键盘,被人们笑谈为“一指残”。程序员要有基础意识,要把现有的取得的成绩当做基础,只有把现有的基础打牢,这样才能向上更好地发展。

4.好胜

没有一个程序员没有好胜之心的。但是,好胜有强有弱,有的程序员大有舍我其谁的气概,有的程序员则不露声色暗下工夫比高低,有的则看不出来是否好胜,一副好坏与己无关的样子。有的因能力而好胜,有的因面子而好胜。作为程序员好胜是必需的,因为程序员是一种智慧劳动,要比就是比智慧。只有通过智慧的竞争,智慧才能精彩,程序才能更加漂亮,软件才能向前发展。好胜意味着要比同们做得更好,好胜意味着遇到困难必须克服,好胜意味着自己要比自己原先做得更好。我们要的是好胜的结果,我们不需要的是好胜的表现。其实,不要刻意表现你的能力,你的成果足以表现你的能力了。

5.动脑

软件本质上是一种智力的产物,这个智力并非天生就有的,它和程序员的技术能力、理论基础、思维方式、知识范围、周围影响等因素密切相关。只有通过对这些因素进行收集、存储、加工、处理,进行各种各样排列组合,形成各种解决方案,然后在这些方案中进行择优判断,才能得出最后的解决问题的办法。程序员除了动脑还要通过打键盘编写程序,所以程序员还有一个动手的工作。很多程序员习惯于边想边编,久而久之就养成了动手习惯。从成长的眼光来看,程序员应更加注重开动脑筋,而且要把其和动手编程分离开。这样养成动脑的习惯之后,对编写程序有很大的帮助。一般而言,动脑的时间越长,动手的时间越短,程序员技术水平就可能越高。

6.外向

程序员性格对成长有很大的影响,无论是原来外向还是内向性格的程序员,只要从事这个职业,只要和计算机打交道,其性格都会有点向内向方面转变的趋势,我们看到不少程序员不善于和另人交谈,怕见人,甚至从内心里不愿意和别人交谈。这样的自我封闭其实对自己并无益处,我认为程序员性格要外向一些,要乐于和别人交流,要主动和另人交流,和别人交流并不一定要限于技术,用户的需求、公司成长情况甚至对方个人生活等方方面面都可以进行交流。这些外向的性格可以让程序员见识更多的人,见识更多的领导,见识更多的高手,见识过动去不敢见识的人。这样可以积累更多的社会关系。

7.技能

程序员的技术能力是程序员生存下来的基础,而技能从某些方面来说是首要的。可以说程序员就是技术的代名词。有了好的技能你就能更好地开展自己的工作,有了好的技能你就有了和别人交流的内容,有了好的技能就可能让自己获得更高一层的技能。因此,程序员要重视自己的技能学习和提高,要在技术上体现自己的能力,要通过技术能力去影响或帮助自己的同伴。只有这样,程序员的最基本的价值才能真正体现出来。很多程序员到了一定阶段放松了对技术的追求,技术平平,只能满足现有工作,这就愧对程序员这个称号了。

8.团队

程序员可以一个人编程序,但是,一个人只能编写一些程序或小规模的程序。有一些程序员一个人完成了整个系统开发,其技术水平固然值得称贺,但是,如果他认为软件可以一个人摆平,这就会影响到其向更高水平发展。随着软件业发展,软件的规模也在变大,软件制作的专业化程度变得越来越高,一个人即使有这个能力开发一个完整的系统,最好也不要一个人去完成,只有通过团队的分工协作,软件制作才能走向正道。如果程序员一开始就能注重团队意识,一开始就认为自己仅仅是团队的一分子,一开始就注重与其他团员的沟通和协作,这样程序员一定能融入团队中,而团队的巨大作用是每个程序员个人作用所不可比拟的。程序员不要只是享受自己独自编程的快乐,而是要享受整个团队编程的快乐。

9.兴趣

程序员的工作内容看起来似乎只是一行行代码。代码的编写来自于程序员头脑的指令,而程序员头脑中的指令并不是来源于程序设计语言,而是来源于各种需求、各种问题的分析方法和处理方法。因此,程序员要编好程序,不仅要对程序语言感兴趣,而且要对所有和编程序相关的事物感兴趣,甚至对看上去与编程无关的东西也要感兴趣。我们成长后才知道各种事物都是相通的,有些东西会潜移默化地影响到你的分析方法和处理方式中。所以,程序员不要只关心编程,这样只会成为“书呆子”。我们日常生活中看电视、听新闻、上网聊天、社交活动等都应放在兴趣之中。只有广泛的兴趣才能体会到你最爱的兴趣。

10.谦和

我喜欢程序员有一种谦和的精神,尤其是那些有本领骄傲的程序员的谦和。我们常常看到一些得意于自己的程序、自己的项目、自己的收入、自己的职位而忘形的程序员,他们无视别人的意见和建议,有的甚至自傲,看不起其他程序员。但是,要知道艺无止境,假定软件领域拥有顶峰,而谦和正是通向这个顶峰的一个阶梯。更何况软件领域没有顶峰,更需要我们的谦和来表明自己不拘泥现有的成就,我们还有更高更远的理想。

11.求新

我们常说软件技术发展太快,跟不上就会被淘汰。回顾几十年来的软件技术发展就可以明白这一点。求新本质就是注重时代的变化、跟上时代的变化。因此,对程序员来说,要有求新的意识,不要排斥新生事物。要通过网络和各种媒体注意各种新技术的产生,对于与自己工作相关或感兴趣的技术要花点时间进行跟踪,要了解这些新东西的新方面,要学会新旧对比,对自己必须掌握的新技术要毫不犹豫地花时间拿下。求新会让程序员时刻感到压力,但是求新又让程序员能看到自己未来成长的方向。

12.主动

主动绝对是程序员的一个良好素质。我和许多年轻的程序员打过交道,有主动型的与被动型之分,大凡学习上主动,工作上主动,甚至是劳动上主动的人,大都会得到同事的喜爱,都会得到更多的回报。而那些虽然听话,但是“不说不动”的人,因为缺乏主动意识,只能被动听从别人的安排。别人给什么,自己就吃什么,就像一只填鸭,当哪天没有人给你填食的时候,结果就可想而知了。“会哭的孩子有奶吃。”这是很有道理的一句话。

13.吃苦

现在的程序员和我们那个年代的程序员有很大的不同,他们很多都是独生子女,家庭娇惯比我们那个年代多了很多,而且绝对的自我。因此,他们眼高手低,怕吃苦,不能吃苦。对于程序员来说,连续工作是一种很常态的事。有的吃不了程序员的苦,因苦而选择离开。我们不能说吃苦是一件好事,但是,一个人能吃苦说明这个人不怕困难,有坚韧不拔的意志。这对程序员成长是很有帮助的。想想当年,自己要是怕吃苦,可能也不会有今天的成果。当一个人没有苦吃的时候,说明这个人真的没有发展机会了。而且吃苦的人更能感到甜的味道。

一个人的素质是其成长的基础,良好的素质一定是后天培养的,是后天自我约束和完善形成的,这种约束和完善的内在要求使得他在做任何事的时候趋于合情、合理,容易获得进步和成功。同时,一个人良好的素质可以给外界一个良好的形象,而外界因此会给这个人更多的关注和鼓励,外界的影响反过来又促使这个人进一步提高素质。相同的时间和相同的环境,不同的人因其素质的不同会有很大的不同。因此,如果我们在入门阶段能够重视自己的素质的培养,知道自己在什么方面需要改进和提高,程序员一定会少走弯路,成长更加顺利,而其中的良好素质将影响程序员的一生。

很多程序员对以上方面也有所了解,也知道应该怎么做。但是,涉及自身时,说归说,做归做。如果是这样的话,缺乏自己约束的程序员也只能“自发”地成长了。

发布了4 篇原创文章 · 获赞 4 · 访问量 4万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章