程序语千百种,想要学 Coding 就必须先确定你的目的是什么,有的是拿来写 App 的,有的是专写操作系统,有的则是拿来写网页的 …… 各种不同的目的都有其最适合的语言。

常见的语言如 C++、JavaScript、VB、VC、Matlab、Python 等,但其实像 WhatsApp 如此受欢迎的 App 就不是前述这几种语言写的,为什么要有那么多的程序语言?

本文作者 Chris Dannen 同时是知名科技媒体《Fast Company Digital》 和《FastCo.Labs》 的编辑,曾经做过管理顾问、户外运动的採访记者以及 Red Bull Energy Drink 的品牌代表,曾写过两本关于 iOS 开发与设计的书。

以下以作者第一人称撰写。

世界上的程序语言已这么丰富,为什么我们还需要更多?

2014年6月初,Apple 发布了一个新的语言 Swift,主要是为了建立 Mac Apps 而开发的,你有想过为什么需要这么多的程序语言吗?难道现在开发的都还不够用吗?

没错,就是一个简单到不行的原因:只要有人想要学习,就会有各种不同的语 言被开发出来。因为科技进步,加上使用语言的目的性不同,越来越广泛也越齐全。

如果把这个问题套用到「鸡生蛋还是蛋生鸡」,这个问题的解答会是蛋生鸡。

许多语言的开端,都是要让编写程序的概念变得更简单、更适合初学者和有兴趣的朋友。事实上,电脑把语言设成二元码(电脑进行储存和运算时,采用二进位,也就是所有资讯都被替代成二进位字串),为什么要这么做呢?

原因很简单:如果你把你所有的指示转换成 Yes 或 No 的问题,并分别以 1 和 0 表示,这么一来电脑就不会搞混了(除非一开始的编码是错的)。

在第二次世界大战时,广播讯号是以非常糟糕又不可靠的无线电导航来传重要讯息,而二元码如此聪明的创新是 Claude Shannon (美国数学家、电子工程师和密码学家,被誉为资讯理论的创始人)所发现的,只要用二元码,电脑就可以把资讯储存与进行处理。

自从二元码诞生,非常多的语言都以它来设计,使工程师能够写得更流畅又更容易读,虽然会感到无聊或是觉得写二元码很冗长。比如说大写字母 A 好了,以二元码表示成 01000001 ,如果是小写 a 呢,则是 01100001 ,写完一个程序要花一些时间,但不用介意长度有几千行,因为大多数的程序都是这样来的。

当一个语言以易懂的英文写,就更容易读了,但另一方面就会显得相当冗长;像是 Apple 的程序语言 Objective-C (是一种通用、高阶、物件导向的程序语言,任何原始的 C 语言承是不需要经过修改就能直接通过 Objective-C 的编译器),就是冗长到不行,但主要也是为了要满足对使用者友善的特色,语言本身就是非常容易使用的。

即使在你的生命中从来没有写过程序,或多或少你也能了解一点工程师想要告诉电脑要做什么,它长的大概是像这个样子:[someInstance doSomethingWithObject:a andAnotherParam:b];

事实上,为什么在物理电子学的范畴里有这么多的骇客套件,主要是因为要让现实世界的装置通常能以最自然的方式转换成写程序的概念,至少对于写程序的初学者而言,这类的程序语言是比较适合的,即使它很冗长。

程序语言就是开发者自我性格的复制

就像其他的创新一样,程序语言通常都是从一个偏执顽固的人开始,试图要走一条只属于自己的路。

举例来说 1971 年,在这个领域的大多数人都在 Lisp (源于列表处理器,List Processor 的缩写,是历史悠久的电脑程序语言家族,于 1958 年基于 λ 演算创造,是第一个函数语言程序设计的语言)写程序,一个在 Stanford 的工程师明白了要如何编辑 Lisp 的编码,也就是我们今天所谓的原始的编辑器。

想像一下,就是一个在 Mac 上的 TextEdit App,但当然不是像现在一样可以直接简单的使用。

然后你必须按 Escape 键跳出页面,检查你所做的那些改变,像是储存或浏览在部落格贴文的草稿等,是否跟你预想中的一样;不管怎么说,重复对照你所想的与结果,这简直是一件痛苦的事。

另一个从 MIT 来的工程师看到在 Palo Alto 的创新后,决定要回 Cambridge 后靠自己把它复製下来,并且做一些改善与调整。而其他同事们为了新界面终于开始写 macros (巨集,根据一系列预定的规则替换一定的文字模式)--可重复使用的编码位元以节省时间。当他们将巨集的集合程序化,结合到一个系统内,他们把这个叫做 EMACS--Editing MACroS 的缩写。

抽象到不行

如果你是念文法商的,别被这样的名词吓到,它代表着一个程序的生命。

换个角度想像,在写作时,我们会把字句的结合叫做段落,这是就写文章的观点来看,它也是一个抽象的概念,当我们要告诉其他人正在讨论文章的哪部份时,我们不需要再重新引述整个段落的文字内容,而是告诉他们第几段就好,说到底它也是抽象的。

同样地,写程序的工程师经常会试着要创造可重复使用的编码字元,因为就像其他人一样,会懒惰,会不想做重复的事情。

大约 30 年前有个大改变,对于藉由可重复使用的部分来建立电脑程序,将它称作为物件(若是在建筑、车子或是家具设计,就很像是模组化), 这样的设计模式称作为物件导向的程序编写,在 NeXT (Steve Jobs 在创立苹果后所成立的公司)的那段期间,这可是相当创新的。当时还将它视为未来程序发展的领航者,所以他们就将这样物件导向的程序拿去卖,并且决定将它取 为在 C 语言架构下属于他们自己版本的名称,于是 Objective-C 就这样诞生了。

当 Apple 买下 NeXT 后继承了 Objective-C,并把他们公司的 OS 变成 Mac OSX。

云端时代,语言也需要新架构

当本质上发生改变的时候,你必须要去适应它,因此有时候你会需要一个新的语言。伴随着云端时代的来临,更是如此。

传统上来说,程序会依下载位置在你的电脑(装置)上跑,就像你所下载的 Apps 和安装到你电脑内的软体。然而有时候,某个叫作网络的东西,它有无限神奇的功能,能够把在某一台电脑运作的 App 传送到另一台电脑上,这些是网络 App,比如说像是 Facebook.com 或是 Twitter.com 等等。

在网络 App 你能够做很多事情并且看到即时的变化,Facebook.com 的 App 是在某处的伺服器运作,而不是你实际的电脑上。

要创一个 App 其实是需要花好一番功夫的,你需要不只是电脑能力和频宽传输,软体是一种服务,从云端来的服务,这些云端是需要花一大笔成本来操作的,所以一群聪明的人聚集在一起,然后创造叫作 Node.js 的开源平台,通过网络跑 App 以大幅降低成本。

许多开发商偏好将他们的 App 视为一种服务,因为一个网站有非常多的下载 App 的优势,像是免费下载,使 App 更便宜且在一定规模下运作,已经造成了 Node.js 一阵轰动,而 Node.js 是由 JavaScript 写出来的,Node 解释了为什么身为一个语言的 JavaScript 最近可以如此受欢迎。

并不是要说上图这几个受欢迎的语言已经霸占了大部分市场,其他的语言像是 Erlang,自从 App 开始移往云端后,它又重新的引起大家的兴趣。事实上,相较于图上这几个语言来说,受欢迎程度相当低的 Erlang 是创造 WhatsApp 的最大功臣。

一个程序语言,承载了一群自造者的文化

一部份人创造的程序语言是为了其他人,因此他们承载着所有自造者的文化产物,部份文化产物又和其他的工程师群不同,他们各自走着属于自身文化产 物下的版本,在电脑科学的历史上这已经发生过无数次,也形成着最受欢迎语言的运算子重载(对已有的运算符号重新定义,赋予它另一种功能以适应不同的数据类 型)。

有些语言对于逻辑思考的类型是有一定帮助的,一个你所用的语言会改变你的思考模式。就像是 Richard Pattis (一个加州大学尔湾分校资讯学的资深讲师)所说,「不只是为了不同的任务而有不同的语言工具,同时它们也形塑着你如何看待写程序的科技」。

这也是为什么会有这么多程序语言存在着,不同的语言代表着一群工程师脑中的思考逻辑模式,当然如果身为语言的使用者而非语言的创造者,太多的选择中要选择一个对工作最有帮助的,最能达成目标的那个。

转载于:https://blog.51cto.com/aliyue/1773364

想做全栈工程师?你要学习的还有很多。相关推荐

  1. 为什么越来越多的人想成为全栈工程师?

    作者 | web小二 来源 | web前端开发(web_qdkf) 前几天,有个读者跟我说,"小二,公司领导找我谈话,问我对自己的职业规划有什么想法?" 他说,"我没有忍 ...

  2. 假如你想成为全栈工程师…

    让我来发挥一下剪报君的特长,下面是百度百科对[全栈工程师]的说明: 全栈工程师,也叫全端工程师,英文Full Stack developer,是指掌握多种技能,并能利用多种技能独立完成产品的人. 上面 ...

  3. 想成为全栈工程师,要做到哪几点?

    导读:如何成为一名全栈工程师?需要具备哪些技术积累?成为全栈工程师有哪些好处?希望本文能为期望成为全栈工程师的同学提供一点帮助,和同学们一起分享交流. 作为开发者,我们不过度区分服务端 server ...

  4. 人工智能为什么要做全栈工程师

    武汉团队将人工智能深度学习应用于游戏创作大武汉客户端5月31日讯游戏中,你能想象你的对手是人工智能吗? 金山武汉团队深度参与的一款生存手游,在业界率先将人工智能应用于游戏制作. 5月31日,金山武汉总 ...

  5. 从平头哥讲起,谈谈全域旅游,说说为什么要做全栈工程师

    相信身为互联网+时代的人,都已经听说了[平头哥]的大名,这个一生都行走在干架路上的非洲生物,让我想起了去北京旅游的高铁上,看到的一本杂志,其杂志名称已经不记得了,但是有一个词让我印象深刻[生态旅游]. ...

  6. python全栈工程师薪水_不止 20K,Python 工程师薪资再飙升(内附转型指南)

    原标题:不止 20K,Python 工程师薪资再飙升(内附转型指南) Python 诞生之初就被誉为最容易上手的编程语言.进入火热的 AI 人工智能时代后,它也逐渐取代 Java,成为编程界的头牌语言 ...

  7. HTML5好从业吗?为什么都热衷于HTML5全栈工程师呢?

    2017突然流行起来的一个新职位"全栈工程师".大概在很多人眼里,全栈工程师是一个全能人才,事实的确如此.以Web前端为主,需求.后台.前台.用户.设计等内容为辅.全栈工程师拥有更 ...

  8. 月薪40K起,什么是Python全栈工程师?全栈工程师薪资为何这么高?

    我们经常听到全栈工程师这个词语.那么很多小伙伴还是不明所以,什么是全栈工程师?为什么全栈开发用Python?Python web全栈开发到底有多高薪?今天就来为大家解读一下. 什么是Python we ...

  9. 全栈工程师必备技能栈,聊聊月薪2W以内都该会点啥?

    文章目录 写在前面 全栈工程师 前端技能 框架类 JQuery Bootstrap Less Ant Design AngularJS React Vue 其他框架 后端技能 PHP技术 NodeJS ...

最新文章

  1. threadlocal使用场景_深入剖析ThreadLocal
  2. vue vue-router vuex element-ui axios 的学习笔记(七)完善登录注册
  3. ArrayMap java.lang.ArrayIndexOutOfBoundsException
  4. NeurIPS 2019放榜:华人作者贡献42%,谷歌170篇屠榜;国内清华第一,腾讯领衔产业界...
  5. 用squid配置代理服务器(基于Ubuntu Server 12.04)
  6. (dijkstra算法+多权值)最短路径问题
  7. Pytorch nn.BCEWithLogitsLoss()的简单理解与用法
  8. SharePoint中文WiKi
  9. 基于 WebRTC 构建 Web SIP Phone
  10. spring bean作用域之间有什么区别
  11. android mtklog,Mtklog结构及分析
  12. LeetCode 到最近的人的最大距离
  13. Apache ShenYu源码阅读系列-Dubbo插件
  14. Windows 8设置保护视力的颜色
  15. 折腾6年高龄笔记本-宏碁E5-572G-57MX-加固态-解决磁盘自检-坏道
  16. 重装系统后,硬盘分区丢失的解决办法
  17. 手机如何快速转换图片格式?改图片格式手机如何操作?
  18. Macchanger-更改mac地址
  19. 江礼坤:详解资源合作推广
  20. Android 12 快速适配要点

热门文章

  1. Directory文件夹
  2. SQL语法之SELECT INTO 语句
  3. jenkins钉钉通知
  4. iOS开发月报#12|201906
  5. illustrator插件--常用功能开发--绘制外箱--js脚本开发--AI插件
  6. java web url 传参_URL传参注意
  7. 游戏任务系统的设计要素
  8. 技术写作过程:如何写出好的技术文章
  9. ecognition 国外论坛地址,软件资料下载地址
  10. 【专业数据】七.2020~2022年北京交通大学【计算机技术】专业复试线/分数线差/计划招生数/复试数/录取数/复试比例/录取率