软工热身作业
内容 | |
---|---|
课程 | 软件工程 |
作业要求 | 热身作业 |
课程目标 | 学习一个“足够好”软件的开发迭代流程 |
作业帮我实现目标 | 认清自己,理清方向,制定规划 |
第一部分:结缘计算机
-
你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢?(必答)
直接原因是我在高三看了一部电视剧,男女主角都是计算机专业,觉得这个专业很潇洒。
兴趣确定方向
作为一个理科生,我面临着理和工两大方向。我的兴趣是从事实践类的工作,我喜欢从自己的作品中积累成就感,所以选择了工科。而计算机专业最吸引我的部分,也就是如此。当我看到自己的程序实现了特定功能,或是搭建起一个系统的雏形时,我有一个深刻的感觉——计算机技术能构造出另一个世界,而程序员是这个世界的工程师,掌握计算机技术就是掌握了改变世界的钥匙。
成绩决定专业
我的高考成绩正好够上北航信息大类,它也是我的第一志愿。顺利进入信息大类后,在大一结束时我做了第二次选择,从计算机、软工、电子信息、网安四个方向中选择了计算机。年级中流行着一股风气,很多竞赛大佬都选择了计算机专业,成绩好的同学削尖了脑袋往计算机专业钻。而我成绩能上计算机,不太清楚计算机和软工的实质区别,就选择了更传统的计算机专业。俗话说当你不会做选择时,就应该去更多学科的基础专业,那里发展更开阔。就像我选择计算机,也还有做软工方向的余地。
自身条件
在进入计算机专业之前,我人生中没怎么接触过计算机。可以说我起点较低,没有形成自己的大局观和方法论。好在所有专业课没有门槛,认真看书敲程序是不会落后的。这两年半的经历告诉我,我有一点重理论少实践。数学类基础课单独每一门分数都很高,计算机硬核专业课理论部分学的很仔细,但是实验课申优困难。
像博客B博主一样,我也认为自己是没有学懂计算机的科班生。困境在于不能理解核心专业课之间的交叉和联系。举个栗子,访存这件事在计算机组成、操作系统、编译原理中都提过,侧重不一样,而我还没能形成一个整体认识。我欠缺教材之外的补充知识,需要阅读最详尽的原版大部头书籍。
跟博主们比
跟这些博主相比,我们最大的差距是他们拥有对计算机近乎痴狂的热爱,这份热爱可以让非科班出身的程序员晋升为行业大佬。不得不说博主成功是有原因的,博客C在校期间敲完《Thinking in Java》、《编程珠玑》的坚韧让我很钦佩,博客K自学了很杂很泛的知识再伴以实习中的应用,使他学习新的技术时可以触类旁通。很遗憾我没有体会过技术宅“瞎鼓捣”学会技术的成就感。但是我所处的学习环境是不输任何博主的,北航有一流的教授指导,有竞争激烈的同学,有挑战的程序设计课程。以后还是要充分利用环境,有意识的加强工程能力。
-
计算机是你喜欢的领域吗?是你擅长的领域吗?
我是喜欢计算机的,就像我之前说的,它作为工科的代表散发着独特魅力。但我在遇到不能突破的困难时,会变得焦躁。一个大佬很快就能解决的问题,不熟练的人连软件都会装了卸卸了装一整天,这曾经让我产生怀疑。
我觉得喜欢的情绪是需要培养的,在正反馈中会越来越喜欢,完成好的作品会激发我对计算机的喜爱,从而完成下一个。博客M一句话让我醍醐灌顶,
“如果要快速提高自己的编程水平的话,你必须总是去做一些你做得出来,但是难度大到只要再难一点点你就做不出来的事情。”
我正是需要用这样的项目来锤炼自己。
我对计算机没有达到擅长的水平。我作为科班生首先没有把核心专业课学通,能在自己搭建的CPU上跑自己的操作系统这样的程度才能算是通了。其次我接到一个软件类的项目时还不知从何下手,看见技术博客中的专业名词会犯懵。从这两层面,我和学懂之间的差距需要更大阅读量和独立思考来填补,在技术实践上欠缺的是勇敢尝试和经验。
-
你热爱这一专业吗?你对计算机的热爱是怎样的?仅仅是口头的吗?
我引用博客L中的话来定义热爱,
“很有热情,会因为专研某个问题,学习某个东西,尝试某个东西,达到废寝忘食的程度,而且以些为乐。”
我的热爱还没有达到这种程度。
比如大三上学期完成的编译器,优化编译器是无止境的。优化的过程我觉得很有意思,但我实现了常规的优化项以外,时间所剩无几所以就停下了,比我更热爱的人或许会熬夜继续优化吧。
-
你对你的大学生活有什么想要吐槽的地方吗?你理想的大学教育应该是什么样子的?跟学校给你的有什么区别?比较你在中国大学的经历,你的老师和学校能做到和国外那样吗?如果不能,请分析一下为什么。(必答)
吐槽
-
大学里面绩点的高低几乎影响着一切机会,所以很多人(包括我)选课的时候会很关注给分情况,毕竟不能为了此时学到技能不顾未来前程。尤其是一般专业课,很难按照自己原本的规划,成系统的选择贴合自己发展方向的课程。
-
大类招生把一群成绩优异的学生汇聚到了计算机系,内部又展开了更激烈的较量。有些课程严卡正态分布限制高分数量是不太科学的,因为大家都很优秀。
我理解的大学教育
我理解的大学教育是为学生将来从事的事业做铺垫的。现在学校教授给我们的知识跟企业需要的技术有些脱节,大部分是需要自学的。但这不是一两个学校的个例,而是普遍的矛盾。
我认为学校做到的
我目前感受到北航计算机系很棒的部分是计组、操作系统、编译、面向对象这些实验课,他们每年都在改进(变得更难)。老师在第一节课会给出国外大学的实验课安排,拿我们学校的对比,我们模仿和改良得比较成功。最终在紧凑的实验中,我们都能做出完整的cpu、操作系统和编译器。
跟国外学校相比欠缺的
-
缺少与发展前沿的交流,因为国外更容易请到学界最具影响力的大佬来讲座。我们学着基础的知识,对目前技术发展到什么阶段都没有太清晰的认识。
-
有些实践类课程不怎么讲实践。给我印象很深的是,吴恩达的deep learning课程,有很完善的在Jupyter notebook的练习资源,可以很快学以致用。国内一些专业课讲完没怎么提过实践流程,还要自己再学一遍。
-
-
迄今为止,你写了多少代码,描述你做的最复杂的软件项目/作业。(必答)
我一共写了万行级代码。
最复杂的项目是一个简单的编译器。这是我第一次用高级语言写出一个完成度很高的项目,每一行代码都不是借鉴的,开发周期持续一学期,用C语言编写。
另一个同样很复杂的项目是面向对象的表达式运算,实现到求导运算花费了四周,用java编写。
-
科班出身和北大青鸟有什么区别?
比较科班出身和北大青鸟各自平均水平的计算机人才,
-
科班出身有更多选择:
科班出身的人对核心知识掌握的比较牢固,北大青鸟的软件实践能力会强一点。基于这个特点,科班出身的人在计算机方向的选择不仅限于软件开发,从体系结构、并行计算到人工智能,在本科阶段都能找到理论支持。科班出身的发展不仅仅是进入公司从事研发,还可以投入科学研究。
-
科班出身视野更广:
掌握了体系结构、操作系统等底层知识,让科班出身的人可以从更宏观的角度思考和解决软件方面的问题。
-
-
速成的培训班和打基础的大学教育还有mooc之间有区别吗?
有区别。我认为数学等基础学科以及核心的专业课应该细嚼慢咽,知其然也要知其所以然,需要在大学中好好打基础。因为计算机的各门专业课之间有千丝万缕的联系,形成知识体系才能融会贯通。就像博客B中讲述清华朱仲涛老师的“数据结构”课,
“每遇到一个算法,一边写程序,一边讲解,不懂就将程序的运行结构拿出来分析,并不时地穿插离散数学、概率论、内存管理、C语言、汇编语言等知识,几乎将我们学到的东西非常恰到好处地拿出来,让我们从心里面觉得原来所有的知识是连贯的。”
我们还需要在扎实的核心知识之上,通过观看mooc或参加培训班迅速学会新的技术。新技术往往更新迭代很快,我们也要持续学习。而且多数情景是,往往先有项目在手,发现还要为此掌握一些新技术,需要在几天之内会用,而不必精通。这时靠网课速成是很合适的。
-
学线性代数和概率论的时候,你是否有过这样的疑问“我们为什么要学这么多数学,这和我们的计算机有关系吗”,你现在是否还有这样的疑问?对这个问题,你有自己的解答了吗?那么其他学科呢?
我现在没有这样的疑问了。因为我在看深度学习的论文中见到大量矩阵运算的公式,需要复习线性代数才能看明白。神经网络反向传播的求导运算,需要高等数学知识。而数学建模中的模型也会用到微积分,大学物理,和概率论的知识。
数学是计算的工具,一切理工科学的基础,有这个疑问是因为仅仅接触程序的时候没有触及复杂数学知识,应用计算机解决实际问题的时候很容易碰到。比如,很多计算大规模宇宙问题的科学应用的算法并不是最优的,于是碰到性能瓶颈,而简化算法需要数学本领高强的人推导大量公式。
第三部分:未来规划
-
对于你未来在IT行业的发展,你有什么样的梦想或者未来想从事什么样的工作?你准备怎样来规划你技术道路,职业道路和社会道路?(必答)
我的梦想是参与到家喻户晓的软件的研发队伍中去,未来会到企业中工作,具体职位现在也说不清。
我详细的规划如下,
-
大三保证课内学习的基础上,参加实验室实习锻炼科研能力,积累一定资本;
-
大四参加企业实习熟悉企业的工作方式和节奏,申请国外研究生,课余时间通过阅读算法的原版书籍强化算法;
-
出国读研究生的时候,快速吸纳新技术,尽量在国外企业找到毕业后第一份工作;
-
在外锻炼一段时间回国内发展。
-
-
你对于实现自己的梦想已经做了或者计划做什么样的准备?
为了申请国外的学校,我花很大努力保持住了绩点,额外时间几乎都花在准备英语考试上面。
我参加过一次并行计算方面的比赛,确认了自己并不适合这个方向,随后加入了校内计算机视觉的项目组实习。在项目组摸鱼阶段掌握了快速阅读论文,以及论文写作的方法,但提出问题的能力和实践的能力没有得到太大锻炼。大三下半学期,如果还有科研机会我会更注重提高实践能力。
-
你们马上就要面临实习了,你打算在企业内实习还是在实验室实习?
我打算都尝试一下,大三在实验室实习,大四到企业内实习。我最终是想要去企业工作的,因此在工作前应该了解企业是不是真的适合我。但是本科阶段,在实验室实习更方便,而且申请研究生时更被重视,所以毕业前在实验室实习为主。
-
实习经验究竟有多重要?是否需要马上开始积累实习经验?
我认为实习经验和本科学习是相得益彰的。学习成绩好更容易得到好的实习机会,实习经验反过来对我们的学习有指引的作用,让我们知道哪些东西是需要熟练掌握的,最应该打好基础。有些技能,在我们按部就班地学习之前可能先在实习经历中接触到了,那个时候会感觉游刃有余。习惯了实习中的焦头烂额,就不会觉得课内学习特别困难了,自学会变成一种习惯。
计算机专业的实习经验很重要,尽量从大三开始关注实习消息,积累有效果的实习经验。但是课内的学习更重要,实习应该在力所能及的范围内适可而止。
博客 | 链接 |
---|---|
博客C | 徐宥:掉进读书的兔子洞 |
博客K | 谈谈职业规划——CSDN对我的采访 |
博客M | 进入2012 -- 回顾我走过的编程之路 |
博客L | 对程序员职业的一些建议 |
博客B | 刘帅:在失望中寻找希望 |