您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
经典书籍需要不断被重读——每一次重读都会有新的体会
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
经典书籍需要不断被重读——每一次重读都会有新的体会
自猿其说Tech
2021-10-21
IP归属:未知
56800浏览
精益
看了少年派,才知道古文的魅力,现在所说的流行语,其实古人早就说了,言简意赅。比如 流行语:有钱任性;古文:家有千金,行止由心。 流行语:生活不止眼前的苟且,还有诗和远方;古文:悟已往之不谏,知来者之可追。 流行语:起来嗨;古文:昼短苦夜长,何不秉烛游。 流行语:重要的事情说三遍;古文:一言难尽意,三令作五申。 流行语:说的好有道理,我竟无言以对;古文:此中有真意,欲辨已忘言。 流行语:吓死宝宝了;古文:堪惊小儿啼,能开长者颐。 ------------ 程序员在从业过程中会存在各种困惑,就像生活中遇到的流行语一样,其实经典书籍中也早有阐述,前人也曾经历过,而且都有比较好的总结和应对,我在读了相关经典后写了些推荐理由,也摘抄了相关书籍的部分理论和观点,除此以外还有很多经典,有兴趣的同学也可以细品一下,我这里也算抛砖引玉了,当然读起来偶尔会存在晦涩难懂的语句,这些有时需要在不同阶段不断重读,才会有新的体会。 ### 1 《高效程序员的45个习惯:敏捷开发修炼之道》 ![](//img1.jcloudcs.com/developer.jdcloud.com/e7286586-b584-4b23-88d3-54a2ddbbe09a20211021140036.png) #### 推荐理由 对于“敏捷”这个词,不同的人也有不同的理解:有的认为敏捷就是快,越快就是越敏捷;有的认为,敏捷就是只写代码不写文档;有的人为敏捷需要重构而无需设计;有的认为敏捷迭代就是尽量做到最小;我个人认为敏捷开发就是在一个高度协作的环境中,不断的使用反馈进行自我调整和完善,最终交付用户想要的软件,我觉得这本书很好的从各种角度讲述了如何敏捷开发。 **在大家的日常工作中存在着一个普遍现象:程序员最讨厌的两件事,“别人不写文档和注释”和“自己需要写文档和注释”;而本书第6章“敏捷编码-代码要清晰地表达意图”中,从敏捷的角度给出了我们一些编码的建议:** “新项目刚开始着手开发时,它的代码很容易理解和上手。然而,随着开发过程的推进,项目不知不觉中演变为一个庞然怪物。发展到最后,往往需要投入更多的精力、人力和物力来让它继续下去。是什么让它最终变得难以掌控?开发人员在完成任务时,可能会难以抵挡诱惑为节省时间而走“捷径”。然而,这些“捷径”往往只会推迟问题的爆发时间,而不是把它彻底解决掉。当项目时间上的压力增加时,问题最终还是会在项目团队面前出现,让大家心烦意乱。” “开发代码时,应该更注重可读性,而不是只图自己方便。代码阅读的次数要远远超过编写的次数,所以在编写的时候值得花点功夫让它读起来更加简单。实际上,从衡量标准上来看,代码清晰程度的优先级应该排在执行效率之前。例如,如果默认参数或可选参数会影响代码可读性,使其更难以理解和调试,那最好明确地指明参数,而不是在以后让人觉得迷惑。” “在改动代码以修复bug或者添加新功能时,应该有条不紊地进行。首先,应该理解代码做了什么,它是如何做的。接下来,搞清楚将要改变哪些部分,然后着手修改并进行测试。作为第1步的理解代码,往往是最难的。如果别人给你的代码很容易理解,接下来的工作就省心多了。要敬重这个黄金法则,你欠他们一份情,因此也要让你自己的代码简单,便于阅读。” “在编写代码时,应该使用语言特性来提升表现力。使用方法名来传达意向,对方法参数的命名要帮助读者理解背后的想法。异常传达的信息是哪些可能会出问题,以及如何进行防御式编程,要正确的使用和命名异常。好的编程规范能可以让代码变得易于理解,同时减少不必要的注释和文档。” **要编写清晰的而不是讨巧的代码,向代码阅读者明确表明你的意图,可读性差的代码一点都不聪明。** ### 2 《人月神话》 ![](//img1.jcloudcs.com/developer.jdcloud.com/51b59c03-4047-4ffb-8df9-ec37c815791e20211021140131.png) #### 推荐理由 它是软件行业的一本“圣书”,当我初读此书时,书名就让我很感兴趣,“人月”其实是工作量的计量单位,是项目所有参与者工作时长的累计,是项目管理中常用的概念。而其隐藏的含义并不是“人月”是一个“神话”,而是“人月”只是一个谎言,人员数量和工作时间是不能互相替换的,当一个团队和项目到达一定量级,增加人手不但不会缩短任务周期,甚至会使情况更糟。给团队管理也提出了两个建议:1、需要复杂沟通的工作,人越少效率越高;2、一个团队永远只能有一个大脑。 **在日常开发中,我是深有体会,有的需求改动量少可能只涉及三五个开发成员,有时就口头沟通了,但涉及到上下游系统的迭代项目中,如果没有文档,那就是一个灾难,正如书中引用歌德说的话“不了解,就无法真正拥有”,无法真正拥有就无法准确的提出改动点。而能让项目成员各角色都能了解项目意图,文档是沟通最好的桥梁,但针对不同角色不同场景呈现出的文档类型也不一样,那么需要什么样的文档呢,文中就提出了以下观点:** “使用程序,每个用户都需要一段对程序进行描述的文字,可是大多数文档只提供了很少的总结性内容,无法达到用户要求,就像是描绘了树木,形容了树皮和树叶,但却没有一幅森林的图案。为了得到一份有用的文字描述,就必须放慢脚步,稳妥地进行:” - 目的:主要的功能是什么?开发程序的原因是什么? - 环境:程序运行在什么样的机器、硬件配置和操作系统上? - 范围输入的有效范围是什么?允许显示的合法输出范围是什么? - 实现功能和使用的算法。精确地阐述它做了什么 - “输入一输出”格式。必须是确切和完整的。 - 操作指令:包括控制台及输出内容中正常和异常结束的行为。 - 选项:用户的功能选项有哪些?如何在选项之间进行挑选? - 运行时间:在指定的配置下,解决特定规模问题所需要的时间? - 精度和校验结果的精确程度?如何进行精的检测? ### 3《计算机程序的构建和解释》 ![](//img1.jcloudcs.com/developer.jdcloud.com/007f4a00-899d-4ff1-b0a9-1a6170a0dfd520211021140224.png) #### 推荐理由 这本书的教材一直在MIT作为计算机科学学科入门课程的基础,读起来比较官方,但是在工作后回头再读这本书会有不一样的体会。它提到的很多次的一个词就是abstraction:对于函数进行抽象,对于数据进行抽象,这种抽象能力其实时非常重要的,因为抽象是我们控制软件复杂性的重要手段,也是Java四大特性之一,读完后能帮我能更“具象”的理解“抽象”。**本书中第一章阐述了如何理解抽象:** 心智的活动,除了尽力产生各种简单的认识之外,主要表现在如下三个方面: - 将若干简单认识组合为一个复合认识,由此产生出各种复杂的认识。 - 将两个认识放在一起对照,不管它们如何简单或者复杂,在这样做时并不将它们合而 为一。由此得到有关它们的相互关系的认识。 - 将有关认识与那些在实际中和它们同在的所有其他认识隔高开; 这就是抽象,所有具有普遍性的认识都是这样得到的。 “一个强有力的程序设计语言,不仅是一种指挥计算机执行任务的方式,它还应该成为一种框架,使我们能够在其中组织自己有关计算过程的思想。这样,当我们描述一个语言时,就需要将注意力特别放在这一语言所提供的,能够将简单的认识组合起来形成更复杂认识的方法方面。每一种强有力的语言都为此提供了三种机制: ” - 基本表达形式,用于表示语言所关心的最简单的个体。 - 组合的方法,通过它们可以从较简单的东西出发构造出复合的元素。 - 抽象的方法,通过它们可以为复合对象命名,并将它们当作单元去操作。 在程序设计中,我们需要处理两类要素,过程:是有关操作这些数据的规则描述;数据:是一种我们希望去操作的“东西”。任何强有力的程序设计语言都必须能表述基本的数据和基本的过程,还需要提供对过程和数据进行组合和抽象的方法。 ### 4《程序员修炼之道——从小工到专家》 ![](//img1.jcloudcs.com/developer.jdcloud.com/2aebce2c-974d-4188-8a71-190a72f03e8820211021140320.png) #### 推荐理由 我以前听说过知识改变命运,当时只是把它理解为一种工具,但本书中“知识资产投资”让我耳目一新,互联网技术日新月异,稍不留神,时代把你抛弃了都不会跟你打一声招呼,以此延伸的话,如果知识是一种资产,我们必须要将知识资产保值甚至让其升值,所以我们要**定期为你的知识资产投资(Invest Regularly in Your Knowledge Portfolio)** “关于何时以及增加什么到你的知识资产中,现在你已经拥有了一些指导方针,那么什么是获得智力资本、从而为你的资产提供资金的最佳方式呢?本人中有一些建议:” - 每年至少学习一种新语言。不同语言以不同方式解决相同的问题。通过学习若干不同的方法可以帮助你拓宽你的思维,并避免墨守成规。此外,现在学习许多语言已容易了许多,感谢可从网上自由获取的软件财富; - 每季度阅读一本技术书籍。书店里摆满了许多书籍,讨论与你当前的项目有关的有趣话题。一旦你养成习惯,就一个月读一本书。在你掌握了你正在使用的技术之后,扩宽范围,阅读一些与你的项目无关的书籍; - 也要阅读非技术书籍。记住计算机是由人--你在设法满足其需要的人--使用的,这十分重要。不要忘了等式中人这一边; - 上课。在本地的学院或大学、或是将要来临的下一次会展上寻找有趣的课程。 - 参加本地用户组织。不要只是去听讲,而要主动参与。与世隔绝对你的职业生涯来说可能是致命的:打听一下你们公司以外的人都在做什么。 - 试验不同的环境。如果你只在 Windows 上工作,就在家玩一玩 Unix(可自由获取的 Linux就正好)。如果你只用过makefile 和编辑器,就试一试IDE,反之亦然。 - 跟上潮流。订阅商务杂志和其他期刊。选择所涵盖的技术与你当前的项目不同的刊物。 - 上网。想要了解某种新语言或其他技术的各种特性?要了解其他人的相关经验,了解他们使用的特定行话,等等,新闻组是一种很好的方式。上网冲浪,查找论文、商业站点,以及其他任何你可以找到的信息来源。 ### 5 《软技能——代码之外的生存指南》 ![](//img1.jcloudcs.com/developer.jdcloud.com/1bd2d006-db49-4744-85ee-f289ad56942720211021140422.png) #### 推荐理由 **难得有一本书是给专门软件开发人员写的非技术类书籍**。这是一本真正从“人”(而非技术也非管理)的角度关注软件开发人员自身发展的书。书中论述的内容既涉及生活习惯,又包括思维方式,凸显技术中“人”的因素,全面讲解软件行业从业人员所需知道的所有“软技能”。本书聚焦于软件开发人员生活的方方面面,从揭秘面试的流程到精耕细作出一份杀手级简历,从创建大受欢迎的博客到打造你,从提高自己工作效率到与如何与“拖延症”做斗争,甚至包括如何投资不动产,如何关注自己的健康。 我在与其他行业的朋友聊天的时候,往往评价我们程序员比较刻板,沉默寡言,而且也认为技术人员,有时往往不屑于,或者羞于“营销”这个词,以为影响就是做广告,其实不然,我们要改变这个想法,而如何科学的营销呢,一次偶然的机会,我在本书第二篇“自我营销”中找到了相应的解答,如果感兴趣的同学可以买来细读,读后肯定会受益匪浅。具体包括如下途径: - 针对“码农”的营销基础课; - 打造引人注目的品牌; - 创建大获成功的博客; - 你的主要目标:为他人增加价值; - 善于运用社交媒体; - 演讲、报告和培训:做“说话的极客”; - 著书立说,吸引追随者; - 百折不挠,越挫越勇; ### 6 《编程人生》 ![](//img1.jcloudcs.com/developer.jdcloud.com/52ba1e1a-d08f-41e5-be37-57dd7742c69420211021140516.png) #### 推荐理由 漫漫编程路,我有时会因为一些琐碎的事被拖进各种泥沼之中,平时只顾低头走路,而忘记了抬头看天,读完这本书让我觉得豁然开朗,也肃然起敬,让我看得更远,牛顿曾经说过:“如果说我看得比别人更远些,那是因为我站在巨人的肩膀上(If I have seen further, it is by standing on the shoulders of giants)。”在读这本书的时候,我们也相当于站在了巨人的肩膀上,俯瞰他们编程路上的过往。**一千个读者,可能会有一千个不同的编程人生,但巨人的编程人生一定能给我们些指引和启示。** “本书讲述的是世界顶尖的程序员是怎么走上编程道路的?他们的编程工作创造和改变了人类历史,在这一过程中都有哪些经验和教训?他们对计算机软件行业的过去、现在和未来有什么独到的看法和见解?他们对培养、发现、选拔、面试优秀的程序员有什么建议?放下手头的工作,听听这些软件先驱们的故事和建议,眼界可以更开阔,思路可以更清晰,方向可以更明确,人生可以更精彩。” 作者Peter Seibel采访了下面这15位世界级编程大师,这本书是他在近80个小时的访谈录音基础上整理汇编而成的。 - Jamie Zawinski:Lisp程序员,XEmacs开发者,Netscape浏览器和Mozilla核心开发者。 - Brad Fitzpatrick:书中唯一的80后,LiveJournal和memcached开发者。现效力于Google。 - Douglas Crockford:JavaScript权威,JSON之父。现任Yahoo架构师。 - Brendan Eich:JavaScript之父。Mozilla公司CTO。 - Joshua Bloch:如果说Gosling是Java之父,那Bloch就是使Java真正成熟的教父,Java 2到5的核心架构师。现为Google首席Java架构师。 - Joe Armstrong:Erlang和OTP(开放电信平台)框架之父。 - Simon Peyton Jones:Haskell先驱。ACM会士。现为微软剑桥研究院研究员。 - Peter Norvig:Google研发总监。ACM会士。 - Guy Steele:精通多门语言,Common Lisp和Scheme开发者之一,Java语言规范作者之一,Common Lisp、Fortran、C、ECMAScript和Scheme等语言标准化委员会成员。高性能科学计算的语言Fortress设计者。ACM会士,美国工程院院士。Sun公司院士。 - Dan Ingalls:与Alan Kay合作开发了Smalltalk,是该语言的真正实现者。现为Sun公司杰出工程师。 - L. Peter Deutsch:JIT(即时)编译技术发明者之一,PostScript文件浏览器GhostScript的作者。ACM会士。Sun公司院士。 - Ken Thompson:图灵奖得主。Unix之父。UTF-8 Unicode编码设计者。 - Fran Allen:图灵奖第一位女得主。编译技术公认权威。IEEE院士,ACM会士,美国工程院院士。IBM院士。 - Bernie Cosell:Internet奠基人,ARPANET最早的路由计算机IMP设计者之一。 - Donald Knuth:多卷本经典巨著《计算机程序设计艺术》的作者,排版软件TeX的作者,图灵奖得主。 ### 7 不忘初心,方得始终 小时候的课堂上,总会有老师问我们将来长大之后要做什么?那时候大部分小朋友们都会说:“我长大了要当科学家,发明家或者是长大了要当警察抓坏人”。但是没有人会说我长大了要当一个工匠或者是手艺人。 那些世界顶级的程序员我认为他们就是当代工匠精神的“活化石”,他们的成长经历都隐含了一个基本规律:都是编程至少十几二十年以上才最终成为大师的,想真正成为杰出的程序员,没有扎实的基本功是绝对不可能的,因为你会发现当google中无法搜索到现成答案的问题时,上述经典丛书才是修炼工匠精神的“内功心法”。 ------------ ###### 自猿其说Tech-JDL京东物流技术发展部 ###### 作者:快递快运技术部 宋俊宝
原创文章,需联系作者,授权转载
上一篇:JDK8 如何优雅的处理时间
下一篇:打日志的优雅身姿
相关文章
经典书籍需要不断被重读——每一次重读都会有新的体会
Agile Alliance 服务监控-系统的私人医生
Agile Alliance 论回顾会的正确打开姿势
自猿其说Tech
文章数
426
阅读量
2149963
作者其他文章
01
深入JDK中的Optional
本文将从Optional所解决的问题开始,逐层解剖,由浅入深,文中会出现Optioanl方法之间的对比,实践,误用情况分析,优缺点等。与大家一起,对这项Java8中的新特性,进行理解和深入。
01
Taro小程序跨端开发入门实战
为了让小程序开发更简单,更高效,我们采用 Taro 作为首选框架,我们将使用 Taro 的实践经验整理了出来,主要内容围绕着什么是 Taro,为什么用 Taro,以及 Taro 如何使用(正确使用的姿势),还有 Taro 背后的一些设计思想来进行展开,让大家能够对 Taro 有个完整的认识。
01
Flutter For Web实践
Flutter For Web 已经发布一年多时间,它的发布意味着我们可以真正地使用一套代码、一套资源部署整个大前端系统(包括:iOS、Android、Web)。渠道研发组经过一段时间的探索,使用Flutter For Web技术开发了移动端可视化编程平台—Flutter乐高,在这里希望和大家分享下使用Flutter For Web实践过程和踩坑实践
01
配运基础数据缓存瘦身实践
在基础数据的常规能力当中,数据的存取是最基础也是最重要的能力,为了整体提高数据的读取能力,缓存技术在基础数据的场景中得到了广泛的使用,下面会重点展示一下配运组近期针对数据缓存做的瘦身实践。
自猿其说Tech
文章数
426
阅读量
2149963
作者其他文章
01
深入JDK中的Optional
01
Taro小程序跨端开发入门实战
01
Flutter For Web实践
01
配运基础数据缓存瘦身实践
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号