不要害怕人工智能

原文地址(source):http://time.com/3641921/dont-fear-artificial-intelligence/

Kurzweil写了五本人工智能(Artificial Intelligence,简称AI)方面的书,有一本是纽约时报的畅销书《How to Create a Mind》。

两位伟大的思想家看到了AI的危险。下面谈谈怎样让AI安全。

著名物理学家史蒂芬·霍金【注1】最近发出了警告,如果人工智能超过了人类智能,就对人类文明的存在造成了威胁。数字货币、私人太空飞行和电子汽车的先驱Elon Musk,也表示了类似的担忧。

如果AI成为了存在的威胁,那么它不会是第一个。在我孩提时代的、1950年人防演习期间,我坐在桌子底下。从那以后,我们就遇到了可比较的恐惧,比如生物恐怖主义者创造了一种人类无法抵抗的新病毒。火能够温暖我们、也能烧掉我们的村庄,技术总是一把双刃剑。

典型的反乌托邦未来主义的电影,总是有一到两个主人公或团体在为了控制人工智能而战。AI正被集成到当今世界。AI不是一只手或两只手;它是10亿或20亿只手。持有智能手机的非洲孩子,比起20年前的美国总统,已经能够更加智能地访问知识了。随着AI更加聪明,它的用途仍然在增长。实际上,每个人的智力在近10年内已经被AI放大了不少。

我们在人群中仍然有冲突,每个群体都被AI放大了,这已有先例。但是,暴力呈现着深远的、指数级的减少,我们可以从中感到安慰,正如Steven Pinker的2011年的书《The Better Angels of...

我的100,000小时

原文地址(source):http://www.ideabyte.net/hours.html

我大概做了11年编程,从我18岁那年开始。我真的不知道为什么要编程,我只想能够编写我自己的软件,我能够记起来的应该是编写我自己的游戏。起步是艰难的,总的来说,编程有太多的信息、工具和很多技术,我根本没有任何头绪。

我开始阅读从网上找到的一些教程,随后我找到一些可视化游戏编程工具,然后我设法开发自己的游戏。或许你意料到了,这是让人讨厌的、太过容易和丑陋的。我也不高兴,因为我明白,我正在使用图形工具完成工作、而我没有学到任何真正的编程。不管怎么说,我被迷住了。

接下来我开始学习C,因为每个人都说“它是专业人士使用的编程语言”。它很难,真的、真的很难。我很快就沮丧了,基本上在差不多长达六个月的时间里停止了编程。

然后我在一本芬兰的计算机杂志上看到,有一种专门编写游戏的编程语言。我开始研究它,它易于上手,我利用周末设法做了一个太空射击的游戏。然后用同样的语言又做了一个项目。然而,我内心仍然说“它不是非常有用处,我要学更难的语言”。我带着极大的热忱再次学习C,我努力学了基础知识,但是我又沮丧了,因为我不能很好地理解指针、或其背后的基本概念。你知道吗,我停止编程了,这一停就是1年。

随后发生了改变我命运的事情。我听说有一种称之为“Linux”的内核,最初由一个芬兰的家伙编写。我开始阅读,开始测试。最终,经历了一些麻烦和大量阅读之后,我设法安装到了我的电脑上。非常酷,它有些与众不同,我觉得我一直都是最牛叉的大师。好吧……

接下来的6个月,我甚至没有考虑过编程,我只是在把玩我能找到的GNU/Linux不同发型版本。我用了Mandrake、Red Hat(实际上,我认为Red Hat是我曾经用过的第一个发型版本),大部分时间用SUSE。我听说,有一些难以使用和安装的发型版本,他们是Slackware和Debian。我设法安装了Slackware(我一直就无法让Debian在我的机器上正常运行),太棒了。我真正开始学习背后的操作系统到底是怎样运行的。我编译了自己的内核、资源库和软件,所有这些东西都是相当有用的。我没有做或学习任何编程,但是我学到了工具是怎样运行的,我学到了连接器、编译器、makefiles等等。

后来我开始阅读自由软件相关的东西,我被迷住了。Richard Stallman【注1】在很多方面是我的人格化的神。他说的或写的每样东西,我不是一概认同,但是不管怎么说(现在还是不全部认同),我还是花了大量时间阅读了自由软件方面的文章,相应的社区等。然后我就开始想着再次学习编程了。

这次我选择的编程语言是Python。Python学习起来相当容易,但它是非常高级的语言。我学得非常好,也写了一些代码,甚至给我经常使用的音乐播放器提交了一个补丁。总的来说,我在GNU/Linux上用Python写了大概8、9个月的代码。这是我真正学习编程的开始。我曾写过的、第一个还算真正大型的程序是IRC机器人,用Python写的。它可能有很多安全漏洞,不过我还是引以为豪,甚至有些自大。

不知道什么原因,我回忆不起来我再次学习Windows了。我学习了C#、VB.NET,还有一些C++。我写过自由软件的程序,人们实际上在用着,不错。

今天,我可以用C、C++、C#、Python以及PHP等更多的语言编写满足生产环境质量的代码了。尽管如此,对于我用C编写的项目,能够做一些底层编程,我是非常有兴趣的。我一直在学习新技术;密码学、编译器以及关于图像编辑算法的所有技术,都合我意。

在此过程中,我一直在旅行、写生产环境上的代码、会见优秀的人。也就是说,我找到了很多乐趣,真是春风得意。然而,学无止境。每天都有要学的新东西,它让我坚持目前我在做的事情。

为什么要写本文?为了每个想学习编程的人。这是我的故事和经历,我希望你能从中有所收获。对我而言,它纯粹是一种激情,我无法用语言来形容,但是它伴随着我一直走到今天。

如果我能给程序员新手分享一些东西的话,那就是:学习、并使用GNU/Linux,学习Python、大量阅读。不要放弃。

相关阅读:《

歌颂程序维护人员

原文地址(source):http://visualstudiomagazine.com/articles/2014/12/01/in-praise-of-the-maintenance-programmer.aspx

当然,构建新应用程序的开发人员是非常优秀的人群。但是,编程世界里真正的英雄却是维护和扩展现有应用程序的开发人员们。

追溯到1984年,我刚刚毕业,准备受聘于开发人员的职位。我被一家跨国公司雇佣了……很快被安排到了现有应用程序的维护小组。在当时,这个决定貌似合情合理。现在回顾起来,真的很蠢。实际上,一个更好的描述应该是“疯狂至极”。

维护比新的开发工作要更加艰难。把我这种刚毕业的、“乳臭未干”的开发人员放在维护现有应用程序的工作上,就像让刚毕业的医学院学生为总统做脑部手术—有理智的人都不会这样干的。我当时维护的现有应用程序在支撑着公司;另一方面,在开发的应用程序与公司运作关系不大(尽管它们对公司的未来有一定影响)。

开发中的系统与生产环境上的系统的区别,取决于一个关键特征:如果开发中的系统崩溃了,没人会在意的。另一方面,如果你搞砸了生产环境上的系统,很多人都会来找你,而他们以前都懒得留意到你(我们不想问,我是怎样知道的)。

我现在明白了把我放在维护位置上的、逻辑上的真实原因了:公司IT部门需要很多“手和脚”。毕竟,IT部门75%的时间花在了维护上,因此推测出,他们在维护上需要的人数是开发所需人数的三倍。但是,把几乎没有实际工作经验的人放在需要工作经验的应用程序上,是行不通的。

“手和脚”的解释也解释不了 为什么新开发项目中的开发人员被普遍地视作英雄。退回到那时候,忙于新项目的人们相较于程序维护人员,有着更高的地位……我敢打赌这是真的。根据“提供的价值”,程序维护人员比开发程序员有着更多的价值。程序维护人员基于现有代码库开发,结果,与任何新开发小组可能管理的功能相比,程序维护人员用较少成本交付了更多功能。

程序维护人员的技能

当我最后转向新的开发工作后,实际上我丢掉了一些技能,而这些技能对于程序维护人员的工作是必备的。做维护工作,我差不多是个程序员,我还是历史学家和侦探。

例如,当我做维护时,收到了被分配的问题,去追踪一个bug,它偶尔引起我们的程序崩溃,随之留下一些脏数据。这个bug首次出现在4年前(比我加入公司还要早得多)。这个bug潜伏了一段时间,但是上周它再次出现了。

因为我是程序员,我扫了一眼代码,但是,由于我是第三或第四个被分配到这个问题(我还缺乏经验)的人,貌似我不太可能发现 前任开发人员都没有发现的问题。如果它不是代码,我推测它一定是数据……这让我根据bug报告的时间进行了划分。最终的曲线比较有意思:刚开始bug出现得相当频繁(3-4次/天),到了如今,频率逐渐减少,这个bug每个月只出现几次。

根据这些证据,我得出了结论,在bug首次出现之前,一定发生了什么,而该bug导致数据库埋下了脏数据。当应用程序处理到脏数据时,程序就崩溃了,然后有人介入并修复数据。当我向组内其他人员(他们比我在公司的时间要长得多)演示这个分析时,他们立即定位到了问题:在bug首次出现之前、已经被运行的一个数据转换程序。有了这个信息,我们能够找到其余的脏数据,并修复该bug。

程序维护人员一直是这样做的:局部侦探、局部历史学家,偶尔地扮演成开发人员。他们也是软件考古学家(深挖打了拙劣补丁的代码层)和精神病专家(搞清楚比你先来的开发人员的动机)。

当我最终做新开发工作时,我很开心得到“提拔”,因为在维护小组待过之后,目前这份工作是如此地轻松。或许这是你调入开发的真正理由:随着年龄的增长,你开始失去优势,你没有被下放;相反,你被调到了不能做任何有害事情的工作上——新的开发工作。