软件工程师的学习之路
一个程序员,一旦进入了一家软件企业,就会被安排到项目组中,进入项目的紧张开发过程。没日没夜的加班,写代码、调程序、改代码,披星戴月,累个半死。往往一个项目还没干完,第二个项目就来了,有的程序员甚至同时在4、5个项目中,整天忙得不可开交。
然而,高质量的软件,需要用高水准的技术来构建。软件开发,是个智力劳动,而非体力劳动。在项目进度很紧时,程序员会倾向用自己已经掌握的技术来解决问题,尽管他也知道这不是解决问题的最有效方法,但迫于时间压力,他愿意用陈旧的技术和大量的体力劳动来赢得时间。然而,项目的需求在不断变化,需求变化导致的最直接结果,就是大量的代码要被修改。以前大量复制粘贴的代码,都要被一一找出来,一个个仔细修改。进度被进一步延缓,体力劳动进一步加大。因此,当项目结束时,这样的程序员技能没有任何提升,只是付出了大量的体力而已。如果问他:你愿意学习你的技术吗?他会回答:我愿意,但项目太紧,我没时间学习。
以上,就是中国程序员的普遍生存状况。
我把上面的两句话再重复一下,加深大家的印象:
1. 高质量的软件,需要用高水准的技术来构建。
使用更先进、更强大的技术,会显著改善程序的结构,优化代码实现过程,导致代码数量更少,重用度提高,并提供更加强大的功能特性。当需求变化时,只需做少许改动,就能快速满足新需求。从而使项目进度加快,质量提高。
2. 软件开发,是个智力劳动,而非体力劳动。
构建软件是个智力密集型生产过程,而非体力劳动。所谓体力劳动,是指机械式的重复一些完全相同或大部分相同的工作。体力劳动工作量=∑重复代码数X重复次数。在这个公式中,需引起注意是重复次数。往往在项目开发中,我们第一次进行复制粘贴代码时,认为只此一次,但后续需求变化、结构调整、类的数量增多,重复次数的增长是惊人的。比如Web开发是,如果每个页面都复制粘贴同一段代码,那么整个项目可能会有成百上千个页面,这种重复劳动带来的体力工作量是巨大的。
因此,唯有使用更优化的软件架构、更好的程序结构、更优的算法、更优的实现逻辑,才有可能从忙碌疲惫的体力劳动中解脱出来,才有可能加快项目进度,提高软件质量。
而学习、掌握新的更为先进、更为强大的技术,是在项目中有效应用的前提。
那么,就如本文一开篇描述的那样,项目如此紧张,根本没时间学习啊?
答案:在项目中学习。
今天的项目是如此紧张,下一个项目也是如此。永远也不会出现这种情况:一个项目结束后,项目成员都放一周假,用于给大家学习。那是不可能发生的事情!即使出现短暂的假期,那么在假期里,没有任何压力,你就容易失去目标,你学什么呢?又怎么知道你理解的是否正确呢?这些知识应该用在什么地方呢?
因此,只能在项目中学习,在紧张的项目中进行深入学习,提升技能。
如何能做到?
在每一天的编程中,面对问题时,要求自己必须用最优的算法、最简单的结构、最简洁的逻辑过程、最大程度的重用来实现代码。遇到任何一个问题,都不放过,通过翻书、互联网搜索、与团队讨论、请教上级等各种方式对其进行探索,让自己彻底搞清楚,找到解决问题的最佳方法。与此问题相关的技术点,都一并进行学习,力求透彻理解。这样一个项目下来,此项目中遇到的各种问题,你都可以彻底解决,与这些问题相关的各种技术点,都被你全部掌握。这样,你的技能就会大大提升。
这种学习方法,会不会导致我的任务无法按时完成?刚开始的时候,会出现这样的情况。是因为你的基础太差,遇到的问题太多,并且还没有掌握分析问题、解决问题的正确方法,因此进度会比较慢。但很快你就会通过这一时期,基本概念变得清楚,分析问题也有了思路,解决问题的速度会大大加快。最终,你的进度和代码质量,一定会让你的项目经理满意的。
并非打开书本,一页页研读才叫学习。软件研发是一门实践的学科,在项目实践中学习,理论应用于实践,在实践中探索和思考,这样才能快速成长!
1 楼
young_suse
2010-03-18
说的太对了,很多时候,为了赶时间完成任务,我都是只图功能的完成,没怎么去考虑代码的质量。本想先把功能完成了,有时间再重构一下代码,事实上,过后根本就没有去做重构的工作。因此,一个项目,两个项目下来,代码水瓶还是上不去。以后一定要改啊,哪怕让自己加班也行。
2 楼
lwp2000
2010-03-19
楼主说的很真实,很贴切。中国的程序员大多就是这样的,不能适应快节奏的可发。这已经说明了一个问题:我们没有把工作当做学习,而是急于完成任务并不断的粘贴复制。这样的模式很值的我们去深思呀!
3 楼
renwolang521
2010-03-19
我们总是在赶,狂赶,有时候甚至盲目,很少停下来想一想。
4 楼
conqweal
2010-03-19
尽读书不如无书。。。。。
实践会给人更完整的认识。。。。。。。。
实践会给人更完整的认识。。。。。。。。
5 楼
C.T
2010-03-19
也是,总不能天天说忙,就放弃学习。
6 楼
海阔天空love
2010-03-19
精辟。。转载了。。lz没意见吧。。有意见也暂时保留吧。。哈哈。。。
7 楼
kuchaguangjie
2010-03-19
很好的经验,非常有道理,
不仅仅是写程序,我们生活中的每时每刻 都有类似的道理!!!
不仅仅是写程序,我们生活中的每时每刻 都有类似的道理!!!
8 楼
pignut_wang
2010-03-20
非常好的总结,可惜楼主不再深圳,真想好好聊聊
9 楼
shunai
2010-03-20
也有点感触
10 楼
haoshuo
2010-03-20
我觉得在做项目的时候就是学习最快的时候。闲暇时看书学习,和在项目中为了解决问题而查资料,两种学习的效率根本不可同日而语。
11 楼
shermenn
2010-03-20
12 楼
lyqidao
2010-03-21
代码改吧改吧 不是罪 要不然也会失去这最后的机会 ;代码改吧改吧 不是罪 要不然也会失去这最后的机会
13 楼
guji528
2010-03-22
总结很详细,在项目中学到的东西才最深刻。
14 楼
anysky131
2010-03-22
呵呵,最近也有些体会,但其实真正想要做好,也没有那么简单。
而且技术人员也都是从砌砖头开始的,砌多了也就明白了,也就能驾驭一些项目了,也就开始思考了,也就开始要求提升,也就提升了,也就越走越远,越做越深,越做越广了。
我觉得这是一个顺应事态发展的规律。
然后在规律中,我们可以通过自己多一点的努力,让自己能够把规律的时间缩短一些。
而且技术人员也都是从砌砖头开始的,砌多了也就明白了,也就能驾驭一些项目了,也就开始思考了,也就开始要求提升,也就提升了,也就越走越远,越做越深,越做越广了。
我觉得这是一个顺应事态发展的规律。
然后在规律中,我们可以通过自己多一点的努力,让自己能够把规律的时间缩短一些。
15 楼
lyqidao
2010-03-23