第一周随笔
| 这个作业属于哪个班级 | https://edu.cnblogs.com/campus/gdgy/Class56-Grade2024-CS |
|---|---|
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/Class56-Grade2024-CS/homework/15692 |
| 这个作业的目标 | 写一篇博客随笔 |
一、准备工作
GitHub ID: lanzero-seven, GitHub 地址。

博客园账号:博客名zero_7(兰羽),博客班级
二、正文
1. 介绍自己
我是一名广东工业大学计算机学院 24 级的学生,由于学校开展软件工程必修课,赴老师要求开展博客园的使用,我认为这是一个很好的记录和分享自己学习成果和心得体会的机缘。
在这里我可以向大家分享我的闪光点,我的特长是画画,我曾有过6年的系统绘画经历,我乐于将脑海中一切强烈浮现的标志性事物或场景通过画笔画下来;高中时我的数学几何图可以说是班上画的最好的,而我最喜欢的科目也是数学。虽说现在的专业是计算机,说实话从前我也不曾表现出任何对编程、开发的热爱,但是计算机与数学,在学习方法和某些理解逻辑上,大体还是一致的吧。同时,演讲也是我的爱好之一,为文字配上声情并茂、抑扬顿挫的声调可以让其所描述的场景更生动地呈现出来,这也使我享受万分。由此看来,相较于千篇一律、固守成规的工作,我其实更偏向体验与创造。我认为这在任何时候任何场景任何活动中都是催使我长久走下去的源泉。
我仔细查看了老师的底线要求,总结一句话就是不能抄袭,可以借鉴,但要标清来路,尊重他人研究成果。
2. 现状、经验和计划
(1)关于为什么选择这个专业,从现实来讲,当时高考填报志愿时无非就是看这个专业好就业且薪资高,而若联系上价值追求,我至今还未想明了,但绝不是毫无意义的。事物意义都是人为赋予的,当觉得没有意义时才会去思考 ta 的意义。
若问:离成为一个合格的 IT 专业毕业生,在专业知识、技能、能力上还差距哪些?
根据查看冗长的技术调查表,我从中抽取 6 项所认为的作为一名合格的 IT 毕业生特别重要的技能如下:
-
维度一的需求对齐与代码健康度;
-
维度一的验证深度与测试覆盖;
-
维度一的工程复现性;
-
维度二的云原生部署;
-
维度四的开源杠杆;
-
维度四的手动掌控力。
① 我目前的水平是2,即我能够独立完成任务,代码有测试、有规范,能跑通正常流程。
② 我想在课程结束后达到何水平:我对自己的要求并不高,仅仅想在课程结束后达到的水平是 4,我不想现在多么天马行空的想象自己能够通过这个课程达到怎样高的一个段位,只希望自己能够踏踏实实的先走到最基本的水平。即可以一个人利用 ai 完成一个好项目从部署到完成所有流程的工作,熟悉这过程中的具体情况。
③ 我计划通过什么手段提高水平:我计划听老师的话,先大体了解一遍教材中的设计内容,然后利用所学知识部署一个个人小项目,考虑其基于何现实问题,进而展开研究进行创新,从而产生并丰富项目方案规划,再进行代码编程进行复现,最后进行代码测试和维护来完成第一个个人小项目;接着和同学一起部署结构项目、团体项目,通过每一次的项目打磨和跟踪流程来熟悉其间的工作情况。
(2)阅读博客所得心得
a)我为何要来上课并且认真参与
关于我为何要来上课,来上课是一个学生的基本素养,是对老师和课程的尊重,是对自己的负责,当然也是受教学制度所圈。而关于我为何要认真参与课程,要么是为了听清楚学期末教学检测要求,要么就是该课程老师讲得的确生动风趣让我沉浸式体验课堂。但是大多数时候我是没有认真参与的,因为网络课程已经能够很好的让我捡起这门课程的绝大部分知识点,现实生活中能够坚持把教学授课讲得让人提起兴趣且津津乐道的老师实在太少了,但是不得不承认我们软件工程的老师讲课所举的例子的确幽默生动、深入人心。
b)我在大学中体验到了哪种师生关系,希望是什么师生关系
我在大学中既体验到了”陌生人“式的师生关系,也体验到了”餐馆与食客“式的师生关系,体验到了”狱警与犯人“式的师生关系,也体验到了”教练与学员“式的师生关系。我当然希望这门课属于”教练与学员“式的师生关系,作为学生,哪一节课不想如此。如果老师布置的作业对我来说有点困难,我首先会权衡这个作业是否值得我花费大量时间与精力去完成它,一旦下定决心,必会付诸行动尽力将其完成好同时还感叹其提高了自己的某方面的水平或能力。
c)针对”参考别人的资料,在别人工作的基础上继续开发, 这些活动和抄袭、剽窃的区别是什么“一问题,我认为前者与后者还是有本质区别的,前者是站在巨人的肩膀上进行属于自己能力范畴内的再开发,同时我们谨记巨人的付出成果,后者则是完全不顾他人知识产权进行无脑的照搬照抄,这种行为可耻得令人发指。
(3)今天的我,为将来所作的准备是,首先将课内知识学扎实,为之后考研做准备;其次在学术研究方面,将所学的知识、复现论文等工作和流程进行整理,从中获取创新思维,看看还有没有可以优化的地方;再者需要利用所学知识部署小项目,了解整个项目从提出到落地的整个过程内容,后期将其开源到 github 为今后找工作做准备;同时还要捡起之前的算法、代码编程知识,理清代码逻辑,丰富自己的代码量。
(4)这门课叫做软件工程,在项目规划上面,我计划先将课本较重要章节如”详细设计“、”实现”展开学习,了解开发一个小软件或应用程序的具体流程并自己尝试应用程序的简单开发;在代码方面,希望自己写出的代码具有良好的稳健性,不会因为录入数据稍微多一点就崩,至今,我在c语言的代码量已经超过 1000 行,python代码量 300 行,同时我考虑这学期增加 c++ 或 Java 代码的使用,希望可以付诸行动吧。
我对这个课程的期待就是老师可以一以贯之的执行个人项目、结构项目、团体项目的作业规划,(压力压力我吧否则我肯定也就不重视这门课了 bushi),再者便是老师可以给学生提供一些适合我们的小项目引导和主题推荐,毕竟如果让我们自己来搜罗的话还不知道哪些项目价值高不高、好不好做、做起来有没有挑战性、学生感不感兴趣。俗话说得好,兴趣是灵感的源泉,而这门课最终成果的源泉也归于兴趣。我希望这节课可以有趣附带着挑战地度过,我不想当助教虽然说当助教确实可以多和老师接触并讨论想法,了解到许多同学不一样的创新点,但是当下我并不想当。
为了有资格入职一流的软件公司/互联网/人工智能公司,虽说当下人工智能盛行,ai 写出来的代码一键运行,代码量早已不能成为考核的唯一标准,但是对于正常的代码内容的理解和整体的部署仍然是作为一个合格程序员最基本的要求,如此看来,基本程序员的代码量上千行都是必然,更遑论科研工作者呢?我之前看过 ai 于医学影像脑肿瘤 MRI 模态缺失分割的一篇论文复现 demo,每一个小操作都有上千行代码,而我去复现这篇论文,调整数据量后我能否再更改代码使其运行起来,必然要了解整体数据流的流动,所采用的模型部分模块的更改。所以我认为越高代码量,考验的不仅仅是局部的代码理解和调整,更是对整体能够运作起来的统筹和布局。
我打算平均每周拿出多少小时用在这门课上?据我所知我现在写这篇随笔就用去了我 3 个小时的时间,而且还是阶段性加起来的,所以也许几个小时也行十几个小时具体我也说不清,看看工作量强度吧。我打算选 C: 比以前的课稍多一些。
3. 提有质量的问题,给认真的反馈
针对《构建之法》提出的 5 个问题:
(1)我看了这一段文字 “软件的质量,就是软件满足用户需求的程度”(《构建之法》第 1 章 1.2 节,P8),书中认为足够好的软件不等于没有 bug,而是在成本约束下尽可能匹配用户真实需求,允许存在部分不影响核心业务的缺陷。我有这个问题:在学生课程项目场景下,我们很难接触到真实付费用户,大多是同学之间互为用户,这种情况下要怎么客观评判 “软件满足用户需求的程度”?我查看了《如何学习》中关于必要难度的相关论述,当评判标准模糊的时候,学习者很容易产生 “我已经完成需求” 的熟练度错觉,把自己的主观设想当成用户真实需求。根据我的实践,做课程大作业的时候,组员经常直接按照自己的想法写功能,简单问一两个同学就认定需求已经完成,最后交付的作品很多功能只是自嗨。但是我还是不太懂,课程作业没有真实用户反馈,除了小组内部互评之外,还有哪些可落地的手段去衡量软件质量,避免把开发者主观想象当成用户需求。
(2)我看了这一段文字 “软件工程师的成长,需要从初级到高级逐步积累,能力分为技术能力、工程能力等多个维度”(第 2 章 2.1 节,P48),书中提出分析麻痹是工程师常见思维误区,指一部分人总想要把所有问题分析完备之后才动手写代码,迟迟无法启动项目。我有这个问题:那该如何区分 “审慎完备的前期分析” 和 “分析麻痹”,二者的边界应该怎么把握?我查了博客园《如何提问》一文提到,思考不等于无限度的准备,过度的前期推演会阻碍实践落地。根据我的实践,做小型项目如果完全不做分析直接上手写代码,后期会频繁重构;但如果调研分析太久,又会出现拖延,临近截止日期才仓促开发。我的困惑是,对于学生新手,有没有简单可执行的判断标准,用来判断自己是在做必要分析,还是陷入了分析麻痹。
(3)我看了这一段文字 “软件团队有多种模式,比如交响乐团模式、爵士乐模式等,不同模式适配不同的项目场景”(第 3 章 3.2 节,P70),书中提到交响乐团模式适合需求稳定、分工明确的项目,爵士乐模式适合需要大量即兴创造的创新项目。我有这个问题:学生课程团队大多是临时组建,成员水平参差不齐,很多人同时还要应付别的课程,这种临时短期团队,要如何选择适配的团队模式?我查了一些高校软件工程课程的实践案例,多数学生小组既做不到严格分工的交响乐团模式,也没有足够能力自由即兴发挥爵士乐模式。根据我的实践,小组作业经常出现部分同学负担过重,部分同学划水,团队模式来回摇摆。我的困惑是,临时学生团队是否需要强行套用书中的成熟团队模型,还是应该存在一套适配学生现实条件的简化团队运作方式。
(4)我看了这一段文字 “软件项目的估计,要基于历史数据,不能靠拍脑袋,要考虑团队的实际能力”(第 4 章 4.3 节,P102),书中认为项目工作量估算,需要参考过往同类项目的历史数据,不能仅凭主观感受预估开发时长。我有这个问题:对于几乎没有项目历史数据的学生新手团队,没有过往项目记录,拿不出历史数据,工作量估算该如何开展?我查了资料,敏捷开发中也提到缺少历史数据的团队可以采用故事点相对估算,但书中对此着墨不多。根据我的实践,我们小组做项目时,完全没有过往项目作为参照,最后估算出来的工期总是和实际偏差巨大,要么时间预估过长,要么严重低估工作量。我的困惑是,缺少历史项目数据的学生团队,除了拍脑袋,还有哪些可靠的估算手段。
(5)我看了这一段文字 “软件的需求分为功能需求和非功能需求,非功能需求包含性能、可用性、安全性等,同样需要被重视”(第 5 章 5.1 节,P120),书中强调很多团队只关注功能实现,忽略非功能需求,最终造成软件缺陷。我反对作者部分观点,作者默认团队有充足时间和人力去完整调研、实现全部非功能需求,但学生课程项目时间、人力都极度有限。我的观点是学生项目应当对非功能需求做分级取舍,优先保障核心功能,部分非功能需求可以直接放弃,不必全部纳入开发目标。理由是课程作业时间有限,如果把性能、安全、易用性全部纳入开发范围,会导致核心功能都来不及完成,项目直接失败。我的困惑是,学生项目要依据什么原则,来判断哪些非功能需求必须实现,哪些可以直接舍弃。
既然是健身教练式的教学关系,学生就如同健身学员,会源源不断产生各类疑问,老师也需要收集课程反馈来优化教学,面对这样的场景,我选择C:有问题就问,至少一学期提三个问题, 认真按时填写反馈。
4. 前车之鉴
针对经验吸取,我选择以下两篇博客发表具体感想:
根据《你是否也觉得自己是科班,但没学懂计算机?》,读完刘帅的个人经历,我感触很深。他是标准计算机科班,完整修完计算机全套课程,拿过奖学金,却坦言本科阶段并没有真正学懂计算机。本科课堂上他习惯被动接收老师讲授的内容,机械完成作业,满足于考试拿高分,缺少主动动手实践、追问底层原理的习惯,数据结构本是一门重编码实践的课程,却被上成偏重理论记忆的数学课。直到旁听清华朱仲涛老师的课,看到老师课堂从零现场实现各类算法,才意识到计算机学习不是记住课本概念,而是要打通理论与代码实现。这给我的教训是,科班身份不等于自动掌握计算机能力,如果只满足于课堂听课、刷题应付考试,缺少主动拆解、动手实现、追问 “为什么” 的习惯,即便顶着科班头衔,依旧会出现 “知其然,不知其所以然” 的困境。很多课程的考核形式容易制造学习的熟练度错觉,看似考试分数不错,遇到真实面试、真实项目就暴露底层基本功的短板,这提醒我学习计算机不能止步于看懂书本,要主动去写代码、复现算法,不能把考试成绩当成自己真实能力的标尺。
根据《文科生转编程与他对大学教育的批判》,野生程序员自由飞的观点给我带来另一重思考。作者本身是非科班出身,他指出国内部分高校计算机课程设置陈旧,计算机科学和软件工程本身是两件不一样的事情,学校教育偏向计算机科学理论,但绝大多数从业者做的是工程方向的软件开发;同时他提出本科的计算机知识完全可以依靠自学获取,并且招聘时愿意优先接纳无计算机文凭但是实战能力强的开发者。但我也看到这件事的两面,一方面,这打破了 “只有科班才能做好开发” 的固有偏见,能力远比文凭重要;另一方面也不能完全否定科班教育的价值。非科班学习者可以靠实战积累工程能力,但底层计算机基础、操作系统、计算机网络这些硬核知识,如果完全靠自学,很容易出现知识碎片化,存在知识盲区。前人的经验提醒我,无论我是科班还是非科班出身,都不能躺平在身份标签上,科班同学不能坐等课堂喂知识,需要自己额外补充工程实践;非科班的同学,也不能只学框架工具,要主动补齐底层基础。文凭只是入场参考,持续的实践、主动学习、补齐知识短板才是程序员长期发展的核心。
综合两篇文章的经验教训,两条故事从不同角度指向同一个问题:计算机学习最大的陷阱就是被动式机械学习。刘帅作为科班生,困在课堂与考试的闭环;自由飞作为野生程序员,看到高校教育的部分短板。对我而言,不管身处哪种环境,都不能把课堂、课本、考试当作学习的终点,要主动区分哪些是理论知识,哪些是工程实践,主动动手验证,主动发现自己知识的漏洞,避免出现 “看起来学过,实际不会用” 的局面。
浙公网安备 33010602011771号