软件工程实践寒假作业
| 这个作业属于哪个课程 | 2023年福大-软件工程实践-W班 |
|---|---|
| 这个作业要求在哪里 | 软件工程实践寒假作业 |
| 这个作业的目标 | 准备工作、回首过去、立足当下、展望未来、学习路线 |
| 其他参考文献 | 《构建之法》 |
目录
- 一、准备工作
- 二、回首过去
- 专业选择
- 期待与想象
- Flag 们
- 三、立足当下
- 个人简历
- 刘泓
- 个人信息
- 教育经历
- 技能清单
- 项目经历
- XX中学 秒知项目
- XX中学&极课成绩查询网站
- RSSHub
- 大棚监测系统(数据库实践项目)
- 四、展望未来
- 《构建之法》问题思考
- 问题1:如何区分一个好的程序员和不好的程序员呢?
- 问题2:单元测试中,如果每次做修改都需要覆盖所有的代码路径带来的维护成本是否会过大?
- 问题3:单元测试应该谁来写?
- 问题4:对于一名工程师而言,究竟应该是更”专“一点好,还是更”广“一点好呢?
- 问题5:极致是否会导致“偏离正道”?
- 问题6:如何在团队中建立相互信任的关系?
- 问题7:敏捷开发中是否有必要解决所有bug?
- 职业规划
- 对于软件工程实践课程的期望
- 五、学习路线
- 思维导图:
- 学习路线:
一、准备工作
建立一个public代码仓库,使用git上传一个代码文件。


仓库地址
二、回首过去
专业选择
自初中以来我便对计算机有浓厚的兴趣,曾经加入了学校的计算机兴趣班学习 Pascal 语言,这算是我计算机的启蒙。
高中以来,我开始学习其他编程语言,开始探索自己最喜欢的方向。我还不拘泥于软件,偶尔也会涉猎硬件知识。
经过三年的探索,我逐渐明确了方向──软件开发,尤其是全栈开发。于是,高考填报志愿时我便毫不犹豫地选择了软件工程专业。
期待与想象
在入学前,我期待着软件工程专业可以让我接触到更多前沿技术,能让我学习更多行业主流技术。
同时,我希望能通过四年的学习与实战掌握业务能力,并亲手做出令我自己满意的项目。
Flag 们
我不是一个喜欢定下长久计划的人,因此我给自己粗略地定下了一个目标:每个学期要利用课余时间学习几门新语言,不求精通,暂求涉猎。我希望能尽快找到我最喜欢的那份技术,并深入学习。
为实现目标,我每个学期都会开几个坑,尝试一边学习一边填坑,逐步提升自己的代码能力。
三、立足当下
个人简历
刘泓
个人信息
- 男,2001 年出生
- 求职意向:Web 全栈工程师
教育经历
- 学士,福州大学,软件工程专业,20xx.9~20xx.7
- 通过了 CET4/6 英语等级考试
技能清单
- 编程语言:Python, Java, C++, Javascript, Node.js, Rust
- 开发框架:Bootstrap, Django, Spring Boot, FastAPI
- 数据库:MySQL
- 其他工具:Linux, Git, Docker, Postman
项目经历
XX中学 秒知项目
- 作为校内项目负责人,处理项目任务分配、活动策划与文书工作。
- 参与主服务器运行维护,负责维护数台小型服务器组成的服务器集群。
- 组织同学进行软件测试,设计软件新功能。
XX中学&极课成绩查询网站
- 设计并制作简化学校官网/第三方 APP 成绩查询流程的网站,为用户节省 50% 以上的查询时间。
- 前端使用 Bootstrap, jQuery 框架,后端使用 Django 框架。
- 使用 Docker 快速部署后端程序。
RSSHub
- 创建并维护福州大学教务处与的嘉锡讲坛的 RSS Router。
大棚监测系统(数据库实践项目)
- 设计 RESTful API,协调组员分工协作,审核后端代码。
- 设计并编写微信小程序与部分后端代码。
- 搭建并维护数据库。
四、展望未来
《构建之法》问题思考
问题1:如何区分一个好的程序员和不好的程序员呢?
我认为,一个足够优秀的程序员至少要具备独立解决问题的能力与与他人协作的能力。独立解决问题体现在他可以通过查找搜索引擎等方法来解决当前面临的未知的或较困难的问题;与他人协作则是可以将自己的问题暴露出来、不懂就问的能力。
问题2:单元测试中,如果每次做修改都需要覆盖所有的代码路径带来的维护成本是否会过大?
在我的体验中,由于单元测试具有高度自动化的特性,在一次编写之后,无需人员干涉便可自动对代码进行测试,可以有效地防止修改/新增代码带来新的 bug。
假如项目过于庞大,我会考虑将项目切分为几个互不干涉(解耦)的模块,对每个模块分开编写单元测试。这样在修改某个模块的代码之后,仅需运行对应模块的单元测试即可发现问题,并节约时间。
问题3:单元测试应该谁来写?
我认为单元测试还是应该由编写这段代码的人来完成。
可以参考“测试驱动开发” 的思想,在编写函数之前先写函数的单元测试。
问题4:对于一名工程师而言,究竟应该是更”专“一点好,还是更”广“一点好呢?
作为当今社会的程序员,其任务早已不是局限在我所负责的那一小块内容里。由于敏捷开发的推广,程序员经常变动岗位,可能今天做开发,明天就去做测试了,对知识的需求量很大。
我认为学习开发应当以广为主,并一某一方向专精为辅,才可以更好地发挥作用。
问题5:极致是否会导致“偏离正道”?
我不认为追求极致都会带来“偏离正轨”的后果。
在我的体验中,倘若在编码时不拘小节,例如不写类型、不用异常处理,等到调试的时候将付出编码数倍的时间来修正各种本应避免的问题。
我觉得在编码的时候就尽可能注意每一个细节,虽然可能会多花一些时间,但最终可以有效减少浪费在修改 bug 的时间,综合下来是提高效率的。
在我体验上看,极限测试虽然偏向极端,但只要运用合理,确实可以避免一些比较罕见的 bug。
问题6:如何在团队中建立相互信任的关系?
我认为,团队成员应当毫无保留地将自己遇到的问题将给团队的其他成员听。也许这是别人已经踩过的坑,自己就没有必要再踩一遍。
如果有任何学不来、办不到的情况,也不能在任务分配的时候随口答应,而是要对自己的能力有深刻了解,只接自己力所能及的活,不能等到要交差的时候再说我不行。
问题7:敏捷开发中是否有必要解决所有bug?
在我看来,敏捷开发要求产品迭代速度快、成员压力较大,并没有太多经历关注当前版本下的所有 bug。
可以将一些不太影响用户体验的 bug 留到之后的小版本中修正,而此刻先专心于开发手边的事情。
职业规划
我计划成为一名全栈工程师。随着技术发展,我也许换转向研发 WASM 相关的软件。
对于软件工程实践课程的期望
对于编程语言方面,我认为这应该由我们自学完成。
我更期待这门课能教会我现代软件工程的设计思想、开发团队的协作策略和开发一款完成度高的软件所用到的各种技能,例如编写单元测试、使用 CI、管理多分支多版本的 Git 仓库等技能。
五、学习路线
目前我最想学习的 Rust 语言,想使用 Tauri 框架编写一个能在桌面展示 GitHub 通知内容的插件。
思维导图:


学习路线:




