草庐IT

【历史上的今天】3 月 13 日:Windows NT 之父出生;首届无人车顶级赛事;微软上市

历史上的今天 2023-04-21 原文

整理 | 王启隆

透过「历史上的今天」,从过去看未来,从现在亦可以改变未来。

今天是 2023 年 3 月 13 日,在 1995 年的今天,Perl 5.001 发布;Perl 是一种功能丰富的计算机程序语言,最初是为文本处理而开发的,现在用于各种任务,包括系统管理,Web 开发,网络编程,GUI 开发等。这次更新也有着里程碑意义,因为在 5.001 版本之前, 除非格式在词法变量的范围内声明,否则词法变量在格式中不可见。回顾计算机历史上的 3 月 13 日,这一天还发生过哪些关键事件呢?

1942 年 3 月 13 日:Windows NT 之父 David Cutler 出生

1942 年 3 月 13 日,NT 项目的组建人、微软传奇程序员大卫·卡特勒(David N. Cutler)出生;他开发了几种计算机操作系统,包括 Microsoft 的 Windows NT、Digital Equipment Corporation 的 RSX-11M、VAXELN 还有 VMS。比尔·盖茨对卡特勒敬畏三分。卡特勒严厉冷酷,视懒散、困惑、没有竞争力为敌人,不但是一位传奇程序员,更是一位伟大的项目管理者。

Windows NT 历时之长、耗资之巨、人员之多,可以说是对软件工程一个史无前例的诠释。Windows NT 以及以后的 Windows 版本几乎统一了个人计算机平台,为计算机和计算机软件发展作出了无法估量的贡献。

图源:维基百科

卡特勒出生在密歇根州的兰辛,在密歇根州的德威特长大。1965 年从密歇根奥利维特学院毕业后,他前往杜邦公司工作。他的工作需要电脑建模,到 IBM 开办的一所学校学习怎样给 IBM 的电脑编程序。于是卡特勒终于找到了自己的兴趣,他跳槽到 DEC 公司,为 DEC 生产的计算机编写软件。在 DEC 组建一个全新的计算机系列 Prism 之后,卡特勒的项目被 DEC 公司取消,默默离开了公司,而这个夭折的项目也成为了后来 NT 的雏形。

卡特勒一生蔑视 Unix,他看不起 Unix 背后的技术委员会,而这一点和比尔·盖茨可谓是一拍即合。1988 年,盖茨见缝插针,竭力劝说卡特勒加入微软。卡特勒不仅欣然同意,还带走了许多与他一同开发 VMS 和 Mica 的程序员。进入微软之后,卡特勒直接授权领导一个工程小组,负责设计一种能提供文件服务、打印服务和应用服务的对称多处理操作系统,起名为 Windows New Technology(NT)。如今大部分用过的 Windows 操作系统,其内核便源自 Windows NT。

经过近 4 年的开发工作,在 1993 年 6 月发布的第一版 Windows NT 3.1,已经具备了现代操作系统的雏形——抢先式多任务、虚拟内存、对称多处理器、图形界面、C2 安全级、坚固而稳定的内核、内置网络支持、完全的 32 位代码等。而 1994 年推出的 Windows NT 3.51 和 1996 年推出的 Windows NT 4.0,在性能上有了更进一步提高;NT4.0 甚至提供了当时最先进的 Windows 95 风格界面。卡特勒一生拥有至少 20 项专利,并且是华盛顿大学计算机科学系的附属教员;除了 Windows NT,他还参与了 Xbox One 游戏机的软件优化团队,始终奋战在微软的开发第一线。

资料来源:维基百科、百度百科

1986 年 3 月 13 日:微软上市

图源:维基百科

1986 年 3 月 13 日,微软成立近十一年后,开始在纳斯达克证券交易所交易股票。最初的股价定为每股 28 美元,一天之内筹集了近 6100 万美元。如果一个人在 1986 年 3 月 13 日以 21 美元的价格购买了股票,那么截至 2012 年,他的投资价值能达到约 4000 美元。微软这家科技巨头,在 1980 年代中期以 MS-DOS 统治个人计算机操作系统市场,随后在大卫·卡特勒的加盟后成就了 Microsoft Windows;随着这次上市,微软员工中直接诞生了 3 位亿万富翁和大约 12000 名百万富翁。

自 1990 年代以来,微软从局限于操作系统市场变得日益多元化,取得了许多企业收购,其中最大的一笔交易是 2016 年 12 月以 262 亿美元收购 LinkedIn ,其次是 2011 年 5 月以 85 亿美元收购 Skype Technologies。但是,随着这次上市之后,微软迎来了和 IBM 的合作,美国联邦贸易委员会因此审查了微软可能存在的勾结,导致着微软在接下来十多年里陷入了无休止的反垄断战争之中。

资料来源:维基百科、百度百科

2004 年 3 月 13 日:首届无人车顶级赛事举办

2004 年 3 月 13 日,美国国防部高级研究计划局(DARPA)组织了首届无人车挑战赛 DARPA Grand Challenge,挑战目标是:让车辆自动驾驶穿越 142 英里的沙漠。参赛队伍包括领域内顶尖高校、工程师、程序员等,可没有一个队伍完成比赛;卡内基梅隆大学的红队用一辆改装的悍马 Sandstorm 行驶了最远的距离,完成了 11.78 公里(7.32 英里)的路线,然后在转弯后被挂在岩石上。虽然未能成功颁奖,但这次赛事大大促进了自动驾驶的快速发展,可谓自动驾驶行业的里程碑事件。

图源:维基百科

第二次 DARPA Grand Challenge 计划在 2005 年举行。在 2005 年秋天的第二届挑战赛上,就有 5 辆汽车完成了比赛,其中斯坦福大学的 Stanley 获得了第一名。在这次比赛中,车辆需要通过三条狭窄的隧道,并且完成 100 多个左右急转弯;比赛的终点是啤酒瓶山口,这是美国山区的一道蜿蜒山口,一边是陡峭的悬崖,另一边则是一个岩壁。斯坦福大学 Stanley 项目的负责人塞巴斯蒂安·特龙后来创立了谷歌无人驾驶团队和 Google X,特龙还是 Kitty Hawk 公司 CEO、Udacity 联合创始人。

从日本、德国、意大利、欧盟、美国等国家的陆续研究开始,全自动驾驶汽车已经成为国际社会多年来的追求。DARPA 从 1966 年开始资助斯坦福研究所的 Shakey 机器人项目,开发出了第一个完全自主的机器人。作为 1984 年开始的战略计算计划的一部分,DARPA 还开发了第一辆能够在道路上和非道路上行驶的自主地面车辆,也促成了 DARPA Grand Challenge 赛事的诞生。从第三届比赛,也就是 2007 年的城市挑战赛开始,第一名、第二名和第三名已经能分别获得 200 万美元、100 万美元和 50 万美元奖金;比赛向世界各地的团队和组织开放,其影响力也越来越大,最终载入了自动驾驶领域的史册。

以史为镜,可以知兴替。计算机科学发展至今,有许多至关重要的事件、人物。在《新程序员:我们的技术时代,我们的程序人生》中,来自四十余位技术人跨越半个世纪,用代码敲出一个个真实的程序人生故事!

扫描或点击《新程序员:我们的技术时代,我们的程序人生》订阅!

有关【历史上的今天】3 月 13 日:Windows NT 之父出生;首届无人车顶级赛事;微软上市的更多相关文章

  1. ruby-on-rails - date_field_tag,如何设置默认日期? [ rails 上的 ruby ] - 2

    我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问

  2. ruby-on-rails - openshift 上的 rails 控制台 - 2

    我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新ruby​​gems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems

  3. ruby-on-rails - 相关表上的范围为 "WHERE ... LIKE" - 2

    我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que

  4. ruby - 安装libv8(3.11.8.13)出错,Bundler无法继续 - 2

    运行bundleinstall后出现此错误:Gem::Package::FormatError:nometadatafoundin/Users/jeanosorio/.rvm/gems/ruby-1.9.3-p286/cache/libv8-3.11.8.13-x86_64-darwin-12.gemAnerroroccurredwhileinstallinglibv8(3.11.8.13),andBundlercannotcontinue.Makesurethat`geminstalllibv8-v'3.11.8.13'`succeedsbeforebundling.我试试gemin

  5. ruby-on-rails - Ruby - 如何从 ruby​​ 上的 .pfx 文件中提取公钥、rsa 私钥和 CA key - 2

    我有一个.pfx格式的证书,我需要使用ruby​​提取公共(public)、私有(private)和CA证书。使用shell我可以这样做:#ExtractPublicKey(askforpassword)opensslpkcs12-infile.pfx-outfile_public.pem-clcerts-nokeys#ExtractCertificateAuthorityKey(askforpassword)opensslpkcs12-infile.pfx-outfile_ca.pem-cacerts-nokeys#ExtractPrivateKey(askforpassword)o

  6. 带有 attr_accessor 的类上的 Ruby instance_eval - 2

    我了解instance_eval和class_eval之间的基本区别。我在玩弄时发现的是一些涉及attr_accessor的奇怪东西。这是一个例子:A=Class.newA.class_eval{attr_accessor:x}a=A.newa.x="x"a.x=>"x"#...expectedA.instance_eval{attr_accessor:y}A.y="y"=>NoMethodError:undefinedmethod`y='forA:Classa.y="y"=>"y"#WHATTT?这是怎么回事:instance_eval没有访问我们的A类(对象)然后它实际上将它添加到

  7. ruby-on-rails - rails 上的 ruby : radio buttons for collection select - 2

    我有一个集合选择:此方法的单选按钮是什么?谢谢 最佳答案 Rails3中没有这样的助手。在Rails4中,它是collection_radio_buttons. 关于ruby-on-rails-rails上的ruby:radiobuttonsforcollectionselect,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/18525986/

  8. ruby-on-rails - gem install rmagick -v 2.13.1 错误 Failed to build gem native extension on Mac OS 10.9.1 - 2

    我已经通过提供MagickWand.h的路径尝试了一切,我安装了命令工具。谁能帮帮我?$geminstallrmagick-v2.13.1Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingrmagick:ERROR:Failedtobuildgemnativeextension./Users/ghazanfarali/.rvm/rubies/ruby-1.8.7-p357/bin/rubyextconf.rbcheckingforRubyversion>=1.8.5...yescheckingfor/

  9. ruby - 将命令行上的变量传递给 Cucumber 测试 - 2

    我正在尝试将cucumber项目的用户名和密码置于版本控制之外。有没有办法在命令行上手动将用户名和密码等变量传递给Cucumber脚本?我的备份计划是将它们放在一个YML文件中,然后将该文件添加到gitignore,这样它们就不会被置于版本控制中。 最佳答案 所以,我看到了您对铁皮人的评论,答案是肯定的。cucumberPASSWORD=my_passwordPASSWORD被设置为环境变量,您可以通过将其引用为ENV['PASSWORD']来使用它的值。例如,browser.text_field(:id=>'pwd').setEN

  10. ruby - 将哈希值保存到 Ruby 上的文件 - 2

    我刚刚迈出了编程的第一步。我刚刚完成了CodeAcademy的另一门类(class)。这次我被要求创建一个小电影目录。这是我的问题:如何在文件中保存/加载带有电影标题和评级的哈希值而不是自己的代码?下面是代码现在的样子(几句葡萄牙语,但您可以忽略它:movies={Memento:3,Primer:4,Ishtar:1}puts"Oquevocêgostariadefazer?"puts"--Digite'add'paraadicionarumfilme."puts"--Digite'update'paraatualizarumfilme."puts"--Digite'display'

随机推荐