看了Joel的《给计算机系学生的建议》这篇文章,觉得讲的还是比较精辟的.Joel正好也是我刚听到的名字.因为最近一本热门的图书《Joel说软件》,手边就有这本书,大家的评价很高.我也正在看.

 

Joel对于计算机系的学生给出了七条建议:

1.       毕业前学会写作

2.       毕业前学会C语言

3.       毕业前学习微观经济学

4.       不要因为某些非计算机课程枯燥无趣就敬而远之

5.       学习有大量编程实践的课程

6.       不要担心工作都跑到印度去了

7.       好好做夏季实习

下面再截取一些Joel的经典的解释,每一点都和上面的建议对应:

1.       会写作就更能阐述自己的思想.软件开发组织中,最有权力和影响力的人是那些可以用自信,准确,舒适的英语脚炉的人.
一个合格的程序员和一个伟大的程序员的区别不在于懂得多少中变成语言,而在于他们是否善于表达.能够说服他人,就能够获得权力.
会写作的人,能够写清晰的用户手册,还有代码的注释,用户明白了软件的用途,明白了他的工作价值.
最后,Joel建议学生要重视写作方面的课程,给自己建立一个网络日志.写的越多,写地越容易;写地越容易,写地就越多,这是一个良性循环.

2.       C语言比某些现代语言更接近及其语言.不会C语言,你不可能使用高级语言写出高效的代码,别人不相信你能够为大项目设计架构.

3.       微观经济学是现代商业的理论基础.理解商业基本规律的程序员对于商业界来说是更有价值的程序员.

4.       你需要让你的学分平均分看起来漂亮一点,许多招聘主管就喜欢看这个.有时候编程同样是很枯燥的,每份工作都会有让人厌烦的时候.我是不会聘请那些只愿意感有趣工作的人.

5.       计算机科学和软件开发不一样.如果你想成为一个程序员,你可以进计算机系,这是一个非常好的专业,但是你学的不是软件开发.如果你喜欢编程,不要为你不能理解教授诸如lambda算子或者线性代数等课程重点而沮丧,在这些课程里你连摸一下计算机的机会都没有.要注重去学习一些和事件相关的课程.

6.       首先,根据眼前的商业时尚选择事业是非常愚蠢的.
其次,即使编程的工作真的都跑到印度和中国去了,编程对于其他有趣的工作来说都是极好的训练
第三,无论是在美国还是在印度,好的程序员还是非常短缺的,请相信我.好的程序员找工作还是非常容易的.

7.       明知的招聘者会知道:真正热爱编程的人,初中就为当地的牙医写数据库程序,工作暑假就在计算机夏令营教课,为校报开发内容管理系统,并在某个软件公司做暑假实习.
当你毕业时,你的建立上应该罗列上一堆的编程实习工作.

 

看过Joel的建议后,感觉自己好多问题之前也有认识,不过还是有些没有意识到的地方.但是,自己虽然有认识但是还是做的很不到位或者没做,说来惭愧呀,好多的机会没有把握.针对Joel的七点,我总结一下我在学校的时候是如何实践的,做的不好的地方,请大学生朋友提高警惕,吸取经验:

1.       对于写作,我没有专门得学习,在学校的时候也有这方面的选修课,但当时认为这种课程没有什么用处.其实在高中的时候语文就不好,作文也是一塌糊涂,所以,真的是错过了学习提高的机会,一位大学还是很有时间的,我想这点大家都会认同.

2.       说起C语言更是惭愧,一开始学习的是Pascal,这也是我接触的第一门编程语言,其实说实在的学完了那门课程后,除了了解了点语法之外,根本就不知道编程是怎么一回事!学校语言方面的课程都教的很差,老师水平平平,每门课程顶多就是教个语法就ok.C语言在我们学校及其不重视,我觉得很重要的原因就是老师都不熟悉.C语言作为选修课开,记得当时只上过不到十次的课,知识嘛也没学会.最后考试,成绩非常悲惨,60,还得感谢老师的照顾.这门课也是我大学所有成绩中最最低的一门课程,其他的再差也没低于70分的时候.现在想想就这水平怎么好意思在程序员里面混.

3.       当时在学校的时候也有意识:不能一心只搞技术,还要有管理/经济方面的知识.当时只是一种很浅的意识和需求(也可以理解为一种需求),但是并不是很清楚,应该怎么去做,什么知识需要学习,需要学好.正好学校有机会修双学位,我马上就选择了修工商管理专业,一方面原因是因为:可以拿到两个学位,另一方面原因是:我那浅薄的意识.但是,真正到了上课的时候,那点浅薄的意识全无,对什么微观经济学/宏观经济学/财务管理/企业管理等课程毫无兴趣,最后这些课程几乎没有学到知识,只是了解了一些名次和概念,浪费了好多的时间.换来了一张毫无分量的学位证书,现在想想证书是次要的,重要的是能力和学到有用的知识,又一次好的机会错过了.

4.       对于这一点,我更想说的就是计算机方面一些基础课程的学习.当时老师总是一个劲得讲数据结构很重要,很重要,但是对于我们对于计算机编程还没有任何感性认识的人来说理解数据结构的重要,那简直是不可能的.之所以认为它重要是因为计算机研究生要考这门课程,老师跟我们也是这样说的.之后又是一些很基础很重要的课程,比如:操作系统/编译原理/计算机组成/数据库/网络,老师说很重要,但是我们依然重视不起来,因为这几门课都是非常抽象/理论的,学起来味同嚼蜡,巨枯燥.所以,同样被我一一混过了!
还有一点在大学里面学习计算机,一定要想想自己是不是对计算机这个专业很有兴趣,搞软件开发兴趣和好奇心非常重要.如果感觉没有兴趣,那么赶紧想别的出路,省得到时候后悔.如果非常感兴趣,那我只能祝贺了!

5.       学习软件开发一定要实践-上机!这方面我一直比较积极的.不过这里也得感谢我姨,无偿得为我提供了一台崭新的电脑,所以一开始我就有了比较好的条件.其实,对于现在的大部分计算机系的学生来说条件真的已经是非常优越了,不论是学校和个人都有丰富的资源,宿舍里有宽带网络,机房都是崭新的机器,而且记得到了大三,我们班30个人,已经拥有了20多台电脑,男生仅有三个人没有.但是事实却非常令人遗憾,大部分人的电脑都成了电视机/VCD/DVD,聊天工具,外加游戏机.所以后果也是非常残酷的,我们班到现在为止也就有四五个人还从事着软件开发的工作.其实不是有些同学不想搞软件开发,而是真的是没学到多少知识.

6.       在学校里面也是听到了好多关于毕业的学生太多,就业难之类的报道.但是我当时没什么感觉,因为我在大学最后的两年里面还是积累了一点实践的经验.我是比较顺利在CSDN论坛上通过一篇招聘的帖子找到了工作,一个是第一家公司当时比较缺人,加之我美工和PHP都会一些,也有项目经验,所以比较顺利的就找到了第一份工作,然后我就只身一人从山东来到上海,我也参加了几场招聘会,主要是看看有没有更好的机会,还是有几个公司有了意向.所以我的感觉也是这样的,工作并不难找,学历学位不是最重要的,关键是看你的能力和有没有相关的工作经验.

7.       找机会实习.这方面要从我参加我们学校的网络教育中心开始.我从大一下学期就开始学习网页制作,然后就学习了一些PHP开发web程序的知识.大二的下学期有机会加入到了网络教育中心,我加入后主要也就是4个人,我们负责开发和维护学校的学生信息管理系统.在那里我还是学到一些软件开发实践方面的知识,后来我到了大四之后,我们成立了蓝天工作室,我们的队伍也壮大的起来,最多的时候达到了十多个人,但是我们做的项目却没有什么太多的进展,主要还是继续开发和维护学生信息管理系统,本来要做一个校园的社区,结果只做了一半的功能就放下了没有完成.现在想想当时的机会和资源真是浪费了,其实可以好好组织工作室的,可以学到更多的知识,拉到更多的项目来做,但是现在想想也不知道当时都忙什么去了.大学四年软件开发方面的知识,大部分都是从我们的这段经历中学到了.
之前我也有为我们学院设计主页,为别的学校的学院设计主页的经历,这样的经历也很好,可以认识更多的人,还有就是有小费的呵呵.大四上学期最后的接近两个月的实践,我们工作室的几个人有机会和外面的一家软件公司合作为地税局开发一套web系统,这也是一次难得的经历,因为做项目可以学到很多实践方面的知识,虽然会比较辛苦.大四的下学期我已经开始到公司上班了.所以,我一直还是比较重视实践的机会的,如果在学校里面学不到东西,那就尽快走出来学习.

 

最后,我想再针对我现在的情况和切身的感受,给自己,也给在校学生一点符合国情的建议:

1.       真正工作的时候表达和沟通能力是非常非常重要的,每个公司都非常重视员工的沟通能力.而据我观察程序员由于长期从事编程工作都变得非常内向,不善于与人沟通.所以的确很容易发现,公司里面懂技术会沟通,表达能力好的人,往往都会提升.所以,我现在也是要积极沟通,多看一些相关的书,参加一些培训,还有就是多跟同事朋友交流.网络日志就是非常好的平台,要养成写网络日志的好习惯,因为写网络日志可以激发思考,可以总结经验,可以记录知识,可以锻炼写作和表达能力,同时可以结交朋友.所以这么多好处就不要再犹豫了.还有一点就是尽量争取和利用公司内部培训的机会,主要要求提供为别人培训的机会,这样既可以锻炼自己的演讲和表达能力,也能够巩固自己的知识,树立自己的信心和在别人心中的形象,如果你善于表达,你就能更好地分享自己的知识,这样很多人就会喜欢你,人际关系也会搞得不错.

2.       现在我真的能够清楚的知道一些计算机方面的基础课程的重要了.所以,我现在还是要把基础打好首先是一些基础理论方面的知识比如操作系统/TCP/IP协议/数据库等.同时要重视学习面向对象/UML/设计模式相关的知识,还有就是软件工程方面的知识,例如:极限编程/测试驱动开发/RUP.同时也包括其他一些实用的技术,所以作为程序员一定要不断地充实自己.

3.       我现在才发现,只有懂得商业你才能更好得理解客户需求,你就不会对产品或者业务部门的需求感到莫名其妙.还有也是要多关注经济方面的知识和现象,懂得一些经济原理.最好对于财务知识和理财知识也要掌握.

4.       端正态度,要么不做,做就要全心全力地做,追求卓越.学计算机兴趣和好奇心非常重要.兴趣和好奇心是你不断学习新技术的驱动力.

5.       积极实践,对于出现的新技术新的框架,不要只是简单看看,或者听别人说好或者说坏.自己写个实例试试,然后自己来判断.别偷懒!!!!同时结合着项目进行实践,不断尝试,不断思考.最近我就会看一些架构方面的书,发现问题我就会在项目中积极调整,还有就是我在看设计模式的知识的时候我就会想我手头的项目中是不是也有同样的问题,是不是可以用设计模式进行优化.

6.       软件公司还是非常缺人的,特别缺优秀的开发人员,什么是优秀的软件开发人员呢?我认为无非就是包括两方面:能力和态度.任何人做好这两方面都会是一位非常优秀的程序员.其中能力主要包括了:软件开发的技术能力,分析解决问题的能力, 团队合作的能力,学习能力,沟通协调能力.态度方面主要包括了:工作态度,工作要认真负责,积极主动地发现问题解决问题,任劳任怨的高质量完成工作任务.

7.       大学生朋友要积极寻找实习的机会.软件开发人员把工作做到卓越,然后利用个人的空闲实践不断充实完善自己.养成好的习惯,做好计划,严格执行!

 

看过了Joel的文章,我马上把感想写了下来.因为我要积极改变自己,勤于总结.