sunlingsz 2017-05-01
在一次面试中与主管聊到了什么是编程能力,这是一个值得思索和回味的话题。什么才是一个程序员真正的编程能力?或者,非科班程序员与科班程序员相比差在哪里?
作者认为,编程能力分为两个方面:理论基础和系统设计能力。在当前的技术水平上,继续提高实力需要一“上"一"下":"上"是往宏观方向走提高系统设计能力,“下”是往微观方向深挖夯实基础。
理论基础是指程序员需要掌握的关于计算机和编程的基础知识,包括计算机组成原理、操作系统原理、编译原理、数据结构与算法等。如果往机器学习、大数据、图像识别领域发展,还需要掌握高等数学、线性代数、概率分析、离散数学等数学知识。
虽然工作中,绝大多数开发任务都不会用到太多基础知识,但这些基础知识作为根基,决定了一个程序员能否成为优秀的程序员。编程是一种抽象,程序是人类与计算机交流的载体,了解计算机才能更好地交流。数学是程序的基础,拥有良好的数学功底才能设计出合理、高效的算法去解决问题。
系统设计能力是对问题进行抽象并设计出合理实现方案的能力。拥有良好的系统设计能力是成为软件架构师的基本要求。虽然有很多成熟的框架可供程序员使用,如 spring、MyBatis、dubbo 等,但通用框架解决的是一类常见场景的抽象问题,工作中遇到具体需求仍然要求程序员自主设计。
系统设计的好坏直接影响项目的长远发展。随着业务的发展,对兼容性、并发性、可用性、扩展性、伸缩性等会有越来越高的要求。真正达到极限的时候,不可能推倒重来、不可能冒着风险进行大规模的重构,因此系统设计终将成为瓶颈,必须有好的程序员进行良好的设计才能支撑起不断发展的业务规模。
流行的开源框架往往规模巨大,凝聚了很多优秀程序员的智慧,模块划分合理,拥有良好的架构设计、恰到好处的设计模式、安全高效的并发处理、值得学习的编程思路。深入研究开源框架能够提供系统设计能力。
每周 3 篇学习笔记或技术总结,面向有一定基础的 Java 程序员,内容涉及 Java 进阶、虚拟机、MySQL、NoSQL、分布式计算、开源框架等多个领域。关注作者或微信公众号 backend-develop 第一时间获取最新内容。