程序员,你的技术过气了吗?
【CSDN编者按】对于开发者来说,如何紧跟技术的潮流、不和时代脱节是一个很头疼的问题。本文即针对 21 个编程领域的新宠以及快要过气的技术,包括语言堆栈、容器大数据技术、移动开发、软件编程等等,和各位程序员一一道来,究竟你的技术方向选对了吗?
以下为译文:
众所周知,时尚圈的风潮总是变来变去。一会流行短裙,一会又流行长裙;一会讲究朴素,一会又讲究花哨;一会流行厚领带,一会又流行薄领带。程序员对此总是嗤之以鼻,在他们眼里,这样的变来变去简直莫名其妙且不可理喻。科技领域则没有时尚圈这样的飘忽不定,取而代之的是严谨、科学、数学和精确计算,一切都是那么理性。
但是,这并意味着编程领域缺乏新的技术趋势。事实上,编程趋势同样变化迅速,区别仅仅在于这些新的趋势来源更加理性,通常是为了提升效率、可定制性和易用性。新的技术往往能够让现有的技术变得黯然失色,它们是理性与科技的结晶,而非简单的奇思妙想。
本文展示了当前程序员中最热门的技术以及逐渐开始变得冷门的技术。我相信肯定有不少人对这个列表表示质疑。编程总是充满乐趣,引人入胜,各种技术日新月异且不断变化,有时会引来激烈,某些看似“陈旧”的技术也许突然又火起来。
▌预处理器 K.O 完整语言堆栈
编译的目的是将源码转化为机器可识别的可执行程序,在早期,每次编译都需要重新构建所有东西。后来人们意识到可以让编译器自动完成一些工作,从而提升编译效率。于是就有聪明人发明了预处理器,通过丰富的库和API来翻译新的代码。
像 Python 或 JavaScript 这样的脚本语言曾经只能局限于小项目,而如今它们变得越来越重要。有些人不喜欢 JavaScript ,于是创建了 CoffeeScript 这个预处理器,它可以让程序员不依赖繁琐语法的情况下重新编码。此外,它还具有几十种预测语法。
喜欢动态语言的人发明了 Groovy,它是一个 Java 简化版,没有太多复杂的语言。目前能够运行在 JVM 上的语言有几十种,比如 Groovy、Scala、Clojure、Kotlin,等等。同样,能够运行在 .Net 虚拟机上的语言也很多。
▌Serverless K.O Docker
说 Serverless 替代 Docker 其实不完全正确。Docker 容器无处不在。服务器一直在不断启停容器。然而,Docker 容器实际上远远超出了预期。
仔细想想,你会发现微服务的代码可能只有几十行,但是为了让 Node.js 或者其他模块和 Docker 配合运行,你不得不在配置文件中写很多行配置代码。虽然配置文件有模板可循,但是有时依然让人摸不着头脑。
而使用新的 Serverless 架构,我们仅需几行简单的 if-then-else 语句即可完成项目部署。剩下的工作交给 Serverless 服务提供商就可以了。
过去我们时常抱怨异常锁定且缺乏定制,如今 Serverless 的出现的确是所有开发、运维以及配置人员的福音。
▌JavaScript MV*框架 K.O 原始JavaScript文件
过去,开发者使用 JavaScript 几乎都是从零开始编写,比如弹出一个警告框,或者检查表单中的电子邮件地址是否包含了 @ 符号。而如今,HTML AJAX 应用程序已经变得非常复杂,很少有人再完全从头开始编写。开发者往往会采用一个现成的框架,在其基础上修改和添加一些代码从而完成自己的业务。
目前市面上有多种框架来帮助你处理 Web 应用的事件和内容,比较常见的有 Kendo、Sencha、jQuery Mobile、AngularJS、Ember、Backbone、Meteor JS,等等。
这些仅仅针对 Web 应用程序。而对于智能手机或者平板电脑的跨平台开发框架也不少。比如 NativeScript、PhoneGap、Apache Cordova 和 React Native 等技术都可用于 HTML5 开发。
▌CSS框架 K.O 通用CSS
曾几何时,给网页添加一些新功能通常需要打开 CSS 文件然后增加一个诸如 font-style:italic 这样的新命令。然后,你保存文件,结束了一上午的辛勤工作去吃午餐。如今的网页已经变得非常复杂,用这样简单的命令修改 CSS 文件的方式不再可取。哪怕是调整一个颜色参数,都会让页面的整体效果乱作一团。
诸如 SASS 和 Compass 这样的 CSS 框架于是应运而生。它们提供了变量、嵌套、混合插件等编程结构,促使开发者进行更加规范的编码。这在编程领域并不新颖,但对于设计领域来说这确实是质的飞跃。
▌SVG K.O Flash
Flash 已经风靡多时。抗锯齿渲染看起来不错,于是一些才华横溢的艺术家构建了一堆高深的 Flash 代码来提供复杂的转场和动画。得益于休闲游戏广受大众的欢迎,Flash 在网络上占据着主导。
而如今,JavaScript 也能够做同样的事,于是浏览器厂商和开发人员欣喜若狂。他们发现像 SVG 这种新的格式能够与 DOM 层更好地结合。并且 SVG 和 HTML 还包含了丰富的标签,这对与网页开发人员来说非常容易使用。此外,它们的 API 在 Canvas 对象上提供了精细的绘图功能,同时还可以充分利用视频卡。面对如此强大的功能,简直没有理由再使用 Flash。
▌不使用Hadoop进行大数据分析 K.O 使用Hadoop进行大数据分析
每个人都想要成为学校里的大个子,如果他们不是,变会寻找一个适合他们的学校。当“大数据”开始流经管理套件时,这些套件开始寻求最强大的大数据系统,就好像他们购买游艇或者摩天大楼一样,这并不奇怪。
不过比较讽刺的在于,很多业务体量都不够大,不足以应用大数据解决方案。当然,像谷歌或者雅虎这样的公司能够跟踪我们所有的网页浏览记录,他们有大到 PB 甚至 YTB 的数据文件。但是大多数公司拥有的数据量很小,甚至可以很容易地装入普通 PC 的 RAM 中。我在一台配有16GB RAM 的 PC 上编写一个程序,变足以处理十亿数量的事件。在大多数算法中,数据并不需要读入内存,从 SSD 流式传输即可。
有些业务需要并行运行 Hadoop 云中的几十台机器以加快响应速度,但实际上可以在单台机器上进行,并且还不会出现协调或者通信的麻烦。
▌Spark K.O Hadoop
这并不是说 Hadoop 完全被淘汰了。主要是 Apache Spark 当前太过火爆,使得 Hadoop模型看上去有些古老。Spark 借鉴了 Hadoop 的一些思想,比如从大量数据中寻找规律并通过一些加快代码运行速度的改进方法来对其更新。最大的差异可能在于,Spark 将数据保存在快速内存中,而不是从分布式文件系统进行文件读写。
当然,很多人将这两者结合使用,在 Hadoop 分布式文件系统中利用 Spark 的数据处理速度优势。Hadoop 和 Spark 通常是合作伙伴的关系而非竞争对手。
▌数据库配置 K.O 软件编程
很久以前,程序员经常开玩笑说他们不知道下个世纪编程会是什么样子,但他们知道它将被称为 Fortran。这个笑话非常有趣,他们会从恐龙上掉下来,摔坏自己的木制内衣。然后回到配置数据库的时代。
如今我们仍然在建立数据库,但是现在我们认为的“数据库”更加复杂和强大。现成的数据库将进行远距离同步,同时在一致性和速度之间进行灵活的折衷。一些像 Firebase这样的云服务会将新数据全部推送到运行在移动客户端上的 Web 应用程序。
大部分 serverless 革命都基于这样的认识,许多云存储现在非常强大,我们只需编写一些 if-then-else 这样的简单子句就可以构建一个非常酷的 Web 应用程序。
▌游戏框架 K.O 原生游戏开发
以前开发游戏就意味着需要雇佣大量的 C 语言程序员,然后从零开始编写程序。当然,它耗资高达数十亿美元,但是它看起来非常棒,运行速度像风一样快。如今,定制代码变得无比奢侈。大多数游戏开发者都放弃了多年前的原始开发方式,开始使用Unity、Corona 或 LibGDX 这样的库来构建系统。他们不会像编写库一样使用 C 来编写应用程序。
开发游戏游戏不再从零开始编写代码,而是使用游戏引擎。对此开发人员会因为抛弃情怀而羞愧吗?答案是否定的。事实上,大部分开发人员都松了一口气。因为他们不必再处理细节,能够更加专注于游戏人物和故事。
▌静态网站生成器 K.O 单页Web应用
还记得通过 URL 指向充满静态文本和图片的网页吗?之后,动态的单页 Web 应用程序出现了,这是一个可以获取相关数据的 Web 应用程序。世事轮回,如今又回到了过去,现在开发者开始使用静态网站生成器。目前的生成器多达几十个。就像 hybrid 一样,它将所有数据积成一堆,然后编写一些代码将数据粘贴到某些模板中,以便每个静态 URL 都有一个 HTML 文件,并且这些文件都来自数据表中。
开发者认为这些静态网站速度很快,事实上也的确如此。它与 WordPress 和 Drupal 这样的动态系统的工作方式大致相同,只需保证最新数据生成的静态页面的缓存充足即可。
▌GraphQL K.O REST
这并不意味着 REST 已死。我们只是想在 API 上做更多的事情,而 GraphQL 恰如其分。GraphQL 和 REST 一样都是以 JSON 的形式返回数据。与许多 REST 调用一样,GraphQL 也是通过 HTTP POST 触发。只需少量的代码即可通过 GraphQL 语法进行非常复杂的查询。这使得程序员可以更简单地询问他们想要的内容,当有人需要稍微不同的 API 时,这样也可减少服务器端的工作量。
▌云端IDE K.O 本地IDE
最早的时候,编译器是命令行的形式。之后有人将编辑器和其他工具进行集成,从而创建了 IDE。而如今,基于浏览器的在线工具提供代码编辑功能,甚至是运行中的系统代码也可编辑,这足以淘汰传统的 IDE。如果你不喜欢 WordPress 的功能,它带有一个内置的编辑器,可以让你随时更改代码。微软的 Azure 允许你在其门户中编写JavaScript 代码。尽管这些系统不提供太好的调试环境,编辑生产代码也存在一些危险,但是这个想法是有价值的。
比较常见的有 AWS Cloud9、Codenvy 以及 Mozilla 的 WebIDE。这些基于 Web 的在线工具变得越来越强大。比如,你可以在微软的 Azure 网站上构建一个完整的大数据分析项目。如果你正在探索 serverless,你可以将所有代码写入网页的表单元素中,这个表格并不比你用 Facebook 更新朋友的表格大太多。
▌GPU K.O CPU
当程序很简单并且指令安排得当时,CPU 处理这些简单的程序非常得心应手,它就是电脑的核心。而如今的大型3D游戏需要并行运行大量的图形程序,此时 CPU 就显得力不从心,视频卡开始大放异彩。玩家经常在视频卡上花费五六百美元甚至更多的钱,一些资深玩家会购买多个视频卡,价格相对昂贵。
另外,推崇 GPU 的人并不仅限于游戏玩家。计算机科学家正在将许多并行应用程序转到 GPU 上,这样一来其运行速度可以提升数百倍。此外,数据科学家也在服务器上更多使用 GPU 从而加速其机器学习模型的开发。
▌GitHub K.O 简历
当然,你可以通过查看应聘者的成绩单来了解此人。但是通过阅读实际代码来判断候选人的能力更加直接。他们代码注释写得如何?代码功能是否丰富?架构是否具有高度扩展性?只要看一看他们的代码,这些问题都迎刃而解。
参与开源项目对于找工作来说变得越来越重要。想要把实际工作中的代码共享出来是很难的,但是开源代码却无处不在。
▌租赁 K.O 购买
亚马逊在黑色星期五销售计算机和其他电子产品,但是忘记了为其云计算服务提供超值优惠。以前,公司都是自己开设数据中心,购买计算机,并雇用员工。而如今,很多公司都不再购买,而是选择租赁的方式。他们按小时租用电脑、数据中心、员工甚至软件。没有人在乎东西的所有权,管理服务器只会给自己凭添麻烦。租而不是买,这是一个好主意,在你的网站爆发式增长之前,你只需根据点击量付费。
▌复杂云端 K.O 简单云端
过去云计算提供商向客户宣传时一直强调其服务的简单,只需点击一个按钮即可开启云服务。
而现在,找到合适价格的机器可能比编写代码花费的时间更多。机器的配置文件众多,并且大多数云服务提供商支持的机型跨度比较大。各种服务级别代表不同的性能,你需要对其测试,找到性价比最高的方案。只要能够满足程序运行需求,肯定选择尽可能低的配置,因为这样更省钱。
云服务商还提供了多种优惠方案,比如提前付款或者批量采购。这样一来选择云服务器的过程就变得更加复杂了,如果开设一个课程来教大家如何选择云服务估计很畅销。
▌移动Web应用 K.O 原生移动APP
假设你有一个 APP 的好点子。你可能会急于为 iOS、Android、Windows 10 Mobile 甚至黑莓 OS 编写单独的 APP 版本。每个平台的 APP 都需要一个单独的团队,使用不同的编程语言,然后再发布每个平台的应用程序商店。这种原生的 APP 开发方式耗时耗力。
除了原生的开发方式之外,你可以构建一个 HTML 应用程序并将其放置在网站上,所有平台都可以访问。如果需求有变,你只需在线修改即可,无需乞求应用商店进行错误修复。随着芯片的速度越来越快,HTML 的运行速度也越来越快,Web 应用与原生 APP 的速度差异越来越小,即使是复杂的交互式应用,HTML 应用也几乎可以和原生 APP 媲美。
▌Android K.O iOS
过去几年苹果产品风头正劲,而如今时代已变。虽然 iPhone 和 iPad 仍然拥有大量的粉丝,但是其销量已远远不及 Android。根据报道,Android 手机占比已经超过了80%。
核心因素在于价格。尽管目前 iOS 设备的价格与过去相比已经非常便宜,但是由于 Android 领域的充分竞争,其设备的价格仅为苹果的五分之一。在功能差不多的情况下,很多人选择 Android,没有人跟钱过不去。
另一个因素在于开源的影响力。iOS 系统闭源,Android 系统则完全开源,任何人、任何产品都可以使用。市面上的 Android 设备丰富多彩,五花八门。有 Android 相机,甚至有 Android 冰箱。如果有人想基于 Android 开发产品,他们不需要征求谷歌同意。想做就做,因此 Android 在越来越多的电子设备上大放异彩。
▌Node.js K.O Java EE, Ruby on Rails
服务器一直在不断优化线程模型,让操作系统弥补程序员的低效或者不合理的行为。无论是愚蠢的循环还是浪费的计算,操作系统都通过线程切换来平衡性能。
Node.js 的诞生充分应用了 JavaScript 的回调编程模型,代码的运行效率得到大幅提升。创建新线程的开销变得明显,Node.js 开始大放异彩。当程序员的代码写得很糟糕时,系统容易出现问题。正是因为资源限制,才迫使程序员写出效率更高的代码。
Node.js 通杀浏览器和服务器端,两者都运行相同的代码,因此开发人员可以更轻松地沿用和重复功能。Node.js 的火爆理所当然。
▌PHP7.2 K.O 旧版PHP
过去,PHP 的出现淘汰了一些动态网页。如果你想要更加丰富的功能,可以在 HTML标签之间嵌入简单的代码。这对于 Web 开发人员来说确实可行,但是核心程序员会对此嗤之以鼻,因为这种做法太慢了。
如今,即时编译器的加入让 PHP 变得更快,JAVA 也曾采用了同样的方法。借助 HipHop 虚拟机,PHP 7.2 的速度是旧版 PHP 的两倍。
▌在线教育 K.O 传统教育
在线教育盛行已久,通过在线教育,每个人都可以调整课程播放速度,重复某些关键的知识点。在过去旧的研讨会中,一次只能一人发言,而在线论坛对其进行了改进,每个人随时都可以畅所欲言,大大提升了交流效率。
在线教育不仅让教育变得简单,还带来了巨大的灵活性,学员随时随地都可学习。这也大大改变了人们的学习方式,不再需要投入四年的时间和昂贵的学费,并且所学的课程可能与生活毫不相关。
为什么要参加编译器的课程?因为你发现工作中需要了解编译器原理。如果老板想从关系数据库切换到 NoSQL 引擎,那么你可以花些时间学习现代数据存储的课程。当你需要的时候,去学习最新的课程即可,而没必要让那些占时毫无用处的知识白白占用自己的大脑。
原文:https://www.infoworld.com/article/3188464/application-development/21-hot-programming-trends-and-21-going-cold.html
作者:Peter Wayner
译者:安翔,责编:言则