⌨️ 编程原理
照着《完全图解编程原理》做的自学笔记 —— 「编程」这两个字背后到底是什么?语言只是工具,这门课讲编程的全貌:软硬件环境与行业职业、编程语言的门派与比较、二进制与数据结构、流程图与算法(排序/查找/大 O)、从设计到测试与面向对象、Web 技术与安全。学了三门语言之后回头看,正合适。Demo 多为动手观察不用装软件,第三章代码示例用 Python 3.13 现场验证。大白话、不跳步骤、必带生活比喻、常见误区、可折叠自测题。
前置课程:C++ 基础(第一门编译语言)、Java 基础(第二门语言)、树莓派(Python 实操)。
内容来自我的 Obsidian 自学笔记 · 全 6 章 103 节完结 ✅
第一章 编程的基础知识
硬件、五大设备、操作系统、应用程序、软件、程序-编程的软硬件环境
六词解剖图=硬件(五大设备:输入/输出/…
桌面应用、网页应用、手机App-程序的执行环境
三大执行环境=桌面(装在本机)/网页(装…
职业程序员、业余程序员、RPA-程序是谁编写的
三类作者=职业(吃饭的)/业余(解决问题…
系统集成商、互联网公司、嵌入式系统商、软件开发商-编程相关行业的区别
四类公司=系统集成商(总包施工方)/互联…
系统工程师、程序员、项目经理、产品经理、测试员-编程相关职业的区别
五种职业一张表=SE(设计图纸)/程序员…
软件工程服务、准委托开发、派遣、承包-程序员的雇佣形式
四种形式(日本特色)=SES/准委托/派…
需求分析、需求定义、设计、开发、测试-软件开发工程
五步流水线=需求分析(问明白)→需求定义…
瀑布式开发、敏捷式开发、螺旋式开发-软件开发的流程
三种流程=瀑布(一级一级下·稳但僵)/敏…
写代码、环境的构建-开发工程中的工作
两种工作=写代码(10%)与环境构建(装…
结对编程、Mob编程、一对一编程-团队开发中使用的方法
三种一起写码的方式=结对(两人一机:司机…
自由软件、免费软件、共享软件、软件商店-发布开发好的程序
四种发布形态=自由软件(四自由·开源)/…
书籍、视频、学校、学习小组-编程该怎么学
四条学习路径=书籍(系统)/视频(跟做)…
第二章 编程语言都有什么不同
源代码、执行文件、编译器、解释器-转换成计算机能处理的格式
CPU 只认机器码;编译器一次翻译到位…
低级编程语言、高级编程语言、跨平台-人和计算机都容易理解的格式
机器码与汇编贴着硬件走;高级语言贴着人走…
编程范式、面向过程型、面向对象型-编程语言的分类
范式是【组织代码的世界观】不是能力高低…
函数型、逻辑型-声明式编程语言
命令式说【怎么做】、声明式说【要什么】…
脚本语言、宏、标记语言-使用简便的编程语言
脚本=宿主程序里的自动化小弟;宏=展开期…
C语言、C++、Java、C#-编程语言的比较1
编译目标四条路=机器码/机器码+面向对象…
Ruby、Python、PHP-编程语言的比较2
三种脚本语言的兴衰对照:Ruby 错失窗…
JavaScript、TypeScript、VBScript、VBA-编程语言的比较3
JavaScript 是唯一被浏览器钦定…
JIT方式、字节码-实现随处运行的能力
字节码=【一次编译、到处运行】的中间形态…
执行环境、开发规模-编程语言的选择方法
选语言四问=跑在哪、多大规模、团队会什么…
标准输入、标准输出、错误输出-输入与输出
三兄弟各走各的管道;stdin/stdo…
编辑器、IDE、RAD-编程开发的环境
记事本到 IDE 到 RAD 的三级台阶…
第三章 数值和数据的处理方法
十进制数、二进制数、十六进制数-了解计算机处理数据的方式
三种进制的换算与由来;十六进制一位顶四位…
逻辑运算、位运算、移位运算-理解二进制数的处理
与或非真值表;按位与或异或取反;左移右移…
四则运算、运算符-理解计算的基础
加减乘除取余;整除与真除两种除法;运算符…
变量、常量-计算机保持记忆
变量是贴了名字的内存盒子;常量是约定不可…
值、代入、比较运算符-与数学中的=的区别
程序里的等号是赋值不是相等;x 等于 x…
保留字、文字、魔法数字-方便读代码的人理解的名字
保留字不能当变量名(Python 35…
整数、整数类型、浮点数、实数类型-用计算机处理数字
整数类型按位宽分档;浮点是 IEEE 7…
数组、静态数组、动态数组、多维数组-集中处理相同类型的数据
同类型数据集中存放;静态定长与动态伸缩…
字符编码、字符串、NULL字符-用计算机处理文字
字符编码是字到数字的字典;ASCII 七…
BIG5、GBK、JIS编码、乱码、Unicode-用计算机处理日文时的注意点
编码割据时代五种方言;乱码的根源;Uni…
结构体、枚举类型-表现复杂的数据结构
结构体把不同类型捆成一包当一张记录卡;枚…
类型转换、自动类型转换、强制类型转换、溢出-实现不同数据类型的处理
自动转换往高精度走;强制转换可能截断;溢…
关联数组、哈希函数-使用名字而不是索引访问数组
字典用键不用下标;哈希函数把键变成桶号…
地址、指针-理解内存结构处理数据
内存是按字节编号的宿舍楼;指针是存地址的…
链表、双向列表、环形列表-理解顺序访问数据的结构
节点加指针串成串、内存不连续;单向双向环…
堆栈(后进先出)、队列(先进先出)-依次处理数据
栈像摞盘子后进先出(函数调用栈);队列像…
树形结构、二叉树、完全二叉树、平衡树-用层次结构处理数据
树是分层的一对多;二叉树每节点最多两个孩…
第四章 流程图与算法
流程图、程序处理的基础-画图理解处理流程
流程图三符号=椭圆起终点、菱形判断、矩形…
条件分支、if、三元运算符-比较数据的大小
if 与 else 分岔路口;三元运算符…
循环-反复执行相同的处理
while 与 for 两种循环;初值条…
函数、步骤、参数、返回值-集中执行一系列的处理
函数=打包的处理机器;参数进、返回值出…
值传递、引用传递、不可变、可变-向函数中传递参数
传复印件还是传房号;Python 可变对…
作用域、全局变量、局部变量-决定变量的有效范围
全局与局部两个世界;局部优先;少用全局变…
递归、尾递归-修改参数的同时反复执行相同的处理
函数调用自己;基线条件与递归条件;栈溢出…
异常、异常处理、除零运算-应对预料之外的问题
try 与 except 的保险机制;除…
迭代器-使用迭代处理
迭代器=按需逐个吐数据的对象;for 的…
内存泄露、垃圾回收-释放无用的内存
内存泄露=房子不还;垃圾回收=自动收房…
排序、选择排序、插入排序-学习基本的排序
选择排序每轮挑最小;插入排序像理扑克牌…
冒泡排序、摇晃排序-了解容易实现的排序方法
冒泡相邻交换大数沉底;摇晃排序(鸡尾酒/…
合并排序、快速排序-排序的高速化实现
分治思想;归并稳定 O(n log n)…
时间复杂度、大O表示法-估算完成处理所需的时间
大 O 只看量级不看常数;常见档位一张表…
线性查找、二分查找-从数组和列表中查找需要的值
线性 O(n) 什么都行;二分 O(lo…
广度优先查找、深度优先查找、剪枝-在遍历树形结构中查找
BFS 层层扩散用队列找最短;DFS 一…
字符串查找、蛮力法、BM算法-在字符串中查找其他字符串
蛮力逐位比 O(n 乘 m);BM 坏字…
第五章 从设计到测试
注释、缩进、嵌套-编写可读性高的代码
代码是写给人看的;注释说为什么不说是什么…
命名规则、代码编写规范-确定编写代码的规则
命名规范 snake_case came…
单元测试、集成测试-排除程序实现中的问题
单元测零件集成测组装;pytest;测试…
系统测试、验收测试-确认程序实现是否满足需求
系统测整体验收测需求;V 模型左右对应…
黑盒测试、白盒测试、覆盖率-了解测试的方法
黑盒看输入输出白盒看内部路径;行覆盖分支…
等价划分、边值分析-学习黑盒测试的技巧
等价类每档取一个代表;边界最易错取点在…
Bug、调试、调试器、BTS-发现问题并进行管理
复现最小化定位;print 断点调试器三…
检查、静态分析、软件指标-在不执行程序的情况下验证
评审走查;静态分析不跑代码找毛病;圈复杂…
软件生命周期、DevOps-思考从软件规划到结束使用的问题
瀑布迭代螺旋敏捷;DevOps 打破开发…
CI、CD-自动化软件的开发流程
持续集成每日合并自动构建测试;持续交付与…
重构-在不改变程序行为的前提下整理代码
重构有测试保平安;小步快走;坏味道与常用…
测试驱动开发、测试优先、XP-以自动测试为前提推进开发
红绿重构三拍子;测试先行倒逼设计;XP…
E-R图、DFD图-将数据结构和流程可视化
E-R 图画数据关系;DFD 画数据流向…
构建、make、Ant-编译自动化
构建不只编译;make 依赖时间戳;现代…
类、实例、对象-了解面向对象的基本概念
类是图纸对象是产品;属性加方法;三大特性…
继承、子类、多重继承-继承类的属性
继承复用扩展;重写;多重继承 MRO;组…
字段、方法、属性-处理组成类的数据和操作
字段存状态方法做动作;property…
封装化、访问修饰符-只对外公开必要的信息和步骤
封装藏细节公开接口;public pri…
多态、接口-创建相同名字的方法
同一接口不同实现;鸭子类型;接口是契约
UML、设计模式-面向对象开发中使用的建模方法
UML 常用图;GoF 23 模式三分类…
相关性、泛化、聚合、组合-考虑多个对象之间的关系
依赖关联聚合组合由弱到强;is-a 与…
命名空间、模块、软件包-将相关的类集中在一起
命名空间防重名;模块是文件包是目录;im…
AOP面向切面编程、DI依赖注入-解决面向对象中难以解决的问题
横切关注点分离日志事务;DI 反转控制解…
DDD、值对象-使用客户和开发者的通用语言
通用语言统一说话;限界上下文;值对象不可…
构造函数、析构函数-对象的初始化和释放
__init__ 初始化 __del__…
WBS、EVM-管理开发进度
WBS 拆到可交付可估计;EVM 三值四…
第六章 Web技术与安全
HTML、HTTP-了解Web基础知识
HTML 是骨架 HTTP 是搬运工;请…
库、DLL、SDK、框架-软件开发中所需功能的集合体
库是工具箱框架是毛坯房;静态动态链接;控…
CSS、CSS框架-更改Web网站的设计
内容与样式分离;选择器三件套;Boots…
Cookie、会话-识别同一个用户
HTTP 无状态;Cookie 存浏览器…
静态Web网站、动态Web网站、CGI-在互联网上提供服务
静态照本宣科动态见人下菜;CGI 开进程…
MVC、MVVM-划分GUI应用的功能
MVC 三权分立;MVVM 数据绑定;前…
DOM、Ajax-操作HTML的元素
DOM 是树;Ajax 局部刷新不换页…
jQuery、虚拟DOM-在Web浏览器中轻松实现动态控制
jQuery 66.5% 仍在役;虚拟…
CSV、XML、JSON、YAML-Web中常用的数据格式
四种格式一张表;JSON 成 Web 标…
SQL、DBMS-用统一的方式处理数据
SQL 声明式;DBMS 管数据;SQL…
并发控制、独占控制、事务、死锁-确保数据一致性的技术
锁与事务两路防线;死锁四条件;统一加锁顺…
租赁服务器、VPS-租用服务器提供服务
自管共用专有三级;VPS 虚拟化切分;树…
SaaS、PaaS、IaaS-云计算服务
披萨比喻三层责任;管到哪一层是分界
虚拟机、Docker、Vagrant-用软件实现的硬件
虚拟机带内核重;容器共享内核轻;镜像分层
API、系统调用、混搭-调用操作系统和其他应用软件的功能
API 是窗口;系统调用是大门;混搭拼服…
Git、GitHub、Subversion-了解版本管理系统
集中式 vs 分布式;快照非差异;分支便…
开源软件、许可协议-免费公开的源代码
自由不等于免费;copyleft 与宽松…
逆向工程、反汇编器、反编译器-还原其他人的软件
编译单向不可逆;汇编级还原;边界在许可证
漏洞、安全漏洞、缓冲区溢出-了解安全漏洞
漏洞三类;栈溢出覆盖返回地址;供应链事件