游家霖:难以定位有趣的家伙

简介

   游家霖:2013年入学电子科技大学本科,bitman成员。现就职于

上海倍发信息科技有限公司 。

   怎么说小游呢?首先技术上非常有灵性。设计模式,底层技术,一点就通。沟通起来言语不用多,就能理解别人的关键。有全栈程序员的风采。在本科时,就一个人写了个APP。当时想通过出租车进行货物售卖。

  工作时,到了上海的金融公司。他成了公司里唯一一个程序员。不到一年,就对金融领域的软件开发深度掌握。搞搞深度学习,搞搞人工智能。公司主业之一就是用软件进行投资,而这个小家伙能以一己之力不仅完成开发,还研发新的算法和程序进行新的投资。你就知道还是个蛮厉害的家伙了。

  除了程序,他最喜欢和他人分享东西。所以,曾经喜爱博文撰写(现在忙得没空了)。游荡在知乎、简书等。

  他还喜欢画个画,玩玩单反,搞个航拍。

  嗯,这才是有趣的人生。

  对了,我最欣赏的是小游有一个公益的心,总想用自己的所长去帮助他人。

 

 

正文

 

建立系统性的能力

为什么需要这样的能力?

计算机技术和应用在过去几十年飞速地发展着,从我们手中的计算器、俄罗斯方块游戏机,到如今的智能手机、商场里的VR游戏,可以说计算机技术如今无处不在,千变万化。

那么,在这么一个如此丰富多彩且依旧在飞速发展的领域,作为一名刚跨入专业领域不久的学生,应该如何来建立认知,如何在这个领域成长呢?

首先,作为一名准专业人士,作为一名想要在领域内走到一定高度的有志青年,在学习的过程中,需要建立起一套系统性的认知,为今后学习的深度和广度打下坚实的基础。

何为系统性的认知?在过去的物理学习中,我们渐渐地形成了一种能力,一种能够用所学的知识。经过自己的分析和思考,在自己所学的知识范围内,去分析和解释各种可能没有见过的物理现象。它需要一个人能够对所学的知识进行融会贯通,并能够很好地结合实际情况去思考,去分析。

在计算机学科领域也是如此,我们会面临纷繁复杂的使用场景,技和产品也在飞速地发展,而这些丰富多样和变化迅速的事物,不可能在短短几年时间内,通过学习前人所写的课本就能够掌握。

这就需要我们能够抓住事物的本质,能够灵活地进行思考,而不是将现实的事物一一罗列,逐个去理解它们表面的性质,后者在如今技术爆发式发展的时代,也不可能行得通。计算机是一个由人设计出来的复杂系统,它是一个看似处处受限,实际上十分开放的系统。这个开放程度就取决于你对底层机制的认识程度,越触及本质,你对它的掌控就越没有限制。

可以怎么做?

那么,如何养成系统性的专业能力呢?个人觉得,其实,跟着课程设置的节奏,已经是很好的路线了。

当然,只是说课程的时间先后,尤其是十分重要的一些课程:

程序设计语言

数据结构与算法

计算机网络

汇编语言

操作系统

计算机组成原理

编译原理

但是,仅仅是达到课程考试通过的要求,其实还远远不够的。因此,这还需要我们不断花时间去提升,去实践。尤其是实践,这在计算机专业的学习中尤为重要。

在学习编程语言的阶段,你只需要不断的编程,在这个事情上,甚至可以直接使用编写过的代码行数来衡量经验都不为过。从简单的程序示例,到复杂的功能和算法,编程的过程中充满了各种坑,而你通过自己一步一步去探索,一点点犯错后改正,一次次的沉思和纠结去填坑,所得到的经验和能力是一册习题远远达不到的。

有了基本的编程能力,你就可以按自己的兴趣去自由地探索了。当然,学习阶段依旧有一些明确需要做的事情,比如学习数据结构和算法这样一些理论性的东西。当然你也可以按照自己的方式去学习,比如书上的习题不够过瘾,你可以尝试去在一个实际功能中去应用所学的内容,或者去做一些自己想象出来的结构和算法,让自己的学习不局限于书本,也充满创造性和乐趣。

有了基本的专业技能,下一步便是向深处发展,迈向更底层的为什么这一层次。前期所学的每一个内容,都可以继续向深处探索,它为什么会是这个样子,为什么和我的朴素想法不太一样?你会发现,在你不断的追问下,最终这些问题都回归到了专业核心课程所涉及到的内容上面,如计算机组成原理、操作系统、数字电路相关的课程。

在这个阶段,建立起这些知识内容的连接是十分重要的,只有这样才能够逐渐形成一套系统性的思考框架,用这个框架去剖析未来可能面对的各种实际问题。到这一步,你应该就具备了一个非常清晰的领域认知了。

当然,这里也应该多鼓励实践而非尽是纸上谈兵。有了动手能力,就可以持续地去动手,持续地在实践中深入体会和学习。从上层的应用程序,逐渐过渡到深入底层的运作机制,便会渐渐地触摸到汇编语言、操作系统这样一些越来越底层的事物。操作系统相关的机制在计算机专业领域的知识中有着举足轻重的地位。我们也可以通过自己动手实践去建立一个深入的理解,比如开始用汇编语言来编程,开始通过反汇编去理解一个没有源代码的程序,自己从0开始构建一个极其精简的操作系统雏形,比如结合一些资料去翻阅操作系统的源代码尝试去理解,或者尝试去扩展一个操作系统内核的功能。

有了这些从上层穿透到底层的认识后,你便能够开始逐渐能够将不同层面的事物联系起来。比如一个程序读取文件的时候,这个动作从应用程序发起到磁盘定位到具体的位置,中间会发生什么事情,分别是在什么地方发生。这时候,我们所讲的系统性就已经在形成了。设想某一天突然冒出来一个需求,我们需要做一个软件去监控哪些程序读取过哪些文件,这时候,我们是知道应该从什么地方入手,用什么样的思路去实现的。

展望未来?

那么,学习之后呢?迈出学校后,又会是什么样的场景呢?

现实世界远比学校的世界丰富多变,我们会面对的问题也是。在工作岗位中,虽然多数情况面对的都是比较具体的领域,但是每一次面对的情况也可能是千变万化的。

而我们有了一套完整而系统的认知的时候,我们不是在每一次专注一个问题的时候浪费了过去其余90%的学习积累,而是这90%能够让我们更加有信心地去面对未来无法预知到的变化。

我个人觉得,从长远来看,我们除了需要在自己的专业领域有充分的积累以外,也需要更加丰富自己在其它方面的视野,给予自己更多的可能性。在实际的工作岗位上,工作和需求不会乖乖地按照每个人所掌握的技能去分配,而往往都是实际需求驱动着大家去形成哪些能力,一方面是技术上的,这是体现系统性能力具备很强韧性的地方,另一方面,很多实际问题并非是纯技术性质的,这时候其实要求的不再仅仅是技术,而是要有更为广阔的视野和思考。

总之,打好扎实的专业基础本身就是一名专业学生的分内之事,而未来的不确定性和多样性,也要求我们要足够地开放和包容,要有更广阔的视野和认知。

   在完成学业的同时,兼顾如此多的实践和学习,看起来是一个时间难以分配和权衡的事情。

   实际上,并非如此。我们需要先清楚一点,确实这样会投入更多的时间,相比纯粹完成课程要求,每天会有更多的事情要做。但毋庸置疑的是,这样带来的收获和成长也是多得多的,也就是说,时间并非是白花的。

    而这些看似和课程时间冲突的学习活动,实际上并非完全冲突,而是在以更高的要求去完成课程的内容。不论是大量的编程,还是去自己探索系统底层的机制,或是去实现操作系统的功能,这些都是我们所学的课程在实践到极致之后的形态。

    比如你在操作系统上有过代码层面的实践,那么在操作系统课程上的学习将会如鱼得水且更加有深刻的体会,有更深入本质的见解。这些看似在时间上冲突的安排,其实也能够相辅相成的。

我想表达的是,其实课业和各种技术上的成长练习,两者可以不冲突,后者甚至能够强化你的学习。所以,这些事情完全值得放心去做,它和学校的课程安排并非完全冲突,而是能够做到相辅相成的。