学计算机必看:程序员部落酋长,给计算机专业学生的 6 个建议!

若是你喜欢编程,那么你真是受到了上天的眷顾。你是很是幸运的少数人之一,可以以本身喜欢的事谋生。大多数人没有这么幸运。你认为理所固然的观念“热爱你的工做”,实际上是一个很现代的概念。一般的见解是,工做是一种让人很不开心的事,你为了拿工资才不得不去上班。程序员

你工做的目的是为了攒下钱去干那些本身真正喜欢干的事,可是前提是你得等到65岁退休以后才行,并且还有很多条件。条件一,你的积蓄必须足够多;条件二,你没有老到走不动,你还有体力去干那些事情;条件三,你喜欢的事情不须要用到脆弱的膝盖、昏花的视力,也不要求你走上一里地不喘气,等等。数据库

我刚才说到哪里了?对了,我要提建议。编程

毕业前练好写做

若是不是Linus Torvalds不断地散布福音,请问Linux操做系统会成功吗?虽然他是一个很是聪明的计算机天才,可是Linux吸引来全世界一大批志愿者的真正缘由倒是Linus Torvalds的表达能力。他经过电子邮件和邮件列表用书面形式传播本身的想法,最终引发了全部人的注意。微信

你据说过如今风靡一时的“极限编程”(Extreme Programming)吗?我在这个地方不谈我对极限编程的见解,我只说若是你听过这个词,那么缘由就是它的倡导者都是一些很是有才华的做家和演说家。闭包

即便咱们缩小范围,将目光局限在任何一个软件开发团体中,你也会发现该团体中最有权势和影响力的程序员正是那些表达能力强的程序员,他们不管是作书面表达仍是作口头表达,都可以清晰、自如、具备说服力地传达观点。此外,长得高也有助于提高影响力,不过这个不取决于你。架构

一个普通程序员与一个优秀程序员的区别,不在于他们懂得的编程语言谁多谁少,也不在于他们喜欢用Python语言仍是喜欢用Java语言,而在于他们可否与他人交流思想。若是你能说服其余人,你的力量就能够获得放大。若是你能写出清晰的注释和技术规格说明书,其余程序员就可以理解你的代码,所以他们就能在本身的代码中使用,而没必要重写。若是你作不到这一点,你的代码对其余人就没有价值。若是你能为最终用户写出清晰的使用手册,其余人就能明白你的代码是用来干什么的,这是惟一让别人明白你的代码有何价值的方法。SourceForge[ ]上有许多优美的、有用的代码,可是它们都像被埋葬了同样,根本没人来用,缘由就是它们的做者没有写好使用说明(或者压根就没写)。这样一来就没有人知道他们的成果,他们杰出的代码就衰亡了。编程语言

若是一个程序员不会用英语写做、没有良好的写做能力,我就不会雇他。若是你能写,无论你去哪家公司工做,你很快就会发现写做技术文档的任务会落到你头上,这意味着你已经开始在放大本身的影响力了,管理层正在注意到你。学习

大学里有些课程被公认为“写做密集型”(writing intensive)课程,这就是说为了拿到学分,你必须写做多得可怕的文字。必定要去上这样的课程!不要管学科,只要这门课每周甚至天天都要你写东西,你就去上。测试

你还能够动手写日记或者网志。你写得越多,写做就会变得越容易。写起来越容易,你就会写得越多。这是一个良性循环。spa

毕业前学好C语言

第二点我要讲的是C语言。请注意,我说的是C语言,而不是C++。虽然在实际使用中C语言已经愈来愈罕见,可是它仍然是当前程序员的共同语言。C语言让程序员互相沟通,更重要的是,它比你在大学中学到的“现代语言”(好比ML语言、Java语言、Python语言或者其它正在教授的流行垃圾语言)都更接近机器。你至少须要花一个学期来了解机器原理,不然你永远不可能在高级语言的层次写出高效的代码。你也永远没法开发编译器和操做系统,而它们偏偏属于目前程序员可以获得的最佳工做之列。别人也永远不会放心将大型项目的架构设计交给你。我无论你懂多少延续(continuation)、闭包(closure)、异常处理(exception handling),只要你不能解释为何while ( s++ = t++);这句代码的做用是复制字符串,或者不以为这是世界上对你来讲再天然不过的事情,那么你就是在盲目无知的状况下编程。在我看来,这就好像一个医生不懂得最基本的解剖学就在开处方,他看病的根据彻底是由于那些娃娃脸的医药厂商销售表明说这种药有用。

毕业前学好微观经济学

若是你没有上过任何经济学课程,那么我首先来作一个超短的评论:经济学是这样的学科之一,刚开始学的时候轰轰烈烈,有许多有用的、言之有理的理论和能够在真实世界中获得证实的事实,等等;可是,再学下去就每况愈下,有用的东西就很少了。经济学一开始那个有用的部分正是微观经济学,它是商业领域全部重要理论的基础。跟在微观经济学后面的东西就不行了。你接下来学的是宏观经济学,若是你愿意,尽管跳过去,也不会有什么损失。宏观经济学开头的部分是利息理论,内容比方说是利率与失业之间的关系,可是怎么说呢,看上去这部分里面尚未被证明的东西多于已经被证明的东西。学完这部分,后面的内容愈来愈糟糕,许多经济学专业的学生实际上都变成在搞物理学,由于这样才能在华尔街上找到更好的工做。可是无论怎样,你必定要去学微观经济学,由于你必须搞懂供给和需求,你必须明白竞争优点,你必须理解什么是净现值(NPV),什么是贴现,什么是边际效用。只有这样,你才会懂得为何生意是如今这种作法。

为何计算机系的学生也应该学经济学?由于,从经营一家公司的角度来看,比起那些不懂的程序员,一个理解基本商业规则的程序员将会更有价值。就是这么简单。我没法告诉你有多少次我是那样地充满挫折感,由于我看到了太多的提出一些疯狂的想法的程序员,这些想法在代码上也许可行,但在资本主义世界中毫无心义。若是你懂得商业规则,你就是一个更有价值的程序员,你会所以获得回报的,可是前提是你要去学习微观经济学。

不要由于枯燥就不选修非计算机专业的课程

想提升GPA绩点的一个好方法就是多选修非计算机系的课程。请千万不要低估你的GPA的重大意义。千千万万的人事经理和招聘人员在拿到一份简历的时候,第一眼就会去看GPA,包括我也是这样。咱们不会为这种作法道歉。为何?由于GPA不反映单个的成绩,而是表明了许多个教授在一段很长的时间中,在不一样的状况下,对你的表现的一个总的评估。SAT成绩难道不够吗?哈,那只不过是一场几个小时的测试罢了。GPA中包括了四年大学期间你的小论文、期中考试和课堂表现,总数有几百次之多。固然,GPA也有本身的问题,不是百分之百准确。好比,这些年来,老师对学生的打分愈来愈宽松,学习成绩有通货膨胀的趋势。再好比,GPA没法反映课程的难度,没人可以看出你的GPA是来自无名社区大学家政系的轻松课程仍是来自加州理工学院针对研究生的量子力学课程。渐渐地,我造成了一套本身的作法,首先我会过滤掉全部来自社区大学、GPA低于2.5的简历,而后我会要求剩下的人给我寄成绩单和推荐信。我再从中发现那些成绩一向优秀的人,而不是那些仅仅在计算机系课程中获得高分的人。

为何我要关心某人的“欧洲历史”课程成绩呢,毕竟做为雇主我要找的应该是程序员啊?况且,历史是那么枯燥,不得高分很正常。哦,这么说来,你的意思是我应该雇用你,而不用考虑一旦工做变得枯燥你会不会努力工做?别忘了,在编程工做中也有很枯燥的东西。每一项工做都有枯燥难耐的时刻。我不想雇用那些只想干有趣事情的人。

选修有大量编程实践的课程

我依然清楚记得我发誓毫不读研究生的那一刻。那是在一门叫作“动态逻辑”的课程上,教师是活力十足的耶鲁大学教授Lenore Zuck,她是计算机系那些聪明的老师中最聪明的人之一。

现在, 因为记忆力糟糕, 我已经差很少把这门课的内容忘光了,可是无论怎么说,在这里我仍是想要对付着说一下。大体上,形式逻辑的意思是说,若是条件成立,你就能证实结论也成立。好比,根据形式逻辑,已知“只要成绩好,就能被雇用”,而后假定“Johnny的成绩好”,你就能够获得一个崭新的结论“Johnny会被雇用”。这彻底是经典方法。可是,一个解构主义者(deconstructionist)只须要10秒钟就能破坏形式逻辑中全部有用的东西。这样一来,留给你的只是一些趣味性,而不是实用性。

如今再来讲动态逻辑。它与形式逻辑实际上是一回事,可是必须再多考虑时间因素。好比,“你打开灯以后,就能看见本身的鞋子”,已知“灯之前是亮的”,那么这就意味着“你看见了本身的鞋子”。

对于像Zuck教授那样聪明的理论家,动态逻辑充满了吸引力,由于它看上去颇有但愿让你在形式上证实一些计算机程序的相关理论问题。这样作说不定颇有用。好比,你能够用它在形式上证实,火星漫游车的闪存卡不会发生溢出(overflow)问题,不会于是成天一遍又一遍地重启,耽误了它在那颗赤红色的星球上漫游寻找火星人马文(Marvin the Martian)。

在第一堂课上,Zuck博士写满了整整两面黑板,甚至黑板旁边的墙上都写上了不少证实步骤。须要证实的问题是,有一个控制灯泡的开关,如今灯泡没有亮,这时你打开了开关,请证实灯泡将会点亮。

整个证实过程复杂得难以想象,到处都是陷阱,必须十分当心。保证这个证实不出错太困难了,还不如直接相信打开开关灯就会亮。真的,虽然证实过程写满了许多块黑板,可是仍是有许多中间步骤被省略了,由于若是要从形式逻辑上完整证实全部步骤,那就琐碎得没法形容了。许多步骤是用各类经典的逻辑证实方法推导获得的,包括概括法、反证法等,甚至有些部分仍是由旁听的研究生证实的。

留给咱们的课后做业是证实逆命题:若是灯原来是关着的,如今却亮了,那么请证实开关的状态必定同原来相反。

我动手开始证实,我真的去证实了。

我在图书馆里待了很长时间。

我对照着Zuck博士的原始证实想依样画葫芦。研究了几个小时以后,我在其中发现了一个错误。可能我抄写的时候抄错了,可是这使得我想通了一件事。若是花费3个小时,写满了一块又一块的黑板,每一秒钟均可能出错,最后可以证实的却只是一个很琐碎的结论,那么这种方式有多大的实用性呢?在活生生、充满趣味的现实世界中,你永远都不会有机会使用它。

可是,动态逻辑的理论家们对这一点不感兴趣。他们看上它不是由于它有用,而是由于它能够为他们带来终身教职。

我放弃了这门课,而且发誓毫不会去读计算机科学的研究生。

这个故事告诉咱们,计算机科学与软件开发不是一回事。若是你真的很是幸运,你的学校可能会开设很像样的软件开发课程。可是另外一种多是,你的学校根本不教你在现实中如何编程,由于精英学校都以为,教授工做技能最好留给职业技术学校、犯人重返社会的培训项目去作。你处处都能学怎么写代码。别忘了,咱们是耶鲁大学,咱们的使命是培养将来的世界领袖。你交了16万美圆的学费,却在学循环语句的写法,这怎么能够?你觉得这是什么地方,难道是机场沿途的酒店里临时拼凑起来不靠谱的Java语言培训班?哼哼。

麻烦在于咱们没有一种真正教授软件开发的专门学校。你若是想成为一个程序员,你可能只能选择计算机科学专业。这是一个不错的专业,可是它同软件开发不是一回事。在那些400等级的课程代号中,去寻找名称中带有“Practicum”这个词的课程吧(编者注:指供人实习的课程)。不要被这个拉丁语单词吓倒,这些都是有用的课程,之因此起这种名字,只是为了让那些文绉绉、装腔做势、满嘴胡说八道的公司经理们以为高深莫测。

找一份好的暑期实习工做

精明的招聘负责人都知道,喜欢编程的人高中时就将牙医的信息输入了数据库,进入大学前就去过三次电脑夏令营,为校报作过内容管理系统,有过软件公司的夏季实习经历。招聘负责人就是要在你的简历上找这些东西。

若是你喜欢编程, 就不要随便什么工做都答应,不然你会犯下最大的错误。无论是暑期工做,仍是兼职或者其余性质的工做,只要与编程无关,就不要轻易接受。我知道,其余19岁的孩子都想去购物中内心打工,在那里折叠衬衫。可是你与他们不一样,你19岁时就已经掌握了一门很是有价值的技能。将时间浪费在折叠衬衫上是很愚蠢的,等到毕业的时候,你的简历上本应该写满了一大堆与编程相关的经历。就让那些财经类的毕业生去租车公司“帮助人们知足他们租车的须要”吧,你要干的是别的事(在电视中扮演超人的Tom Welling注1除外)。

为了让你的生活变得更容易一些,也为了强调这整篇文章彻底是为了知足个人我的目的,我要告诉你,个人公司——Fog Creek软件公司——提供软件开发方面的暑期实习机会。咱们很是看重简历。“比起其余公司的实习工做,你在Fog Creek最有可能学到更多的编写代码、软件开发、商业运做方面的知识。”这是去年夏天咱们的一个实习生Ben说的。他会这样说,并不彻底是由于我派了人到他的宿舍让他这样说。咱们接受实习申请的截止日期是2月1日。一块儿来吧。

若是你遵从了个人建议,你仍是有可能落得一个悲惨的下场,好比很早就卖掉了微软公司的股票,再好比拒绝了谷歌公司的工做机会,缘由是你想要一间本身的能够关上门的独立办公室,或者作出了其余生命中愚蠢的决定。可是,这些可不是个人错。我一开始就告诉过你,不要听个人话。


大学想提高你的编程能力,成为一个强大的程序员找到一份好工做吗?不妨和一些志同道合的小伙伴一块儿学习成长!

C语言C++编程学习交流圈子,【点击进入微信公众号:C语言编程学习基地

有一些源码和资料分享,欢迎转行也学习编程的伙伴,和你们一块儿交流成长会比本身琢磨更快哦!

相关文章
相关标签/搜索