从非重点本科到日本留学,从C语言到机器学习,作者讲述了从2011年本科到2017年的程序人生。
本文献给
尤其是相信自己,再失败心态也不会崩塌的同学们。
在我出生的第二年,跳棋程序奇努克击败了人类卫冕冠军马里恩-廷斯利,这件事情对于现在的我有着特殊的意义。
2011 年:基础的大一,以考促学
我的大学入学并没有父母的陪同,在入学前的暑假,在兄长的推荐下,在寝室开始了计算机的基础学习,在财大图书馆看完计算机导论和 C 语言书籍,记得当时写的第一个程序是在 VC++6.0 上的解一元二次方程。在看了郝斌的 C 语言视频和谭浩强的书之后明白了语法和基础开发的要点,之后在入学前看了郝斌的数据结构视频,但是并没有实践,入学前的暑假都是在看电影和考驾照中度过的。
入学之后在为期一个月的军训当中,偶尔把带着的 C 和指针这本书拿出来翻翻。在开学的第一学期并没有学 C 语言等课程,只是数学,语文,英语,物理,计算机导论等基础课程。第二学期开始准备考四级,一次过了,在 C 语言课程上到一半还没有的时候我就考了国二 C 语言,成绩也合格了。这里要提到国二 C 的考试,那时候考试是笔试机试分开考试的,因为国二 C 报考的人特别多,考试通过率有要求,所以国二 C 是最难的二级考试,有些人说计算机系毕业的学生一毕业就相当于国四级证书,完全就是扯淡。
国二 C 考试里指针的坑很多,绝大部分同学其实连指针数组和数组指针的区别都不知道,很多学校的计算机系快毕业的时候都有考不过的,我那时候考国家四级是可以直接考的,所以在大二的时候把国四软件测试给考过了。其实,真正考过的人都知道有没有用,考试内容就是基础的学习,但是以考促学也是一种高效的学习手段,在大学期间多考一些证书,以后在简历上也能给别人一直坚持自主学习的印象。
大一的经历并没有多么出奇出新,很大一部分都是在教室上自习,写写代码(也就是书上和自己带的书上的代码的练习),在全系第一个过国二的时候被老师注意到,拉我去写论文。
记得刚开学的上海有科大学生创业办的培训班来宣传,我去听了宣传,但并没有报名培训,因为培训的内容在书本上都可以学到,书本几十块钱就能学到的东西,为何要去培训花几千甚至上万块钱去学呢。于是拿了一份挂历,那封挂历的特殊之处就是在于有 js , Android , html , css 等词汇,这对我后来的学习算是普及了一下基础名词吧,后来我就按照上面的顺序开始了自学之路。
2012 年:开始算法学习,投核心论文
在上数电课的时候有一位老师来找我,问我的 C 语言是不是挺好的,下课后老师把我拉到办公室,给了我一堆材料,让我看看能不能写一份图形图像处理的论文,我是在那段时间学习的计算机图像处理的基础知识,MATLAB 的图像处理算法,经过半个学期的学习,最后总算写完了,投了国家核心期刊的论文。
论文的投稿的周期比较长,要审查等原因,在中国国家的核心期刊有很多。国家二类核心期刊都是校报呀,专业期刊等并不需要很专业,一类的期刊就需要有前沿的知识储备,投稿的难度高一点,但是只要是新算法的优化,创新,用算法做实际的应用系统,就可以一般,难的还是国际的论文,但是现在人工智能发展较快,在现在所了解的范围内,人工只能相关的国际顶会论文,已经是最后普通人能发的最后的机会了,新算法的优化,创新,用算法做实际的应用系统,以上占有一个就可以发了,但是说容易,这做起来也是要有很大的知识储备和英语能力,这时基本上只能看导师了。
话说回来,在大二完成论文的时候我就被叫去实验室学习机器人,当时是做51单片机和arduino,但是大家都在看郭孝祥的视频,但是最后并没有做出什么实用的东西,但是当时给我带来的是焊板子的基础。
大二之后一般都没有英语课了,所以过四六级一定要在这段时间复习过掉,有些学校为了通过率问题一直到大三才给考四六级的除外。
大二下学期的时候我就在寝室开始自学 PHP 和 JS , CSS , HTML 的知识,当时买了几本书,虽然现在那些书都可以从网上下载到,这里就要说其实很多书籍都可以从网上下载到 PDF,花一千多买个平板,可以装成千上万本书,这个是最划算的,下载书籍最方便的做法就是在谷歌中输入你想学的技术的英文名然后空格加 PDF,同理,百度输入想学的技术的中文名加 PDF,一般在 CSDN 或者脚本之家都可以下载。在这里推荐大家看书就买新书,一是支持国产作者,二是新书的确网上没有高清版的PDF,去当当京东做活动的时候买书可以省下很多钱。
从人员管理系统到图书管理系统,从前端页面的开发到后台支付 API 的编写都是一种对现在商业软件模式的学习,这些都做完之后是比绝大部分培训的学生要好很多的。
在大二快结束的时候发生了一件对我后来影响很大的事,就是老师带我做数据挖掘,当时并没有说机器学习这个词,那时候也没有听说过深度学习,神经网络等,在老师的带领下,学习了 Python 和用 Java 做讯飞的文本分词包,用朴素贝叶斯做垃圾邮件文本的处理。
在当时看似都一头雾水的技术在现在看来都十分的简单,技术的发展真快。
这里重点说一下培训的建议,我没有参加过培训,我都是自己从书本和网站上学习的知识,但是我的同学中有很多去参加培训,其实做开发最重要的是自制能力和自主学习的能力,培训不可否认可以学习到东西,但是培训班能学习到的在网上和书本上都可以学习的到,去培训班学习是性价比最低的选择,如果真的基础操作不懂,可以去油管看视频,可以去 CSDN 看视频,这里十分推荐油管的视频,无论什么技术相关都有手把手的印度大佬教学,听不懂印度英语可以开启字幕,现在人工智能技术的快速发展,自动生成的字幕准确率相当高。
2013 年:Android 之路,自研 APP PK 掉官方应用
在这一年,开始了对于计算机来说十分重要的课程,计算机网络,计算机组成原理,操作系统和数据结构,这四门课无论是未来工作,大四考研,甚至日本修士(硕士)入学考试都十分的重要,希望大家好好学习,课本看完可以直接去看考研的题目,我认为这种方法效率是最高的。
记得那时考职称考试,计算机软考职称考试,分初级中级和高级,初级程序员和中级软件设计工程师是可以和日本的证书互换承认的,但是高级的就不承认,因为高级的考试只考察文档的书写,并没有写代码和算法,在中级软件设计是有代码编写,数据库设计,UML 图的绘制的,如果这个考过说明你有这个能力去考研了,还有职称在工作的时候加工资。
后来的暑假和同学一起去网吧玩的时候,我喜欢上了玩坦克世界,当时各种游戏的 APP 助手开始出现,查询游戏资料等功能。那时候我头脑一热就回家开始制作坦克世界盒子,这是我制作的第一款 APP,那时我只是在之前实验室搭建过安卓的开发环境,并没有系统的学习过安卓的开发,我就买了本安卓开发实战之类的书,开始了从 0 开始的制作过程。
那时我用的环境还是 ecplise + adt 开发,现在 kotlin 都被指定第一开发语言了,又一次感叹科技发展速度之快,在后来我看了很多安卓开发的书,我认为到现在为止,还是以第二行代码那本书对于新手来说最友好 从网站对与游戏信息的爬取,到 APP 页面数据库的链接到打包上架 360 市场。
TIOBE 6月编程语言排行榜:Kotlin突围进入50强
Kotlin会在Android领域取代Java吗?
最后收获了 2W 的用户,尤其是官方授权认证某公司制作的官方盒子只有 6K 多的下载量之后就下架了 。当时算是我对安卓开发入了门。现在 APP 长久没有更新已经被 360 市场下架了,以后有空闲的时间我还会做安卓 APP 的开发,因为网站和手机 APP 的制作是最贴近客户用户的渠道。
2014 年:上海实习,开启 Ruby 之路
后来制作网站的时候我从学校的课程学习了 Jsp,和 .et 平台,觉得用这两个做网站各有好处,但是开发都没有 ruby on rails 框架好,rails 周期短,架构轻,方便小团队开发,和初创公司使用。
在 ruby 学习的群里认识了上海的一位创业大佬,之后聊天当中就发了我的简历,就说定暑假去他那实习,后来我要写一个论文就先回学校了,在那里的一个月不到的时间,我系统看了 rails , Git 的使用,后来回学校的时候还把拷来的后台代码全部学习了一遍。
我学到了原来外包拉单不层层外包的情况下利润是很大的,但是很多情况下都是技术不好的接到包然后层层外包下去,现在一个微信点菜一晚上可以处理完毕的东西价格都到 2W 多了,以后在工作之余接接单子做是十分美滋滋的。
这里就要说学习什么技术对于后期职业发展是十分重要的,现在 Java 需求过大,没有出现饱和,但是Android , iOS 开发的确已经进入了饱和的阶段,传统的网页开发,平均下来 PHP 之类肯定没有前端待遇高了,所以对于面向 RMB 编程的同学请注意选择技术栈。
现在最火热最缺人的就是机器学习相关的岗位了,但是很多都是硕士学历,的确在人工智能领域没有硕士学历是十分吃紧的,现在国内大公司还是倾向于招聘重点 985 学校的学生,因为无论从学习能力还是未来潜力还是公司面子等等问题,重点 985 毕业的学生,哪怕是不怎么会技术的学生,一路听从老师学习安排考试的学生,毕业工资在 15K 左右都是十分正常的,如果只有本科学习做机器学习人工智能相关的岗位,的确会遇到很多困难。
这里强调一下学历的问题,这个问题无论在任何地方都是被大家翻来复其说了很多遍的问题了:
进入更高的学校不代表以后不用学习。
高考没考好就去复读,考研没考好就去准备再战,现在一两年的收益换取以后几十年的待遇。
本科不好的同学有很大的包袱的同学请考研,考研可以去 211,或者各种 985 的软件学院,统考的科目是数学 1,英语 1,专业课四门,但是很多 211 和各种 985 的软件学院都是考数学 2,英语 2,和专业课两门。
现在 211 高校的研究生都是三本二本的学生居多,985 高校对于考研学生的本科出身开始逐年重视,部分专业的确会在意出身学校,如果考研的学校不是 985,211,请再战,现在只要够国家线,基本都能上 211,但是现在保研的人数越来越多,很多专业大部分人都是推免上的,考上的学生的确有的难度变大。
分数不高的请走西口闯关东,东北和中西部高校对于沿海省份的学校要求都会低一些,但是学校实力还是在的。
如果是985出身的同学,请去考 C 9,保研更好。
最后总结一下就是尽量向上,直到遇到不可抗拒原因,经济问题等。这样自己未来是绝对不会后悔的,说学历没用的都是安慰人的,现在 985 的计算机学生就算不太会技术,一二线公司都愿意招收进去培训。因为考 985 的难度可比学习那些技术要难的多了,在高数英语专业课中熬过来的同学都懂,但是现在这个社会读书无用论大行其道,很痛心。
2015 年:最终的抉择,东渡东洋
当时在参考了国内的各个高校之后,和在 C 9 读书的兄长交流之后,我还是决定出国去上硕士,因为其实就算在 985 里读硕士,绝大部分还是要靠自学,出国读硕士带来的好处更加的多。
这里普及一下主流国家的留学信息,美国要提交大学绩点,托福和 GRE 成绩,但是 100 名以后的学校要求就不是那么高,在学校学习一段时间语言也可以上,但是美国的研究生培养制度没有导师带领,没有毕业论文,和英联邦国家一样是授课学位,但是要比英联邦国家靠谱多了,英联邦国家的授课学位就一年,去掉圣诞节复活节和放假就九个月左右的上课时间,学习时间实在是太短了,没有很多研究性质活动,但是英联邦国家的好学校对比欧美和小语种国家来说要更容易进一些,算是镀金,但是学费是最高的,毕竟是产业化教育。
计算机其实最推荐的还是去美帝,美帝的确是掌握核心科技,而且美帝知名高校有很多项目,只要大学绩点好点,托福 80 多就可以上 Top 10 了,也有运气成分。其次是小语种国家,推荐日本、德国、法国、意大利和北欧国家。机器学习人工智能相关,如果能去美帝读博士一定要去,美帝读博士是十分推荐的。但是小语种的学习相当耗费时间和精力。
我是在日本上的,我在这里简单说一下日本留学的特点。
价格相对最低,一个月生活费 6000 左右,有很多奖学金,语言学费一年 3.5W 左右,大学学费一年在 1.5W 到 8W 不等,国共立比私立便宜很多。
日本的硕士教育有教授导师带领,有毕业论文要求,而且日本人要求比较高,毕业论文必须在学会上发表,当然不用担心会毕不了业,毕竟 IEEE 一年会议有一千三百多场。
每年去日本留学的很多,但是很多都是半途放弃回国或者去上专门学校,专门学校没有用,考上大学和大学院(对应中国研究生院),留学生的大学入学考试是有全国统一的考试,叫做留考,硕士的入学考试是没有统一考试的,需要先去联系教授,教授同意报考之后再去参加入学考试,一年分两回,有的学校一年只有一回,考试也是日语,英语,专业课,高数。
联系教授时候不是每个教授都愿意招收留学生或者中国留学生的。有时候你成绩再好,教授不想收留学生或者中国人也没有办法。日本基础工资较高,平均物价和上海差不多,但是外国人能做的多是派遣外包的工作,也就是说技术含量不高,但是一个月也能拿 2W RMB 左右,很多在这里没考上硕士的非计算机专业学生什么都不会的情况下都可以去,一个月 28W 日元左右,如果对于生活要求大于技术要求可以考虑去日本混吃等死美滋滋。
2016 年:修士入学考试,生活的彻悟
在经历了 2 次考试失败之后终于考上了一个学校,可笑的是 2 次失败的考试都是保底的学校,考上的学校是最后冲一冲的态度考上的,中间心路历程省略一万字,每天上午学语言,下午回家复习专业课。
那时候的 3 个月中我回家的时候,发现很多同学都回家考了公务员,国企,事业单位。这三个月都在思考对于技术的信念其实让我放弃了很多开心生活的机会,之后回日本等开学的期间我就一直出去玩,来了日本一年多从来没有出去好好玩过,要多看看世界。
这段时间回日本的时候带了些国内机器学习的书。
中文的很多书籍都是翻译官网的手册,很多都说的不清不楚,日本的书籍由于版权问题不能这样出版,所以各种细节都会说明清楚,以后查询资料英语的会很多,现在也多是用谷歌英文搜索,所以最后用英文书复习。我报的研究室是机器学习的研究室,在上世纪末就有这个研究室了,我老师也是在世纪初的时候来这个学校任教,带了很多学生,教学方法就是放养。
经过开学 2 个月的学习也找到了方法,用中文书预习,日语书学习,英语书复习,这种方法是我现在总结的最好的方法了。
这时候学习是放养计划,就是自己每周计划做什么自己随意,但是每周有一次研讨会,老师会制定一本英文书,每周轮流做报告,一人每周一章和最新论文的说明,要做 PPT,然后每周都要和老师单独汇报一次每周学习研究进展,这样不停的学习,讨论,总结我想效果是最高的,卢瑟福说过只有把一个女仆教会了自己才是真正的会。
2017 年:刚入学的迷茫,找到方向
工作 or 创业的问题肯定是先工作,工作可以学习到大公司的研发管理方式,遇到更多厉害的人物,他们就是我的榜样,就是我航行的目标,虽有有的一辈子也追赶不上,但是追赶的途中比我自由的航行要高效很多。
而且,希望能学习更多的东西,交更多有趣的人,现在一直在学习算法和总结,未来一年要多实践,分布式和相关数据库都要熟悉一下,Golang 和 Scala 熟悉一下。
说了很多,终究的道理其实很简单,能往上学习就往上学习,要进大公司,要么学历高,要么技术顶尖,后者比前者难,学生生涯结束之后就可以安心写代码了,学习生涯并没有结束,没事的时候学习小语种可以预防老年痴呆,多运动放空大脑利于身心健康,没有什么方向之分,现在学习相当方便,基础的内容几晚上就可以看完,很多技术都是共同,很多技术都有交叉,网站 APP 等作为新时代的程序员都是必备的技能,新时代的到来,以后算法想必更多都是指的是机器学习的算法了吧。前一整子有论文实现了前段页面设计直接机器自动生成代码,pix2code 很神奇。与大家共勉。