一些编程语言的历史

分享一些有趣的历史,无意褒贬和争论。


@绿帽蝙蝠侠

Python诞生于1989年,C#诞生于2000年。论年纪,两者差了11年。但为什么一个80后,直到今天才排到了00后的前面?早干什么去了?一门近30年都没火的语言,为什么最近几年突然就给火了?如果非要回答的话,我会说是“因为没有新的增长点”。

动态语言绝大部分都是老古董,其中最“年轻”的是javascript,ruby和lua,它们是仅有的三个90后。绝大多数动态语言,都诞生于计算机发展的早期阶段。

那个时期的电脑,还没有图形界面。最主流的操作系统,是微软帮IBM个人电脑开发的MS-DOS,整个操作系统才700kb,在当时已经算巨无霸了。程序一般只有几kb,甚至几byte。通常几百行代码的程序,就能算一个“软件”,几千行代码就算是“巨型项目”了。

而从windows诞生之后,图形界面化的时代真正到来了,那些几千行代码写成的“巨型项目”,直接变成了“小工具”。其实至此,现代IT行业才算真正诞生,计算机行业才从电工行业中完全独立出来,“会编程的电工”才变成了程序员。静态语言诞生,解决了两个根本问题,一是让程序可以写的更大,使“软件”的门槛,从几百行代码,猛增到十万行级别,“大项目”飙升至百万行级别。二是可以让程序跑的更快。3d游戏等依赖高性能的应用迅速发展壮大。

此后动态语言因为无法克服难以编写大型程序,以及运行速度慢这两个问题,被视为过时的技术,逐渐从主流变得边缘化。

几乎所有的程序员都在学习桌面程序开发,C++一度如日中天,而学习网站技术的程序员,被视为“不务正业”。而当时普遍认为,动态语言会在2000年彻底灭绝。

再后来,网络时代到来了,各种应用被搬到了浏览器上,桌面开发开始转冷,那群“不务正业”的人成了抢手货,“务正业”的人却突然没了方向。

这时候一度被windows吊打的Linux,又重生了。。之前快被扔进垃圾堆的“破烂儿”,摇身一变,却成了装逼神器。

随着网络普及度越来越高,人们发现每次更新网站上的内容,都要关闭服务器,严重影响网站的流量增长。而静态语言因为需要编译,每次更新必须关闭网站。于是javascript虽然是动态语言,却也照样火了。“学编程==做网站”成了既成事实,PHP,Python,Ruby等本该灭绝的动态语言,又跑出来蹭互联网的热度,集体复活了。尽管依然不适合大程序,但兑付着做些乡镇企业的官网,博客,个人主页,总是绰绰有余的。

再后来智能手机普及,又把java和OC捧火了。什么软件都要有个手机版,才显得有逼格。可是由于智能手机增长过快,短短几年之后又没了增长点,IOS开发短短几年就由热转冷,今天在就业市场已经基本绝迹。安卓开发还有一些岗位,但也已经淡出主流了。

各大厂商绞尽脑汁,赶紧搞出了VR,AR进来救场。结果消费者却不买账。。。观望的人不少,但创造的经济效益却非常有限,于是这个概念很快就冷掉了。一大堆VR引擎蓄势待发,几年之后就只剩Unity3d这么个独苗了。。。眼见形势不对,混合现实,区块链,大数据组队前来。结果混合现实的设备太贵,消费者不买单,大数据又无法平民化,也就没了炒点。

区块链总算稍微炒出点热度,忽悠出一支“够浪”地鼠军团歌功颂德,但不久之后却发现整个it圈,除了一群传教士每天在编故事,“够浪”们每天在听故事,高喊口号拯救世界之外,居然没人能说清区块链到底有啥用?后来也不知是谁手贱发帖问了一句“区块链是不是庞氏骗局?”竟然出现了皇帝新衣一般的童话式剧情。“够浪”大军除了发动人海战术,用几个假大空的术语反复洗版之外,居然连一条有力的反驳都讲不出来,眼看就要编不下去了。。。

这可急坏了it巨头们。就在这时,已经被游戏开发行业玩了几十年的“人工智能”,突然摇身一变,返老还童,火了!

“人工智能”这几十年来,从深度优先遍历,广度优先遍历,发展到A*算法,再到FSM有限状态机,又进化到行为树。。每隔两年就出一套新算法。一直也不火。

做过的益智游戏数不胜数,搞过的NPC逻辑成千上万。象棋、围棋、五子棋、斗地主、三国杀、对对碰、连连看,各种算法轮番上阵,带火的游戏一波又一波,可人工智能本身就是火不起来。

90年代初期,IBM搞了套算法炒作一波,用深蓝计算机下国际象棋,把各路国际象棋大师杀的人仰马翻。概念确实炒起来了。不久之后,深蓝就在电影里成功统治了世界,可惜被一个内裤穿在外面的人打败了。后来,又在《终结者》、《机械战警》里统治了世界。当然,最后还是被男主角打败了。

虽然概念炒的这么大,也不可谓不火,可人工智能还是得不到认可。因为无论怎么看,它都只是个去掉了图形界面、加大游戏难度的象棋小游戏。

前几年英国一家公司也搞了套新算法,起名深度学习。炒作了一波,当然还是没火,要看公司就要倒闭,谷歌出手收购之后,搞了个围棋比赛。本觉得没啥炒头。几十年前就被IBM炒糊了的残羹剩饭,依然是“小游戏统治世界”的老段子。

可万万没想到,才赢了一个世界冠军,竟然就给火了!立刻就变成了“改变世界”的“新概念”。

Python也跟着鸡犬升天,顶到了风口浪尖。概念炒的火翻天,一大堆数学圈子的人,嘴上挂着各种算法,跨行到IT圈来蹭热度,反倒把传统程序员挤到一边去了。

但无论概念怎么炒,能火还是不能火,项目终究还是要向大型化发展吧?增删改查还是要有人搞吧?

等到概念炒出来了,行业趋于成熟了,自然又会有更新的概念出来,到时候又会火一波新语言,不是从来都是如此嘛?

再火的概念,最终还是会冷掉,“更火”的概念,也会不停的冒出来。但只要程序朝着大型化发展的这个终极目标不变,笑到最后的依然是C#,JAVA这类静态语言。

而Python也并不是第一门“复活”的动态语言,Basic语言也在90年代复活过,当时的一群粉丝也曾宣称要“改变世界”,受当时的氛围影响,Basic还一度编入了职业中专的计算机教科书,短短几年之后,热潮退去,Basic也就从教科书里移除了。

Perl语言在2000年左右也火过,它可以被视为Python的前任,原本是Unix时代的老古董,却在几十年后突然就火了,火起来的过程,也跟后来的Python一模一样,同样是以语法简洁当做亮点,同样预装在Linux系统上,同样吸引了数学圈的人跨行到IT圈,被称为“未来会取代VB和JAVA的梦幻语言”,在各种排行榜上,一直都排在C#前面。结果后来概念炒不下去了,逐渐转冷,才轮到Python出来接班替代了它。如今关于Perl的话题数少之又少,但在排行榜名单之中的排名却始终居高不下。今天依然还在前20之内,但这门在市场上已经完全见不到,Githib上也没什么存在感的语言,若非刻意操作,排名怎么可能这么高?

2010年左右轮到Ruby火了,有个广为流传的帖子,标题是《所有程序员都应该学习Ruby》,成为了Ruby粉丝的圣经,流传于各大论坛,后来Python炒概念时,还故意蹭了一下Ruby的热度,修改了那篇圣经,改成了《所有程序员都应该学习Ruby或Python》。

但这种动态语言的“复活”现象,是靠粉丝推动,并不是行业需求去推动的

看一下编程语言的发展史就知道了,动态语言从1995年之后,就进入完全停产状态。为啥是1995年?1995年发生了啥大事件?windows95诞生,计算机进入图形化时代。

1995年以后诞生,可以适用于传统开发的编程语言中,无一例外,全是静态语言。JAVA(1995年),C#(2000年),GO(2009年),Dart(2011年),kotlin(2013年),Typescript(2013年),行业的态度,岂不是一直很清楚嘛?

TypeScript 这十年

原文 https://devblogs.microsoft.com/typescript/ten-years-of-typescript/
译文 https://baijiahao.baidu.com/s?id=1746251654890937153

附:https://www.typescriptlang.org/
https://devblogs.microsoft.com/typescript/announcing-the-new-typescript-website/
知乎:TypeScript 解决了什么痛点?

今天是 TypeScript 的生日!但是这个生日很特别——10 年前的今天,2012 年 10 月 1 日,TypeScript 首次公开亮相。

早期的情况

当 TypeScript 首次亮相时,有很多人持怀疑态度,这也是可以理解的。对于一些 JavaScript 用户来说,一个试图将静态类型引入 JavaScript 的团队可能听起来像是一个邪恶的组织,甚至可视为一个阴谋或笑话。

但是这些功能是有价值的,对吗?类型检查,在你保存文件之前捕捉 Bug,并获得丰富的编辑器功能,如代码完成、导航和重构?我们知道公司内外部的团队在处理复杂的 JavaScript 代码库时遇到了巨大的挑战,而且我们知道 JavaScript 将被广泛使用。因此,谁不希望有强大的工具来帮助编写它呢?对于团队来说,TypeScript 初心未变,一如最初在发布 TypeScript 时所述的那样,“在大型应用开发中使用 JavaScript 开发!"。

幸运的是,这个愿景使得很多的开发者产生了共鸣。在早期,我们建立了一个小而勤奋、热情的社区,当我们还在迭代、学习和构建一个甚至还没有达到 1.0 的东西时,很多人就愿意参与进来,进行实验和体验。我们看到了令人兴奋的新努力,如 DefinitelyTyped 项目,新的社区成员在 StackOverflow 和我们的问题跟踪器上提供帮助,创作者为该语言编写书籍和教程,以及押注 TypeScript 的新库。这些有耐心、努力工作、精力充沛的开发者为 TypeScript 社区的发展奠定了基础。

不过,大多数 JavaScript 开发人员对 TypeScript 仍持怀疑态度。那么,这个团队要如何说服 JavaScript 开发者相信静态类型在动态类型语言中的价值?

"类型与无类型"一直是一个有争议的话题,这在编程界至少可以追溯到半个世纪以前。

但是,我们真的想通过类型的力量来创造令人惊奇的 JavaScript 工具。

这能做到吗?

经得起时间的考验

事实是,这需要一种与我们习惯的完全不同的开发方法,其次是需要大家坚持不懈、拓展性和同理心。TypeScript 必须是免费和开源的,并以真正开放的方式进行。它还必须与现有的 JavaScript 无缝互通,与 JavaScript 共同发展,并且感觉像 JavaScript。

TypeScript 从未打算建立一种单独的、独特的、规定性的语言。相反,TypeScript 必须是描述性——围绕 JavaScript 生态系统中一些模式进行类型系统的创新。这让我们能够满足人们的需求,而且这种理念与项目的设计目标非常吻合。

实际上,TypeScript 的设计目标保持得如此之好,令人惊讶。

例如,一些设计目标:

  • “不会对发出的程序施加任何运行时开销。”
  • “与当前和未来的 ECMAScript 提案保持一致。”
  • “保留所有 JavaScript 代码的运行时行为。”
  • “避免增加表达式级别的语法。”
  • “使用一致的、完全可擦除的、结构化的类型系统。”

所有真正指向 TypeScript 只是简单地成为 JavaScript 的类型检查器,只添加类型检查所需的语法。

因此,我们主要关注类型系统,而避免增加新的运行时语法和行为。这在 10 年后的应用中,体现地可能更明显,但编程语言经常试图根据他们的可运行代码的样子来区分自己。此外,很多类型化语言根据类型来指导他们的运行时行为。

但是,这些方法在试图建立在 JavaScript 的基础上,并与之整合时,就没有意义了。没有类型的 JavaScript 在粘贴到 TypeScript 文件中时,必须有相同的工作方式,而且将 TypeScript 转换为 JavaScript 需要像剥离类型一样容易。我们在早期采取了一些错误的措施才意识到这一点,但这是一个学习的机会,并且微软团队在 10 年的大部分时间里都避免了运行时语法。

如今,当 TypeScript 缺少一个有用的运行时特性时,我们不会只在 TypeScript 中添加它。我们在 TC39(JavaScript 标准机构)内开始实践,指导或倡导新的功能,以便所有的 JavaScript 开发人员能够从中受益。

另一个成功的原则是**,TypeScript 并没有试图成为工具箱中的每一个工具**。我们的一个非目标是不 “提供一个端到端的构建管道。相反,使系统具有可扩展性,以便外部工具可以使用编译器进行更复杂的构建工作流程”。

有很多时候,TypeScript 被要求成为一个 linter、一个 bundler、一个优化器/minifier、一个构建协调器、再一个 bundler 等等。这些界限并不会每次被明确,尤其是当 TypeScript 作为一个类型检查器、编译器和语言服务已经做了很多。在 JavaScript 生态系统中,很多人参与到应用程序开发的最佳实践争斗中,由此 TypeScript 也不断地保持了灵活性,这一点非常重要。

考虑到过去几年中,所有不同的捆绑器、不同的运行时、不同的构建协调器和不同的锁定器,TypeScript 与其中的每一个都很好地整合了,并没有试图取代其中的任何一个,这一点也至关重要。我们很荣幸能与这个领域的工具作者合作,因为我们都在努力使 TypeScript 和 JavaScript 更容易使用。

回到今天

今天,TypeScript 是一种蓬勃发展的语言,全世界有数百万的开发人员在使用。在 StackOverflow 的年度调查、GitHub 的 Octoverse 报告和 Redmonk的语言排名等调查和语言排名中,TypeScript 一直处于开发者最常用和最喜爱的语言中的 Top 10。

当然,背景很重要——TypeScript 的使用从根本上与 JavaScript 的使用交织在一起,每个 TypeScript 开发者也是 JavaScript 开发者。值得庆幸的是,即使在询问 JavaScript 开发人员是否使用 TypeScript 并喜欢它时,比如在 JS 的状态调查中,答案也都会是 “是”!TypeScript 的成功是一个很好的例子。

今天的成功远远超过了核心团队几年前对 TypeScript 的想象,更不用说十年前了。核心团队在 TypeScript 上努力工作,但我们知道,实现这一成功的根本原因是社区。这包括 TypeScript 的外部贡献者、在 TypeScript 上下注并证明该语言的库创建者和日常开发者、DefinitelyTyped 的贡献者、社区组织者、花时间回答问题和教导他人并为新人开辟道路的专家。

也希望 TypeScript 的下一个 10 年能给你带来好的待遇!

这个作者对于AI的理解显然是相当的无知