实习生应知道的二三事
郝伟 2022/03/18
本文主要面向在校的实习生,用于说明实习所需要的技能水平和技术应用范围。
本文将使用者对一门技术理解和掌握的能力程度由低到高将其分为以下几个层次:
学习技术和做很多事情一样,是需要有一个过程。计算机技术的学习,基本过程如下:
语言是基础,必需要有一门可用的语言才方便开展后续的一些课程的学习。虽然很多人都说编程语言不是必要的,很多牛人都不是写代码的,但是实际上这个不写代码的牛人,都是从写写代码开始,成长为大牛后才开始不写代码(有的一直在写)。所以语言至少要做到熟悉,最好是掌握。
当你达到熟悉或掌握一门语言后,就可以开始学数据结构了,数据结构其实不需要太多的语言基础,但是它也需要语言来进行验证,所以至少达到熟悉的水平,才方便学习数据结构,这也就是为什么我们大一学过一门程序设计语言过以后,到大一下或者大二上开始学数据结构的原因。数据结构的程度要求通常是熟悉深度,而不是广度,因为数据结构的范围有限,觉的数据类型并不算多。
在熟悉了一门语言和基本的数据结构以后,就可以开始学习一定的算法了。必要的基础和能力是不可缺少的,否则能力不足的话,你会发现很多东西发现你写不出来,学习起来会非常困难。当有了算法的学习的基础过以后,你算法如果能达到一定水平,算法我们分初级中级和高级,初级的话就是一些简单的算法,常见的排序常见的堆数的查询这样的一些东西,你掌握了过以后,我们就可以到中级的话就一些比较复杂了,尤其比如像图图论,像一些病情并发等等,然后有了这些技术过以后,到高级的话就可以学更多的东西了,可以用更复杂的模块,这些东西都是循序渐进的,很多同学都是没有这个顺序直接跳的,可不可以?
有了以上的基础后,你就可以开始真正的实战了。由于每个人的精力是有限的,而计算机的领域细分又非常多,所以一般人只能选择某个或某几个自己感兴趣或比较热门的领域开始相应的技术研究。这里我给出的建议是考虑自己的兴趣和热门程度,原则是同样的热度优先考虑自己的兴趣;同样的兴趣优先考虑热度。这样才能从事自己喜欢,且收益高的领域。
实习生需要掌握一门编程语言、熟悉基本数据结构和了解常见的算法。具体解释见第2,3,4小节。
无论学计算机的任何一门专业,掌握一门编程语言都是必须,最终都是需要编程来实现。无论你理论学的多好,无论你的算法长得多么精通,无论你的设计思想多么先进,最终是需要通过编码来实现的。我们不是搞文学的,通过文字来写,也不是搞美术的,通过绘画来展示,我们是搞计算机搞程序设计的,所以的话就会通过编程来实现,因此你就必须要有一门编程语言,编程语言相当你最基础的基础是你所有一切的基本功,如果你的编程语言掌握水平有限,那么其他什么东西基本上都是扯淡,因为最终无法把你想的内容来实现。所以,想把其计算机理论学好,一定要掌握一门语言。不过需要注意的是,一门语言的掌握程度不是自以为会了能用就行,语言的掌握我认为会分为这么几个层面。
下面是对编程语言等级具体划分描述:
入门级指先前没有接触过此程序设计语言,才开始学习一段时间,对编程一知半解,感觉知道一些内容,但是又充满困惑的阶段。
入门级的水平就是掌握语言的核心语法,基本上常用的功能都知道。对比新手虽然也知道一些语法,但是通常都解释不清楚。举例来说,C语言中的指针或者是数组的使用等等,很多同学掌握的都不是很好,解释不清楚具体的原理,更不要说语言当中的一些高级概念了,比如说像C#当中的LinQ,Java当中的Steam,或者是Lambda表达式,NumPy中的切片等等,这样的高级的东西的话,需要花很多的时间来学习。
对于新手来说,第一关要做到什么?做到我无论说哪个知识点,你都知道怎么回事,哪怕你用的不熟,但你都得知道,这大概就是初级的水平。所以,新手需要大量阅读、学习和理解,把一知半解的内容完全理解,并结合一定的练习,才能达到初级水平。如果你基本的语法知识没有问题,再加以足够的练习,包括对主要知识点的学习和每个知识点的一定量的动手练习,个人认为练习有200个小时,就基本可以达到中级的水平。当然,具体时间也因人而异,有人可能不需要100小时,有人可能只需要50个小时达到的,有人可能需要1000个小时。再加上,每天都有不同的事情,可能实际达到中级水平的时间,要数月甚至数年。
对于中级水平的程序人员来说,就是在初级的基础上,即掌握了核心语法后,能够熟练的应用。同一个知识点初级水平也知道,但不代表知道就会用,而中级水平就能够熟练地运用。举例来说,让你做一个简单的循环对1-100求和。看上去简单的的要求,很多初级水平的人来写,就经常容易出错,而且速度也比中低的低不少。所以,中级阶段实际上就是要求你必须能够把你的想法很快的写下来,并且能够很熟练很正确的写。第二步没有什么技巧,无外乎多练,你要写大量的代码,写多了过以后你就熟练了,然后很多东西你知道东西就能转化为熟练的东西,你能够很快的写出来。
对于初级水平的开发人员来说,想要升到中级水平,唯有一个办法,就是多加练习。根据我的经验,对于平均水平来说,通常需要1000个小时的专业练习,才能中级水平。按每天4小时计算,同时算上休息,大概需要1年的时间。有很多对编程有特别深厚兴趣的人,不仅多学多想,而且每天都会花大量的时间进行练习,所以通常只要几个月就能达到较高的水平。
这是更高的层面,高级水平者知道怎么用了,也能够熟练开发了,就就能到技巧的层面。在这个层面的话,本来能够做出来的东西,现在可以做的更好。比如排序算法,现在有很多种,初级水平知道怎么写,但写不出来,或写的很慢;中级水平知道怎么写也能写出来,但是写的性能不行。高级水平不仅能写出来,而且能够把性能做得非常好,能够用很多的技巧基于很多的经验。
高级水平即掌握了基本的语法也有了足够的练习,那么就需要提升你的编程的技巧,改进你代码的质量和运行的性能,你要考虑的内容不仅仅是这个代码怎么写,还要考虑你这个代码在什么环境下运行,谁来用怎么使用,怎么样能够更好、更高效、更友善、更强壮、更智能的去编写你的代码,运行你的程序,这就是高级程序员的能力,再到大神级的,如果是在高水平之上大升级,那么他已经不再是看编码了,更多的是看语言的设计,比如说这门程序语言是怎么设计的,它是做语言开发的,而不是说是用语言来进行开发的。
数据结构是关于计算机中的数据如何进行组织的一般性方法,是计算机中技术的基础学科。数据结构入门可以参见此文《数据结构简介》。
算法主要讨论的是计算机中解决问题的思路,是区别初级程序员和中高级程序员的重要内容,关于算法的相关内容,可以阅读《算法入门》。
我的2022年的主要研究方向可以参考《2022主要研究内容》。可能的方向不限于此文档方向,一些相关的领域的也在考虑范围之内,有兴趣的可以提出。
现在我们在校的大部分同学的话停留在新手和初级这个层面,也就是说连很多语法知识都不知道。所以基于这个层面的话,你学后面的所有的内容很遗憾的告诉你,你都不可能学得好,因为你没有这些语法的基础的话,去支撑学习很多计算机理论知识的话,你很难去理解。所以,对于这部分同学:
鉴于目前我们的同学主要还在新手和初级水平,所以我希望大家就是多看多学,尤其是对于初级水平的,你一定要花很多时间去学语法,这是没有办法的。无论是哪个层面的,最终都是需要大量动手练习,就象骑自行车和游泳一样,光看你是基本不可能学会的,一定要勤加练习。