作者 | 藏狐

本文经授权转载自脑极体(ID:unity007)

在广大程序员的世界里,流传着一个千古难题——什么才是最好的语言?

在这个“BCYY48”(编程语言)天团里,C+、Java、Python、PHP……每个都有不少拥趸pick。而曾经有“首富爸爸”和全球后援会撑腰的VisualBasic语言,现在却处在一个非常尴尬的位置。

很少有开发人员愿意承认,自己曾经是VisualBasic的忠实粉丝,它被看做是玩具语言,更适合那些刚开始学习编程的人,更不可能出现在“全球最大同性交友网站”GitHub上。

但其实在野外,很多专业应用程序都是用Visual Basic编写的,它依然在为Access数据库和古老的ASP网页供电。比如可能是美国最大的医疗软件开发商Epic Systems 仍然大量使用VB 6.0,很多学校也在坚持教授VB课程 。在一份TIOBE公布的2018年编程语言排行榜中,VB的流行指数高居TOP5。

当然,这份榜单之于VB,更像是一种“回光返照”。

尽管有不少程序猿“口嫌体正直”地眷恋着VB,但它其实已经回天乏术,根本不可能在强手如林的新时代里硬核起来。

原因很简单,学习编程已经和学习英语一样低龄化了,从幼儿园到大学培训班,首选总是Python这个距离人工智能最近的编程语言。失去了强大后援团的VB,“退团”几乎不可避免。

而站在计算机语言的发展历程上,回顾这位28岁、曾经是世界上最受欢迎的语言所走过的“花路”,也格外有意思。

VB与它开启的图形视觉时代

“VB”只是一个脍炙人口的昵称,实际上它名字叫Visual,本姓是“Basic”。

1964年,John Kemeny 和 Thomas Kurtz觉得编程太难了,需要回归本源,所以把自己设计的编程语言叫做BASIC,后来成为计算技术发展历史上应用得最为广泛的语言。而VB因为在气质上和BASIC很相似(都很简单易用),而被微软相中收养了它。1981年,微软 “亲生闺女”Windows3.0“出道”的同时,VB也一起露面了。

“Visual” 则恰如其分地反映了VB得天独厚的动手能力,那就是开发图形用户界面。开发人员通过在窗口绘制按钮来为程序创建按钮,就像是在画布上作画一样。要让一个按钮做一些事情,只需要在设计环境中双击它并编写一些代码就可以了。

听起来似乎没什么了不起?要理解VB的特别之处,恐怕还要从机器语言的发展说起。

我们都知道,计算机世界是由数字1和0组成的。CPU 只能执行二进制代码,无论是一部电影、一首歌曲还是一张图片,最终都是以 0/1 代码来存储的。但是,用0/1编写机器语言很麻烦,即使专业人士也不好理解。

所以,很快出现了汇编语言,将枯燥抽象的二进制数字指令转化成英文单词。

比如说,“add 1, 2;”,意思就是让计算机完成1 和 2 相加的动作。再通过专门的软件(编译器),就可以将这些英文单词转化成 0/1 代码并由计算机执行。一代开发人员的集体记忆,就是在蓝色的背景下敲打白色的代码。

这时候,编程依然是一个与普通人有着“次元壁”的异世界。

而友好的VB代码让编程游戏发生了变化,将开发这件事进化到了一个按钮和点击就能实现的“所见即所得”的图形世界。

当时,VB有多火呢?这么说吧,对“证多不压身”的大学生来说,计算机二级几乎人手一个,其中很多人都会选择VB,哪怕是毫无基础的文科生也能轻松理解并用它设计一些小玩意儿。

对于初学者来说,VB是一个非常友好的画面,随着能力不断提升,VB逐渐发展成了一个对严肃的程序员来说足够强大的工具。据统计,在VB中编写代码的次数比C++语言多十倍。VB通过另一种非常流行的技术ASP(ActiveServerPages)进入公司办公室甚至网络。

但是,随着互联网业务的发展,微软下定决心要推广Web服务功能,而这项功能受Java的影响比较大,所以微软不得不在VB十岁的时候,领回来了一个新的“养女”。VB的粉丝们“一朝回到解放前”,必须和那些官方专业程序员一样,从0开始编写代码。

2002年的时候,VB不得不主动“转型”,引入了新的核心.NET Framework,并更名为Visual Basic .NET。在.NET世界中,VB代码的每一行都可以转换为等效的C代码行,反之亦然。尽管做了如许改变,VB始终难逃过气的命运。

2008年4月,微软正式宣布停止对经典VB的支持。而国内,NOIP等信息奥赛在2005年就将BASIC语言移出可使用项,少有专业编程人员会把VB写进简历。浙江省信息技术课程改革方案中,则将信息技术教材编程语言从 VB更换为Python。

有人也许会问,VB到底做错了什么你要抛弃他?其实,这与诺基亚卖身微软的故事如出一辙——“我们并没有做错什么,但不知为什么,我们输了。”

VB衰落的三步曲

从 1951 年至今,人们一共发明了200多种编程语言,并且还在不断地革新。所以一门语言的兴替,也许并不是什么太重要的事情。不过其中也有着不少参考意义。

庞加莱曾说,如果我们想要预见数学的将来,适当的途径是研究这门科学的历史和现状。计算机语言亦然。

那么,与虎视眈眈的C/C++、Java、Python等相比,VB到底欠缺了什么呢?

首先,经典VB的真正问题是它太成功了。

VB的学习曲线实在太平滑,即使不是一个训练有素的编码员,也可以无障碍上手。正是因因此,也吸引来了大量的业余编码者,粗心的新手、无聊的公司职员、暑期班学生等等,他们到处喷射面条式代码(spaghetti code),写出来的程序如同一碗意大利面一样扭曲和纠结,而VB并没有办法去改掉他们的坏习惯,只能眼看着开发生态越来越复杂和难以维护。

其次,其他语言也在进化。

严肃的开发者们都知道.NET的关键部分是用C语言编写的, C#等语言正在变得和VB一样足够简单和安全,并在演示、书籍、课程和开发人员研讨会上日益占据主流。市面上也挤满了针对幼儿和初学者的图形编程工具,比如scratch。

既然VB.net和C具有相同的功能,使用相同的组件,并编译成完全相同的形式,为什么不选择C呢?突然之间, VB简单易用的优点就不再是什么特别的东西了。

(2018年美国热门编程语言Top10)

所以,最终令VB走向末路的,还是开发生态的萎缩。

VB曾经占据了中学生信息技术教科书很多年,但越来越多的开发者和高校,开始将入门课程改成了其他计算机语言。比如MIT和UC Berkeley的计算机系就将入门语言改成了Python。一些明星互联网公司Youtube、Instagram、Reddit等等,核心业务也都是基于Python开发的。

示范效应之下,大量其他行业的人,自然也会选择用其他语言进入编程世界。比如我们能遇到会Python的医生,学过Scratch的孩子,或者是在开发社区轻松获得开源代码的新手开发者。虽然VB依然可以用来构建应用程序,但再探讨它,就会与其他开发人员显得格格不入。

繁荣了十几年之后,门庭冷落鞍马稀的VB,注定成为一个没有激情和未来的遗留产品。

未来的编程语言会是什么样?

回顾计算机语言的发展史会发现, 70年代计算机被用来处理不同类型的事务,于是出现了许多各有特色的语言,比如结构化的Pascal,结合了高级语言与汇编语言特点的C,做逻辑学研究的Prolog……

计算机性能的提升,互联网的兴起,又催生了PHP、Java、JavaScript、VB、Python、HTML等的出现。后来,更高计算量的元编程、异构编程也被支持了,C#、Swift等开始流行。到了人工智能时代,跨平台、全能但不专精、擅长处理统计相关问题的Python又成了第一开发语言。

总体来看,一种编程语言的走红,就像“流量偶像”也并不是各个业务能力都很强一样,侧重点各有不同,行业需求、学习曲线、运行成本等多重因素决定了,程序猿们还要继续为谁站C位而掐到头秃。

当然,这对普通大众来说都不是事儿。我们关注的,是主流编程语言的更迭都带来了哪些影响?有几点是比较值得注意的:

1. 低门槛的生产工具。过去,计算机教育一直强调的是“语言一通百通”“重要的是思想”“优雅简洁的代码”等等,但随着编程语言越来越简单易用,成为一种低门槛的生产工具已经是不可阻挡的潮流了。

在MOOC、Coursera、某某AI大学之类的培训网站上,遍布了用Python识别苹果的农民、用Python分析蝴蝶种类的生物学家、训练神经网络的中学生……防止大众开发者的加入而重蹈VB面条式代码的覆辙,可能需要现在就未雨绸缪。

2.图形化编程与代码编程的悖论。图形化总是对新手最友好的入门方式,能极大地减轻代码所带来的挫败感。笔者刚进入大学时,是从VB开始接触了计算机编程语言,而后过渡到了C等更加抽象的代码。儿童编程也是如此,有调查显示,在使用Scratch(一种图形编程)几年后,学生们会更愿意去尝试代码编程。

但是,大众眼中“真正的编程”——代码编程正在日益低龄化,从程序员圈子到高考内容再到幼儿园教材,Python已经切切实实地实现了从娃娃抓起。对于这种填鸭式的流行趋势,亚马逊AWS主任科学家李沐就曾调侃道:我家娃一岁就开始读paper,现在已经可以熟练敲键盘写mxnet代码。一家keras4kindergartners的网站也在网站上打出了“如果你爱你的孩子,不要在他们没学会反向传播之前就把他们送进小学”的嘲讽广告。

数十年的发展已经证明了,我们最需要的编程语言,始终是可以让人毫不费力地写出第一版程序的语言,而不是看起来有多么炫酷和特别。

3.高并发改变了编程逻辑。传统的编程思维,是在单个CPU上执行多个逻辑任务,如今的多核异构计算则是一个逻辑上的任务放在多个计算单元上进行。而且,代码也变得越来越简洁,比如用C语言需要1000行代码的程序,Python可能只需要20行就能完成,性能大大提升。这一方面让开发者拥有了更高的自由度,释放自己的创造力;同时,也对理解任务逻辑、合理分解任务的能力提出了更高的要求。

显然,这世界并不存在什么“完美”和不朽的编程语言,如果非说有什么共性的话,那么只有“那些内核最小、最干净的编程语言才会存在于进化的竹竿上。”其他无论学什么都有可能像凤梨罐头一样过期。

现在回顾起来,VB的兴衰正折射着Web时代的余晖,也代表了计算机科学在编程领域上的进步。当专业程序员手中的“屠龙宝刀”,普通人也可以“点击就送”,数字时代才算真正揭开帷幕。

人工智能如何学?

https://edu.csdn.net/topic/ai30?utm_source=csdn_bw

【END】

 热 文 推 荐 

自动驾驶激荡风云录:来自圈内人的冷眼解读

50 年人类登月史:那些不为人知的故事

☞即使在微软 Azure 上,Linux 也大有一统天下之势!

☞ 程序员 12 小时惊魂记:凌晨迁移数据出大事故!

☞5G+AI重新定义生老病死

☞干货 | 20个Python教程,掌握时间序列的特征分析(附代码)

☞ 阿里云十年,从去“IOE”到引领云原生浪潮

☞ 知名饮料制造商股价暴涨500%惊动FBI,只因在名字中加入了"区块链" ?

为什么雷军说“华为不懂研发”?

点击阅读原文,输入关键词,即可搜索您想要的 CSDN 文章。

你点的每个“在看”,我都认真当成了喜欢

不敌 Java、C/C++、Python,28 岁 VB 究竟输在了哪?相关推荐

  1. 28岁自学python来得及吗_我28岁了,还能成为一名程序员吗?迷茫和沮丧中

    过去的两三年,我感到很不充实.我从事视频制作/编辑(主要使用Avid, Final Cut, After Effects这些软件制作视频)已经6年多了,在这中间还干过电视广播方面的工作.大概从4年前开 ...

  2. 高龄程序员——28岁土木专业半路出家进军java的我后来怎么样了?

    自我介绍一下 我就是那个26岁985研究生毕业,学的土木工程相关的专业.工作半年,存款3000,半年后调到深圳总部(公司央企),工作一年差不多也就几万存款,感觉生活无望,就直接决定转行的28岁高龄程序 ...

  3. 在开课吧学python的经历-28岁,年薪30万,工作5年,被裁掉只用了5分钟

    原标题:28岁,年薪30万,工作5年,被裁掉只用了5分钟 "我太失败了!" 某个周五晚上,叶子给我发来信息. 叶子毕业后,就在这家公司做人力,两年来任劳任怨,说她已经有3年经验一点 ...

  4. 28岁自学Python转行靠谱吗?入行晚吗?

    本人28岁了 毕业于一个普通的二本院校,工科男,学的是计算机科学与技术. 做了三年的软件应用开发,现在做Android开发,越来越感觉到力不从心,很多技术需要从头学起,压力太大,自己没有太多的天赋学习 ...

  5. 28岁学Java晚不晚?快30学java还来得及吗?

    相信很多有意愿转行IT的小伙伴们都或多或少了解过培训,大家也肯定都了解过IT行业中的一句传闻:"程序员只能做到35岁".那么问题来了,站在28岁这样一个年纪,还能不能参加Java培 ...

  6. 28岁了,学习Java还好就业吗?

    28岁,年龄算是快到了中年了吧,对于这样的年纪,选择去一个新的职业是需要很大的勇气,但是正是这样的勇气才能够成就你的未来 万事开头难,当你迈出第一步的时候就已经没有回头的路了,剩下的就是要自己能够坚持 ...

  7. 为什么28岁不能学java_28岁大龄人学java不是不可能

    原标题:28岁大龄人学java不是不可能 勤能补拙!讲讲28岁转行学java的经历,让你体验一把大龄人学java不是不可能! 28岁,怀着一腔热血来到郑州学java,不仅是为了见识天子之地的宏伟壮阔, ...

  8. 28岁转行学Java ,我收获理想的高薪邂逅浪漫的爰情

    作者 28岁转行学Java ,我对我的选择无怨无侮.虽然我在学习Java的行列里年龄大了一些,但是因为梦想,通过努力,我收获了狼多,不仅是知识和技能,更是未来的方向.我因为偏科,高考考到了一个不太理想 ...

  9. 28岁自学python的第一个月感受(2020.04.08)

    本人今年28岁,93年.没有什么高学历,很早就出来在社会中谋生.记得二零一几年的时候,自己刚刚从学校里面出来,没有任何的技能(只是高中学历),在南京也没有什么朋友,只是靠着自己的冲劲和对未来的憧憬,到 ...

最新文章

  1. 咸宁书写桂花产业-国情研究·万祥军:特色农业谋定大健康
  2. r语言remarkdown展示图_R语言—自动报告Markdown笔记
  3. mysql bc_正则表达式——MySQL搜索过滤
  4. Jetson AGX Xavier配置cuDNN流程
  5. maven mirror repository
  6. Ubuntu下BOINC服务器安装(step8失败)
  7. 流氓软件清除,周期性出现流氓软件
  8. Docker Swarm学习教程
  9. 程序员面试揭秘之求职渠道
  10. 33.错误处理(2)
  11. c语言- I Love GPLT
  12. lora终端连接云服务器_一种LoRa服务器及其数据传输方法与流程
  13. Java旅游网站源码+页面
  14. css 实现三个 div 等分排在一行
  15. 守卫工厂智能 当SDN遇上智能制造
  16. html页面太大了怎么调小,html – 如何在调整浏览器窗口大小时保持绝对定位的元素...
  17. POJ 1088滑雪(3种解法)
  18. sim卡iccid编辑软件_5G超级SIM卡 能握在自己手中的 才是最安全的
  19. web应用中涉及到的编码问题总结
  20. Builder模式到底好在哪里

热门文章

  1. [C] 从文件读取数据
  2. [PyTorch] 安装
  3. Ubuntu系统下环境变量那些事儿
  4. error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'产生原因
  5. leetcode题库1277-- 统计全为 1 的正方形子矩阵
  6. lua笔记1 基础概念
  7. Linux下的进程池(2)
  8. 宠物火葬行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  9. 传感器贴片行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  10. 传统接口写法与Restful API 区别