本文主要是介绍给在校大学生的一封信,助梦启航!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近收到一些在校大学生的来信,询问大学应该怎样学习,应该选择什么方向学习什么技术,应该如何为工作准备…… 看到这些问仿佛看到了当年的自己,深有感触!发现其中很多问题对大部分大学生都很有帮助,于是将回信以博客的形式公开,结合自己一路走来的经历与大家分享个人对IT行业、学习、工作的看法,希望能帮助更多的人。
原信的内容请看最后的[附录].
我该选择什么方向?
我该怎样学习?
有什么方式可以让我从牛A变成牛B?
你好!
展信愉快,收到你的来信说明我的文章还是能帮助一些人,能影响一些人!感谢你对我的关注和认可,欢迎你继续关注我的后续文章并出宝贵的意见!
从你的信中能看出你是一个积极上进、有目标有想法的好青年,还在大一的你就对整个行业有如此清醒的认识和深刻的思考,已经远超当年的我了。看了你的信,我感到很欢心,也很愤怒;欢心是在大一就对自己有如此清醒的认识和目标,愤怒是你给我提了一堆很难回答的问题。哈哈,不过我还是很欣赏你这样积极进取的人,为此我决定花较大的篇幅来和你探讨一下人生和学习,不能说建议,只能说是一起交流。
年青,是一个血气方刚,梦想开花的阶段,但也会有很多的迷茫,也会有对未来的担忧!包括现在的我也时常会感到迷茫,有来自生活的压力……
IT技术方向划分:
你对技术方向的概括算是较全面了,我稍微修改一下觉得这样划分更合理一点:移动开发方向、web前端方向、web后台方向、游戏开发方向、算法/研究方向。因为互联网行业后端服务器一般都是Linux,所以web后台开发和Linux服务器开发可视为是一个方向(除非你指的Linux服务器开发是系统架构师,不过那是运维的工作,应该不算做开发吧)。还有一个方向是算法/研究方向(如大数据、云计算、内核开发),虽然你把它从本科的范围内排除了,但我个人不这么认为。虽然算法/研究方向基本上都要求研究生或博士及以上,但本科生还是有的,只是比较少,需要非常厉害的优秀人才,阿里的云计算还有本科生呢! 还有就是游戏开发以c++为主却不仅限于C++,虽然很多大型游戏都是C++开发的,比如现在的手游也有Android、IOS的开发的,还有些游戏开发会用新的技术(如比较有名的Unity,可能在大学都还接触不到)。数据库基本上都是架构师和程序员一起的设计的,只有大公司才会有专业的DBA。
IT行业的发展趋势:
移动端
移动端(手机操作系统)是一个变化最快的领域,也存在很大的变数。10年之前,在诺基亚风靡全球的时候,你会想到Android有现在这么大的前景这么多的用户量吗?10年开始(其实08年就开始酝酿了),Android迅速崛起,发展异常的凶猛,到12年几乎人手一台Android设备了,与此同时诺基亚却一路下滑,直至跌到低谷再也爬不起来的,后来投入微软的怀抱也发展的不太顺利,已经是大势已去。而苹果从2007年第一代iphone诞生的时候开始,走的就是高大上的路线,主要针对的是高端人群,价格是所有手机中最高的,但技术也是最牛逼的,体验是最友好的,以至于每一次的发布会排队的人都济到爆!看到移动平台的快速发展和触摸屏手机的迅速崛起后,微软也于2010年投入了移动平台,发布了Windows Phone操作系统,凭借着 Windows PC操作系统的声望和Microsoft的品牌吸引了不少的windows phone的用户,但与Android和iphone相比,还是相差太远。个人认为:苹果是用户量较少,却是最赚钱的,凭借其强大的技术实力和追求完美的精神,在三到五年内应该还可以发展的很好,这方面的工作前景自然也是不错的;Android是用户量最多的,目前的就业机会还是挺多的,但未来是否会被新一代的手机替换还不可预知;windows phone关注的较少,个人不太看好!
说到手机我又不得不再唠叨一下。五年前,一说到手机就会想起诺基亚,今天,一说到手机就会想起Android和iphone。Nokia的衰落与Android兴起也就一两年的时间,可见技术的更新发展之快,我们这一代人还能想起Nokia,还会怀念它的耐摔性是手机中的霸主(曾经用它当板砖来敲钉子而丝毫不影响手机性能……),但00后可能就不知道Nokia是什么东西了,可能还会以为是哪个国家的语言…哦,说笑了,扯远了!Android的兴起也颠覆了人们的使用习惯,从按键操作的嗒嗒嗒一下转到触摸屏哗哗哗(切西瓜,哈哈……),造型上却是从各种个性化的(翻盖的,滑盖的,双喇叭的)手机造型到统一的造型(类似的配制,同样的触摸屏,都没有盖……),从这也能看出一种趋势:硬件将越来越趋于统一,软件将越来越细化(市场细分——各种针对特定人群的app,如针对学生的,针对病人的等待;使用的细化——越来越注重用户体验、关注细节)。
互联网
我认为IT领域未来的发展方向,从实体方面来看一定是智能设备和物联网,从领域来看一定是互联网+,未来的网络将会越来越智能。
互联网是网络与网络,网络与人的连接;而物联网就是物体与网络,人与网络的连接。阿里巴巴的投资人孙正义在互联网大会上说过:“今天每个人大概会有两个移动设备,2020年的时候,每个人连接的设备的数量会达到一千个”。未来将会是周围都是物体,而物体都与网络连接,也就是周围都是物体,周围都是网络。而且物体将会越来越智能,智能家居应该会发展起来,比如你一回家,空调就开了,电灯就亮了;一出门空调和电灯就关了,还提醒你今天的天气状况…… 现在已经有很多物联网慢慢发展起来了。
互联网+就是互联网与传统行业的结合(互联网 + 传统行业)。现在又有一个新的说法,就是“+互联网”,比如万科的房地产以属于标准的传统行业,现在与快钱合作引入互联网,也想打造一个电子商务平台。不管是“互联网+”还是”+互联网”,都是互联网不断地渗透到传统行业,互联网与各行各业的结合将会更加紧密,比如互联网+金融,现在BAT三家打的正热闹呢!再比如互联网与传统餐饮业的结合,打造出了现在的百度外卖,再比如新兴的e袋洗是互联网与洗衣店的结合。
游戏
我本人不怎么玩游戏,对游戏不太了解!但从整个社会发展来看,世界在不断发展,中国也日益强大,随着经济水平的不断提高,人们有更多的时间用来悠闲娱乐,也有更好的物质基础。在这种趋势下,玩游戏的人应该会越来越多,游戏行业应该会越来越景气。
技术方向的前景:
根据以上的分析,互联网将会应用的越来越广泛,web前端、web后台方面、移动开发的人才在未来的三五年内应该都是紧需的人才。随着大数据时代的到来,算法/研究方向的高端人才将变得及为紧缺。
技术的学习:
我曾经做过阿里和百度的校招笔试题,Java研发工程师的笔试题要求的计算机语言主要以Java为主,会有少量的C++题,程序设计的题目一般可以在Java、C++等语言中任选一种。题目的类型的话,你提到的数据结构与算法、数据库、操作系统、计算机网络等都会有。算法工程师职位的笔试题语言主要以C++为主,类型会有什么KNN啊、隐马尔可夫啊、最短距离等很难的算法。
Java的笔试题会有部分C++的题目,我想可能是有这么两个原因吧:1.考查你的学习态度是否认真努力,因为C++是几乎是所有大学里计算机相关专业学生的必需课;2.考查你对计算机语言底层的一些认识,对基础的掌握程度,比如:如果你熟悉C++,就会知道数组在内存中其实就是一块连续的内存段。如果你想做Java后台开发的话,就以Java web技术的学习为主,C++基础还是有必要掌握的。
方向的选择:
至于技术方向的选择,我觉得不管做什么选择,都应该以兴趣为主,跟着自己的心走!这样才不会留下遗憾。这样还无法做出选择的话,就跟着直觉走吧! 我觉得在对事件一无所知的情况下,直觉是0.5自我意识+0.5天意。我在大学三年主要学习的主要方向都是Java,在四上学期实习时的工作也是Java。后面发现Java虽然使用很方便,但很难有机会地了解底层的实现原理,而且大部分公司的核心产品为追求效率会用C++开发,学Java的话就很难进入核心部分…… 于是我就毅然转向C++,几乎从零开始。我同学都说我疯了(因为当时我算是Java学得较好的几个之一了),但我知道我是在跟着自己的心走!于是大四下学习我就开始C++的实习,后面经历了一此坎坷,但我仍然不后悔,直到现在也是。
如何证明自己很牛?
要证明自己很牛,首先得自己真的很牛!要变得很牛得自己不断努力,要证明很牛得通过平台。你说的这五条几乎包含了我所知道的全部,再补一条就是写书,如果你在大学能就某个领域写一本书足于证明你的能力,我就在CSDN见过这样的人毛星云(南京航空航天大学)。下面我只能就此更细细地谈谈自己的一些看法。参加软件开发大赛是一个非常不错的途径,但这种大赛得是全国性的,或者是国际性。在各种大赛中ACM无疑是含金量最高的,也是得到世界广泛认可的,数学建模大赛如果能拿到全国一等奖以上也不错的,也能得到认可,理工科都是建立在数学的基础之上的。博客是自己技术积累的见证,开源社区是自己代码质量的证明!国内博客网站比她的有CSDN、博客园,CSDN比较商业化,牛人也不少;博客园比较纯净和个性化。国外的博客网站了解的不太多,如果你知道可以一起分享一下。开源社区首先的当然是github不过了,如果你想去Microsoft或google的话,说明和注释最好还得是英文的。如果你想去Microsoft的话,微软MVP认证应该会有所帮助,这可以通过CSDN进行申请。
您感觉什么时候去搞项目的开发比较合适呢?
我觉得没有什么时候比较合适,你有能力和实力接到商业性的项目的时候就最合适的时候。你有能力才能接到项目,你有实力才能完成项目。只有做了项目才会知道哪方面的技术是欠缺的,这样就可针对性地继续学习。
您怎样认识做项目的质量与数量的关系?或者说两者哪个更重要一些?
单纯的质量与数量来说当然是质量比数量更重要。比如你要输出1到100的数,你是写100行输出语句还用一个for循环3行代码搞定?你的代码质量越高,代码就越少。如果你要问是应该努力提高代码质量还应该多做项目多写代码,我觉得这可以是一回事,曾经听一个百度核心部门的人说过,你的能力 = 代码量/时间,只有在相同的时间你比别人做更多的事,写更多的程序,你的能力才能提高的比别人快。代码写的越多,你的经验就越丰富,代码质量也就越高。
您认为做项目时要注意什么问题才能真正通过做项目来提高自己的工程开发能力?而不是“为了做项目而做项目”?
1.程序架构的设计。如果你完成一个项目只是让程序跑起来,可能很容易,但你要让这个程序具有良好的拓展性,代码有可重用性,就得先考虑代码架构的设计了。架构设计是一个很大的学问,这里就不细说了。
2.以项目为主线进行技术的学习。你做一个项目肯定会遇到一些技术难点,这时就应该对技术难点进行系统的学习,而不是网上搜到解决方案解决当前的问题就完事了。
请问您认为怎样从一群人中脱颖而出呢?
很简单:别人会的你会,你人不会的你也会;当问你一些问题时给出一个出乎意料却又正确的答案。
要在学习XX技术的过程中具体怎样做?
学习+实践+思考。对一个技术要通过较全面细致的学习;除了学习你还得动手去写,书可能会偏你,但计算机是不会偏你的,也就是除了懂原理你还要会应用;对同一个技术要能举一反三。这好像老生常谈了,具体怎样做不是一两句话能说清楚,其实我这方面做得也不好!
要避免出现哪些学习的问题和现象?
1.只知道看书,不动手写程序;
2.只知道1+1 = 2,不知道2+3 = 5;
3.只知道调用了a方法解决了问题,不知道为什么调用a方法就能解决问题。
请问您认为程序员的“核心竞争力”是什么,包括什么方面以及怎样去培养?
这个问题原来这么多人问过,但我之前还从来没想过。认真思考了一下觉得程序员的核心竞争力应该是:
1.学习能力(IT行业更新换代非常快,需要不断地学习新的知识和技能)
2.解决问题的能力(作为程序员你经常会遇到各种bug,定位问题,解决问题的能力是极为重要的)
3.态度(一个人的态度觉用心程度,是觉得能否成功的关键)
如何证明你的这些核心竞争力呢?
比如:1.在两个星期内完成了Windows API的学习并接手xx项目,在三个月内完成了这个10万行代码的项目,足以体现你的学习能力。2.我们公司的xxx项目组遇到一个xxx问题,耗了一周的时间没有弄出来,后来请我去帮忙,两个小时就搞定了,足以证明你解决问题的能力。3.坚持三年写博客并写作和出版了《xxx》一书,一年销量10万;工作也认真对待,半年就从一个普通的开发人员升为开发经理;足以看出你是一个有毅力,有上进心的人。
这些例子虽然说的有些夸张,但却是证明你能力的一个很好的方式,前提是你真的有这个能力!
请问您认为“怎样提升学习新知识的速度”?
通过我这些年来的经历和体验,我觉得学习和滚雪球是一样的,一开始学习的时候会非常的慢,因为你什么都不懂;但当你懂的越多会的越多的时候,你的学习速度就会越来越快,因为你积淀的基础更多,而很多技术其实原理是相同或类似的。
您认为要想做到“以不变应万变”除了学习能力强以外,还需要注重培养其他什么能力吗?以及在日常学习中怎样培养?
上面说到学习像滚雪球,那么在学习的时候就弃形抓神,理解技术的原理,理解技术的原理过程会非常痛苦,当你理解了原理再去学其他的东西入手就会非常快。还要多培养自己的思维能力,编程的思想,逻辑的思维。
请问您认为要怎样才能成为一名优秀的工程师?
如果你明白了什么是程序员的“核心竞争力”,并按照这种标准去做,离优秀的程序员就不远了。
写在最后
最后的最后,送你一句话:年轻有梦,勇敢去追!进入BAT不是梦……
附录
这篇关于给在校大学生的一封信,助梦启航!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!