@
aleimu 简历确实被投爆了,但其实符合要求的人很少,我们对候选人的要求还是很高的,希望候选人一定要基础扎实,各种知识技能融会贯通,而不是言必称高性能、高并发、高可用、微服务,这样的候选往往问得稍微深一点,问一些本质性的东西就答不上来了,感觉国内很多开发者的技能树点歪了。
我理解,在这样一个浮躁的社会,大家都想学点“值钱”的技能,都想有一技傍身,都希望去下家拿个大 offer ,但是希望大家基础一定要打牢,基础不牢地动山摇,勿在浮沙筑高台。编程语言、面向对象设计原则和设计模式、数据结构与算法、操作系统、数据库和计算机网络这几项一定要掌握好,还有英语的重要性强调一万遍也不为过。同时也要理论联系实际,不要纸上谈兵,可以没事造点小轮子,然后跟业界领先的同类产品做比较,从而获得提高。调 API 写应用写 CRUD 跟封装一个好轮子需要的能力相比至少差两个档次。
另外,不要脱离场景谈技术,最近几年大家有一股盲目追求微服务的风潮,实际上大部分场景用单体就可以了,运维、部署、监控还更简单。并发不够了先适当垂直扩展一下,要是还不行的话,单体也可以横向扩展,单体不代表就一定是单机部署,也可以多实例配合负载均衡。只在实在有必要的时候再考虑微服务,而且不管是单体还是微服务都要先把模块划分和依赖管理搞顺了,这样在需要切分微服务的时候也就顺其自然了。如果下决心搞微服务了那配套的工具和基础设施一定要跟上,DevOps 、自动化测试都要搞起来(自动化测试的重要性强调一万遍都不为过),否则最后很可能变成“分布式单体”( Distributed Monolith )或“分布式大泥球”( Distributed Big Ball of Mud )或“分布式屎山”(我发明的词),四不像。最近几年连微服务的原始布道者 Martin Fowler 和 Sam Newman 也开始在反思微服务,也在告诫大家要冷静,要慎用微服务,要先单体,必要时再一个服务一个服务地切分出去。当然有的情况是架构师或技术管理者希望故意把事情“搞大”、“搞复杂”,想要争取更多的资源分配和曝光度,来获得职场晋升,那就不是技术问题了,不在本文讨论之列。
今天有感而发,班门弄斧了,希望大家不吝赐教,欢迎大家批评、斧正。