最近想了想最近刚刚发布的 vlang 语言,想到每年有这么多语言出生,瞬间想了很多。作为从事编程工作三年的人,简单谈一谈现在的自我理解。

如何学习一门编程语言

首先说一说我们如何学一门编程语言,首先我们要学习的肯定是一门语言的语法。语法都学会我们也能算是个马马虎虎的入门了。那么接下来就要学习这门语言的生态了。包括:官方提供的功能库,各路大神或机构维护的各种第三库和框架。我们用 Java 举个例子我们基础语法其实很快就可以学会了,然后就需要学习 Java 本身提供基础库。比如加密框架、HTTP 网络框架等等。还有第三方大神或公司机构提供的 Gson 库,Spring 框架,MyBaits 框架等等等。这样我们当熟知部分常用库或框架,并有能力去实现一些业务功能时,才能算得上是真正意义上的入门。其实很多人有时候说 XXX 语言干 XXX 业务或某些特定的事特别适合顺手,那么除去部分语法因素,其实说的就是这个语言的生态环境。

入门后的进阶

入门之后我们就可以去完成一些基本的业务的编程工作了,下一步我们可能需要对性能进行优化,这就需要继续对语言以及框架进行深入的了解才行。比如:这门语言很多功能的实现,各种框架实现原理,实现细节。才能够让我们更好的使用这门语言,做出高效稳定的业务系统;你需要优化某些代码或框架的性能时,就需要去了解框架的实现代码,但是框架或工具库里面的东西都是很多专业人士总结、抽象、优化的结晶。就需要你很了解数据结构和算法以及相关业务,然后了解到当前系统或框架的短板,再根据当前业务在有限的计算机资源、网络资源内尽可能使业务流程的安全的快速的稳定的运行。那么为什么需要了解业务呢?比如:你可能需要优化网络,那么你首先需要知道网络通信的原理和基本流程,这样你才能够看明白代码,你才能知道根据当前业务如何去优化它。那么为什么需要了解数据结构和算法呢?比如:你需要优化搜索业务你首先需要非常了解业务,然后根据现有业务去选择数据结构和算法才能得到最优解。在理解代码的时候你还需要明白大概的架构,他是干什么事情的他是怎么通过代码来描述和构架整体业务的。

接下来你们的业务可能会飞速发展,然后业务上又会遇到很多瓶颈,可能是软件的也可能是硬件的。这一下优化我们可能有需要了解计算机组成原理,当前语言是通过怎么样的方式来控制硬件。这你就需要了解计算机组成原理和计算机系统来实现和优化业务需求。

换一种思维看 Android

我们换一个整体思路我们使用 Android 来叙述一遍,当然这个例子不是特别恰当大家放开思维想象一下,如果把 Linux 当成一门编程语言的话,那么 Android 就可以当成是一个应用框架,那么我们学习安卓开发就是在 Linux 生态和 Android 框架生态里遨游。我们入门时所学习的首先是语法 Java,然后就是学习 Android 框架,比如:四大组件、存储服务、通知服务、后台服务等等等。然后用熟了我们就算 Android 入门了。然后我们遇到优化的需求,我们呢就需要去看 Android 这个框架的代码实现,然后业务发展和服务的客户增长我们就需要去优化代码,才能写出好的代码。然后我们对性能的要求更高了,就需要去继续了解 Linux 的实现原理,以及当前业务在手机上的瓶颈进行优化。这里面就需要涉及计算机组成原理、网络通信、数据结构、算法、计算机系统等各个方面去优化。

总结

总结一下,从上面提到的内容其实从上到下都穿插着抽象思维、架构思维、解题能力、业务能力等,我觉得这些能力是一个工程师最基本的能力,甚至不只是工程师可以说是适用于所有人。我理解就如下图,首先现在编程语言的语法都基本趋于相近了,一通百通学起来比较快。算法、数据结构等底层原理是一个程序员的地基,内容比较多,需要系统的学习。抽象思维、解题能力等需要一直在工作生活中努力提升。你从事那些业务就需要精通哪方面的业务。

dev_programming_feelings.jpg