CS61B笔记 | SoftwareEngineering 软件工程
有多种选择来构建一个list,可能是array list,也可能是link list。或者想用map,有多种方法构建一个tree map 或者 hash map。
为什么要用特定的一个而不用另一个?这便是工程学的意义所在。
1.代码复杂度
对于我们能构建的东西的限制实质上来自于我们设计事物的方式。
- 一个程序员不可能自己管理一个大型软件系统。
- 如果有很多程序员,如果每个人都不能理解整个代码库,那么每个人都应该只需要理解代码库的一小部分。
两种类型的复杂性
- 第一种 我们不可避免的复杂性
- 必须实现的某些功能
- 第二种 我们可以避免的复杂性
- 代码更加简洁、清晰
- 模块化
2.战略编程和战术编程
战术性编程
它的理念专注于特定的战术,你只想快速让一些东西跑起来。
然而:
- 我们没有真正花时间在代码设计上
- 它很复杂
- 重构性差
战略性编程
考虑长期战略,易于维护和优雅的代码。这需要更长的时间。足够的简洁性。面向未来的:未来几十年仍能够持续存在的代码。
策略->实现->更新策略->实现
3.资源配置和测试
构建通用的资源配置 模块->传入资源配置->生成页面
编写测试。如果之前就使用了模块化的想法,那么现在编写 1 个测试就可以测试 30 个资源。
4.设计
关心设计和文档
5.管理复杂性
技术债务确实存在,有截止日期。考虑权衡。
思考什么是好的代码??
- 可读性
- 简洁性
- 可测试
糟糕的代码风格:
- 变量命名
- 不要太复杂
- 不要重复实现相同逻辑的代码
- 重构坏了应该可以回到旧版本
频繁提交git是一个好习惯,每完成一个功能就提交一次。
5.如何在团队中工作
远程开发软件软件:
- IDEA Code With Me
- VS Code
6.白板编程
构思时间>编码时间
- 白板编程用来与其他人面对面交流使用
- 设计文档是为将来准备的
7.工程思维
- leetcode
- Cryptopals
- Project Euler
8.游戏开发
- 上瘾
- 游戏机制易于上手
- 有一些有趣的东西,让某些操作很难精通
- 玩家需要正反馈。正反馈太强,导致落后的一直落后,领先的一直领先。
- 需要一些随机性,使得玩家通关后仍然想再次游玩。
如何让proj3变得更好玩:
1.添加一些背景故事
2.敌人、障碍
3.积分系统
游戏制作流程:
合作
从最小原型MVP阶段开始构建,经过迭代改进游戏

浙公网安备 33010602011771号