热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

框架成为新的编程语言的7种理由

在 1980 年代,掀起一场乏味战争的最简单方法,就是赞扬你钟爱的编程语言是最棒的。C、Pascal、Lisp、Fortran?程序员们花费数个小时来详细解释关于精巧制作一条 if-then-else 语句的特定方式为什么优于你的方式。

那是过去的事情了。今天,涉及语法和结构的战争基本结束了,因为世界已经汇总了一些简单标准。在 C、Java 和 Javascript 里,分号、花括号等之间的差异不大。关于类型和闭包的有趣争论仍然存在,但是大部分是毫无意义的,因为自动化在缩小差距。如果你不想定义数据类型,那么有一种可能,计算机将能准确推断出你的意思。如果你的老板想用 Javascript、而你喜欢 Java,那么交叉编译器【注1】将把所有静态类型的 Java 代码转化成可以在浏览器运行的最小化的 Javascript。当技术做后盾时,为什么还有战争呢?

今天,有趣的战斗发生在框架上。当我在约翰·霍普金斯大学和其他院系成员规划一门新课程时,框架成了讨论的重点。Angular 优于 Ember?Node.js 就是一切吗?

我们设计了一份调查课程,将探索最重要的软件包的架构,这是互联网的基础。这是行动的中心,这份调查课程的价值在于探索围绕着当今互联网的、最重要的软件包的架构。

从这个意义上说,框架就是新的编程语言。它们就是当代代码被建立起来的最新思想、哲学和实用性。有些昙花一现,不过大部分成为了编程的、新的基本构成要素。下面是助长这种框架趋势的七个方面,使得框架成为滋生乏味战争的新的最爱。

大部分代码正和 API 串在了一起

过去编写软件,意味着调用你对编程语言的所有技能,以最大化压榨代码。掌握指针、函数和作用域是讲得通的——代码质量取决于做正确的事情。如今自动化处理了这方面的大多数事情。如果你在代码里遗留了无用的语句,不要担心,编译器会去掉无用代码。如果你让指针吊着,垃圾回收器可能会找到它。

还有,如今编码实践也不同了。大部分代码现在都是一长串 API 调用。偶尔有一些 API 调用之间的数据重组,但是,甚至这些工作通常也有其它 API 来完成。幸运的一些人在为我们机器的核心编写更聪明的、位拆裂【注2】、指针杂耍之类的代码,但是我们大部分人工作于更高的层次。我们在 API 之间简单地运行管道。

鉴于此,理解 API 的表现以及能做什么,就显得更加重要。它接受哪种数据结构?当数据集增长较大时,算法表现如何?类似这样的问题,与关于语法或语言的问题比起来,更加集中在今天的编程里。的确,有大量工具简化了某种语言从另一种语言调用一个程序。比如,把 C 资源库 链接到 Java 代码,变得相应简单了。理解 API 才是重要的。

站在巨人的肩膀上,是值得的

假设你已经成为了 Erlang 或另一种新语言的信徒。你认为,它为编写文档、没有 bug 的应用提供了最好的平台。这是优秀的观点,但是你要花费数年才能把可获得的 Java 或 PHP 重写为你最新选择的语言。你的代码最终可以显著变得更好,但是值得花这些额外的时间吗?

框架让我们对来到我们面前的那些艰难工作做出了改变。我们或许不喜欢他们选择的架构,我们或许争论于实现细节,但是停止抱怨、找到和差异共存的方式才是更有效的。继承框架代码库里的所有精华和糟粕,是如此地容易。用你喜欢的新语言、自己编写所有东西,而不采用某种更受欢迎的框架,这种强悍的方式和简单地遵循框架作者及其 API 比起来,不会让你快速享受到新选择的乐趣。

理解架构是做什么的,而非语法

由于大部分编码都是串起 API 调用,因此没有太多优势去学习语言的特质了。当然,你可以成为关于 Java 是如何初始化对象内的静态字段的专家,但是如果能够搞清楚如何发挥 Lucence、JavaDB 或其它一堆代码的威力,那才是更好的。为了深入理解 Objective-C 编译器的优化程序,你要花费数月,但是学习最新的 Apple 核心资源库的来龙去脉,你将真正让代码优秀。你将更深入地学习框架吹毛求疵的细节,而不是框架所依托的语言的语法。

我们的大部分代码在资源库的内部循环中花费了大量时间。搞清楚语言细节的正确性可以起到帮助,但是了解资源库内部发生了什么可以获得显著的回报。

算法主导

学习一门语言有助于你应付隐藏在变量里的数据,不过只是把你带到了更远的地方。真正要克服的是,确保算法正确,它们通常被框架定义和实现了。

很多程序员明白,重新实现标准算法和数据结构是危险的,也是浪费时间的。你可能让它更符合需求,但是你要冒着犯微妙错误的风险。框架已经广泛测试过多年了。它们代表了软件基础设施的集体投资。当弄明白“go off the grid”【注3】是什么意思时,将其他人的辛苦劳动扔在一边,用你自己的双手搭建一个算法小屋——其实,没有太多这种例子。

正确的做法是学习框架,学习如何使用它们来发挥你的最大优势。如果你选择了错误的数据结构,那么你就把一个线性工作变成了耗时的、输入大小的二次函数。一旦你这样做了,将是一个大麻烦。

纠正语法的编译器和聪明的 IDE

我应该在代码块的最后一个语句后面加上分号吗?分号是“分隔符”,还是“终止符”?语言设计者们花了大量时间来制作实施这些规则的分析器——猜猜怎样——我不关心。我关心的时候大概是在10年前,但是现在的 IDE 为我做了这部分工作。它们一直在身后看着我,当我搞砸的时候就告诉我。我让它们替我去考虑,把时间花在考虑关于代码方面的大问题。IDE 是苦力、是处理这些琐碎细节的编程助理。

自动化已经把我们从编程语法的单调乏味中拯救了。当然,它们不能为我们做所有工作。我们仍然需要具备部署那种标点符号的模糊思维。但是大部分时候,语言的这种细节已经不重要了。

IDE 不仅对框架有帮助,还有一些小细节。它们提醒我们函数调用的参数,它们甚至检查数据是否为正确的类型。然后,我们应该知道使用哪种函数、如何将它们组合在一起。当语法不是太紧要时,这就是我们精力需要集中的地方——更高级的方法和函数,将有助于更方便地找到解决方案。

语法和视觉化语言一起消失

虽然已经预言很多年了,但是它在某些代码——尽管不是全部——仍在缓慢地发生着。某些编程继续着非常文字式,但是有些正变得更加视觉化【注4】,这意味着潜在的计算机语言不是太重要。

GUI 构建器是最容易看到这个现象的地方。你可以整日整夜地拖拉用户界面部件,而不用担心它是 C、Java 或其它语言。细节在视觉化盒子里被编码。

AndroidBuilder 使得拖拉更多的布局成为可能,它将忠实地编写 XML 以及需要让代码运行的 Java 小代码。很难讨论视觉化语言未来会成为什么样子,尤其是在它们多次未能意识到该预言之后,但是当它们成长时,工具将增加更多视觉化。这意味着语言没那么强大或重要了。

代码即法律(code is law)

计算机语言有着极大的不可知论者。它们被设计为开放、接受和几乎无限延展的。它们意欲做你想要的任何事情。当然,有时候由于语法,你需要使用一些额外的字符,但是这些是很少的击键。之后,它主要是 if-then-else,再加上偶尔的聪明约束。所有这些语言将帮助你用想得到它们的方式、得到你想要的结果。如果有一些苛责的话,那么它们应该被设计为尽可能保持你的代码没有 bug,不要限制你能做的事情。

框架的威力就在这里,这就是设计师可以决定什么被允许、什么本质上要禁止。如果设计师不想让某些东西发生,那么神奇的函数调用将从 API 中消失。如果设计师喜欢这种想法,那么通常会有多个函数调用以及许多支持工具。这就是哈弗法学院教授 Larry Lessig 【注5】为什么喜欢说“代码即法律”的原因。

框架为它们所处的互联网角落建立规则,一旦你选择它们,就必须生活在规则之下。一些博客平台鼓励通过 Ajax 调用与其它博客链接。这就是你必须谨慎调查、聪明选择的原因。这就是框架最终主导我们生活方方面面的原因,甚至包括我们不在编程的那些短暂时光。

本文来自腊八粥(labazhou.net),并发编程网在获得作者允许的情况下对本文进行了转载。如果你觉得我们做的不错,欢迎给我们一些鼓励(长按二维码即可)。

框架成为新的编程语言的 7 种理由

================================================

感谢 CodingUPYUN 对本微信的支持。Coding.net 是一个面向开发者的云端开发平台,目前提供代码托管、运行空间、质量控制、项目管理等功能。

upyun.com是国内领先的云服务提供商,专注于提供静态文件的云存储、云处理和CDN加速服务。现在注册,即可免费体验!


推荐阅读
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • node.jsurlsearchparamsAPI哎哎哎 ... [详细]
  • JavaScript和Python是用于构建各种应用程序的两种有影响力的编程语言。尽管JavaScript多年来一直是占主导地位的编程语言,但Python的迅猛发展有 ... [详细]
  • 最近学习了关于使用最为流行的jquery发送请求,在实践中以最为简单的聊天室作为测验的辅助工具,对相关网页开发有一个初步的认识,希望大家能够一起学习进步。首先介绍一下 ... [详细]
  • DAO设计模式(九)_1.设计分层初步 ... [详细]
author-avatar
归零xinghx_318
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有