汉诺塔10层口诀表,汉诺塔6层口诀

首页 > 经验 > 作者:YD1662022-11-06 12:50:37

拿到吴军老师的新书《计算之魂》着实吃了一惊。

汉诺塔10层口诀表,汉诺塔6层口诀(1)

计算之魂 (《数学之美》等畅销书作者吴军)

各位IT业内人士对吴军一定是如雷贯耳。即使是业外人士,由于他的多本科普作品:《浪潮之巅》《数学之美》等都有出圈的影响力,大概率也不陌生。这本新作延续了他作品的命名方式和装帧风格。但内容更加专业和有深度,竟然可以作为一本工程师进阶教材而不单单是科普作品。

问题:一个码农能走多远?

本书的第一句话提出了一个问题:一个码农能走多远?

相信很多如我一样的码农在从业的不同阶段都对自己问过这个问题。对我来说遗憾的是,并没有一条标记好里程碑的地图可以跟着前进。很多码农在几年之后十几年之后转了向,离开了码农的队伍去做其他的工作,有些是因为找到更适合自己的位置,但也有不少是因为没有方向而不知如何前进,环境所迫只得遗憾离开。

吴军参考著名物理学家朗道对物理学家的分级办法,给出了他心目中的工程师分级,对码农评估自己水平和制定努力方向是一个极好的参考:

五级:能够独立解决问题,完成工程工作。这个级别是大部分码农参加工作两三年后应该达到的水平,大公司里的码农以这个水平的为主。以我曾经工作过的亚马逊为例,达到这个要求对应的级别是:SDE II (软件开发工程师二级)。亚马逊有很多十年的SDE II,他们可以胜任一线工作,但不具备开拓能力,是最主要的中间层。

四级:能用已知的最优的方法解决问题,并指导和带领其他人完成更有影响力的工作。这里的重点是“已知的最优”和影响力。相当于大公司里的Senior的工程师,或者pricinple工程师。他们往往担任Tech Lead,被称为技术大拿。

三级:能够解决前人未解决的问题,并且能独立设计和实现产品,在市场上获得成功。这个级别已经非常少见了。该分级的水平差异,不是等距离的差异,而是对数水平的差异,即每提高一个级别,水平相差十倍,达到的人数恐怕要少十倍。三级工程师往往可以做到CTO或者总架构师总设计师了。已经非常罕见。

二级:能够提出重要的计算机理论和实践中的新问题,并解决他们,设计实现别人做不出的产品。记得上学时候老师说过,一流人才提问题,二流人才解决问题。提出问题的难处在于要见人所未见,跳出现有的框架思考,确实是非凡的能力。一级:能够开创一个产业,或者奠定一个学科基础。我想这个级别只能用一个字形容:。即使是谷歌的著名工程师Jeff Dean,吴军也只肯给1.5级的评级。他心目中的一级是巨著《计算机编程艺术》的作者高德纳。想必大家不会有异议。看到这个分级顿时觉得眼前出现了一张待攀的高峰。虽然我也是老码农了,自问还是处在第五级的水平。这倒也没有什么可丢人的,这个水平靠双手吃饭,是最大的中层。但看到有这样的阶梯,还是有想要向上攀登的愿望。

路径:掌握十大主题,修炼计算之魂

只指出路标不是好向导,还要给你教会向上攀登的方法和工具,甚至带着你走一程。本书后续的内容,就是作者把自己多年研究和从业的经验,总结成十个主题,基本上概括了计算机科学思维的主要方面。本书叫做《计算之魂》,那么什么是魂?作者解释说是:“我对计算机科学精髓和灵魂的理解”。他认为计算机程序设计虽然被称为艺术,但训练掌握这门艺术是有章可循的。这十个主题都是不仅是计算机科学的重要课题,也是实际工作中常用的工具。从这十个主题的总结选取,可以看出吴军老师的深厚功底。

这十个主题是:

  1. 毫厘千里之差-大 O 概念
  2. 逆向思考-从递推到递归
  3. 万物皆编码-抽象与表示
  4. 智能的本质-分类与组合
  5. 工具与算法-图论及应用
  6. 化繁为简-分治思想及应用
  7. 权衡时空-理解存储
  8. 并行与串行-流水线和分布式计算
  9. 状态与流程-等价性与因果关系
  10. 确定与随机-概率算法及应用

第一个大O概念是定义对计算机算法如何进行评估的,是讲述后面主题的基础。在随后的主题中,吴军把递归放到首位,与我心有戚戚焉。是否理解递归,是否能熟练的运用递归的思维方式,写出完整的递归代码,我认为是区分是否对计算机算法真正入门的标志之一。在计算机相关专业的第一门编程课上,应该就会讲到。可能大部分人接触的第一个递归问题都是梵塔(汉诺塔)问题。

问题很简单,就是如下的三根柱子和一套大小不一的盘子,盘子必须套在柱子上,利用这几根柱子,挪动盘子,在保证大盘子不能压在小盘子的前提下,把这一堆盘子移动到另外一根柱子上。

汉诺塔10层口诀表,汉诺塔6层口诀(2)

想让孩子学计算机的朋友可以给孩子买个玩具试试看是不是有天赋哈哈。

用递归的方式来写,只需要十行以内的代码就可以解决这个问题。充分体现了这个递归的优势。但老实讲,从我第一次学会解决这个题目,到能主动的运用递归的方式来解决问题,中间隔了很多年。当递归这种思维方式成为工具箱里的常备的时候,有种鸟枪换炮的感觉。因此,在我这么多年的面试中,一般都会出一道典型的可以用递归解决的题目。使我感到意外的是,即使是计算机专业出身,或者是有几年经验的工程师,也常常想不到要用递归。

另外一个典型的递归题是:允许你一次上一个或者两个台阶,那么上15级台阶有多少不同的方式?

谁能从书中获益?

对于码农或者有志于成为码农的读者,这本书的另一个优点是,很多在每个主题下的例题,都是吴军老师在谷歌等公司真正使用的过的面试题。通过这些难度不同的面试题,循序渐进的讲解了每个主题。对于每个题目,不仅仅给出了解答,往往还给出了多种不同的解答,讲解了解题的思路,通过解题说明了相关计算机科学主题在实践中的使用。尤其值得赞赏的是,作者还给出了评分标准和在实践中对答题效果的观察。比如在分治算法一章中,作者给出一道例题:一个未排序的数列有N个元素,如何找到其中最大的K个元素。讲解完成,作者写到:“这个问题是看似挺简单的堆排序问题,但是有大约一半面试Google的人做不出来。能给出上面的答案或者类似的答案,我们也满意了。”这些信息对于求职者,尤其是有至于Google或者类似公司的读者非常有参考价值。

以上内容听起来非常专业,似乎本书的读者群就是码农。但前面提到对“计算之魂”的解读,强调是“我”的理解。因此,本书的写作口吻并不是教科书式的,而是延续了吴军其他作品的可读性,有很多个性化的解读,个人的感悟在里面,这也是这本书的“魂”。所谓经验,正式这些个人的解读和总结。对于业界大牛,人们往往强调他们对技术有多么深刻的理解,在某个领域有多么丰富的经验。有理解和经验并在自己工作中运用是一个层次,能把这些经验总结出来,并且用浅显的话表达出来,在我看来是更加高级的层次。从引子中对中国算盘为什么算计算机可以看出,作者对计算机本质的理解很深:“中国的算盘是靠一套珠算口诀来控制操作的,而不是心算。在中国,真正会打算盘的人,都不用动脑筋心算的,…… 也就是说,使用中国算盘,人所提供的不过是机械动能,而非头脑中的运算能力。”这短短的几行,道出了计算机的本质。最近听说一位学心理学的师妹转行做了码农,跟她聊起来她希望我推荐一些软件工程师的进阶读物,正好我刚刚读到《计算之魂》,这正是一本适合5级以及以下工程师阅读的进阶读物。另外,对于一切爱好计算机的人都很适合,即使你不想花时间去钻研其中的题目,感受一下文字中流淌的计算机思维方式,也是一种愉悦的享受。

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.