本文写给计算机专业或者非计算机专业的大学生,若是你之后想成为一名程序员,那么,你就必定不要错过这篇文章!前端
关于方向的选择其实越早肯定越好,生活中咱们要面临无数个选择,前几天看的一个黑客相关的美剧中有句台词说的不错:程序员
lifeisbinary,生活就是二进制,一个个0101组成的。每一次抉择,选了就是1,不选就是0。另外也有一句话说:“人一辈子要面临不少选择,可是真正能决定你命运的只有几个”。没错其实就是这样。web
若是你是计算机专业的学生,那么究竟是考研仍是就业就是首先要面临的问题。本文是面向肯定了毕业要工做的大学生的,因此关于这个抉择,再也不赘述。面试
就业的话,本文标题是码农,实际是指全部计算机相关的技术工种。包括开发、测试、运维等。算法
不少选择自己并无对错或优劣,只有适合不适合。数据库
不要滥用勤能补拙,这个词语一度被不少人奉为圭臬,但同时成了枷锁。我相信这个词,可是要考虑现状,要考虑投资回报率。你在本身并不擅长或不感兴趣的领域深耕了四年,最后不必定能得到多少成绩。固然若是你能在毕业后继续深耕几年或许是能够的,可是我但愿每一位大学生在毕业的时候都能有一份好的工做,而且若是你并不喜欢某一领域的话,那么我相信你必定不会坚持下去。因此咱们必定要找到适合本身的方向!编程
那么如何发现本身对什么感兴趣呢?我也不知道很好的办法,我只知道一个朴素的方法——尝试。趁着年轻,就要多尝试。千万不要大三了都还不知道本身兴趣在哪,想作什么,适合什么。因此大一大二努力去碰钉子吧。后端
数据结构和算法很重要,不管是面试仍是工做,不管你从事哪方面的技术。不过算法虽然重要,但并不适合每一个人都花费大学所有的精力去钻研。设计模式
相信不少学校都有ACM竞赛相关的社团或组织。很不幸,咱们学校没有,我大一的时候也花了不少精力刷题,可是硬件条件不太容许,氛围太缺少。若是你以为本身可以在ACM比赛中游刃有余,那么恭喜你,你能够一心一意搞算法。若是你以为本身在这个过程当中十分吃力,挫败感频生,那么也不要气馁,或许有另外一条路是属于你的。选择开发,有算法功底深厚是很棒的事,可是仅仅只有算法一样是不够的,计算机海洋还有不少未知等着你探索。浏览器
算法岗包括数据挖掘、机器学习之类的(怎么样,高大上吧,反正我不懂)。要说明的是想作算法的同窗最好选择读研继续深造,由于大企业在算法岗的招聘上对本科生是很不友好的。仍是要申明一句,你作开发也不能忽视算法和数据结构,起码面试仍是常常考的!记住一句:
算法功底好的人,运气都不会差
对于本科生而言作开发仍是相对容易的一条道路,不过开发的技术路线也是不胜枚举:前端、后台(PHP后台、Java后台等等)、移动端(安卓和iOS)、游戏开发、数据库(好比作DBA)……。这里我确定不会去推荐你去学哪种,我没有能力也不适合。只有你本身才能发现本身的兴趣以及好奇心之所在。
我能作的只是在浩如烟海的技术观点中,帮一个个本科生排疑解惑。
关于技术,不少本科生都存在诸多误区。初学者总喜欢追随牛逼的技术,实在过于盲目,找准本身的定位最重要。
误区1:图形化的东西比非图形化东西更牛逼
多见于初学者,尤为是计算机专业新生(我大一的时候就是)。当时学校教了点C语言,一直都是控制台程序,面对黑窗口,我就各类百度看看怎么弄出图形化的东西,那时候才知道GUI这个缩写是啥意思(当初知道这个缩写的全称还小激动了一下下,果真我仍是太年轻了),而后知道了WIN3二、MFC这些名词。。确实只能说是知道名词。当时对着视频教程作了计算器,就是用VC++拖拖控件,视频里的人敲一句代码,我就敲一句。后面虽然弄出来了,可是感受本身什么都不懂,只是依样画葫芦。这时我才意识到,还有不少基础没有打劳。
八卦一下,如今桌面客户端的开发工做并很少,因此你们谨慎选择这一技术方向。桌面端GUI技术一度火爆(MFC、Qt、WinForm、WPF、Swing……),但现在早已经是互联网及移动互联网时代。因此你们真的要慎重选择。不过仍是能够学习一下的,至少能加深你对编程语言以及设计模式的理解。
误区2:非图形化的东西比图形化的东西更牛逼
具体而言就好比说:后台技术比前端技术、客户端(Android、IOS)更牛逼。多见于有Linux背景的人(没错,说的就是我=_=|||)。
我也一度这样认为,其实否则。这里和上一个误区一块儿澄清一下:技术自己没有高低优劣之分,但程序员对其有好恶之别。
另外要说明一下,不能说前端就简单,后台就更难,一样反过来讲也不对。我只能说这彻底是不一样层面的东西,不能量化的去比较。先后端都自有其难点以及G点。你不能说你能处理后端复杂的并发、同步、高可用,那么你就能轻松地完成美观的网页及特效、处理麻烦的浏览器兼容、极尽所能地下降页面的加载速度。就比如一样是一双按在键盘上的手,那么钢琴家演奏优美的乐曲和程序员开发高性能的软件,哪一个更困难?(比喻不必定贴切,但但愿你们能明白这个意思)
误区3:XXX是最美的语言/框架/平台/……
多见于PHP程序员。哈哈,开个玩笑。这里不是在谈论谁是最好的语言,而是告诉大学生朋友们不要迷信论断。
我大一的时候去图书馆看书,看到有JavaWeb的书,前言写的很清楚,痛陈了PHP和ASP.NET的缺点,阐述Java是多么优秀,OK。你可能也和我同样,在入门的时候经历过相似的事。我要告诉你的事,多翻几本书,你会看到ASP.NET和PHP书籍的前言写的一样精彩,你毫不会在ASP.NET的书里看到夸耀Java的句子。不一样的技术自有其优劣,千万不要成为前言驱动的学习者。。
继续八卦一下,虽说不通技术自有其优劣,可是就目前国内形势来看,学习Java绝对是不错的投资,Java后台几乎占据了中国互联网企业后台的半壁江山。而.NET技术确实日薄西山。不过PHP如今依然有很顽强的生命力。
另外还有一些经典论断:
LAMP架构只适合中小企业;
MySQL只能用于中小企业,大企业都用Oracle。等等。
这些论断从技术角度出发,确实无可非议,但却并不客观。见过一些朋友,对MySQL充满鄙夷,以为MySQL很容易出现瓶颈之类的。其实我想说,阿里、腾讯都大量使用了MySQL。别问我为啥MySQL被这么大致量的公司采用(无外乎开源的好处和历史缘由啦),我以为,只要技术够屌,什么瓶颈都能克服。。
相信每个大学生都逃过课,我也不例外,并且不少。我在谈逃课,其实也是从某个侧面来谈自学。以前有个网友和我咨询如何面试,如何准备之类的,他已经大三了。学校的课程完成的不错。但我感受他还欠缺不少。要想找到好工做只靠老师教你那些东西是不够的,跟着学校的进度走,其实只会让你落后。我并不是一味的鼓励大学生逃课,个人观点是要选择性的逃课(若是是好课那么即便不开课也要去蹭课的)。哪些课要逃呢?
1
无聊的课程。
好比思修、毛概、马原通通要逃。别急着反驳我,就是逃课而已,不要形而上。我不是党员,也没有申请过。数学相关的课程,我只想说量力而行,数学确实对于程序员来讲还算重要,可是不一样岗位对数学的要求又不尽相同,你能应付就好好听,不能应付就。。
2
与你的技术方向无关。
这个就要看你是否是计算机专业了,若是你是其余专业学生,可是对计算机感兴趣,相信不少课都是能够逃的了。或者好比你的技术栈是创建在Linux基础上的,可是学校有一门MFC编程的课,你有兴趣又有时间能够听听,没时间就逃,OK的。这个也是有个前提的,就是你能清楚的明白哪些课程是对你有帮助的。你说:“我学C++的,我把数据库的课逃了”。=_=||别说你读了个人文字。。
3
你已经掌握了的。
相信会自学的孩子,都有这种状况,那就是在学校开课前,你就自学过了某门课程。那么等到开课之后你就能够逃了,我就是这样逃了Linux编程的课。固然你要清楚的了解本身到底掌握了多少,不要本身是只知其一;不知其二,还自觉得懂了,就不听课了。其实要逃这种课,你也不须要懂得太多,你只须要保证你比老师讲课的水平高就好了。咱们有的老师,水平真心烂,不逃课对不起他。
可是不少学生老是走极端,说到自学就一点课都不上了,看不起学校的课程安排。本身在寝室学个把月就能轻轻松松地作出网站或者APP。可是我想告诉你,你能作到的,别人一样能作到。有一句话说的很好:
你的工资不是和你的工做时间成正比,而是和你的不可替代性成正比。
你和培训机构几个月量产出来的程序员差异在哪?仅仅是你没有给培训机构交学费吗?但你的技能和他们是差很少的啊。因此说学校教的基础课是很重要的,最直接的好处就是笔试,笔试考的就是基础。而后这对你长期的职业发展也是颇有帮助的。你工做几年以后(可能就是一两年),发展确定会遇到瓶颈。
多读书,读好书
这是一句老掉牙的话了,可是事实就是如此,阅读经典书籍,你的投资回报率其实远高于阅读低质量的书籍。那么什么是低质量的书籍呢?好比《21天精通XXX》之类的。可是无论读什么书,都不能盲目跟风、囫囵吞枣。在网上,生活中常常看到各类索要书单的网友,借鉴别人的书单是能够得,可是直接照搬照抄则是不明智的。由于每一个人已有的知识储备是不同的,别人阅读的书籍不必定适合你。因此阅读合适的书籍也是一种重要的命题。
阅读合适的书籍
那什么是不合适的书籍呢?我认为有以下几类:
1.与本身的技术栈绝不相干的。
这相关与否是创建在你已经作了清晰的职业规划的基础上,而且经过搜集信息可以本身辨识哪些是和本身的技术栈相关的,哪些是不相关的。固然,我并非鼓吹你们技能点越单一越好,技术人员固然须要不停扩充知识面,可是对于大学生而言,这要创建在你在主要的技术栈上的积累已经足够多的时候(足以应付面试),否则东一榔头,西一棒槌,最后只能样样稀松。
2.超出本身能力范围的。
虽然我前面说要读好书,要读经典书籍,可是必定要量力而行。不少经典书籍的阅读须要必定的基础,若是你只看到了别人对这本书推崇备至就开始强行阅读,最后一般也很少是蜻蜓点水,像读小说同样读完了而已,最后什么都没学到,还浪费了时间。老子说“企者不立,跨者不行”就是这么个道理。
3.知识点与自身已具有知识过分重合的。
面对一本经典书籍,可能你已经具有了那本书中所阐述的绝大部分知识,那么还有没有必要读呢?个人建议是:能够查漏补缺,但不要通读。不少经典书籍,单拿出一原本说都是值得阅读的,可是放到一块儿就不必定了。由于两本书籍可能70%甚至80%的内容相似,这时你读完一本,再通读另外一本就没有必要了,好比我读了《C++Primer》就没再去读《C++PrimerPlus》了。固然你能够阅读不重合的部分,这须要你有较强的辨识能力。
《C++PrimerPlus》虽然从名字上看起来像是《C++Primer》的增强版,但其实并非。它们是不一样的做者,而且从风评来看《C++PrimerPlus》貌似比《C++Primer》还要基础一些。。
善待图书馆
请你们必定必定要善待图书馆。说实话我大学几年对咱们学校并没过多好感,可是惟一让我不舍的就是图书馆。相比电子书,我更喜欢那种手指翻阅纸张时那种真实的触感。大学临近尾声,这几个月疯狂的去图书馆借书读书。上个月居然发现图书馆新购入了好几本好书,惋惜的是我实在是没时间读了。哎,忽然发现本身一直以来都是不太会读书的人,从大一到大四都借过很多书,但真正能读完的并无几本。固然了,前面我也提到了,有些书是不适合通读的。但仍旧有不少须要通读的书籍被我丢弃,直到最近几个月才认认真真地读了基本完整的。
“书非借不能读”
很朴素的一个真理,借的书由于是时间限制,因此会逼迫你阅读。而若是是你本身买的书,你潜意识就会以为“啥时候读都同样”。固然这是对自制力不强的同窗们说的。
技术栈,或者叫技术体系、知识体系。首技术栈起于编程语言却又不止于编程语言。你能够多尝试,而后找到本身喜好的技术方向开发深挖。然而不少学生一般会在起步的时候就陷入迷茫。在网上看到过一我的,想学web开发,各类调研,而后向别人征求意见该学哪门语言比较好,哪一个框架更有优点。后面大概过了半年,他还在纠结该选哪个。
我只想说:先跑起来。语言很重要但并无那么重要。不管语言仍是框架这些都是工具,在这些工具的使用过程当中提炼出的思想、方法、认知才是你的能力。有了能力,即便你换了语言,换了框架照样能快速上手。我以为大公司通常不会计较你对某一框架的API熟悉不熟悉,他更看重的是你对框架背后的设计哲学和原理是否了解。
技术栈就像一棵大树,树根多是操做系统、网络、算法、数据库。再靠上一点是编程语言。接着树干就是你的职业方向,能够是安卓、IOS、前端、后台等等。别忘了还有树枝和树叶。技术没有孤岛。把本身封闭在闭塞的圈子内十分危险。你应该是具有了深度的同时再拥有广度,请注意拥有深度是前提。
没有什么东西绝对该学或者绝对不应学的,切忌盲从,照搬照抄别人的学习经历,强迫本身看别人的书单。谁说你是后台的就不能看前端的东西?在你后台技术成熟以后是能够的,这样也能加深你对总体架构的理解。
另外这些树枝和树叶上悬挂着的也可能NoSQL、Git或者Docker等,你不须要在每一个方面都是专家,但你应该对新技术抱有好奇心。
无论是前端仍是后台,框架都是层出不穷的。每一个都学,谁都会疲于学习。但实际上你并无必要这么作,对于一个框架,记忆它的API永远是最低的技能,你要从中提炼出一些共性的知识点。好比后台框架,你学了以后你要记住的应该是URL路由、模板、权限控制、MVC的设计等等。那么你换一个框架,即便有不一样,你也能快速上手,思惟上只是换一套API,接着补一下个别差别,新特征而以。对于编程语言的学习也是如此。
C++的STL里面有各类算法,不少时候参数的参数都包含一个函数对象(实际为重载运算符()),这就是函数式编程啊。学了Java,你会感受到不少时候其实也都是在进行函数式编程,而且比C++更甚,尤为是jQuery这个库的用法。提炼出不一样语言之中的类似处及不一样点,不只能帮助你学习新语言,而且能帮助你巩固旧语言,加深你对旧语言的理解。
另外呢。计算机学科的不少课程其实并非彻底孤立的(虽然可能看起来如此)。你好比说操做系统课,讲连接和装载,这确定和C语言编译的可执行文件有莫大关联啦。讲内存管理,分段是啥?你不知道C语言里面数据段、代码段、等等吗?内存的分配策略和分配算法,其实C语言里面malloc就在使用这些策略啊。你们必定要学会在不一样课程之间创建联系,这是一件颇有趣事。
关于求职,必定要早作规划,最起码在大三开始就应该定下求职的规划。举个例子:
我意识到本身直接参加大四的秋招可能有不少不足,可是若是我找一个大三的暑期实习应该相对秋招要来的容易,而且实习留用的几率也比直接秋招经过的几率高。退一步讲,即使我实习不能留用,我已经有了实习经历,勇气真的很重要,那么我再去参加其余公司的秋招胜算也会大不少。
本身的短板必定要早点发现,而后及时找到弥补方案。好比你项目经验匮乏,那么你就应该在其余地方找到填补,例如:把基础打牢(从上层应用到底层原理),深刻了解数据结构和算法,阅读开源项目源码等等。
俗话说“知己知彼,百战不殆”,你应该找个时间(不须要太早)去看一看你所关注的公司往年的笔试题以及面试题。网上有不少笔经面经可供参考。
其余的规划还有不少,好比你大概何时开始就应该频繁关注各大公司的招聘信息,何时开始海投。若是你准备去外地面试,那么提早给本身准备好足够的钱,不只是车票,面试过程可能会持续几天,须要住宿之类的。
这是个见仁见智的问题,若是你基础足够好,那么大能够不要花太多时间在刷题上,可是我也建议你读一读《编程之美》、《剑指Offer》、《程序员面试宝典》、《程序员面试金典》之类的书来熟悉一下题型。
吐槽一下,我当时看的《程序员面试宝典》是第4版,不知道为啥出到第4版了,错误还不少。前半部分还好,值得一读,后面就不敢恭维了。你们读书必定要警戒。
若是你基础不太好,那么刷题就尤其重要了,虽然有点取巧,但也不失为一个办法。
这里提一下C++,即便你投的岗位不是C++(是Java或其余),那么笔试的时候遇到C++的几率也是很高的。这是由于考察C++更有区分度,更加便于筛选,因此但愿你们尽可能突击一下C++。固然,不一样公司的选拔风格不同,因此仍是多参考一下他们往年的笔试题吧。(前端的话应该考不到C++,这点我不了解)
以前咱们学校本科生进BAT的不多,可能要隔一年才有一个。可是其实并非咱们学校学生真的这么差,虽然咱们学校不怎么样,但不表明咱们学生的素质就是如此。缘由很简单就是缺少勇气。我曾和一些学长学姐共事过一段时间,他们对于BAT以及其余的互联网大厂,都是想都不敢想。我也曾经羞于说出本身的梦想“进入BAT”。
全部互联网大厂都是不会来咱们学校所在城市(南昌)招聘的,咱们要想面试这些企业都要去省外城市(好比武汉)。异地面试也是给不少人心中形成了无形的压力,以为跑这么远,要是面试失败咋办,以为不只丢了钱还会丢面子。其实很幼稚,每一个人都应该尽本身所能找到最好的工做,不必想这么多,你丢掉的钱,早晚会获得更丰厚的回报。你丢掉的面子,早晚也会得到欣羡的目光,最差的状况你也能告诉本身“努力过了,争取过了,失败了也不后悔”。
想我当初但是在武汉面试蘑菇街一面就挂掉了,而后三天以后又收到了腾讯武汉面试的短信。你说我去不去?
“蘑菇街你都挂了,你还要面腾讯?”
我去,我必定要去。
还有一点就是不要惧怕本身学校差(普通一本甚至二本),不要嫌弃本身学历低(本科)。首先研究生们在算法岗方面确实你本科生有优点,可是在开发岗上并没什么差异。而后大公司招聘虽然喜欢招聘名校的毕业生,这只是由于仅仅经过半个小时或一个小时的面试,面试官真的很难了解到你的全貌。而若是你是名校的学生,那么无形之中就在证实本身的能力,首先你能考上这个学校就说明了你的学习能力,而后这个学校师资力量,办学条件十分优厚,确实能助力学生的成长。若是你学校通常,那么面试官可能以为你学习能力有欠缺,或者以为这样一个学校并无好的条件去培养你。
可是这绝对不是所有。你是普通学校的学生,并不表明你没有足够的学习能力,没有掌握足够的职业技能。你须要作的仅仅是努力向面试官展现出你的学习能力,你所掌握的技能就行了。我有一个老乡,二本学校,可是去年收割了BAT的offer,其中霸面百度拿了specialoffer。他大学期间就作了不少事,作了不少项目,还开办工做室等等。这些大学经历以及项目经验写到简历上,和面试官一聊,那么面试官真的不会在意你是什么学校什么学历的(网易除外)。
另外若是你想更好的提高你的编程能力,学好C语言C++编程!弯道超车,快人一步!
C语言C++编程学习交流圈子,QQ群【757874045点击进入】微信公众号:C语言编程学习基地
分享(源码、项目实战视频、项目笔记,基础入门教程)
欢迎转行和学习编程的伙伴,利用更多的资料学习成长比本身琢磨更快哦!
编程学习软件
编程学习视频