作者:吴文龙 04级服务科学与工程系 来源:北大软微学院院刊 酷勤网收集 2007-12-09
受仁文弟委托,为新生特刊写一篇关于技术学习的文作,我心里想,无论再忙,这件事情我也是一定要做的。这篇文作的价值似乎要取决于我目前的处境了,如果是那些在大的软件公司工作的师兄来写,那信服力必然是要超过我的。所以呢,我只能是老老实实的把自己在这里几年的经历写一遍吧。还有一点需要声明的,由于我个人的情况,这篇文作只适合之前不是学技术然后想开始做技术的同学看。
本文大概包含以下几个部分,引言,课程体系,学习经验。引言主要介绍了我当初过来这边的心态,课程体系主要结合软件开发的大致知识体系描述一下这边的课程,学习经验就是我个人的一些零星的总结。
引言
先说明一下我自身的情况吧,也好有个上下文。2004年7月,我从南京邮电学院毕业,所修专业是经济学。本科的时候,我是不喜欢计算机的,上网10分钟之后就根本坐不住,坐在电脑前根本就不知道做什么好。开学前的暑假,也没有去想什么工作和前途的事情,开开心心的去娱乐就是了,有空就看点计算机方面的书,只不过事后想想,似乎完全没有意义,又看不懂什么,只是为了寻求一个心理平衡吧。当然,我想无论在哪,3年,是会改变人生规划的份量,一点心理准备还是需要的,我当时的准备就是:到软件学院来,我不学技术还能做什么。
想法要简单和单纯,这一点异常的重要,想法太多太复杂反而会造成迷茫。到这边来的很多人都会遇到这个问题,就是自己到底该学什么,技术类?管理类?它们适不适合自己呢?有没有前途呢?千万不要这样,这里是学校,不是社会,没那么复杂,自己到底适合做什么以及做什么有前途,自己真的能知道么?还有就是在这里,时间是非常的紧凑的,特别是第一个学期,你错过了这个学期,你就要错过整个的学习平台。很简单的,做技术吧,然后也会担心自己会学不好,谁知道呢?我能说的只是不用担心,专心的去做吧,你总要相信自己的吧。还有就是技术,并不是我们想象的那么神秘的,找好自己想做的那个方面,一两年的时间足够的。
课程体系
说点实际的吧,我先把我在这边的学习历程说一下,在第一个学期,选课推荐:程序开发环境与实践,面向对象技术,操作系统高级课程。这3门课是必须要学习的,需要非常认真的学习的。在这里学习有几点需要知道的,第一,这里的课是很贵的,千万不能一个学期选的太多,浪费啊。第二,你要有自己的学习目标,知识体系,按这个去选课,而不是以课程为主。第三,老师和课堂能给你的只是很少的一部分,要完善自己的知识体系,课外需要花很多的额外时间,不要被课程赶着走,要按自己的知识体系去补知识。第四,每个课程都有一些课程项目,这个不要当作仅仅是作业去做。程序开发环境与实践,关键是上好课,全心听老师讲,特别是开始那4次的C++课。面向对象技术,关键是好好的完成一个课程项目,可以去网上或程序员杂志上找找一些例子。操作系统高级课程,关键是几个小实习,和那本经典的教材,至少需要看一遍教材的。
如下图,我大概在这边学习了一年之后,才摸索到这么一个学习体系,标有红星的是必须要学习的。我的选课也基本上是按照下面的结构由下往上进行的。
在第一个学期的基础知识学习完成之后,开始接触到很多的软件技术和工程技术,比如Internet高级编程,软件设计模式,面向对象技术等,这些也基本上是必须的,只是这些课程的学习会比较困难,不同于基础知识,必须结合应用技术才可以学好,就是说要侧重于实践,这部分的课程可以结合应用技术的课程交叉选修。
应用技术,主要是指应用开发平台相关技术,如果是想作J2EE,开发平台架构与使用这门课是必须修的,但是有一个条件,就是这门要IBM年轻工程师过来讲授,如果是学院老师讲,那这门课的重要性就是大打折扣了。我记得当时听他们讲课,有时候会被压的呼吸不过来,每次课,将几百页的PPT,不专注根本就跟不上的。然后就是这门课程的课程作业也很有锻炼价值,不要学EJB,大致了解一下,听一下其中的理念就可以了,可以把重心放在J2EE的基本架构和核心技术上。接下来就是应用方向,可以选2到3门,这部分是进入软件行业的准备,会学到一些目前行业的状况,可以看看自己学习的知识在里面的运用。
在最后,你至少要以你选择的应用技术为核心,熟悉一套技术解决方案。如下图,是一个简略的技术解决方案。
学习经验
关于学习经验,之前已经写的比较多了,大家有兴趣可以到我的博客里去看。在这里,列举一下几点,个人经验吧,仅供参考。
第一、问道。刚来这里的时候,太多的问题都不懂,于是总是请教舍友,后来自己懂得一些了,至少是入了门吧,慢慢得请教别人就越来越少,不是没有问题,问题还是和以前一样的多,但是我不请教,我每次遇到问题,就算是非常的困难,就算是那种别人一句话提醒就可以但如果自己做就需要好几个小时或是一整天,这种问题,我同样也不请教。解决问题不是为了得到答案,而是在解决过程中学习知识,所以就是自己做,查书,用搜索,很多时候都是为了解决一个问题,学习了某本书的好几章。这样,我学习到的知识可能要比那些总是虚心请教别人的人弱一些,因为我花太多的时间去自己钻问题,甚至有时候确实是浪费时间。但是这样下来,我的另一方面的能力强了,就是解决问题的能力。遇到一个问题,就能很快的感觉出是哪个地方出了问题,我相信这个能力对于应用知识本身更加重要一些。懂的多当然好,但是知道怎么去懂更好。
第二、学道。到这边来的学生大部分是急功近利的,整天讨论这里实习那里实习,虚荣的很,拿学习来说,只求自己会做更多的东西,而不是求自己知道更多的东西,看上去学的要快一些,项目会做一些,其实这是一个很大的错误。这样,如果保证自己出来之后可以很好的和那些专科,高职出身的学生区别开来呢?说是软件工程,没有扎实的底层深层的知识,在开发领域里,你就是一个小角色,而且更麻烦的是,很难通过技术转型到项目经理。就拿JDBC来说,会连数据库,会操作数据库,这些远远不够的,需要了解数据库服务器,需要了解那些驱动程序的意义,需要了解为什么会这样?驱动程序主要是做什么的,让你来实现某数据库服务器的驱动程序,你会怎么去思考设计。FORM提交的表单是HTTP数据包,HTTP数据包的格式让你来设计,你会怎么去设计,需要哪些字段呢?客户端向服务器传数据,最基本的,第一告诉客户端的特征,第二,通信的协议,第三,数据实体,第四数据描述。这样一想,其实没有那么神秘,我们也可以做到的。其他的还有Session机制,Servlet实现,包括WEB服务器本身以及ArrayList、Hashtable等数据结构的设计啊都没有那么的神秘。很多很多,只要保持着这种学习心态,点点滴滴,你学会了的是一种思考和设计的能力,而不仅仅是知识本身。
第三、代码道。在学校,很多学生说会J2EE,可是连页面都不会写;很多学生津津乐道于struts的简单应用,可是连JSP都用的不熟;很多学生会抄代码搞个数据库连接池,却不知道驱动程序是做什么用的。这种例子太多太多,我说我觉得STRUTS框架开发很复杂,他们说很简单很清晰,还现场给我演示,我告诉了他,复杂还简单不在于它看上去怎么样,而在于你自己对它的掌控力如何。建议一下,自己写的每一句代码都要力求完全深入了解到机器语言,如果是java,至少要了解到JVM是怎么处理这句代码的。开始的时候会比较艰难,只要自己坚持下来,会豁然开朗的。就像背英语单词一样,你天天背,天天背,也不去想会进步多少,然后突然间就会发现自己对英语的阅读能力和理解能力提高了很多。当然,这也只是一个思维而已,并不是一定要做到,我自己也大部分时间做不到的,但是脑袋里面有这么一个思维,写代码的时候就自然会去思考更多。先就这样吧,时间比较紧,下次有机会,希望可以和大家在一起做更多的交流,我也会在博客里继续发一些关于JAVA相关的学习经验。
作者简介:吴文龙,北京大学软件与微电子学院04级服务科学与工程系硕士,本科毕业于南京邮电学院经济学系。读研期间,成功实现非技术向技术转型,现自主创业中。



