如何衡量一个程序员的能力?

444 阅读4分钟

最近常在思考一个问题,如何衡量一个程序员的能力? 笔者作为前端开发而言,就前端技术栈的角度来看,应用层的更新迭代是很快的,这很容易给前端从业人员带来焦虑感,例如react、vue框架又升级了,webpack升级到5了等等,对于这些新知识的涌入我们应该如何从容的面对呢?

看过网上一些大佬的分析,比较中肯的观点是只深入自己工作中用到的技术栈,比如你当下公司使用的是vue技术栈,那么无论react多火,你都不必急于去学习,而是应当更深入的研究vue的源码,理解其设计理念等,如果有余力,感兴趣,可以去玩一玩react,但我认为其实这个观点没有说明白一件事,就是如何判断自己是否有余力,何为感兴趣呢,其实对于新技术的盲目追从,大概率是源于我们对自己技术能力焦虑,总觉得知道的少了就会落败于人。

我觉得这种焦虑源于自身对程序员能力的认识不够清晰,为此我特地做了思考,也许以后看来会变也说不定。

在我看来,程序员的能力很大部分是由其眼界深度学习力所决定的。

眼界也可以理解为技术广度,俗称见世面。即所接触到的专业知识和编程思想等方面的储备,强调的是一个广。

深度,也就是对多了解的技术的深入程度,这体现在对某项技术的了解思考以及细节的把控,强调的是一个深。

学习力强调的是对专业知识的学习热情以及个人的综合素质,强调的是一个个人能力。

眼界同时会影响到学习力,因为你所储备的知识越多那么对于学习新知识的上手和理解就会更快,俗话说触类旁通嘛,这就是为什么你一门编程语言玩的6了,再来一门也能很快上手(语法层面)。

对技术深入应当是有选择性的而选择来自眼界,学习状态对于技术的深入程度起着至关重要的作用。

假如以为程序员负责开发一个较为复杂的系统,那么开发中最重要的三点都可通过这三项能力来衡量:

  • 眼界将从技术选型上控制系统的复杂度
  • 深入程度将从实现上控制系统复杂度
  • 学习力(以及眼界中的软件工程+系统架构)将从时间上控制系统的复杂度

眼界

眼界可以理解成你的知识储备。 为了解决不同的难题,你都有什么十八般武艺。

  1. 计算机基础

    • 计算机组成原理
    • 操作系统
    • 网络
    • 数据结构与算法
    • 数据库理论 这是程序员的核心技能,你的所有应用层能力都是构建在这些基础理论之上的。如果基础不牢固自然你想拔高也会比较苦难(笔者有切身的体会~哈哈)。
  2. 编程语言 编程语言有很多种,按照范式可以将编程语言分为:

  • 过程式
  • 面向对象
  • 函数式
  • 泛型
  • 混合等

例如: C: 过程式 Java: OOP python: OOP+ 函数式 js: OOP + 函数式 ts: OOP + 过程 + 泛型 C++/swift: 过程 + 面向对象 + 泛型

  1. 领域知识 基础框架 + WEB解决方法

  2. 数据库 关系型: mysql、oracle 非关系型: Redis、MongoDB等

  3. 设计模式 - 系统设计 真的很重要!!!

  4. 软件工程

深度

即对工具的熟练程度,例如对编程语言api细节的掌握,基础框架源码的理解等等。 对技术的深入程度,是在眼界的基础上对各项领域的研究和投入,人的精力是有限的,最好在某一两个领域有深入的研究。深入研究也就是对其运行机制和底层内核原理的研究(读源码是很好的方式)。

对于眼界中提到的几大领域,尤其需要强调的就是编程语言+架构能力(设计模式)+软件工程。这三部分能力就是程序员的能力模型。

学习力

需要有长远的目标,坚定的心!