1. 软件开发全貌 (Where Are We Now?)
1.1 软件开发的三阶段七环节
软件开发不仅仅是写代码,它是一个严谨的工程过程。
- 计划阶段:问题定义 $\rightarrow$ 可行性分析。
- 开发阶段(重点):需求分析 $\rightarrow$ 系统设计 $\rightarrow$ 开发(Coding) $\rightarrow$ 测试。
- 运行阶段:运维。
1.2 核心角色与分工
在一个成熟的开发团队(如使用 RUP 统一过程)中,各司其职:
- 产品经理 (PM):负责策划与需求。
- 交互/视觉设计师:负责用户体验与界面设计。
- 前端/后端工程师:负责代码实现(我们目前所处的角色)。
- 测试工程师 (QA):负责质量保证。
2. 程序员的进阶之路 (Career Roadmap)
2.1 进阶金字塔
PPT中将程序员分为四个核心阶段,重点在于能力的跃迁:
- 新手:核心是执行力。按部就班完成明确的任务。
- 进阶:核心是设计能力。能独立拆解问题,设计解决方案。
- 高手:核心是融会贯通(架构师)。预判未来,权衡技术演进与需求。
- 大神:核心是沉淀方法论。开创领域(如 Linux 之父 Linus, Unix 之父 Ken Thompson)。
2.2 核心素养:逻辑思维 (Logical Thinking)
- 定义:正确、合理思考的能力。包括观察、分析、抽象、推理。
- 乔布斯名言:“每个人都应该学习编程,因为它教你如何思考。”
3. 编程语言概论 (Programming Languages)
3.1 语言的演变(三大类)
这是编程史的常考点,理解抽象程度的提升过程:
- 机器语言(石器时代):硬件直接识别的二进制指令 (0/1)。难读难写。
- 汇编语言(农业社会):使用助记符(如
ADD,MOV)代替二进制。抽象度低,需关注底层硬件。 - 高级语言(服务型社会):屏蔽机器细节,接近自然语言,抽象度高。
3.2 高级语言的分类
- 面向过程 (Procedural):
- 核心:结构化,自顶向下,逐步求精。
- 代表:C语言, Fortran。
- 重点:利用顺序、选择、循环三种基本结构解决问题。
- 面向对象 (Object-Oriented):
- 核心:类 (Class)、对象 (Object)、继承、多态。更贴近客观世界。
- 代表:Java, C++, Python, C#。
- 面向交互 (Interaction-Oriented):
- 核心:强调内容呈现与用户体验,多用于 Web/移动端。
- 代表:HTML/CSS, JavaScript, PHP。
4. 语言特性与开发工具 (Features & Tools)
4.1 主流语言对比(了解即可)
- C/C++:效率极高,底层开发首选,但指针和内存管理复杂。
- Java:跨平台(JVM),生态完善,企业级应用首选。
- Python:解释型,简洁易读,AI与数据分析首选(注意:缩进是语法的一部分)。
- Web系 (PHP/JSP/ASP):服务器端脚本,用于生成动态网页。
4.2 “工欲善其事,必先利其器”
- 编辑器:Sublime Text, VS Code(轻量级)。
- IDE (集成开发环境):Eclipse, Visual Studio(功能强大,集成调试/构建)。
- 调试神器:浏览器 F12 开发者工具(Web开发必备)。
5. 编程基础 (Programming Basics) —— 考试重难点
5.1 数据存储基础
- 二进制:计算机物理实现的必然选择(高低电平 $\rightarrow$ 1/0)。
- 存储单位换算:
- 位 (bit):最小单位。
- 字节 (Byte):1 Byte = 8 bits。
- 换算坑点:计算机内部按 1024 (2^10) 进位,而硬盘厂商通常按 1000 进位。这就是为什么买的 1TB 硬盘实际只有约 931GB 的原因。
5.2 变量与常量
- 常量 (const):程序运行期间不可改变的数据(如
1,'A',3.14)。 - 变量 (variable):先声明,后使用。类型 + 名称(如
int a;)。
5.3 基本数据类型
- 整型 (Integer):
int,short,long。- Signed vs Unsigned:
signed(默认)有正负,unsigned无符号(只能表示非负数,但范围扩大一倍)。
- 字符型 (Character):
char。- ASCII 码表(必背):
'0'-'9','A'-'Z','a'-'z'的顺序。C99标准开始,字符也是一种整数。
- 浮点型 (Float Point):
float(单精度),double(双精度)。- 精度陷阱:浮点数存储是近似值(如 123.456789 可能会存成 123.456787),比较大小时不能直接用
==。
5.4 运算符与表达式(易错点)
- 算术运算符:
+,-,*,/,%。- 除法坑点:整数除以整数结果还是整数(截断小数)。例:
5/2结果是2,而不是2.5。要得到2.5需写成5.0/2。 - 取模坑点:
%左右两边必须是整数。
- 除法坑点:整数除以整数结果还是整数(截断小数)。例:
- 赋值运算符:
=,+=,-=等。- 截断与溢出:将大范围数赋值给小范围变量(如
int赋给short)会发生数据丢失(截断)。
- 截断与溢出:将大范围数赋值给小范围变量(如
- 自增/自减:
++,--。i++(后置):先使用 i 的值,再 +1。++i(前置):先 +1,再使用 i 的值。
- 逻辑运算符:
&&(与),||(或),!(非)。- 短路特性(重要考点):
a && b:如果 a 为假,b 不会被执行。a || b:如果 a 为真,b 不会被执行。
- 位运算符:
&,|,^(异或),~(取反),<<,>>。直接对二进制位操作。
5.5 关系运算符的“天坑”
==vs=:==是判断相等。=是赋值。- 经典Bug:
if (a = 4)永远为真(除非赋0),且改变了 a 的值。请务必区分!
5.6 三大基本控制结构
任何复杂的程序都可以由这三种结构组合而成(Dijkstra 理论):
- 顺序结构:按代码书写顺序执行。
- 选择结构:
if,switch。 - 循环结构:
for,while,do-while。
6. 编码风格与规范 (Styles & Guidelines)
6.1 为什么风格很重要?
- 代码是写给人看的,顺便给机器运行。
- 规范的代码能减少 Bug,提高维护性(团队协作基础)。
6.2 核心原则
- 清晰第一:不要为了微小的效率牺牲清晰度。
- 简单即快:Keep it simple to make it faster.
- 先对后快:Make it right before you make it faster.
6.3 命名与格式
- 使用有意义的变量名(避免
a,b,c满天飞)。 - 合理的缩进与空格。
- IOCCC大赛:那是反面教材(混乱代码大赛),工作中千万别学!