CS61B笔记 | SoftwareEngineering 软件工程

有多种选择来构建一个list,可能是array list,也可能是link list。或者想用map,有多种方法构建一个tree map 或者 hash map。

为什么要用特定的一个而不用另一个?这便是工程学的意义所在。

1.代码复杂度

对于我们能构建的东西的限制实质上来自于我们设计事物的方式

  1. 一个程序员不可能自己管理一个大型软件系统。
  2. 如果有很多程序员,如果每个人都不能理解整个代码库,那么每个人都应该只需要理解代码库的一小部分。

两种类型的复杂性

  • 第一种 我们不可避免的复杂性
    • 必须实现的某些功能
  • 第二种 我们可以避免的复杂性
    • 代码更加简洁、清晰
    • 模块化

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阶段开始构建,经过迭代改进游戏

posted @ 2024-10-30 17:47  Merakii  阅读(37)  评论(0)    收藏  举报