五年程序员之路:从门外汉到项目管理
时间:10-02
整理:3721RD
点击:
论坛里很多人都喜欢聊程序人生的话题,我也来发一封帖子。给大家一个参考,也让自己有一翻自省!
希望更多有经验的程序员看到后,也能在此记录一下自己程序生涯,相互学习!
所谓的“双非”,即非名牌大学,非计算机专业。本人普通院校,非计算机专业本科毕业。从毕业到现
在也工作有五年了。回忆起程序人生,也颇有一翻滋味。
本人是从大三上学期开始学习计算机的,因为那时电脑突然一下比较普及,本人家里也有能力买台电脑
。买了电脑后,最先看的是C语言的数据结构。用电脑调试书里面的各种程序,那时第一次看数据结构,
我接近全力去看,但是没看懂多少东西。只是把书里面的代码敲了一遍,运行后看看是否和书里面说的
结果是一样。但很多时候,第一次都是没通过调试的,发现不是这里抄错了,就是那里抄错了。通过不
断的查找,最后才能运行正确,那时心里就会才生少许的成就感,感觉自己写的程序调通了(虽然只是
照着抄了一遍)。看完数据结构(其实有很多东西还是不懂),我去找了本计算机组成原理来看。结果
看得自己更加模糊。因为这本书里没有代码,只有一些抽象概念,当时好像只记得CPU有几个寄存器寻址
,还有些补码,反码什么的。那个书又厚,硬着头皮翻了一遍后就没看了。接着买了本操作系统原理来
看。也是很难看,都是些概念的东西,又没代码调试。比如什么GDT,虚拟内存分段,分页,实模式,保
护模式,中断等等。也是硬着头皮翻一遍,能懂多少是多少。看完后,接着就看那个编译原理,因为网
上都说懂编译原理的人都很牛,我也希望变成牛人所以也去搞了本回来看。结果发现,能懂编译原理的
人,确实比较牛。里面涉及到自动机的概念。属于用计算机来做人工自能的范畴。我也很想成为牛人,
硬着头皮看,结果还是有心无力。经过这样一个过程,虽说很多都不懂,但却使我对编程从一无所知到
有了一种模糊的认识。大概懂得了什么叫做内存分配,还有程序的那些字母符号是怎么被计算机执行的
。
这时回头把原来的数据结构翻出来再读一遍,突然发现这本书比起其他三本都容易,也很好懂。明白
了什么叫做算法,并且可以尝试去实现自己想的一些算法。当时的自豪感油然而生。感觉电脑可以按照
我的想法去工作了,非常兴奋。虽然那时我并不懂得多少C语言,对指针也只大概知道是什么东西,实际
中还是不会应用。但至少可以利用我所知道的,来实现我所想到的。在当时一股冲动之下,写了几个自
己记忆由心的算法:
1,从1到100,每数到7的时候,把该数字提出来,剩下的数字继续循环,问最后剩下的一个数字是多少
。我记得好像是50。
2,任意输入数字,和“+ - * / ( )”几个符号组成一个算术表达式,计算出值是多少。
3,记得看过计算机组成原理里面有个磁盘调度算法,用的是现在电梯常用的电梯算法。感觉这个算法很
好,就去用C语言实现了一遍。
刚开始写程序,都是一个main函数全部搞定。慢慢的,在算法实现的过程中发现,如果一个算法太大,
一路写下去,代码会很长,并且很容易想了前面就忘后面该怎么写,或者写到后面,忘了前面写的是什
么。 这时,就产生了一种想法,就是刚开始设计算法的时候,想好哪几步,然后每一步用一个函数代替
。main函数中只是分步函数的流程控制。这样main函数的代码就大大的减少,逻辑变得非常清晰。然后
可以像填空一样把每个分部函数完成。接着在子函数里面还可以分成子函数,分到后来,发现很多函数
可以被其他的函数调用。达到重用的目的。记得当时发现这个方法后,也是异常的兴奋。这种方法居然
被自己想到了,感觉自己真是个人才。因为自己是非计算机专业,想找编程的工作,起码要有一个东西
证明自己是学过计算机的。所以在这期间报考了那个高级程序员(高程),因为要考试,所以学习了一
些汇编之类乱七八糟的东西。考试好像分为笔试和上机,但是现在已经忘记是哪一个没过了。郁闷!没
过之后,不甘心,就去报了个计算机等级考试(3级,互联网技术),结果不出意外,将证书收入囊中(
不过现在想想,一点都没用上。拿回来后,从来都没给人看过,现在都不知道放到哪里去了)。
搞完这些,自己大三也差不多结束了。自己也知道到了大四要开始找工作,所以不能自己专门去研究什
么算法。那个东西当不了饭吃。所以要搞一些比较流行的东西,起码需要混到一个工作。所以那时就搞
了一本“C#入门经典”。因为那时听说.NET比较流行,好找工作。并且对于一个新的东西,我比较喜欢
找一些名字上有“入门”两个字的书(这样的书里面一般都会很详细的告诉你如何搭建调试环境)。因
为程序这个东西,你首先要能够搭建一个调试环境,光靠看是看不出什么东西来的。后来感觉这本书还
不错,不枉费我100块大洋。从中学到了一些.NET的基本用法。并且对面向对象讲得比较详细。“面向对
象”那一章我也很认真的反复看了好几遍,因为那时03年面向对象非常热门,网络上面到处是“面向对
象”几个字,感觉编程高手都是会面向对象。我也想成为高手,所以我就抱着一种不搞懂不罢休的气势
去看。结果,只是记住了面向对象的语法。书中和网上举得例子也很简单,多半是些动物是抽象类,然
后,分什么鸡,鸭,鹅之类的去继承,然后动物都有吃饭的接口,鸭子有游泳的接口, 此类等等的例子
。看了半天,也没弄明白这些对于我写程序有多大的作用。后来,从书上抄了一份网站购物车的程序,
认识到了WEB的开发流程,感觉自己也可以上路了。因为当时才大四上学期,也没有到处发简历。只是在
网上留意一些招聘信息。当时也是在gimoo里面,看到一个本地的公司在招人的帖子,公司很小,刚起步
。我想应该不会要求很多,我也就去应聘试试,希望自己能够应聘上,这样至少能够证明自己有资格成
为程序员。应聘的时候,老板问了一些问题,多半是WEB开发方面的技术问题。由于那时我对WEB只是刚
刚接触,懂的不多。好像当时有一半以上都没回答上来。走的时候,我把我从书上抄的那份程序放到电
脑里运行出来给他看了看。大言不惭的说者是我写的。他看了看,点了点头,然后就回去等消息。我是
星期五去面试的,星期天公司打电话让我星期一去上班。听到这个消息后,心里莫名的激动。请同寝室
的哥们大吃了一顿。大家也都为我能这么早找到工作感到高兴。后来,就是白天到公司实习,晚上回寝
室睡觉。工作后慢慢的,那种兴奋感就消失了,取而代之的是工作压力,由于做WEB开发,服务端的C#还
好说一点,但是前台用到很多的是HTML和JC,当时对这个知道的很少,只能一边翻书,一边做事。要达
到老板的要求,每天都八点左右才能搞完下班。
工作渐渐展开之后,就是平静如水的生活,每天上班,吃饭,睡觉,日子也过得很快。刚开始,由于懂
得东西少,所以每次任务下来后,都是积极的去完成,因为害怕自己做不完。但是渐渐的,当自己清楚
该怎么做的时候,人会产生疲倦,因为每天都做一些差不多的劳动。慢慢的,做事情就喜欢拖拉了。当
分配一个任务后,自己先估量一下这个工作自己大概需要多久,一般老板给的时间会多很多。所以喜欢
把工作先放着,去看看网页,逛逛论坛什么的,等到剩下的时间差不多了,需要开始工作了,就懒洋洋
的进入工作状态,但是往往完成工作质量都不怎么好,很多提交后会有些BUG。不过我也没怎么在意。因
为和老板关系好嘛,像我这样,再怎么说也属于元老级别的。就这样慢慢的工作了几年。因为小公司什
么都要做,技术也积累了很多。包括各种主流数据库的用法,.NET,CSS,JC,PHP,JAVA,perl,FLASH, 等等,期间,自己独立开发项目的时候,总想找出一种架构,加快自己下一个项目的开发进度。但是每次开发完后,发现上次设计的架构真垃圾。开发过很多项目,每次都想
了一些新的架构方法。到现在沉淀下来的还值得用的架构思想也没多少。记得在做JSP的时候,感觉JSP
里面服务端代码和HTML混在一起,很难看。不如.NET的事件驱动好用。就去写个模块,让JSP也实现事件
驱动的模式。结果写到后来,也没得到什么好处,并且感觉有点不伦不类,
后来项目慢慢做大了,才渐渐明**向对象的用意。当一个项目很小,逻辑很简单的时候,用面向对象的
方法设计用处不大,反倒是组件用处更大。因为项目小,基本上都是建几张表,改改HTML的工作。但是
项目一大,逻辑变复杂了,如果你要理清楚逻辑,这里就需要一种方法论。我一开始写算法的那种方法
有点不适用了。原来那种是从顶层开始,向下细分。是一种至上而下的设计方法。而面向对象不是,它
是一种由点及面的设计方法。面向对象是先找出一个个对象点,然后再找出每个点之间的关系。在实际
的项目中,你很难从上至下的设计。因为项目需求往往刚开始很不全面,很多项目后来改得都是面目全
非。从上至下的设计不适合这种平凡的修改。并且当需求很大时,他涉及东西太多,你也很难从一个俯
视的角度去全面的看这个系统。所以从上至下的设计不能满足要求。打个比方,记得一个项目已经做了
80%,结果客户觉得用得不方便,要改一下。很多原来做的功能都不需要,并且提了几个新功能。但这几
个功能也只是对原来的功能稍加改动。但是逻辑上看却是大相径庭。人脑不是电脑,如果想着这个代码
,去改那个代码,势必到后来让自己也搞糊涂了。所以需要抽象出几个对象出来,是按照客户的思维方
式。然后抽象出来的对象里面包含原来的功能。这样做起来就事半功倍。
在工作的磨练中,慢慢的发现了普通的程序员与优秀的程序员的一些差别:
1, 普通的程序员遇到问题喜欢张口就问别人,问之前没经过大脑想想。这是一个不好的习惯。其一,自
己都没仔细想想,就算别人帮你把问题解决了,你自己不多久就会忘记。下次遇到,照样是不会。因为
这个问题你没有经过大脑。其二,能够回答你问题的人,多半是有一定经验了。他们或许很会安排好自
己的事情,管理好自己的时间。如果时常去打断他们,他们会觉得你很烦。
优秀的程序员多半会先到网上查找一下相关问题,看看网上有没有相关解决方法。经过一翻查找,他会
把这个问题记得比较牢。
2,在一个项目的合作开发中,普通程序员往往只了解自己开发那方面的东西。项目做完后往往对整个项
目有哪些功能都不太清楚。可能会有人抱怨,自己工作都做不完,哪有时间去了解整个系统。但现实多
半是,花大量的时间去网上闲逛,却不愿花时间去增进知识。 如果总认为项目的设计是设计者的工作,
自己没必要去了解。那么这样的程序员只能是手工劳动者。
优秀的程序员会对整个项目有认识,对一些自己感兴趣的功能会去做一下了解,更优秀一点的,会去对
整个项目的架构设计做一下了解。自问如果他是项目设计者该怎么做? 去学习项目设计的优秀之处,去
发现设计的不足之处。触类旁通,把优秀的地方用在自己将来的工作当中。
3,普通程序员往往有很大的惰性。不能自觉的去学习知识,增进能力。所以每天耗费大量的时间在一些
消遣状态中。所以时间往往白白的浪费掉。
优秀的程序员往往会安排好自己的工作和学习。在工作中学习,在学习中工作。能够感觉到自己每天都
向着自己的目标在前进,状态佳,动力足。他们因为每天工作情绪很高,所以研究的东西也多,时间比
较宝贵。因此他们会善于利用一些工具来操作自己的电脑,大大来的减少琐碎的电脑操作时间。更有胜
者,会开发一些符合自己的操作习惯的小程序,来提高自己的效率。说不定这些小程序放到网上共享,
可能还会有意想不到的收获。
我现在做项目管理员,看着手下的程序员,时常也让我想起原来做程序员时候的坏毛病。比如,上班迟
到啊,工作时间上网闲逛啊,交上来的程序BUG成堆啊...!看到这些,我时常都是会心的笑笑,可以理
解! 不过我也时常提醒他们,如果你们想将来成为IT界的精英,而不是等到30岁感觉自己无路可走,那
么请你们珍惜自己的时间。如果你们自己都不珍惜自己的时间,那么别人更不会去珍惜你的时间。
今天花了两个多小时,写了一篇短篇自叙。感觉值得,把自己五年多的光阴回顾了一遍。从前的故事历
历在目。写下来过五年后再来回顾一下,说不定会是另一番感受。
论坛里很多人都喜欢聊程序人生的话题,我也来发一封帖子。给大家一个参考,也让自己有一翻自省!
希望更多有经验的程序员看到后,也能在此记录一下自己程序生涯,相互学习!
赞,学习中!努力。
勤奋的孩子,这是一篇励志文哈。呵呵 ···
谢谢小编分享啊啊啊啊啊
谢谢分享
谢谢分享
不错,值得学习
谢谢分享, 很好的个人经历介绍
学习到了、、、