软件工程第一周作业
软件工程第一周作业
| 这个作业属于哪个课程 | 计科24级78班 - 软件工程 |
|---|---|
| 这个作业要求在哪里 | 第一周作业 |
| 这个作业的目标 | 开通个人技术博客并写下第一篇自我介绍;对照合格软件工程师的标准审视自身差距并制定课程学习计划;练习 Markdown 排版与 Git/GitHub 的基本使用;养成认真提问、反馈与反思的习惯。 |
一、介绍自己,建博客
我是刘俊宁,来自广东佛山,是24级计科8班的学生。我在博客园的昵称是 mikkozz,GitHub 账号是 M1kk0zz0615。
当初第一志愿就选了计算机这个专业。我从小就开始接触电脑,对电脑里的各种东西一直很好奇。
我喜欢也坚持的事是摄影与影像创作。初中时在我爸的影响下第一次拿起相机,从此喜欢上用取景框记录画面:从拍胶片到图片、视频的前后期,构图、调色、剪辑,都是自己一点点摸索学会的。我享受把眼前的东西拍成自己想要的样子的过程。
因为想给作品一个安放的地方,我还动手给自己搭了一个个人网站。
为什么要建博客?我以前没有想过认真写东西,但读了 刘未鹏的《为什么你应该(从现在开始就)写博客》,我认同一个观点:写作是最好的思考整理方式。
二、现状、经验和计划
(一)为什么选这个专业,还差在哪里
我前面说过,选计算机是我的第一志愿,理由很简单也很朴素:从小喜欢电脑,觉得这个专业有意思,就业前景也好。但喜欢归喜欢,我清楚自己还有很大的差距:
- 专业基础:数据结构、操作系统、计算机网络这些核心课还没学扎实,很多概念只停留在"听过"。
- 动手实践:写过的东西太少,几乎没有独立完成过一个完整的程序或项目。
- 工程素养:Git 版本控制、单元测试、代码规范、写文档这些工程习惯基本还没建立。
- 英语与信息检索:读英文文档和技术资料还比较吃力。
- 沟通协作:还没体验过团队合作开发一个项目。
(二)技能调查表(抽取 7 项)
参考了技能调查表(5 表示能通过面试,9 表示世界一流),我给自己打了分:
| 技能 | ① 目前水平 | ② 课程结束目标 | ③ 提高手段 |
|---|---|---|---|
| 编程语言(C / Java / 前端) | 3 | 7 | 认真完成课程作业;每周固定时间写代码;用学到的语言做小项目 |
| 算法与数据结构 | 2 | 6 | 同步学好《数据结构》课程;每天在力扣做 1 道题并总结 |
| 软件开发工具(Git、IDE、调试) | 3 | 7 | 所有代码练习都放进 GitHub 仓库,熟练用 Git 管理版本 |
| 技术英语阅读 | 4 | 7 | 每天读一篇英文技术博客/文档,查词记录,尝试看英文原版书 |
| 独立完成项目的能力 | 1 | 5 | 课程中后期独立开发一个完整小项目并发布 |
| 文档与博客写作 | 3 | 6 | 坚持每周写技术博客,总结学过的知识与踩过的坑 |
| 沟通与协作 | 4 | 6 | 多和同学组队、互相 review 代码,主动向老师和助教提问 |
(三)阅读心得
a) 我为何要来上课并且认真参与
我读了这位同学的思考以及《你为何要来上课》。我觉得大学是人生中身体最好、时间最自由的学习阶段,这份"全职学习"的机会其实很稀缺。上课认真参与,不是为了让老师满意,而是为了让自己不亏。课堂上有老师把几年的经验浓缩成几十分钟讲给你,有同学可以互相讨论,这种环境离开校园就再也找不回来了。所以我要来上课,并且认真参与。
b) 师生关系与我的选择
我在大学里体验到的师生关系,大多还是"老师讲、学生听"的传道授业型。而我希望这门课是教练和学员的关系——就像健身房里教练带学员训练:教练讲原理、示范动作,学员自己练,教练在旁边纠错、督促、鼓励。我自己知道,如果没人盯着,我很可能会偷懒,所以我需要这种有人"带练"的关系。
关于"作业太难怎么办",我选择 C:向老师和同学请教,花更多时间,把作业全部完成。作业难说明我有东西没学会,这正是暴露问题、补上漏洞的机会,放弃了就等于花钱来学校却什么都没带走。
c) 引用与抄袭、剽窃的区别
我读了相关文章后理解到:引用是在别人工作的基础上继续前进,然后在此基础上加入你自己的思考、分析或改进;而抄袭、剽窃是把别人的文字、代码、想法当作自己原创的成果,不做任何说明,甚至直接照搬。区分的关键在于两点:一是否如实说明来源,二是否有自己新增的、原创的部分**。这门课我会遵守学术诚信要求,引用一律注明出处,代码如果是参考别人的也会在注释里写明。
(四)我的未来选择与规划
我目前的想法是本科毕业后直接就业,方向偏向 Web 前端/全栈/ai agent。这个方向跟我已有的积累比较契合:我已经自学了 HTML、CSS、JavaScript,准备接着学ts,vue3和fastapi。自己动手搭过个人网站,做前端刚好能结合我摄影练出来的审美和对好看又好用的追求。
- 相对优势:目标比较明确,动手和自学意愿强,有一定的审美能力,对做出"好看又好用"的东西有热情。
- 相对劣势:起步偏晚,基础薄弱,代码量少,没有项目经历,需要花比别人更多的时间去追赶。
本学期规划:
- 把这门课和数据结构等核心课学扎实,不挂科、不裸考。
- 每周固定投入 15 小时在这门课上(含上课时间)。
- 所有代码练习都推送到 GitHub,养成版本管理习惯。
- 坚持写博客,每周至少一篇技术总结。
- 报名/参加一两个校内的比赛或项目,积累实践经历。
(五)这门课的计划与期待
我希望这门课不只是"讲理论 + 考背诵",而是能有真实的项目、团队合作、代码审查这些工程实践。我打算认真对待每一次作业和反馈,把课程当成一次"带练"来度过。
关于代码量:
- 我目前的代码量:C 语言、Java 加起来不到 1000 行(且大多是课程练习),现在正在自学 HTML、CSS、JavaScript。
- 我认为要入职一流的软件/互联网/人工智能公司,真正扎实的有效代码量通常要达到几万行以上,而且更重要的是这些代码的质量和解决问题的经验;即使是高校教学科研,也需要大量阅读和编写代码的能力作为支撑。
- 我计划在这门课结束时,累计完成 6000 行以上自己书写并理解的有效代码,平均每周 400 行左右。
- 每周投入时间选择 D:比以前课要多很多,直到达到目标为止(我计划每周 15 小时,含上课时间,大约是以前课程的 3 倍)。
(六)用 WOOP 方法给自己做计划
- Wish(愿望):在这门课结束时,我能独立开发并发布一个完整的小项目(比如一个前后端齐全的个人主页/小工具网站),熟练使用 Git 和 Markdown,成为一只"入门级"的软件工程师候补。
- Outcome(最好的结果):到那时我能自信地把自己写的东西展示给别人看,面试时不再心虚;回头看这个博客,能看到一整学期的进步记录,那种"我真的变强了"的成就感,是我现在最向往的。
- Obstacles(障碍):我最大的障碍是拖延和不自律。具体来说,就是晚上想"再看一集/再打一把"就收不住,一拖就是两三个小时;遇到不会的问题容易烦躁,然后干脆放下不做了。
- 最可能的失败因素:三分钟热度,坚持不了一个月就松懈。我高一学摄影能坚持下来,是因为每天都想"再拍好一点";学习编程如果不能形成习惯,很容易半途而废。
- Plan(if-then 风险防范):
- 如果我晚上开始刷视频/打游戏超过 30 分钟,那么我就立刻关掉设备,去书桌前完成当天的代码任务再休息。
- 如果我遇到 30 分钟都解决不了的问题,那么我就把问题记录下来,先做下一部分,并在下次上课或提问时请教老师和同学,绝不把问题留到第二天。
- 如果我某天实在没状态,那么我也保证至少完成 20 分钟的代码/总结,保持"不断档"。
- 如果我发现自己连续 3 天没写博客,那么我就把博客当成"当天最后一个任务",先写完再睡觉。
三、提有质量的问题,给认真的反馈
在快速翻阅《构建之法》(邹欣 著)的目录和相关内容后,结合自己的经验,我提出以下 5 个问题(发布前我会按手头的书籍目录再核对一遍章、节号):
问题 1(第 1 章《概论》):书中说"软件 = 程序 + 软件工程",强调软件工程解决的是"团队协作、维护、成本"等单靠个人写程序解决不了的问题。我的困惑是:对于初学者(比如现在的我)写的几百行小练习,如果也要套上完整软件工程流程(需求、设计、测试、文档),会不会反而把学习的重点带偏?软件工程的方法究竟从什么规模的"玩具项目"开始才真正值得用?提问的原因是我看到很多"个人项目"其实从不写文档、不做测试,却也能一直跑得很好,这与书中的强调似乎有冲突。
问题 2(第 2 章《个人技术和流程》,单元测试部分):书中强调单元测试、回归测试对保证代码质量很重要。但我目前写的程序大多是一锤子买卖的小练习,跑一遍对一下结果就结束了,很少会"留到以后继续改"。我想问:把代码写成"可测试"的样子(比如把逻辑和输入输出分开、写测试用例)应该从什么时候开始刻意练习?是否应该在每一道练习题上都强迫自己写单元测试?因为我担心现在不养成习惯,以后写大项目时再补会很难。
问题 3(第 3 章《软件工程师的成长》):书中讨论了软件工程师的成长阶段和能力模型。结合作业里"需要多少代码量才有资格进一流公司"的讨论,我对"代码量"这个指标本身有疑问:不同的人写的 1 万行,含金量可以天差地别——有人是反复复制粘贴堆出来的,有人是独立思考写出来的。书中是否认可"用有效代码量衡量成长"?还是说成长更应该看"解决过多少种不同类型问题的经验"?
问题 4(第 5 章/第 6 章《团队和流程》《敏捷流程》):敏捷开发强调"响应变化高于遵循计划",反对一开始就写厚重的文档。但现实中我注意到很多公司人员流动大,如果一切都靠口头沟通和"人",老人一走,知识就跟着走了,新人接手时只能靠读代码(还是没注释的代码)。我的疑问是:敏捷和"必要的文档沉淀"之间的平衡点在哪里?书中对"敏捷会不会导致技术债和知识只存在于个别人脑中"这个问题有回答吗?
问题 5(第 8 章《需求分析》):书中介绍了 NABCD 模型、用户故事等方法,用于把模糊的"我想要一个 XX"变成可开发的需求。我的困惑是:真实场景里最难的往往不是"建模",而是客户自己都说不清要什么,甚至今天说的和明天说的互相矛盾。对于这种连 NABCD 都填不出来的情况,书中的方法还适用吗?是不是只能靠"先做个原型给客户看"这种试错方式来逼出需求?
说明:以上问题是我基于阅读目录、内容概要和自身经验提出的。因为手头还没有纸质书,正式发布前我会对照书里的具体章节再核对一遍出处编号,确保"是哪一章哪一节"标得准确,不糊弄老师。
关于反馈:老师说过,要改进教学需要收集学生的反馈。我觉得"填反馈"不只是帮老师,也是帮自己——把哪里没听懂说出来,老师才能对症下药。所以我选择 C:有问题就问,至少一学期提三个问题,认真按时填写反馈,并争取向 D 靠拢,平时就主动和老师、助教交流。
四、前车之鉴(读 3 篇的感想)
1. 读周见智《一直在路上——记我从初中到本科近十年的学习成长历程》(链接)
这篇让我印象最深的有两点。第一,作者是个"偏科生",却因为对英语和化学有真实兴趣而学得极好,这说明兴趣和主动才是学习效率的源头,跟"天赋"关系不大。第二,他反复强调"自学"是最重要的能力,说我们 90% 的知识是靠自学得来的——很多高级的东西课本上没有,老师也不会讲,只能靠自己上网查、啃书、动手试。这给我提了个醒:我不能再指望"老师喂到嘴边",要早点习惯自己找答案。他还提到英语的重要性:很多问题用中文搜不到答案,用英文一搜就有。这正好对应我给自己定的"每天读英文技术文档"的计划。
2. 读灵感之源《我的软件开发生涯(10 年开发经验总结和爆栈人生)》(链接)
作者是英语专业出身,靠自学转行进 IT,这让我这个"科班但代码量不到一千行"的人稍微安心了一点——起点低不可怕,可怕的是不开始。文中有两句话我记下了:一是"最重要的个人能力是学习能力和交流能力",二是关于简历要"诚实"——不要写"精通 XX",真正的大牛都不会这么说。我现在的简历几乎还是空白的,但与其到时候编造,不如现在开始真学真练,让简历上的每一项都经得起问。他还提到刚毕业时写编程规范想在公司推行却没人理解,这让我明白:好的工程习惯(规范、文档、测试)不是天生受欢迎的,需要坚持和积累,但它是值得的。
3. 读灵感之源《技术人生的职场众生相》(链接)
这篇讲了很多职场上的"烂代码"和"坑",比如有人复制粘贴把几百行代码堆成上万行,最后自己都看不懂;有人无视编译警告,项目带病上线;有人不校验用户输入,导致系统各种崩溃。读完我最大的感受是:写代码要对得起看代码的下一个人(书中那句"想象以后维护你代码的人是个知道你住址的暴力狂"虽然好笑但很真实)。这也解释了为什么作业要求我们一上来就练 Git、练规范、练格式——这些在学校里"看起来没用"的习惯,其实是以后吃饭保命的本事。另外作者多年落下一身职业病,提醒我学习工作也要注意身体,不能仗着年轻透支。
附:Markdown 后台编辑器设置截图
本文采用 Markdown 排版,后台已将默认编辑器设置为 Markdown,截图如下:

附:GitHub 同名仓库截图
已创建与 GitHub ID 一致的仓库 M1kk0zz0615/M1kk0zz0615,并在 README 中写下了自我介绍,截图如下:


浙公网安备 33010602011771号