ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

如何选择技术方向和编程语言

2019-08-26 20:41:38  阅读:154  来源: 互联网

标签:Web 机器 语言 编程语言 AI APP 选择 方向 学习


如何选择技术方向和编程语言

如何选择技术方向和编程语言,大概是新人们最困惑的问题之一了,当然也是我被问到最多的问题之一。这里就和大家详细的聊聊。

先选技术方向,再选语言

各种语言都各有所长,所以在选择语言之前,最好先选定你想从事的技术方向,然后根据这个技术方向,再去选对应的语言。

各个语言的适用场景

Python:人工智能的好选择

举例来说,如果你想做人工智能方向的话,Python语言就是非常不错的选择。因为它在各个大学和研究机构用的非常多,有成熟好用的数学库,适合于科学计算。在深度学习等热门方向上,有大量用 Python 开发的框架,新出的 Paper 也能很快在 GitHub 上找到 Python 的代码实现,可以说是不二选择了。

JavaScript:前端和全端

如果你想做前端,那么目前来看,除了 JavaScript 还真没有别的选择,因为现在能在浏览器里边跑起来,也就是它了。过两年等 wasm 成熟可能会有其他选择,但现在,是真没有。

而相应的,如果你学会了 JavaScript ,想在这个基础上再把后端给做了,那么 Node.JS 就是非常好的选择。因为它使用的就是 JavaScript 的解释器,按 JavaScript 写就好了。从学习成本上来讲,它是非常低的,可以通过很低的投入,就进入了服务器端的领域。

同时,如果你已经学了 React 这个 JS 框架的话,你可以再花点时间把 React Native 也给学了,这样的话,你就可以通过 JS 来写移动客户端,甚至通过 Electron 等框架来写电脑客户端。

这些应用可能会比原生的差一点,但可以适用于大部分场景,加上投入成本又不高,非常适合作为新手的切入点。

Go:云计算和容器管理

如果你现在要想去做云计算,那 Go 就是一个非常好的选择。

因为它就是为了大规模计算设计的,并发管理和性能都非常不错。而且有很多云计算的软件,它就是 Go 写的,如果你要去修改它,调整里边的实现逻辑的话,不会 Go 可能很麻烦。当然,理论上讲,你也可以通过容器和微服务的方式来搞定,但肯定比直接改代码麻烦。

PHP:依然是网站首选

如果你要做网站,那么 PHP 就是首选了。一方面是有大量的可用代码,世界上超过80%的网站都用的 PHP,基本上你能想到的网站功能,都有能找到的实现,悬念只是有没有免费的;另一方面,PHP7 的性能提升了很多,用来写 API 也非常好。

另外一点,就是目前使用 PHP 的团队非常多,即使在二三线城市也比较容易找到工作,当然,组建团队也同样相对容易。

Java:大数据分析

如果你要做大数据分析,那么可能就离不开 Java 了。从 Hadoop 开始一系列的 Google Big Table 的开源实现都是 Java 的,用于海量数据搜索的 Elastic Stack 也是 Java 的。

语言并没有对立关系

需要说明的是,语言这种东西不是配偶,只能选一个。技多不压身嘛,多学几门语言也是挺好的,这样就能在适合的场景下,用适合的语言了。

作为初学者,我们的学习时间是有限的,所以我们可以先去学习离我们想做的技术方向最近的一种,先把工作找到、把业务跑起来,然后再拿空余时间慢慢的来补其他可能用到的语言。

另外,对初学者来说,要尽量选择主流语言。这样你遇到问题时,才有社区可以问、才有 Stack Overflow 可以搜。你要选一个小众语言,你会发现出了问题只有看源码。

事实上,你也很难成为只会一种语言的人,我们的工作是以业务为导向的,业务总是会推着我们去做各种事情,比如当你需要做全文检索时,就算你是 PHP 程序员,也得尝试着去假设 Elastic Search,这种时候就可以把 Java 学一学。

我们看到的那些趋势

预测技术趋势是一种高风险的事情,就和猜股票差不多,所以之前我一直不怎么想做。但我同时也明白初学者的那种迷茫,就像没带手机被扔在一个完全陌生的城市里边一样。

所以我们这里做一个折中,只对看见的趋势做分析,不对未来的趋势做预测,预测部分交给你自己。

Web 的富媒体化趋势

这个趋势非常明显,它其实是跟着网速发展的。

文本时代

古代我们上网的时候,还是用电话线,拨号上网,那个时候非常的慢,看个图片都要等半天。论坛帖子标题里经常写的一句话叫「多图杀猫」,就是说这个帖子图片太多了,打开以后要等半天才出内容。

所以在那个时代,互联网应用必然是以文字为主流的。比如聊天室,大家都是打字聊天的;然后门户,也是整屏的都是密密麻麻的字,为什么?因为新开一个网页,要等老半天才显示出来,还不如在一个网页里边塞足够多的字。那时候很多门户的网页编码都用 GB2312 不用 UTF-8,就为了省那么点字节。

甚至游戏都是文字的,MUD嘛,场景都是要靠想象力的,大概类似于勇者斗恶龙把上边的图给去掉,「你受到了史莱姆的会心一击,损失了20点HP」…

图文时代

再往后,大家的网速慢慢就好一些了,图片就开始了大量的上了。但基本都局限在「看图」,这是因为那时候智能手机和移动网络都没起来,图片要用数码相机拍,然后再导入到电脑,传到网站上去。这个对于 PGC( Professional Generated Content,专业生产内容 ) 的编辑来说没什么,但对于 UGC( User Generated Content,用户生产内容 )来说,还是太复杂了。

所以当时兴起的基本还是图文内容,博客是其中一大代表,也是聚集了一大批的流量。

再往后,移动资费慢慢下来了,再后来有了以 iPhone 为代表的智能机,这时候 UGC 的图片才大规模的上来。观察微博所带的图片比例,就可以很明显的发现这个趋势,09年时,带图的微博并不多,到现在,不带图的微博已经非常少了。

智能机的发展极大的推动了互联网的富媒体化,因为它是数据的采集端嘛。

视频和直播时代

视频网站倒是很早就来了,那时候优酷土豆天天打架。但视频 UGC 是没有跟上,那时候叫做「播客」,主推就是音频和视频。后来也一直没发展起来,主流视频网站最后还是买版权,然后靠 PGC 做了自制剧。我觉得很大程度上和视频的沉浸式体验有关,这种体验抑制了传播,现在微博上,长度超过十分钟的视频依然是很难传播的。

直播为视频带来了互动性,同时对带宽和实时性提出了新的要求。其实直播,尤其是移动直播是一个很有意思的事情,以前电脑直播,你基本就只能看对方在一个房间里边唱歌跳舞,秀秀身材;但移动直播却可以带你到地球的每一个角落,只要有手机信号,就能看得到的。

直播的互动性也为视频带来了前所未有的体验,比如说,以前看数码测评,只能看编辑整理好的内容;而现在看测评直播,你可以让测评的同学把手机转过来让你看看电源口,还能让他们装个农药看看卡不卡。

趋势背后

这些趋势背后,都是各种支撑技术。比如文字上来了,要做分词和搜索吧?图片来了,要做识别和监管吧?直播来了,要做 P2P 、视频压缩和实时数据传送吧?

最明显的,就是做 CDN 的只要活下来的都很挣钱,因为这么下去,消费的带宽只会越来越多嘛。

另外就是,我们可以明显的看到,一个技术上的能实现的事情,到大规模的商用之间,还隔得很远。图片和视频的普及就是一个例子;同样,VR 技术的成熟,也要等到硬件、内容等边界条件达到一个临界点的。

后移动互联网时代的应用开发

过去五年是移动优先( Mobile first )的时代,我们的生活、娱乐和工作正在大规模的从电脑向手机转移。

一方面是,Android 的廉价化,让很多买不起或者不想买电脑的人,买了手机;另一方面是,天天用电脑的人回到家里以后,已经不想再碰电脑,就想躺沙发上,听着电视刷手机。

APP 撼动了 Web 的地位

移动优先这事,其实对于 Web 的打击挺大的。最主要是苹果开了个坏头,对把他们所有东西都弄成 APP 了,当然,Web 在手机上的确有操作上的不便,光是输入网址就要花好久,还一堆英文符号数字,没法用语言输入。APP 点一下就开了,的确是一个更好的入口。

但是 APP 虽然体验更好,但也有它自己的问题。首先是制造成本更高了,要为每个平台做一个,开发完还要一直维护;然后它又给设计成一个中心化的东西,要提交应用商店走审核。人家不给通过,用户就没法用,驳回理由千奇百怪的;就算所有内容都 OK ,每次更新又要审一回。另外就是 APP 的体积越来越大了,不买个 64G 的手机都不好意思装应用。

而 Web 是完全开放的,没有这些繁文缛节。所以很多公司就想,能不能把 APP 和 Web 的优点给结合下,搞点免安装的 APP 出来?

于是 Google 做了 PWA ,微信出了小程序。

总之,APP 对 Web 的冲击是非常大的,记得前几年,现在好像也还是吧,很多创业公司的产品是没有 Web 版的,官网就一个 APP 下载页面。

后端语言的移动化方案

说到这里,微信还在国内给 Web 开辟了另外一块生存空间,那就是 H5 。

这个 H5 并不是指的 HTML5 而是特指嵌入到微信和微博之类应用的 WebView 里边的移动网页。

大部分后端程序,比如 PHP ,对于移动化的解决方案就是 Responsive Web。不管你是手机还是电脑,我就一个页面,然后根据屏幕的宽度来显示内容,你宽呢,我就显示更多内容;你窄呢,我就只显示核心的内容。

这种方案其实也还算好用,在 H5 生态下工作得挺好。但是如果这家公司开始做移动客户端了,他们就会面临一个问题,移动客户端的 API 从哪儿来?简单粗暴的方式当然是重写一个了,但出于一致性等因素考虑,将 Web 也前后端分离才是正解。

后端语言只负责 API ,也就是数据的输出。Web 被视为客户端的一种,和 iOS、Android、Mac、PC并列,通过 JS 读取数据,并进行渲染。

在这种模式下,随着 JS 的进化,它慢慢变成了一个全栈语言。这个前边我也提到过,有了 NodeJS ,它就能做后端了,提供 API;有了 React Native,它就可以写移动客户端;还有 Electron 这种封装 NodeJS 和 JS 为电脑 APP 的包装方案,它又能覆盖电脑客户端。

混合 APP VS 原生 APP

在 JS 的全栈方案中,它使用混合( Hybrid )方式来构建 APP。有两种层次的混合,一种是里边用 WebView ,外边封一个壳,这种方案学习成本低,开发者只需要使用原有的 Web 技术就 OK ,但性能上会差一点,遇到超长列表可能会卡顿,另外动效也不如原生的顺滑;另一种是内置一个 JS 引擎,解析 JS 代码然后去渲染原生的 UI 组件,这种方案性能更好,感官上和原生 APP 非常接近,但需要开发者学习各个平台对应的 UI 库,有较高的学习成本。

但整体来讲,混合 APP 的出现,给很多创业公司和预算不充裕的团队提供了一种渐进式的解决方案。你可以选择先用 H5 来做产品,在微信里边内测;然后将其打包成 APP ,通过应用市场分发,占领手机的入口;再之后可以通过 React Native 等方案,提升其性能;如果这些都达不到体验的要求时,再去开发原生 APP 。

后端开发的平台化

聊完了前端我们来说后端。后端其实有一个非常明显的趋势,那就是后端慢慢的云化了。

最开始我们都用物理机,需要经常跑机房,还要打电话让看机房的大爷给重启服务器;后来有了虚拟机,有了 VPS , 操作方便了,利用率也慢慢上来了。

不管是什么样的企业,今天都开始用云,区别只是用别人的云还是自己的云,别人的云就是公有云、自己的云就是私有云,混着用就是混合云。

随着云平台的成熟,很多后端日常使用的功能,慢慢的就变成了云平台上的标准服务,比如数据库、高速缓存、队列、对象存储和CDN,而后端程序本身,更专注在实现业务逻辑本身上边,这是一个非常明显的趋势。那就是所有能服务化的功能,最后都会服务化;而后端程序会成为业务逻辑和服务之间的胶水。

AI 很可能就是下一个被大规模服务化的领域,我们可能需要很顶尖的专家来设计和优化模型,但一旦调整好,规范好接口,对接到云平台上,它就变成一个标准服务。工程师们不需要懂 AI ,他们只需要懂 API 就能做出不错的人工智能应用。

这件事情已经发生在 iOS 程序员身上了,很多 iOS 程序员利用 Apple 提供的人工智能库,做出了很多令人惊讶的 APP ,即使他们一点都不懂人工智能。

所以整体来讲,以后的后端会更加纯粹,要么处理业务,要么处理服务。

后端的云化的同时,还会导致运维的云化。因为大家都用云了,管机器的人就不需要那么多了,需要的是管理云的人了。但云里边都是虚拟机啊,不需要你挨个跑机房换硬盘,直接用命令就 OK ,这要求运维也能写程序,这就是最近提的很多的 DevOps 。

AI 优先的时代

深度学习是人工智能新起点

人工智能其实已经说了很多年了,但以前我一直对它不看好,主要是因为它们不够自动化,需要人工制定规则,远不如UGC+推荐系统+正则表达式效果好。但现在的人工智能有些不同了,因为有了深度学习这个东西,下边我详细说。

传统的机器学习很蛋疼,它的特征提取是人工做的。别看用起来很牛逼,但其实边界条件变一点,规则就要进行调整,特别脆弱。这哪儿能叫机器学习,这是人学习,机器干活,和我们以前的编程没什么区别。

但深度学习不同。深度学习是通过模拟神经网络,用训练数据动态调整权重来自动发现规则生成模型,这个就NB了。首先是普适性,特征和规则的自动发现让人力从「机器学习」中解放出来(虽然取而代之的是昂贵的计算资源),可以瞬间规模化,从而让人工智能真正有了能成了水和电一样的东西的可能。不同的行业,只要喂给它不同训练数据,它就能得出不同的规则(当然,有很大的优化空间),从而更好的完成以前机器无法完成的任务。

然后是动态性。以前的规则是人搞的,数据和需求是实时变化的,而人是要睡觉的,很容易规则跟不上数据的变化;现在换成机器以后,规则是机器出的,一旦用户反馈数据不对,就引导进入数据纠错流程,让用户对数据做标记,然后机器再从大量的已标记数据中生成新规则,当用户量足够大的时候,这个过程可以非常快。

以前,我们通过一个规则系统将人类强大但不确定的能力封装起来,搞出了一堆基于UGC和Web2.0的系统。而现在,深度学习封装了机器自动生成规则这个强大而不确定的能力,可以大规模的替换掉经济系统中的人力。

似乎之前因为机器不够智能的曲线救国,现在可以回归正轨了,付出的代价就是,我们必须要拥抱不确定性 —— 因为我们完全不知道这些规则是怎么来的。

这本不是什么新鲜事,我们到现在也没弄明白量子坍塌的细节,但一样在外边建立起来了相关理论,才有了整个数码世界。就算在编程领域,很多程序员从github下载软件包时,其实也没看过内部实现

标签:Web,机器,语言,编程语言,AI,APP,选择,方向,学习
来源: https://blog.csdn.net/qq_35313772/article/details/100085203

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有