我的编程生涯里启发我的15本书

从几百本书中整理出一份书单是一件困难的事,但是从这些书中挑选出对自己影响比较大的书确是一件容易的事。

在是一份迟来的书单,但是并不是一份适用于每个人的书单。这是我在学习编程过程中看的一些书,启发到我的书,有很多你可能没有听过,也有很多可能是你耳熟能详的。之所以说是启发是因为很多说并没有那么好,但是我从上面获取到了一些灵感。

高中时期

高中时期,因为想开发游戏的热情才深入计算机世界。并且高中也是一个相当无聊的时期,除了为高考准备的考试,还有就是上课

《C++游戏开发》

有一些书,你就没有必要去看了,比如这里的第一本书《C++游戏开发》,这本书是我在高中的时候翻了好几遍的书

这本书一直在说“C++是一门优雅的语言”,也介绍了很多我在之前编程中不懂的知识点:数组、指针,以及高级点的重载和继承这一些面向对象的知识。这本书在游戏开发方面讲得不是很多,但是当时让我脑洞大开的是——2.5D编程。简单地来说,就是二张图片叠加在一起形成的3D效果。我才意识到当然我玩的很多游戏是这样做出来的。

我那之前我只会写点代码,并不知道一个游戏是如何在操作系统上运行的。在这本书中我学会了代码是如何通过操作系统的API来创建窗口、操作文件、操作声音等等。

其实上面说到的游戏开发的书应该是一整个系列,但是很多书启发性似乎并不大就不提了。记得还有《Java5 游戏编程》、《网络游戏开发》、《游戏开发核心技术?剧本与角色创造》等等的书。

《3D游戏》

这是一本讲述3D游戏编程的书,实际上说的是如何去造一个游戏引擎。上图:

当然很多内容都看得不是很懂,这本书对我的帮助并不是技术本身,而是对于数学的提高和3D空间的理解。高中的知识本身并不多,多的是知识本身衍生出来的试题。换句话说,这样的书和上一本书一样,在我们遇到瓶颈的时候是很有帮助的,相当于帮我们打开了另外一片天空。原本我们以为世界是这样的,后来我们意识到了世界并不是这样的,世界比我们想象中的要大。

《Linux内核设计与实现》

这本书并不是同上两本是一本启发性的书籍,但是是一本奠定基础的书籍。

出于某种原因,加之发现一个人很难开发3D游戏。便开始学习游戏底层之下的技术——操作系统。于是很快地就从一个游戏开发爱好者变成了一个Kernel Hacker。很多东西都已经忘了,但是很多东西都记得很清楚。如Linux是一个宏内核,但是借助了微内核的很多思想。在当时的环境下,所谓的多进程是怎么一回事,他们多久切换一次进程等等。

除此,不得不提及的一本书是《Orange‘S:一个操作系统的实现》,这本书在当时的映像是非常不错的。但是这本书放在我的家里吃灰尘了~~。

《代码之美》

这本书开启了我的装B史~~,上图

由于这是一本合集,所以书中的大部分内容我没有看懂。但是,这本书让我看到了各种很Diao的代码。不过这并不重要,重要的是我在这本书里面认识了Emacs。这就是为什么这本书会上榜的原因。

这本书中有多篇提到了Emacs,然后我就去试了!!! 这本书中有多篇提到了Emacs,然后我就去试了!!! 这本书中有多篇提到了Emacs,然后我就去试了!!!

大学

大学学的是硬件,所以在软件方面花费的经历并不是特别多,成长比较大的是大学最后的学习。

《设计模式》

之所以买这本书的原因是:很多书中都提到了这本书,强调这本书是多么的重要。然后,我就买了。

当时写的语言基本上就是C、Python还有汇编,所以在当时并不特别懂,后面我们会继续说到。它给我的感觉就是,WOCAO,我当年的C++连入门都算不上。虽然能看懂,但是一知半解。主要是当时代码写得并不多,主要是在博览群书。

《领域特定语言》

DSL大法好,DSL大法真的是一个很棒的想法。

它可以用更简洁的语言业表达你的想法。这是很美好的一个想法,如果我们可以把我们的业务代码抽象成外部DSL的话,那么我们就不担心架构的变更、技术框架的落后。

《SEO艺术》

当你有一篇好的文章,还有一个好的产品,你还需要什么?SEO就是其中一个。

让我意识到一点:事物间的关联性——也就是Page Rank。当时对论文这种东西没啥概念,后来发现这是非常有趣的一个算法。

这个原则不仅仅适用于SEO领域,还适用于社交领域、大V经济领域。PR高的网站链接PR高的网站可能没有啥明显的作用,但是对提交PR低的网站特别有用。

《重来》

《重来》似乎是一本经常被提及的书,好在我也是看过的,还写了几篇相关的文章。

这本书有三点说得很不错,换句话来说,这三点和我产生了共鸣:

  1. 卖掉代码的副产品。事物间存在的连接属性。
  2. 招聘笔杆子。这个就不用多说了,我写了那么多文章。
  3. 音乐应在你的指尖流淌。好的装备确实能带来一些帮助,但事实是,你的演奏水平是由你自己的手指决定的。

实习

大四的时候就开始找工作了,然后我就遇到了ThoughtWorks。面试的时候醒悟到了《重构》可以到《设计模式》,但是光醒悟并没有啥卵用,下面这本书是我后来的后来才遇到的。

《重构与模式》

不知道在多少的场合里,我一直在吐槽这本书应该是叫《重构到设计模式》。

虽然并没有学到太多的实质性的东西——很多东西都在实习的时候已经学到了。重构和设计模式一样,光一天天做一些智力练习并没有啥用。从重构代码到抽象出设计模式,是一种很迷人的体验。

《重构》

这本书虽然看得很早,但是提得很晚的原因是:主角总是最后才出场的。

在当时我也花了很多时间去识别书中的一些Code Smell,然后去重构。亲手把自己的代码从一坨x变得更易读是一种很棒的体验,你说呢?

《敏捷软件开发》

这又是一本Jolt效率大奖的书,这似乎也是进入我们公司应该读的一本书。

这本书结合了敏捷方法、模式和面向对象的一些思想,并提出了SOLID(单一功能、开闭原则、里氏替换、接口隔离以及依赖反转)这五个基本原则。

工作

《持续交付 发布可靠软件的系统方法》

这倒不是一本对我启发非常大的书,主要是因为这已经是我们的日常工作流程。

如果你先实践了,然后再去看一本书,那么你就不会觉得一本是多么的棒。软件本身是一种持续的过程,特别是Web开发来说。在这一点上来看,几乎所有的互联网公司都可以持续交付软件。但是国内的大部分互联网公司的代码都是没有测试的,并且呈现的是一种几乎有问题的持续交付模式。

《面向模式的软件架构 卷1:模式系统》

作为另外一本Jolt效率大奖的书,这本书名副其实。

能从混乱到有序就可以抽象成一种架构模式,书中向我们展示了各个层面的模式是如何发挥作用的。这本书让我意识到了模式不仅仅存在于代码之间,又存在于架构之间,更是可以存在于我们的日常生活之中。

《实现领域驱动设计》

尽管这本书提到的很多东西我都很了解,我还是不非常懂这本书。或许只是因为没有连接概念到代码上,让我在有空的时候再细细理解这本书。

虽是如此,但是这本书中提到的六边形架构让我映象深刻,又可以称之为“端口和适配器架构”。

还有CQRS(命令和查询责任分离)架构,这种风格和我们现有系统的架构是类似的。在我们系统的架构中,读和写是两个不同的数据源,我相信这种结构也存在于很多的系统中。

还有我之前提到过的编辑-发布-开发分离也是类似于这种风格的架构。

《浮现式设计 专业软件开发的演进本质》

最后出现的这本书,让我重新理解了软件开发的演进。

浮现式设计这个概念很棒,软件不是一开始就产生的,面向Web开发的软件更是如此。由于业务发现的需要,我们不可能在一开始想到一切的可能性,我们只能在业务演进的同时发展我们的架构。

吃水不忘挖井人~~,欢迎关注我的微信公众号(或搜索Phodal)

时间: 2024-08-10 23:13:04

我的编程生涯里启发我的15本书的相关文章

【转载】15年编程生涯,资深架构师总结的7条经验

原文:15年编程生涯,资深架构师总结的7条经验 前言: 这是一篇应InfoQ之邀写的文章, 首发在InfoQ微信公共号上. 大家有空可以多看看InfoQ 网站和公共号 , 是个很有深度的优秀社区. 我和很多人交流过一个有趣的现象,那就是刚毕业到30岁这段时间,会觉得时间过得很慢,总觉得自己还很年轻,但是一旦过了30岁,时间就如白驹过隙,一年又一年飞逝而过. 我自己也是,眼瞅着毕业快15年了,15年间从一个刚毕业的菜鸟,成长为技术骨干,做到架构师的职位,回头看看,当年听取亲戚的一句话,误入计算机行

Bruce Eckel:编程生涯(转载)

Bruce Eckel:编程生涯(转载) 说明:Bruce Eckel 著有大名鼎鼎的<Thinking in C++>和<Thinking in Java>.本文是他对程序员(尤其是新手)的忠告 正文如下: —— 大家总是问一个错误的问题:“我应该学习C++还是Java?”在本文中,我将告诉大伙儿:对于选择编程生涯真正需要关注的是哪些问题. 请注意,这篇文章的目标读者并不是那些已经做出自己选择的人.(对于这些人而言)你会继续自己的编程生涯,而不管别人会怎么说.因为它已经渗透到你的

CSDN头版头条 《近匠》 Wijmo 5 CTO:从Web到移动,我的25年编程生涯

现年52岁的Bernardo Castilho先生是GrapeCity(中文名为葡萄城)ComponentOne公司的CTO,在与他的对话过程中.充满风趣严谨和厚重的历史感. 当作为年轻人的我们崇拜着各式娱乐男神女神时,他的偶像却是这个世界上最为杰出的科学家.从少年时代開始.编程成了他的兴趣爱好.并终于成为了他许以一生的职业.作为Wijmo 5开发团队的Leader之中的一个,他是HTML5.JavaScript等众多技术的行家里手,在採訪他之前,笔者特地在CSDN论坛上发起了一个问题征集的活动

Bruce Eckel:编程生涯

大家总是问一个错误的问题:"我应该学习C++还是Java?"在本文中,我将告诉大伙儿:对于选择编程生涯真正需要关注的是哪些问题. 请注意,这篇文章的目标读者并不是那些已经做出自己选择的人.(对于这些人而言)你会继续自己的编程生涯,而不管别人会怎么说.因为它已经渗透到你的血液中,你已经无法摆脱.你已经知道答案:C++.Java.Shell脚本.Python.还有其它一大堆的语言和技术,你都理所当然地会去学习.甚至有可能你才仅仅14岁,就已经知道好几种不同的语言. 问我这样的问题的人可能来

程序员编程生涯中会犯的7个错误

英文原文:7 Mistakes You're Making In Your Programming Career 作为软件开发人员生活和职业指导,我需要和很多程序员交流,帮助他们提升职业生涯,加速成长.时间久了,我发现很多程序员总是犯着相同的错误,前仆后继,却毫不自知.下面就是程序员在他们的软件开发生涯中最常犯的 7 个错误. 1. 没有明确的目标 心中没有终点目标,那就只会随波逐流. 如果你想在软件开发的职业生涯上获得成功,那么你需要有一个明确的目标.仅仅只是对遥远的未来有一个模糊的想法是不够

迟到的领悟 在编程生涯初期应了解的事

这里有一些感悟是我希望能够在我进入软件开发领域时所知道的事情,如果我早一些领悟到,相信会比现在更加成功,也更节省一些时间. 软件开发工作没有"正确方法" 在软件开发生涯的早期,我曾经浪费了大量的时间在学习和争辩,错误的相信有一条"绝对正确的方法"能够应付软件开发的很多方面. 结果证明我曾经认为关于软件开发的每一件正确的事情到最后都是错误的. 但是更重要的是,我发现很少有事情是黑白分明的.在写代码和开发软件时所做的几乎每一个决定都取决于当时所处的环境. 我曾经讨论过关

如何在编程生涯中有一个好的开端

英文原文:How To Get a Jump Start In Your Programming Career 想要进入软件开发的领域其实是很难的.当然,如果你还是一名刚刚入门的程序员,那么我相信你深刻理解没有经验或者没有太多经验想找一份工作是如何困难.如果你已经在软件开发这一行干过一段时间,那么我相信你也会深刻理解想要在这个竞争激烈的行业鹤立鸡群又是如何困难. 我接触过很多刚刚入门的开发人员,他们非常迷茫,因为他们不知道该往哪里投入自己的精力来发展自己的职业生涯,也不知道未来的方向在哪里.选择

编程生涯

1, 如果有人让你推荐编程技术书,请叫他看这个列表 这个列表包括了 100 多本经典技术书籍,涵盖:计算机系统与网络.系统架构.算法与数据结构.前端开发.后端开发.移动开发.数据库.测试.项目与团队.程序员职业修炼.求职面试 和 编程相关的经典书籍. 本列表综合了伯乐在线网站以往推荐经典书籍文章中的列表,以及在微信和微博中被广泛推荐的好书.虽然已经包括了 100 多本,覆盖的面也比较全,仍然有很多方面需要补充,而且相信还有很多没有被收录的好书.欢迎大家在评论中推荐或自荐. 这篇文章主要是分类别推

8年编程生涯回顾:谈谈我对程序员的理解

点击右上方关注我们,每天都能收到这样有趣有料的推文啦! (全文2000字,建议阅读时长5分钟) [文章为语录体问答形式] hello,大家好,我是阿琰. 今天这个文章主要是想讲一下我作为程序员对这个职业的理解. 我会从两个方面来聊一聊程序员这个职业,首先是我觉得作为程序员比较重要的一些能力,然后我想说一下大家对程序员的一些误解,最后我想聊一聊我作为一个程序员是怎么样从小白成长到今天的这样一个水平的. 一.程序员能力大起底 我觉得作为程序员有三个能力是特别重要的, 第一个是保持持续学习的能力,因为