这是一位在加拿大学computer
science的朋友的本学期的一个小组作业,以下是题目与要求原文,这位朋友正在读大二。请问中国的大二学生作过这些吗?这就是中国和国外的教育差别。国外讲究合作与team
work,从一个项目到手一开始就要通盘考虑,并分配任务,而且在整个大学学习期间,不求每个人做得最好,但都要有概念,都要养成良好的习惯。请问中国的大学生毕业之后有几个有这些能力的?也没有几个大学应届毕业生能够从整体上和全局方面考虑一个问题的,而往往通过自己的想象与所谓的经验来解决问题。由于在上学的时候没有训练思维与合作,结果就是一个个水平参差不齐。国外程序员的个人水平不一定高,但是他只要一个人水平高,并有驾驭全局的能力,基本上就能将一个项目带上正途。而中国的程序员总是想一个人全搞定,结果是你的能力限制了你的成果。中国的程序员还经常是从一开始写程序的时候就没有一点规划与设计,一上来就写;还有就是写程序的时候完全不考虑扩展和接口友好等问题,其实就是无合作精神的一种典型表现;另外,就是中国的程序员写作凭经验,而很少有人用理论指导实践的,结果就是最后得到同样的结果,凭经验的人要花更长的时间才能找到最合理的方法,而即使用了相同的方法,凭经验的人也对为什么只是似懂非懂或是事后诸葛亮。这些都是中国程序员存在的极大问题,总之就是从一开始学习的时候就只会啃书本,而不是成体系地并结合实践来学习,在国内也不会形成一个竞争气氛与紧迫感,因为国内除了几次考试外,别的都不重要,而在北美,平时的作业占的比重可到一半以上,因此平时的作业做好了,不但学到了东西,也保证了成绩。中国的教育方式有他自己的一些特点与优点,但是在培养学生的自主性、创造性与合作性方面实在是做得太差了,而且很多地方也不公平,导致了是为上学而上学,而不是为学习去学习。

原文地址:

就从以下的作业,基本可以看出,中国的大学与北美的大学在培养学生能力方面的不同。不错,北美的一些学生是笨,而且有的笨得可以,但笨不是全部,他们最后成绩可能不好,但很多思维方法与习惯都在不自觉中掌握了。而北美社会是个自由的社会,每个人都可以做他愿意做的事,只要你能做,你不会的事可以不做。而中国的大学生呢?往往是越是成绩好越是只会考试,别的反而什么都不会,这不是畸形吗?结果走上社会时除了成绩好没有什么优点,在工作中往往不能胜任,当然中国好一点是有些时间给你慢慢学,北美就没这么幸运了,你不行就被淘汰了。

前言与目录

在写程序方面,我觉得大多数中国的程序员写的很多程序都没有什么水平,象小孩写的东西,一点不象是专业人士写的。比如我前几天看到一个程序被作者冠为“最好的PHP的EMAIL的类”这么一个程序,一看,无非就是实现了规范要求的格式,最后通过SOCK发送出去。本来也没什么,但一看,居然一个缩进都没有,而且逻辑混乱,功能不紧凑单一,还被称为最好的,当时狂吐,中国的高手程序员都死绝了?!总之就是从一开始就没有培养好规范的作风与思考与分析问题解决问题的能力,结果就是大多数中国的程序员从来就是不入流的(指正规的专业人士),一个明显的表现就是中国根本缺乏世界著名的品牌,也很少有什么著名的大公司,一些著名的软件也大都只是小软件,没有大系统大制作,这与国外差得太远了,主要原因是没有人有能力搞这些,也没有人有长远的眼光进行投资。还有就是搞得太杂,结果是什么都做不好。而且中国的软件做得是实在是太小儿科不说,用户也不友好,运行也不稳定,好象压根没做什么严格测试的,试想一些所谓的中型程序一个人搞一个月就出台,还美其名曰高效,怎么可能?想FLASHGET这样的程序也不是只一个月能搞定的吧?光过硬的调试可能就花掉一个月,更别谈从设计到写码到成型到调试到测试到发布了。文档更是做得极差,有的连说明都没有,搞得人无所适从。国外的软件,无论是多大多小的程序,一般都有说明,至少是安装使用的简单说明――就是一般的文本,至少能让你入手。国人的程序唯一一个优点就是程序是中文的――但这往往比用英文软件还要不方便。比如说,我前几天装一个邮件服务器,一开始用国人写的某“著名”软件,一装,首先就感觉运行不流畅,打开界面一看,连最重要的STMP发送认证都找不到在哪儿,界面极其简陋,功能严重欠缺,安全性方面更不知道可不可靠了,看帮助也看不清,后来在一个与安全无关的地方找到了选项,再一看,很多基本策略都没有,无法保证安全性。直摇头,马上uninstall,后来装了MD,虽然是英文,但结构清楚,功能齐全,工作明显稳定很多,而且帮助文档、使用手册极其详细,有的还有概念解释,以方便非专业用户。虽然支持国产,但是国产不争气,没有办法。

·  前言

·  目录

其实下面的问题很简单,一个人做根本不用那么复杂,但是让一组人来协调地做,还真不是那么简单的事,要有一个有分析头脑的人做leader,要有人专门负责写文档,有人测试什么的。对了,这门课好象就是software
engineering,软件工程,好象中国是不学的吧,至少我那时没学。

引言

—————— 这是这位朋友本周要做的任务 —

·  引言

 

第1部分 入门篇

·  1.1 程序员的梦想——中国的比尔·盖茨

·  1.2 谈谈程序员的基础知识

·  1.3 语言选择与就业方向

·  1.4 新手如何学习一门新的语言

·  1.5 理性看待考证热

·  1.6 选择大公司还是小公司

·  1.7 新手面试常见问题和对策

·  1.8 薪水的苦恼

·  1.9 求书、求网还是求人

·  1.10 新手看高手

·  1.11 新手应该具备的基本素质

第2部分 成长篇

·  2.1 加班,加班,加班

·  2.2 大量编程带来的快乐和烦恼

·  2.3 需求总是变化,程序总在修改

·  2.4 为什么程序员不愿写文档

·  2.5 为什么编程者总是高估自己低估别人

·  2.6 我?还是我们

·  2.7 为什么程序员的社会地位在下降

·  2.8 加薪的问题

·  2.9 门门通还是精通一门

 

 

 

 

           引言

我的程序员成长之路

程序员的成长经历往往很相似,大部分的人走过了最前面相同的一段路,而有的人则走得更远。总结自己这些年来的历程,这也许能让年轻的程序员少走一些弯路,成长得更快;或许更好一些,能让大家从中得到一些启发,早日进入优秀程序员的阶段,实现梦想,释放激情。

第一阶段,最初是在学校里学习计算机基础知识,学习经典的程序设计语言,编写测试用的小程序。这个过程可以说是对计算机和程序设计的入门阶段。这个阶段主要是培养了自己对计算机软件的兴趣,打下了良好的计算机基础知识。

第二阶段,而后参加工作,从事计算机软件开发工作。按照工作要求,一边学习,一边编程,终于可以让自己的程序投入运行了。在这个阶段我突然感觉到了自己的价值,感觉到了软件的神奇,并且自己编写的软件成为了实用产品。这个阶段实现了学习到生产的过渡。

第三阶段,随着工作的增加,开始编写各种程序,开发各种系统,这时候忙于编程知识的积累和应用。应该说在这个阶段自我感觉很充实,好像有做不完的事,程序设计水平还处在语言级阶段。

第四阶段,随着积累了一定编程技巧之后,我开始想这样的问题:我是不是最好的程序员?我能否编写出最好的程序?这个过程是一个反思的阶段。我对自己的要求是:不但要会编程序,而且要编好程序,从关注程序数量开始转向关注程序质量。

第五阶段,开始在提高自己的软件开发水平上做文章。经过各种系统开发,尤其是大型系统的开发,发现了软件中有许多功能是重复的。因此,有一段时间把精力花在编制各种库函数上,通过不同系统调用相同的函数,以便减少重复开发,实现功能共享。当时比较得意的是库函数不是我一个人在调用,而是整个项目小组都在调用,甚至不同的系统也能调用,从而体会到编写库函数特别有价值。这个阶段的标志是库函数,程序员水平上升到库函数那一级。

第六阶段,到了库函数那一级后,很快就发现,单单实现程序函数级的调用是远远不够的。当你做了很多项目,包括大项目和小项目,尤其是做过跨行业的项目之后,你就会把库函数的共享思想用于项目开发。你就会想这样一个问题:为什么不同项目不能有相同的架构?如果有相同的架构,那么开发就有了相对的标准,我们就有可能通过配置的方法实现相同架构的系统。于是我提出了IASG(交互式软件自动生成器)思想,并在C语言和其他一些语言中实现了IASG实例。记得最快的一次是编写一个系统(公安部门的自行车信息管理系统,主要用于丢失自行车信息登记)只用了3个小时(从需求到安装盘)。这个事情对我影响很大。我在这个阶段上升了一个很大的台阶,从程序上升到软件。核心思想就从库函数共享上升到软件共享。具体过程是建立一个通用的系统架构,架构中有许多共同的功能,例如,参数设置、用户权限管理、库表管理等。另外还提供信息建立查询开发模板,通过配置和特殊功能的编制就能很快完成了一个系统的开发。现在想起来IASG距离我已经有20年了。

第七阶段,到了IASG阶段后,我发现无论技术如何提高,都无法改变开发落后于需求的现实。通俗地说就是:程序员水平再高,仅仅是拉车水平高,但是,应该在什么路上拉车程序员并不知道。如果这条路是一条光明的路,则程序员越拉越有劲,有前途;如果这是一条死胡同,则程序员白费工夫;如果这是一条漫长的路,前途不明,则程序员可能要累倒在路上。现实中程序员水平低、收入低;系统需求不明确,系统开发周期一拖再拖;系统重复开发多,信息甚至不能在一个企业内实现共享,更不用说在企业之间、行业之间实现共享了;各种企业级的软件ERP、CRM、BI层出不穷,也没有哪个能满足中国的市场;各种新技术、新概念不断出现,却没有哪种技术或概念能真正发挥其内在价值,最终还是处于被学习、被运用的阶段。

这个过程是程序员脱离技术本身,开始思索、开始求源的阶段。在这个阶段的程序员的思想有了质的飞跃。以前光拉车不看路,现在要抬头看路了。

第八阶段,有了抬头看路的想法,于是我踏上寻路征程。我首先弄明白了我们脚下的路是什么样的,为什么这条路那么不平坦、不宽广。从软件生命周期来看,软件主要由用户需求发起,用户需求是软件生存的根本理由。由于企业、用户的不同而导致不同的需求——大量的无序的需求,这种需求驱动方式必然造成了我前面介绍的各种现象。这个阶段是寻找根源的阶段。只要我们找到了根源,就可以有机会解决问题。这个过程相对来说比较困难,这不仅需要编程技术,还需要很多方面的知识。若要了解这个根源,就迫使你学习和积累更多程序以外的知识。

第九阶段,当我找到软件是需求驱动方式之后,就开始考虑什么是用户需求?用户为什么要提出这些需求?我们可以更深入地分析用户需求产生的根源,我们能否让无序需求变成有序需求呢?当然针对这些问题我们都进行了深入分析,其过程也很难在这里展开说明。我只能说,最后结论是用户的需求来源于企业的经营。很多人思考问题还是就需求而论,并没有站在企业经营角度去考虑问题。千万不要小看这个变化,这个变化最终会产生一个理论。于是我们尽可能地站在企业经营角度看待企业经营方式、企业管理、企业信息化等。但是,我们最终要解决企业经营这个概念问题,如果我们都不能明确企业经营这个概念,或者我们不能科学地定义企业经营这个概念,那一切基于企业经营的各种具体现象就如同无本之源一样无序泛滥。就像ERP、CRM等所谓企业信息化产品一样,由于没有一个企业经营定义的支撑,只能就企业经营的某个方面提出解决方案。这些产品不缺乏需求的支持,缺乏的是最基本的企业经营定义的支持。而这个概念就是EOM。

EOM是从定义企业经营角度入手,把我们今后要开展的各种研究和开发活动都放在一个理论可支持的基础上。只有定义了企业经营之后,我们才有可能分析我们需要什么软件,我们的软件采用什么技术才能实现企业经营的目标。而程序员则通过EOM了解到企业经营需要什么样的软件,这个软件有多大的价值,这个软件采用什么技术才能实现,自己要提高哪方面的技术水平才能获得更大的价值。

这个过程就是EOM阶段,通过EOM了解软件的根源和有价值的软件所在,进而选择自己未来的方向。

第十阶段,当我建立了EOM之后,便开始了EOM实现阶段。这个实现阶段分为两部分,通过这两部分的结合,我们就可以逐步看到EOM软件产品的实例,看到EOM的真正价值。

第一部分是EOM的业务实现。当我们明确了EOM之后,就可以根据EOM来重新规划企业信息化的整体架构,可以细分这个架构中的各种平台产品、通用产品、专业产品,可以细分出这个架构实现的各种技术架构和实现手段,可以细分出这个架构中的各种标准功能和标准信息。通过这样的分析,我们的程序员就可以根据自己的特长和爱好以及价值的判断来选择其中的软件产品和技术。在明确目标和方向的情形下,通过自己的努力,不断提高自己的各种技能水平,让自己的价值和企业经营价值有机地结合在一起,从而实现自己的理想。

第二部分是EOM的技术实现。有了EOM并根据EOM理论构建企业信息化的架构后,我们就必须从技术上实现这个架构,否则这个架构将永远停留在理论阶段,不具有可行性。我们可以采用现有的各种技术来实现这个架构,但是,现有的技术都是基于原有的业务需求而建立和发展的,它适用于原来的应用对象。目前的EOM是一个全新的企业经营理念,因此,我们必须建立一种新的软件架构来适应和最好地实现这个理念。幸运的是,我们找到了称作NSS(New
Software
Structure)软件新架构的技术,该技术体现了适应企业经营发展方向,将软件合理分层,用最新的软件技术按照架构的方式规范软件开发的模式,可以实现最大范围的功能共享,实现软件的可扩展性。

这个阶段可以让程序员在软件产品业务设计或软件产品技术实现上等多个方面进行深入钻研,并且成为领域专家。这和我们平时涉及的简单的需求分析和简单的技术实现有着本质区别。

从我的程序员经历可以看出,程序员的成长是无止境的,只要有的放矢地努力,就会一步步登高向上。我认为程序员成长经历主要有三大阶段,即通用技术阶段、市场阶段、专业技术阶段。

1)通用技术阶段是程序员专注编程水平提高的阶段,也就是说“只拉车不看路”阶段。这个程序员能做的事情那个程序员也能做,程序员的替代性很强,程序员市场价值相对较低,程序员只关注编程技术本身。

2)市场阶段是程序员跳离技术层面开始考虑为什么要开发这个软件,这个软件有什么价值的阶段,通过求软件之源来重新认知自己的方向。

3)专用技术阶段是程序员认知了这个软件和技术有很大的市场价值,全身心投入到这个领域中去,并在这个领域成为专家的阶段。程序员不但要懂技术,更要懂得客户业务,不同的程序员的技术和业务变得没有可比性,这种稀缺性造就了程序员极大的价值。

这三个阶段其实就是三个过程,每一个过程都是一次飞跃。程序员知道自己可以飞多高,依靠的是程序员的学习和眼界;而程序员能飞到哪里,那就要靠程序员自身的努力。一个程序员可以没有能力,但是不可以没有眼界。

【责任编辑:云霞 TEL:(010)68476606】

第一部分
入门篇

1.1 程序员的梦想——中国的比尔·盖茨

作为一个IT行业职员,我经历过一个普通程序员成长的过程,同时也接触过许多不同层次的程序员。他们或在我身边匆匆而过,或与我共同工作,或在我可以关注的范围内成长着。他们的喜怒和哀乐、挫折和成功、幻想和现实、希望和失望,无不与我心共振。我知道这个行业从业人员的梦想,也知道这个行业的残酷。无数人怀着希望而来,却抱着无奈离去。我早就有和他们共语的愿望,希望通过这个主题和他们交流程序员所关注的各种问题,希望我的经验有助于他们的成长,同时我也想谈谈EOM对程序员的真正价值的影响,以及如何实现“成?榷じ谴摹闭飧龀绦蛟钡淖罡呙蜗搿?

什么是程序员?什么人能称得上是程序员?会编程序的人都是程序员嘛!这个问题看似简单,但仔细想一下,也很难回答。其实在中国,关于程序员的称呼有很多种近似的叫法,例如“开发人员”、“编程人员”、“计算机人员”等。只是现在分工越来越细、专业化程度不断提高的情况下,程序员这个词才逐渐地流行起来。

那么什么人才算是程序员呢?现在看来凡是从计算机专业或相近专业毕业的、以编写程序为职业的人都可算得上是程序员。但是在20世纪80年代到90年代,由于计算机还是新生事物,整个社会对其有种神秘的、高贵的、不可触及的印象。加之当时计算机人才少之又少,除了计算机专业从事开发工作之外,很多非计算机专业的学生,甚至初、高中生也加入到计算机开发队伍之中。他们充满激情,敢于学习,勇于探索,其中有许多人很快就成为开发队伍中的主力军,成为编程人员中的佼佼者。有的时候,专业的程序员还不如业余的程序员,程序设计语言比较单调,技术书籍更是少之又少。记得当时只能把单位印制的8086、Z80等汇编程序设计资料当做教材,用debug把操作系统中的代码打印成厚厚书籍来阅读。由于当时我的单位是生产(组装)计算机的,因此,使用计算机还是比较方便的,但是,不像现在,绝不可能在家里使用计算机的。

由于那时程序员可以触及计算机,可以看明白别人不懂的代码,可以让计算机执行自己的指令,这让许多外行甚至内行人很羡慕。

程序员一般只掌握单一的程序设计语言,比如编写汇编程序的程序人员,编写C语言程序的程序人员,编写Unix、XENIX、AIX、SCO、HPunix等Unix类的shell程序的程序人员,编写与数据库打交道的proc
c程序人员,编写C++程序的程序人员,编写面向对象的VFP、VB、Delphi、PB的程序人员,编写Web程序的HTML、CGI、ASP、PHP的程序人员,编写C#、Java的程序人员。这些程序语言有些保留了下来,有的则被时代无情地淘汰了。同样是程序员,如果不能适应语言的发展也避免不了被淘汰的命运。

我自己认为的程序员与其他职业人员之间的区别:

1)因为比尔·盖茨是编程序的,所以似乎每个程序设计人员都有一个“比尔·盖茨”梦想:比尔·盖茨能做的,我也许能做到,即使做不到,做到一半也是不错的。这个潜在的意识是程序员最大的财富,许多程序人成了为理想、有抱负的人。我想很多人选择IT大都是与此有关吧。

2)工作成果完全由自己把握,随时编随时运行随时出结果。这种自我感觉是很多职业都不具备的。因此,程序员有很强的自信心。而且这种自信心往往可以使得程序员产生自己开公司的念头。

3)有很高的预期价值。软件通过使用创造了价值,程序员通过制作产生了软件。因此,程序员往往把软件的价值看做自己的价值,例如一个软件卖了5万元,程序员就会把自己的劳动价值估算在5万元以上;如果这个软件有100个潜在的市场,那么程序员就会把这个价值升值到5×100=500万以上。所以在程序员这个群体中,很多人都相信自己未来能够获得更多的收入。

当然,程序员也有其他一些特点,例如:有的程序员喜欢晚上干活,白天睡觉;有的喜欢钻研,连续加班;有的头脑灵活,动手能力强;有的喜欢追逐最新技术,变成别人公司的代言人等。

我注意到了有这样一点,那就是现在的程序员已经失去了神秘感,以往给人以仰目而视的形象正逐步走下神坛。

这是程序员职业发展的必由之路,抑或是再正常不过的社会现象?

【责任编辑:云霞 TEL:(010)68476606】

1.2 谈谈程序员的基础知识

对于程序员需要具备哪些最基础的知识和技能这个问题,不少刚从大专院校毕业出来的新入职员工,甚至是从事过一段时间编程工作的程序员,都是比较模糊的。只有认真掌握一些基础的知识和技能,才能走上程序员这条大道。

说句实在话,我在从事编程工作很长一段时间内都没有关注这个问题,基本上是边编边学,边学边编,从学习中积累,从编程中积累。除了和同事进行工作上交流之外,学习材料很少,基本上是一个人在战斗,也不知道自己是不是成为了合格的程序员。也许是受那个年代所限,当时的程序员人数很少,因此同行间没有什么竞争,有了位置就不怕失去。要是放在现在,真的很后怕。

回到正题,我认为程序员在最初阶段要从流程、语法、调用三个层次要求自己。

1.流程

这是对程序员最基本的要求,这个层次就是要求程序员能够把一个最简单的程序编辑、编译、运行成功,强调的是掌握编程的环境和流程。

在这个层次上又分三个方面的要求:

(1)计算机基础知识

我见过许多程序员新手,他们都自称学过计算机基础知识。但实际情况是,学而不致用,学的概念太多,自己却理不出头绪,和实际工作对不上号。有的甚至认为自己忘了,什么都不知道。但是我要提醒新手的是,尽管基础知识十分丰富,但是有关编程的一些基础知识和概念是必须掌握的。

1)操作系统

什么是操作系统?你所编写的程序在什么操作系统上运行?目前主要有Windows类、Unix类、Linux类操作系统。每种操作系统对编程的影响是不同的。

2)计算机、内存、硬盘

这些概念对编程来说也是最基础的,例如计算机分为PC机、小型机、大型机。在PC机上编程和小型机上编程是有差别的。程序设计语言安装时也要注意内存大小和硬盘大小。

3)目录、文件

这些是最基础的概念了!一定要掌握和理解。因为你编写的程序就是一种文件,而且要放置在指定目录下。

4)程序设计语言、程序、编辑、源程序、编译、可执行程序、运行

这些概念也是最基础的。不同的程序设计语言对编程具有很大的影响。

目前主流的程序设计语言有Java、C#、C语言等。

(2)编程环境

作为程序员一定要知道自己的编程环境是什么:

1)了解所要使用的计算机

2)操作系统安装

3)程序设计语言安装要求环境

4)程序设计语言安装盘

5)安装程序设计语言

PC机和小型机有很大的不同,使用PC机的程序员一定对5个部分要全部掌握,使用小型机的程序员只需要了解程序设计语言是否安装好了。

(3)编程流程

PC机开发程序的一般流程:

运行开发环境→建立项目→建立源程序→编写源程序→编译项目(源程序)执行可执行程序→查看运行结果。

小型机开发程序的一般流程(以C语言为例)

编写源程序→编译→运行→查看结果。

程序员要验证自己是否掌握了这个层次,建议编写一个最简单的显示“helloworld!”的程序。如果程序员能白手起家,能运行自己编写的程序并能显示“hello
world!”则可以通过了。

2.语法

澳门新萄京官方网站,这是对程序员的基础要求。这个层次建立在上一层的基础上,应该掌握程序中最基本的语法、运算、基本功能。

主要掌握:进入程序参数、退出程序命令、赋值语句、条件语句、循环语句、引用、字符串操作、算术运算、文件操作等。

对于人机交互程序主要掌握:窗口、标示控件、文本框控件、命令按钮控件、列表控件、下拉框控件、表格控件等。掌握对控件属性赋值、对属性的读取、增加事件、对事件的调用等。

3.调用

这是对程序员的一般要求。这个层次建立在上一层次的基础上,应该掌握程序中对数据库、库函数、动态链接库等外部环境的调用。相应的概念也要掌握。

另外,程序员还要具备查询语法和寻求帮助的技能。

这里还谈不上程序员水平问题,需要强调的是,以上是程序员必须掌握的,是最低的要求。由于开发环境不断在变化,程序设计语言也不断在升级,作为程序员就应该扎实地掌握这些方法,做到心中有数,以不变应万变。

【责任编辑:云霞 TEL:(010)68476606】

1.3 语言选择与就业方向

程序设计语言与就业之间的关系现在变得非常强烈和敏感,这是我始料未及的。记得当年自己在学校里学习程序设计语言,自己从没有选择程序语言的概念。基本上是学校规定学什么,自己就学什么,从未考虑到这些学习将对今后分配工作产生的影响。这可能是由于在当时的社会环境下,不愁就业的状况所造成的。没有了就业的压力,学生可以安心学习一些基础性的课程,可以学习很多经典的程序设计语言,看到语言发展的轨迹,从而对一种程序语言打下良好基础。当然,很多学生并没有把程序语言学好的主观意识,只是想做学习的“奴隶”,而不是为自己真正掌握生存技能服务的。若跟这样的学生交流好好学习,那就是浪费时间。

而今,社会已经发生翻天覆地的变化。程序员从高高在上的“稀缺人才”地位开始下降。这期间的变化令人感慨和无奈。不得不承认,我们已经进入了市场经济社会,而且是一个充满竞争的市场经济社会。面对市场和竞争,我们必须拿出满足市场需求的商品:我们的编程能力。编程能力有两个方面的含义,一是编程语言,二是编程本身能力。所以,如何选择我们的编程语言是首要问题。而编程技术的提高则需要时间积累和项目积累。

当我们能够树立市场观念和就业意识时,我们对程序设计语言的选择就变得相对简单了。就这个问题我想提出自己的一些建议供各位参考。

1.就业方向

程序员就业范围应该很广。有的是软件工厂式的编程工作,有的是项目开发的编程工作,有的是用户单位维护类的开发工作,有的是后台编程工作,有的是前端编程工作,有的是编制网站工作,有的是软件培训工作,有的是与硬件相关的汇编级编程工作,有的是数据库类编程和管理工作。随着软件专业化分工的加快,分工会越来越细,就业种类也会越来越多。面对各种就业种类如何选择,这是一个仁者见仁智者见智的问题。只有先定下就业方向,然后再根据就业方向所要求的必须掌握的语言来确定自己要学的语言。

例如,你想去做后台的编程工作,你就可能会选择C语言、数据库等。

如果你想去编写网站,你就会在C#、Java、PHP中进行选择。

如果你想去做底层与硬件有关的编程,你就可以学习汇编和专业的单片机语言。

2.市场状况

当你自己不知如何选择的时候,可以从“唯利是图”角度出发,看看在程序员这个行业当中,做什么职业收入最高。你可以通过百度搜索的方式反复比较,获知收入相对较高的职业,然后根据这个职业要求选择所需的编程语言。

你当然可以从“技术至上”的角度出发,你可以通过百度搜索的方式了解当前哪种语言最流行,因为流行的程序往往体现出这种语言未来可持续发展,当你选择了流行的语言的时候,这就意味着软件市场对这种语言的程序员需求是比较大的,因此,就业的概率相对较高。但是,正是需求增加,在供过于求的情况下,竞争就会加剧,如果你没有表现出更多的能力的话,就很难在竞争中胜出。

当然,你也可以从“反向思维”选择相对冷门的职业,由于是相对冷门的职业,竞争就会有所减弱,就业的概率同样会大大增加。

3.社会资源

就已经参加工作的人来说,就业还取决于个人的社会资源,假如你有足够的社会资源,你就可能想到哪里就到哪里。这种个别的现象不在我讨论的范围之内。其他的个人的社会资源如学校、家庭、朋友、朋友的朋友,其他求职中介和求职渠道,都是你求职的重要因素。例如,你的朋友正好在一家软件公司,而这家软件公司正好要招聘你这种程序员,求职往往会很快成功。因此,将目光放在你的社会资源上,看看他们能够触及的单位,然后去了解这些单位对程序设计语言的要求,再进行语言的准备,我感到这样做还是非常有必要的。

4.个人基础

当然,你通过各方面考量最终选择了就业方向,也就确定了你的程序设计语言。你可能在学校学过这个语言,也可能没有学过。对于你来说都要有一个重新学习的阶段。这个学习阶段和大学里无忧无虑的学习有着本质区别,这可是关系到你能否被用人单位录用,关系到你今后的生存,关系到你今后的职业生涯规划。因此,你不但要把用人单位所需要的程序设计语言学好,而且要把相关的其他语言学好,以及相关的计算机基础知识学好。这样才能把你的个人编程基础夯实。可以说基础是必需的。

另外要有的放矢,了解用人单位所采用的语言、开发项目等情况,只有这样,自己在应聘的时候才会更有把握。

我们可能因为语言而获得就业,我们也可能因为语言失去工作。关键是我们每时每刻要注重语言的发展趋势,注重用人单位的语言发展趋势。语言的学习可以伴随程序员终身。从我的经验来看,要想进入程序员这个行业,主流的程序语言都是应该了解和掌握的,至于掌握的深度可以根据就业的要求深浅不一。因为语言的掌握是无止境的,人们不可能为掌握而花费太多的时间和精力。就目前而言,学习.NET、Java,学习任何可用于网络应用软件开发的程序语言都是非常有前途的,因为基于网络、互联网、手机(包括移动设备)的软件将是未来软件的主流。

现在我们因为语言而生存,未来能否让语言因为我们而骄傲?

【责任编辑:云霞 TEL:(010)68476606】

1.4 新手如何学习一门新的语言

学习程序设计语言是程序员的看家功夫。许多程序员边编边学,没有止境,可以说是“活到老学到老”。在语言面前,程序员永远是学生。然而,程序设计语言是一项不断发展的技术,从机器语言到汇编语言,从低级语言到高级语言,从面向过程语言到面向对象语言,从C/S语言到B/S语言,从非跨平台语言到跨平台跨系统语言,从纯语言到开发平台工具,真的是目不暇接。这些革命性的技术浪潮推动着程序员不断学习新的语言以适应其发展,否则程序员将被淘汰。

学习新的语言有两类人员,一类是从来没有程序设计语言基础的、没有编过程序的人;另一类是已经掌握了一门或一门以上语言,正想要学习更高版本语言或新的语言的人。对于第一类的人我且称为新手。

新手要学习一门程序语言,若是将新手比作一张白纸,可以画出最新最美的图画,同样也可以画得乱七八糟没有美感。新手的第一门语言对其今后的影响是巨大的,如果学得好,则自信心大增,对今后的发展非常有利;如果学得不好,学不下去,则对其职业生涯打击很大。新手面对众多的语言往往无从下手,第一,不知道学哪种语言为好;第二,不知道如何学习;第三,不知道能不能学好!

我认为,就目前而言,先学习Java、C#,今后再想学习应用于后台的C语言都是不错的选择。

针对第三点,我认为只要想学,有职业压力,没有学不好的,只有学不到最好的。

关于第二点,我的建议应特别注重两个要点:一是基础,二是动手能力。学语言首先要看书,然后要动手。那些认为光看书就能学会语言的想法是很幼稚的,而那种光注重编程而不注重读书的人,将来一定是动手能力强而编程水平低的。

1)新手不要急于求成,要把时间放长一点,先把基础知识学好,基础越扎实,今后编程水平就越有可能提高。看书至少要花三个月时间。

主要选择计算机原理、程序设计原理以及所学语言相关(最好是入门类,不要刻意地选择哪本,对初学者来说,任意一本都是好的)的三类书籍。

2)由于看书过程中肯定会遇到很多不懂的概念,而且各种概念之间的关系也不容易理解和掌握,所以许多新手望而生畏,坚持不下去。这个时候一定要学会坚持,坚持读下去,反复读下去,对实在不懂的概念要注意收集,将其牢记在心。这个时候最好不要找人去解答,而是把所有的书籍反复看完3遍之后,再去找人解答,这样就可以加深对这个问题的理解,而且解答者也愿意回答。如果一有问题就去问,一是解答者容易失去耐心,二是自己对问题没有印象,容易产生依赖性。

3)有了一定基础知识之后,就要自己想办法安装编程环境。安装编程环境的要点可参照1.2节中有关“流程”的阐述,这里就不再赘述。

4)开发环境安装完成后,新手就可以编写显示“hello
world!”程序了。

编写这个程序目的主要是学习主程序的作用、主程序的参数入口、简单的赋值语句、显示功能调用和退出程序语句。通过完成这个程序,新手就可以对编写程序流程有一个切身体会。

5)接下来可以学习算术运算编程。试一试算术表达式编写,可以简单地编写一个计算器示例;也可以编写一个显示日历的复杂程序(若输入年份,则显示这个年份的日历)。在这个阶段主要是学习函数以及函数的调用、算术运算、条件语句、循环语句、显示功能等,这些都是编程的基础。

6)完成算术运算的学习后,可以编写更复杂的完整的程序了。例如可以编写一个学生信息管理程序。其功能为:接受一个学生信息(例如,学号、学生姓名、班级、年龄)并把它保存在计算机中,同时提供增加、删除、修改、查询功能。信息保存形式可以是文本文件,也可以是数据库。

这个阶段主要是学习变量、数据存放、文件操作、数据库操作、程序完整性等,这也是编程的基础。

7)完成上述学习之后,程序员要学会回头梳理自己编写的程序,梳理自己已经学过的概念。可以对自己以前的程序进行修改,培养不断提高自己编程水平的意识。

8)在这些过程中若遇到问题,先看帮助。帮助不行,最好是找懂行的人询问,不要自己钻牛角尖,浪费时间。上网查询也可以,但是不如询问别人直接。看书是不能解决问题的,切记!

9)在这些都完成之后,程序员可以有目的地针对自己将要开发的内容进行相应的技术学习和准备了。

10)编写程序的时间估计需要2~3个月。一般而言,一个新手学习一门语言需要半年左右的时间。有的可能要少一点,有的可能会多一点。但是,无论如何,最终的结果是程序员对语言有了初步的了解,可以用语言编写简单的程序了。

【责任编辑:云霞 TEL:(010)68476606】

1.5 理性看待考证热

在当今这个社会,经常会出现各种所谓的热门现象。这说明目前的社会相对浮躁,而IT行业也同样不能避免。IT证书可谓名目繁多,应该有几十种。IT证书(认证证书)大体可分两类:一类是各大企业的认证,如微软、IBM、SUN、CISCO等认证考试,这类考试主要是考核考生的专业技能和特殊技术的水平;另一类是国家认可的考试认证:如全国计算机等级考试(NCRE)和全国计算机应用技术等级考试(NIT),考核的是考生综合的或某一领域的标准要求达到的程度。其实几乎所有的程序员都知道,程序员的能力是一种综合能力,其动手能力的成效是其能力的主要方面。若认为单靠考试就可以反映出考生的实际能力,那简直就是一个笑话。

证书的出现说明社会对任职资格的追求,反映出社会对无序现象的一种规范要求,反映出对“持证上岗”的认同。社会资格的本质是对人们之间竞争的一种限制。为了突破这种限制,获得在竞争中的优势,人们便千方百计地获取这种社会资格。于是社会上便出现了三类群体,一类是发放证书的,一类是获取证书的,一类是招聘中认可证书的。由于这三类群体都能从中获得直接的或间接的证书经济利益,于是,证书不火也难。当证书火到一定程度的时候,其原本内在的职能就慢慢地被异化了。人们不是为证明证书持有人的能力而设立考试,而是为了获取考试带来的经济利益而设立各种证书,于是证书的价值就贬值了。

但是,我们很多考生并没有深入地看到证书背后真正的内容,他们认为用人单位需要证书,没有证书就不能被录取。社会上大量流传着未经证实的证书和高薪之间的关系,更使某些证书神乎其神。因此,他们在证书方面花了大量的时间和金钱,为了证书而证书,能考多少证书就考多少证书。为的是在应聘时递交的简历上可以附上厚厚的各种证书。

就我本人而言,我好像没有考过什么证书,工作依然很顺利。这虽然和我成长所处的年代有关,但更重要的是我可能更关注自己能力的提高。如果自己的能力水平能够达到用人单位满意的要求,我相信即使你没有那些证书,用人单位也会考虑录取你的。我也相信有些用人单位的人力资源部门会按规定办事,没有证书不予录取状况也是存在的。这个时候,你自己就要权衡了,是进入按能力看人的企业求得发展呢,还是进入凭证书看人的企业求得发展呢?

我对证书方面的建议:

1)如果不占用自己大量的时间和金钱,能考多少证书就考多少证书。把考证书当做消遣和对知识的复习。

2)如果需要对国家证书和企业证书进行选择时,在没有针对性的情况下,选择国家证书。

3)如果自己对某类公司或某类岗位有意向的时候,最好打听其是否有刚性的证书要求,若有,则要不惜时间和金钱去获得这个证书。若没有刚性的要求,仅仅是一种参考,那就要根据个人情况,例如时间和金钱方面的条件,进行取舍。

4)在已经有足够证书的情况下,不要见一个证书就去考一个证书。尽量把时间放在自己的学习上和能力提升上。把时间和金钱节约下来做更重要的事。

5)不要和别人攀比证书多与少。因为每个人就业方向和机会都是不相同的。

6)没事的时候,可花点时间跟踪流行证书的情况,以便自己及时掌握证书最新情况,早作打算。

7)工作之后,也有可能因为你考了相关证书,可能会对你的薪水、岗位产生有利的影响;也可能对你跳槽有所帮助。这些在现实生活中也是可能出现的情况。

总之,我们要理性地对待考证热,我们不赞成为考证而考证,我们也不赞成能考证而不考证。我们赞成那种实用主义的态度:当我们刚性地需要考证的时候,我们就准备考试,争取获得证书。当证书仅作参考的时候,我们能考就考,不考则把时间和精力花在自己的能力提升上面。

在国内,证书的泛滥早已使证书失去了原有的价值。但是,我们应学会内外兼修,也不妨在提升自己内在能力的同时学会打扮自己,让自己更加漂亮一些,让别人更欣赏自己。

【责任编辑:云霞 TEL:(010)68476606】

1.6 选择大公司还是小公司

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

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

1.个人劳动

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

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

2.产品可复制

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

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

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

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

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

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

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

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

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

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

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

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

【责任编辑:云霞 TEL:(010)68476606】

1.7 新手面试常见问题和对策

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

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

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

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

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

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.潜力不明

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

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

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

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

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

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

【责任编辑:云霞 TEL:(010)68476606】

1.8 薪水的苦恼

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

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

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

1.从宏观上看收入

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

2.从企业内部看收入

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

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

3.从话语权看收入

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

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

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

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

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

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

【责任编辑:云霞 TEL:(010)68476606】

1.9 求书、求网还是求人

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

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

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

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

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

1)显示“helloworld!”程序。

2)打印日历程序。

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

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

与新手不同的是:

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

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

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

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

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

【责任编辑:云霞 TEL:(010)68476606】

1.10 新手看高手

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

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

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

1.向身边的高手学习

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

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

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

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

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

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

2.学习高手的技术

(1)软件制作流程

网站地图xml地图