算法和数据结构的确是程序员的基本能力,但精通它们并不是码农的基本需求。
不抖机灵的话,算法和数据结构属于个体的能力。而大多数码农最大的挑战是社会化协作,是工程质量。
码农最需要的三项技术能力,是阅读理解,杂乱的记忆检索能力,侦探式的逻辑推理。
数据结构和算法那些清晰严谨的概念,论理解难度,哪能和产品经理写的洋洋洒洒几百字……需求文档比?哪能和你接手的离职程序员的交接文档比?哪能和你公司 Sdk库、自研框架的FXXKME(README)比?
随便一个开发需求,产品文档藏在哪里?开了多少个交流群?到哪里填写开发进度?需求评审要找谁?你要修改哪几个库?你眼前ide打开的项目是哪个?刚搜过的stack overflow问题在浏览器哪个标签页?要修改的文件怎么找?上线建表工单联系谁?……开发六成以上的精力在这些琐事上。
最后,你接手的项目出bug了。问题可能出在哪个环节?客户端?通信?网关?中间件?缓存?数据库?代码里写反的布尔判断?服务器磁盘满了?运维把redis读库做了持久化?分布式配置中心各环境配置不一致?……
大多数码农本来就在写简单的业务,而做业务百分之八十的时间都在解决代码无关的琐事,一天有效代码一百行不错了。
协作能力,工程素养(解耦,分层,复用,debug,代码质量,测试习惯……),对大多数码农和打键盘人而言,远比算法和数据结构重要。
结果有经验的程序员因为年龄大和没准备八股文,倒在了hr与一面面试官前。而应届做题家们屡创倒挂新高。
做题家们正式工作后,一看到直冲云霄的屎山,才意识到现实残酷性。一边骂着不负责任的老混子,一边要大展鸿图。
他们刷了大半年的算法题,从没教他们怎么去封装、分层、解耦、尽可能少写代码复用别人的。来自算法的优越感使他们造了一个又一个用尽语法糖,难以读懂的神代码。他写了十行的代码,我偏要用一行写完,这才叫生产力语言!看不懂是你没文化!结果几天后QA报bug工单了,自己也读不懂了
而学会的各种花式数据结构,面对没有任何注释的json嵌套结构体,面对各种红map<interface{}>interface{} defaultdict map<T>object 也毫无用武之地。上下游还偏偏要求强类型校验,一个整数不用字符串传就自爆给你看……
最后这些习惯了打游戏到凌晨的做题家,在赶不上末班地铁的绝望中,终于成为了被他们鄙视的前辈,一样开始自暴自弃地造屎。
为什么现在大公司普遍面试造火箭,工作拧螺丝?因为只有你拥有造火箭的逻辑思维能力,才能够遨游在巨大屎山屎海中,找到那颗螺丝,拧下去,还能不造成屎崩。