程序员的学习之路



一个程序员,一旦进入了一家软件企业,就会被安排到项目组中,进入项目的紧张开发过程。没日没夜的加班,写代码、调程序、改代码,披星戴月,累个半死。往往一个项目还没干完,第二个项目就来了,有的程序员甚至同时在4、5个项目中,整天忙得不可开交。

然而,高质量的软件,需要用高水准的技术来构建。软件开发,是个智力劳动,而非体力劳动。在项目进度很紧时,程序员会倾向用自己已经掌握的技术来解决问题,尽管他也知道这不是解决问题的最有效方法,但迫于时间压力,他愿意用陈旧的技术和大量的体力劳动来赢得时间。然而,项目的需求在不断变化,需求变化导致的最直接结果,就是大量的代码要被修改。以前大量复制粘贴的代码,都要被一一找出来,一个个仔细修改。进度被进一步延缓,体力劳动进一步加大。因此,当项目结束时,这样的程序员技能没有任何提升,只是付出了大量的体力而已。如果问他:你愿意学习你的技术吗?他会回答:我愿意,但项目太紧,我没时间学习。

以上,就是中国程序员的普遍生存状况。

我把上面的两句话再重复一下,加深大家的印象:
1. 高质量的软件,需要用高水准的技术来构建。
使用更先进、更强大的技术,会显著改善程序的结构,优化代码实现过程,导致代码数量更少,重用度提高,并提供更加强大的功能特性。当需求变化时,只需做少许改动,就能快速满足新需求。从而使项目进度加快,质量提高。
2. 软件开发,是个智力劳动,而非体力劳动。
构建软件是个智力密集型生产过程,而非体力劳动。所谓体力劳动,是指机械式的重复一些完全相同或大部分相同的工作。体力劳动工作量=∑重复代码数X重复次数。在这个公式中,需引起注意是重复次数。往往在项目开发中,我们第一次进行复制粘贴代码时,认为只此一次,但后续需求变化、结构调整、类的数量增多,重复次数的增长是惊人的。比如Web开发是,如果每个页面都复制粘贴同一段代码,那么整个项目可能会有成百上千个页面,这种重复劳动带来的体力工作量是巨大的。

因此,唯有使用更优化的软件架构、更好的程序结构、更优的算法、更优的实现逻辑,才有可能从忙碌疲惫的体力劳动中解脱出来,才有可能加快项目进度,提高软件质量。

而学习、掌握新的更为先进、更为强大的技术,是在项目中有效应用的前提。

那么,就如本文一开篇描述的那样,项目如此紧张,根本没时间学习啊?

答案:在项目中学习。
今天的项目是如此紧张,下一个项目也是如此。永远也不会出现这种情况:一个项目结束后,项目成员都放一周假,用于给大家学习。那是不可能发生的事情!即使出现短暂的假期,那么在假期里,没有任何压力,你就容易失去目标,你学什么呢?又怎么知道你理解的是否正确呢?这些知识应该用在什么地方呢?

因此,只能在项目中学习,在紧张的项目中进行深入学习,提升技能。

如何能做到?

在每一天的编程中,面对问题时,要求自己必须用最优的算法、最简单的结构、最简洁的逻辑过程、最大程度的重用来实现代码。遇到任何一个问题,都不放过,通过翻书、互联网搜索、与团队讨论、请教上级等各种方式对其进行探索,让自己彻底搞清楚,找到解决问题的最佳方法。与此问题相关的技术点,都一并进行学习,力求透彻理解。这样一个项目下来,此项目中遇到的各种问题,你都可以彻底解决,与这些问题相关的各种技术点,都被你全部掌握。这样,你的技能就会大大提升。

这种学习方法,会不会导致我的任务无法按时完成?刚开始的时候,会出现这样的情况。是因为你的基础太差,遇到的问题太多,并且还没有掌握分析问题、解决问题的正确方法,因此进度会比较慢。但很快你就会通过这一时期,基本概念变得清楚,分析问题也有了思路,解决问题的速度会大大加快。最终,你的进度和代码质量,一定会让你的项目经理满意的。

并非打开书本,一页页研读才叫学习。软件研发是一门实践的学科,在项目实践中学习,理论应用于实践,在实践中探索和思考,这样才能快速成长!


猜你喜欢

转载自kong-desheng.iteye.com/blog/615473