程序员成长规划

前言与目录

·  前言

·  目录

引言

·  引言

 

第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 语言选择与就业方向

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

而今,社会已经发生翻天覆地的变化。程序员从高高在上的“稀缺人才”地位开始下降。这期间的变化令人感慨和无奈。不得不承认,我们已经进入了市场经济社会,而且是一个充满竞争的市场经济社会。面对市场和竞争,我们必须拿出满足市场需求的商品:我们的编

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
作为一个Unity游戏开发程序员,你可以制定以下成长规划来提高自己的技能和职业发展: 1. 学习并掌握Unity引擎:深入了解Unity的各个功能模块和工具,包括场景编辑器、动画系统、物理引擎等。通过官方文档、教程和实践项目来加深对Unity的理解和应用能力。 2. 掌握编程语言和算法:作为游戏开发者,熟练掌握C#编程语言是必要的。同时,了解基本的数据结构和算法,对于优化性能和解决问题非常重要。 3. 学习游戏设计和艺术知识:理解游戏设计原理和基本原则,对游戏玩法、用户体验和界面设计有一定的认识。此外,学习美术和动画技术,可以在项目中更好地与美术团队合作。 4. 参与实际项目和开发经验:积累实际项目经验是成长的关键。参与个人或团队项目,从中学习并完善自己的开发技能,同时也锻炼自己的沟通、团队协作和问题解决能力。 5. 持续学习和跟进最新技术:游戏开发领域发展迅速,要保持对最新技术和趋势的关注。参加相关行业的讲座、研讨会和培训课程,阅读相关书籍和博客,与其他开发者交流经验和观点。 6. 构建个人项目和作品集:开发个人项目、制作游戏作品集是向潜在雇主展示自己技能的重要途径。通过构建自己的项目和作品,展示自己的创造力和技术能力。 7. 寻找导师或参加社区活动:寻找有经验的导师或加入开发者社区,可以从他们那里获得指导和支持。参加游戏开发比赛、论坛和在线活动,与其他开发者建立联系,分享经验和资源。 8. 不断挑战自己:勇于接受新的挑战和项目,扩展自己的技能边界。尝试开发不同类型的游戏,探索新的领域和技术,不断提高自己的专业水平。 记住,成为一名优秀的Unity游戏开发程序员需要时间和努力投入。持续学习、实践和积累经验是通往成功的关键。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值