主题
第 0 章 Kotlin 学习计划:从 0 到 1 的 14 天路线图
本章目的:在你写第一行 Kotlin 之前,先告诉你"这条路要走多久、长什么样、容易在哪摔跤、学完后能做什么"。把地图看清楚了,再上路才不慌。
0.1 学习这件事,先想清楚 3 个问题
0.1.1 你为什么学 Kotlin?
不同动机决定了不同的学习侧重点:
| 动机 | 重点章节 | 可以略过的部分 |
|---|---|---|
| 想做 Android 开发 | 1-9 章 + Android 拓展(自学) | 协程进阶(StateFlow/SharedFlow 后续再学) |
| 后端转 Kotlin(Spring Boot) | 1-9 章,重点 Null 安全 + 协程 + 数据类 | DSL / KMP |
| 写 Gradle 构建脚本 | 1-4 章 + 第 8 章作用域函数 + DSL | 协程 / Android |
| 跨平台 KMP(iOS+Android 共享) | 全部 + KMP 拓展 | / |
| 单纯好奇 / 学习现代语言 | 全部按顺序 | / |
📌 小白建议:先按本笔记从 1 到 10 章学一遍,把基础打牢;之后再根据职业方向深挖。
0.1.2 你已经会什么?
| 你的背景 | 上手速度 | 难点会出现在哪 |
|---|---|---|
| 写过 Java | 1-2 天能流畅写 Kotlin | Null 安全的语法糖、扩展函数的思维方式 |
| 写过 Python / JS | 3-5 天 | 静态类型、泛型、协变逆变 |
| 写过 C / C++ | 2-3 天 | 函数式 API、Lambda、协程 |
| 完全零基础 | 2-3 周 | 面向对象基础需要补 |
0.1.3 你能投入多少时间?
本笔记规划是每天 1.5–2 小时,14 天能走完。如果你只能每天半小时,那就翻倍到 28 天。
💡 重要心法:不要"看完笔记 = 学会"。每章结束你必须能闭着眼睛把那章的代码自己写出来,否则就再来一遍。代码是肌肉记忆。
0.2 整体路线图(14 天)
★ Kotlin 14 天通关图 ★
Day 1-2 Day 3-5 Day 6-8 Day 9-11 Day 12-14
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌──────────┐ ┌──────────┐
│ 入门 │────►│ 进阶 │───────►│ 熟练 │──────►│ 异步并发 │───►│ 实战 │
│ 1-3 章 │ │ 4-6 章 │ │ 7-8 章 │ │ 9 章 │ │ 10 章 │
└─────────┘ └─────────┘ └─────────┘ └──────────┘ └──────────┘
能跑通 能写"像 Kotlin" 能看懂开源 协程不晕 能做项目
Hello World 的简单程序 项目代码 能写并发 上简历阶段 1:入门(Day 1-2,第 1-3 章)
目标:理解 Kotlin 的"哲学",搭好开发环境,能写会变量和控制流。
- ✅ 能向朋友解释「Kotlin 跟 Java 的区别」
- ✅ 在 IDEA 里跑通 Hello World
- ✅ 看到
val name: String = "Alice"不再发懵
容易摔跤的地方:
- 装环境的时候 IDEA / JDK 版本不对应
- 把
val当成 Java 的final用,结果发现还能"改对象内部的字段"
阶段 2:进阶(Day 3-5,第 4-6 章)
目标:理解函数式编程的"基本招式",开始能写出 Kotlin 风格代码。
- ✅ 能用 Lambda 写
list.filter { it > 10 }.map { it * 2 } - ✅ 不再用
if (x != null)检查,改用x?.let { } - ✅ 能看懂别人写的
data class User(val name: String, val age: Int)
容易摔跤的地方:
- Lambda 里
it是啥?为什么能省略? ?.和!!到底什么时候用哪个?
阶段 3:熟练(Day 6-8,第 7-8 章)
目标:能写出"看起来很 Kotlin"的代码(Kotliner 们叫 idiomatic Kotlin)。
- ✅ 能用集合操作链式处理数据,不再写 for 循环
- ✅ 能区分
let/run/with/apply/also五兄弟的差别 - ✅ 看 GitHub 上的 Kotlin 开源项目不再"看一眼劝退"
容易摔跤的地方:
- 啥时候用 List 啥时候用 Sequence?性能差别在哪?
apply和also长得一样,到底怎么选?
阶段 4:异步并发(Day 9-11,第 9 章)
目标:理解协程,能写非阻塞的并发代码。
- ✅ 能用
launch/async/await写并发 - ✅ 能用 Flow 处理流式数据
- ✅ 知道为什么协程比 Thread 轻
容易摔跤的地方:
- Job / Scope / Context 三个概念绕晕
- "结构化并发"是个啥?
- Flow 和 RxJava 的 Observable 啥区别?
阶段 5:实战(Day 12-14,第 10 章)
目标:把所有知识串起来,做一个能写到简历上的小项目。
- ✅ 完成一个 CLI 版的 todo 工具:增/删/改/查/持久化到 JSON
- ✅ 用上数据类、集合操作、文件 IO、协程
0.3 每章统一的学习方法
每一章都按这个流程走,效率最高:
┌────────────────────────────────────────────────────────────┐
│ Step 1 通读文档(30 min) │
│ ─────────────────────────────────────────────────── │
│ 目标:搞懂"为什么这么设计"。先记概念,不抠细节。 │
├────────────────────────────────────────────────────────────┤
│ Step 2 打开浏览器看 demo(10 min) │
│ ─────────────────────────────────────────────────── │
│ 目标:把抽象概念通过可视化"看见"。直观印象最强。 │
├────────────────────────────────────────────────────────────┤
│ Step 3 亲手敲 code/ 下的示例(30-60 min) │
│ ─────────────────────────────────────────────────── │
│ 目标:肌肉记忆。**禁止复制粘贴**! │
├────────────────────────────────────────────────────────────┤
│ Step 4 做章末面试题(20 min) │
│ ─────────────────────────────────────────────────── │
│ 目标:检验是否真的会了。答不上来回去再读一遍文档。 │
├────────────────────────────────────────────────────────────┤
│ Step 5 写一个自己的小变体(30 min) │
│ ─────────────────────────────────────────────────── │
│ 目标:把知识"用到自己脑子里"。比如"如果改成 …… 怎么写?"。 │
└────────────────────────────────────────────────────────────┘💡 生活化类比:学语言就像学游泳。只看动作要领(看文档)永远学不会,必须下水(写代码);下水也别只在浅水区扑腾,必须呛过水(写错过、debug 过)才记得住。
0.4 学完之后能干什么
| 方向 | 你可以做的事 |
|---|---|
| Android | 做一个完整的 Android 应用(结合 Jetpack Compose) |
| 后端 | 用 Spring Boot 写 REST API;用 Ktor 写轻量 Web 服务 |
| 命令行 | 写跨平台的 CLI 工具,编译成 native 二进制 |
| 数据处理 | 用 Kotlin Notebook + DataFrame 做数据分析 |
| 跨平台 | 用 KMP 在 iOS + Android 共享业务逻辑代码 |
| 构建脚本 | 把 Groovy 写的 build.gradle 升级成 build.gradle.kts |
0.5 常见误区 & 心态建议
误区 1:「Kotlin 是 Java 的语法糖,不学也行」
错。 Kotlin 不只是语法糖:
- Null 安全是 类型系统层面 的保障,不是糖
- 协程是 编译器协作 的状态机,不是 Thread 的封装
- 扩展函数让你可以"给已有类加方法",是 Java 里写不出来的设计
误区 2:「先看完所有文档再写代码」
错。 学语言一定是 看一点 → 写一点 → 再看一点。从第 2 章开始就该亲手写。
误区 3:「面试题都是八股,工作用不到」
错。 Kotlin 的面试题大多围绕"为什么这样设计"展开,比如:
- "为什么
List没有add()方法?" - "
apply和also区别在哪?"
回答这些题的过程,本身就是在加深对语言的理解。
心态建议
🌱 遇到看不懂就先跳过。第一次学习不需要 100% 理解,能记住"有这么个东西"就够了,第二轮回头再看会豁然开朗。
🔥 别跟 Java/Python 一直对比。前期对比有助于上手,后期"拿 Java 思维写 Kotlin"反而是阻碍。
0.6 学习资源清单
入门
- 📖 本笔记 第 1-10 章
- 🌐 Kotlin Playground —— 浏览器里直接跑 Kotlin
- 📺 Kotlin 官方 YouTube —— JetBrains 出品教程
进阶
- 📖 《Kotlin 实战》(Dmitry Jemerov、Svetlana Isakova 著)—— 经典教科书
- 📖 Kotlin 官方文档 —— 写得非常清楚
- 🎓 Kotlin Koans —— 通过解题学语法
协程
- 📖 kotlinx.coroutines 官方教程
- 📺 Roman Elizarov 的协程演讲(YouTube 搜 "Roman Elizarov coroutine")
实战
- 🐙 GitHub Trending Kotlin —— 看顶级开源项目
- 💼 LeetCode Kotlin 解题 —— 用 Kotlin 刷 100 道题,语法肌肉记忆秒成
0.7 学完一个 self-check 清单
走完 14 天,请用下面这份 checklist 验收自己。打 ≥ 8 个勾代表"基础合格"。
- [ ] 能解释
val与var的区别,并给出"啥时候用 val"的判断标准 - [ ] 能写出
data class User(val name: String, val age: Int)并解释它生成了哪些方法 - [ ] 能用一句话解释「Kotlin Null 安全是怎么避免 NPE 的」
- [ ] 能区分
?.、!!、?:三个符号 - [ ] 能写出
list.filter { it.age > 18 }.map { it.name }.sorted()这种链式调用 - [ ] 能解释
let、apply、also三个作用域函数的差别和典型场景 - [ ] 能写一段
runBlocking { launch { } }启动协程 - [ ] 知道
suspend函数和普通函数的区别,能说出"suspend 不会阻塞线程" - [ ] 能用 Flow 写一段流式数据处理
- [ ] 能独立完成第 10 章的 CLI 项目并加 1 个新功能
🎉 打满 10 个勾:恭喜,可以投 Kotlin 岗位简历了! 😅 不到 5 个勾:别气馁,回去把对应章节再走一遍。