程序员修炼之路

0.前言:在路上,再上路

在前言《程序员修炼之路-(0)前言:在路上, 再上路》中已经对知识体系进行了梳理,主要分为问题定义、算法与数据结构、系统平台API、编程语言实现、代码设计、测试验证等等。目前集中精力编写算法与数据结构部分,这可能也是最艰难的一部分。其他部分之前零零散散有所涉及,之后再慢慢补充。


1.计算机数学

离散数学与具体数学。


2.算法分析设计

对于这一部分的内容编排,主要以《算法设计与分析基础》、《算法》以及LeetCode算法题中的问题分类为横向,以《算法设计与分析基础》中罗列的经典设计技巧为纵向,贯穿每一小节。因为传统算法书籍的结构经常是为了讲算法而讲,目录内容分类都很死板。而我想要的是解决这一类问题有哪些算法?都是用什么技巧和思路设计的?

2.1 理论基础

2.2 线性表

2.3 排序

2.4 搜索

2.5 字符串

非常重要,单列一章。

2.6 图

图算法也同样重要,与现实生活的紧密程度甚至超过了上面所有数据结构。

2.7 总结

《如何解题》、穷解、减治、分治、动态规划、贪心。


3.系统平台

计算机架构(计算机组成原理、汇编语言等)、操作系统(Linux和Windows常用系统API等)、编译链接(编译和链接的原理)。

3.1 体系结构

《深入理解计算机系统》,绝对的经典,永远的CSAPP:

3.2 操作系统

《操作系统概念》,9分的好书,不知道与《现代操作系统》相比哪本更好:

3.2.1 Linux

《Linux C一站式学习》,挺经典的一本书,还是国产吧:

学习操作系统特别是Linux,Shell也是必不可少,有一阵子还很热衷写Shell:

3.2.2 Windows

Windows平台下的编程实践,《Windows程序设计》和《Windows游戏编程大师技巧》可以说是Windows平台编程的两本“圣经”了:

3.3 计算机网络

Java网络编程基础:

3.4 数据库

这一部分目前比较杂,之前看的《数据库概念》没有及时整理,待补充。

3.5 编译链接


4.编码实现

C/C++/Java等主流语言,如何实现我们的设计,包括语言语法、内存分配、封装抽象、分包引库等小细节。

4.1 开发工具

4.1.1 编辑器

4.1.2 调试工具

4.1.3 项目构建

4.1.4 版本控制

4.1.5 持续集成

4.2 C/C++

4.3 Java

4.4 PHP

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到桌面到游戏到算法类的,涉猎有些杂了… 但不管怎样,收获还是很大,未来还是要坚持多实践,多写一些实用的小东西!

附2:公开课

附3:《算法导论学习笔记》

当年《算法导论》的学习笔记,坚持到动态规划就浅尝辄止了,DP挺难……

时间: 2024-10-25 19:39:38

程序员修炼之路的相关文章

程序员修炼之路-(0)目录

前言:<程序员修炼之路-(0)前言:在路上, 再上路> 在前言中已经对知识体系进行了梳理,主要分为问题定义.算法与数据结构.系统平台API.编程语言实现.代码设计.测试验证等等.目前集中精力编写算法与数据结构部分,这可能也是最艰难的一部分,之后再考虑补充其他部分. 对于这一部分的内容编排,主要以<算法设计与分析基础>.<算法>以及LeetCode算法题中的问题分类为横向,以<算法设计与分析基础>中罗列的经典设计技巧为纵向,贯穿每一小节.因为传统算法书籍的结构

Java程序员修炼之路(一)我们为什么选择Java

我们为什么选择Java大多数人选择Java可能只是因为听说Java前景好.Java比较好找工作.Java语言在TIOBE排行榜上一直位于前三等等之类的原因,但是Java具体好在哪里,心里却是没有什么概念的.其实我选择Java也是出于以上的原因,但是现在确实真正地爱上了Java.那么现在我们来分析下Java的好处究竟在哪里.创一个小群,供大家学习交流聊天如果有对学JAVA方面有什么疑惑问题的,或者有什么想说的想聊的大家可以一起交流学习一起进步也希望大家对学JAVA能够持之以恒JAVA爱好群,如果你

程序员修炼之路-(1)基础(中):性能分析

3 算法分析 "分析"二字的含义很广泛,在算法分析的领域,指的就是算法的效率,包括运行时间效率(时间复杂度)和内存空间使用效率(空间复杂度)两方面.同时,研究表明,通常时间方面比空间能取得更大的进展,因此我们进一步将分析的重点放在时间复杂度上. 3.1 算法分析 - 科学实验方法 科学家用来理解自然世界的方法对分析程序的运行时间来说同样有效: 1)     观察:观察自然世界的一些特性,并用准确的度量表示. 2)     假设:假设一个能与观察保持一致的模型. 3)     预测:用上

程序员修炼之路-(1)基础(下):正确性证明

来自<Writing Solid Code>的一则小故事,Donald Knuth在其著名的排版软件TEX的封面上写到:"I believe that the final bug in TEX was discovered and removed on November 27, 1985. But if, somehow, an error still lurks in the code, I shall gladly pay a finder 's fee of $20.48 to

程序员修炼之路-(2)线性表(上):数组与链表

1 两块基石 数组与链表构成各种数据结构的基石,是实现所有数据结构必不可少的元素. 1.1 数组 数组一般内置于编程语言中,直接通过索引(index)读写.索引一般为数字,有的语言甚至直接支持如字符串等其他类型的索引.在很多数据结构中都能看到数组的身影,例如字符串.动态数组.堆.栈和队列(用链表也可以,但用数组实现很高效)等. 1.2 链表 概念上都能理解,但实现起来还真有很多容易出错的地方. 实现细节 ?  表头(header):为什么要添加一个表头?因为有了表头,在第一个结点前添加结点或删除

程序员修炼之路-(3)排序(上):基本排序

1 基本排序 对于所有排序算法,被排序元素需要满足下列数学性质: ?  自反性(reflextive):for all v,v=v ?  对称性(antisymmetric):for all v and w,if v<w then w>v and if v=w then w=v ?  传递性(transitive):for all v,w and x,if v<=w and w<=x then v<=x 对于包含这样元素的数组,我们才能对其排序. 1.1 选择排序(selec

程序员修炼之路-(2)线性表(下):栈、队列

2 基础数据结构 数组和链表是实现各种数据结构的基石,本节中的三种最基本的数据结构都可以用数组或者链表来实现. 2.1 栈 用数组实现"栈"非常简单.下面以C++为例,实现一个简单的固定大小的"栈". 首先,接口API定义如下,核心函数就是push()和pop(): 2.1.1 数组实现 下面用数组方式的实现"栈",当然也可以用链表实现数组,但是一般尽管栈会处理很多操作,但任意时刻保存在栈中的元素不会很多,所以使用数组实现比链表会更加高效: Lo

程序员修炼之路-(4)搜索(中):二叉查找树

2 查找:鱼与熊掌 前面已经介绍了线程查找和二分查找的符号表(symbol table)实现,但现代应用的特点是查找与插入或删除操作交叉在一起,无法预测,并且表非常巨大.因此问题的关键就是我们能否设计出具有对数性能的search和insert/delete操作的数据结构和算法?为了实现高效的插入,我们需要链表结构.但是单链表却又阻止了二分查找的使用,因为二分查找依赖数组的快速访问才能快速定位到每次迭代的中间元素."为了结合二分查找的高效和链表结构的灵活性,我们需要更加复杂的数据结构,这就是接下来

程序员修炼之道---读书随笔1

终于开始读<程序员修炼之道>这本书了,初看这本书的名字,有点以前的道士修炼法术的意思,觉得很是好奇,作为一名程序员,该如何修炼我们自己呢? 这本书涵盖的主题从个人责任.职业发展,直到用于使代码保持灵活.并且易于改编和复用的各种架构技术.利用许多富有娱乐性的奇闻轶事.有思想性的例子 以及有趣的类比,全面阐释了软件开发的许多不同方面的最佳实践和重大陷阱. 编程技术就是程序员的手艺,你的程序就是你的艺术品.时刻关注自己的技艺,保持热情.保持好奇,争取做到富有专长而又多才多艺.有人说过这样一句话:“