十分钟学习十种语言
最后更新于:2022-04-01 05:31:57
> 中文出处:http://www.vaikan.com/try-10-programming-languages-in-10-minutes/
英文原文:[Try 10 Programming Languages in 10 minutes](http://trelford.com/blog/post/ten.aspx)
世界上有很多有趣的编程语言,但下载它们、安装编程环境可能会是一件非常耗时的事情,而你很可能只想试一下。好消息是,你可以直接在浏览器里运行很多的编程语言,通常还有附带有一些教程来指导你了解基础知识。
学着《[七周七种语言](http://t.cn/z8NDXbR)》这本书的模式,下面是更简洁的版本。
[TOC=2]
## 动态语言
厌烦了长时间的编译、渴望一种轻量级的脚本环境?动态语言一定会让你喜欢。
### [尝试Lua语言](http://trylua.org/)
[Lua](http://en.wikipedia.org/wiki/Lua_\(programming_language\))是一种轻量级的动态编程语言,对[协程(coroutine)](http://en.wikipedia.org/wiki/Coroutine)有着很好的支持,因为有着简单的C API,使得它在游戏视频脚本处理方面非常流行。比如游戏引擎**[LÖVE](https://love2d.org/) **和[Marmalade Quick](http://www.madewithmarmalade.com/quick)。
### [尝试Clojure语言](http://tryclj.com/)
[Clojure](http://en.wikipedia.org/wiki/Clojure)是大演讲家[Rich Hickey](http://www.infoq.com/presentations/Simple-Made-Easy-QCon-London-2012)的智力结晶,它是一种最古老的编程语言[LISP](http://en.wikipedia.org/wiki/Lisp_\(programming_language\))的后裔。关于Clojure语言的社区很多,我最喜欢的一个Clojure项目是[Sam Aaron](http://www.youtube.com/watch?v=imoWGsipe4k)的[Overtone](http://overtone.github.io/),一种即时音频编码工具。
### [尝试 R 语言](http://www.codeschool.com/courses/try-r) (需要简单的注册)
[R](http://en.wikipedia.org/wiki/R_\(programming_language\))语言是一种统计及图表技术的免费语言环境,有着大量的用户提交的程序包。你在思考如何画一个[鸡蛋](http://vis.supstat.com/2013/03/draw-easter-eggs/)吗?试一下吧。
## 函数式编程语言
函数式编程的思想已经渗透到了大多数主流编程语言里,从C++到VB。然而,如果想真正的体验函数式编程的富于表达特征,你需要一种以函数式为主的语言。
### [尝试Erlang语言](http://www.tryerlang.org/)
[Erlang](http://en.wikipedia.org/wiki/Erlang_\(programming_language\))绝对是一种非常有趣的语言,它能帮你打造永不宕机的高容错并行系统。它提供了非常棒的[模式匹配](http://en.wikipedia.org/wiki/Pattern_matching)能力。有很多的产品应用和工具都是用它开发的,包括[RabbitMQ](http://en.wikipedia.org/wiki/RabbitMQ)消息系统和分布式数据库[Riak](http://en.wikipedia.org/wiki/Riak)。
### [尝试Haskell语言](http://tryhaskell.org/)
[Haskell](http://en.wikipedia.org/wiki/Haskell_\(programming_language\))语言深度的依赖[Miranda编程语言](http://en.wikipedia.org/wiki/Miranda_\(programming_language\)),Miranda在80年代和90年代用于英国大学的教学。Haskell在此基础上增加了Monads和Type类,在一些大学里仍然有它的课程。它也非常流行于学院研究方面。
### [尝试OCaml语言](http://try.ocamlpro.com/)
[OCaml](http://en.wikipedia.org/wiki/OCaml)语言很像Miranda,是基于[ML编程语言](http://en.wikipedia.org/wiki/ML_\(programming_language\)),在其中增加了面向对象结构。[F#](http://fsharp.org/)语言是基于OCaml语言的,甚至还有它的一个兼容模式。OCaml在业内仍然有使用,例如Jane Street Capital 和 XenSource。
## Web 语言
我们已经知道有太多的语言可以[编译成JavaScript语言](http://altjs.org/)。但仍然有价值看一下JavaScript语言的一些新功能特征。不妨看看去年[Brendan Eich](https://twitter.com/BrendanEich)在[Strangeloop](https://thestrangeloop.com/)上的一个谈话,题目是《[The State of JavaScript](http://brendaneich.github.io/Strange-Loop-2012/#/)》。下面是3个我认为非常有趣的脚本语言:
### [LiveScript](http://livescript.net/)
LiveScript是[CoffeeScript](http://en.wikipedia.org/wiki/Coffeescript)的间接后裔,有着函数式编程特征,例如[模式匹配](http://en.wikipedia.org/wiki/Pattern_matching)函数[函数组合](http://en.wikipedia.org/wiki/Function_composition_\(computer_science\))。有兴趣的可以看一下[10 LiveScript one liners to impress your friends](http://livescript.net/blog/livescript-one-liners-to-impress-your-friends.html)。
### [尝试 Elm 语言](http://elm-lang.org/try)
[Elm](http://elm-lang.org/)是一种函数式兼反应式(reactive)语言,适合开发高交互软件,包括[各种游戏](http://elm-lang.org/blog/games-in-elm/part-0/Making-Pong.html)。反应式编程是一种有趣的趋势,我认为一些专门针对此设计的语言值得去研究一下。
### [PogoScript](http://pogoscript.org/)
不幸的是,没有针对这种语言的在线编辑器,但有一个命令行工具[REPL](http://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop)。PogoScript适合做[DSL](http://en.wikipedia.org/wiki/Domain-specific_language)开发,它能允许函数名中有空格。
## 秘教语言
[秘教(Esoteric)语言](http://en.wikipedia.org/wiki/Esoteric_programming_language)基本上是只写不用的语言,有点像[Perl](http://en.wikipedia.org/wiki/Perl),但用来娱乐。
### [尝试Brainfuck](http://trybrainfuck.org/)
[Brainfuck](http://en.wikipedia.org/wiki/Brainfuck)是编程语言中的魔方。我去年用纯JavaScript开发出这个网站,你可以试一下fib的例子。
## 浏览器IDE
因为网上有这么多用来尝试的编程语言在线环境,可以推想,集成开发环境(IDE)也可以放到网上。可以预见以后不需要再等4小时来安装Visual Studio了。
[Cloud 9](https://c9.io/)是一个在线的开发[Node.js](http://nodejs.org/)应用的平台,集成了各种相关程序包。像[Sploder](http://www.sploder.com/)这样的工具可以让你在线开发游戏。
[Try F#](http://www.tryfsharp.org/)网站无可争议的提供了广泛的学习这种语言的功能。云[Tsunami IDE](http://tsunami.io/)也提供了大量的学习开发F#的工具。[CloudSharper](https://twitter.com/CloudSharper/status/370255557724078082/photo/1)也很快会提供一个利用[WebSharper](http://www.websharper.com/)开发F# web应用的IDE。
## 提升级别
一旦用一种新语言完成了一些[简单任务](http://rosettacode.org/wiki/Rosetta_Code),你就可能想着提升到一些稍微大的任务上。我喜欢做[Kata Catalogue](http://codingdojo.org/cgi-bin/wiki.pl?KataCatalogue)里的一些习题,例如[FizzBuzz](http://trelford.com/blog/post/FizzBuzz.aspx),[Game of Life](http://trelford.com/blog/post/140.aspx) 和 [Minesweeper](http://pastebin.com/s9mChuPp)。
有些人喜欢研究[Project Euler](http://projecteuler.net/)里的问题,另外一些人有自己的Hello World应用。比如[Martin Trojer](http://martintrojer.github.io/),这是一个[Scheme解释器](http://martintrojer.github.io/scala/2013/06/06/scheme-in-scala/)。而[Luke Hoban](https://github.com/lukehoban)在开发一个[Ray跟踪器。](http://blogs.msdn.com/b/lukeh/archive/2007/04/03/a-ray-tracer-in-c-3-0.aspx)。
我建议去参加一些本地的研讨学习小组。[伦敦Scala语言交流会](http://www.meetup.com/london-scala/)每月都有一个编程活动,[F#unctional伦敦人](http://www.meetup.com/fsharplondon/)交流会刚好在月中有一个会议,下一次是关于[Machine Learning](http://www.meetup.com/FSharpLondon/events/129198542/)。
在每节后面有问题和习题的编程书籍是很好的学习工具,可以练习你学到的知识,但这样的书很少。最近出版的《[Functional Programming with F#](http://www.cambridge.org/gb/academic/subjects/computer-science/programming-languages-and-applied-logic/functional-programming-using-f)》是一个很优秀的例子,它的每章后面都有问题习题。
也许几个小时你就能熟悉一种语言的基本知识,但熟练掌握至少要几个星期,而精通,那就要至少几个月了。
想写出自己的编程语言吗?Pete Sestoft的《[程序设计语言概念](http://t.cn/z8Nkrfv)》对这个主题提供了很好的介绍。