本文是之前发表在我校的一个帖子,涉及自己以往学习编程的一些经历和看法,为软件专业的学弟学妹的科普解惑之用,最近被挖出来,我都快忘了,顺便整理一下,在此贴出。
前言
博主假设阅读本文的人是未接触过计算机相关的但希望从事此专业的人,可能有不严谨之处,望各位谅解。
我的计算机之旅很久之前就开始了,那时喜欢鼓捣各种各样的计算机小技巧,然后就去逛各种各样的“黑客”技术论坛,2010年以前的这些性质的论坛还不像现在那么扯淡,最起码还是遵循着技术共享的原则,去泡论坛可以学到很多东西,尝试着拿站,下木马拿肉鸡,充其量也算是个脚本小子吧,没什么技术含量。
我真正接触编程的时候是在高一,因为当时我到的技术文档好多里面都是一坨一坨的代码,我才终于知道编程的含义,也明白了编程的重要性,不想做脚本小子就只有深入学习编程。
我的编程之路就这样开始了,我还记得我买的第一本书是谭浩强的《c语言程序设计》,这本书不怎么好,错误(也可能是勘误)太多,我看完C Primer Plus后才真正觉得谭浩强简直是误人子弟。我会在后面给大家推荐一些好的书籍。
高中的时间过得飞快,平时看编程的书用的时间也很多(大多数时间都是),高中的时候没有电脑,没办法调试代码,我就把代码写到本子上,有时间去网吧了敲上在调试,成绩一落千丈。不过我坚定了自己的梦想,要走什么样的路。
高考完了之后因为成绩太差根本没思考上什么学校,只有两个原则:有学上,且必须是软件专业。
其实本校还是不错的,最起码环境不错,但是学习氛围就不是太好了(图文楼二楼阅览室看书的人很多,我感觉那才是学习的地方)。本校的软件专业不是强势专业,老师的教学水平不再多说,关键就是本校的课程安排问题,什么都学也什么都学不好,面试的时候问学过xxx没,说学过,再问就不知道了,我觉得也是咱们学校教学最大的弊端吧。
如果以后想在计算机相关的职位发展,最重要的一点就是有甄别的去上对自己专业有益的课,因为在本校的时间只有两年多一点。在此感谢我的辅导员陈老师对我的支持,谢谢!!
下面来讲一下软件相关职位对于文凭的要求。
文凭重要吗?
在现在这个注重学位和能力的时代,很难说清楚学位和能力哪一个更重要,在计划写这份文章之前我去面试了四五家企业,小到刚创办没几年的小型企业大到上市的科技公司,我发现,几乎没有面试官都不会特地询问你的学校和成绩,大概开场就是你对这个行业的看法,以及对希望应聘的职位的理解,还有工作经验,实际能力(笔试)等等。其中又一次的时候我问那位面试官说:你们公司对学历有什么要求吗?那位面试官说:现在在我们公司,主要以能力为评判标准,如果你的专业实力够强,高中都可以。当然,像现在人们所熟知的大公司而言,一般来说对于学历的要求是本科,像华为,腾讯等等,国内的科技行业主要是BAT(百度阿里腾讯)三家,他们对于雇员的技能要求是很高的,但是之前去XX面试的时候,XX的面试官说,如果通过了XX的考核会有XX的免费的猎头服务,其中百度对于雇员的要求就没有提对于学历的最低需求。
总的来说,现在的科技行业,尤其是IT圈,大部分公司主要还是看能力的,但是文凭作为面试的敲门砖也是非常重要的。但是这个文凭是否重要这也不能盖棺定论,不同的公司的公司文化不一样,同时公司的产品对于雇员的技能要求也不一定,比如就像游戏引擎开发商,人家需要的是高数很厉害的雇员,这种情况下,公司的招聘文凭要求最起码要本科以上。像一般公司需要雇员的技能在于能够很好的调控好自己的代码,使用公司内部的接口,不要求太高的数学水平,那么这种公司对于招聘雇员的文凭要求肯定会低一些。
总的来说,现在IT圈还是很好的时代,文凭不能决定一切,但是有的话作为面试的敲门砖也是很好的,当然,不管怎么样,自己都要有很好的专业技能,IT圈需要的知识很广泛,现在,不管有没有学位,学好专业技能才是最重要的。
IT求职的技能要求
IT圈对于雇员的技能要求的话,这个比较多,不同职位的专业要求也各不相同,在这我就结合之前的面试数据先单独讲一下软件开发相关的技能要求。
其实对于软件开发相关的工作来说也是有很多方向的,比如现在很火的安卓还有iOS的开发需要的JAVA和Objective-C,还有开发应用需要的C++或者C#等等,语言太多,这里就不再赘述,我就讲一下这些软件开发的方向中他们相通的地方。
软件开发,顾名思义,开发计算机程式。现在一般的大学来说软件工程系中的专业(比如计算机科学,软件工程,网络工程等等)都会教授一两门的编程语言(大部分刚开始都是C语言),因为学习一门编程语言有助于你了解简单的计算机运行原理,同样,软件开发需要的技能最基本的也是编程语言,可能有很多人会说,现在有那么多编程语言怎么学啊,当然,每种语言都有它优势的地方,只是应用的方向不同而已。关键的是要有自己的编程思想,简单的来说就是利用编程来解决问题的办法。这也是求职中最基本的技能——有自己的编程思想。
其次,不同的公司也有对于编程语言的要求,有的公司从事安卓游戏开发,那就使用JAVA,有的公司是主要做iOS开发那就使用Objective-C(当然SWIFT也是可以的)有的需要开发Windows下的程序那大多数用C#,如果想要开发出效率要求比较高跨平台的程序可以使用C/C++,人工智能方面可以用LISP,都有优势的方面。所以这个技能——熟悉一门编程语言(最好是面向对象)和拥有编程思想化为求职的基本技能一类。
程序员的求职进阶
在面试的过程中,我特地注意到了,现在大部分公司对雇员的要求不仅仅限于编程语言这一基本技能一类,还有很多的专业技能要求。
在我之前的面试中,有一次,刚开始面试,面试官张口就来:做过什么项目?对于W行以上的项目有什么管理经验?使用什么数据库?是否熟悉linux环境开发?对于你需要面试的这个职位你有什么经验?可谓一棍子打倒闷和尚,没有准备的话很可能就会被问懵了。当然,这也可以看出来,软件开发需要的技能要求。
第一, 如果去面试时有拿得出手的项目更好,会让面试官清楚的明白你的专业技能水平,当然了,如果是应届生没有什么拿得出手的项目怎么办?这就要靠自己平时多写几个Demo了
第二, 项目经验,其实可能都以为项目经验这个东西应该是院校牛人或入行几年的工程师才会有的,其实也不尽然,没有项目经验可以讲一下自己的编程经验,代码管理经验等等。
第三, 数据库,不管你需要什么语言谋生,这个肯定是必学的。其实数据库本身是管理数据方式,像MySQL和Access都是比较有名的。对于数据库,还是先好好学学SQL语法吧。
第四, Linux,其实不管你是不是一个Linuxer,还是希望能够学习一下linux下的基本操作和开发方式,因为很多公司的开发环境就完全在linux下,大部分的公司网站都是运行在linux服务器上,还是建议安装Linux发行版来用(如果是C#开发的话就不用了…)。
第五, 数据结构和算法,本来想把他们两个拆开来写,然后发现我在这个写过的东西基本还要在重复一遍,那就先把他们两个放一块吧。先说数据结构,数据结构就是计算机存储、组织数据的方式,设计原因主要是用来减小存储空间——空间复杂度(O(f(n)))和效率——时间复杂度(O(f(n)))。数据结构中有很多很多的算法,这也是数据结构和算法不分开写的原因,数据结构是抽象的,需要算法描述。算法,按照字面意思看的话可能被理解为计算方法,其实算法应该称为是计算机处理问题的方法。比如最简单的,判断a,b两个整型哪一个是MAXIMA,脑海里浮现出来怎么才能知道这两个数那个大呢?如果你想到:他们两个比一下不就行了。那么,恭喜你找到一个算法了。就这么简单,当然编程就是设计算法并实现算法,也是编程的精华和最难的部分,多写多练就是了。
到此,关于软件专业求职的技能要求就先写这么多,现在来看,IT行业的技术人才主要是需要自己的专业能力。
在此我写一下对于软件专业来说需要什么东西。电脑一台(打着学习的幌子买好电脑的人用来打游戏的人,可耻。这个初学期间几乎没什么性能要求,不想买电脑,花个几百买块树莓派就够了),不玩游戏(这个最重要),多看书多练习,尽量学好数学和英语(英语把我折腾的蛋都快碎了…),有自己坚持的梦想。
推荐书籍
下面是推荐的书籍:(阅读顺序尽量按排列先后顺序)
《C Primer Plus》《C和指针》《数据结构(严蔚敏版)》《C++ Primer》(C++) 《Effective C++》(C++)《算法导论》//之后的书籍可以根据你的想要工作职位的方向来选择,因为学JAVA和学C++需要看的书是不一样的,看过上面几本之后你一定会有自己的方向。
后记补充
补充几句:如果数学不错的话学编程应该容易一些,因为编程中很多算法都能在数学中找到抽象模型,两种思想互补,再看也很容易理解的。就像find算法,就是一堆交并补集而已,类似的太多不再赘述,数学能抽象出一切!
另外很多学弟学妹询问的如何才能学好编程问题,目前来说,这个没什么硬性要求,入门的话,识字(看书),会用电脑(写代码,查资料),肯用心(耐得住寂寞)就可以。至于数学和英语是进阶,提前埋坑,还是很有用的。
附思维导图
下面是之前做的思维导图,几本书的目录,算是路线,在此扔上来。