算法对于一个程序员来说是不是必要技能?
目前接触过的公司,小公司相对技术要求不会太高,现实也不允许要求太高,"牛人"大多不愿意留在小公司,出入社会和相对经验不是那么丰富的,面对竞争激烈的招聘环境退而求其次,找个小公司锻炼一下再跳,这个可能是一些新人的想法,虽然没调查过,感觉上每年的新人应该有多半是进入了小公司,基本的判断是:1、大公司的招聘职位有限,不能接收这么多新人;2、大公司的数量有限,接收总量没那么多;3、大公司的准入门槛高,即使招聘新人,也是只招其中的佼佼者。
所以,本人认为多数新人还是进入中小型公司。
中型公司应该是有稳定的客户群,开发架构和业务范围也相对比较固定了,即使新人进入,经过一段时间的培训锻炼,也应该可以满足项目开发需要,而在这个过程中,新人也逐渐丰富了经验,渐渐可以成为主要开发者甚至项目核心,综合能力肯定是有提升的,不仅参与开发,可能还会介入设计,架构、算法、优化等过程都有涉猎,随着在项目组中重要程度的提高,算法能力逐渐提高,成为工作能力中关键性的因素之一。
小型公司相对客户的稳定性最差,且公司的发展方向甚至都不稳定,人员流动率也是相对最高的,新人进入公司,可能半年之内就离开,老人因为工薪、职业发展规划等原因,离开的几率也很高,有些老板会产生这样的想法,反正也是培养一批走一批,那就没必要深入培养,能干活就行了;有些老板很有长远眼光,认为我要不断发展壮大,用的人贵精不贵多,码工可以随时补充,但一定要有几个能挑起架构师职责的人在。
无论是基于什么想法,有哪些因素,现实是,大多数新人对算法掌握不好,这其中得到工作的新人要么是因为有潜力,要么是给面试官的印象不错,决定可以先试用。
从写码的角度讲,如果项目管理者把核心模块交给一个新人来做,是非常不合适的,本人确是知道有这样的情况,一个小公司老板因为原来写asp的人离职了,招了个刚毕业的,面试只问了几个问题,其中一个是:你会asp吗?那人说会,很熟。然后就把一个XX局的oa交给他一个人做了,一个多月后,那老板找我们老板说借个人帮帮忙,结果我就去了,一看代码,我哭的心都有了,年月日的checkbox,先在数据库里建三张表,分别是yyyy、mmmm、dddd,把年月日的数值事先写进去,页面代码中读表取得数字,for循环写入组件中,很无敌的写法吧,可以组合出2004-02-31~!~~~
新人最初的一个月甚至半年的时间,基本是来习惯团队的开发习惯和书写风格、架构模式,间接或直接学习提高个人能力,这个阶段只要模仿能力足够,求知欲望不错,都会有很大程度上的能力提高。
进入模块设计和核心开发者的阶段,算法逐渐体现出优势地位,尤其是优化发面。
但是,一个10人以上引入了项目管理的团队中,核心开发者一般不会超过4人,设计者一般不会超过两人,多数人还是码工,要求的算法不见得就那么高;更多的团队是分模块划分,仅描述功能需求,除页面显示、输入输出统一规划外,实现过程自己设计,这种情况反而对算法要求高了一些,但是核心模块和复杂的部分还是会优先分配给能力强的人。
对于大多数人来说,不一定是其主观上不想提高算法水平,可能因为环境的因素逐渐的影响了想法,够用就好,狙击枪能打出5公里就行了,打50公里即使你能造出来这种枪也远没有炮好使。
前几年听过一个词,唯算法论,当时是没什么感觉的,在这中间几年的工作里,受到过一些影响,对唯算法论深恶痛绝,最近一年有所改观,只能说既然它存在就有一定道理,毕竟计算机本质是由数学发展来的。
但我要说的是,算法不好的一样可以做出好的东西,一样可以写出优化的代码,通常意义上说的算法,多数指的是计算公式,固定的处理模式等,那些东西都是死的,条条大路通罗马,不是只有利用数学才能优化,其他方式同样可以,毕竟数学的逻辑关系是来源于实际生活中的需求,如果因为生活经验丰富之极,能总结出更简化的处理模型,也许就能胜过在代码级别上做的算法优化。
写这篇的目的,不是贬低算法,相反算法的重要性无可替代,只是个人的一点感慨,现在的面食官有不少是纠结于算法,还有不少是纠结于基础知识,算法还情有可原,毕竟能表现出一个人的逻辑思维,可基础知识这东西,就像我们天天在说中文,谁能完整地说出有几种修辞方式,书背的再好,真正体现在代码中了吗?我看未必。我之前的公司曾经拿面试新人的笔试题来考我们老人,应届生的及格率在80%以上,而我们的及格率在60%以下,说明了什么呢?
吐槽一下,希望面试官不要因为自己的喜好而埋没了人才