《 都说程序员赚钱,非计算机专业能否做程序员? 》中我们分析了程序员这个行业的发展前景以及什么人能够成为程序员。这一篇我们来聊聊初学者该如何入门以及如何选择职业发展方向。
大多数人印像中程序员是无所不能的,潇洒地输入几句代码便可以帮助人们快速完成复杂的工作,什么黑网站、入侵电脑更是不在话下。确实,在电脑还未普及的年代,人们把掌握电脑操作的人称为“科技人才”。这个称谓也不为过,因为当时的软件基本上是基于 Dos 的命令行应用,想要使用电脑就得记住一大堆复杂的命令,没学过还真操作不了。直到 Window 的出现,极大地简化了操作的复杂度,使非计算机专业的人也可以操作电脑。但是在软件开发层面来讲本质上仍然与 Dos 没有太大区别,无非一个是命令行应用,一个是桌面应用,程序员只须掌握一门语言即可完成软件开发(Dos:C/C++、Basic、Pascal 等,Window:C/C++、VB、PB等)。随着互联网的发展,今天的绝大多数应用并非一门语言可以完成,比如我们经常浏览的网站或是一些 Web 应用,就分为前端和服务器端。前端用来展示界面与用户进行交互,服务器服用来计算业务逻辑为业务做支撑。它们采用的开发语言也不相同,前端:JavaScript、HTML/CSS、服务器端:Java/PHP/.Net 等。再比如我们手机里五花八门的 App,仍然分为客户端和服务器端,客户端有 iOS(苹果)和 Android 等不同操作系统的版本,不同的操作系统采用的开发语言也不相同,iOS:Objective-C/Swift,Android:Java。为了让用户拥有更好的体验,在这些应用背后还架设了大数据、机器学习等平台。所以说以前的应用和今天的应用无论从规模、复杂度还是技术的多样性上都不在同一个量级。
我们会经常会听到很多人讲要成为“全栈工程师”(全栈工程师是指掌握多种技能且能够利用掌握的技能独立完成项目的人)。想成为“全栈工程师”是因为还不是“全栈工程师”,也是因为“全栈工程师”的稀缺和难度所以大家才给自己定了这个目标。今天大多数程序员掌握的技能与过去相比没有太大差别,也都较为单一,只是因为系统的规模和复杂度导致一个人很难完成,需要聚集各种不同技能的人一起。从这个方面来讲成为程序员并不需要什么都懂,无论系统多么复杂,只要具备基础知识和学好一门编程语言即可找到工作。接下来我们围绕入门、就业、前景这三个方面来聊一聊新手该如何选择方向,大家可以结合自己的实际情况判断。
当前的应用从技术领域划分有单片机、移动端、Web端、服务器端(应用、中间件)、大数据、机器学习(包括图像识别、语义识别、声纹识别、推荐、预测等等)等。
单片机是将中央处理器(CPU)、数据存贮器(RAM)、程序存贮器(ROM)、输入/输出(I/O)接口、定时/计数器(T/C)等电路集成在一块芯片上的微控制器。内部集成了相当于微处理器的电路具有微处理器的功能更有微处理器所不具备的功能,它可单独的完成现代工业控制所要求的智能化控制功能,这是单片机最大的特征。大多数单片机采用 C 语言开发,需要有一定的脉冲数字电路、原器件、串口通信、电路、控制、功耗等知识基础。未来物联网的兴起,对单片机的需求量会越来越大,就业前景比较向好。
移动端是我们常见的软件,比如手机中的 App,主流的移动端操作系统有 iOS 和 Android。iOS 采用 Objective-C/Swift 语言,Android 采用 Java 语言。这两种平台,入门都比较简单,大多数应用开发起来相对也比较简单(当然也有复杂技术,这里仅讲的是大多数 App),主要是做界面渲染和交互。在前两年移动互联网正热的时候,市场对这类人才的需求量非常大,薪资也比较高(在移动互联网爆发的年代,市场上的热钱很多,创业公司如雨后春笋,开出高薪挖人),很多非移动端开发的程序员纷纷转行做了移动端。虽着近几年市场疲软,投资环境的冷静,这两年对客户端程序员的需求热度有所降低。随着 5G 的到来,未来界面渲染和交互工作有放在后端实现的趋势(客户端仅做展示非渲染,手机等设备的硬件成本也将得到大幅降低),客户端程序员的需求可能会进一步缩减,就业前景不是很看好。
Web端主要是HTML和JavaScript语言,这里着重谈谈 JavaScript。JavaScript 是 Web 开发中的通用语言,是当前主流前端框架 React、Vue、Angular 的基础、核心。当前比较热的微信小程序也离不开 JavaScript。JavaScript 也是一门被严重低估的编程语言,人们总是认为它仅用于开发前端界面和交互。实际上并非如此,随着 VR(Virtual Reality 虚拟现实) 的兴起,各大浏览器厂商也加入了其中,可以通过 WebGL 在 JavaScript 中实现虚拟世界。另一方面,ES6 的到来使得 JavaScript 语言可以用来编写大型的复杂的应用程序,具备了成为企业级开发语言的能力。早在 1995 年 JavaScript 就可以基于 Netscape Enterprise Server 开发服务器端,但直到 Node.js 的横空出世让人们真正考虑将 JavaScript 应用于服务器端。我有注意到 JavaScript 社区非常活跃,在 GitHub 上的 JavaScript 开源项目远远领先于 Java,招聘 JavaScript 程序员的企业也越来越多了。个人比较看好其未来。
服务器端是指对客户端、Web端提供某些服务的系统。我们看到的 App 也好,网站也好,其背后都有一个或多个服务器端系统为其提供服务和支撑。用于开发服务器端的语言有很多,比如 Java、PHP 等。相比 JavaScript,Java 比较容易掌握,也有利于规模化开发。像淘宝这类超大规模复杂应用背后的大多数系统就是利用 Java 开发的(实际上阿里集团的绝大多数系统和中间件都是采用 Java 开发,国内外绝大多数服务器端也都选择了 Java)。根据 TIOBE 公布的 2019 年编程语方排行榜前三仍然是 Java, C, Python,由此可见市场对其的需求量。未来 5G、物联网、AI 仍然离不开服务器端系统的支撑,另一方面,有了服务器端开发经验,转型大数据、机器学习相对也比较平滑和容易。就业前景仍然向好。
关于大数据和机器学习,不建议零基础的同学一开始就学习,因为很多专业的东西对于零基础的人来说很难理解,学习效率会非常低下,尤其是在动手实践时你会发现无从下手。因此建议零基础的同学先从服务器端入手,打好基础后再转型大数据或机器学习。这里就是展开讲了。
当然除了以上讲到的单片机、移动端、Web端、服务器端(应用、中间件)、大数据、机器学习外,还有非常多细分的垂直技术领域,不过并不建议初入职场就从事这类工作。比如我有一位朋友,入行15年,一直从事着浏览器开发。前段时间因公司经营不善打算换个工作,这时才发现除了浏览器,其它技术完全不了解,着实费了很大力气才转型。
通过以上分析,相信你应该有了自己的选择。“世上无难事只要肯登攀”,我们共勉。