程序员修炼之路
0.前言:在路上,再上路
在前言《程序员修炼之路-(0)前言:在路上, 再上路》中已经对知识体系进行了梳理,主要分为问题定义、算法与数据结构、系统平台API、编程语言实现、代码设计、测试验证等等。目前集中精力编写算法与数据结构部分,这可能也是最艰难的一部分。其他部分之前零零散散有所涉及,之后再慢慢补充。
1.计算机数学
离散数学与具体数学。
2.算法分析设计
对于这一部分的内容编排,主要以《算法设计与分析基础》、《算法》以及LeetCode算法题中的问题分类为横向,以《算法设计与分析基础》中罗列的经典设计技巧为纵向,贯穿每一小节。因为传统算法书籍的结构经常是为了讲算法而讲,目录内容分类都很死板。而我想要的是解决这一类问题有哪些算法?都是用什么技巧和思路设计的?
2.1 理论基础
- 《程序员修炼之路-(1)基础(上):算法设计》
- 《程序员修炼之路-(1)基础(中):性能分析》
- 《程序员修炼之路-(1)基础(下):正确性证明》
2.2 线性表
2.3 排序
- 《程序员修炼之路-(3)排序(上):基本排序》
- 《程序员修炼之路-(3)排序(中):合并和快速排序》
2.4 搜索
- 《程序员修炼之路-(4)搜索(上):线性与二分查找》
- 《程序员修炼之路-(4)搜索(中):二叉查找树》
- 《程序员修炼之路-(4)搜索(下):哈希表》
2.5 字符串
非常重要,单列一章。
2.6 图
图算法也同样重要,与现实生活的紧密程度甚至超过了上面所有数据结构。
2.7 总结
《如何解题》、穷解、减治、分治、动态规划、贪心。
3.系统平台
计算机架构(计算机组成原理、汇编语言等)、操作系统(Linux和Windows常用系统API等)、编译链接(编译和链接的原理)。
3.1 体系结构
《深入理解计算机系统》,绝对的经典,永远的CSAPP:
- 《六星经典CSAPP笔记(1)计算机系统巡游》
- 《六星经典CSAPP笔记(2)信息的操作和表示》
- 《六星经典CSAPP笔记(3)程序的机器级表示》
- 《六星经典CSAPP-笔记(7)加载与链接(上)》
- 《六星经典CSAPP-笔记(10)系统I/O》
- 《六星经典CSAPP-笔记(11)网络编程》
- 《六星经典CSAPP-笔记(12)并发编程(上)》
3.2 操作系统
《操作系统概念》,9分的好书,不知道与《现代操作系统》相比哪本更好:
3.2.1 Linux
《Linux C一站式学习》,挺经典的一本书,还是国产吧:
学习操作系统特别是Linux,Shell也是必不可少,有一阵子还很热衷写Shell:
3.2.2 Windows
Windows平台下的编程实践,《Windows程序设计》和《Windows游戏编程大师技巧》可以说是Windows平台编程的两本“圣经”了:
- 《Windows游戏编程大师技巧 一、学海无涯》
- 《Windows游戏编程大师技巧 二、Windows编程模型》
- 《Windows游戏编程大师技巧 三、Windows高级编程》
- 《Windows游戏编程大师技巧 四、GDI、控件和突发奇想》
- 《Windows游戏编程大师技巧 五、DirectX基础知识和令人生畏的COM》
- 《Windows程序设计 第一章 起步》
- 《Windows程序设计 第二章 Unicode简介》
- 《Windows程序设计 第三章 窗口和消息》
3.3 计算机网络
Java网络编程基础:
- 《Java Socket编程(一)TCP/IP简介》
- 《Java Socket编程(二)Socket基础》
- 《Java Socket编程(三)发送和接收深入》
- 《Java Socket编程(四)Socket进阶》
- 《Java Socket编程(五)NIO》
3.4 数据库
这一部分目前比较杂,之前看的《数据库概念》没有及时整理,待补充。
3.5 编译链接
4.编码实现
C/C++/Java等主流语言,如何实现我们的设计,包括语言语法、内存分配、封装抽象、分包引库等小细节。
4.1 开发工具
4.1.1 编辑器
- 《开发环境搭建中的网络代理问题》
- 《十大Intellij IDEA快捷键》
- 《Eclipse vs. IDEA快捷键对比大全》
- 《Sublime Text 3下C/C++开发环境搭建》
- 《学习Emacs的理由》
- 《Emacs+Lisp环境搭建》
- 《Emacs系列教程摘录》
4.1.2 调试工具
4.1.3 项目构建
4.1.4 版本控制
4.1.5 持续集成
4.2 C/C++
- 《C程序设计语言 第一章导言》
- 《C程序设计语言 第二章 类型、运算符与表达式》
- 《C程序设计语言 第三章 控制流》
- 《C程序设计语言 第四章 函数和程序结构》
- 《C和指针 读书笔记》
- 《C和指针第14章 预处理器》
- 《深入学习有趣的位运算》
4.3 Java
4.4 PHP
- 《PHP与MySQL程序设计 面向对象的PHP》
- 《PHP与MySQL程序设计 第三章 PHP基础》
- 《PHP与MySQL程序设计 第八章异常处理》
- 《PHP框架Yii系列教程(一):入门实例》
- 《PHP框架Yii系列教程(二):功能简介》
- 《PHP框架Yii系列教程(三):集成Redis》
- 《PHP框架Yii系列教程(四):使用Memcache保存会话》
4.5 Golang
4.6 Web
5.程序设计
抽象层次定义、23种设计模式、重构改善设计。
5.1 抽象层次
5.2 编码规范
5.3 设计模式
5.4 方法论
5.5 架构设计
6.测试验证
单元测试、性能测试等技术。
6.1 单元测试
6.2 性能测试
附录
附1:业余实践项目
主要是为了练习C,业余时间写了不少代码,从Web到桌面到游戏到算法类的,涉猎有些杂了… 但不管怎样,收获还是很大,未来还是要坚持多实践,多写一些实用的小东西!
- 《用Qt开发简单的浏览器(一)》
- 《用Qt开发简单的浏览器(二)》
- 《PSP应用开发入门》
- 《Windows游戏编程大师技巧 T3D游戏控制台程序实例及第一部分总结》
- 《我的第一个Chrome插件:天气预报应用》
- 《贝叶斯公式与拼写检查器》
- 《Trie的应用及拼写检查器的优化》
- 《开发一个小工具重温C#经典问题》
- 《Java版的Redis》
- 《Java实现Qt的SIGNAL-SLOT机制》
- 《用Groovy和JFreeChart生成报表》
- 《开发Nginx模块Helloworld》
- 《Intellij IDEA插件开发入门》
附2:公开课
- 《斯坦福<编程方法学>公开课》
- 《斯坦福<编程方法学>环境搭建及常见问题》
- 《MIT<计算机科学与编程导论> 课堂笔记》
- 《MIT<计算机科学与编程导论> 第六讲》
- 《MIT<计算机科学与编程导论> 第七讲》
附3:《算法导论学习笔记》
当年《算法导论》的学习笔记,坚持到动态规划就浅尝辄止了,DP挺难……
- 《<算法导论>第二章 入门》
- 《<算法导论>第6章 堆排序 (1)最大堆与堆排序》
- 《<算法导论>第6章 堆排序 (2)优先级队列》
- 《<算法导论>第6章 堆排序 (3)K路归并》
- 《<算法导论>第8章 线性时间排序 (1)计数排序》
- 《<算法导论>第6章 堆排序 (4)Young氏矩阵》
- 《<算法导论>第7章 快速排序 (四种变形)》
- 《<算法导论>第9章 顺序统计学 (1)最小值和最大值》
- 《<算法导论>第9章 顺序统计学 (2)随机选择》
- 《<算法导论>第10章 基本数据结构 (2)链表》
- 《<算法导论>第11章 散列表 (1)直接寻址表》
- 《<算法导论>第11章 散列表 (2)散列表》
- 《<算法导论>第11章 散列表 (3)开放寻址》
- 《<算法导论>第12章 二叉查找树 (1)遍历》
- 《<算法导论>第12章 二叉查找树 (2)查找、插入与删除》
- 《<算法导论>第12章 二叉查找树 (3)基数树》
- 《<算法导论>第14章 数据结构的扩张 (1)动态顺序统计》
- 《<算法导论>数据结构的扩张 (2)》
- 《<算法导论>第15章 动态规划 (1)装配线调度》
- 《关于算法学习的总结和感悟》