最近看几个微信群的气氛很不对,大家也不要气馁,我们聊个程序员的话题,这是我对程序员的认识,希望对找工作的朋友或即将从事这一行的朋友,有所启发。
回顾自省,从2011年开始工作到如今已有八个年头,前两年一直在做企业级开发系统,使用的还是jQuery和Java,中间四年赶上了移动端蓬勃发展的末班车,一直在从事跨平台的基础研发,从基础的Hybrid架构到复杂的小程序体系,最近两年则是在研究密码学和区块链相关的技术,业务层面也是在做一些小众领域的事情,比如Chrome扩展,Go写的服务端和Desktop软件。
为什么要说说这些经历?其实从这些经历来看,我做的事情基本上不是那么的连贯,除了移动端跨平台技术的积累。
我想说的是我们应该把自己定义成工程师,其次才是前端工程师,Java工程师,Go工程师。我们应该具备这样一个能力,快速的找到每一个领域的技术脉络,这从本质上改变了一个人的思维局限。
深度的本质都是业务的沉淀,当我们在做任何的性能优化,链路复用,架构设计,都是在根据公司业务的真实情况去做推断与规划,推动所在小组往前走。
编程这个事情,很多情况都是相通的,就说 react ,这个周末我花了一天时间阅读了 Dan 的文章,他讲了一些设计精髓,业务层面说了很多如何共享逻辑代码的设计(HOC render props hooks),巧用顶层APIs(如cloneElement),框架上其实还是深度优先,数据结构其实就是通过createElement创建对象然后组合起来的一棵树(Vitual DOM,Fiber,Diff),这里面有思想的设计和具体的实现,大体脉络很清晰,这一点非常重要。
那么,平时我们掌握到什么程度才是最好的呢?我个人很推崇“认识”的理论,所谓的认识是指我们一定很清楚这可以解决什么问题,采用什么方式是最优的,不一定说我立马就能写出来很清晰程序算法。我们可以想想,算法提炼出来,就是数据结构和步骤的组合,而我们则是在利用这些去解决业务问题。
走到深水区,我们就应该想一想,我们的能力可不可以给公司创造价值,说白了就是深挖业务并且能赚钱,这种价值不管是短期还是长期。我们需要主动的思考,寻找到一个共点,职场上也是一样,对于你的老板,交代的任务,一定自己先思考一下,怎么做才是最好,然后这个价值能不能体现,因为有时候你的老板都不一定清楚这个有没有价值以及能不能做,当你思考清楚了反复沟通聚焦共识,这真的很重要(埋头做事,一杆子下去很容易坏事)。
对于面试来说,我们应该尊重每一个机会,并有所准备。
想当年我为了去大厂,leetcode刷了200多道题,《算法导论》,《操作系统精髓和设计原理》,《TCP/IP协议》三本书粗略的看完,研究并吃透jQuery源码,require.js源码,backbone源码,以及Grunt源码,横向扩展了早期iOS开发,主导并设计早期Hybrid架构来实现跨平台,现在回过头来看,这些东西随着时代发展少了些价值意义,至少在面试上。不过唯一的价值是早期从中吸取到不少有意思的设计思想,指明了当时的发展脉络,并延续到了现在。
现在这些刷题的事情,我就不想做了(而且很厌恶),因为我已经具备了认识,以及敏锐的感知外部世界的发展轨迹,剩下的事情,就像马老师说的,跟个好老板比找好公司更重要。