第一部分入门篇
1.1 程序员的梦想——中国的比尔·盖茨
作为一个IT行业职员,我经历过一个普通程序员成长的过程,同时也接触过许多不同层次的程序员。他们或在我身边匆匆而过,或与我共同工作,或在我可以关注的范围内成长着。他们的喜怒和哀乐、挫折和成功、幻想和现实、希望和失望,无不与我心共振。我知道这个行业从业人员的梦想,也知道这个行业的残酷。无数人怀着希望而来,却抱着无奈离去。我早就有和他们共语的愿望,希望通过这个主题和他们交流程序员所关注的各种问题,希望我的经验有助于他们的成长,同时我也想谈谈EOM对程序员的真正价值的影响,以及如何实现“成?榷じ谴摹闭飧龀绦蛟钡淖罡呙蜗搿?
什么是程序员?什么人能称得上是程序员?会编程序的人都是程序员嘛!这个问题看似简单,但仔细想一下,也很难回答。其实在中国,关于程序员的称呼有很多种近似的叫法,例如“开发人员”、“编程人员”、“计算机人员”等。只是现在分工越来越细、专业化程度不断提高的情况下,程序员这个词才逐渐地流行起来。
程序员一般只掌握单一的程序设计语言,比如编写汇编程序的程序人员,编写C语言程序的程序人员,编写Unix、XENIX、AIX、SCO、HPunix等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万以上。所以在程序员这个群体中,很多人都相信自己未来能够获得更多的收入。
当然,程序员也有其他一些特点,例如:有的程序员喜欢晚上干活,白天睡觉;有的喜欢钻研,连续加班;有的头脑灵活,动手能力强;有的喜欢追逐最新技术,变成别人公司的代言人等。
我注意到了有这样一点,那就是现在的程序员已经失去了神秘感,以往给人以仰目而视的形象正逐步走下神坛。
这是程序员职业发展的必由之路,抑或是再正常不过的社会现象?
1.2 谈谈程序员的基础知识
对于程序员需要具备哪些最基础的知识和技能这个问题,不少刚从大专院校毕业出来的新入职员工,甚至是从事过一段时间编程工作的程序员,都是比较模糊的。只有认真掌握一些基础的知识和技能,才能走上程序员这条大道。
说句实在话,我在从事编程工作很长一段时间内都没有关注这个问题,基本上是边编边学,边学边编,从学习中积累,从编程中积累。除了和同事进行工作上交流之外,学习材料很少,基本上是一个人在战斗,也不知道自己是不是成为了合格的程序员。也许是受那个年代所限,当时的程序员人数很少,因此同行间没有什么竞争,有了位置就不怕失去。要是放在现在,真的很后怕。
回到正题,我认为程序员在最初阶段要从流程、语法、调用三个层次要求自己。
1.流程
这是对程序员最基本的要求,这个层次就是要求程序员能够把一个最简单的程序编辑、编译、运行成功,强调的是掌握编程的环境和流程。
在这个层次上又分三个方面的要求:
(1)计算机基础知识
我见过许多程序员新手,他们都自称学过计算机基础知识。但实际情况是,学而不致用,学的概念太多,自己却理不出头绪,和实际工作对不上号。有的甚至认为自己忘了,什么都不知道。但是我要提醒新手的是,尽管基础知识十分丰富,但是有关编程的一些基础知识和概念是必须掌握的。如果你对C语言C++感兴趣,那么欢迎加入学习群【785290829】,获取全套免费C/C++企业实战级课程资源(素材+源码+视频)大礼包。
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.调用
这是对程序员的一般要求。这个层次建立在上一层次的基础上,应该掌握程序中对数据库、库函数、动态链接库等外部环境的调用。相应的概念也要掌握。
另外,程序员还要具备查询语法和寻求帮助的技能。
这里还谈不上程序员水平问题,需要强调的是,以上是程序员必须掌握的,是最低的要求。由于开发环境不断在变化,程序设计语言也不断在升级,作为程序员就应该扎实地掌握这些方法,做到心中有数,以不变应万变。
1.3 语言选择与就业方向
程序设计语言与就业之间的关系现在变得非常强烈和敏感,这是我始料未及的。记得当年自己在学校里学习程序设计语言,自己从没有选择程序语言的概念。基本上是学校规定学什么,自己就学什么,从未考虑到这些学习将对今后分配工作产生的影响。这可能是由于在当时的社会环境下,不愁就业的状况所造成的。没有了就业的压力,学生可以安心学习一些基础性的课程,可以学习很多经典的程序设计语言,看到语言发展的轨迹,从而对一种程序语言打下良好基础。当然,很多学生并没有把程序语言学好的主观意识,只是想做学习的“奴隶”,而不是为自己真正掌握生存技能服务的。若跟这样的学生交流好好学习,那就是浪费时间。
而今,社会已经发生翻天覆地的变化。程序员从高高在上的“稀缺人才”地位开始下降。这期间的变化令人感慨和无奈。不得不承认,我们已经进入了市场经济社会,而且是一个充满竞争的市场经济社会。面对市场和竞争,我们必须拿出满足市场需求的商品:我们的编程能力。编程能力有两个方面的含义,一是编程语言,二是编程本身能力。所以,如何选择我们的编程语言是首要问题。而编程技术的提高则需要时间积累和项目积累。
当我们能够树立市场观念和就业意识时,我们对程序设计语言的选择就变得相对简单了。就这个问题我想提出自己的一些建议供各位参考。
1.就业方向
程序员就业范围应该很广。有的是软件工厂式的编程工作,有的是项目开发的编程工作,有的是用户单位维护类的开发工作,有的是后台编程工作,有的是前端编程工作,有的是编制网站工作,有的是软件培训工作,有的是与硬件相关的汇编级编程工作,有的是数据库类编程和管理工作。随着软件专业化分工的加快,分工会越来越细,就业种类也会越来越多。面对各种就业种类如何选择,这是一个仁者见仁智者见智的问题。只有先定下就业方向,然后再根据就业方向所要求的必须掌握的语言来确定自己要学的语言。
例如,你想去做后台的编程工作,你就可能会选择C语言、数据库等。
如果你想去编写网站,你就会在C#、Java、PHP中进行选择。
如果你想去做底层与硬件有关的编程,你就可以学习汇编和专业的单片机语言。
2.市场状况
当你自己不知如何选择的时候,可以从“唯利是图”角度出发,看看在程序员这个行业当中,做什么职业收入最高。你可以通过百度搜索的方式反复比较,获知收入相对较高的职业,然后根据这个职业要求选择所需的编程语言。
你当然可以从“技术至上”的角度出发,你可以通过百度搜索的方式了解当前哪种语言最流行,因为流行的程序往往体现出这种语言未来可持续发展,当你选择了流行的语言的时候,这就意味着软件市场对这种语言的程序员需求是比较大的,因此,就业的概率相对较高。但是,正是需求增加,在供过于求的情况下,竞争就会加剧,如果你没有表现出更多的能力的话,就很难在竞争中胜出。
当然,你也可以从“反向思维”选择相对冷门的职业,由于是相对冷门的职业,竞争就会有所减弱,就业的概率同样会大大增加。
3.社会资源
就已经参加工作的人来说,就业还取决于个人的社会资源,假如你有足够的社会资源,你就可能想到哪里就到哪里。这种个别的现象不在我讨论的范围之内。其他的个人的社会资源如学校、家庭、朋友、朋友的朋友,其他求职中介和求职渠道,都是你求职的重要因素。例如,你的朋友正好在一家软件公司,而这家软件公司正好要招聘你这种程序员,求职往往会很快成功。因此,将目光放在你的社会资源上,看看他们能够触及的单位,然后去了解这些单位对程序设计语言的要求,再进行语言的准备,我感到这样做还是非常有必要的。
4.个人基础
当然,你通过各方面考量最终选择了就业方向,也就确定了你的程序设计语言。你可能在学校学过这个语言,也可能没有学过。对于你来说都要有一个重新学习的阶段。这个学习阶段和大学里无忧无虑的学习有着本质区别,这可是关系到你能否被用人单位录用,关系到你今后的生存,关系到你今后的职业生涯规划。因此,你不但要把用人单位所需要的程序设计语言学好,而且要把相关的其他语言学好,以及相关的计算机基础知识学好。这样才能把你的个人编程基础夯实。可以说基础是必需的。
另外要有的放矢,了解用人单位所采用的语言、开发项目等情况,只有这样,自己在应聘的时候才会更有把握。
我们可能因为语言而获得就业,我们也可能因为语言失去工作。关键是我们每时每刻要注重语言的发展趋势,注重用人单位的语言发展趋势。语言的学习可以伴随程序员终身。从我的经验来看,要想进入程序员这个行业,主流的程序语言都是应该了解和掌握的,至于掌握的深度可以根据就业的要求深浅不一。因为语言的掌握是无止境的,人们不可能为掌握而花费太多的时间和精力。就目前而言,学习.NET、Java,学习任何可用于网络应用软件开发的程序语言都是非常有前途的,因为基于网络、互联网、手机(包括移动设备)的软件将是未来软件的主流。
现在我们因为语言而生存,未来能否让语言因为我们而骄傲?