作为若干个中小型公司的产品技术负责人,我也面试过不少应届大学生,筛选简历的时候我并不 care 他是什么大学的(当然221工程的一般也很少会来投),我只看他掌握了什么,参与了什么,然后会在面试的时候问他在开发中学习了什么。当然那些标注X鸟培训的一律不要。
我对国内大部分大学计算机系的教学都不满意,学校会教学生使用C,使用sql,使用java,甚至也有教 PHP、Ruby 等,但我想问问,有哪个学校真正把为什么要做软件,软件主要解决什么问题,什么样的软件才是合格的软件讲清楚的?
我面试过的学生里,没有一个能说明白这个事。可以想像,做一件事,连这件事的目标,做事的方法都不甚明了的话,光去学习如果使用工具又有什么意义?
另外就是对软件工程的轻视,如果说开发语言是解决软件的零件问题,那软件工程就是如何把这些零件给拼装起来的流水线,它设计的好坏直接决定了最后拼装的速度与效果。大学虽然都会开这门课,但实际作用实在是不敢恭维,有些老师自己都不理解也讲不清楚。
但是这些的重要性甚至超过了数据结构,编译原理等课程,同时这也造成了一些非常奇怪的现象,比如这几年移动互联网火热,移动端的工程师工资水涨船高,比之前做B/S的贵好多,但实际上移动端的技术含量真的有那么高吗?
一个 B/S 的码农,如果前后端都做的话,类似我这样的,需要掌握的技术至少有:
一门高级语言(C#、java、php等),SQL,XML,WebService/WCF,Javascript(JQuery),CSS,HTML,还不算可能使用的大量第三方框架,JS框架和浏览器兼容性等附加问题。我想大部分做移动端开发的工程师都不具备上述技能吧。
回过头来说说软件设计,会写代码的并不一定就会设计,世界上可能有天才,只写个半年程序就能做系统架构,但我肯定不是这一类的,相信大部分人也不达不到这样,系统架构不仅是技术级的,更重要的是业务级的,软件设计至少要具备:
对业务有强大的理解与整合能力,能深刻把握需求文字中的重点与非重点,对其中相似的业务进行抽象与剥离,对流程中的敏感点(如权限)有很强的把握能力。
对技术有充分的认知与储备。认知我就不说了看悟性,说下储备,世界上技术太多,谁也不可能把所有技术学完,所以在遇到新技术时适当接触一下,当某一天可能需要时,大脑里有个印象,可以再刨出来仔细研究。
强大的编程功底。不得不说中国的软件开发模式很悲哀,经常见到项目负责人被下面的程序员忽悠到死的事。你要求他两天内完成,对方非要说得做一周,你如果不懂,真是一点脾气都没有,但更重要的作用在设计系统数据结构与接口时更好地对工作量进行预估。
但事实上大部分人即便知道这些也最终没能去做架构设计,原因很简单,大部分人受不了写代码的枯燥,做一段时间就跳槽换岗或者混日子。最终只有少部分人是认真用心的写代码,几年下来,自然就掌握了很多设计思路。
虽然被人称作码农,但别真把自己当埋头码代码的农民,用心写代码和用手写代码不是一回事。
摘自:@ZTalk青龙老贼