这篇文章发表在西邮计算机系系报《方舟》第31期上。

给计算机系同学的10条建议 v4.0

作者:西邮网络0406 王聪

世界上有10种人,一种是理解二进制的,另一种是不理解的。
──一条有名的计算机幽默

免责声明

    下文中的黑客(hacker)一词均指那些编写自由软件的计算机高手。入侵别人计算机 的人应该被称作骇客(cracker), 与黑客毫不相干。黑客文化伴随计算机而诞生,比骇客文化要早得多,而且还会一直延续下去。这是两种截然不同的文化。媒体似乎总喜欢误用这个名词,我们对此颇感头疼。 这使得我们每次在写文章时不得不先声明这个词的正确用法。


0.请热爱计算机专业。

    计算机领域是一个充满乐趣,富有创造性的领域。以计算机技术为核心的信息技术的飞速发展带来了世界性的革命,而且这场革命还在继续。 人工智能,分布式计算,生物计算机等领域让每个人都倍感兴奋。在不久的将来,它们也将会改变世界。 你永远都不会为今天选择学计算机而后悔,你所要做的就是赶快加入到这场变革中来。 是的,计算机充满了乐趣,正如下文将要揭示的那样,但确实要费一些力气才能得到这种乐趣。

    即使是计算机专业,也有很多领域,选择你最感兴趣的一个方面,哪怕它并不热门。 “兴趣是最好的老师”,从你最感兴趣的方面入手,触类旁通。 不论学哪个方面,坚持下去,精通它!

1.把计算机科学当成一门艺术。

    计算机是一门科学,更是一门艺术,因为它把积累的知识应用于世界, 因为它需要技巧和灵巧,尤其是因为它创造出了美的目标。 我们在电脑上同样可以创造出艺术和美。模糊地意识到自己是一名艺术家之后,你将会 享受他所做的工作,而且将会把它做得更好。

2.把英语学好,这样你才能学到更棒的技术。

    大多数优秀的计算机论文和书籍是用英语写成的,把英语学好,尤其是计算机英语。多读一些有名的计算机著作,英文原版的最好。 虽然很多都有翻译,但是,作为一名译者,我要告诉你们的是,有些语言背后的东西是翻译不出来的, 就像把“子非鱼安知鱼之乐”翻译成“You are not a fish, how can you feel the joy of a fish?”一样。所以,试着去读英文原版的资料吧。如果你还不行,马上去学英语!

3.微软不是全部!

    微软技术不是最棒的技术,Windows系统也不是最优秀的操作系统。 一味地使用Windows会让你们对微软产生过分的好感。 没关系,我以前也是。如果你们不想继续错下去的话, 请试着用一下Linux或者Unix吧!它们都比Windows要优秀得多。Linux可能比Windows要难学, 但是,把你花在Windows上不停地优化,不停地重启,和不停地重装系统的时间用到熟悉Linux命令和脚本上是更明智的! 后者会让你变得更聪明,更像一名程序员,而前者没有丝毫技术含量,只是机械式的重复。 记住:贝尔实验室(C,C++,UNIX都是从这里诞生的) 的科学家们使用的是Unix;MIT,CMU,Stanford计算机系是使用Unix/Linux教学的。微软 在那里的名誉很糟糕。

4.编程很重要,也很有意思。

    不管你学什么计算机专业{网络工程|计算机科学|电子科学},学好编程是必须的。网络专业离不开Java,HTML,PHP/ASP,优秀的网管离不开Perl/Shell;电科专业要和汇编,C, 嵌入式编程打交道;计科专业就更不用说了,C/C++/Java是必备的。编程是相当有意思 的一件事,它是对思维的一种良好的训练,把它学好保证你会终生受益。Linux之父这样解释编程的乐趣: “编程给人带来最初的兴奋很好解释:那就是通过编程你可以支配一台计算机,你叫计算机做什么,它就做什么, 永远准确无误,而且毫无怨言。这本身就很有意思。” 编程要比玩电脑游戏有意思得多,“因为它可以由你自己来制定游戏规则。而你制定什么样的规则, 也就会导出与此规则相符合的结果。在电脑世界中,你就是创世者,你对所发生的一切拥有最终的控制。 如果你功力深厚,你可以就是上帝。”如何学习编程的讨论将在下一个话题中讨论……

5.学会如何编程。

    如果你还不会任何编程语言,我建议你从Python开始。它比Java还要简单, 而且设计清晰,文档齐全,合适初学者入门。 它是一门很好的入门语言,并且不仅仅只是个玩具; 它非常强大、灵活,也适合做大型项目。 Java也可以用来作为入门语言,它也是一种优秀的计算机语言。

    学习如何编程就像学习用优美的自然语言写作一样。 最好的做法是读一些大师的“名著”, 试着自己写点东西,再读些,再写点,再读些,再写点…… 如此往复,直到你的“文章”达到你体会到的“范文”的简洁和力量。 这似乎是学习编程最好的方法了。和学习写作一样,不花足够的精力去学,没有一定的积累是写不出优秀的程序的。 所以,很多人都会给出下面的建议。

    大学四年至少写10万行代码,养成良好的编程习惯。相信我,这会帮你找到一份非常好的工作。 如果你的C/C++也学得足够好,那么恭喜你,很多面试你都能通过了,你可以马上去世界500强企业应聘了。

    然而,仅掌握一门编程语言是远远不够的。去学习不同的编程语言。 这能让你学到截然不同的编程思路和方法,每种都会让你受益非浅。这也将是你毕业以后(如果你还做程序设计工作的话) 要做的。大学四年最好能掌握至少三门编程语言,做到这并不很难,但确实要花一番力气。 学习多种编程语言也是为了让你更好地学会如何以抽象的方式思考编程问题, 独立于任何语言。这也是程序的核心──算法。 正如《程序员》杂志上大篇幅的介绍的那样,算法是计算机程序的灵魂,学好它帮你解决更多的复杂问题,语言相比之也 只是次要的。读一读《计算机编程艺术》吧,去领悟一下程序的真谛。

    过去找到适合阅读的好的代码是困难的,因为几乎没有大型程序的源代码能让新手练手。 这种状况已经戏剧性地发生变化;开放源代码软件,编程工具和操作系统(全都由黑客写成)现在已经随处可见。 让我们在下一个话题中继续讨论……

6.取得一个开源的Unix或Linux,慢慢学着使用它。

    微软为了赚取足够的$$$,把他们的源代码死死地保密着。你很可能永远也无法读到 Windows的源代码。这也是为什么黑客们都使用Unix/Linux的主要原因之一。 选择Unix/Linux会让你更像一名艺术家,更像一位计算机科学家。即使你打算以后做一名Windows程序员,学习Linux的经历都会让你受益! Linux是开放的,它本身就是一本教科书,不要荒废了它附带的源代码。试着读读Linux附带的源代码,我保证你一定会收获很多。 开源社区中有几T字节的源代码供你参考,多读它们,多利用它们,这也正是开源的用意。

    所以,在自己的电脑上装上一个Linux吧。是的,它可以和你的Windows友好地共存。 慢慢学着使用它和附带的工具,虽然一开始可能会有点困难。 但当你熟练之后,你的效率绝对会比Windows用户高很多。

7.参与开源项目。

    开源模式是一种全新的开发模式,它正在改变着世界。 尝试加入网络上的一些开源项目,你肯定会收获很多,即使你使用的是Windows。 想知道神秘的kernel是怎么开发维护的吗?加入Linux kernel的开发队伍吧!你的收获肯定比读20本介绍操作系统的书还多。 还犹豫什么?马上去freshmeat或sourceforge上找个你喜欢的项目,加入它!开源社区随时欢迎你的到来, 在这里你也会见到来自世界各地的朋友。

    把你从开源软件中得到的好处当成一种负担,以同样的方式去回报开源社区。 开源最引以为豪的就是它的社区气氛。协助开源发展,维护开源的氛围,让更多的人加入到开源中来,这就是对开源社区的最好回报。

    试着维护网络上的一些基础建设,撰写FAQ,HOWTO,管理邮件列表,开源项目等等。 这似乎是浪费时间,但是做这些事同样能让你赢得威望,因为社区需要这样的人。其实,做好这些也不是一件容易的事。

8.思想交流很重要。

    多和别人交流:订阅你感兴趣的邮件列表,加入你感兴趣的社区或用户组, 和你认识的高手谈谈技术。多听听他人的看法,尤其是这一领域的高手的,也发表一下你的见解。 批判地去接受别人的观点,敢于提出不同的见解,这样才能进步。多参与新闻组或邮件列表的讨论,但不要卷入口水战。

    尝试到国际新闻组上用英文去提问,然后再尝试解答别人提的一些问题,尽量让你的解答精彩。 这既能提高你的英语水平和技术水平,又能提高你在社区的声望。何乐而不为呢?

    养成提问的好习惯,在提问之前先到手册页,参考书,教程,FAQ中查找答案,如果找不到再提问。 这也是让你的问题得到尽快解决的最佳途径。想想有谁还想去解答一个被解答过五六遍的问题?

    乐于奉献,不要吝惜你掌握的技术,把它们拿出来和别人分享。

9.分清“技术”与“科学”。

    记住:你学的是计算机科学与技术,点几下鼠标不是技术,更不是科学。也不要把安装 操作系统或者配置IP地址当成很有技术含量的东西,有本事自己写一个操作系统内核或TCP/IP协议。这才是真正的技术。 但它仍然不是科学,科学是研究一种全新的操作系统理论或者设计一套更棒的网络协议。

    诚然,学习最新的技术会让你显地更加“时髦”,但是,一些旧的技术才是基础。 不要轻视陈旧的技术,比如汇编语言,有些时候它们还是挺有用的;也不要惧怕“高级”的技术,比如编写操作系统, 那并不很难。

    丰富的想像力是打开科学殿堂的一把神奇的钥匙,对计算机科学更是如此。不要束缚自己的想像力,大胆地去想。 所以,读一些科幻小说是很有帮助的。

A.养成良好的自学习惯。

    由于种种原因,国内计算机教育落后僵化。 你的老师很可能是慢的,不要等老师去讲。自己应该主动去探索,走到老师的前面。 不妨去学一下麻省理工学院的开放式课程,做做上面的题。 而且,很多你感兴趣的东西课本上并没有,自己学着去互联网上搜索,常去图书馆查阅资料,把你的 研究的结果写成论文,发表出去。养成良好的自学习惯会让你一生受用不尽。

B.把写作学好。

    这似乎和学计算机没多少关系。但是从我自身的体会来讲,这确实非常重要,这也是我给所有同学的建议。 学好写作吧,即使学校没有开设这门课程,这同样也会让你终身受益。试着成为写作高手,中文和英文都要掌握。其实很多黑客同时也是写作高手,他们建议:把英语当成是 另一种编程语言来学习。

    学会撰写论文,即使你没有考研究生的打算。科学研究成果都是以论文的形式发表的,论文写作对每一个大学生都很重要。据说,哈佛的一些本科毕业生写的论文比中科院的院士都好。 如果你还不会,赶快去学!

C.学会团队合作。

    乐于接受他人的奉献,不要闭门造车,很多时候我们可以奉行“拿来主义”。既然别人能够完成得更好,我们就不必自己再费力了。 这是团队合作的前提。团队精神是很多企业所倡导的。因为任何一个大型项目都不可能由一个人来完成,你必须要和别人合作,共同完成。 Linus一直维护着Linux内核的开发,他成功的秘诀就是能有效地利用别人的贡献,把开发的火炬传递到能胜任的人手中。 这也是Linus为什么出名的重要原因。

D.如果有空,多读点儿书吧。

    不妨给你喜欢的一本书的作者发一封电子邮件,谈谈你对他的著作的看法。 更进一步,指出他书中的错误,他一定会在下一版或勘误表中提到你的名字。不要局限于计算机,其它领域的东西也可能对你有所帮助。 说实话,计算机科学其实是一门涉及数学,哲学,符号学,心理学……的学科, 如果你信奉道和禅,那更棒了。

    切记:“尽信书不如无书”。不要迷信所谓的专家,专家们也可能出错,标准也有不对的地方。 要带着批判的眼光去读书。

E.Hack everything for fun!

    学计算机是很酷的一件事,尽量去释放自己的激情,施展自己的个性。 为了解决一个迷人的问题而通宵工作,为了支持Linux而去印一个Linux的T-shirt穿在身上…… 这才像我们学计算机的!把黑客精神用到生活中去。正如一位Unix黑客所言:“这个世界充满了待解决的迷人问题。” 你应该坚信尽管当你对某个问题近乎一无所知, 但只要你一点一点地试验、学习,最终会掌握并解决它。 并且,你得能从解决问题,磨练技术及锻炼智力中得到基本的乐趣。

F.没有建议F。