问题 1:关于当初

曲折的起缘。
我接触电脑的机会不多,高中之前即使接触也只知道用电脑来看视频打游戏,却从来不知道这个大盒子是怎么运行的,也没有思考过。高一的时候曾经有计算机竞赛培训参赛的机会,本来想去,却因为当时种种眼花缭乱的社团活动绊住了,最后并没有去。
高考之后虽然仔细地读了专业说明,但是依然很茫然,填了个 公共管理专业。对,这是一个主要学文的拿管理学学位的专业,一个混进文科生堆里的理科生。因为我是理科生,布置寝室时,室友们一致让我去组洗衣机,装路由器,调无线网,她们不知道为什么,好像看着这种带电的东西就觉得复杂,都不敢动手。其实我也一点经验都没有,赶鸭子上架,扒拉着说明书仔细看了,搜了一下各种资料,拉线拨号,电信的安装师傅过来时我们已经弄好了(●—●)。一开始也没想着会学计算机软件,只打算在本专业好好学习,可是当时出了一部很棒的电影——Baymax(超能陆战队,也就是众所周知的大白)。我不由自主地被其中萌萌的大白吸引,想着要是能有个大白(●—●)就好了。正巧,管理学上老师要求我们看了一部纪录片,叫做《互联网时代》,讲述了网络从诞生到日益蓬勃的一段发展史。这部纪录片立足国际,纵览古今,介绍了创造互联网的那批睿智伟大的科学家,深刻探讨了互联网对人类社会发展的影响,也提出了许多关于未来的恢弘设想和互联网的种种隐患,互联网的奇妙,科学家们的探索精神,深深地震撼了我。更巧的是,我们的政治学老师的课讲得特别索然无味,于是,在学期中的时候,我就做了一个重大的决定——转专业。认真地复习了数学和英语,通过了笔试,经过软院老师的面试,就来到了软件学院。

大一下,刚刚来到软院,课程设置都是一些高数大物离散等基础学科。转专业考试成功后,觉得要好好学习,退出了大一上加入的所有组织。却好像突然失去了目标,加上在文科专业的学习节奏比较轻松——主要是看书讨论,而且大多是开卷考试。大一下十分懒散,作业也没有认真完成,考试时靠着高中的底子,考了一个当时年级上还算靠前的成绩。可是到了大二上,开始补修所有大一上我没有上过的课,软院大一上的课,我之前的专业几乎都没有上过,全部都要补修。而大二上还要开始上面向对象程序设计和数据结构这样很难的课,可是我当时连 C 语言都不会,只会一点 VB。然后各种磕磕碰碰……一把辛酸泪,就不多赘述了。大三上因为身体原因,休学了一年,在家里打针吃药静养,同时也看了一些书,写了一点代码。

目前看过不少方面的书,编程语言方面,谭浩强之流就不说了,《C 语言程序设计 现代方法》,《C 和指针》,C++ PrimerEffective C++Effective Modern C++,《STL 源码分析》,Java 白皮书,Effective Java,最新的第 3 版也正在看。Python 教程、爬虫、各种相关文档 Flask、Django、MongoDB、实战等方面的书、HTML/CSS/JavaScript、Objective C 和 Swift 的各种书,各种语言的函数式编程,并行编程等等相关的书。 著名的算法书我基本都买了,也没有都看,看的最多的是普林斯顿的那本《算法》第四版。还看了《设计模式》、西瓜书、《统计学习方法》,DeepLearningArtificial Intelligence a Modern Approach ,《编译原理》等等乱七八糟的书。有些只是粗略地翻了翻,好多东西都不记得了,好多东西都没完全弄懂。有些书,虽然看的时候非常认真,也努力实现了书上的代码和项目,做了详细的笔记,但是好多细节还是忘记了。所幸看过的书,非常仔细思考过的地方(当时可能花了不少时间才弄明白,觉得自己好笨啊十分挫败)还是能再要用到的时候及时想到,看到别人写代码时,对一个问题不知道该怎么办,或者用比较复杂的方法来解决,我却能用这个知识很顺利地解决,感觉还是十分开心。做过的笔记,自己写的总结博客在我遇到类似问题的时候能帮到我良多。

许多书和实践之间还是有不小的鸿沟,于是我也在网上看了不少图文、视频教程,有免费的,也有付费的。做过小型的网站,各种各样的爬虫,简单的小游戏,移动端的简单应用,都尝试着做过。可是有些东西,我边学边做,没有做好笔记,现在再做,可能就得再重新看重新学。

最复杂的还是上学期写的前端后端完整的编译器。用 JavaCC 处理了前端,基于 GNU 风格的汇编语言,编译出的程序可以在 32 位的 Linux 平台上运行。对语言设计和编译器有了更深的了解。

博客C[1] 的作者认为:

结语:非没用,兔子洞

总的来说,面试也好,考研也好,写论文写好,之所以能够比较顺利,我觉得都是大一大二一个键一个键敲出来的,也是大三一本书一本书读出来的。我写这篇文章的时候,把相关的前因后果放到了一起,是为了解释有些事情的前因后果。不过我不想给读者一个误解,即我恰好运气特别好,一路直行没有任何弯路。相反,我觉得我走了不少弯路,但是我很高兴走这些弯路。

作者通过自身的努力,虽然走了不少弯路,却在考研、工作、出国每一条路上都取得了不错的成就。说实话,对于这种“普遍撒网”的做法,我觉得不同的人还是需要采取不同的策略。要根据自己的能力,尽可能地取舍。

时间和精力是十分有限的,有些人的确可以什么都做得很好,或许是因为的确天赋异禀,精力充沛,大多数还是因为有着多年的经验积累。也有各种各样关于时间管理和自我管理的书籍和课程,号称能够教会你去在多有限的时间内完成多了不起的事情。我也学习过一些,比如李笑来老师的《把时间当作朋友》等。可是这些东西毕竟都是别人的做法和经验,能学到好的方法,可当自己真正亲身实践起来时,却依然阻力重重。

设定的目标很远大很好,但是自己的能力和精力却不一定能够胜任。长此以往,很容易产生挫败感和厌倦。其实我在作者的文中也读到了这一点——“自卑”与“自负” 的交缠。

那么,我们应该如何设定自己的目标,如何在大学里分配自己的时间和精力来达成自己的目标呢?

  1. 首先,定一个大目标,然后分解为许多小目标,尝试着在规定的时间内完成前几项小目标。
  2. 检查前几项目标的完成情况,估算自己的能力和精力完成总的目标需要多久,来不来得及,或者可不可能去达成更大的目标。根据这些反馈,及时地调整目标,设置一些缓冲时间。
  3. 如果达成目标,可以在缓冲时间里好好放松、休息。
  4. 反复循环第 2、3 步,直到完成那个大目标。

注意事项:这里面最关键的就是调整目标和努力达成目标。很多人(也包括我)总是错误地高估自己,喜欢设定一个很高的目标,觉得自己不需要休息,可以完成,结果往往十分糟糕。承认自己没那么厉害,是一件很难的事情,可是必须得承认。当小目标完成得不尽人意时,要勇于面对自己的不足,勇于面对自己的能力的缺陷,分析清楚原因:是因为没有努力,不够专注;还是目标对于我真的太过艰难,实在完不成;还可以通过各种途径,找同龄人或者前辈寻求一些帮助,如果的确是这个问题本身非常难以解决,又不是那么紧迫,可以先做好记录,放下,过一段时间再回过头来解决。不是简单地扔下不管,要做好记录,以免日后又得重新开始。一定要根据小目标的情况来及时调整自己的状态,张弛有度,才能长远。

博客C[1] 的作者是一个非常勤奋、非常热爱思考的人,特别值得学习,用这种勤奋努力的态度,去专注地走好每一步,努力达成每一个小目标。哪怕真的最后没有达成最初设定的大目标,也能够较好地达成许多小目标,也能有不小的收获,不至于太过挫败,也能少一些遗憾。或许总有一天终会失之东隅,收之桑榆。

问题 2:关于未来

工作?读研?
现在也可以找一份开发的工作,可是我还是想继续深造。今天找辅导员咨询了一下,她也建议我继续深造。她说也许能保研,如果不行的话,大概就会努力考研吧。
如果考研的话,优势是,各项科目的基础还可以,现在复习基础知识也应该能比较容易上手。劣势是第一次考研,对考试的题目不太清楚,要多多限时训练来做好充分的准备;我有时候题目做不出来就喜欢死磕,这样非常浪费时间,会耽误复习进度。可是,考研数学,数据结构,这两门在复习过程中必然会遇到不会的题目,是坚决不看答案和题目死磕吗?那复习进度赶不及怎么办呢?我的想法是,限定 15-20 分钟去思考这道难题,如果还没有一点思路,那就放弃,仔细学习答案,了解自己究竟是什么地方不足,努力补足,并且做好错题的整理归纳,定期复习。在接下来的十个月中,好好按计划逐步复习,同时每隔 2 周对自己进行阶段检测和评估。同时,吃好睡好锻炼好,健康的身体是革命的本钱。

博客B[2] 的作者说到:

考研的结果,我进了清华大学软件学院。但仔细回想考研的过程,我却依然没有摆脱思维的局限——以机械记忆为主的学习方式。也许是我觉得时间太宝贵,也许是真的连思考的时间都没有了,我每看到一个题目,总是会先看答案,让答案来指引我的思路,而不是用自己的脑子想问题。
这种学习方式在短期内的确会取得很大的成果,但却贻害无穷。长此以往,会使人丧失判断力、理解力和交流能力,只留下可怜的记忆力——这样的人难有大成。这样的学习方式会使我们的思考方式沦为简单地重复和机械地回忆,胆子变小,创新力几乎丧失——对于计算机这种快速变化和要求很高的学科来说,显然没有什么价值。

我个人不太同意他的观点,我认为创新和独立思考固然十分重要,但快速学习前人的经验和做法也不失为一个好方法

我以前很喜欢自己闷着独立思考问题,做事情也希望能非常有新意、特立独行。在学数理化时,在社团里写新闻稿时总是这样。也自己独立设想和推导一些数学物理化学结论,与先贤们不谋而合。为此曾经十分自得,就没有静下心好好地学习一些基础的东西,很多知识不够扎实。好高骛远,思而不学则怠,有问题自己不吭声,独自想,也不想去查别人怎么做。却没有办法解决,非常挫败,浪费了很多时间,吃了很多亏。计算机界也有一句话叫做“不要重复造轮子”,这些经验,前人往往花费了许多时间精力,才将其整理出来,有时我们并没有这么多时间精力。只要自己好好地思考了,理解了,会了,就可以直接拿来用,可以节省不少时间。当然,如果时间充足,目标明确,就是要深入钻研这方面的东西。不妨先独立思考,不过我们在短时间内独立思考得出的成果,往往都不成熟,与前人的成果比较,这样更能发现自己各方面的不足,如果能在前人的基础上能够有所创新,有所提升,那就更好不过了。先从模仿开始,取长补短。

问题 3: 关于当下

我觉得软件工程这个专业还是挺不错的,可以比较快地编码实现自己的 idea,很少专业只需要电脑和网络就可以完成这么多事。就专业技术和能力而言,目前是什么都知道一点,但都不深入的吃瓜群众。已经具备的专业知识就是软件的一些基础知识,比如数据结构、操作系统、组成原理、编译原理等,会一点网站、移动端开发,还会一点机器学习和数据分析。

四月中旬前把买来的没看完的算法书都看完,算法都尽量实现一遍,不然对不起买书的钱啊嘤嘤嘤。
不足主要是网络方面,现在正在上这门课。以前只是用各种已经写好的关于网络的工具、API 等,遇到问题就搜一下,对其中的原理不太了解,也没有系统地去了解过。正在看《图解 HTTP》,希望这周能看完《图解 HTTP》,这个月看完《HTTP/2 基础教程》,《自顶向下方法》,有时间的话《HTTP 权威指南》大概看一下吧。五月份的时候看能不能仔细分析一下 request 和 you-get 的源码。

之前因为电脑的原因,个人博客里好多博文还在开天窗,要在 4 月中旬之前整理好,还有之后的一些笔记,也要尽快整理好发布。

博客 K[3] 的作者认为:

个人的职业规划就像软件工程。我们都知道软件项目最大的敌人是需求的不明确和需求的大面积变更,同样,在个人的职业规划中,自我需求的不明确和需求的变更也是非常危险的,尤其是在职业计划实施了四五年后需求的变动和改变。只有需求确定以后,才谈得上个人的职业设计的HLD(High Level Design)和LLD(Low Leave Design),以及具体实现。此后随着自身的日益成熟,可以随时为自己的Bug打补丁(Patch)改进自己的职业生涯的设计和实施细则(Enhancement),并为自己加上更多更强的能力(New Feature Requirement)。最终达到软件版本的升级。

我不太赞同,能明确自我需求,并且矢志不移,当然很好。可是人生很长,社会的变化也很快,一个人究竟想干什么,想成为怎样的人,真的能一开始就像客户要求的软件一样明确地确定需求吗?。比如诺贝尔物理学奖获得者,杨振宁,曾经非常想成为一个实验物理学家,曾经花了 20 个月在实验室,他的实验却依然经常爆炸。他不得不痛苦地承认自己的动手能力不够好,转向理论物理研究,在理论方向取得巨大的成就。我认为,无论一个阶段想做什么,尽力去做好,如果真的不行,也要勇于放弃沉没成本。

我也曾经在一次交流会上问过一个 Alphabet 的技术主管,我说我一开始对计算机什么都不懂,于是胡乱冲撞,什么都看了点,但是都不深入,我应该需要选择一个方向深入发展学习,可是选择困难症,实在不知道选哪个方向,应该怎么办?Orz。他安慰我不要着急,本科阶段没有深入学习什么东西也不要紧,多开阔视野,打好算法基础,在读研究生的时候,再选择一个方向深入也很好。虽然他也没有解决我的问题,也算是缓解了我的焦虑,而且随着学习的过程,我也慢慢地明确了自己想做点什么。

问题 4: 关于课程

我印象最深的课程是 Princeton 的算法课,讲课的老爷爷好像是红黑树的发明者。这门课除了讲解算法外,在每一章节的开始,还介绍了各种算法的实际应用。考虑到了从了解算法导实现算法之间的鸿沟,从原理讲到实现,简明清晰,还有 Stanford 的 iOS 开发课程,这个就不用说了,老爷爷从来不讲废话,编程演示都很清楚,重点突出,走过路过不可错过的 iOS 课程。希望老爷爷身体健康,还可以再追他的课。

科班出身与速成的培训之间最大的区别,在于整个计算机科学体系的知识是否完整,和你的同学是怎样的人。
我个人认为速成的培训班的课程往往是一些面向实际开发的基础知识的课程。为什么要强调基础呢?因为速成的知识,往往不足以支撑和解决大型系统中的复杂问题。可是,实际这些问题科班出身的人也未必能立即解决,但是他们有着更丰富的知识体系储备,学习起来可能更得心应手一些。

博客 E[4] 的作者认为

我觉得一个正常的程序员,是不应该去参加培训的。更何况,培训真的没有什么用。 多半都是想走捷径,不劳而获。 而若要好好走好职业道路。 在走出大学校门的那一刻,应该学会自我成长,自我完善。

所以培训真的一无是处吗?一个门外汉真的不应该参加培训吗?我觉得因人而异,如果是没有一点经验的人,参加培训,认真努力地学习入门还是没问题的。实际上,科班学生上课,也只是入门而已。现在的网络十分发达,许多学习资源唾手可得,培训入门后,查一查网易云课堂上大学计算机的体系,跟着再继续努力学习,如果能坚持下来,知识储备方面,也不会比科班学生差。而且网络上还可以接触到许多世界一流大学的课程,和各种最新的开发资源,个人努力才是最重要的。

问题 5: 关于师生

博客 N[5] 的作者提出的

说了这么多不好的例子, 我心目中理想的师生关系是什么? 是 Coach / Trainee (健身教练 / 健身学员) 的关系。

我非常赞同,可是我明显感觉到,可能因为大学老师职称评定的标准和教学并没有什么关系,有些老师教学有些敷衍,并不是一个合格的教练。当然,大多数老师还是很尽职尽责的,我希望我也能努力做一名优秀的学员。

EOF


吐槽一下博客园的 Markdown 解析,] 这样的符号必须转义,不够健壮。

另外,用了 Markdown 还把长链接放在引用列表里,有一丢丢不优雅 Orz。

还有这个主题……


[1] https://book.douban.com/subject/4006425/discussion/22802960/
[2] https://book.douban.com/subject/4006425/discussion/22803961/
[3] http://blog.csdn.net/haoel/article/details/1688104
[4] https://www.cnblogs.com/geniusalex/p/4928713.html
[5] http://www.cnblogs.com/xinz/archive/2011/05/16/2048044.html

版权声明:本文为vectorlu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/vectorlu/p/8530291.html