软件工程第一周作业
| 软件工程 | 软件工程 |
|---|---|
| 这个作业要求在哪里 | where作业要求 |
| 这个作业的目标 | 熟悉博客园Markdown写作、代码发布与写作规范,梳理自身能力并制定学期学习计划;掌握有效提问方法,厘清学术引用和抄袭的边界;借鉴IT从业者成长经验,避开学习常见坑;搭建GitHub个人仓库,建立复盘总结与工程实践的学习习惯。 |
一、自我介绍
我是广东工业大学24级计算机科学与技术专业的张高朗,来自广东广州。我是一名爱党爱国的团员,平日里热爱体育锻炼,多打羽毛球男双混双,通过羽毛球认识了不同年龄的优质球友。两年前决定报考广东工业大学,成为我爸校友之一,在计算机学院不断学习IT技术,参加各种比赛和实习工作,不断打磨技术,希望日后成为一个对社会有贡献的人。
二、现状、经验和计划
PART1
计算机作为热门专业在各行各业都有人员需求,基于这点我觉得选择成为一名广工计算机专业学生对于出来社会就业还是很吃香的。当然现在大AI时代确实对于老派计算机技术有不小的冲击,所以如何精进技术、学到对于就业更有用的技术是我目前在学习摸索的。
| 技能名称 | ①当前的水平 | ②课程结束目标的水平 | ③提升方法 |
|---|---|---|---|
| 代码编写能力 | 2 | 6 | 1. 坚持日常代码练习;2. 研读优秀开源代码,借鉴编码风格;3. 写完代码自我检查,修正 bug 与冗余写法 |
| 专业知识储备 | 2 | 6 | 1. 课堂做好笔记,课后复盘知识点;2. 阅读专业技术文档拓展知识面;3. 结合项目实践巩固课本理论 |
| 问题分析能力 | 2 | 7 | 1. 遇到问题先独立拆解,不直接搜答案;2. 学会复现 bug,定位问题根源;3. 多复盘错题与踩过的技术坑 |
| 团队合作能力 | 3 | 6 | 1. 积极参与小组课程项目;2. 明确自身分工,配合队友完成任务;3. 学习团队开发流程,服从项目安排 |
| 沟通与文档写作 | 2 | 6 | 1. 练习撰写项目说明、实验文档;2. 提问把问题背景、现象完整描述清楚;3. 阅读他人优质文档,学习写作逻辑 |
| Git/GitHub工具使用 | 2 | 6 | 1. 本地练习提交、分支切换基础操作;2. 课程作业持续提交到个人 GitHub 仓库;3. 学习协作提交、版本回退等进阶用法 |
PART2
a.课堂上可以接触到工程实践视角,了解实际开发中的真实问题,避免只停留在书本理论。同时课堂也是交流的平台,可以听到不同的想法,拓宽看待问题的角度。
b.印象最深的是大一的高数老师朱老师,她给我带来了一种很富有生命力的课堂体验,她的教学方式在我看来是很激励学生深挖高数这门学科的(虽然的确很难哈);
如果作业困难的话,我倾向于先向外请教,看看豆包有没有更好的解法,看看是不是自己想歪了一些本是很简单的东西或者是漏看了什么条件,主动找方法解决这个问题
c.引用文献是学习的一种方式,是看看别人怎么做到的,去理解这个东西如何操作如何解构,并引发自己的思考形成自己的结论,这是区别于直接摘取他人胜利果实的不正当的学术行为
PART3
未来的发展道路有很多种,综合自身情况,我的目标是考研深造,之后从事信息技术相关教师工作。结合部分 IT 前辈的成长经历来看,技术不只有开发岗位一条出路,把专业知识吃透,再具备教学输出的能力,同样可以实现自身价值。相比身边同学,我的优势在于拥有一定的实习经历,接触过真实的项目工作,清楚专业知识在实际场景如何落地,能够理解知识的实际用途;同时我乐于表达分享,善于梳理归纳知识点,适合做知识讲解输出;平时也有耐心,愿意去钻研概念、拆解难点,适合教书育人的岗位。
但我也存在明显劣势:一方面,考研科目难度高,专业课的理论深度还有欠缺,学术科研训练不足;另一方面,教学相关的实践较少,教学设计、课堂讲授的经验比较匮乏;同时专业工程实践广度也有待加强,部分技术只停留在了解层面。
针对考研后从事教师的目标,本学期我给自己制定对应的规划:
第一,夯实考研相关专业课基础,认真学好课内课程,梳理知识框架,做好日常复盘,补齐理论短板,为后续考研复习打下底子;
第二,继续积累工程实践,利用 GitHub 仓库完成课程练习,保持代码动手能力,做到理论和实践不脱节,未来教学可以结合真实案例讲解;
第三,刻意锻炼知识总结与输出能力,坚持博客园随笔复盘,练习把复杂技术通俗化表达;
第四,主动了解教育相关内容,学习教学设计相关思路,多观察优秀的授课方式,弥补教学实践经验不足的短板。
PART4
对比国内外软件工程相关课程的培养思路,国内课程侧重工程理论、流程规范,国外本科更看重真实项目实践、团队协作与工程复盘。我对本课程的期待是:不只是记住书本上的软件工程概念,真正学会把工程思维运用到项目当中,掌握需求分析、模块设计、单元测试、版本管理、文档撰写整套完整流程,把我过往做项目的零散经验规范化。
课程期间,我会认坚持博客园复盘记录学习过程,认真完成小组项目,主动练习 Git 团队协作、代码复审等工程实践。
目前暂时没有申请助教的打算,先把自己的课程内容学好。
我接触过前端、Linux,完成过医疗单据 OCR 识别系统项目。目前:Python 约 700 行,JavaScript 前端代码约 600 行,Shell 脚本约 300 行,总代码量约 1500 行。
想要入职一流互联网、人工智能公司,豆包查到普遍需要累计2‑5 万行项目代码,代码量代表动手实践的积累,同时还要配套项目经验、算法能力。如果走高校教学科研路线,代码量不是唯一评判标准,需要一定量项目代码用来理解工程实践,更看重科研论文、课题研究、学术积累,代码量 1‑2 万行可以支撑教学实践需求。
选D。
每周投入本课程总时间6小时左右吧,包含课后作业、博客撰写、小组项目实践。我希望通过更多的时间投入,补齐工程能力短板,把软件工程理论落地到自己做过的 OCR 系统等项目中,复盘项目的不足,完善工程化思维,为之后考研和从事教师工作打好基础。
三、提有质量的问题, 给认真的反馈
速览跳读了一下我感兴趣的章节后,我想问以下问题
Q1:(第 2 章 单元测试)
我看了这一段文字:“单元测试必须由最熟悉代码的人(程序的作者)来写”。
我有这个问题:代码的编写者很容易形成思维定势,会下意识忽略自己逻辑里的漏洞。全部由开发者本人编写单元测试,是否会造成测试用例存在盲区?实际项目里是否需要其他人补充测试用例?
我查了部分资料,部分企业会安排其他开发或者测试人员参与用例评审。根据我的实践,自己写完一段代码,往往很难发现自己的边界条件漏洞。
但是我还是不太懂:书中坚持单元测试由作者完成,该如何平衡开发者自身思维盲区带来的测试短板?
Q2(第 4 章 两人合作‑结对编程)
我看了这一段文字:结对编程可以提升代码质量、减少 bug,是高效的合作开发模式。
我有这个问题:既然结对编程有诸多优点,为什么国内大部分企业并没有大规模推行结对编程?
我查了资料,不少观点提出结对编程人力投入翻倍,短期开发效率会降低。根据我的实践,小组作业尝试两个人一起编码时,沟通成本很高,项目推进速度反而变慢。
但是我还是不太懂:结对编程更适配什么样的场景?学生课程项目是否适合长期使用结对编程?
Q3(第 5 章 团队和流程,软件团队模式)
我看了这一段文字:软件团队有主治医师模式、功能团队模式等多种团队模式,不同模式适配不同项目场景。
我有这个问题:学生课程小组内成员技术水平差距较大,部分同学基础薄弱,部分同学能力较强,这种情况下我们应当优先选择哪一种团队模式?
根据我的实践,课程小组很容易出现少数能力强的同学承担绝大多数任务,其余同学参与度低的现象,类似主治医师模式,但这样会让一部分同学得不到锻炼。
我的困惑:学生团队缺少企业的管理制度,如何选择团队模式,同时兼顾项目交付和全体成员的学习成长?
Q4(第 13 章 软件测试)
我看了这一段文字:软件测试不只是找 bug,而是贯穿整个软件开发周期的活动,需要多种测试手段配合。
我有这个问题:部分软件存在大量依赖特殊输入才会触发的偶现 bug,很难全部通过自动化用例覆盖。传统软件工程的测试体系,该如何应对这类难以复现的问题?
我查阅资料了解到除自动化测试外,还需要人工测试、场景模拟等手段作为补充。根据我的实践,很多 bug 只有特定条件才会复现,很难全部转化成单元测试。
我的困惑:在资源有限的条件下,怎样分配自动化测试与人工测试的比重?
Q5(第 16 章 创新)
我看了这一段文字:创新要尽早发布,快速迭代,避免分析麻痹,不要追求完美再发布产品。
我有这个问题:尽早发布快速迭代很适合普通互联网产品,但如果是安全性、可靠性要求很高的软件,过早上线会带来风险。那快速迭代的原则对于高风险软件项目还适用吗?
根据我的实践,高可靠性要求的软件一旦出现错误,会产生比较严重的后果,不能将未充分验证的版本对外交付。
我的困惑:高风险类软件项目,应当如何平衡快速迭代和系统可靠性二者之间的矛盾?
选D
我觉得教学类似教练和学员的关系,课程遇到疑惑、发现课程存在可以优化的地方,我会主动向老师、助教反馈,及时提出疑问和想法,帮助自己学习也辅助课程改进。
四、前车之鉴
挑选了以下三篇
文章 A
链接:https://book.douban.com/subject/4006425/discussion/22803733/
主题:把每天要做的事情分成 ABCD 四类:A‑紧迫且重要;B‑重要不紧迫;C‑紧迫但不重要;D‑不重要不紧迫。你是否有类似的习惯?
感想:这篇文章讲的四象限时间管理给我启发很大。平时学习很容易被紧急琐碎的事情裹挟,优先处理 A 类紧迫且重要的任务,却常常忽略 B 类重要但不紧迫的事情,比如专业课复盘、长期考研备考、项目能力积累。B 类事情不会立刻带来压力,但对长期成长最为关键。我之前经常优先应付截止日期临近的作业,却挤压了打基础的时间。往后我也尝试用四象限梳理每日任务,主动留出时间处理 B 类任务,避免一直被动赶任务。
文章 B
链接:https://book.douban.com/subject/4006425/discussion/22803961/
主题:你是否也觉得自己已是科班,但没学懂计算机?
感想:作为计算机相关专业的学生,我也常常有这种感受,虽然身处科班,上完很多课程,但遇到实际项目时依旧会觉得自己掌握得不够扎实。课堂更多偏向理论,缺少把知识串联起来的工程实践。很多课程学完就遗忘,没有落地到代码、项目上。这提醒我,科班身份不等于能力,不能只满足于考试及格,要主动动手实践,把书本理论和实际开发结合起来,补齐自己工程实践上的短板。
文章 E
链接:https://www.cnblogs.com/geniusalex/p/4928713.html
主题:速成的培训班和打基础的大学教育有区别么,你是否对大学的基础学科存在的必要性有疑问?
感想:读完这篇文章,我分清培训班速成和大学本科教育定位上的差异。培训班侧重快速教会实用工具,目标是快速上手干活;大学更看重底层基础,计算机组成原理、操作系统这类课程短期看不到直接产出,但决定后续技术上限。有时候我也会疑惑为什么要学很多看似不能直接写项目的基础课。如果只追求速成,只会用框架,遇到复杂问题就很难解决。大学的基础学习是长期投资,哪怕见效慢,也值得花时间吃透。



浙公网安备 33010602011771号