2018年终总结_四年计算机科班学习经验分享+半年工做感悟

1、写做初衷&简单自我介绍

本科专业为计算机科学与技术,今年六月毕业后入职一家上市游戏公司从事游戏服务器端开发,九月中旬离开游戏行业,目前在一家互联网公司从事图形图像音视频算法岗,偶尔兼顾服务器开发。html

为何要写这样一篇文章,主要缘由有两点:git

1,根本缘由:大学四年的学习 + 工做半年的实践与领悟,让我刷新了之前对技术的认知,在此记录一下;github

2,直接缘由:随着博客访问量的提升,总会碰到一些非计算机专业的其余工科生,理科生甚至文科生想要入IT行业,在此想尽个人微薄之力为他们提供一些真实有效的经验和学习方法,而不是被无所事事的人误导刚入门就去看《算法导论》,Linux内核源码。面试

 

2、计算机学科基础

计算机学科的专业课主要有这些算法

  • 高等数学、几率论、线性代数:这些课程之前只是为了应付考试,但当我工做后才逐渐发觉,逻辑写入到底层时,是研究操做系统内部机理以及算法,而算法研究到必定层次其实就是在研究数学。好比音频加密中会用到傅里叶变换,几率论在人口预测和推荐系统中的使用,线性代数在图形渲染,计算三维坐标的应用等;
  • 数据结构与算法:学编程确定离不开这个。数据结构是定义数据存储的一种格式,而算法是解决某一特定问题所使用的方法,因此数据结构+算法+一门熟练的编程语言=你所要编写的程序;
  • C语言:大多数学校都会选择以C语言做为入门语言,还有一些学校以Java或Python做为入门语言,在此我不是想争辩C语言有多么好,但就从长远看来,我认为C语言是除了汇编语言以外第二个能将系统底层原理展现出来的语言,因此会有人说学懂了C/C++,看其余语言都不是很难了;
  • 离散数学:和数据结构有着殊途同归之妙;
  • 单片机:计算机硬件方向必修课,涉及C语言/汇编语言学习,涉及电路知识,由于这门课,让我深刻了解了数据在底层的传输;
  • 计算机组成原理:不管是之后作硬件仍是软件都应掌握的底层技能;
  • 计算机控制原理:和自动化,机械设计专业共有的专业课,主要面对工业制造方面,控制原理中涉及许多积分、傅里叶变换;
  • 数据库:通常以SQL语句为主,涉及后端开发必须掌握了一项技能;
  • 操做系统:当年把银行家算法、页面置换算法搞的妥妥的,就为了期末考试那40分大题,除此以外,还有进程、线程,安全的概念,属于底层技能;
  • 计算机网络:凡是涉及网上收发消息,通讯,都离不开网络编程,所以这块基础知识也得学习;
  • Linux操做:有时作开发须要在Linux操做系统环境下进行,因此要掌握Linux基础操做,属于专业基础课;
  • 编译原理:这块涉及不深,不过听说是数据结构、编程语言、操做系统综合起来的一门学科,课程设计是作一个简单的编译器出来;
  • 面向对象:学Java、C++语言进阶须要掌握的一种编程思想,当时我学习这门课时用StartUML画类图,时序图,它就像教你如何设计一个工程,而画的图就是作这个工程的图纸;
  • 图形学:一门将技术和艺术结合起来的学科,很是有趣,兼具美感和深度,美是由于它作出来的东西确实好看,并且应用领域很广,深度在于它的学习有必定的门槛,好比线性代数,算法,还有空间几何和变换等;
  • 信息/网络安全:涉及网络编程,加密的一门专业基础课,在我看来,这门课不是教你如何盗取对方电脑上的资料或者称为一名黑客,而是教你如何更好的保护本身的电脑,以及学习相关的安全法律;
  • 模拟电路:大二的专业基础课,难度较大,当时也没学好,不过这门课对于计算机硬件编程颇有帮助;
  • 数字电路:大二的专业基础课,将开关状态转为01逻辑数字,进行一系列的操做。

 

3、计算机学科进阶

工做半年,意识到学校所学与企业所用,二者之间形成的断层是多么的深,因此有些公司会在新人入职时进行相应的培养,在此说下个人感觉。数据库

若是让我用优先级来判别的话,确定是以你在公司目前岗位所需的技能进行优先学习,例如:编程

  • 游戏服务端:掌握C++/Go这些语言的基础,再学习下TCP/IP,线程安全,简单的数据库查找语句;
  • 游戏客户端:熟练Unity操做和C#脚本编程,熟悉Shader原理和渲染管线;
  • 图形渲染:熟练使用C++编程,理解操做系统原理,有良好的数学基础,熟悉经常使用的图形学算法,最好能本身写一个软件渲染器出来。

以上三个岗位是我接触后了解了需求总结获得的,在此掌握的基础上,而后学习你想学习的东西。后端

 

进阶阶段能够经过刷编程题,或者作一些小demo来实践你所学的内容,例如:安全

  • 能够经过写一个包含线程安全的多人在线聊天室,来熟悉Go语言或C++编程,网络基础和数据库操做,锁机制 Github地址
  • 能够经过写一个3D/2D射击小游戏,来熟悉Unity游戏引擎的操做,以及C#脚本代码的编写,若是考虑多人联网,那就去复习服务器端相关技能 Github地址
  • 能够经过写一个3D旋转的时钟,来熟悉图形学中的纹理贴图,搭建三维场景的框架等 博客文章地址
  • 能够经过把一个99码表计时器,来熟悉单片机课程的基础知识,以及Proteus软件的操做,还有C语言的硬件编程,若是还想进一步挑战本身,能够将C语言转成汇编语言来实现它,或者把码表来改进增长其余功能 博客文章地址

 

4、一些吐槽 + 学习经验

1,学编程必需要精通数学吗?

若是你是找计算机相关工做的话,在我看来没有必要。服务器

用到什么学什么。精力有限,你不可能为了搞懂一个空间坐标变换而把一本线性代数,矩阵论看一遍;也不可能为了一个加密而把大学高等数学所有学一遍。

 

2,学编程必需要有电脑吗?

我高中学编程用算术本写程序,在我看来电脑只是为了帮你验证你的程序是否能够跑起来,同时它自带首行缩进,语法高亮,还有在线查问题的功能。

之前看一些人为了学编程在手机上下载编程软件,在我看来没有这个必要。

有些人会把写不了程序怪本身没有电脑,或者键盘敲着没有手感,在我看来彻底是为了逃避困难而找的借口。

 

3,算法岗,开发岗、测试岗和技术支持岗的区别是什么?

若是把咱们作出来的东西比做一辆车的话

  • 算法岗:根据使用场景造轮子,思考如何让车跑的更快,是造方的好,仍是圆的好,仍是三角的好;
  • 开发岗:熟练将轮子与发动机衔接好,将轮子与各个模块装好,并使其跑起来;
  • 测试岗:车子在跑的过程总要通过各类场景的测试才能够投入量产,这时候他们会把各类测试数据采集,分析,遇到数据异常的发给开发岗和算法岗来进行优化,改bug;
  • 技术支持岗:车子在投入量产后,总会在用户那使用中碰到一些小问题,这时候先由技术支持岗的负责人前去排查问题,看是操做不当,仍是轮子到期该换了,仍是轮胎那有个缺口,若是他们解决不了,再找开发。

曾经因分不清技术支持和技术研发而在一场面试中尴尬了,面试详情以下 海康威视2017校园秋季招聘技术支持工程师面试经验

注:以上四个岗位也是根据个人观察和工做来熟悉的,若是有前辈或同行以为有误导,请及时在下面提出来。

 

4,有没有必要从头至尾把 CSAPP,C++ primer这样的超过七百多页的砖头书从头至尾看一遍?

若是时间充裕,固然最好是认认真真看几遍,但我平时常常把它们当作手册来查阅,带着问题去看。

 

5,学习编程有必要学习英语吗?

有必要,但不是绝对。

我时常看到一些人由于看不懂英文而头疼说是要把考研英语大纲8000个词汇背完,固然这是好事,但或许是拣了芝麻丢了西瓜。

我刚入职算法岗时曾被打击英文阅读能力差,由于老大给的全部参考资料都是英文的,为此我开启了一个英语学习的开源项目VocabularyMap。可是据我了解,咱们平时所常用的英语词汇最多不超过一千个,加上你所在岗位的特殊专业名词,不超过一千五百个,并且句式较为简单,不像考研英语阅读那么喜欢拐弯抹角的表达意思(这个形容词我想了好久),你只需在阅读英文时,把中文思惟调整为英文思惟,单词多看几遍记住意思便可。

 

6,自学仍是报培训班学比较好?

若是有半年的充裕时间,建议选择自学,若是自制力差,能够找几位靠谱的朋友一块儿学习,实在不行再去报培训班。

 

7,关于刚毕业找工做

慎入外包公司。

刚毕业建议去大厂工做一段时间,在这里面会遇到许多有特色的人,同时也会学习到他们思考问题的方式,这对自身长远发展都是很是有利的。

若是不在大厂,那就静下心来先作好眼前的事,再想办法提高本身。

 

8,公司都在看有没有我的博客和github帐号,我须要申请一个吗?

坚持写博客和整理写过的代码是一个好习惯,但既然选择去作就坚持下去,不要为了面试,为了找工做去随意丢几个代码上去,要是那样我一天能够写出几十篇,甚至不要为了github上的Stars和Followers而故意去造假。

面试是看你的专业基础能力和在这个公司继续干下去的稳定性,博客和Github只是展现你能力的一部分体现,莫要本末倒置。

 

9,如今公司不用汇编作开发,是否是就表明它已经不重要?

其实这样的问题还有个变形,例如,C语言岗位招的少了,是否是表明它即将要被淘汰了?
在我看来,编程语言没有高低贵贱之分,只有适用场合的不一样。那些所谓的排名也是根据每一年的需求量而不断变化。
所以,存在便是合理,也许它如今没有什么用途,但在将来某一新发现的领域中会起到不同的做用。对技术存在包容,那么对本身能力的提高也是有必定好处的。
具体感觉能够参考这篇文章浅谈单片机中C语言与汇编语言的转换

 

5、写在最后

2018这一年,我经历了考研失败带给个人痛苦,经历了校园春招带给个人打击和培训机构的骗术,我庆幸有父母对个人宽容与理解,女朋友的不离不弃带给个人鼓励,还有每一位前辈和好朋友的加油,最后在毕业时经历四轮面试拿到了上市游戏公司研发岗的offer,在这里我收获了宝贵的开发经验,结识了许多能力强又不失低调的伙伴,表明了开发团队去厦门参加48小时游戏开发大赛最后的Pitch Time,最后也因工做缘由离开游戏行业,选择进入图形图像和音视频算法领域进行历练。

犹记得进去的第一天,发现部门内基本都是硕士研究生毕业,或者是工做3-5年的老哥,只有我一位稚气未脱的本科毕业生,接着一周五天,连续打击了个人C++编程,VitualStudio软件操做,英文翻译水平和提出的问题(由于太简单)。

但也正是如此,使我跑开了曾经学校戴在我身上的枷锁,使我在不断的遇到问题和解决问题的过程当中,逐渐缩小着与周围人的差距。

谨以此文,记录我从象牙塔出来后的半年时间完成的蜕变,同时写给那些想跨行转计算机的人,但愿这篇文章能帮助大家解决一些学习上的困惑。

最后安利我开启的两个开源项目

 距离2019年还有半个月的时间,收拾好心情,一块儿努力!

(本文内容已同步至Github-WeeklyARTS计划)

相关文章
相关标签/搜索