问答 | 学习计算机饱受挫折,我该如何继续?

来自:寒食君(微信号:program_hacker),作者:寒食君i


最近有一位读者在微信上告诉我,虽然自己是计算机专业的学生,但是学习十分受挫,想要听听我的看法。

我让他聊聊自己的详细情况后,他写了两篇文档给我,一份是关于自己的计划和困惑,一份是自己大学这三年都做了哪些事情。我觉得他是非常有诚意地在提问,所以也写了两千多字来回答他。

或许你也有类似的困惑,所以我决定发表在公众号,希望能帮助到更多的人。

下面是他的一些具体情况的部分内容:

  1. 我的现状:

  • 专业课:
        应付上课及相关实验;课下自学一门C++的语言;对课上没有讲到的地方进行自学。
        评价:没有熟练掌握任何的核心技能;无法写出一个有一定功能的应用。实验耗时、大多不能完全掌握,不如混一点抄完报告了事。

  • 闲书:
        看公众号,浏览网页。
        评价:利于视野的开阔,但没有确定的回馈。

  • 英语:
        我对英语是真爱。家庭反对,但在认识到自己并不能在专业之余轻松地把英语学好之后,宁愿自己是英语专业(要求自己英语达到接近专业的水平)。
        评价:随性学习英语,其实体现了我还是倾向于凭喜好做事;我对计算机实验的耐心几乎耗尽了。

  • “准备”考研:
        现在已经落后了,我对考研还仅仅是了解了方向。


  1. 我的计划:
        考上X大的统计学专业,再继续学习计算机。
        一方面,统计学和大数据可能有相通之处;另一方面,离开计算机专业,或许可以真正按照实用所需去学习计算机技术。


  2. 我的初心:
        技术改变世界。用技术去做出提高效率的小工具。
        “真正把一门语言学透”,我想最好选择了一门语言,不管市场对它的需求,一直作为一种储蓄学、练下去。


  3. 我的困惑:
        对于陌生的IDE适应不畅,对于课内实验,只要我稍微修改标准代码、就无法正确运行,一切都让我觉得自己是在入门的水平,反复经历挫败。
        我们学了这么多专业课,做了这么多不痛不痒的实验,似乎既不通向有价值的工具,也不通向考研,就像一个个玩具,真的有用吗?
        我知道我的计划也会很困难,但又同时我又不得不问,对于我的初始目标,应该用什么样的路径去接近呢?为什么我至今没能掌握一门语言呢?

此外,他还提供了一份这几年学了哪些内容,做了哪些事的清单,隐私原因,这里就不公开了。

看了他的这些材料,我在考虑良久之后,写下了下面这些回复:

1. 为了什么而去学计算机?

常有人说:选择比努力重要。一个行业的兴衰可以决定渺小个体的薪资,计算机领域的薪资,对于应届生确实非常有吸引力,所以很多人为了入行,会选择跨考。为什么去学计算机?很多人的答案是:钱给的多。这是一个非常正常且合理的动机。

很多其他专业的同学为了更高的薪资,为了更清晰的前途,会付出大量的时间,会选择跨考。为的是能够更加系统并专业地学习到相关知识,同时能拥有一个计算机相关的学位。虽然以这种方式成功的同学都是踏着失败者的骸骨前进的,但不得不说,这种方式回报很大。

但是你却准备反其道而行之,本科计算机专业,想要跨考统计学专业,然后继续学习计算机知识。

这有点骚操作的感觉,我不是特别明白你的意图,我先做出两点假设:

1.计算机方向考研非常激烈,担心自己落榜,所以准备先取道统计学,提升考研成功率,等考上后,再慢慢自学计算机。

2.大学这三年,发现学习计算机带来的更多是烦恼和焦躁,所以准备放弃这一行,转型统计学。计算机以后只是作为业余的兴趣爱好。

如果是第一种,我个人认为不是很明智。虽然看上去是一条捷径,但是你要衡量一下付出的代价。第一,拿到的不是计算机专业的学位,作为求职筹码,这还是有差别的;第二,你不仅需要学习统计学知识、完成导师给你的任务、毕业准备(这三点都会花费你大量时间)同时还要专心自学计算机,这恐怕很难,因为人的精力是有限的。

如果你是想从事计算机行业的,那么,我建议:现在抛开其他一切的想法和顾虑,去准备计算机专业的考研。不要把考研想得那么可怕,第一,它和实际编程开发区别很大,不要因为之前没有开发能力而丧失信心,毕竟它是一种应试;第二,科目也不多,没有平时学的那么繁杂,如果你全身心投入,是有很大可能取得成绩的。我认识的读者同学中,有一些在学校里开发能力很弱,几乎没有实战经验,但今年考研都获得了不错的结果。你提到了你可能比较适合应试,所以我相信你也能够取得成绩。

如果是第二种, 也未尝不可,对于应届生来说,虽然计算机领域的工作薪资看上去十分诱人,但其实它并非适合每个人。它是一个不错的选择方向,但并非是唯一的通途。选择一个你真正适合的职业,才能迸发出更大的能量。

2. 两个错误的观点

首先声明一下,这仅是我主观上认为是错误的观点。

1.你提到了你对学习英语有非常浓厚的兴趣,但是因为不是英语专业,所以不能达到专业水平。我个人认为本科的英语专业教育对一个人的英语能力没有决定性的影响,语言类的学科,你要你愿意花大量时间和精力,是可以学得比科班学生更好的。

2.“离开计算机专业,或许可以真正按照实用所需去学习计算机技术。”这个观点可能是你的一种心理暗示,但我认为是不正确的。虽然技术人员的目光可能会狭隘,但并非是脱离实际的,身在计算机专业,并不会成为你按照实用所需去学习计算机技术的阻碍,相反,放下容易重拾难,一旦放下,很有可能后面永远会背道而驰了。

3. 学习编程的方式

因为亲身接触过,所以我一直都觉得,很多普通本科的培养方式是有问题的。问题主要在于两点:第一,很多东西都讲个囫囵吞枣,大部分老师上课没有激情,内容平铺直叙,草草而过,学生分不清重点要点,学起来没有方向而且很吃力;第二,课程设置杂而浅,什么都讲一点,什么都作要求,不管技术是否过时,不管学生自身的规划方向,到最后学生可能好像什么都懂一点,其实什么都不懂。

我个人认为学编程应该“从上到下,再从下到上”,什么意思?

首先从上到下,是先从最上层学起,比如一开始你可以利用html写一个能够看得到页面,通过改变样式和布局,你能够直观感受到你做到了什么;比如写一个最简单的python爬虫,你可以快速获取你想要的数据。这些都是作为初学者能够真切感受到的,他们会因此感受到成就感,觉得编程好神奇,很酷。这样才会有很强的学习动力,接下来渐渐去了解下层的东西,比如浏览器是如何渲染的、网络是如何通信的、程序是如何运行的等等问题。

接着从下到上,知道了程序运行的原理后,可以开始写一些稍微复杂一点的应用,此时即使出现一些bug,你也大致会有一个查找问题的方向,不至于两眼一抹黑。若能够通过自己的努力解决问题,那更是成就感爆棚,学下去的信心也会逐步提升。如此“从上到下,从下到上”反复多个阶段,你的编程能力也就会慢慢得到提升。

所以我认为学编程,主导性是很重要的,即不能被学校课程牵着鼻子走,要有自己的规划。很多东西,不在你的规划清单上,那么水一水就过去了,不要让自己那么痛苦。举个例子,我主要是想学习Java生态的,那么在学校的.NET课,就没有什么听的必要的,要么不去了,做自己的事,要么去了也可以看自己的书。

你的问题是,有些不变通。或许是当局者迷,旁观者清吧。

比如,学习C++,“我拿起一本书,从头读,反复读,尽量记住自己读过的内容。”学习语言,我觉得读五遍不如写一遍,程序里都是细节,细节都是魔鬼,而这些光看书是很难看出来的。在初学阶段,哪怕最简单的代码,自己写一遍也许都会带来很大的收获。

“真正把一门语言学透,我想最好选择了一门语言,不管市场对它的需求,一直作为一种储蓄学、练下去。”把一门语言学透固然有道理,但如果你是为了从事这行,那又是何苦呢?好像有点自己和自己过不去。在学习上,死磕是一种重要的品质,但还是那句话,选择比努力重要,否则越努力,越落后。

“一位学长要求我写出一个爬取图片的爬虫,我选择使用C++语言,失败。”在这次失败经历后,你选择了加大力度学习C++,但有没有从什么语言适合做什么事这个角度去考虑呢?就如上文说的“从上到下”,先把一件事实现,涨涨自信,再去深究细节和原理。否则你很可能堕入学习的深渊里,不知所向,出不来了。

推荐↓↓↓
程序员的那点事
上一篇:电脑的 ip 是怎么来的呢?我又没有配置过 下一篇:开源“圣经”作者:SaaS 是危险的蠢货