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. logging的使用

    [logging的使用] import logging # 创建一个logger logger = logging.getLogger('mylogger') logger.setLevel(logg ...

  2. 安装Android模拟器

    说明:可以直接通过Android SDK目录下的SDK Manager.exe进行安装,我这里写的是通过下载各种文件进行安装的方法,没有通过SDK Manager.exe进行下载安装 一.下载以下内容 ...

  3. css3文字截断

    width:200px; height:14px; overflow:hidden; white-space:nowrap; text-overflow:ellipsis; text-overflow ...

  4. 慕课网access_token的获取(下)

    接口调用返回的结果是两个字段:access_token和expires_in,所以需要创建一个实体类封装这两个字段 运行测试类WeixinTest.java控制台打印出错误信息 重置开发者密钥试试看 ...

  5. 39. recover rotated sorted array恢复旋转排序数组

    一句话思路:从左边开始的三步翻转法 一刷报错: 不理解start.end是位置随机定义的.i,j是临时变量,为start,end服务 nums.size()区别于nums.length:用于范形变量. ...

  6. 关于jni调用报UnsatisfiedLinkError的可能

    一.说明 最近在做一个项目,需要使用java去调本地动态连接库,之前做测试的时候直接用pojo进行测试,是能够正常调用的.后面项目需要将接口封装为REST api,所以在spring boot上面开发 ...

  7. IBM MQ + WebSphere + Spring JMS配置方法

    IBM MQ + WebSphere + Spring JMS配置方法  首先要在WAS里面配置IBM MQ作为JMS消息的提供者,在WAS管理控制台: Resources->JMS Provi ...

  8. Spring框架的事务管理的分类

    1. Spring的事务管理的分类 1. Spring的编程式事务管理(不推荐使用) * 通过手动编写代码的方式完成事务的管理(不推荐) 2. Spring的声明式事务管理(底层采用AOP的技术) * ...

  9. jquery:为动态加载的元素添加点击事件

    jquery:为动态加载的元素添加点击事件 最近在做项目的时候遇到了这样一个问题,给用ajax动态加载出来的内容添加点击事件,但是怎么都触发不了,经过查询试验总结出正确的写法 在jquery1.7之前 ...

  10. BZOJ3170: [Tjoi2013]松鼠聚会 - 暴力

    描述 有N个小松鼠,它们的家用一个点x,y表示,两个点的距离定义为:点(x,y)和它周围的8个点即上下左右四个点和对角的四个点,距离为1.现在N个松鼠要走到一个松鼠家去,求走过的最短距离. 题解 简直 ...