作为一个有理想的程序员之必读书单

您所在的位置:网站首页 程序员必会的软件 作为一个有理想的程序员之必读书单

作为一个有理想的程序员之必读书单

2024-07-11 07:01| 来源: 网络整理| 查看: 265

那些有理想有思想又牛掰的程序员,必读的书目有哪些呢?

在一个名曰Lucida的个站里,有一篇高质量的书单,包含了lucida的全部经验思想,分享一下:

本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及延伸阅读。旨在成为最好最全面的程序员必读书单。

优秀的程序员应该具备两方面能力:

良好的【程序设计】能力:掌握常用的数据结构和算法(例如链表,栈,堆,队列,排序和散列);理解计算机科学的核心概念(例如计算机系统结构、操作系统、编译原理和计算机网络);熟悉至少两门以上编程语言(例如 C++,Java,C#,和 Python);专业的【软件开发】素养:具备良好的编程实践,能够编写可测试(Testable),可扩展(Extensible),可维护(Maintainable)的代码;把握客户需求,按时交付客户所需要的软件产品;理解现代软件开发过程中的核心概念(例如面向对象程序设计,测试驱动开发,持续集成,和持续交付等等)。

和其它能力一样, 程序设计能力和软件开发素养源自项目经验和书本知识。项目经验因人而异(来自不同领域的程序员,项目差异会很大);但书本知识是相通的——尤其是经典图书,它们都能够拓宽程序员的视野,提高程序员的成长速度。

在过去几年的学习和工作中,我阅读了大量的程序设计/软件开发书籍。随着阅读量的增长,我意识到:

经典书籍需要不断被重读——每一次重读都会有新的体会;书籍并非读的越多越好——大多数书籍只是经典书籍中的概念延伸(有时甚至是照搬);

意识到这两点之后,我开始思考一个很功利的问题:如何从尽可能少的书中,获取尽可能多的关键知识?换句话说:

优秀的程序员应该掌握哪些关键概念?哪些书籍来可以帮助程序员掌握这些关键概念?

这即是这篇文章的出发点——我试图通过这篇文章来回答上面两个问题。

进入必读书单之前,我先介绍下书单里的书籍选择标准和领域选择标准。

书籍选择标准

1、必读:什么是必读书籍呢?如果学习某项技术有一本书无论如何都不能错过,那么这本书就是必读书籍——例如 Effective Java 于Java, CLR via C# 于C#;

注意我没有使用“经典”这个词,因为经典计算机书籍往往和计算机科学联系在一起,而且经典往往需要10年甚至更长的时间进行考验;

2、注重实践,而非理论:所以这个书单不会包含过于原理性的书籍

3、入门—必读—延伸:必读书籍的问题在于:1. 大多不适合入门;2. 不够全面。考虑到没有入门阅读和延伸阅读的阅读列表是不完整的——所以书单中每个关键概念都会由一本入门书籍,一本必读书籍(有时入门书籍和必读书籍是同一本),和若干延伸阅读书籍所构成。

概念选择标准全面:全面覆盖软件开发中重要的概念;通用:适用于每一个程序员,和领域特定方向无关;注重基础,但不过于深入:优秀的程序员需要良好的计算机科学基础,但程序员并没必要掌握过于深入的计算机科学知识。以算法为例,每个程序员都应该掌握排序、链表、栈以及队列这些基本数据结构和算法,但计算几何、线性规划和网络流这些算法可能就不是每个程序员都需要掌握的了;

通过这几个标准,我把程序员应掌握的关键概念分为程序设计、软件开发以及个人成长三大类,每一大类均由若干关键概念组成。

入门书籍

【程序设计】

基础理论 : 编码:隐匿在计算机软硬件背后的语言编程语言 :

C : C 和指针C++ : C++ 程序设计原理与实践Java : Java 核心技术(第9版)C# : 精通 C#(第6版)JavaScript : JavaScript DOM编程艺术(第2版)Python : Python 基础教程(第二版)

编程语言理论 : 编程语言实现模式程序设计 : 程序设计方法算法与数据结构 : 算法(第4版)程序调试 : 调试九法——软硬件错误的排查之道【软件开发】编程实践 : 程序设计实践面向对象程序设计 : Head First设计模式重构 : 重构软件测试 : How to Break Software项目管理 : 极客与团队专业开发 : 程序员修炼之道:从小工到专家大师之言 : 奇思妙想:15 位计算机天才及其重大发现界面设计 : 写给大家看的设计书交互设计 : 通用设计法则【个人成长】职业规划 : 软件开发者路线图思维方式 : 程序员的思维修炼:开发认知潜能的九堂课求职面试 : 金领简历:敲开苹果微软谷歌的大门英语写作 : The Only Grammar Book You’ll Ever Need必读书籍

【程序设计】

基础理论 : 深入理解计算机系统(第 2 版)编程语言 :

C : C 程序设计语言(第 2 版)C++ : C++程序设计语言(第 4 版)Java : Effective Java(第 2 版)C# : CLR via C#(第 4 版)JavaScript : JavaScript 语言精粹Python : Python参考手册(第 4 版)

编程语言理论 : 程序设计语言——实践之路(第 3 版)程序设计 : 计算机程序的构造与解释(第 2 版)算法与数据结构 : 编程珠玑(第 2 版)程序调试 : 调试九法——软硬件错误的排查之道【软件开发】编程实践 : 代码大全(第 2 版)面向对象程序设计 : 设计模式重构 : 修改代码的艺术软件测试 : xUnit Test Patterns项目管理 : 人月神话专业开发 : 程序员职业素养大师之言 : 编程人生:15 位软件先驱访谈录界面设计 : 认知与设计:理解UI设计准则(第 2 版)交互设计 : 交互设计精髓(第 3 版)【个人成长】职业规划 : 软件开发者路线图思维方式 : 如何把事情做到最好求职面试 : 程序员面试金典(第 5 版)英语写作 : 风格的要素

这个阅读列表覆盖了软件开发各个关键领域的入门书籍和必读书籍,我相信它可以满足绝大多数程序员的需求,无论你是初学者,还是进阶者,都可以从中获益:

基础理论 包括了程序员应该掌握的计算机基础知识;编程语言 对软件开发至关重要,我选择了 C , C++ , Java , C# , Python ,和 JavaScript 这六门 主流编程语言 进行介绍,如果想进一步理解编程语言,可以阅读 编程语言理论 里的书目;在理解编程语言的基础上,优秀的程序员还应该了解各种 程序设计 技巧,熟悉基本的 算法数据结构 ,并且能够高效的进行 程序调试 。良好的程序设计能力是成为优秀程序员的前提,但软件开发知识也是必不可少的:优秀的程序员应具备良好的 编程实践 ,知道如何利用面向对象,重构,和软件测试编写可复用,可扩展,可维护的代码,并具备软件 项目管理 知识和 专业开发 素养;就像我们可以从名人传记里学习名人的成功经验,程序员也可以通过追随优秀程序员的足迹使自己少走弯路。 大师之言 包含一系列对大师程序员/计算机科学家的访谈,任何程序员都可以从中获益良多;为了打造用户满意的软件产品,程序员应当掌握一定的 界面设计 知识和 交互设计 知识(是的,这些工作应该交给UI和UX,但如果你想独自打造一个产品呢?);专业程序员应当对自己进行 职业规划 ,并熟悉程序员 求职面试 的流程,以便在职业道路上越走越远;软件开发是一项需要不断学习的技能,学习 思维方式 可以有效的提升学习能力和学习效率;软件开发是一项国际化的工作,为了让更多的人了解你的代码(工作),良好的 英语写作 能力必不可少。延伸阅读

【程序设计】

世界是数字的 : K&R 中的 K( Brian Kernighan )的近作,这本书源自 Brian 在普林斯顿大学所教授的计算机基础课程,以通俗易懂的方式讲述了现代人所应了解的计算机知识和网络知识;图灵的秘密:他的生平、思想及论文解读 : Charles Petzold 的另一部作品,这本书以图灵的论文论可计算数及其在判定问题上的应用( On Computable Numbers, with an Application to the Entscheidungsproblem )为主题,阐述了图灵机(现代计算机的始祖)的构造,原理,以及应用。计算机系统概论(第2版) :另一部优秀的计算机系统导论型作品,和 深入理解计算机系统不同,这本书采用自下而上的方式,从二进制,和数字逻辑这些底层知识一步步过渡到高级编程语言(C),从而以另一种方式理解计算机系统。

【编程语言】

C 专家编程 :不要被标题中的“专家”吓到,这实际是一本很轻松的书籍,它既包含了大量 C 语言技术细节和编程技巧,也包含了很多有趣的编程轶事;C 陷阱与缺陷 :书如其名,这本书介绍了 C 语言中常见的坑和一些稀奇古怪的编程“技巧”,不少刁钻的C语言面试题都源自这本小册子;C 语言参考手册 :全面且权威的 C 语言参考手册,而且覆盖 C99,如果你打算成为 C 语言专家,那么这本书不可错过;C 标准库 :给出了15个C标准库的设计思路,实现代码,以及测试代码,配合 C 程序设计语言 阅读效果更佳;C 语言接口与实现 :这本书展示了如何使用C语言实现可复用的数据结构,其中包含大量 C 语言高级技巧,以至于 Amazon 上排行第一的评论是 “Probably the best advanced C book in existance”,而排行第二的评论则是 “By far the most advanced C book I read”。

【C++】

A Tour of C++ :如果你觉得 C++程序设计语言 过于庞大,但你又想快速的浏览一遍新版 C++ 的语言特色,那么可以试试这本小红书;C++ 语言的设计与演化 :C++ 的“历史书”,讲述了 C++ 是如何一步一步从 C with Classes 走到如今这一步,以及 C++ 语言特性背后的故事;C++ 标准库(第2版) :相对于其它语言的标准库,C++ 标准库虽然强大,但学习曲线十分陡峭,这本书是学习 C++ 标准库有力的补充;深度探索 C++ 对象模型 :这本书系统的讲解了 C++ 是如何以最小的性能代价实现对象模型,很多C++面试题(包括被问烂的虚函数指针)都可以在这本书里找到答案;Effective C++ 和 More Effective C++ :由于 C++ 的特性实在繁杂,因此很容易就掉到坑里。Effective 系列既讲述了 C++ 的良好编程实践,也包含C++的使用误区,从而帮你绕过这些坑。

【Java】

深入理解 Java 虚拟机(第2版) :非常优秀且难得的国产佳作,系统的介绍了 Java 虚拟机和相关工具,并给出了一些调优建议;Java 程序员修炼之道 :在这本书之前,并没有一本 Java 书籍系统详细的介绍 Java 7 的新特性(例如新的垃圾收集器,try using 结构和 invokedynamic 指令),这本书填补了这个空白;Java 并发编程实践 :系统全面的介绍了 Java 的并发,如何设计支持并发的数据结构,以及如何编写正确的并发程序;Java Puzzlers :包含了大量的 Java 陷阱——以至于读这本书时我说的最多的一个词就是 WTF,这本书的意义在于它是一个 反模式 大全, Effective Java 告诉你如何写好的 Java 程序,而 Java Puzzlers 则告诉你糟糕的 Java 程序是什么样子。更有意思的是,这两本书的作者都是 Joshua Bloch 。

【C#】

深入理解 C#(第 3 版) :C# 进阶必读,这本书偏重于C#的语言特性,它系统的介绍了C#从1.0到C# 4.0的语言特性演化,并展示了如何利用C#的语言特性编写优雅的程序;.NET设计规范(第 2 版) :C# 专业 程序员必读,从变量命名规范讲到类型系统设计原则,这本书提供了一套完整的.Net编程规范,使得程序员可以编写出一致,严谨的代码,C# 5.0 权威指南 :来自 O’Reilly 的 C# 参考手册,严谨的介绍了 C# 语法,使用,以及核心类库,C#程序员案头必备;LINQ to Objects Using C# 4.0 和 Async in C# 5.0 :LINQ 和 async 分别是 .Net 3.5 和 .Net 4.5 中所引入的最重要的语言特性,所以我认为有必要在它们上面花点功夫——这两本书是介绍 LINQ 和 async 编程的最佳读物。

【Javascript】

JavaScript 高级程序设计(第 3 版) :详尽且深入的介绍了Javascript语言,DOM,以及Ajax,并针对HTML5做了对应更新;JavaScript 权威指南(第 6 版) :这本书的第5版曾被前端专家 Douglas Crockford 称之为“唯一靠谱的 JavaScript 书”。相对于 JavaScript高级程序设计 , JavaScript 权威指南 更像是一本案头参考书,当然如果你感兴趣也可以从头读到尾;编写可维护的 JavaScript :书如其名,这本书给出了大量的优秀 JavaScript 编程实践,使得程序员编写出健壮且易于维护的 JavaScript 代码;JavaScript 异步编程 :和常见的支持并发的编程语言(例如 Java 和 C#)不同,JavaScript 本身是单线程的,因此不能把其它语言处理并发的方式照搬到 JavaScript。JavaScript 异步编程系统的介绍了JavaScript 中的并发原理,并阐述了如何使用Promise、Deferred以及Async.js编写出简洁高效的异步程序。

【Python】

Python 袖珍指南(第 5 版) :实用且便携的 Python 参考手册,我会说我在飞机上写程序时用的就是它么 -_-#;Python Cookbook(第 3 版) :非常好的 Python 进阶读物,包含各种常用场景下的 Python 代码,使得读者可以写出更加 Pythonic 的代码;Python 编程实战:运用设计模式、并发和程序库创建高质量程序 :Python 高级读物,针对 Python 3,2014 年的 Jolt 大奖图书 ,不可错过;Python 源码剖析 :少见的国产精品,这本书以 Python 2.5 为例,从源代码出发,一步步分析了 CPython 是如何实现类型,控制流,函数/方法的声明与调用,类型以及装饰器等 Python 核心概念,读过之后会大大加深对 Python 的理解。尽管这本书有些过时,但我们仍然可以按照它分析源代码的方式来分析新版Python。

【编程语言】

七周七语言:理解多种编程范型 :尽管我们在日常工作中可能只使用两三门编程语言,但是了解其它编程语言范式是很重要的。 七周七语言 一书用精简的篇幅介绍了 Ruby,Io,Prolog,Scala,Erlang,Clojure,和 Haskell 这七种具有不同编程范式的语言——是的,你没法通过这本书变成这七种语言的专家,但你的视野会得到极大的拓宽;自制编程语言 :另一本优秀的编译原理作品, 自制编程语言 通过从零开始制作一门无类型语言 Crowbar和一门静态类型语言 Diksam,把类型系统,垃圾回收,和代码生成等编程语言的关键概念讲的清清楚楚;计算的本质:深入剖析程序和计算机 :披着 Ruby 外衣的 计算理论 入门书籍,使你对编程语言的理解更上一层楼。

【编程实践】

编写可读代码的艺术 :专注于代码可读性(Code Readability),这本书来自 Google 的两位工程师对 Google Code Readability 的总结。它给出了大量命名,注释,代码结构,以及 API 设计等日常编码的最佳实践,并包含了很多看似细微但却可以显著提升代码可读性的编程技巧。这本书的翻译还不错,但如果你想体会书中的英语幽默(例如Tyrannosaurus——Stegosaurus——Thesaurus),建议阅读它的 英文影印版 ;卓有成效的程序员 :专注于生产效率(Productivity),它既包含源自作者多年经验的高生产率原则,也包含大量的提高生产率的小工具,每个追求高生产率的程序员都应该阅读这本书;UNIX编程艺术 :专注于程序设计哲学,这本书首先总结出包括模块化,清晰化,可组合,可分离等17个Unix程序设计哲学,接下来通过 Unix 历史以及各种 Unix 编程工具展示了这些原则的应用。尽管个人觉的这本书有些过度拔高 Unix 且过度贬低 Windows 和 M$,但书中的 Unix 设计哲学非常值得借鉴

【项目管理】

人件(原书第3版) :从人的角度分析软件项目。 人件 从雇佣正确的人,创建健康的工作环境,以及打造高效的开发团队等角度阐述了如何改善人,从而改善软件项目;门后的秘密:卓越管理的故事 :这本书生动的再现了软件项目管理工作的场景,并给出了各种实用管理技巧,如果你有意转向管理岗位,这本书不容错过;大教堂与集市 :这本书从黑客的历史说起,系统而又风趣的讲述了开源运动的理论和实践,以及开源软件项目是如何运作并发展的。了解开源,从这本书开始。

【专业开发】

高效程序员的 45 个习惯 :“敏捷”版的 程序员修炼之道 ,可以把这本书作为 程序员修炼之道的补充;精益创业 :尽管这是一本讲如何创业的书,但其中的精益生产,最小价值产品,以及构建-度量-学习循环都值得程序员借鉴。

【大师之言】

图灵和 ACM 图灵奖(1966-2011) :通过图灵奖介绍整个计算机科学发展史,非常难得的国产精品图书;编程大师访谈录 :可以把这本书看作为二十年前的编程人生,被访谈者都是当时叱咤风云的人物(例如微软的创造者 Bill Gates ,Macintosh 的发明者 Jeff Raskin ,以及 Adobe 的创始人 John Warnock 等等)。有趣的是这本书中大量的经验和建议到如今依然适用;编程大师智慧 :类似于编程人生,不同的是被访谈者都是编程语言的设计者——这本书覆盖了除C语言以外的几乎所有主流编程语言。通过这本书,你可以从中学到编程语言背后的设计思想——编程语言为什么要被设计成这样,是什么促使设计者要在语言中加入这个特性(或拒绝那个特性)。从而提升对编程语言的理解。

【职业规划】

卡耐基全集 :非常著名的为人处世书籍。很多人把这本书归类到成功学,但我并不这么认为——在我看来,这本书教的更多的是如何成为一个让大家喜欢的人。作为天天和机器打交道的程序员,这套书会帮助我们与人打交道;沃顿商学院最受欢迎的谈判课 :这本书不是教你去谈判,而是教你通过谈判(Negotiation)去得到更多(Getting more,这也是这本书的原书书名)。小到买菜砍价,大到争取项目,这本书中的谈判原则会让你收益良多;程序员健康指南 :作为长期与计算机打交道的职业,程序员往往会受到各式各样疾病的困扰,这本书正是为了解决这个问题而出现:它从改善工作环境,调整饮食结构,预防头痛眼痛,以及进行室内/室外锻炼等方面出发,给出了一套全面且可行的程序员健康改善计划,以帮助程序员打造健康的身体。

【思维方式】

怎样解题:数学思维的新方法 :不要被标题中的“数学思维”吓到,它并不仅仅只是一本数学解题书,它所提出的四步解题法(理解题目->拟定方案->执行计划->总结反思)适用于任何领域;暗时间 : 刘未鹏 所写的关于学习思维方法的文章集,既包含了他对学习方法的思考,也包含了大量进一步阅读的资源;批判性思维:带你走出思维的误区 :这本书系统的分析了人类思维的常见误区,并针对各个误区给出了解决方案,从而帮助程序员养成严谨正确的思考方式;Conceptual Blockbusting: A Guide to Better Ideas :与批判性思维相反,这本书专注于创造性思维(Creative Thinking),它分析了阻碍创造性思维的常见思维障碍(Blockbuster)以及这些思维障碍背后的成因,并给出了各种方法以破除这些障碍。

以上内容来源于个站:Lucida



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3