你大学遗憾过吗

hello, 大家周末好,之前在知乎上看到在大学中一个比较典型选择问题:

计算机学生在大学四年应是以数据结构和算法为重还是技术为重?

如题,如果更偏向数据结构和算法学的技术少是不是找工作就稍微困难或不是;如果以技术为重会不会只知道怎么用,而内部的一些算法和数据结构都不清楚无法提升自己能力呢?

先说一下我自己大学经历吧,这样回答问题可能‍更有说服力。

(PS:答案在最后!)

目录:

以为是王者

堕落的起点

燃烧的梦想

刻苦训练

比赛失利

依然坚持

最后的挽歌

正文(回答问题)

最后

以为是王者

大一主要是上课,当时信息没有现在发达,技术资料主要是从图书馆获取,没有公众号,不知道前辈指导,也不知道技术博客这些东西,基本上闷头学习(还有释放天性玩游戏),大一不小心借来一本计算机组成原理的书,看得是非常津津有味(但当时很多还是没有完全明白),甚至在其他课上都在看,有一次被导员发现了,还在班级上夸了我,说我大一就在看大三的课程(计算机组成原理应该是计科大三的课程),顿时班级其他同学都认为我是大神,我自己心里明白得很,就是一个菜鸟,当时还没有内卷这个词,不然肯定被大家鄙视

在大学之前我从来没有学过编程,选择计科完成是因为我高中特别喜欢玩游戏,尤其竞技类游戏,比如CS,红色警戒,帝国时代等(这些经典竞技游戏,可能现在的大学生都不知道了),因为高中的时候,经常去网吧玩游戏,这也是我比较遗憾的地方,浪费大量学习时间,虽然最后考上211大学,但并不是我目标的大学,高中还是要好好学习,远离游戏

堕落的起点

转眼大一过去了,期末考试下来,成绩让人有些失望,除了专业课看起来还可以,其他科目分并不高,大一基本上是在玩和学习中度过,没有找到奋斗的目标,但对编程却感兴趣起来,C语言课程作业,很快完成,而且还可以指导别人。

转折点在大二,班里有人暑假没有回家去参加了ACM培训,我当时还不知道ACM是什么,导员也没有给大家普及,我暑假也没有回家,是和校友(高中同学,数学系)在宿舍玩帝国时代和学习,我把电脑搬到他们宿舍,吃住一起,确实是一段比较欢乐的时光,奠定我们牢固友谊(将来10多年日子,我们依然混在一起),日子过得有些禿废。

但恰恰在那次暑假中,让我知道了ACM是啥,暑假不光是玩游戏,偶尔还学习编程(个人爱好),在搜索一个编程问题文章的时候,我看到了一篇关于ACM选手文章,讲他们学校(杭电)如何组队参加比赛,如何逆风翻盘,干翻名校获奖等,我上网搜索了关于ACM的一切,当时周围的人都不知道,得知ACM是计算机大学生最高级别竞赛,当时燃起了我的斗志,我对一切竞技比赛,都有强烈好胜心。

燃烧的梦想


由于太喜欢ACM这种比赛了,我的本能,让我选择了搞算法比赛,所以我放弃好好学习,获取奖学金路线,也放弃了学习技术的路线,其实当时还不知道技术路线,视野限制了我,我不知道大学学习的东西,未来会怎么用,我也没有去认真想过,只知道曾经有个梦想是成为比尔盖茨,在当时大部分人都是懵逼的,我记得只有少部分用linux系统的同学,他们对技术了解多一点,或许Linux系统不会把人变傻,需要不断去学习。

从此之后,我开始进入算法比赛的圈子,知道很多圈子里面的东西,比如NOIP比赛,IOI比赛,ACM比赛,了解各种算法比赛或算题平台:POJ,ZOJ,USACO,UVA,URAL,Topcoder,Codeforces等。

这里简单普及一下区别

NOIP比赛,是高中生比赛,为什么我一个大学生要去关注高中生比赛呢,因为很多大神都是从高中比赛里面过来的,比如楼教主;

IOI比赛,是国际信息学奥林匹克竞赛(高中),可以保送清华和北大的比赛,里面很多大神,单在算法领域超过80%的大学生,他们在国家队训练的论文,质量非常高,我基本全部都下载打印出来学习,这个就是起步的差距,视野是多么的重要。

POJ(北大),ZOJ(浙大) 老牌国内刷题网站,水题太多;

USACO 是美国中学生刷题网站,USACO的traing(天梯)不知道造福多少的oier们。高质量的天梯题,友好的做题流程(给予错误点的正确答案和标准输入)。

UVA,URAL国外刷题网站,题目质量高,偏难。

TopcoderCodeforces‍的社区比较活跃,优秀的比赛平台,主要是题目质量比较高,做的人人也比较多,可以查看别人代码和数据。

我之前还在朋友圈感叹过,陈丹琦IOI金牌选手,而这些厉害的人现在依然很厉害, 大多数后面都转向人工智能,但在当时这个其实并不火,谁也不知道。

刻苦训练

由于我是大二暑假才进入ACM圈子,其实对于我这种大学才开始编程的人来说,起步确实有点晚了,我指定很多计划,也买了一些算法书, 刘汝佳的黑书《算法艺术与信息学竞赛》, 这本书起点有点高,需要有点内功的人才能完全领会里面的精华,计算机的课程基本上我都是自学,比如数据结构和算法,而且教材是去图书馆借的,算法导论,严蔚敏的《数据结构》,然后开始拼命刷题,看别人的报告,看论文

比如DD大牛的:背包九讲

侯启明:《信息论在信息学竞赛中的简单应用》

方奇:《染色法和构造法在棋盘上的应用》

楼天城:《匹配算法在搜索问题中的巧用》

周源:《浅谈数形结合思想在信息学竞赛中的应用》

朱泽园:《多串匹配算法及其启示》

余远铭:《最短路算法及其应用》

俞华程《矩阵乘法在信息学中的应用》

陈丹琦《基于连通性状态压缩的动态规划问题》

毛子青:《动态规划算法的优化技巧》

方奇:《动态规划》

...

当时最难的理解,就是动态规划,其他比较难的都是数学相关的(一般是数论或者是组合数学),这个花了我很多时间,和大多数人一样,在这个圈子里面,起步晚的人都得刻苦训练,很多人都封闭式训练,陪伴他们都是无数个黑夜,泡面和外卖,而我并没有加入校队,也没有进行封闭式训练,都是全屏个人热爱,私底下训练,当时还很菜。

比赛失利

大三有幸报名学校的ACM培训班,一种相见恨晚感觉,如果大一的时候,导员能够提早告诉我们,或许人生可能就不一样,当时确实有点埋怨辅导员,因为之前去参加培训的有些人根本就对ACM不感冒,我一定要珍惜这次机会, 培训课里面会有校队高手来指导我们,差距还是有一点,他们有些人已经参加过比赛,也刷大量的题,我依然是菜鸟一个,培训结束后没有比赛,也没有选拔,有些人就进了校队了,我认识一个校队朋友,由于住得很近,每天都和他讨论算法,他经常带着我进校队训练室,让我终于看见那些真正打比赛人平时是怎么训练的,大部分时间,大家都在刷题,交流其实并不多。

我并不是校队的人,但我却天天和他们混在一起,反正队长也不介意,跟着他们一起刷题,但大家都很忙,基本上不会回答你的问题,我都是自己琢磨,看网上题解,如果没有人指导,这个其实会走很多弯路,进步会很慢,所以打ACM之前,一定要请教一些前辈。

证明自己的机会来了,ACM亚洲预选赛就我们学校举行,校内选拔赛那天,我还在床上睡觉,突然班上一个同学叫我一起参加比赛,一起组队,我即兴奋又紧张,第一次参加正式的比赛,比较激动,比赛过程很紧张,组队其他两个同学都是班上学习特别优秀的同学,但貌似我们大家都没有太多比赛经验(刷题不够多),只做对了2道题,最后的结果是选拔失败,无缘预选赛,非常失落,因为这一等就是一年,明年我就大四了,我还有机会吗?

这让我想起了,2009年,我另一个偶像,伍声2009休学一年带领LGD战队,一举夺得了中国的第一个DOTA世界冠军,dota在大学时代,也是我又恨又爱的游戏,恨是这个游戏占据我大量的时间(周围同学都在玩),爱是这个游戏教会我很多团队做事情的经验,知道一个优秀团队需要分工明确,各展所长,我喜欢竞技的比赛,dota也不例外,但我并没有想去打职业想法,当时真的想休学一年搞算法比赛,因为算法比赛才是我的最爱。

依然坚持

虽然第一次比赛失利,但我还是坚持训练,还在不停学习,刷题,看解题报告,论文等,心里一直不甘心,POJ上面有一些专题训练,我也会刷一下,比如楼教主的男人八题

时至今日也没能成为一个真“男人”,后面也参加百度之星比赛,网易的有道难题比赛,topcoder比赛,codeforce比赛,知道了很多大佬,了解很大佬传奇故事,这些曾经鼓励一代代OIer/ACMer前进的传奇故事, 比如ACRush(娄天成),WJMZBMR(陈立杰),tourist(Korotkevich), Petr(Mitrechev)...

当时topcoder平台排名:

最后的挽歌

由于大四要出去实习,要搞毕业设计,要准备找工作,所以刷题减少了,但有空仍然会刷一下,top coder上的比赛,仍然会参加,只不过当初ACM赛场的梦想可能实现不了,当时算着,如果读研究生,貌似还可以参加,还可以搏一搏,但现实总是残酷的,家里需要我出去挣钱,最终还是没有去读研。

虽然没有能在大学里面实现自己的愿望,但编程能力解决问题的能力还是被训练得挺强的,其实在学校时候,我还参加过学校举办了星火杯软件比赛,拿软件组的第一名(作品是类似qq聊天软件,支持语音,群聊等),用的是MFC框架,是当时C++ window桌面比较流行框架,不过现在技术早已更新换代。

在班里是比较出名的,但ACM比赛至今是我的一个遗憾,我曾工作后一直没有放弃过,有时间就会参加比赛,训练自己。比如在华为时候,内部算法平台,我也经常去刷题,在腾讯的时候,只要有比赛,都会报名参加:


后面读到过很多退役帖子,很多人最终都认清现实,不得不放弃梦想,也读过楼教主回忆录,由于各种机缘巧合,连楼教主这种ACM顶级大牛都没有拿到过世界冠军。

人生总会有遗憾,最重要是我们曾经奋不顾身去努力过,即使没有达到自己的期望,将来也会成为美好的回忆。

差不多我的大学四年,就是在比赛,游戏,编程中度过。

正文(回答标题的问题)

作为过来人,工作多年,在华为-->外企-->腾讯等多家公司工作过,了解各种类型公司校招,社招面试,跳槽,晋级路线,知道什么东西在工作中非常有用,什么东西可以暂时应付,后面再补也行。

优先看一下大厂的校招要求:

上面明确标明必须具备的技能(CS核心知识点):

计算机基础(CPU,缓存,内存,磁盘),计网(网络协议),操作系统(进程,线程,多线程,并行,锁, 调度),编程语言(C/C++,go,python), 网络编程(socket,epoll),算法与数据结构,设计模式,数据库(mysql,事务,CRUD,分布式一致性,分库分表,负载均衡),安全(鉴权,加密等);

这些基本上都是程序员的基本功,数据结构和算法也是其中之一,如果你不是走特长生路线(类似高中参加竞赛保送清华北大那种):

什么叫特长生:ACM/OJ比赛获奖,或重要开源贡献,或对某一项技术研究很深(比如OS,编译器,编程语言,分布式架构等);

ACM/OJ算法比赛获奖确实可以优先获取进大厂机会(有优势),基本上是以数据结构和算法为重,如果再加上学校buff,进大厂还是挺稳的。

但是大多数人,可能都不是走特长生路线,都是普通人,普通人只能走正常校招路线,需要按上面要求来,那么你就需要把计算机基础掌握好, 数据结构和算法也是需要学习的,只是没有比赛那么要求高,就是把基本数据结构和算法掌握就行:


详细参考:深入理解数据结构和算法

其他计算机基础(CPU,缓存,内存,磁盘),计网(网络协议),操作系统(进程,线程,多线程,并行,锁, 调度),编程语言(C/C++,go,Java,python), 网络编程(socket,epoll),设计模式,数据库(mysql,事务,CRUD,分布式一致性,分库分表,负载均衡),安全(鉴权,加密等);

TCP/IP协议精华指南

一句话,如果你决心打算法比赛,就以算法和数据结构为重,多做题,多写代码,这样你的解决问题能力会提升很多,编码能力要比其他同学成长要快, 但算法比赛要想获奖也是有一定难度的,是孤投一掷,有一定风险存在,高风险高回报,人生处处是选择啊,这个看自己的选择了,如果喜欢比赛(有人喜欢这种智力比赛)就试一下,反正最后编码能力提高,找工作也不会太差,一般都是从大一,大二开始,如果已经是大三,则不建议了,这个刷题也是需要很多时间的,算法比赛中需要掌握很多知识点:

但工作中至少一半是用不上的。就看你选择了。

我大学也有一部分人选择搞算法比赛,但只是少数人获奖,然后高薪进大厂;

有一部分人老老实实学习基本课程,高分保研,好学校的研究生进大公司更容易;

有一部分人喜欢技术,崇尚技术可以改变世界,深挖技术路线,参考各种技术论坛,搞Linux,开源项目,最后坚持下来的,都是高薪进了大厂;

有一部分就比较普通,是面向工作学习,八股文搞起来,把计算机基础打牢,每一样都还好,不是特别突出,也有部分进了大厂。

其他。。。没有选择

最后

其实看得这里,你心中答案应该明朗了,条条大路通罗马,只要坚持一条路走到黑,都可以找到好的工作,就看你个人选择,记住,最好早点明确自己的路线,这样才能够有充足的时间去迎接挑战。

- END -


看完一键三连在看转发,点赞

是对文章最大的赞赏,极客重生感谢你

推荐阅读

高考结束了

如何成为技术大神

深入理解数据结构和算法

如何成为一名大厂的优秀员工?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值