1. 软件开发全貌 (Where Are We Now?)

1.1 软件开发的三阶段七环节

软件开发不仅仅是写代码,它是一个严谨的工程过程。

  • 计划阶段:问题定义 $\rightarrow$ 可行性分析。
  • 开发阶段重点):需求分析 $\rightarrow$ 系统设计 $\rightarrow$ 开发(Coding) $\rightarrow$ 测试。
  • 运行阶段:运维。

1.2 核心角色与分工

在一个成熟的开发团队(如使用 RUP 统一过程)中,各司其职:

  • 产品经理 (PM):负责策划与需求。
  • 交互/视觉设计师:负责用户体验与界面设计。
  • 前端/后端工程师:负责代码实现(我们目前所处的角色)。
  • 测试工程师 (QA):负责质量保证。

2. 程序员的进阶之路 (Career Roadmap)

2.1 进阶金字塔

PPT中将程序员分为四个核心阶段,重点在于能力的跃迁

  1. 新手:核心是执行力。按部就班完成明确的任务。
  2. 进阶:核心是设计能力。能独立拆解问题,设计解决方案。
  3. 高手:核心是融会贯通(架构师)。预判未来,权衡技术演进与需求。
  4. 大神:核心是沉淀方法论。开创领域(如 Linux 之父 Linus, Unix 之父 Ken Thompson)。

2.2 核心素养:逻辑思维 (Logical Thinking)

  • 定义:正确、合理思考的能力。包括观察、分析、抽象、推理。
  • 乔布斯名言“每个人都应该学习编程,因为它教你如何思考。”

3. 编程语言概论 (Programming Languages)

3.1 语言的演变(三大类)

这是编程史的常考点,理解抽象程度的提升过程:

  1. 机器语言(石器时代):硬件直接识别的二进制指令 (0/1)。难读难写。
  2. 汇编语言(农业社会):使用助记符(如 ADD, MOV)代替二进制。抽象度低,需关注底层硬件。
  3. 高级语言(服务型社会):屏蔽机器细节,接近自然语言,抽象度高。

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 基本数据类型

  1. 整型 (Integer)
    • int, short, long
    • Signed vs Unsignedsigned(默认)有正负,unsigned 无符号(只能表示非负数,但范围扩大一倍)。
  2. 字符型 (Character)
    • char
    • ASCII 码表(必背)'0'-'9''A'-'Z''a'-'z' 的顺序。C99标准开始,字符也是一种整数
  3. 浮点型 (Float Point)
    • float (单精度), double (双精度)。
    • 精度陷阱:浮点数存储是近似值(如 123.456789 可能会存成 123.456787),比较大小时不能直接用 ==

5.4 运算符与表达式(易错点)

  1. 算术运算符+, -, *, /, %
    • 除法坑点整数除以整数结果还是整数(截断小数)。例:5/2 结果是 2,而不是 2.5。要得到 2.5 需写成 5.0/2
    • 取模坑点% 左右两边必须是整数
  2. 赋值运算符=, +=, -= 等。
    • 截断与溢出:将大范围数赋值给小范围变量(如 int 赋给 short)会发生数据丢失(截断)。
  3. 自增/自减++, --
    • i++ (后置):先使用 i 的值,再 +1。
    • ++i (前置):先 +1,再使用 i 的值。
  4. 逻辑运算符
    • && (与), || (或), ! (非)。
    • 短路特性(重要考点)
      • a && b:如果 a 为假,b 不会被执行。
      • a || b:如果 a 为真,b 不会被执行。
  5. 位运算符&, |, ^ (异或), ~ (取反), <<, >>。直接对二进制位操作。

5.5 关系运算符的“天坑”

  • == vs =
    • == 是判断相等。
    • = 是赋值。
    • 经典Bugif (a = 4) 永远为真(除非赋0),且改变了 a 的值。请务必区分!

5.6 三大基本控制结构

任何复杂的程序都可以由这三种结构组合而成(Dijkstra 理论):

  1. 顺序结构:按代码书写顺序执行。
  2. 选择结构if, switch
  3. 循环结构for, while, do-while

6. 编码风格与规范 (Styles & Guidelines)

6.1 为什么风格很重要?

  • 代码是写给人看的,顺便给机器运行。
  • 规范的代码能减少 Bug,提高维护性(团队协作基础)。

6.2 核心原则

  1. 清晰第一:不要为了微小的效率牺牲清晰度。
  2. 简单即快:Keep it simple to make it faster.
  3. 先对后快:Make it right before you make it faster.

6.3 命名与格式

  • 使用有意义的变量名(避免 a, b, c 满天飞)。
  • 合理的缩进与空格。
  • IOCCC大赛:那是反面教材(混乱代码大赛),工作中千万别学!