test: 博客美化中……

[转载]给IT专业的建议

给电子类专业大一新生的十三条建议

 

前言:

比较贴切一点,是给IT类相关专业大一新生的一些建议。写这篇文章的起因是老家几个亲戚的小孩今年高考,而且都是IT类相关专业。我是从一位大学毕业生及程序员的角度提的这些建议。类似这样的文章很多,权作一些补充,希望对他们的大学生活有所帮助。

 

 

复制代码
    
给计算机系学生的建议


作者: 周思博 (Joel Spolsky)
译: Chen Bin 
2005年1月2日 

虽然大概一两年前我还在夸夸其谈桌面应用程序是将来的潮流,大学生们现在还是偶尔向我请教职业发展的问题。所以我把我的建议写下来。以供学生们阅读,嘲笑,忽略。

大多数锐气十足的学生从来不向前辈征求意见。在计算机科学领域,这样做是正确的。因为前辈们很可能说些“在2010年前,市场对于那些只会敲击键盘的代码工人的需求将会超过一亿(因此前景是乐观的)”,或者诸如“Lisp语言现在真的很热门”。

我和那些前辈也差不多,当我给别人建议时,实际上我不知道自己在说些什么。我是如此的落后于时尚,以至于连AIM也搞不明白,而不得不使用 email(恐龙时代的产品,在那个时代,音乐是刻在扁扁的的圆圆的盒子上,噢,那种盒子叫cd)。(译者按:我认为祖儿这里在说反话,后文很多地方作者都在说反话,读者尽量理解这种美国式幽默吧。)

所以你最好不要理睬我将要说的,你应该立刻去制作某种在线交友软件。

然而,

如果你喜欢编程,那就感谢上帝吧:你属于幸运的少数人,这些人喜欢工作,他们的工作可以保证他们能过上舒适的生活。大多数人没有这么幸运。对大多数人来说,工作是不愉快的,忍受工作的目的攒钱,是为了在年满65岁退休后能过上自己想过的生活。如果他们想过的生活不需要灵活的膝盖,明亮的眼镜,轻盈的脚步的话。

现在让我回到主题,我将提供一些建议。

好了,不罗嗦了,下面就是Joel给计算机系学生们七条免费的建议:

毕业前学会写作
毕业前学会C语言
毕业前学习微观经济学(microeconomics)
不要因为某些非计算机课程枯燥无趣就敬而远之
学习有大量编程实践的课程
不要担心工作都跑到印度去了
好好做夏季毕业实习
让我逐条解释这些建议。但解释之前我要说明一下,如果因为这些建议是Joel的建议你就打算无条件地接受,以至于连我的理由都想跳过,那么你就太单纯,太容易被别人骗了。如果你是那种单纯的人,我还要给你第八条建议,找心理医生咨询一下如何培养自信(self-esteem)。

毕业前学会写作

如果Linus Torvalds不懂如何布道的话,Linux会成功吗? 正象每一个黑客,Linus精通写作,他知道如何准确地在email和邮件讨论组中使用书面英语表达自己的思想,所以他能够从全世界召集大量志愿者为Linux工作。

你听说过最近风靡全世界的极限编程(Extreme Programming)吗? 即使你不懂什么是极限编程,你至少听说过这个词。为什么?因为宣传极限编程的人都是天才的作者和演说家。

就看看你身边的那些小型的软件开发组织吧,最有权力和影响力的人是那些可以用自信,准确,舒适的英语交流的人。好吧,我承认这些人也许言过其实,但是你无可奈何。

一个合格的程序员和一个伟大的程序员的区别不在于知道多少种编程语言,不在于他们是喜欢Python或者Java,而是在于他们是否擅长表达。他们能够说服,所以他们获得权力。他们能够写清楚明白的评论和接口文档,所以他们使得别人不用重写,而可以重用他们的代码,否则他们的代码就是毫无用处的。他们也能够写出清晰的用户手册,于是最终用户可以理解他们的代码是做什么用的,明白了他们的工作的价值。sourceforge埋葬着许多精美的代码,这些已死的代码无人使用,因为代码的作者很少写(或者根本不写)用户手册。

我不会雇佣一个不懂写作的程序员。如果你擅长写,你就很容易找到工作,紧接着你就会被要求写技术规格文档,这意味着你已经被管理层注意到了。

大学里有一些课程,要求你做很多的写作练习,不要犹豫,赶快参加这些课程。不要错过任何要求你每周或者每天练习写作的课程。

给自己建立一个网络日志(weblog)。在上面写的越多,你会写地越容易。写地越容易,你就写地越多,这是一个正向地循环激励。

毕业前学会C语言
我可没有说是C++。虽然现在用C的工作不多,但是掌握各种编程语言的程序员事实上用C来交流(lingua franca);更重要的是,C比某些“现代”语言更接近机器语言。我不管现在大学里在教什么流行的垃圾语言(trendy junk),你至少得花一个学期接近机器。否则,你不可能使用高级语言写出高效的代码。这意味这你不会有机会写编译器或者操作系统,也许这是更好的编程工作;别人不会相信你能够为大项目设计架构。无论你知道多少高级的控制结构,知道如何进行错误处理,如果你不能解释为什么while (*s++ = *t++);的意思是进行字符串拷贝(而且对你而言这是世界上最自然,最易懂的代码),那么你就是在对编程一窍不通的状态下编程(programming based on superstition)。打个比方,就好比一个医生不懂基本的解剖学就给你开处方,如果你问这个医生为什么开这种药而不是那种药,他会说因为医药销售代表说这种药有用。

毕业前学习微观经济学(microeconomics)

我个人对经济学的一些理解:在经济学刚诞生的时候,它只是局限于有限的领域,在这些领域中人们发展和发现了很多有用的理论和很有趣的事实,这些理论和事实是从逻辑上是可以证明的。然后, 经济学开始走下坡路了。 “有限的领域”就是微观经济学,它对于商业可以进行有意义的指导。然后,事情就开始变糟了(以下部分你可以跳过),你接下来碰到的是讨论诸如失业率和银行利率之间关系之类东东的宏观经济学,很多时候宏观经济学讨论的理论都是无法证明正确或者错误的。接下来事态更加恶化了,经济学中的一些领域开始和物理学搭界,嗯,学习物理经济学也许你帮你在华尔街找到好工作。言归正传,无论如何请学习微观经济学,因为你需要知道什么是“供给和需求”,什么是竞争优势,什么是净现值(NPVs,Net Present Value,指项目经济寿命期内现金流入总和与现金流出总和之差额),什么是折扣和边际效用(discounting and marginal utility),如果你真想了解商业是如何运作的话。

为什么计算机系的学生要学习经济学?因为理解商业基本规律的程序员对商业界来说是宝贵的程序员。我记得无数个程序员使我非常沮丧,因为他们在代码中坚持某些疯狂的设计,这些设计从技术上来说,完美;从资本主义的角度来看,发疯。如果你是一个理解商业的程序员,商业会给你回报。这就是你要学习经济学的原因。

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

首先,你需要让你的学分平均分(GPA)看起来漂亮点。

不要低估学分平均分的威力。很多雇主和人事经理(包括我)阅读简历时首先看成绩,为什么?因为这代表了大部分的教授在很长的时期内对你的学业的一个平均的看法。托福成绩(美国的托福大致相对于我国的高考中的语文考试)?哈,几个小时的测验而已。当然学分不一定说明了一切,如果你修的是很难的课程,学分就有可能低一点。即使你的学分平均分很高,我还是要看各科分数是否一致。如果你应聘的是软件工程师职位,我为什么要关心你在大学里学的欧洲历史课程分数的高低呢?毕竟,历史很枯燥。那么要是你要编程的部分也是很枯燥的,你是不是要放弃了?事实上,有时候编程是枯燥的,如果你不能忍受编程中的枯燥部分的话,你就不能完成整个工作,雇主不愿意雇佣你这样的员工。

我在大学里修过一门叫做“文化人类学”的课程,因为那时候我也搞不懂我到底要学什么,听起来这么课程可能还蛮有意思的。

出乎我的意料。我不得不阅读大量讲述巴西热带雨林中的印第安人如何如何的书,让人真昏昏欲睡。听老师讲解也好不到哪去,我发觉看教室外的草如何长更有趣点。土著人如何烤蕃薯藤和我有什么关系?我为什么要去讨论如何烤蕃薯藤?但是期中考试马上就要到了,我暗暗下定决心,如果我能跨越“文化人类学”这个障碍,以后也许没有什么能难倒我了。我决心得A并且得到了A。以后当我不得不坐在林肯中心,连看18个小时的瓦格纳的《尼伯龙根的指环》时,我终于明白我为什么要学习“文化人类学”了,相比之下,我也能忍受这种歌剧了。

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

我还记得决定不去读研究生的那一刻。

就是在学习《动态逻辑》(Dynamic Logic)这门课的时候,我记得是耶鲁的Lenore Zuck(一个天才的教师)教的。

修这门课的时候,我已经不再是雄心勃勃了。我可不指望在这么课程中得个A,我梦想的是混个及格。逻辑本质上是很简单的:如果结论正确,前提必须正确。例如,如果“所有读书好的人都能找到工作”并且“张三的读书好”,那么“张三能够找到好工作”。就这么简单。

但是我要学的是动态逻辑, 动态逻辑和一般逻辑差不多,但是要考虑时间因素。例如,“在你开灯之后,你可以看见你的鞋子”加上“过去灯被打开了”意味着“你现在可以看到你的鞋子”

动态逻辑学对于象Zuck教授这样的天才理论家来说非常诱人,因为这门学科的知识也许可以用来证明计算机程序是否正确。我记得在第一堂课上,为了证明“如果你有一盏关着的灯”并且“你按了一下开关”,那么“现在灯亮了”,Zuck教授就使用了两黑板加上边上的墙壁。

证明过程难以置信的复杂。我觉得如此复杂的证明过程很可能会有小错误,但是我没办法证明证明过程本身是正确的。事实上,写在黑板上的证明跳过了很多中间步骤,许多步的证明使用了演绎法,使用了归纳法,以及一些研究生才懂的证明方法。

作为课后作业,我们需要证明以下命题:如果灯过去是关着的,并且现在它是开着的,请证明有人按了开关

我真的试着证明它了。

我花了许多小时,试图证明这个命题。

在无数个小时的努力后,我发觉Zuck博士的原始的证明有一个逻辑上的错误,也许这个错误是我的笔记抄错了,我不知道。于是我终于认识到,如果为了证明一个简单的问题需要花三个小时写下几黑板的证明步骤,再考虑到这个漫长的证明过程中可能会引入种种错误,那么这种机制是不可能用来证明任何有趣的东西的。

对动态逻辑学家来说,有用是无关紧要的。

于是我退出了那门课程,发誓永远不会去读计算机系的研究生。

这个故事的主题是,计算机科学和软件开发不一样。如果你非常非常幸运,你的学校会开软件开发的课程。然而,他们也可能不开这样的课程,因为名牌大学认为教授实用技巧的事情应该留给那些二三流的技术学院或者某些释放犯人再安置计划。你可以在任何地方学习编程,我们是耶鲁大学,我们培养未来的世界领导人。你付给耶鲁16万美元的学费就是为了学习如何写循环语句吗?你把耶鲁当成什么地方了?Java速成班吗?哼。

问题在于,我们没有一个专业的学校教授软件开发。所以如果你想成为一个程序员,你可以进计算机系读书(当然计算机科学也值得学习),但是你学的不是软件开发。

如果走运的话,你可以在计算机系发掘出很多有大量编程实践的课程,就象你能在历史系找到很多提供写作水平的课程一样。这些课程绝对值得学习。如果你喜欢编程,不要为你不能上教授诸如lambda算子或者线性代数的课程沮丧,在那里你连摸一下计算机的机会都没有。找找看有没有名字中带有“实习(Practicum)”字样的课程,不要在乎Practicum是个拉丁语。有用的(无奈状)课程就是需要在课程名中塞一些拉丁语,才能从那些装模作样(Liberal Artsy Fartsy)管理层的眼前蒙混过关。

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

啊哈,如果你人在印度,你就无所谓了。愿你享受外包带来的工作机会并顺祝身体健康。

但是我听说现在愿意读计算机系的学生越来越少了。据说原因之一是工作机会都跑到印度去了。我认为这种观点是大错特错。首先,根据眼前的商业时尚选择事业是非常愚蠢的。其次,即使工作真的都跑到印度和中国去了,编程对于其他有趣的工作来说都是极好的训练,例如业务流程工程(business process engineering)。第三,无论是在美国还是印度,好程序员仍然是非常短缺的,请相信我。当然,现在有许多所谓搞IT的人吵吵嚷嚷地说就业形势不好,工作太难找。但是事实如何?恕我直言,好程序员找工作还是很容易。第四,你还有更好的主意吗?历史系的毕业生找工作更容易吗?去法学院如何?据我所知,99%的律师恨他们的工作,每分钟都恨。而且律师一周工作90小时。正象我以前说过的,如果你喜欢计算机,那么感谢上帝,你将属于全世界人中的极少数的幸运儿,这些幸运儿热爱他们的工作,而且工作也可以提供体面的收入。

实际上,我也不认为报考计算机系的人越来越少有多大的意义。相对于internet泡沫时期大家都疯狂的往计算机系挤,现在的人数回落只是回归正常水平而已。在泡沫时期,我们这个行业涌入了许多对计算机毫无兴趣的南郭先生,他们梦想的是拿着高的吓人的薪水加诱人的期权,然后年轻退休。谢天谢地,现在这些人都跑了。

好好做夏季毕业实习

明智的招聘者知道热爱编程的人初中就为当地的牙医写数据库程序,高中就在计算机夏令营教课,为校报规划网站,在某个软件公司做实习。他们找的就是这样的人。

如果你喜欢编程,你最容易犯的最大的错误就是“有活就接”。我知道,其他专业的学生假期打工可顾不了这些条条框框。但是你不一样,你拥有一种特殊技能,不要浪费它。当你毕业时,你的简历上应该已经罗列一堆的编程工作实习。让其他人去“为大家提供租车服务”(Tom Welling是个例外,他业余时间去演超人)。

最后,为了让你的生活更容易一点,也为了说明我这篇文章是能够自圆其说的,我将给我自己的公司的做做广告。我的公司Fog Creek软件公司,可以为大学生提供软件开发方面的实习机会。在我们公司,你可以学习“编码,开发,商业”。去年在我们公司实习的Ben就是这么说的,可不是因为我给他什么好处他才这么说。二月一号截至,抓紧机会吧。

如果你听了我的建议,你就会太早地卖掉Microsoft公司的股票,拒绝Google提供的职位,原因是因为你已经拥有自己的公司了。到时候可别后悔,更别怪我,呵呵。
View Code
复制代码

 

 

 

 

我的建议:

1、 首要任务,找到自己的理想,方向,兴趣,人生规划。

我认为这才是大学的首要任务。从高中到大学,一下子没有人管了,很容易失去前进的动力而迷失方向。这个时候,确立自己的理想,方向,兴趣,才能找到新的动力来源。

在高考和应试教育的压力下,很难有精力来思考这些问题,而且也没有足够的信息来思考。进入大学是思考这些问题的一个非常好的时机:有时间,有精力,而且有更加全面的信息。

前几天看到一篇文章,说大学中,男生是在游戏里度过的,女生是在电视剧里度过的,虽然有些偏激,但确实有很多这样的现象。这要引以为戒。

如何做?网上有很多相关的信息,上网查一些资料,但总的来说有以下几步:

1)发现和培养自己的兴趣;这要多参加一些活动;

2)发现自己的优势;可以读一下《现在,发现你的优势》。

3)思考你以后想成为什么样的人。

4)落到实处,你要知道你大学要如何度过,为大学生活设定一个目标,做一个计划。

受限于能力,一个人的方向并不是一成不变的,随着你的认识的增长,你可以自己再做调整。但是,我认为,在大学有没有方向,比方向是什么更加的重要。

 

2、 转变学习方法:从理论到实践。

在高中分数基本上就是最重要的,但是大学不是。这一点必须尽快转变过来,否则毕业的时候可能就是失业的时候。

当然,并不是说大学的课程不重要,而是要转变一下思路,特别是从理论到实践的转变。现在大学教育一个非常大的缺陷就是不注重动手,特别是计算机,是一个实践性很强的学科,一个学科学习的过程中一定要亲自动手去使用它才可以理解的更加的深刻。按照两种不同的思路(理论和实践)来学习c语言,结果可能是天差之别。

如果想毕业后从事编程方面的工作,那么李开复的一个建议非常好,就是大学要编写10万行代码。如果真能够做到这样,那么你毕业后,根本不用担心找不到工作。

 

3、 注册CSDN,博客园,新浪微博,google reader。

理由:

1)CSDN,博客园:在这里可以了解IT技术的发展趋势,交流技术和学习心得,而且也可以认识很多志同道合的人,使你在学习的道路上不孤单。

2)新浪微博:最近比较火,很多牛人都在上面非常活跃,可以多关注他们,可以学到很多东西。推荐李开复,俞敏洪。

3)google reader:对于感兴趣的博客,可以使用google reader订阅。关注技术领域的博客能够学到很多东西。

 

4、学好计算机基础:数据结构与算法,c语言,编译原理等

这些基础非常重要,可以帮助你在技术领域走得更远,也可以帮助你更好的理解技术。很多公司招聘也要求应聘者在这方面有扎实的基础。这些课程可能会有些枯燥,参考第二个建议,多动手,多实践,这些课程也会非常的有趣。

 

5、关注李开复,俞敏洪等一些名人的文章和演讲

这些人比较关心中国的教育,给大学生提的意见也非常的不错。李开复写过给大学生的几封信,俞敏洪也有一些针对大学生的演讲,非常不错,值得看一下。同时还有joel对计算机学生的建议:给计算机系学生的建议

 

6、大一开始学习编程语言:推荐Python

很多学习大一一般不会开编程语言的课程,这个时候可以自学一门编程语言,提前熟悉一下什么是编程语言。我推荐的是python。推荐的理由见这篇文章:如何成为一名黑客。里面提到如何学习编程,非常有必要学习一下。另外,这篇文章也许可以改变你对黑客的认识。国外有很多知名的大学生黑客,你也可以把黑客作为你的目标。

 

7、开始写博客

这个可能有点难,不过对于学习的帮助还是非常大的。一个是让你能更好的总结,但我认为更重要的一个就是对你自己的激励:当你看到你的文章被别人阅读,评论,你的博客访问量越来越大,排名越来越靠前,关注者越来越多,你就会获得越来越多的成就感,同时促使你去学习,以写出更好的文章。这其实类似于网络游戏,不过他不是在虚拟的世界中给你满足,而是在现实的世界中。

写博客还可以使你对技术有更深入的理解。把学习的东西说出来,你会理解的更加深刻,也会在和读者的交流中进一步深入。

刚开始写什么?可以写一下你的学习心得,你学了哪些东西,怎么学的,学习过程中的一些思考,都可以写,慢慢的你就有写作的课题了。我看过几个写得比较好的博客,都是大学生,其中最典型的一个:http://blog.csdn.net/v_july_v/article/details/6756427,博主开博一两年,主要关注算法,现在也刚刚毕业。

建议每周写一篇。

 

8、一个不错的学习资源:知名大学的公开课

 

9、学会使用搜索:google 百度

现在的搜索引擎,基本上什么都可以找得到。如果你有疑问,或者想查询什么信息,完全可以借助于他。包括上面我提到的一些内容,我很多并没有说的很详细,这要靠你通过搜索去完善。对于技术也一样,很多疑问可以通过它来解决。google和百度用那个?我推荐google,特别是技术相关问题。

 

10、安装并学习linux操作系统

理由:linux是一个开源操作系统,能够让你更深入学习;linux上面有很多非常优秀的开发工具,可以提高你的开发效率;linux社区非常活跃,以及在这个社区下形成的一个优秀的设计理念,非常值得去学习;最后,现在开发中linux越来越重要,很多公司都是基于linux开发,熟悉linux操作系统会让你在找工作时更有竞争力。

你可以安装一个windows,然后在上面再安装一个linux虚拟机。建议课程实践动手均在linux下进行。

 

11、多写程序

如果你有志于从事软件开发,那么,你应该将10万行代码作为你的大学目标。

如何达到这个目标?课程实践是一块,但还不够。剩下的一部分,需要你自己去发现你身边需求,分析,并且用代码去实现。比如,你搭建一个个人博客,写一个linux下的实用工具。其实很多企业都是从校园走出去的,最著名的可能要数facebook了。如果实在找不到做什么,可以考虑实现一下linux的命令,比如ls,cd,more等。

 

12、注重提高综合能力

理工科学生可以多学习文科方面的知识,比如历史,哲学,经济,逻辑,管理等,对个人的发展还是非常有帮助的。

 

13、思考,深入的思考,独立的思考

把它放在最后一个不是说他不重要,恰恰相反,他是我认为最重要的一个:你要锻炼强悍的思考能力。

这个建议意味着,对于上面的十二条建议,你要有你自己的思考:为什么非得要学习linux操作系统?为什么一定要写10万行?为什么是python?

你可以可以把我的建议全部推倒,但是,你要自己思考一个问题:你的大学要如何度过。

 

其他的建议:

可以阅读一下一本书:《我是一只IT小小鸟》,这本书总体来说还挺好。

找机会做一些和你的专业相关的实习。

可以参加竞赛,社团,但是要有目的,否则容易迷失:大学中这些还是非常多的。

面对教育,不要做愤青,要学会逆势而为。与其抱怨社会,不如改变自己。

要多锻炼身体,养成一个好的生活习惯。

可以勤工俭学,但不要过度,不能影响学习。助学贷款是一个不错的途径。另外,更好的也许是利用你学到的技术去赚钱,可以一举两得。

 

大学时人生中非常美好的一段经历。希望毕业的时候,你在回顾四年大学生活的时候,你可以说你不后悔,你过得很有价值。

 

 本文转自http://www.cnblogs.com/chgaowei/archive/2011/09/12/2174012.html

 

posted @   前程明亮  阅读(275)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
点击右上角即可分享
微信分享提示