Browsed by
分类: 编程语言

免费电子书列表

免费电子书列表

在StackOverflow上,有人要打算收集个免费电子书的列表,结果很快就有人分享了一个列表。很不错,我就转过来了。原帖的地址在http://stackoverflow.com/questions/194812/list-of-freely-available-programming-books (注意:有些连接可能会被墙掉)

List of Free Programming books (compiled): Meta-List

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (19 人打了分,平均分: 3.79 )
Loading...
最佳编程语录

最佳编程语录

以前本站发布过《22条经典的编程引言》、《编程引言补充》、《Linus Torvalds 语录》还有《十条不错的编程观点》。今天向大家介绍“最佳编程语录”,条条都是很不错的语录,如同我们的太阳,照亮了我们的方向(所以我们选用了一个红色的图片,希望能够通过五毛们的网络审查)。其中只有一两条在以前本站发布过的文章中出现过。这篇文章的出处在这里,下面是“Neo”和“陈皓”的翻译,我们的翻译水平有限,所以,我们提供了中英文对照,有不当之处,还请各位指正。

A good programmer is someone who looks both ways before crossing a one-way street. — Doug Linder, systems administrator

好的程序员这样一类人,这类人在横穿一条单行道前都要先看一下路两边。– Doug Linder, 系统管理员

A most important, but also most elusive, aspect of any tool is its influence on the habits of those who train themselves in its use. If the tool is a programming language this influence is, whether we like it or not, an influence on our thinking habits. — Edsger Dijkstra, computer scientist

关于工具,一个最重要的,也是最不易察觉的方面是,工具对使用此工具的人的习惯的潜移默化的影响。如果这个工具是一门程序语言,不管我们是否喜欢它,它都会影响我们的思维惯式。 –Edsger Dijkstra, 著名的计算机科学家。

Being abstract is something profoundly different from being vague… The purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise. — Edsger Dijkstra

抽象和模糊完全地不同,抽象的目的并不是把事情变模糊,而去创建一个新的语义层,在那里是绝对精确的描述。 — Edsger Dijkstra

Besides a mathematical inclination, an exceptionally good mastery of one’s native tongue is the most vital asset of a competent programmer. — Edsger Dijkstra

除了数学爱好,对于一个有能力的程序员来说,出色地掌握自己的母语是最宝贵的财富。– Edsger Dijkstra

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (27 人打了分,平均分: 3.78 )
Loading...
五种应该避免的代码注释

五种应该避免的代码注释

在酷壳,有很多文章都提到了代码注释,如:《十条不错的编程观点》、《优质代码的十诫》、《整洁代码的4个提示》、《惹恼程序员的十件事》等等。今天,某国外的程序员在这里列举五种应该避免的程序注释,我觉得比较有道理,但我觉得有少数几个观点也并不绝对。所以,我把原文的这五种应该避免的程序注释罗列在下面,并放上原作者和我的个人观点作为比较。希望对大家有用。

一、自恋型注释

(注:原文为Proud,我觉得“自恋”更好一点)

public class Program
{
    static void Main(string[] args)
    {
        string message = "Hello World!";  // 07/24/2010 Bob
        Console.WriteLine(message); // 07/24/2010 Bob
        message = "I am so proud of this code!"; // 07/24/2010 Bob
        Console.WriteLine(message); // 07/24/2010 Bob
    }
}

原文:这样的程序员对于自己的代码改动非常骄傲和自恋,所以,他觉得需在在这些自己的代码上标上自己的名字。其实,一个版本控制工具(如:CVS或Subversion)可以完整地记录下所有的关于代码的改动的和作者相关的一切信息,只不过不是那么明显罢了。

陈皓:我同意原文的观点。在我的团队里也有这样的事情发生。有段时间我认真思考过这样的事情,是否应该把这样的事情在代码中铲除出去。后来,我觉得,允许这样的行为并不一定是坏事,因为两点:

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (28 人打了分,平均分: 4.14 )
Loading...
HTML5 和 Flash 之争

HTML5 和 Flash 之争

文章来源

二者之间的竞争会演变成为一场“战争”吗?(现在甚至出现了可以把Flash转成Javascript/HTML5的工具)

首先需要弄清楚二者之间最主要的区别,HTML 是一种语言(超文本标记语言 – HyperText Markup Language),而 Flash 是 Adobe(其收购了Macromedia)公司的一个浏览器插件(Plugin)。HTML5 目前还是 W3.org 规范中一个草案,这意味着其还没有最终定案,希望到 2012 年这项工作能够完成。

以下是二者各自的一些特点:

HTML5

这个新的技术更为易学和易用,比较 .FLA 和 .SWF 文件更容易编辑。并且基本上过去所有由 Flash 才能制作的动画效果都能够使用 JS + HTML5 + CSS 3 来完成,不过工作量可能会更大一些,不仅文件尺寸会增大,性能方面也会有影响。

以前为 Web 表单设定风格我们一定需要使用到 JavaScript, 但是 HTML5 中的 contenteditable 属性让我们可以做得更多。一些新的输入类型(Types of Inputs)也被加入到 HTML5 中,如:电子邮件,数字,值范围等等。

用户不仅仅需要一个支持 HTML5 的浏览器,还需要 CCS 3 和新的 JavaScript 引擎的支持。

免费(不包括第三方字体和音频视频等等)

更好地移动设备支持(HTML5 正在被运用于 iPhone,iPod,iPad 和 Android 应用的开发)

拖拽,事实上这不是 HTML5 的一部分,但是在新版本的 GMail 中,从桌面拖拽文件到浏览器能够用 HTML5 很好地实现。对于 Flash 我不知道这是否可以实现?

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (12 人打了分,平均分: 3.50 )
Loading...
计算机编程简史图

计算机编程简史图

这个图片太经典了,本来想翻译的,后来觉得这么经典的图片可能早已被人翻译了,简单的Google一下,果然有人翻译了。那我就把英文版和中文版都转过来吧。我们可以看到,其中很大一部分人都和Unix有着不解之缘(参见《Unix传奇上篇Unix传奇下篇》)

什么也不说了,直接上图(图片比较大,单击图片看大图)


计算机编程简史图(英文版)

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (20 人打了分,平均分: 3.75 )
Loading...
检查素数的正则表达式

检查素数的正则表达式

一般来说,我们会使用正规表达式来做字符串匹配,今天在网上浏览的时候,看到了有人用正则表达式来检查一个数字是否为素数(质数),让我非常感兴趣,这个正则表达式如入所示:

检查素数与否的正则表达式

要使用这个正规则表达式,你需要把自然数转成多个1的字符串,如:2 要写成 “11”, 3 要写成 “111”, 17 要写成“11111111111111111”,这种工作使用一些脚本语言可以轻松的完成。

一开始我对这个表达式持怀疑态度,但仔细研究了一下这个表达式,发现是非常合理的,下面,让我带你来细细剖析一下是这个表达式的工作原理。

首先,我们看到这个表达式中有“|”,也就是说这个表达式可以分成两个部分:/^1?$/ 和 /^(11+?)\1+$/

  • 第一部分:/^1?$/, 这个部分相信不用我多说了,其表示匹配“空串”以及字串中只有一个“1”的字符串。
  • 第二部分:/^(11+?)\1+$/,这个部分是整个表达式的关键部分。其可以分成两个部分,(11+?)\1+$,前半部很简单了,匹配以“11”开头的并重复0或n个1的字符串,后面的部分意思是把前半部分作为一个字串去匹配还剩下的字符串1次或多次(这句话的意思是——剩余的字串的1的个数要是前面字串1个数的整数倍)。

可见这个正规则表达式是取非素数,要得到素数还得要对整个表达式求反。通过上面的分析,我们知道,第二部分是最重要的,对于第二部分,举几个例子,

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (44 人打了分,平均分: 4.43 )
Loading...
在Javascript里写Python

在Javascript里写Python

以前,本站介绍过去一种写HTML和CSS的新方法,以一种杂交式的代码,昨天给大家介绍了.NET代码和Python及Ruby代码的互相转换工具,但是这个世界可能比我们想像的还疯狂。IronPython 是一个在.NET平台上运行Python的东西,就像那些在JVM上运行其它语言的东东一样。当然,IronPython最邪恶的事情并不是在.NET上运行Python,而是在Javascript里写Python的语法。这个畸形混血儿的网址在这里(请注意翻墙)。

使用这个玩意很简单,下面,让我们看看这个混血儿长啥样?

首先,你需要链接一个js文件:

<script src="http://gestalt.ironpython.net/dlr-latest.js" type="text/javascript"></script>

然后,让我们看看如何写一个按钮事件:

<input id="button" type="button" value="Say, Hello!" />
<script type="text/python">
  def button_onclick(s, e):
      window.Alert("Hello from Python!")
  document.button.events.onclick += button_onclick
</script>

你对此事怎么看?欢迎留下你的看法。

好烂啊有点差凑合看看还不错很精彩 (10 人打了分,平均分: 3.20 )
Loading...
.NET代码转换器

.NET代码转换器

想把.NET的代码(C#和VB.NET)互转吗?或是转成Python或Ruby吗?在 http://www.developerfusion.com/ 站点上有这样的在线工具。点击下面的链接你可以使用这些工具。当然,这些工具也有很多BUG

老实说,我并不太清楚这些工具有什么用,看似很useless。难道是为了用来学习新的语言?就像Google的Translator的一样?就像一个并不懂中文的老外可以用Google Translator在其Facebook中整点中文耍耍酷一样,难道说,一个C#的程序员可以用这样的工具和一个Python的程序员也耍耍酷?各位看客觉得这个东西有意义吗?

不过,有一点我可以确定,如果有工具把Unix/Linux下的C源码和Windows下的C源码相互自动转换,估计这会是相当划时代的,因为,这应该会让那些什么Wine或Cygwin之类的东西都统统会成为历史了。不过,这样的东西在实现上又将会有多么大的难度(OS系统API的相互转换),这个事会有可行性吗?

好烂啊有点差凑合看看还不错很精彩 (12 人打了分,平均分: 3.58 )
Loading...
五大基于JVM的脚本语言

五大基于JVM的脚本语言

还记得以前本站的一篇文章《如何在Google App Engine上运行PHP》吗,其实那是借用 Quercus, 一个 100% 的用Java 实现的一个 PHP 引擎。今天,这样的东西太多了,能运行在Java的虚拟机JVM上的程序意味着有天然的跨平台性,现在JVM并不单单只能运行Java程序,在JVM上出现了若干使用Java虚拟机运行的脚本程序,比如什么PHP, Python, Ruby等等,这里有一篇文章评论了在JVM上的可以运行的排名前五脚本语言。他们分别是:

  1. Groovy。构建在强大的Java语言之上 并添加了从Python,Ruby和Smalltalk等语言中学到的诸多特征,为Java开发者提供了现代最流行的编程语言特性,而且学习成本很低(几乎为零),在开发Web,GUI,数据库或控制台程序时, 通过减少框架性代码 大大提高了开发者的效率。支持单元测试和模拟(对象),可以简化测试。无缝集成 所有已经存在的 Java对象和类库。直接编译成Java字节码,这样可以在任何使用Java的地方 使用Groovy。
  2. JRuby。一个纯Java实现的Ruby解释器。通过JRuby,你可以在JVM上直接运行Ruby程序,调用Java的类库。很多Java编写的Ruby IDE都是使用JRuby来解释语法的。
  3. Scala。一种多范式的编程语言,设计意图是要整合面向对象编程和函数式编程的各种特性。Scala编程语言近来抓住了很多开发者的眼球。它看起来像是一种纯粹的面向对象编程语言,而又无缝地结合了命令式和函数式的编程风格。Scala的名称表明,它还是一种高度可伸缩的语言。Scala的设计始终贯穿着一个理念:创造一种更好地支持组件的语言。
  4. Fantom 。Fantom 前身是 (Fan) 是一个基于 Java 和 .NET 平台的编程脚本引擎,用来在运行时产生 JVM 和 .NET 平台的字节码,该语言是面向对象的,跟 Groovy 和 JRuby 有点类似,可通过特定的接口来集成 Java 的类库。
  5. Jython。Jython由于继承了Java和Python二者的特性而显得很独特。其是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个Python语言在Java中的完全实现。Jython也有很多从CPython中继承的模块库。最有趣的事情是Jython不像CPython或其他任何高级语言,它提供了对其实现语言的一切存取。所以Jython不仅给你提供了Python的库,同时也提供了所有的Java类。这使其有一个巨大的资源库。

下面是一张表格比较了这五大JVM脚本语言:

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (15 人打了分,平均分: 3.33 )
Loading...
五个编程语言设计的失误

五个编程语言设计的失误

在近几年来,编程语言的设计正在经历着类似于“文艺复兴”的过程,这么说主要是基于下面两个事实:1)多核技术推动着PC消费者更多的关注并行程序。2)动态语言的性能越来越好,其性期已经可以足够用来实现互联网服务,并且它们正在走出“脚本语言”阴影。

这篇文章试图收集最重要的编程语言的设计错误,以便让那些程序语言设计者们在设计新型的编程语言时避免。我避免了一些纠缠不清的有好有坏的问题,如:动态类型或是静态类型。我也省略了那些看起来并不严重,很容易被修改的错误。例如,加入“参量”(Parametric Type),这在Java中已经有了。Sun在发布Java 1.0版后的第八年才加入了这一功能。还有一个最近的例子是 Google Go Language Design FAQ 中说到的:: “Generics may well be added at some point. We don’t feel an urgency for them, although we understand some programmers do.”

0. Null 指针

几乎在所有的主流编程语言中,对一个对像的引用可能会是一个空指针,这个错误会引发运行时错误。 C.A.R. Hoare 最近声明向这一“发明”负责,尽管如此,其它许多的设计者们都应该对这样的设计受到批评。下面是 C.A.R Hoare 的“忏悔”:

I call it my billion-dollar mistake. It was the invention of the null reference in 1965. […] More recent programming languages like Spec# have introduced declarations for non-null references. This is the solution, which I rejected in 1965. – C.A.R. Hoare

我把它叫做“亿万美元错误”。这个空指针的发明创造来自1965年。…… 现在的编程语言引入了“非空引用”的声明规格。这个方案被我在1965年给拒绝了。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (18 人打了分,平均分: 3.17 )
Loading...