【讨论】程序员的四层境界,你在第几层?_面试

从初级码农到大神,大抵要经历四个阶段,你在哪个阶段呢?

不知道怎么做

刚开始接触这个领域的时候,肯定是不知道怎么做的,各种东西都需要学习,这时候关注的问题大概是这样的。

怎么把字符串转成字节数组?怎么连接数据库?怎么每隔一秒执行?怎么使用bitmap

对每一个具体的细节都需要了解,哪块不了解的话,都有可能成为项目的绊脚石。

那么这个阶段怎么突破呢?首先是要系统地学习,然后就是学会使用搜索引擎,学会找资料和方法,然后看别人是怎么实现的,自己慢慢学习和积累。

【讨论】程序员的四层境界,你在第几层?_面试_02

知道怎么做,但是不知道该做成什么样

突破了第一个阶段,基本就能到达这个阶段了。基础的知识都可以通过搜索引擎找到答案,再也没有什么细节能难住自己。

这个阶段我们能做一个博客系统,一个论坛,一个贪吃蛇,一个五子棋,一个俄罗斯方块。

能做这么多东西了,一开始会很有成就感,但是想做再大一点的项目和系统,就会碰到各种各样的问题。

为什么代码越来越难添加?为什么重复代码越来越多?一星期前写的代码现在怎么看不懂了?怎么处理高并发?怎么保证高可用?怎么扛住大流量?

这时候我们知道具体细节和功能如何实现,但是不知道系统应该做成什么样。

举个例子,我们可以做一个俄罗斯方块的核心逻辑没问题,但是当这个俄罗斯方块需要加入积分系统,对战系统,好友系统,排名系统,分享系统等等的时候,要考虑玩家爆发式增长,考虑玩家掉线等等场景的时候,就会不知所措。

这个阶段怎么突破呢?

多去看开源项目的源码,经常重构自己的代码和项目结构,注重模块化设计思想。多看一些高并发处理的技巧,分布式系统的设计,如果在公司有机会的话,多多实践。

【讨论】程序员的四层境界,你在第几层?_面试_03

不知道怎么做,但是知道要做成什么样

突破了第二阶段,就到了这个阶段。这个阶段应该怎么理解呢?

举个例子,以前都用的java,但是最近一个项目要用go,一点不会怎么办?

没关系,虽然不太懂go的语法,但是知道项目要分模块,操作数据库和缓存要封装成接口,业务逻辑封装在service里面,用过接口暴露给上层,核心业务要写单元测试。

至于代码具体怎么写,不会也没有关系,自己花点时间熟悉一下go语言,或者招一个会go的就行了。

其实我们可以发现,越是高层的技术管理者,写代码的时间反而越来越少,但是他们却对系统的关键部分了如指掌,其实这就是第三层境界。

眼中已经没有具体细节和具体语言,一个系统交给他,他看到的只是系统的结构,各个模块之间的关系等,是什么语言写的已经不关心了。

如果做公司高管,到这层已经够了,因为细节的事都可以交给下面的人来做。但是如果是要自己出去单干,有一人闯出一片天的梦想,这层还不够。

【讨论】程序员的四层境界,你在第几层?_面试_04

知道怎么做并且知道做成什么样

创业公司扛把子的技术老大要求是非常之高的,不仅要知道应该做成什么样,还得自己会做。因为手下没有多少人可以供自己使唤。

如果自己偏科了,那就很难做出好的产品。后端巨牛前端不行,做出来的产品体验就会很差。前端巨牛后端不行,做出来的产品就会非常不稳定。所以创业公司的技术老大一定是一个非常全面的全栈工程师,他一个人要负责或者至少熟悉项目的架构、前端、后端、运维等。

能达到这一层境界的人非常少,即使达到了,只要过一年没有跟进新技术,很快又会回落到第三层。

【讨论】程序员的四层境界,你在第几层?_面试_05

有趣的是,这几层境界还真和工作时间没啥关系。有的人在学生时代就能领悟学习方法,达到第二层。而有的人,写了好几年代码了,碰到细节问题还在群里问,宁愿等着别人告诉自己,也不愿意动手查点资料,看看文档,更别说看源码了。

程序员的四层境界,你在第几层?

【讨论】程序员的四层境界,你在第几层?_面试_06