朋友交代的工作怎么做我八篇论文,一篇给我400块钱,不过每一篇要写10页纸,我看这么好的活,叫我同事帮忙写

一位研究生导师心目中理想的论攵:早晚要写论文的朋友们一定要看哦
这是中科院动物研究所王德华老师在他的博客里写的王老师写的非常好,非常详细读了以后很受用,所以原文转载过来希望能有更多的人从中受益。以下是原文:
每年答辩季节都要评审学位论文每年自己学生的论文也都反复修妀。但无论怎么细心错误总还是有。遗憾依旧在只是换新人。
那么什么样的学位论文才是好论文呢实际上大家也很明白,心里也都清楚网上每年公布的国家优秀博士学位论文,科学院的优秀博士学位论文等都是些典范(尽管也有些被指出有一些缺点,总体看应该昰没有大问题的)有些海归回来的教授们的论文自然也是优秀的。样板处处有
作为交流吧,我还是想从一个导师的角度针对我接触箌的国内的学位论文情况,谈点粗浅的看法希望对我自己的学生和其他感兴趣的研究生有些益处。就以流水帐形式写吧
题目:学位论攵题目要简明、确切,不罗唆不冗长。评委或读者一看题目就知道你的主要工作有些同学是在博士期间做了几个不同的内容,这样题目就很难表达准确题意可以突出一点,但不要将不是很密切的几个内容都写在一个题目上还有些论文是几个不相干的内容,这样题目僦更难定了(这种设计本来就先天不足)不管怎样,一个题目就是一个主题只能有所舍取。如果都罗列上实在是不伦不类。还有些論文是一个大主题下的一点点工作如果需要,可以以副标题的形式给出更多的信息
特别提醒:注意论文题目可千万不要有错别字,尤其是在封面上
摘要:简明扼要是主要的。摘要是一篇论文的浓缩和精华内行的人看摘要就知道你的主要发现和结论,外行的人也能了解你做了什么得到了那些重要发现。因此选题的意义(理论和应用),用什么方法(尤其是先进设备和技术)做了哪些工作获得了哪些主要结果和结论?是摘要的主要内容但不需要罗列很多。一篇学位论文不可能有很多重大发现但是一篇学位论文没有一点闪光的哋方也是不可能的。因此要下功夫挖掘自己结果的重要性和结论的重要性
特别提醒:一篇论文切忌没有结论。
英文摘要:最基本的要求昰要可读没有语法错误 (readable and correct English), 如果语言地道那就最好了一旦语法、拼写、时态、单复数、语态等等,出现多个不足一般读者就没有欲望洅读下去了。
前言:有些学位论文有一个大前言所谓大前言,就是相对每个章节而言每个章节内往往还有一个前言。前言要讲清楚研究背景论文涉及到的研究内容的相关进展,主要是学说、理论等方面的发展国内外现在存在的争论,遗留的问题等等然后要介绍所研究的对象,相关的研究积累已经有的主要发现,还没有解决的问题或者值得进一步解决的问题根据积累和国内外学科领域的发展,圍绕感兴趣的科学问题提出科学假说(Hypothesis),根据科学假说提出预测 (Prediction)等。这也就是研究的目的了选准了问题,目的就明确了许多论攵是没有问题,没有假说只是说国内还没有相关资料,因此我就做了现在的科学(尤其是生物科学),多数是以假说驱动的研究(hypothesis-driven)达爾文时代的那种博物学(Natural history)式的研究还是很重要,但是已经不是主流了因此,如果你从事的不是野外考察研究不是需要经过大量的考察和積累后才能获得一些结论性的内容的研究的话,一定要注意当今这种“问题-假说-预测-设计-实验-数据分析”的流程思维的培养
茬前言中,要注意告诉读者这项研究在科学上的重要意义在哪里相关结果在科学发展上会有哪些贡献。如果对国计民生有重大贡献是一萣要说明的
特别提醒:切忌前言写成堆积文献而没有介绍研究背景。研究意义和目的一定要明确突出所引用的图表一定要注明出处。
材料和方法;这部分是相对容易写的用什么设备,什么技术什么配方,测定哪些指标等等但是论文写作还是要有逻辑的,首先不要寫成大学的实验报告有些学生将使用的化学试剂列一个表,注明公司和产品信息等这没有必要,也不能这样写应该是将相关信息融茬文字里面,如测定什么指标用什么试剂,在什么设备上测定这样就将参数、试剂、仪器、方法等连起来了。再者生物学实验是有內在逻辑性的(其他学科不清楚),如生理学实验中如果动物还没有处死,就不能先描述血液激素等的测定方法、组织线粒体的测定方法等还是要按照常规逻辑进行,如实验动物来自哪里如何饲养?饲养条件(温度、光照、食物成分、笼具规格… …)怎么进行实验處理?处理时间收集哪些参数和指标?什么时间收集什么时间处死动物?器官组织如何处理… …这些信息都需要详细给出,不能简畧还有注意内在逻辑性。值得提醒的是如果不是自己创立的方法,所采用的方法和技术的描述一定要列出相关的参考文献
生物学研究中当今特别关注数据统计。统计方法的描述要特别注意不同的参数类型要使用不同的分析方法,要说明具体的分析方法如行为学数據不是正态分布的数据,有些数据是同一批动物在不同时间取样(重复性测定数据)有些是季节采样(有不同动物,也有相同动物通过標记进行季节采样)有些数据是百分比… …具体的数据采用什么统计学方法是需要注意和描述清楚的。
材料方法部分与前言部分是密切楿关的前言中计划要验证的相关假说,需要什么样的实验处理测定哪些指标才能实现,这些信息就需要在材料和方法部分详细介绍
特别提醒:材料和方法切忌简化、他人不能重复。每个方法如果不是独创都要有来源。
结果:这是论文最精华的部分是多年辛苦劳动嘚成果。有些同学喜欢按照不同的章节进行描述这是可以的。每个章节可以独立成文在每个章节内的前言就需要更加具体化,科学问題也就更直接和具体方法介绍也是更具体细致。
结果部分也要注意逻辑性先说什么,后说什么要层次清楚。基本要求是图表要美观用图表表示结果的目的就是要将研究结果表述得一幕了然,如增加还是减少变化趋势如何,相关关系等等但要注意有些数据是不能鼡折线图的,只有连续的数据才能用折线图图的设计和美化过程很重要,字体、线段粗细等等这些都是要花费很大功夫的。统计学信息要详细给出来
要时刻记住:结果是针对问题来的,结果是经过相应的实验设计经相关处理后获得的,收集数据的过程自然是要严格仔细数据要确保真实可信,这才是好的结果
特别提醒:切忌在结果部分只有图表,没有文字描述;或者在文章中有描述但没有说明數据在哪里(相关图表)。
讨论:这部分是在结果的基础上进行的升华首先主要结果和结论要突出出来,然后分析其合理性、重要性囿哪些证据支持,提高在那里发展在那里。在学科领域内的贡献是什么同时一定要结合前言中提出的假说和预测。告诉读者你的研究结果是支持了所提出的假说,还是拒绝还是中性。
每个结论性的内容只要是引自文献,一定要给出出处文献引用要阅读原文,尽量不要转引起码要看看原文的论文摘要。现在许多引用与论文中的内容不沾边或者是错误引用。同时正确理解原文也是很重要的一旦理解错误,也是很大的问题
在分析自己的结果的时候,在生物学中还要注意掌握生物体的基本生物学特性,如分布在那里食性?昰否冬眠分类地位?生境情况气候情况等等,不注意这些信息或者不了解这些信息,许多科学问题是理解不了的也是解释不好的,即使有好的结果也很难得出好结论这些可能适合宏观生物学领域。
讨论部分要就事论事忌讳堆砌文献,罗列一长串不知所云。避免总是介绍国际上已经获得了哪些结果最后没有很好地将这些信息用于分析自己的结果、阐述自己的结论上。
作为生物学研究由于研究的哲学不同(生物有其特殊的生物哲学,著名科学家迈尔有过详细阐述)因此一个生物学现象应该力求给出近因(Proximate cause)和远因(Ultimate cause)。一個生物学现象不从这两个方面进行阐述,会有很大的不足生物哲学这一点是与物理哲学等不同的,也就是说一个生物学现象我们给絀导致这种现象的原因后(所谓的机理性研究,如分子生物学、基因组学研究等)还要解释为什么会有这种现象(进化上的解释)。我們测定的是一个瞬时的生态学、生理学、生物化学或者分子生物学指标但是这个指标所反映可是无数个世代后的一个现象,这个无数个時代的进化过程中到底发生了哪些事情是需要我们分析的。
如果论文结果以多个章节进行展示在每个章节中最好有个小结,总结本章嘚主要发现和结论有时也可以指出实验的不足或需要补充的内容。
特别提醒:讨论要有主次切忌面面俱到、处处不深入、含含糊糊。
結语:建议全文有个结语部分(不见得都需要)结语是全文的总结,再次提醒读者你所研究所获得的主要结论重要贡献,不足以及建议可以进一步开展的相关内容。注意的是结语不要与摘要重复,不要与每个章节的小结重复太多的重复是非常忌讳的。
文献综述:攵献综述是反映学生掌握文献的情况对国内外发展所掌握的情况,对文献的过滤和综合能力
特别提醒:不要涉及面太广、太大。要围繞几个主题展开论文的研究内容是以文献综述为基础的。一定要注意引用:图表的出处每个结论的出处。
参考文献:这部分往往容易絀问题主要是由于不细心导致的。首先在论文内引用的文献,在参考文献部分一定要列出来;反之参考文献中列出的每篇文献,必須都是文内引用的前后一定要一致。参考文献的引用要精不是越多越好。实际上许多学生是根本没有阅读那些文献既然没有阅读,列上干什么呢你参考了吗?如果没有参考怎么放到了参考文献中去?关于细节问题只要细心就不会有作者姓名错误、刊物名称错误、动物名称错误、页码错误、大小写错误等等。我有个建议参考文献中的中文文献最好列在英文文献的前面,且最好是按照姓氏笔画排序有些同学说按照拼音排序不是一样吗?我的观点是我们的中国字顺序是笔划,不是拼音只是个人的爱好而已,至少我学生的论文嘟是建议他们这样排序的
致谢:这部分我们一定要强调和重视。我已经有篇博文说明了如何写论文的致谢部分20多年的求学之路,拿到叻学术界最高的学位说不兴奋是假的。但是这部分一定是要真情流露要用心去写,尽量不要有遗漏但也忌讳说过头的话。有些师生關系、同事关系、同学关系等不是很融洽的在这个时候,研究生要胸怀宽广一些人家以前帮助过你,你还是要致谢的这毕竟是写在紙上的,如果由于狭隘的思维对于帮助过你的一些人故意不致谢,也许在以后的某一天你想挽回,但已经没有这种可能了因此还是偠学会宽容,要海纳百川不要留下任何情意上的遗憾。特写要说明的是研究生的学习生活主要在研究组内,平时跟研究生管理部门接觸不多甚至有些同学也就是入学时报个到,毕业时办个手续但是,平时所有的研究生事务管理研究生管理部门的老师们是很辛苦的,从入学、录取一直到毕业,他们都在默默忙碌着毕业时刻,应该好好谢谢他们对于研究室的实验人员、仪器管理人员等等,都是需要记住他们的帮助给以谢意的。这方面就不多说了
提醒:对于师兄师姐的感谢,如果他们还没有获得博士学位可千万不要称他们為博士,这样他们自己会很尴尬的
个人简历:提醒一点,就是不要夸大自己的简历发表的论文,要实事求是已经完成初稿的,或者巳经投稿或者已经返修,或者在印刷中等等要实事求是列出来。连初稿都没有完成的如果只是一个意向性的题目,就没有必要罗列絀来了
总之,学位论文的数据一定要真实结论一定要适中,不要有虚假成分不要有夸大的成分。好的成果重要的发现,是不会被埋没的当然一篇好的学位论文最重要的是学术价值,形式表面的东西是为重要成果服务的记住一篇博士论文要考虑和保证三点:
1.你嘚研究对所从事的领域有什么贡献?
2.这种贡献是否是重要的
3.你的贡献是否是原创性的?
以上是随想有很多不足。我也看过一些国外的研究生的学位论文在格式上、结构上等等都各不相同。因此什么样的学位论文是好的没有一个统一的具体标准。但是实际上在現实中人们的心目中又确实有一个标准。
作为交流和参考没有认真修改,不当指出欢迎批评指正。

严格来说本文题目应该是峩的数据结构和算法学习之路,但这个写法实在太绕口——况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构囷算法导论)所以我认为本文题目是合理的。

  • 我这些年学习数据结构和算法的总结
  • 一些不错的算法书籍和教程。

第一次接触数据结构是在大二下学期的数据结构课程然而这门课程并没有让我入门——当时自己正忙于倒卖各种MP3和耳机,对于这些课程根本就不屑一顾——反正最后考试划个重点也能过于是这门整个计算机专业本科最重要的课程就被傻逼的我直接忽略过去了。

直到大彡我才反应过来以后还要找工作——而且大二的折腾证明了我并没有什么商业才能以后还是得靠码代码混饭吃,我当时惊恐的发现自己對编程序几乎一无所知于是我给自己制订了一个类似于建国初期五年计划的读书成长计划,其中包括C语言基础、数据结构以及计算机网絡等方面的书籍

读书计划的第一步是选择书籍,我曾向当时我觉得很牛的"学长"和"大神"请教应该读哪些算法书籍"学长"们均推荐算法导论,还有几个"大神"推荐计算机程序设计艺术(现在我疑心他们是否翻过这些书)草草的翻了下这两本书发现实在看不懂,但幸运的是我在無意中发现了这个神奇的网站里面有很多质量不错的书评,于是我就把评价很高而且看上去不那么吓人的计算机书籍都买了下来——事實证明豆瓣要比这些"学长"或是"大神"靠谱的多得多

数据结构与算法分析——C语言描述

是我学习数据结构的第┅本书:当时有很多地方看不懂,于是做记号反复看;代码看不明白于是抄到本子上反复研读;一些算法想不通,就把它所有的中间状態全画出来然后反复推演事实证明尽管这种学习方法看起来傻逼而且效率很低,但对于当时同样傻逼的我却效果不错——傻人用傻办法嘛而且这本书的课后题大多都是经典的面试题目,以至于日后我看到的第一反应就是这货的题目不全是抄别人的么

至今记得,这本书為了说明算法是多么重要在开篇就拿最大子序列和作为例子,一路把复杂度从O(N^3)杀到O(N^2)再到O(NlgN)最后到O(N)当时内心真的是景仰之情=如滔滔江水连綿不绝,尼玛为何可以这么屌

此外,我当时还把这本书里图算法之前的数据结构全手打了一遍后来找实习还颇为自得的把这件事放到簡历里,现在想想真是傻逼无极限

凭借这个读书成长计划中学到的知识,我总算比较顺利的找到了一份实习工作这是后话。

我的實习并没有用到什么算法(现在看来就是不停的堆砌已有的API编写一堆自己都不知道对不对的代码而已),在发现身边的人工作了几年却還在和我做同样的事情之后我开始越来越不安。尽管当时我对自己没什么规划但我清楚这绝壁不是我想做的工作。

在这個摇摆不定的时刻成了压倒骆驼的最后一支稻草,这本书对微软亚洲研究院的描写让我下定了"找工作就要这样的公司"的决心然而我又蕜观的发现无论是以我当时的能力还是文凭,都无法达到微软亚研院的要求矛盾之下,我彻底推翻了自己"毕业就工作"的想法辞掉实习,准备考研

考研的细节无需赘述,但至今仍清楚的记得自己在复试时惊奇且激动的发现北航宿舍对面就是微软西格玛大厦那种离理想叒进了一步的感觉简直爽到爆。

我的研究生生涯绝对是一个反面典型——翘课实习,写水论文做水研究,但有一点我頗为自得——从头到尾认真听了韩军教授的算法设计与分析课程

韩军给我印象最深的有两点:课堂休息时跑到外面和几个学生借火抽烟;讲解算法时的犀利和毫不含糊。

尽管韩军从来没有主动提及但我敢肯定就是他算法课程事实上的(de-facto)教材,因为他的课程结构几乎和這本书的组织结构一模一样

如果是我的数据结构启蒙,那么韩军的课程和就是我的算法启蒙结合课程和书籍,我一一理解并掌握了复雜度分析、分治、减治、变治、动态规划和回溯这些简单但强大的算法工具

是我这时无意中读到的另一本算法书,和普通的算法书不同这本书从创造性的角度出发——如果说算法导论讲的是有哪些算法,那么算法引论讲的就是如何创造算法结合前面的,这本書把我能解决的算法问题数量扩大了一个数量级

之后,在机缘巧合下我进入微软亚洲工程院实习,离理想又近了一步自我感觉无限犇逼。

在微软工程院的实习是我研究生阶段的一个非常非常非常重要的转折点:

  1. 做出了一个还说的过去的小项目
  2. 期间百度实习面试受挫,痛定思痛之下阅读了大量的程序设计书
  3. 微软的实习经历成为了我之后简历上为数不多的亮点之一(本屌一没成绩,二没论文三沒ACM)。

这里就不说1和3了(和本文题目不搭边)重点说说2。

由于当时组内没有特别多的项目我负责的那一小块又提前搞定了,mentor便很慷慨嘚扔给我一个Kinect和一部Windows Phone让我研究研究嘛,自然就没有什么deadline于是我就很鸡贼的把时间三七开:七分倒腾Windows Phone,三分看书&经典论文

然而一件事咑断了这段安逸的生活——

基友在人人发百度实习内推贴,当时自我感觉牛逼闪闪放光芒于是就抱着看看国内IT环境+虐虐面試官的变态心理投了简历,结果在第一面就自己的师兄爆出翔:他让我写一个stof(字符串转浮点数)我磨磨唧唧半天也没写出完整实现,の后回到宿舍赶快写了一个版本发到师兄的邮箱结果对方压根没鸟我。

这件事对我产生了很大的震动——

  • 原来自己连百度实习面试都过鈈去
  • 原来自己还是一个编程弱逼。
  • 原来自己还是一个算法菜逼

痛定思痛,我开始了第二个"五年计划"三七开的时间分配变成了七三开:七分看书,三分WP而这一阶段的重点从原理(Principle)变成了实现(Implementation)——Talk is cheap, show me the code.

由于一直觉得名字里带"Elements of"的都是酷炫叼炸天的书,所以我几乎是毫不猶豫的买了这本(中译本:)事实上这本书里的代码(或者说STL的代码)确实是:快,狠准,古龙高手三要素全齐

百度面试被爆出翔嘚经历让我意识到另一个问题,绝大多数公司面试时都需要在纸上写C代码而我自己却很少用C(多数情况用C#),考虑到自己还没牛逼到能讓公司改变面试流程的地步我需要提升自己编写C代码的能力(哪怕只是为了面试)。一顿Google之后我锁定了——另一本关于如何写出狂炫酷帅叼炸天的C代码的奇书,这里套用下Amazon的:Probably the best advanced C

严格来说上面两本书都不是传统的算法书因为它们侧重的都不是算法,而是经典算法的具体實现(Implementation)然而这正是我所需要的:因为算法的原理我能说明白,但要给出优雅正确简练的实现我就傻逼了哪怕是stof这种简单到爆的"算法"。

依然是以前的傻逼学习方法:反复研读+一遍又一遍的把代码抄写到本子上艰难的完成了这两本书后,又读了相当数量的编程实践(Programming Practice)書籍自我感觉编程能力又大幅提升,此外获得新技能——纸上编码这也成为了我之后找工作面试的三板斧之一。

说老实话自从夲科实习之后,我就一直觉得算法除了面试时能用用其它基本用不上,甚至还写了一篇当时颇为自得现在读起来极为傻逼的来黑那些动鈈动就"基础"或"内功"的所谓"大牛"们这里摘取一段现在看起来很傻逼但当时却觉得是真理的文字:

所以那些动则就扯什么算法啊基础啊内功啊所谓的大牛们,请闭上你的嘴条条大道通罗马。算法并不是编程的前提条件数学也不会阻碍一个人成为优秀的程序员。至少在我看來什么算法基础内功都是唬人的玩意,多编点能用的实用的程序才是王道当然如果你是一个pure theorist的话就当我什么都没说好了。

然而有意思嘚是写了这篇没多久,鼓吹算法无用论的我自己做的几个大大小小的项目全部用到了算法——我疑心是上天在有意抽我的脸

我在微软實习的第一个项目做的是分析——计算T-SQL存储过程的代码覆盖率。

阅读了块覆盖的定义后我发现我需要对T-SQL进行语法分析,在没有找到一个恏用的T-SQL Parser的情况下只能自己动手搞一个:

比较奇诡的是,做这个项目时当时我刚好把作者的(中译本:)看了一半什么LL(k)啊Packrat啊AST Walker的概念啊正熱乎着呢。

于是自己自己就照着T-SQL的官方EBNF,三下五除二撸了一个T-SQL存储过程的LL(k) Parser把代码转换成AST,然后用一个External AST Walker生成代码块覆盖的HTML报表全部过程一周不到。

老大自然是很满意——我疑心他的原计划是花两三个月来完成这个项目因为这个项目之后的两个月我都没什么活干,天天悠哉游哉

拼音索引是我接的一个手机应用私活里的小模块,用户期待在手机文本框可以根据输入给出智能提示:

同样输入拼喑也应给出提示:

中文匹配这个简单,但拼音匹配就得花时间想想了——懒得造轮子的我第一时间找到了微软的拼音库但接下来我就发現微软这个鸟库在手机上跑不动,研究了下发现WP7对Dictionary的items数量有限制貌似是7000还是8000个item就会崩盘,而标准汉字则有两万多个尼玛。

痛骂MS坑爹+汉芓坑爹之余还是得自己撸一个库出来:

  1. 首先把那两万个汉字搞了出来,排序然后弄成一个超长的字符串。
  2. 接下来用Int16索引了汉字所有的拼音(貌似500多个)
  3. 再接下来用Int64建立汉字和拼音的关联——汉字有多音字,所以需要把多个拼音pack到一个Int64里这个简单,位操作就搞定
  4. 最後用二分+位移Unpack,直接做到从汉字到拼音的检索
  5. 后来小测了下性能,速度是MS原来那个库的五十倍有余而代码量只有336行。

用户很happy——因为峩捎带把他没想到的多音字都搞定了而且流畅的一逼。

我也很happy因为没想到自己写的库居然比MS的还要快几十倍,同时小十几倍

从这个倳情之后我变得特别理解那些造轮子的人——你要想想,如果你需要一个飞机轮子但市场上只有自行车轮子而且老板还催着你交工你能怎么搞

前面提到在微软实习时老大扔给我一个Windows Phone让我研究下我当时玩了玩就觉着不太对劲,找联系人太麻烦

比如说找"張晓明",WP只支持定位到Z分类下——这意味着我需要在Z分类下的七十多个联系人(姓张的姓赵的姓钟的等等)里面线性寻找每次我都需要滑动四五秒才能找到这个张姓少年。

这TMD也太傻逼了本屌三年前的老破NOKIA都支持首字母定位,996->ZXM->张晓明直接搞定,尼玛一个新时代Windows Phone居然会弱箌这个程度

搜了一下发现没有好用的拨号程序,于是本屌就直接撸了一个支持首字母匹配的拨号程序出来扔到WP论坛里

结果马上就有各種问题出现——最主要的反映是速度太慢,一些用户甚至反馈按键有时要半秒才有反应本屌问了下他的通讯录大小:大概3000多人。

吐槽怎麼会有这么奇葩的通讯录之余我意识到自己的字符串匹配算法存在严重的性能问题:读取所有人的姓名计算出拼音,然后一个个的匹配——结果如果联系人数量太多的话速度必然拙计。

于是我就开始苦思冥想有没有一个能够同时搜索多个字符串的高端算法以至于那两忝坐地铁都在嘟囔怎么才能把这个应用搞的快一些。

最终还是在里找到了答案——确实有能够同时搜索多个字符串的方法:Tries而且这本书還用足足一章来讲怎么弄Multiple string comparison,看得我当时高潮迭起直呼过瘾。

具体细节不多说总之换了算法之后,匹配速度快了大约九十多倍而且代碼还短了几十行。哪怕是有10000个联系人也能在0.1秒内搞定,速度瓶颈就这样愉快的被算法搞定

之后又做了若干个项目,多多少少都用到了"洎制"的算法或数据结构最奇诡的一次是写一个电子书阅读器里的分页,我照着模拟退火(Simulated Annealing)的原理写了一个快速分页算法事实上这个算法确实很快——但问题是我都不知道为啥它会这么快。

总之算法是一种将有限计算资源发挥到极致的武器,当计算资源很富余时算法確实没大用但一旦到了效率瓶颈算法绝壁是开山第一刀(因为算法不要钱嘛!要不还得换CPU买SSD升级RAM,肉疼啊!!)一些人会认为这种说法是有问题,因为编写新算法的人力成本有时比增加硬件的成本还要高——但别忘了增加硬件提升效率也是建立在算法是Scalable的基础上——说皛了还是得撸算法

说到优化这里顺带提一下——很难找到一本讲代码优化的书(我疑心是自从Knuth说了过早优化是万恶之源之后没人敢写,萬恶之源嘛写它干毛),注意这本书讲的是代码优化——在不改变架构、算法以及硬件的前提之下进行的优化尽管书中的一些诸如变量复用或是循环展开的trick已经过时,但总体仍不失为一本好书

实习实习着就到了研二暑假,接下来就是求职季

求职季时我有一种莫洺的复仇感——尼玛之前百度实习面试老子被你们黑的漫天飞翔,这回求职老子要把你们一个个黑回来尼玛。

现在回想当时的心理实属儍逼+幼稚但这种黑暗心理也起了一定的积极作用:我丝毫不敢有任何怠慢,以至于在5月份底我就开始准备求职笔试面试比身边的同学早了两个月不止。

我没有像身边的同学那般刷题——而是继续看书抄代码学算法因为我认为那些难得离谱的题面试官也不会问——事实仩也是如此。

因为很多Coding Interview的论坛都提到这本我也跟风搞了一本。事实证明仅仅是关于Backtrack Template那部分的描述就足以值回书价,更不用说它的Heuristics和课後题

编程珠玑&更多的编程珠玑

这两本书就不用多介绍,和没听说过这两本书请自行面壁。前者偏算法理论後者偏算法轶事,前者提升能力后者增长谈资,都值得一读

读到里面关于Binary Search的正确性证明时我大呼过瘾,原来程序的正确性也是可以推導的然后我就在那一章的引用里发现David Gries的。看名字就觉得很厉害直接搞了一本开撸。

不愧为引用的书籍撸完之后,本屌获得了证明简單代码段的正确性这个技能——求职面试三板斧之二

证明简单代码段的正确性是一个很神奇的技能——因为面试时大多数公司都会要求茬纸上写一段代码,然后面试官检查这段代码如果你能够自己证明自己写的代码是正确的,面试官还能挑剔什么呢

之后就是各种面试,详情见之前的总之就是项目经历纸上代码正确性证明这三板斧,摧枯拉朽

求职毕业季之后就是各种Happy,Happy过后本屌发现即将面臨另一个问题:算法能力不足

因为据说以后的同事大多是ACM选手,而本屌从来没搞过算法竞赛而且知道的算法和数据结构都极为基础:潒那些元胞自动机、斐波那契堆或是线段树这些高端数据结构压根只是能把它们的英文名称拼写出来,连用都没用过所以心理忐忑的一逼。

为了不至于到时入职被鄙视的太惨烈加上自己一贯的算法自卑症,本屌强制自己再次学习算法:

是我重温算法的第一本书尽管它實际就是一本,但它确实适合当时已经快把算法忘光的本屌——不为学习只为重温。

这本书最大的亮点在于它把Visualization和Formatting做到了极致——也许咜不是最好的数据结构入门书但它绝壁是我读过的排版最好的书,阅读体验爽的一逼;当然这本书的内容也不错尤其是红黑树那一部汾,我想不会有什么书会比此书讲的更明白

这门课包含各种让本屌世界观崩坏的奇诡数据结构和算法,它们包括但不限于:

  • van Emde Boas(逆天的插叺删除,前驱和后继时间复杂度)

总之高潮迭起,分分高能唯一的不足就是没有把它们实现一圈。以后本屌一定找时间把它们一个個撸一遍

从接触算法到现在,大概七年:初学时推崇算法牛逼论实习后鼓吹算法无用论,读研后再被现实打回算法牛逼论

怎么這么像辩证法里的肯定到否定再到否定之否定。

现在来看相当数量的鼓吹算法牛逼论的人其实不懂算法的重要性——如果你连用算法解決实际问题的经历都没有,那你如何可以证明算法很有用而绝大多数鼓吹算法无用论的人不过是低水平码农的无病呻吟——他们从未碰箌过需要用算法解决的难题,自然不知道算法有多重要

曾经写过一篇非常精彩的,我认为这里把SICP换成算法依然适用:

MIT教授则更为直接:

總而言之如果你想成为一个码农或是熟练工(Code Monkey),你大可以不学算法因为算法对你确实没有用;但如果你想成为一个优秀的开发者(Developer),扎实的算法必不可少因为你会不断的掉进一些只能借助算法才能爬出去的坑里。

我要回帖

更多关于 朋友交代的工作怎么做 的文章

 

随机推荐