Joel on Software

Choosing a language

选择一门语言

by Joel Spolsky Sunday, May 05,2002

Why do developerschoose one programming language over another for a given task?

为什么对一项给定的任务,开发者会偏向于选择某一门语言?我啥事也干不了。

Sometimes I choose raw C when I needblazing speed.

有时候当我需要飞速的时候我会选择原始C语言。

When I want something that will run onWindows with as small a distribution as possible, I often choose C++ with MFC staticallylinked.

当我要写个东西运行在Windows而且希望发布包越小越好的时候,我通常会选择静态链接的MFC C++。

When we need a GUI that will runon Mac, Windows, and Linux, a common choice is Java (although the GUI willnot be perfect, it will work.)

当我们需要一个能够在Mac,Windows和Linux上面运行的GUI界面程序的时候,一个通常的选择就是Java(虽然GUI界面不完美,但至少是能工作的)

For rapid GUI development and reallysmooth UIs, I like Visual Basic, but I know that I'm going to have to pay theprice in the size of the distributable and the fact that I'll be locked intoWindows.

对于快速的GUI开发和非常平滑的界面开发,我喜欢Visual Basic,但我知道我要付出的代价是发布包的大小和我会被框定在Windows平台上。

For a command-line tool that must run onany UNIX machine and doesn't need to be fast, perl is a good choice.

对于必须运行在UNIX机器上的命令行工具,而且不需要非常快的话,perl是个不错的选择。

If you have to run inside a web browser,JavaScript is the really the only choice. In a SQL stored procedure, youusually get to choose between one vendor's proprietary SQL derivative or gohome.

如果必须要运行在web浏览器里,JavaScript实际上是唯一的选择了。在一个SQL写成的存储过程里,你通常要选择一个供应商所有的SQL方言或者 放弃。

What's the Point?重点是什么?

But I hardly ever choose a language basedon syntax. Yeah, I prefer the {}; languages (C/C++/C#/Java). And I have lots ofopinions as to what makes a "good" syntax. But I wouldn't accept a 20MB runtime just to get semicolons.

但我几乎不会因为语法选择一门语言。是的,我更喜欢{};语言(C/C++/C#/Java)。而且对于什么是“好”的语法我有很多观点。但我不会为了要分号而接受一个20MB的运行时库。

Which makes me wonder a bit about .NET'scross-language strategy. The idea is, choose any language you want, there arezillions, and they all work the same way.

这让我对.NET的跨平台策略感到有点惊奇。想法是,选择任何你想要的语言,已经有不计其数的语言,他们的工作方式都是相同的。

VB.NET and C#.NET are virtually identicalexcept for tiny syntactic differences. And other languages that want to be partof the .NET world need to support at least a core set of features and types orthey won't be able to Play Well With Others. But how do I develop a UNIXcommand line utility in .NET? How do I develop a tiny Windows EXE in less than16K in .NET?

VB.NET和C#.NET除了略微的语法不同之外几乎是一样的。并且其他的语言如果想要成为.NET世界里的一员的话,就必须支持一堆核心的特性和类型,否则他们就无法和.NET世界里的其他成员很好共存。但是我要如何才能使用.NET创建一个UNIX命令行呢?我如何才能使用.NET创建一个小于16K的Windows可执行程序。

It seems like .NET gives us a"choice" of languages precisely where we couldn't care less about it-- in the syntax.

看起来.NET似乎给了我们一种语言选择,在语法上要操心更多。

[翻译Joel On Software]选择一门语言/Choosing a language的更多相关文章

  1. 如何设计一门语言(十)——正则表达式与领域特定语言(DSL)

    几个月前就一直有博友关心DSL的问题,于是我想一想,我在gac.codeplex.com里面也创建了一些DSL,于是今天就来说一说这个事情. 创建DSL恐怕是很多人第一次设计一门语言的经历,很少有人一 ...

  2. 【Go语言学习笔记】为什么要选择Go语言

    一门语言的兴起一定有他的原因,所谓天下苦Java久矣,Go的到来可以说很多后端开发的福音,尤其是在微服务.分布式这么火的今天,那么,他的优势到底是什么呢? 首先,我们需要现有后端语言的优势痛点: 其实 ...

  3. 如何设计一门语言(八)——异步编程和CPS变换

    关于这个话题,其实在(六)里面已经讨论了一半了.学过Haskell的都知道,这个世界上很多东西都可以用monad和comonad来把一些复杂的代码给抽象成简单的.一看就懂的形式.他们的区别,就像用js ...

  4. 早日选择一门自己喜欢的,然后瞄准目标,不达目的誓不罢休。像文章的作者一样成为一名成功的IT人士。

    hawk的奋斗历程. 来自:LinuxForum  :http://www3.linuxforum.net/ 原址:http://www.linuxforum.net/forum/gshowflat. ...

  5. 选择Go语言的12个理由

    编者按:多核化和集群化是互联网时代的典型特征,那语言需要哪些特性来应对这些特征呢?多数语言在语法层面并不直接支持协程,而通过库的方式支持的协程的功能也并不完整,比如仅仅提供协程的创建.销毁与切换等能力 ...

  6. InnoSetup 安装选择不同语言,修改软件配置参数,达到安装语言就是软件语言效果

    需求 在软件安装时,选择中英文安装界面,选择的中英文界面就是对应软件内界面语言. 在软件安装时,选择中文界面,打开软件就是中文界面. 在软件安装时,选择英文界面,打开软件就是英文界面. 实际上,就是在 ...

  7. Windows 7 SP1 多国语言包(MUI language packs)官方下载

      为了装一款 Gal Game (为毛不是装 H-Game?),使用 APP 还是太辛苦了,反正相信童鞋们也都用上“瘟妻”了嘛,装个日文的语言包基本上就可以解决问题了.大家都知道只有旗舰版(Wind ...

  8. Oracle PL/SQL 语言(Procedural Language/SQL)

    Oracle PL/SQL 语言(Procedural Language/SQL)是结合了结构化查询与 Oracle 自身过程控制为一体的强大语言,PL/SQL 不但支持更多的数据类型,拥有自身的变量 ...

  9. 着色语言(Shader Language)

    摘抄"GPU Programming And Cg Language Primer 1rd Edition" 中文名"GPU编程与CG语言之阳春白雪下里巴人" ...

随机推荐

  1. urllib.parse.urldefrag(url)的解释

    引自https://www.cnblogs.com/ublue/articles/4471210.html 1.URL hash(片段标识符) 任一带#的URL称为片段URL(通常称为URL hash ...

  2. IntelliJ IDEA SVN

    第一步:下载svn的客户端,通俗一点来说就是小乌龟啦!去电脑管理的软件管理里面可以直接下载,方便迅速 下载之后直接安装就好了,但是要注意这里的这个文件也要安装上,默认是不安装的,如果不安装,svn中的 ...

  3. HSTS详解

    1. 缘起:启用HTTPS也不够安全 有不少网站只通过HTTPS对外提供服务,但用户在访问某个网站的时候,在浏览器里却往往直接输入网站域名(例如www.example.com),而不是输入完整的URL ...

  4. "诗词大闯关"调查过程心得体会

    为了充分满足客户需求来更好地完成我们的项目--"诗词大闯关",我们根据项目内容,制定了调查表.我们小组以网上问卷调查的形式制作了调查表,并收集了122份有效的问卷调查表. 通过这次 ...

  5. IE6 PNG不透明问题 (只解决img标签的图片)

    <script type='text/javascript' src="/script/ie6.pngfix.js"></script> 会让一些posit ...

  6. tf.unstack\tf.unstack

    tf.unstack 原型: unstack( value, num=None, axis=0, name='unstack' ) 官方解释:https://tensorflow.google.cn/ ...

  7. Animation.wrapMode循环模式

    WrapMode.Default:从动画剪辑中读取循环模式(默认是Once). WrapMode.Once:当时间播放到末尾的时候停止动画的播放. WrapMode.Loop:当时间播放到末尾的时候重 ...

  8. GridView上同时定义了 DataSource 和 DataSourceId

    VS平台下ASP.NET网站的建立,我们常常要跟数据库打交道,获取数据库的信息,通过GridView控件进行显示,需要为GridView指定 DataSourceId或者DataSource,切忌不可 ...

  9. boost基础环境搭建

    因为现在手上的老的基类库经常出现丢包,以及从ServiceAClient 发送消息到 ServiceBServer时出现消息失败的情况,以及现有的莫名其妙的内存泄露的问题,以及目前还是c++0x,准确 ...

  10. BZOJ1106[POI2007]立方体大作战tet - 树状数组

    描述 一个叫做立方体大作战的游戏风靡整个Byteotia.这个游戏的规则是相当复杂的,所以我们只介绍他的简单规则:给定玩家一个有2n个元素的栈,元素一个叠一个地放置.这些元素拥有n个不同的编号,每个编 ...