作为一个程序员,我该学点什么

从头梳理下作为程序员应该学习哪些知识,寻找自己的薄弱点。

反思

作为一个工作了10年以上的程序员,自己怎么继续提升自己的能力,这是一个很重要的问题。 我想,首先要反思一下自己的能力,找出自己的薄弱点,然后针对性的去学习。我想,程序员需要了解的知识可以大概分成这几类:1.计算机编程基础知识;2.编程语言;3.设计模式;4.框架;5.工具;6.软技能。接下来我逐个方面分析自己的情况。

1. 计算机编程基础知识

编程的基础知识应包括了1.相关硬件;2.操作系统和程序运行生命周期;3.二进制和逻辑运算;4.ASCII等编码规范;5.数据结构和算法;6.网络协议。我觉得自己已经离这些知识有些远了,日常工作中往往都是具体的应用层面开发,很少涉及和关注这些底层的内容,要想进一步提高,我有必要在回头深入学习这些基础理论,希望能温故而知新。

2. 编程语言

编程语言是人和计算机沟通的语言,让计算机可以理解人类的命令。我主要使用的编程语言是Java,之前的工作经历中也涉及到Javascript, HTML等前端语言和较少的.NET, PHP等后端语言,在自学数据相关知识过程中学习了Python语言。我觉得,我对Java的掌握还需要进一步提高,我应该花时间再读读JDK8/JDK17的源码,并深入研究JVM近几个版本的变化。同时,前端语言我也要花时间去学习,跟进最新的前端变化,可以阅读和微调前端代码。而Python作为大数据和AI场景使用较多的语言,我现在可以做些基本的应用,后面要多学习模仿优秀库的源码,提升自己的Python水平。

3. 设计模式

设计模式是高阶程序员间高效沟通的基础,我对设计模式有一定理解,但是日常使用时一般都是常用的设计模式:如单例、工厂、装饰器、策略等等。一些复杂的设计模式或设计模式的复杂用法,我往往避而远之,这是我需要提高的地方,我需要做的是回头看看自己完成的代码,看看哪里可以使用设计模式进行优化,同时也要多看看优秀的开源代码,学习他们的设计模式。通过多读多练提升自己对设计模式的敏感度,在沟通和编码过程中提升效能。

4. 框架

框架是程序员的利器,我在工作中使用过的框架有很多,如Spring, Spring Boot, Spring Cloud, Mybatis, Hibernate, Struts, Spring MVC等等。但我在日常工作中,往往把框架视为工具的一部分,对具体实现细节并不关心,这是我需要改进的地方。我需要花时间去看看框架的源码,了解框架的设计思想,这样才能更好地配置和使用框架,同时也能更好地理解框架的使用场景,在技术选型中要知其所以然并说服团队成员。

5. 工具

编程过程中可以用到很多工具,开发使用的IDE,存储数据的数据库,完成各个特定功能的中间件如Redis, Message Queue, Search Engine等等,此外还有DevOps相关的工具如Docker, Jenkins, Kubernetes等。我在工作中使用的工具有很多,但是我往往只是使用,而不去了解其原理,这是我需要改进的地方。我需要了解工具各个配置项的含义和应用场景,这样才能更好地使用这些工具,在遇到问题时能快速定位问题并解决问题。同时了解各个工具自身的能力局限,这样才能在技术选型时做出正确的决策。

6. 软技能

作为一个技术岗位,程序员需要不断更新迭代自己的知识,自学能力是职业发展的基础。我自学的最大问题是不求甚解,不追根究底,这导致我学习的知识浮于表面,不成体系。针对这个问题,我建了这个小网站,我需要逼自己把自己之前学习的成果梳理和深挖,形成自己的知识体系,这样才能在以后的学习中触类旁通、事半功倍。程序员的另一个重要能力是沟通能力,我们需要快速理解业务需求,和产品经理、测试人员、运维人员等其他岗位的人员进行有效沟通,同时在说明自己程序设计时清楚表达自己的设计思路和相关原理,以便让同事理解和接受自己的设计。我觉得我理解能力是足够高的,我能快速理解业务需求和同事们提出的问题,但是我在表达时存在思维跳跃的问题,我需要学会观察听我说话人的表情,确定他们是否理解了我表达的内容再确定接下来该继续还是回头解释前面难以理解的部分。

提升计划

上面这些问题不是能一步解决的,我要把我的时间分为三类:1.工作时间;2.碎片时间;3.大块时间。在工作时间,我需要多思考,并记录下每天遇到的问题和自己容易犯的错误,确定自己哪里的知识存在薄弱点,并不断应用自己已经掌握但不熟练甚至不敢用的技术和设计模式,在应用过程中提升自己。碎片时间里,我可以学习一些零散但需要积累的内容,如提升英语、沟通技巧、了解技术新趋势等。大块时间我需要分成两部分使用,一部分用于学习马上就能用在工作中的技术;另一部分用于继续夯实自己的基础,从计算机编程基础开始,逐步深入学习,形成自己的知识体系,提升后续的学习效率。