千里之行始于足下

准备

所属课程 计科24级56班
作业要求 第一周作业
作业目标 明确学习目的

我的github账号:Ajie8021

正文

一、自我介绍

我是24级计算机科学与技术(5)班的曾盈洁。我学得杂,接触过Vue3和Spring Boot,跟着教程走了一遍前后端,也用MySQL简单存了存数据,算是把"前端-后端-数据库"这条线大概跑通了。不过我目前还停留在学习的阶段,要自己从头搭一个完整项目还是很吃力的,好在算是对一个网站运作有了点概念,不再完全是个黑盒了。我这人经常是三分钟热度,所以没什么特别擅长的技能、才艺。

二、现状、经验和计划

1、我与计算机

在高考前,我是很少接触计算机的,更别提编程了,只有在信息技术课上才会接触,不过课时实在太少,老师也讲得匆忙,我听得一头雾水。那为什么选择计算机专业呢?一方面,在接触之前,受影视作品影响,我对这个专业有一层炫酷的滤镜,比较向往;另一方面,我是听说工科前景比较好,在填志愿时都填的工科专业,滑倒哪里就算哪里了。
真正了解这个专业以后,我才发现,这个专业从知识量、熟练度的层面上看,真是太难学了;但是由于其资源很多,前人又多“好为人师”(非贬义),再加上这两年风靡的AI技术,又意外得好上手。所以,诚然我比较迷茫、资质平平,也多少学到了一些技术和技能。然而离成为一个合格的 IT专业毕业生,我在专业知识、技能、能力上还有很长一段距离?
对照我们老师提供的技能调查表,细细比较过后,由于实践经验不足,我很遗憾地发现自己暂时还在“理论认知”阶段。我是个比较急躁、贪心的家伙,一学期对我来说太长了,寒假也该找份实习了,所以很希望通过后面课内课下的学习与实践,能较快地进入“独立实践”阶段,并在课程结束后来到“一人全栈”阶段吧。

2、对课堂的认识

(1)对博文的看法

我认真读了一下老师提供的博文,也读了另一篇学生的思考。作为一名学生,我也有观察到,班级里在课堂有认真听讲的学生人数是相当有限的,特别是所谓的水课。在读前面那篇博文的时候,我是感觉不太舒服的(可能是被刺到了吧),他的观点是有道理的,但是论证难以让我信服,感觉有点站着说话不腰疼的意思,有些地方更是脱离学生实际的泛泛而谈,全面否定了学生的独立意识和判断。后面一篇是从学生视角写的,可能也因为我是学生,所以比较能引起我的共鸣吧。

(2)师生关系

我在大学中体验过的师生关系,选修课的话,基本就是餐馆/食客关系了;之前加过课题组,是有点老板/雇员关系的感觉的;水课这些,基本就是路人甲/路人乙关系了;狱警/犯人这种说法有点夸张了,但确实见过有这种模式雏形的;而大部分专业课,应该都是健身教练/健身学员这种类型的吧。这门课的话,我是真想学东西的,所以很希望这门课是健身教练/健身学员这种师生关系?
如果老师布置的作业对你来说有些困难,你会怎么样?这里我选C————向老师和同学请教,花更多时间,把作业全部完成。(可能会更多地向AI请教吧,善用工具嘛)

(3)关于底线

引用文献,参考别人的资料时,肯定是要标记好出处的嘛;在别人工作的基础上继续开发,也要做好说明与指路。抄袭和剽窃,也就骗骗自己了。

3、职业规划

经过两年的探索,我打算未来做软件项目开发工作。

(1)已有准备:

说实话,我现在的准备还比较基础。主要是把后端到前端这条链路跑通——跟着教程学了Vue3和Spring Boot,用MySQL存过数据,也调过接口,做过简单的增删改查。虽然都是跟着敲,独立做项目还不太行,但至少知道了这些东西是怎么串起来的。另外平时会刷一些技术文章,B站也收藏了不少教程,但说实话大部分还没看完。总的来说,目前还处在“知道大概方向,但还没系统深入”的阶段。

(2)我的选择与特点:

我的选择是软件项目开发,也就是偏工程的方向。而据我所知,我的同学们有几种方向。有人死磕技术,往后端/前端深挖,刷题做项目找实习,走纯研发路线;有人对嵌入式、人工智能感兴趣,偏硬件或算法方向;也有人不打算做技术,准备考公、出国转专业、或者直接回家继承家业;还有少部分人走学术路线,准备保研读研搞科研。我的选择偏向软件项目开发,也就是做应用层的工程类工作。
优势:我学得杂,前端后端数据库都碰过一点,所以对软件的整体协作流程有概念。而且走的弯路比较多,排除了很多不适合自己的方向,研发意志比较坚定。
劣势:很明显————我没有深度。我每样技术都只停留在入门,跟那些已经能独立做项目的人比,动手能力差很多。

(3)我这学期的规划:
规划方向 具体行动与目标 对应能力维度 (参考技能表) 时间与产出
确定一个“最小可行项目” 选一个真正想解决的小问题(比如个人博客、课程笔记系统、班级工具),将功能聚焦在核心的“增删改查”和用户交互上。 需求分析、架构设计、模块实现 第1-3周:完成需求梳理与技术选型,确定项目范围。
以项目驱动,刻意练习“独立实践” 遇到问题,先自己观察,不行再求助AI或同学。每周固定2-3个晚上,专门用于项目开发,记录下每次卡住的原因和解决过程。 程序理解、模块实现、Debug、效能分析 第4-12周:迭代开发核心功能,每周至少完成一个独立功能模块。
有意识地补齐“工程化”短板 在项目开发中,强制自己实践以下动作,这正是从“理论”到“实践”的关键:①版本控制:每个功能都使用Git进行分支管理和提交;②单元测试:为核心逻辑编写简单的单元测试;③代码规范:遵守一种代码规范(如阿里巴巴Java规范),并使用格式化工具。 代码复审/规范、单元测试、版本控制、个人软件过程 贯穿整个开发周期。第8周左右,可以回顾并优化前期代码。
建立“学习-实践-总结”的闭环 每两周写一篇简短的技术博客,记录学到的新知识点、遇到的典型问题、下次如何避免或做得更好。 自主学习、呈现与分享、经验总结 每两周一篇博客。

4、本课程的计划:

(1)我对这门课的期待

说实话,在选这门课之前,我对"软件工程"的理解很模糊。我以为就是"写代码",最多加一点文档和流程图。上了一节课,我才感受到软件工程跟编程课完全是两回事。根据我的理解,编程课教的是"怎么写代码",而软件工程教的是"怎么把代码写好、写对、写持久,并且一群人一起写"。前者是手艺,后者是系统。
我对这门课程的期待是希望课程的实践性、实用性强一些。我不希望这门课只是"背概念、交文档、混学分",而是希望能真正体验到一个软件项目从0到1的完整过程,尤其是希望能学习到那些我平时一个人写代码时根本不会去碰的东西,比如需求分析、团队协作、测试、过程管理等。

(2)除我之外:

我也有了解过别人的学习方式,大概观察到几种不同的状态:
第一种就是当普通课应付的:上课听一听,作业交一交,期末背一背。过程文档随便写,项目能跑就行。最后拿个分,完了。这种状态很轻松,但我觉得浪费了这门课最值钱的部分,即真实项目经验。
第二种就是当成一次"正经做项目"的机会:选一个有实际意义的需求,认真做需求分析,按照规范写文档,用Git做版本管理,写测试,做CI/CD。这种同学往往会把课程项目写到简历上,变成找实习的筹码。
第三种就是做到完美,以便改进或拓展项目去参赛或者开源:把课程项目做到产品级,甚至结束后持续维护,发到GitHub上有人star,或者拿去参加比赛。这个我暂时做不到。
我的选择是第二种——把这次课程当成一次"正经做项目"的机会。不求项目多牛逼,但求流程完整、该有的都有、自己能说清楚"我做了什么、怎么做的、踩了什么坑"。

(3)我的打算:

结合我目前的水平(L1理论认知 → 目标是L2独立实践),我给自己定了三条原则三个具体产出
三条原则:

  • 不划水——既然选择做第二种,就不搞"挂名组员"那一套,至少自己负责的模块要写清楚、跑得通;
  • 不逞强——遇到不懂的就去问、去查,不硬撑。但也不当伸手党,先自己想/查30分钟;
  • 不交"纸面作业"——文档要有,但代码不能糊弄。宁愿功能少一点,也要确保它是真的在跑,不是"感觉能跑"。

三个具体产出:

  • 一个完整的、能跑的项目——功能不一定多,但从需求到部署,全链路走通。;
  • 一份诚实的过程记录——记录卡住的地方、怎么解决的、花了多长时间。这份记录比完美文档更有价值;
  • 一次正经的团队协作体验——学会用Git分支、学会Code Review、学会跟人商量接口怎么定。

时间上的打算:
每周课后固定留出5-8小时给这门课,不堆到最后一周;有疑问及时解决,不攒着;每次做个简单的记录,避免遗忘。

(4)代码量:
已写代码:

我目前的代码量大概在4000行左右,主要内容如下:

语言/方向 大概代码量 说明
C语言 1000~1500行 主要是课设吧,认认真真做的
Java 800~1200行 课程实验以及跟着学写的Controller/Service/Mapper
HTML/CSS/JS 800~1200行 页面结构、样式、交互等
Vue3 600~800行 组件、路由、请求
SQL 约100行 简单的建表和增删改查,还不太会用
Python/其他零散 300~500行 小脚本、课程实验等
合计 2800~4100行

这个量不算多,而且很大一部分是跟着教程和课设要求完成的,独立设计的代码占比还不高。但至少说明我已经有了一些编程的手感和基础,不是完全零起点。

入职一流公司所需代码量:

这个问题好像没有标准答案,但我了解下来大概是这样:

一流软件/互联网/AI公司(校招):没有硬性行数要求,但有实际项目经验是基本门槛。一般能拿出1~2个完整的项目(单个项目2000~5000行不等),加起来5000~10000行的独立/主导代码量,算是一个稍有点竞争力的下限。关键是质量,即代码规范、有测试、有文档、能跑通,比单纯堆行数重要得多。

从事高校教学科研:这个路线不靠代码量取胜,靠的是论文、理论功底和研究能力。代码更多是验证工具,量不一定大,但需要深度——比如能复现顶会论文的实验、能写出高质量的算法实现。如果走这个方向,代码量参考意义不大,更关键的是学术产出。
当然,我现在的水平离这两个目标都还很远,还是先把这学期的项目做好再说吧。

学期计划:

我计划的时每周投入 6~9小时(包含上课时间),你前面提过,你在前两年浪费了很多时间,现在要发奋赶上,请问你打算,自然要比以前的课稍多投入一些(C),或者可能要多投入很多(D)。总之,只要能达到我的目标,多花点时间精力我也是很乐意的。具体的代码量目标如下:
总目标:2500~3000行
这是自己独立/主导写的、能跑通的代码,不算复制粘贴和AI生成的。具体包括:

  • 课程大项目:2000~2500行
  • 课程小项目:500行左右
  • 每周目标:150~200行

按15周计算,平均每周完成150~200行。这个量很少了,后面会根据我的实际情况相应上调的。

WOOP计划:

Wish:在这门课结束的时候,我要完整地做完一个项目——从需求分析、数据库设计、后端接口到前端页面,全链路自己/主导参与,最终能部署上线、真实可访问。项目功能不复杂(比如个人博客、课程笔记系统、或者一个小工具),但流程必须完整。

Outcome:如果这个愿望实现了,最好的结果是:

我终于有了一个能拿得出手的项目,不是"跟着教程敲的",而是自己设计的、自己填的坑。写到简历上不心虚,面试的时候也能从容地说"这个项目我做了什么、遇到了什么问题、怎么解决的"。
经此一役,我对整个软件开发的流程应该也有了切身的体会,不再是一个旁观者。以后看到一个新的框架或工具,能做到心里有底:"我之前做项目的时候接触过类似的东西"。
当然,最重要的是,我会相信自己能独立做成一件完整的事,这种感觉,应该会比学了多少个框架都畅快吧。

Obstacles
回顾我过去的经历,我感觉最可能阻碍我的有这几件事:

内部障碍

  • "三分钟热度":一开始热情高涨,过两三周就动力下降,项目搁置;
  • 遇到Bug就烦躁:卡在一个问题上超过1小时,就容易产生"算了不做了"的念头,然后去刷手机逃避;
  • 完美主义拖延:总觉得"我还没准备好""我基础还不够",迟迟不敢动手写,一直在"准备"。

外部障碍

  • 其他课程/事务挤占时间:我这学期还有别的课和作业,还要处理学生工作事务,忙起来就容易把项目往后推,推着推着就烂尾了。
  • 缺少督促:以前一个人写东西,都是没人催没人问,放弃了也没人知道,真的全靠自觉自律了,真磨人啊。

最可能导致我失败的因素
如果最后没学好,最可能的原因大概会是在遇到困难时选择了逃避,而不是面对。比如某个功能写不出来,然后就先放一放,一放就是两周,最后不了了之,经验之谈了。

P - Plan

if…… than……
如果某个Bug卡了我超过20分钟 那么我就关掉编辑器,拿纸笔把逻辑画一遍,或者在群里/Stack Overflow上把问题描述清楚。描述问题的过程本身就是一种思考。
如果我想"今天先不做,明天再说", 那么我就告诉自己:只写10分钟,写完就看会儿小说。10分钟通常能进入状态,如果真的不想写,10分钟后放弃也不亏。
如果我开始刷B站/刷手机逃避, 那么我就站起来离开电脑,去接杯水或下楼走一圈,再回来。不带着"负罪感"继续刷。
如果某周被其他事情挤占,没有完成代码量目标, 那么我就周末补上,哪怕只写50行也行。不追求"完美达标",但要保证"没有断档"。
如果我觉得"我基础太差写不出来", 那么我就把大任务拆成更小的任务——比如今天只写一个接口、只配通一个路由。完成一小步,比纠结"我什么都不会"有用。
如果项目做到一半动力下降, 那么我就把项目跑起来,看一眼自己之前做好的功能,恢复一点"这东西是我做的"的成就感,再继续。

三、阅读与疑问

时间有限,我只阅读了《构建之法》第16章的内容,问题记录在随笔五点思考中。
老师在教学过程中会要求我们填写对课程的反馈,这种时候,我会有问题就问,至少一学期提三个问题,认真按时填写反馈(C)。毕竟这事百利无一害嘛。

四、前车之鉴

老师推荐的博文,我大部分都点进去看了,个人比较喜欢你是否也觉得自己是科班,但没学懂计算机?.net程序员工作两年总结这两篇。
读完这两篇文章,我最大的感受是:原来,站在这个路口的时候,不止我会迷茫和挣扎
博主刘帅是名校科班出身,却说自己“迷迷糊糊、庸庸碌碌”;博主荆棘人是半路转行,在培训班里学起来手足无措。他们走的路不同,但是隐隐又有些相通之处,给此时前途黯淡的我以一些启发。这些教训,对现在正处在大三的我来说,就像平行时空的一个投影。

启示一:“认真听课+完成作业”不等于学懂了

刘帅说自己本科阶段“总是认真听老师讲课,机械地在迷糊中重复着作业、考试”,我发现我的状态和这个描述有点像(人家是自谦,我不是,也没人家优秀就是了)。他这段话像一盆冷水:

像高中阶段一样,只学习那一点点可怜的上课讲的知识……课后的作业基本是独立完成,却很少主动地思考、从各个可能的角度出发寻找到解决问题的方法;
他拿数据结构的例子让我很警醒:老师“用最肤浅的知识,‘成功地’告诉了我们‘数据结构’是门几乎不用动手写程序的课程”。我之前上专业课也是,经常是干巴巴地听讲,anyview上的作业和实验作业也是凭感觉写的、问AI的、参考前人的,结课后脑子里相关的知识就清空了。我以为自己学了,其实只是“过了”。

他后来在清华旁听朱仲涛老师的课,被“震撼”了——朱老师现场从零写代码、把各门课知识串起来讲,这才叫“学懂”。这也让我意识到:我现在的学习,如果还只是停留在“看教程、敲demo”,那和课内学习、和博主当年“拿奖学金但没学懂”是一样的。区别只在于,他当年没有意识到这个问题,而我现在知道了。

启示二:“出来混,总是要还的”——欠下的基本功一定会被惩罚

看到博主放在博文里的技术问题,我很难答得上来:
“lucene的文件索引怎么实现的?”答曰,没看过。“如果不用lucene,你怎么办?”……“你觉得自动化测试框架怎么设计?”……“Junit哪些地方不好?”以及“聚集索引和非聚集索引的区别”“垃圾回收的原理”“Lucene.net索引的结构”……看得我心头一跳,因为基本上每一个问题,我都答不好。

面试官问的全是“底层原理”和“为什么”,而不是“你怎么用”。这不就是对我这种“会用但不懂原理”的人的盲区的精准打击吗?我现在用SpringBoot,也只是知道怎么写Controller、怎么调接口,但Spring Boot本身是怎么工作的?它的设计思想是什么? 我一概不知。

荆棘人虽然走的是培训路线,他说:“知其然不知其所以然,这是我一贯的问题,NB的公司总是问到我的软肋。”我知道我也是这样的。
看来,我不能只满足于“能跑通”,必须追问“为什么能跑通”。 否则,将来面试时,像这样被直接问到软肋,怕是要直接崩溃吧。

启示三:编程是技能,不是知识——看会了不等于学会了

荆棘人的经历最让我有共鸣。他写道:
“学编程如果没有老师,上来就学那种纯视频引导的课程容易走上歧途……没有经验的人很容易就卡着学不下去了。我也不能幸免,我卡住了,我卡到了2012年底。”
他以为“看懂了”就是“学会了”,结果在事件、委托、多态这些地方卡了半年。他总结说:
“编程不是高中背书,不是做数学化学题,它是技能,是需要大量练习和长时间实验感悟的。”

这句话对我太有用了。我学技术,难道是“看视频、跟着敲、能跑通就过了”吗?荆棘人用一年的痛苦告诉我:“看懂了”和“会用了”之间,隔着无数个Bug和无数次重写的天堑,如果不自己动手实际地投入项目、不自己踩坑,那永远只是“见过”,不是“会了”。

启示四:别一个人闷头学,要交流、要问人

刘帅回顾本科时,特别后悔自己“不合群”:
“不懂的时候,不管任何时候,你都可以去问老师、同学,从而节省大量的时间和精力。我们必须在年轻的时候有意地培养自己独立思考的能力……也要与人交流、沟通。”他大学四年几乎不与别人交流,结果走了很多弯路。荆棘人在培训班因为老师离职、网速差、没人指导,也陷入“卡住-放弃-更卡”的恶性循环,浪费了近一年。
我现在虽然不至于完全不交流,但也很少主动去问老师或同学——怕显得自己问题太蠢。但看了他们的教训,我觉得问“蠢问题”的成本,远低于自己闷头走一年弯路。

我的行动清单

读完这两篇,我给自己列了几条马上能做的事:

  • 不做“只听课不思考”的学生:每学一个技术点,至少问自己三个“为什么”——为什么用这个?不用行不行?它底层怎么实现的?
  • 这学期必须自己完整做一个项目:不是跟着教程敲,是从设计到代码到部署,全部自己来。哪怕功能很简单,也要走完整个流程,把“会用”变成“真会”。
  • 每周留出固定的动手时间:不能“今天学4小时,然后一周不碰”。荆棘人的教训说明,技能需要持续练习才能形成“手感”。
  • 主动去问:遇到卡住超过1小时的问题,先自己查,查不到就去问同学或老师,不再死撑。
  • 开始积累“为什么”的答案:别人面试遇到的那些底层问题,我现在答不上来,但可以每周弄懂一个,写在博客里,慢慢积累。

最后,两篇文章的结尾都让我有些感触。刘帅说“不要欠生活,不要欠工作。出来混,总是要还的”;荆棘人说“编程并不像宣传的那样,三个月就可以学会,不可能”。这些话听起来很朴素,但由他们用几年的挣扎讲出来,分量是不一样的。

我现在大三刚开学,还来得及。他们的弯路,就是我的路标。不重复他们的错误,从中汲取经验,也算不小的收获了。

posted @ 2026-09-06 19:40  这一剑  阅读(7)  评论(0)    收藏  举报