上篇我们说到领域技术,这里面涵盖的内容非常非常多,今天我们来一起聊聊,现在比较热门的几个领域方向。
1.移动app开发
移动app开发目前主要是iOS和Android两个大的移动平台上面的开发,从事所谓的Native开发。
这一块需要几个关键的内容需要去学习。
计算机系统
对计算机系统有比较扎实的基础
Native SDK
平台提供的SDK量是非常大的,比如:最新版本的iOS,它有上百个大小的Framework,常用的SDK都有几十个。最常用的一个SDK叫做UIKit,主要负责用户交互的控件,这个SDK下面就有数百个API,数百个不同的函数和对象。
当然这些内容你不可能一下子就掌握所有的东西,只能是先掌握最基础的,然后一边学习一边补缺。没有几年的时间去积累,很难说精通。
产品和用户感
移动app的开发,说到底还是前端应用开发,属于直接给用户用的部分。所以做前端开发的同学,最好有一点产品和用户感。比如:对审美有一些要求,对用户操作习惯有一些感知。
当你的产品经理提出反人性的设计时,你就可以大胆提出来,或者做一些优化。这一点对于一个开发者来说是一个优势。
GUI框架
GUI框架说白了就是平台的图形界面,这一块需要跟着官网的教程一步一步的学习。其中比较重要的就是UI模型。
第一个部分是UI交互,它里面包含了很多东西,比如:用户的输入,你反馈的结果,动画,音效,提示等等,这些都是你要学会去处理的。
第二个部分是核心业务,就是说你怎么去处理一些业务的逻辑。
第三个部分是数据业务,就是你要处理的数据模型业务是什么。现在主流的就是MVC模型(Model、View、Controller),MVC不仅仅是后端在使用,前端也在用这样的模型去设计和开发,感兴趣的同学可以自己去查一下这方面的相关资料。
2.Web前端开发
在早期的时候还没有Web前端工程师这样一个岗位,早期制作网页的角色叫网页设计师,主要是偏设计静态页面。
随着网页越来越复杂,浏览器的越来越操作系统化,编写HTML/CSS/JavaScript和编写Native的程序员在能力模型上面有着越来越多的交集,于是前端工程师的角色就孕育而生了。
因为需求的量比较大,入门的门槛不算很高,所以在近几年前端工程师成为发展最迅猛的一个领域。
现在前端工程师的数量很大,竞争也很大,但是要想成长为一名优秀的前端工程师是非常不容易的,你需要磨炼很多技能。
首先你得对两端都比较了解,即应用的服务端和客户端。即写得了页面又能写接口,这就是所谓的全栈开发者。
如果你打算从事Web前端开发,那么这几个并行的技能树是必须要去修炼的。
以HTML DOM为核心的基础技术 HTML/CSS/JavaScript
需要你对HTML/CSS/JavaScript的组合使用有深入的了解。
网络协议
HTTP的基础是你必须要掌握的,只要掌握了HTTP你才能够懂得如何与后端数据进行交互。
RESTful Service API
虽然前端一般来讲是属于消费API的这一端,但是你最好可以理解API的设计原理和最佳实践。
而且自己要会写一些API,这样你就可以建立前后统一的一套逻辑架构,不需要依赖后端的同学给你提供接口,你就可以自己进行开发调试。
常用快速建立API原型的办法有很多,比如:NodeJs,Python,Javascript 都可以快速建立API的原型。
GUI框架
熟悉掌握HTML的用户交互的GUI框架,这个比较简单,就不再详细说。
Web前端框架
至少熟练的掌握一种目前主流的前端框架,比如:Vue,React。如果你刚学完JQuery,接着来学Vue或React,这个时候难免你会有一些不适应,不要害怕,大胆的拥抱它,等你学会了,就会觉得原来这么爽。
除了学习如何使用之外,你还要掌握MVC,MVVM这些开发模式的基本理念,这样才能融会贯通。
更进一步时,你会关注到Web页面与移动开发的融合,比如:在移动的页面中去嵌入一些Web页面;同时开发Web,iOS和Android的前端,对应同样的一套后端服务。
跨端融合,前后端分离架构,对后端架构的逆影响
比较高端的Web前端工程师或者架构师,他甚至会主动的向后端渗透,他能够统筹所有的端,像iOS,Android,桌面各种各样前端的用户界面和应用需求,然后从用户的视角去影响后端架构的设计,他可以去跟后端的工程师交流。
学Web前端有一个好处就是它的发展非常快,技术社区很活跃,经常有学不过来的压力,不过同行很多,你不会寂寞。
3.后端业务开发
对应行业领域的主流编程语言和框架
首先你得掌握一门主流的语言,不同的后端领域它的主流语言不一样。
比如你做金融和电商,那么主流的语言是Java。如果你做即时通讯和游戏相关的,那么主流语言是C++。你需要去了解对应行业内使用的语言开发框架,这里面有很多很多知识需要去学习,并且它的迭代升级很快。
深入理解领域业务
对于业务开发来说,最重要的是你要理解业务,要能够为业务建模,要能够将业务完美的,高质量的实现出来。
这个领域对于一些外行来看,没有那么光彩夺目。但从事这个岗位的程序员是非常多的。
这当中最大的价值就在于将业务与技术结合的能力,能够用技术驱动业务,帮助业务带来创新。告诉他们我们现在的技术已经可以做到什么程度,我们可以做一些什么样的事。
不同的行业之间会有壁垒,你在一个行业中深入积累,在别的行业未必用的上。比如:金融,电商和社交的,大多是在这个领域内来回流转,想跨到别的行业,需要牺牲一部分的积累,又要重新去积累和理解新的业务知识。
领域业务中突出的架构问题
整个领域,从企业的角度,他主要追求的是稳定。系统稳定,开发周期稳定,人员稳定,能够按期交付,实现业务需要的功能。
一般在这个领域深耕的人,都会在一个企业中呆比较长的时间,因为他所涉及领域的业务与技术是需要长时间的积累与磨练才能彻底吃透的。
我们要想进入这个领域就需要有比较扎实的基本功,锻炼你的逻辑能力,保证代码质量,逐步积累领域经验,成为这个领域的业务专家。
4.数据相关
未来围绕着数据做的工作会越来越多,也会变得越来越重要,这个范围很广,我们来简单聊几个方向。
数据分析
主要是做业务与统计层面的数据分析,甚至你都不需要自己从数据库里面读取数据来分析,你就可以做这个行业,当然你懂数据库那会更吃香。
这个行业主要是业务主导,技术作为辅助工具。你需要去了解业务上的东西,了解统计分析,门槛相对较低。
数据产品
这是一个交叉岗位,它要求你对软件产品的设计与数据分析的能力综合起来。门槛相对较好,它要求你要懂产品的同时,又要懂数据分析。
这个岗位的人可以把数据分析的过程与过程中的核心价值创造成一种产品。这是目前非常新的一种路径,应用价值很大,但是这方面的人才很少,最主要的是现在只有少数公司能够提供这样的岗位,让数据产品经理去大显身手。
数据开发
这个是属于数据方向的开发岗位,它要求你具备一般性软件开发的能力。数据开发跟传统软件开发不同的是,它有一些特殊的场景。比如:对海量数据的采集、清晰和加工;多维数据仓库的建设;实时数据分析。这些都涉及到一系列的技术框架需要去学习,
从应用的角度来讲,通常我们会给业务运营服务提供一些数据报表和数据分析报告。再往前走,你会去做用户画像、智能推荐、智能广告算法和偏人工智能方面的东西。
最近几年对大数据与智能化融合的趋势是非常明显的,比如:它要求你对统计,对数据建模,对具体业务领域有融会贯通的能力;需要你对业务数据与技术的运用有综合能力,也就是说你能够利用可行的技术体系,把业务想做的事情实现出来,它也属于一个比较综合交叉型的事情。
总来说,这个领域前景非常美好,但是不得不说市场上对这个岗位的需求是存在泡沫的。
并不是每个公司都可以去做这件事情,它需要公司对数据,对业务有非常深的认知,能找到数据与业务的良好结合点。
当一家公司对数据有需求的时候,他的数据往往已经分割成不同的版块了,他真正的价值就在于把这些版块综合起来发挥价值,而这一点往往不是技术问题。
5.人工智能相关
这几年最热门的领域跟数据领域有非常多的关联,共通之处。
人工智能的领域可以分两层,一层是基础开发,一层是应用。
基础开发主要做一些特定的算法,框架,工具,比较偏研究和研究开发性质,比较学术性。
而大部分人是比较偏应用的,比如:准备数据集,针对特定问题做训练,做参数调优。最重要的是把成熟的人工智能方法用到合适的业务场景上。
寻找合适的业务场景是非常大的一个挑战,对于大部分人来说,除非你攻读过硕士,博士,毕业后在专门的研究领域工作,否则一般来说都在应用领域方向工作。
如果你以应用领域为主要方向,那么首先你得有一定的数学基础。主要的数学工具包括线性代数、统计分析、数理统计和微积分。如果你具有大学本科以上的数学基础,那么肯定是够用的。
在此基础之上,你需要掌握主流的工具和框架,比如:Torch、TensorFlow。各有所长,比较好的办法是找一个自己感兴趣或者有价值的领域去尝试,然后再学习这个领域的核心问题或者你感兴趣的问题,它最流行的解决方案。
比如下棋,国际象棋使用的Leela Chess Zero、围棋使用的Leela Zero。
比如机器视觉,图像识别使用的OpenCV。语言识别和语音合成使用的CMUsphinx。
你可以找这些很专业并且已经验证过的成熟解决方案来学习。在这些解决方案里面,你就可以学到从底层到上面的整套工具栈。
一开始可以利用这些开放技术做一些小的成果出来,去熟悉和了解它,培养你的兴趣和基本的知识,然后再一步步深入。至于怎么深入,那就只有去攻读论文了。
在AI大发展的时代,还正在来临的过程当中,发现创新机遇其实是最难的事情,对于这件事情大家都没有经验。就看谁的眼光好,能够很快得把它做出来,如果你能找到现实和AI的成功结合点,那你就成功了一半了。
6.运维和DevOps
最后我们聊一下计算机运维和DevOps,这是目前我认为被低估的一个领域。
未来计算机的规模和数量会近一步的上升,那么就需要对所有线上的服务器和软件系统进行运维和管理,这一块的需求就会大量增加。
这个领域的门槛不算很高,但是他要做好其实对人的要求还是很高的。
基础方面主要是对计算机系统,操作系统还有网络方面的基础原理要熟悉,特别是Linux操作系统,在实际的工作中基本离不开它。
工作方面会有几个事情需要做,比如性能的检测和分析,系统的自动化运维,软件开发及部署流程的熟悉。现在很多运维都开始学习开发,通过python与前端的学习,开发一些运维工具帮助开发和运营的同学提高工作效率。将需要手动处理的事情,做成自动化工具,比如:备份、部署和发布。这极大的提高了运维人员的价值。
好了,今天关于领域技术,我们就聊这么多。
在下一篇中,我将最后跟大家聊聊关于编程小白和已经是程序员同学的职业规划方面的内容,大家敬请期待吧。
Ps:本文整理自李俊老师的口头分享