我的自学编程之路!
共 6972字,需浏览 14分钟
· 2021-10-13
大家好,我是写代码的篮球球痴
昨晚上打车回家,接我的滴滴司机是一个年纪比较大的大姐,她说她儿子毕业了,但是找不到好的工作,就报名参加了编程培训,培训费两万多。我就问,那谁给他学费,大姐说,我这不就是因为这个开滴滴了吗,开滴滴可以直接拿到现钱,等他两个月后学完了,我也不想干这个了。每天开滴滴累得半死,一个月也就几千块钱。
我想说,既然读了大学,就应该好好利用自己的时间来学习,毕业后参加培训,是能学到一些东西,但是想让自己在某个方面有深度,一定还是要靠自己。
下面的这篇文章中提到的很多入门书籍和链接,我觉得对大家非常有用。如果喜欢学习编程,可以收藏起来。
纯编程和嵌入式是有不同的,嵌入式还需要动手能力,下面的书籍中并没有涉及驱动的书籍,不过想从事内核和驱动开发,这些知识点也会是加分项。
------
怎么算入门,我觉得可以入手做一些项目就算入门了。
需要掌握至少一门编程语言,例如,C/C++或者 Java; 需要学习数据结构与算法,至少掌握常见的数据结构与算法; 需要学习数据库知识,因为做项目几乎离不开数据库,数据库必须掌握; 掌握一门技能,例如后端开发、web 开发、移动端开发、人工智能等;
当然还需要进一步精进,可以学习操作系统,计算机网络,计算机组织原理、汇编等相关专业课程。
C语言
刚开始就是泡书,然后就是抄代码,上机调试,模仿修改,看 n 遍,量变引起质变就会培养出编程思维!!!
书
![](https://filescdn.proginn.com/f02e1082f6d74ea0217af628df79c1d1/2f75179265266def30fd87fd71284be6.webp)
第一本书《C程序设计语言》,机械工业出版社,作者Brian W. Kernighan / (美)Dennis M. Ritchie。C 语言之父写的,入门经典书籍,建议大家作为 C语言入门的第一本书。
![](https://filescdn.proginn.com/5d7c0181d1da0a924647b4a7dba92b23/473a56decf2f812ac541f5c53907b040.webp)
《C Primer Plus》 ,人民邮电出版社,作者 Stephen Prata。可以作为 C 语言工具书,也可以作为入门,内容循序渐进,能够锻炼编程思想。
![](https://filescdn.proginn.com/aefb513bb34a0faa4b05bde4ccd2048f/6c28f7753eb1c5aadea8f937399699e2.webp)
《C和指针》 深入了解指针,看完以后对指针不再害怕。
![](https://filescdn.proginn.com/431736ab2d542d88121d60324f768701/569f715d7295e4b38032d9b486c3440c.webp)
《C陷阱与缺陷》 正如书上所说,“本书所揭示的知识,至少能够帮助你减少 C 代码和初级 C++ 代码中 90% 的 Bug”,看完后可以避免 C 语言开发的一些坑。
C语言入门视频:
《郝斌C语言自学教程》
![](https://filescdn.proginn.com/53dbfc8d9439c5807715ed5d74113bf6/d2d241091f9ba05fccc7d8689722147d.webp)
https://www.bilibili.com/video/BV1os411h77o?from=search&seid=15026475169248378667
《程序设计入门——C语言》(浙大翁恺)
![](https://filescdn.proginn.com/558f7aac2509539c8f86e92a508f3588/1708a5d1473ee5c5dee9cd8e5ff7be6e.webp)
https://www.bilibili.com/video/BV1ME411h75N?p=45
Windows开发
![](https://filescdn.proginn.com/4e3254747bf8963999132e70ff02d503/6b24d558e467f1131165336c0d62464c.webp)
《Windows程序设计(第5版 珍藏版)》这本书其实是工作后做项目的时候才开始看的,这本书主要介绍 Window 系统桌面软件的开发,作为 Windows 开发人员的必备参考,涵盖基础知识和中高级主题,全面地介绍了 Windows 程序设计所涉及的细枝末节,想了解和从事这方面开发的同学可以看看。
看过这本书,你会对你电脑上用到的软件有一个更深的体会。窗口是怎么出来,菜单点击后是怎么处理的,动画是怎么绘制的,软件又是怎么和操作系统通信的,看完这本书你通通都会知道。
Linux
![](https://filescdn.proginn.com/28e36ff703f5618944f8eea1ac408bb0/0d03eb85918828b4721587940b9c6bad.webp)
《Linux程序设计》是我的 Linux 编程入门书籍。本书以简单易懂、内容全面和示例丰富而受到广泛好评。
![](https://filescdn.proginn.com/f59814d6f5d13801416349ab6c5d10a6/f049586ce6b9815dd828a2c0acface1f.webp)
《鸟哥的Linux私房菜》,也是 Linux 入门书籍。是中国人写的,是一个中国人真正了解了这个系统,然后按照中国人的思维习惯写出来的书,所以容易理解。
C++
C语言->C with class -> C++;
由C++的演变可以看出来,C++ 刚开始就是带类的 C 语言,C 语言和 C++ 的关系到底是什么呢?
看过侯捷老师的视频或者《Effective C++》这本书就知道,现如今我们提到 C++,都应该视其为一个庞大的「语言联邦」,最起码包含如下几个重要的组成部分:
面向过程编程 面向对象编程 泛型编程 元编程 函数式编程 STL标准库
其中「面向过程编程」,正是 C++ 提供的向后兼容 C语言的部分。
C++演化(C++ 98 ->C++ 03 -> C++ 11 -> C++ 14 -> C++20 -> ..... )
C++ 由 C++ 语言和标准库构成,随着演变,C++ 语言越来越复杂,标准库就尤其重要,因为使用标准库才更有生产力!
书
![](https://filescdn.proginn.com/b62ce90c327cf266ef603fa8ef4e0643/d22d45da894ce7c5f5a79509a502a24d.webp)
《C++ Primer中文版》本书面向 C++ 语言的初学者,是一本很友好的自学教材。作者把 C 语言的基础概念和需要注意的编程细节说得很清楚,并且例程和习题丰富,相信认真读过之后,可以完成 C 语言入门这个目标。
![](https://filescdn.proginn.com/5479e8f3e923fb626880413e66ffb0af/961ec0f0b9ef25d498b4753a1c2214df.webp)
《高质量程序设计指南》,墙裂推荐,这本书看得比较过瘾,书里面有一些编程规范的东西,对于写程序的人来说,还是不错的,可以培养好的编码习惯,加深了一些知识的巩固。比较实用,也适合面试前看看。
![](https://filescdn.proginn.com/0ee07625cf431a264d1aeaf80c78a611/f7ced7624b7bb4cf46eeb65a335ff76d.webp)
《Essential C++中文版》是一本内容不多但很实用的 C++ 入门书籍,强调快速上手与理解 C++ 编程。本书主要围绕一系列逐渐复杂的程序问题,以及用以解决这些问题的语言特性展开讲解。你不只学到 C++ 的函数和结构,也会学习到它们的设计目的和基本原理。
![](https://filescdn.proginn.com/a1f0b94f949177320a733dc44deef089/c819cdcd147746e482f0689f9be058be.webp)
《More Effective C++(中文版)》,该书围绕55条准则,每一条都介绍了一个可让你写出更好的C++程序代码的方法,并以特别设计过的例子详加讨论。
![](https://filescdn.proginn.com/370db6679ffad512438fe95c5fe20165/d508857ada33344fbb66dce31d05ee9f.webp)
《提高C++性能的编程技术》,本书认为 20% 的性能缺陷将会占用我们 80% 的时间。因此我们把精力集中在最有价值的地方。本书详细讨论了临时对象、内存管理、继承、虚函数、内联、引用计数以及 STL 等一切有可能提升 C++ 效率的细节内容。无论你是相关领域的从业人员,还是 C++ 程序设计爱好者,或者是渴望突破编程瓶颈、大幅提升自我修为的程序设计爱好者,本书都必将使你获益良多。
![](https://filescdn.proginn.com/5f712b5392590ddb7d3fe1a7ddff8bcf/12e26f895553cf67edbe49b05728cc9e.webp)
《从缺陷中学习C/C++》从本质上来说,这就是一个 C/C++ 的错题集。全书中包括 63 个问题引发的错误,即书名中的缺陷。也是避坑指南。
![](https://filescdn.proginn.com/7f189d5f1711f29b064df1b00c02b336/2916b6bae8018991a24f022532615721.webp)
《C++ Templates中文版》,深入了解现代 c++ 模板的实用书籍。本书不仅是对 C++ 模板的权威解释,而且本书还深入地介绍了其他一般的 C++ 思想。
![](https://filescdn.proginn.com/47f6cf7b9085316b5935001edd8bf3b8/eb8d98424ce8f370fbde72eb0a190cb6.webp)
《STL源码剖析》详细地了解 STL 的底层实现机制,同时也可以对常用数据结构,C++ 内存管理拥有更深的理解。
其实还有《C++标准库(第2版)》、《C++并发编程实战》、《C++编程思想(两卷合订本)》等,介绍的这些书我都买了,不过说实话,后面的几本都是泛泛的看了下,当作工具书。
视频
清华大学-郑莉-C++语言程序设计(基础篇)
![](https://filescdn.proginn.com/23fa1e42787753bdd2b09223f727923f/7cea6ba9a9324b2c6a02683d98ad64f1.webp)
https://www.bilibili.com/video/BV1PA411b75a?p=92
侯捷老师的八部曲:
![](https://filescdn.proginn.com/655ab9c8f96304692eb6a69ca4f248ed/3b8e36559ee27be1b5d40720e0e0d051.webp)
https://github.com/tangtangcoding/C-C-
QT视频教程:
![](https://filescdn.proginn.com/bea583a1daf9c2fc21652eded465719c/607d9863f0589fadccd6a54bb5cfe92e.webp)
https://www.bilibili.com/video/BV1jK4y1m7d4
数据结构与算法
书
比较系统地学习数据结构的话,推荐看《大话数据结构》、《算法(第4版)》和《数据结构与算法分析》。
![](https://filescdn.proginn.com/8b9f664acabd42a264f57e7b3c4b16cf/ccf3d9c6b69c66f6aabd029667555521.webp)
![](https://filescdn.proginn.com/a94ea28fde07659feda5e41c34383544/ba3c7d5d91551cda95f1f3a479c2cfd7.webp)
![](https://filescdn.proginn.com/b9374bd03f5c87f4751f545a79aa07d5/6a7ce21ef8d2046700f0c730c73c9a2a.webp)
如果刚接触数据结构的话,可以从《算法图解》、《我的第一本算法书》入手。
![](https://filescdn.proginn.com/9817e0fa5ee1c19963d97759ddad1987/b5789d9a721a728a142fe380e0be6e6e.webp)
![](https://filescdn.proginn.com/e0ccb424ada782689e65a830900fcfcf/ac199156fb9f2efbc7f5d4f55e5b2808.webp)
视频
郝斌数据结构
虽然比较老,但是讲的比较详细,容易理解,对初学者非常友好。
![](https://filescdn.proginn.com/b221f462ae3ff64ed3de24210be8b12a/2d51518640e24c2209a95f9084a407d0.webp)
https://www.bilibili.com/video/BV1Ut411a7rN?from=search&seid=14411767501116137153
数据结构-浙江大学
课程是由陈越与何钦铭共同录制,b站与慕课网都有,慕课网比较清晰一些
https://www.icourse163.org/course/ZJU-93001?from=searchPage#/info
数据结构与算法基础
课程由青岛大学王卓老师录制,非常适合考研,讲的题比较多。
![](https://filescdn.proginn.com/914f8ba63139de9eb4ac3f3d15d91a16/a3b747661285378129731ae07af0caf1.webp)
https://www.bilibili.com/video/BV1nJ411V7bd?p=1
多动手
动手去做,动手去做,动手去做。重要的话说三遍。
动手包括撸码,还包括"多画"
要边学习边画图。因为对于数据结构中的存储结构来说,尤其是树结构和图结构,存储结构确实比较复杂,仅靠空间想象难免会有披露,而通过亲手画图往往能避免很多“坑”,后面关于数据结构与算法的文章中,我也会加入一些动图。
把数据结构图形化,视觉化。在直觉上感受一个数据结构是什么样子的。使用它是什么感觉,抽象上和具体实现上是什么样子的。这就是最重要的事情。并且无论是对于简单的队列、栈还是平衡树都很重要而且有效。
把数据结构画出来,在你的脑袋瓜里面就能想象出来,总之,你需要做的就是,直观的去了解这些数据结构。
在学习某些算法时,也可以借助画图来加深自己的理解。可以边阅读代码边画图,这样可以更快理清代码的实现逻辑。
在通过“多画”实现理解存储结构和实现逻辑的基础上,初学者还要“多撸码”编写实现代码。对于某一种存储结构或者算法,没有 3 遍以上自己独立的实现过程,是很难做到融会贯通的。
另外,可以在leetcode和牛客网多刷题。
计算机网络
书
![](https://filescdn.proginn.com/c0dd8d8a236b26abc4feddb4b05fdbdd/b590157f666e7147db7f490de517a997.webp)
堪称 TCP/IP 领域的圣经。作者 W. Richard Stevens,他从使用者(程序员)的角度,以 tcpdump 为工具,对 TCP 协议抽丝剥茧娓娓道来,让人叹服。恐怕 TCP 协议的设计者也难以讲解得如此出色,至少不会像他这么耐心细致地画几百幅收发 package 的时序图。
![](https://filescdn.proginn.com/fe04fff5872cf56469663b01be296846/dece46cf2b1bf315dd905ddce348c10c.webp)
经典书籍,着重看TCP/UDP部分。
视频
计算机网络微课堂
![](https://filescdn.proginn.com/cc614ef12b8290ad6b7dee868160dc09/8abaf019fc374ee5e842bc819470c55c.webp)
https://www.bilibili.com/video/BV1c4411d7jb?p=1
韩立刚计算机网络 谢希仁 第7版
![](https://filescdn.proginn.com/cdfe663cd086e970b791d3bb9a031877/08874701a235e8aa2aa53071b25b35de.webp)
https://www.bilibili.com/video/BV1gV411h7r7?p=1
数据库
书
![](https://filescdn.proginn.com/9f83af81e7e88a8151caf9ece0a34b16/33638cb4a66d39ddf6a0bf42df96cfd7.webp)
入门书籍,书中从介绍简单的数据检索开始,逐步深入一些复杂的内容,包括联结的使用、子查询、正则表达式和基于全文本的搜索、存储过程、游标、触发器、表约束等等。
![](https://filescdn.proginn.com/6c9362d7dd99e1fd45116f0719896926/b9d0d1446df261e6f93ed7c68b4a2f56.webp)
进阶书籍,mysql 领域的经典之作。不但适合数据库管理员(dba)阅读,也适合开发人员参考学习。不管是数据库新手还是专家,相信都能从本书有所收获。
![](https://filescdn.proginn.com/f549dab5b5a6da9d6c14074838d64626/9cbb96add3c0c536b2282dc57273118b.webp)
升华书籍,详细讲解了 InnoDB 存储引擎内部的各个功能模块的实现原理,对大家阅读和理解 InnoDB 的源代码有重要的指导意义。适合所有希望构建和管理高性能、高可用性的 MySQL 数据库系统的开发者和 DBA 阅读。
其他书籍:
《数据库系统实现》、《Redis设计与实现》。
视频
MySQL_基础+高级篇- 数据库 -sql -mysql教程_mysql视频_mysql入门_尚硅谷
![](https://filescdn.proginn.com/d9434bd950bdd731814052af3aa70f17/6a79d8c3942cbe413d6f9fa6bdbc8665.webp)
https://www.bilibili.com/video/BV12b411K7Zu?from=search&seid=2779357081480449466
计算机组成原理
书
![](https://filescdn.proginn.com/5a93d9fc552352eee901c7b8c3ec2e22/0e2fabd2c878836be0b36870c991e058.webp)
这是一本很深入和方向性的书,每个 CS 学子都应该去读,它会告诉你,要想成为一个优秀的程序员,你应当重点理解哪些计算机底层原理。
其他书籍:
《计算机组成原理与设计》。
视频
计算机组成原理 清华大学刘卫东 全58讲 国家精品课程
![](https://filescdn.proginn.com/671ddd4e2793e1b30b2432c0822f9ecc/76de1fb07d00c76af5472b10dec4c5d3.webp)
https://www.bilibili.com/video/BV1c4411w7nd?p=1
计算机组成原理(哈工大刘宏伟)135讲(全)高清
https://www.bilibili.com/video/BV1t4411e7LH?p=1
操作系统
书
![](https://filescdn.proginn.com/ad9c809d5aad2381673d78a185e5e0b3/25379fc49633611a9b2cfe5c91dc463e.webp)
本书是操作系统领域的经典之作,讲的全面详细,包括进程、线程、存储管理、文件系统、I/O、死锁、接口设计、多媒体、性能权衡,以及有关操作系统设计的最新趋势。不仅涵盖了现代操作系统的原理和实践,而且特别关注了Linux操作系统、Windows Vista操作系统、嵌入式操作系统、实时操作系统以及多媒体操作系统。所以也是面试笔试操作系统的宝典。
其他书籍:
《操作系统真象还原》、《30天自制操作系统》。
视频
操作系统(哈工大李治军老师)32讲(全)超清
![](https://filescdn.proginn.com/cb7ff4369b67d42542935c150a40334f/9188f333c21e6d0e498c031ee959fec4.webp)
https://www.bilibili.com/video/BV1d4411v7u7?p=1
2020 南京大学 “操作系统:设计与实现” (蒋炎岩)
![](https://filescdn.proginn.com/f22575a9bb7c36f01c310f3b1b76da38/d0d58bde3fcce929280e924e9ade9bb9.webp)
https://www.bilibili.com/video/BV1N741177F5?p=1
网络编程
刚工作的时候第一个项目就是物联网后台服务器软件,网络上也有类似的网络服务程序,比如即时聊天软件的后台服务器,网游服务器,金融交易系统,互联网企业用的分布式海量存储,微博发帖的内部广播通知等等。当然在嵌入式系统上也有移植或维护 TCP/IP 协议栈等等。
熟悉掌握一些网络模型,例如 WINDOWS 系统下使用的 IOCP。Linux系统下使用的 Epoll、select、poll模型。 熟悉一些通用库例如 ocket Server,RPC Framework 内存管理。重载new/delete,内存池,对象池的处理。 内存泄露检测,内存访问越界警惕,内存碎片的回收。 预分配池减少切换和调度,预处理的线程池和连接池,例如数据库连接池等。 多进程编程、多线程编程 五大 IO 模型:同步、异步、阻塞、非阻塞、信号驱动 进程间通信方式:信号量、管道、共享内存、socket 等 线程安全问题,锁处理、临界资源 负载均衡理念,数据的提前准备和即时计算,如果有耗时的业务可以考虑微服务,负载均衡。 定时器、心跳、定时检查死链接等等
书
有网络和操作系统的基础很重要。
![](https://filescdn.proginn.com/091402fd40cd96ddc76e6c95d6aff79d/18f2cc6c008f42688ec14c4dec09f3ab.webp)
非常适合初学者学习的,对网络编程的讲解清晰直白,完全适合新手入门,写出了网络编程的每一个步骤。
![](https://filescdn.proginn.com/e6764580655885bb0a269811b45e2981/7f7bb85030bd35791f4f392410d1a5e8.webp)
![](https://filescdn.proginn.com/5de5d03bc66c887de493b69afde5b0e4/c342f2f0f74feb3059c5dc26e51a547a.webp)
学习Unix必备的经典书籍,重要章节看看,可以当工具书使用。
![](https://filescdn.proginn.com/4a8ac404025f9fbf824f7d7f0ca5d20f/b6811f0e78a9f97cdad595c65dea947d.webp)
进程控制 ,线程控制,进程环境,进程通信 讲得尤为精彩,网络部分讲得比较浅,但也够用。整本书可以说涵盖了Linux的方方面面,面面俱到,甚至很细。
![](https://filescdn.proginn.com/8dc0021c60bfd5b19680d1e5dc9e1cc5/1d81b6dabbb30473683f17212139b6e3.webp)
本书是 Linux 服务器编程领域的经典著作,从网络协议 TCP/IP、服务器编程核心要素,Linux 网络编程 API、高级 I/O 函数、Linux 服务器程序规范、高性能服务器程序框架、I/O 复用、信号、定时器、高性能 I/O 框架库 Libevent、多进程编程、多线程编程、进程池和线程池等内容等多角度全面阐释了编写高性能 Linux 服务器应用的方法、技巧和思想。还包含两个综合性案例,从实战的角度讲解了高性能服务器的优化、系统监测工具的使用等内容。
![](https://filescdn.proginn.com/8e06d27454882b29a0e4373f8533edb2/f83f7c45184ca2050352f5d81d485d7f.webp)
本书是陈硕大佬的作品,重点讲解一种适应性较强的多线程服务器的编程模型,即 one loop per thread。这是在 Linux 下以 native 语言编写用户态高性能网络程序最成熟的模式,掌握之后可顺利地开发各类常见的服务端网络应用程序。本书以 muduo 网络库为例,讲解这种编程模型的使用方法及注意事项。
视频&源码
推荐陈硕大佬的《Linux CC++网络编程实践》以及开源的库 muduo
https://github.com/tangtangcoding/C-C- https://github.com/chenshuo/muduo
libevent 是一个轻量级的基于 event 回调机制的网络编程库,可以支持 Linux、Solaris、Windows 等系统,它本身是用 C 语言写的,比较适合入门级的阅读。
https://github.com/libevent/libevent
Asio 是 boost 里的网络编程库,是用 C++ 语言写的。里面用了很多 boost 的数据结构和技巧,包括大量模板的使用,有一定的语言难度。
https://www.boost.org/doc/libs/1_75_0/doc/html/boost_asio.html
-END-
我是写代码的篮球球痴,一个在腾讯写代码的农民工!