今天上午又去招聘了,加上前面一段时间的招聘经验,有些话不吐不快。
我们希望找到能干活的人,就是能编程序的人,但是我感觉现在刚毕业的人里面,包括名校的,能干活的人比例非常的低,大概不超过百分之一。
很多人都说,没有参加过实际的项目,没有经验,希望能够在工作过程中学习等等,开始的时候我也这样认为,随着面试的人的增多,手下新人的增多,我的看法逐渐变了。
不谈个人主观能动性方面的种种问题,我想谈谈我心目当中的科班出身编程序选手的及格线。
如果你希望编程序为生的话,那么,大学才是你最重要的经验积累地点,相反,工作单位能够积累的东西很少,或者说绝对是第二位的。
大学里面,最重要的课程有两门,一门是编译原理,一门是数据结构,这两门课的课程都不重要,重要的是课程设计,也就是老师让你上机做的题目,就我这段时间面试的上百人来说,我认为其中的九十九个,这两门课的课程设计要么是直接复制别人的,要么是蒙混过关的[只碰到一个真刀真枪作过的],其实,这两门课是你大学里所有学习内容当中对编程序的能力进行训练的最根本内容,也是你在社会上永远碰不到的学习机会,任何,不论多贵的培训机构,也不可能给你提供这两门课的训练深度,我见过太多的毕业之后又花一两万块参加各种形式的培训机构培训一年的选手了,你学会一万种框架的配置方法,也不如你大学的时候把这两门课上好有意义。
编译原理的课程设计,一般来说要求做一个词法分析器或者语法分析器,最屁要你做一个数学公式的逆波兰式解析,我个人看法词法分析器或者语法分析器都可以,单作逆波兰式,则最好能够做到支持各种类型的运算的地步,比如逻辑运算等等,这门课的课程设计如果能够独立完成,可以在你的大脑里面创建一个整体化的计算机思考方式,最重要的是,这个过程能够让你学会面对一个复杂问题的时候,如何通过各种计算机语言来解决问题,、、、,好处不再列举,其实你毕业之后参加的任何培训,其算法复杂程度都不可能和这门课程相比。
数据结构的课程设计,关键点在于两个,一个是数据结构和算法本身,这里需要理解和学习的主要内容是循环和递归等等,其实如果你上面一个做得好,这些都不是太大问题了,学习一下各种数据结构的应用还有些意义;第二个最重要的训练目的,就是如何在计算机当中表达问题的问题,很多人跟我说,我的课程设计是二叉树排序,输入就是我自己输进去一堆数字,输出就是把这些数字排好了再输出到屏幕上、、、faint,晕倒,讲一个汉诺塔的例子吧:
汉诺塔本身的算法只有二十几行,不太好理解,但是也不难理解,那么,如果希望做一个东西,把汉诺塔表达一下,应该考虑什么东西呢?
首先,需要考虑清楚几个塔,个个盘子,应该用什么表达,用什么数据结构表达?这个是一个关键问题,需要能够把塔和盘子和数组以及数组里面的元素对应起来思考问题,不要看这一点简单,实际上太多人根本就没有办法在大脑里面完成这个转换。
其次,要考虑清楚其中有哪些元素可能发生变化,盘子的数目是最简单的变化元素了,有没有其它的了呢?
有,移动的速度,如果你移动得太快,那么谁也看不清楚,你等于什么也没做、、那么,至少两个元素要可变,一个是移动速度,一个是盘子数目。
好,轮到表达方式了,你要是牛的话,就画成棍子上面穿着有洞的盘子,不行的话就竖线上面穿横线,移动的过程,牛的话做成动画??不行的话就演示每个步骤地结果既可。
好,该怎么画出来呢,这个时候你就要弄明白如何在屏幕上划线,这个简单,重要的是如何擦掉一条线,还不能把棍子的那个点擦掉,这就有点问题了。
好了,上面问题都解决完毕之后,用什么语言编程序就很次要了,c也好,pascal,java,任何语言,一个带两个参数的动画演示汉诺塔的东东就出世了、、、[我花了一个半小时]
数据结构的学习过程中,如果能够在四五个题目上面做到上面的深度,相信你绝对受欢迎。
以上两个课程设计,如果都能够独立完成,一般来说毕业后两三年内收入必然超过五千,如果在北京上海,应该可以肯定超过一万。