30年的Hello world

30 年的 Hello world

转载自:http://www.admin10000.com/document/2398.htmlphp

 

最近我在7月4日这一天所在的那周休假了。休假期间,我利用大把的时间对我时至今日的职业生涯进行了反思。 意识到我如今写代码都写了快30年了,难免让我有些许震惊。所以我决定,要利用这段美好的休闲时光,写篇博文来怀怀旧,探究一下我在过去30年的工做中所用到的全部编程语言。且谨以此篇文章献给我以编写“Hello, World.”开始而学习各类新语言的30年美好时光。html

 

  TI BASIC是我所学习的第一门编程语言。它是由微软专为TI 99/4A微型计算机编写的一种特殊类型的BASIC方言。BASIC是Beginner’s All-purpose Symbolic Instruction Code的缩写,意思是初学者的通用符号指令代码。对于困在家中又无游戏可玩的7岁孩子来讲,BASIC是再好不过的一门编程语言了。该语言采用行号来组织多行代码,要想在屏幕上显示点什么就能够象下面这样把要显示的内容“print出来”:ios

  1981 – TI BASIC程序员

  我花了几个月的时间用这种BASIC编写了一些“choose your own adventure(请你来选择你要扮演的角色来进行游戏)”类型的游戏,甚至花了更多的时间听着用来保存和恢复数据的黑色盒式磁带录音机发出的滋滋、啪啪和嘶嘶声。 我人生中最令我激动和最关键的时刻恐怕是多年后我父母把一台Commodore 64带回家的那个时刻。这个机器随机带有Commodore BASIC,或者叫作PET BASIC,并且可开箱即用。这种BASIC也是由微软编写的,它基于6502 Microsoft BASIC,也就是微软专为6520系列芯片而编写的BASIC,而苹果的机器那时所采用的也正好是这个系列的芯片。web

  1984 – Commodore BASIC面试

  其中的问号是PRINT命令的简写形式,下面那行中的奇怪字符是RUN命令的一种缩写形式(R SHIFT+U -在Commodore 64的键盘上,SHIFT加字符能够用来输入一些很酷的图形小片断,你能够拿这些图形小片断拼出一些基本看得过去的图片)。sql

  很快我就发现,BASIC语言作不到我想作的全部事情。此时“演示场景(demo scene)”正在兴起,不少人都在编写使人叫绝的程序来挑战机器的能力极限。 他们会作一些相似让视频芯片画一些根本不可能画出来的图形或者把内容或更多数据滚动到屏幕边上“超界”的部分。完成这类壮举须要严格的时间顺序控制,而这种控制除了直接使用机器语言的代码别无它法。所以,我装上了机器监视器器(机器监视器是可以让人将机器代码直接输入到内存中的软件的名字),写出了下面这段小程序:数据库

  1985 – 6502 机器码编程

c64machine

  这段小程序会将一个索引装载到“Y-加法器”中,而后将始于$C100的内存中的字符一个一个的发送给ROM中的一个子程序,从而将这些字符显示出来。这就是for循环(for y = 0; y <= 0x0d, y++)所对应的机器码。RTS命令会从子程序中返回。为了执行这个程序,你还得使用内建的SYS命令呼叫出内存地址(很不幸,为此你不得不将16进制的$C000转换成10进制的49152,但除此以外其它的运行起来那叫一个顺畅)。我将表示“HELLO, WORLD”的PETSCII字符存储在了内存地址$C100处(是的,Commodore 64有它本身特殊的字符页(character page))。程序运行结果以下:小程序

  固然,当我从原始的机器码转战到汇编语言时,日子就稍微好过了点。使用汇编语言,我就能够预先规划个人软件,并且还不用死记内存地址了,只需用标签来标记内存地址便可。上面那段机器码对应的彻底相同的汇编程序能够以下来编写:

  1986 – 6502 汇编语言

* = $C000       ;set the initial memory address
CHROUT = $FFD2  ;set the address for the character out subroutine
         LDY #$00 
LOOP     LDA HELLO, Y 
         CMP #$00          BEQ END 
         JSR CHROUT 
         INY 
         BNE LOOP 
END      RTS
HELLO    ASC 'HELLO, WORLD.' ; PETSCII
HELLOEND DFB 0 ; zero byte to mark the end of the string 

  大约也就是这个时候,我意识到我是真的喜欢编写软件了。高中时我参加了一些课程,但他们教的不过是一些很愚蠢的小型Pascal语言,设计这种语言就是为了使学习如何编程变得“轻松一些”。真是轻松了吗?通过使用“机器监视器”徒手编写复杂的程序以后,我感受Pascal实在是太过于轻松了。我还真是不得不认可,用Pascal编写“Hello, World”的语法实在是太简单了。

  1989 – Pascal

program HelloWorld;
begin
  writeln('Hello, World.');
end

  我想,在这时候,很时尚的小子们都在用C编程序呢。C是一种很是灵活的语言,它感受就象是汇编语言之上的一些功能性的宏,而不像是一门新语言。所以我额外自学了C,但C我却只用了不长的一段时间。

  1990 – C

#include <stdio.h>
main()
{
  printf("Hello World");
}

  这段小程序包含了一个处理标准输入/输出的库,而后就在屏幕上输出了一段文字。C中的库使得C能够开发跨平台的应用 —— 无论是在Windows仍是在Linux中调用的都是同一个函数,但库自己实现了可以运行于目标机的全部底层子程序。上面这段代码也是我多年后在Linux机器上首选摆弄的代码。若是那时你尚未入计算机这个行当,有些状况是我光用语言很难说明白的,那时要是你不弄个Linux自定义安装版,你们就以为你不是个真正的程序员。我所说的“弄个自定义安装版”,意思是梳理Linux的源代码,将其按照你本身独特的硬件对Linux进行定制。其中最有意思的要数对显卡的处理了,要掌握监视器的“点时钟”状况,其中还须要施展各类奇巧淫技才能让主板很好的配合图形芯片一块儿工做。好吧,我跑题了。

  C对我来讲学起来真的不算是个挑战,但我很快就搞明白了,耍酷的小子们在作着不一样的事情,正在学习一种称为“面向对象编程”的编程范型。机器码和汇编语言多是和OO距离最远的东西了,从面向过程的编程转向面向对象的编程对我来讲是个我乐于接受的挑战。在那时你还没法仅仅经过在线搜索来寻找学习资料(搜是能够搜的,但搜索机制和如今不一样并且搜索结果也少之又少),所以我就出去买了一摞C++的书。 C++的确支持“对象”这个概念。它甚至还使用对象来表示流和管道,可以以对象的方式来对它们进行操做。面向对象还引入了命名空间的概念,以此来更好的管理代码的划分。说了这么多,此次“Hello, World”变成这样了:

  1992 – C++

#include <iostream>
using namespace std;
int main()
{
  cout << "Hello World";
  return 0;
}

  我一猛子扎进了大学,但令我失望的是,个人大学里并无开设教授我所感兴趣的象C和C++这样的现代语言的课程。相反,我不得不该付差事的课程倒是让我在一个叫作“Cypher”的大型机上用一种叫作Fortran的颇有趣的语言来写做业。Fortran这种语言居然很在乎你把代码放到哪一栏中!没错,那时这种语言规定第1栏用来写注释,第1到5栏写语句的标签,第6栏用于续行字符,只有从第7栏你才能开始写真正的代码,我学到了足够多的Fortran,使我认识到我之后不再想用这种语言编程了。

  1993 – Fortran

       PROGRAM HELLOWORLD
       PRINT *, 'Hello, World!'
       END

  那时我翘了大部分课程,把晚上的大部分时光花在了计算机房。在那里我使用的是咱们大学的大型Unix机。在机房里我发现了Internet,学到了安装软件的“老式”的方法:下载软件源代码,build出可执行程序,查看错误,而后进行相应的调整和修复才能获得一个好用的软件。实话说,我还真不知道不学会那时的编程技术,你怎么才能学会使用Unix。那时我不断地探索和学习使用计算机系统的方式。当时我所作的最多见的一件事就是执行一个可以倒出大量信息的命令以后,再使用一些很是“顺手”的命令行工具对这些信息进行解析。那年我学到的最酷的语言之一就是PERL。虽然用“Hello, World.”这样简陋的例子作演示对PERL来讲很不公平,但就先将就一下吧:

  1993 – PERL

$welcome = "Hello World";
print "$welcome\n";

  与此同时我很快发现了大量的World Wide Web(是的,那时咱们就是这么称呼Internet的。Internet中运行的就是GopherArchie这类好玩的程序,World Wide Web只是Internet之上的一写文档而已)。HTML对我来讲又是令一个飞跃,它使我第一次接触到了描述性UI。不用装入变量或字面量并使用一些关键字或子程序,我就可以将内容组织到一个页面之中。你可能会惊奇,直到20年后的今天,HTML页面的基本语法实际上根本都没怎么变。

  1993 – HTML 

<html>
<head><title>Hello, World</title></head>
<body><h1>Hello, World</h1></body>
</html>

  对我来讲这是一段颇有意思的时光。我从我的计算机(TI-99/4A和Commodore 64,还在很短的一段时间中用过Amiga)转向的大型机, 突然之间个人PC真的只是变成了用来链接到Unix大型机的终端而已。我还在PC上运行了一个Linux操做系统,这是由于Linux是链接到Internet和网络的最快最方便的方式 —— Linux内置了TCP/IP协议栈,无需想老版本的Windows那样在操做系统之上再安装这个协议栈了(还有人记得NETCOM吗?)个人大部分工做是在大型机上完成的。

  我真地意识到了,我在间接失去同PC世界的联系。显然那时疯狂的我的计算时代已经结束了,有两种机器渐渐成了接灰的摆设了:一种是对于咱们中的大部分人来讲的运行Windows的PC,另一种就是对于设计者而言的Mac机器。PC已通过时了就是我当时的信念。那时我有个室友整天围着Mac转,用Mac来设计各类优惠卷。他有一大堆漂亮的图形设计程序,常常会把一个叫作Quark的软件调出来,而后问我:“你的PC里有这样的软件吗?”我会耸耸肩而后提醒他,我连一个圆或者正方形都不画,我要这样的图形软件有什么用?我喜欢个人PC,由于我懂软件,并且我也会数学,即便我没有画什么图,我确定可以利用数学在计算机上画出分形图形或者粒子风暴图。固然要作到这些就须要有图形卡,经过TELNET链接到Unix机可干不了这些事,因此我开始学习PC编程了。那时在PC上用来编程的就是Win32和C++了。即便在今天的Visual Studio 2012中,你依然可以运行下面我说的这个例子。我不会用我原先在Win32下编写的有150多行代码的“HELLO.C”程序来烦你的。

  1994 – Win32 / C++ (这个例子要稍稍新一些)

  打开一个命令行窗口而后运行这个程序后会获得这样的结果:

  个人粒子流程序和曼德布洛特集合程序确定在找工做方面帮不上什么忙,因此我必须再找另外的办法。使人哭笑不得的是,个人职业在开始时同计算机居然没有丝毫的关系。刚开始我为一家保险公司工做,工做内容是处理来自西班牙的电话索赔事务。状况就是这么个状况。在为一个薪水较低的工做接受面试时,我准备安心用这份微薄的薪水来户口,晚上再熬夜搞PC编程,我偶然提到我会说西班牙语。他们叫来他们的双语业务表明来面试我,我经过了测试。就在一周以内我获得了一个薪水更高的职位,由于我在短短的几个电话中学到了比我在整个高中几年里学到的还有多的西班牙语。

  那时我还年轻,求胜心切。咱们的级别是基于天天咱们成功完成的索赔总数来计算的。我不想就由于我所使用的软件每隔一段时间就要崩溃而被甩在后面。咱们使用的对我来讲是一套全新的系统 —— AS/400 (如今叫作iSeries) —— 可是我仍是想出了办法,学会了在索赔软件每次崩溃以后如何重启它。公司的IT部门很快明白了是怎么回事了,并把我叫到了一边。起初我担忧我惹上麻烦了,可是实际上他们向我提供了一个转入IT部门的机会。我又开始了个人第三次转折,工做内容基本上就是维护AS/400系统,为打印保险单和理赔表的大型打印机换打印盒。

  在这个工做中,换打印盒的过程占据了整个工做中的大部分时间。这是由于有些表格只用黑墨,而有些别的表格却还须要绿色或红色的墨。那些打印机里只能装一种墨,因此在碰到不一样类型的表格时,打印机就会提示咱们去换上所需的墨。我认为这种作法太荒谬了,因此我花时间自学了RPG。我编写了一个程序,可以将打印做业同墨的颜色匹配起来,而后对打印做业队列进行排序,把全部的黑色打印做业排到一块儿,而后是全部的绿色打印做业,等等。这样一来,原先8小时的工做就变成只需2个小时就能完成,我就有更多的时间来学习RPG了。RPG最初的版本 —— RPG II和RPG III ——  还都很是原始,其最初的设计只是用来简单地模拟卡片打孔系统的方式来产生报表(其名字就是Report Generator的缩写,意思是报表产生器)。RPG和Fortran同样,都是位置性的语言。

  1995 – RPG

I              'HELLO, WORLD'        C         HELO
C           HELO      DSPLY
C                     SETON                     LR

  请注意每行的第一个字符代表的是各行的代码类型(实际上它还应该多占几列,但我故意省略了其中的一些空白处)。第一行定义了一个常量,而后第二号将该常量显示到屏幕上,最后第三行是一个让程序结束执行的指示符。

  在开始运维工做后我又干了个人第二件大事。每次月底结算都须要花费大量的时间和精力。原先的系统是在一台Honeywell大型机上读取穿孔卡片。其中有个COBOL程序从一个模拟穿孔卡片的文件中读取数据,而后输出到另一个文件中,最后再把这个输出文件送入AS/400中进行处理。处理完成后,还须要将各类结算数据对一下。因为舍入错误、不支持事务以及另外的一些问题,数据几乎每次都对不上,因此就须要对整个计算过程进行调查,找出是哪里处理差子,而后再经过更新代码来修复错误。若是咱们未能找出问题所在,咱们还弄了一个“紧急开关”,在11点按下这个开关,就会读取输出数据而后调整结算数据来让帐簿平衡。虽然我并无大量的COBOL编码经验,但我须要经过阅读Honeywell的COBOL代码来理解透彻它的工做过程,而后我才可以很好的处理掉发生在AS/400 这边的问题。

  1995 – COBOL

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WELCOME-MESSAGE           PIC X(12).
PROCEDURE DIVISION.
PROGRAM-BEGIN.
    MOVE "Hello World" TO WELCOME-MESSAGE.
    DISPLAY WELCOME-MESSAGE.
PROGRAM-DONE.
    STOP RUN.

  没过多久,顶尖的RPG专家就来到咱们公司,给咱们上了3天的课程,这是由于最酷的事情发生在AS/400的世界中。不只仅是AS/400正在转向64位(你们都知道位数加倍后就会比原先好上一倍,对吧?) ,并且RPG语言也正在获得巨大的改进,版本IV比觉得更多了融合了面向过程的特性以及一些面向对象的原则。这得多酷啊?咱们扎入培训中后内心乐开了花,由于睁大全部的老式RPG开发者都在为努力学习这种“新的编程风格”而挠头时,我内心的石头终于落地了,终于可以回到我用C和C++时更为熟悉的面向过程的编程风格了,再也无需使用过去的那种刻板而受局限的基于指示符和列的RPG语言了。

  不少开发者可能会由于某个特性而感到高兴,这些特性也的确让人另眼相看。语言要求指令开始于一个肯定的列,输入在指令以前。这里局限性很大,你只有加载少许的常量字符,或者你不得不把它指明为常量或者数据结构,并把它们读入。新语言则把关键字列移动到右边,就有更大的空间给”factor one“。这意味着咱们如今能够用几行代码来写“Hello,World” 了。这种语言也是程序化的,因此你能够经过返回而不是在指示器中设置来停止一个程序。(尽管我记得正确的话,在主程序中返回就是设置封装的指示器)

  1996 – RPG/ILE

C     'HELLO, WORLD' DSPLY 
C                    RETURN

  AS/400在操做系统中内置了一个叫作DB2数据库。在很长一段时间内,该数据库只支持经过RPG或其它的软件同其直接交互,并不支持SQL语法。后来出了个专门的叫作SQL/400的软件包,但DB2在底层就对SQL提供了支持。为此我还在1998年是发表了个人第一篇文章,写的就是关于如何在AS/400中如何本身接入对SQL的支持(Create an Interactive SQL Utility)。在SQL中实现“Hello, World”的方法可能会数不胜数,但最简单地要数这个了:

  1998 – SQL

SELECT 'HELLO, WORLD' AS HELLO

  我要为打乱时间顺序道歉,但SQL彷佛彻底能够看做是我“主要的”或者“得到报酬的”工做的一部分。同时我一直都在疯狂玩着游戏,刚开始玩的是DOOM(这是第一个给我留下深入印象的游戏,我居然还花钱买了这个游戏的完整版),后来借着玩了DOOM II和HEXEN,最后玩得最High的要数Quake了。若是你不熟悉第一人称射击游戏(FPS)的发展史,我还得告诉你,Quake仍是一个改变了游戏历史的游戏。这个游戏为玩家提供了史上第一个“真正的”3D游戏环境(以前的那些游戏都是用2D映射表来模拟出3D的地板和具备必定高度的天花板),经过对TCP/IP的支持完全改变了死亡比赛的模式, 它采用了很是高级的编程技术,从而容许比以往任什么时候候都多的玩家在同一个地图中同时玩游戏。

  Quake的可定制化程度也极高。虽然我在美工方面不怎么地,历来没弄明白怎么建立本身的模型或地图,但我直接扎近了编程来对它进行定制。Quake提供了一种基于C的编程语言,名为QuakeC。这种语言可以编译为跨平台的字节码,而这种字节码能够在可以运行Quake的全部目标平台之上。很快我就编写了一些改造性的程序,可以作到让玩家着火、让铁钉从墙上逼真地反弹回来等等相似的事情。在一个聊天室里,有我的说了一个点子让我编程实现一下,后来就由于我编写的这个叫作“MidnightCTF”的功能而为你们所知。其实就是直接在现有的任何地图上将全部的等都关闭,但为每一个玩家配备一个手电。Quake是第一个支持真正的3D音效的游戏,这为游戏增添了一种有趣的可玩性。

  甚至还有人从个人那些改造性的程序中拿出了一段代码,放到了“编程语言字典”中的QuakeC词条之下。下面这段用QuakeC编写的“Hello, World”代码实际上就是将一条广播消息发送给了当前游戏中的全部玩家。

  1996 – QuakeC

bprint("Hello World\n");

  此时我意识到了Internet真地要发展起来了。1993年我还在上大学时发现了这一点,但我很是沮丧,由于根本没有人真正明白我在说什么,但仅仅在几年以后,每一个人都在为了抢着进入Internet领域而乱做一团(有些公司,好比AOL和微软的MSN,都想打造属于每一个公司本身的互联网。。。但最终都无功而返,接入了咱们如今所说的这个大的Internet)。我发现我在大型机上的工做立刻就会过期,或者最好的状况下我只能成为一个藏在后面的某个角落中,鼓捣“那些个老系统”的开发人员。我想接触这些新东西。

  后来我转到了一个在工做中使用这些新东西的部门 —— 用VB6(COM+)和ASP编写一个应用,把几个不一样的系统链接起来,从而可让全部供应商都能看到其中的数据。

  1998 – VB6 (COM)和ASP

Public Class HelloWorld
    Shared Public Function GetText() As String 
        return "Hello World"
    End Function
End Class
<%@ Page Language="VB" %>
<OBJECT RUNAT=SERVER SCOPE=Session ID=MyGreeting PROGID="MyLibrary.HelloWorld">
</OBJECT>
<HTML>
<HEAD><TITLE><%= MyGreeting.GetText() %></TITLE></HEAD>
<BODY><H1><%= MyGreeting.GetText() %></H1></BODY>
</HTML>

  那时我有幸能同一位颇具天赋的架构师一块儿共事,他设计了一个系统,其架构在当时来说仍是很是神奇的。咱们的COM+组件均可以接受一个单个的字符串做为参数,这是由于它们收到的信息都是XML格式的。这样一来,咱们的组件就可以和接收来自网站的消息同样,轻松地接收来自第三方系统发来的数据。这就是真正的“web service”,我在真正的理解这个词是什么意思以前就干了这有的事。客户端的表单由JavaScript来解析并打包成XML,而后发回服务器, 所以从页面发回的数据同其它服务发过来的数据并没有二致。服务也会将XML做为返回数据的格式。这样就可以把这些返回数据同一个UI模版(该模版名为PXML,是Presentation XML的缩写)结合,而后用一个XSLT模版将其转换为可供显示用的格式。这样咱们就可以在不改变底层代码的状况下对UI进行微调,有点象是个效率不过高的XAML引擎。这仍是在.NET出来以前咱们干的活呢。

  JavaScript但是个折磨咱们的东西,由于那时咱们还要找出如何处理不一样的浏览器的办法。是啊,一说到JavaScript和跨浏览器的兼容性,就不得不说,这个相同的问题15年前就出现了,直到如今还依然存在。幸运的是,全部的浏览器在向用户弹出对话框时采用的方法仍是一致的。

  1998 – JavaScript

alert('Hello, World.');

  不少时间都被我被花在了Microsoft XML DLLs上面 (若是你之前编写过那就会记得注册MSXML解析器)。MSXML3.DLL很快就成了个人朋友,下面是一个将XML经过XSLT转换为HTML的例子。、

  1998 – XML/XSLT to HTML

<?xml version="1.0"?>
<hello>Hello, World!</hello>
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="hello">
        <html>
            <head><title><xsl:value-of select="."/></title></head>
            <body><h1><xsl:value-of select="."/></h1></body>
        </html>
    </xsl:template>
</xsl:stylesheet>
<%
Const MSXMLClass = "MSXML2.DOMDocument" 
Set XSLT = Server.CreateObject(MSXMLClass)
Set XDoc = Server.CreateObject(MSXMLClass) 
XDoc.load(Server.MapPath("hello.xml"))
XSLT.load(Server.MapPath("hello.xsl")) 
Response.Clear
Response.Charset = "utf-8"
Response.Write XDoc.transformNode(XSLT)
%>

  那个模式上我花了几年时间。那段时间中我我的经历了一些转变,体重减轻了70磅,腰围从44英尺减小到32英尺,因为健康我充满了激情。我兼职开了一家本身的公司,甚至从当时的公司辞职,我在这家专为医院提供翻译服务和拥有一个在线的西班牙语节食程序小公司担任IT理事。我能再次够提升个人西班牙语能力,由于翻译是从英语到西班牙语,反之亦然。我甚至将整个用ASP和内嵌了西班牙语硬编码的SQL语句的程序重写。使其成为了彻底数据驱动的、标白的(为了品牌)和本地化的(公司想把他弄成其余像法语之类的分支)。在微软公司的技术栈的那段时间,我仍是至关使人兴奋的。但因为工具和服务器的花费,让我在开本身公司的时候接触了开源社区。那时,为了开发我学了全部像LAMP栈..Linux系统,Apache的Http服务器,MySQL数据库和PHP之类的技术。讽刺的是,因为这些经历,当微软试图为了让开源社区拥抱Sliverlight的时候,我成为了其短时间质询...但那又是另一个故事了。

  2002 – PHP

<?php
 $hello = 'Hello, World.';
 echo "$hello";
?>

  在特定的平台工做了许多年后,我终于有机会进入到新公司的另外一个软件开发岗位。我是一个当时还不出名的创业公司的第三个职员。若是你曾在Panera或Chick-fil-A吃饭或在Caribou喝过咖啡,那你可能就使用过我参与过编写的,或为了无线热点体验而最近升级过的软件。当我加入这家公司的时候,初始平台是用Java编写的。我在这个语言上,我曾用其作过不少“修补”工做,所以加上C++和微软栈上的技能我很快的就将其从新捡了起来。

  2004 – Java

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, World");
    }
}

  在语言当中我对Java并不感冒,可是咱们要用到的特殊东西涉及到微软将要放弃的JVM,并且一个定制的服务器并不须要扩展。当把平台迁移到了.Net平台,我很惊讶的发现IIS服务器比其余几个专用的Java服务器能处理更多的请求。我说的“迁移”,实际上是从新构建了一个新平台。咱们寻求一种把J++代码转换为c#代码,但发现那确实不实用。幸运的是C#与Java很是是接近,大多数团队都能经过现存系统的“规则”轻松的将其翻译成能在Windows运行的系统,且把MySQL迁移到SQL Server 2005。注意Java的"Hello,World"和C#是多么的接近。

  2005 – C#

public class Hello
{
   public static void Main()
   {
      System.Console.WriteLine("Hello, World!");
   }
}

  咱们的公司那时之因此很是成功,部分缘由在于咱们的“控制面板”可以让咱们集中在一个地方就能够管理全部的热点和访问点。咱们能够在远程对这些热点和访问点进行重启、固件更新并用一心跳信号来对他们进行监控,同时还为诊断问题保存了历史信息。这个软件很快就发展成了一个移动设备管理(MDM,也即Mobile Device Management的缩写)平台,并成为公司如今的旗舰产品。他们在发布产品时从新起了一个新的品牌名,可是因为咱们的挑战而获得了一个可以跨平台的HTML的交互性很是强的用户体验(先前的解决方案采用的是微软定制的Java Applet)。咱们用AJAX以及HTML成功的构建了一个可以打动人的系统,但咱们的团队不得不在如此多的浏览器和平台上进行测试,而咱们的系统又是个负责富UI系统,这对咱们的是个很大的挑战。虽然为了提升热点登陆用户体验咱们还须要维护这个系统,但它在管理方面更加灵活了,因此我又对一些其它的提到方案进行研究。

  当我发现Silverlight时,就对它着迷了,但我仍是以为先让我本身对它进行探索为好。我能够在咱们监控面板的概念性产品前面站几个礼拜,发现每一个人都很喜欢它,因此决定你们全力投入对它进行开发。我最乐观的估计是,采用Silverlight以后,从产品的概念到发布咱们团队所须要花的时间要比采用JavaScript和HTML相关技术少4倍。那时,HTML5仍是个空中楼阁。在我离开以前,咱们的团队已经用Silverlight实现了不少的功能。直到离开时咱们一直都在同Apple在MDM方面进行合做,Apple固然不想让他们的软件同Silverlight有任何瓜葛,可是我仍是享受了多年用一种能够经过XAML获得跨浏览器和平台的声明式UI的强大功能的语言编写业务程序,只要咱们容许使用插件就没问题了。(我据说这些技术如今不再流行了)。

  2008 – Silverlight (C#和XAML)

<UserControl x:Class="SilverlightApplication1.MainPage">
    <Grid x:Name="LayoutRoot" Background="White">
        <TextBlock x:Name="Greeting"></TextBlock>
    </Grid>
</UserControl>
public partial class MainPage : UserControl
{     
    public MainPage()     
    {         
        InitializeComponent();         
        Loaded += MainPage_Loaded;     
    }     

    void MainPage_Loaded(object sender, RoutedEventArgs e)     
    {         
        Greeting.Text = "Hello, World.";     
    }
}

  固然,Silverlight后来就象一只垃圾股同样日薄西山了。那时Silverlight仍然是一个很是有用也颇有竞争力的技术,I但一旦人们发现微软再也不对这种技术进行投入了,Silverlight立刻就行将就木了 —— 虽然人们感受它过期了,但这和它在那时是否是一个正确的工具没有丝毫的关系。HTML5在宣传本身是“编写一次,处处运行”方面也作得至关不错, 成百上千的公司在可以意识到他们的错误(HTML5的口红“编写一次,处处运行”的实际意思是,“编写一次,处处碰壁,而后为每一个平台还得再编写一次”)以前,不顾一切、争先恐后地加入了HTML5的阵营。

  然而,咱们所喜欢的Silverlight中的那部分特性在Windows 8.1下的XAML和C#中存活了下来。 为了好玩,下面给出采用酷小子们惯常使用的模型-视图-视图模型(MVVM)模式编写的“Hello, World”。

  2011 – WinRT / C#

public class ViewModel
{
    public string Greeting
    {
        get
        {
            return "Hello, World";
        }
    }
}  <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <Grid.DataContext>
        <local:ViewModel/>
    </Grid.DataContext>
    <TextBlock Text="{Binding Greeting}"/>
</Grid>

  虽然Windows 8.1已经让我忙于写做和兼职项目有一段时间了,可是对于大部分公司来说,它仍是比较新的,不少公司想要的是基于Web的解决方案。这就意味着要使用HTML和JavaScript,而我在大部分时间中就是忙于这方面的工做。没错,一旦我发现我离开了这套技术,它们老是可以又把我拉回来。在对我用HTML和JavaScript进行Web开发时所痛恨的地方进行一番深思熟虑以后,我以为其中必有更好的方式来实现它们。咱们的团队拧成一股绳,对各类可能的解决方案进行了调查研究,最好找到了一个很是酷的解决方案。最近有一种新发布的语言,叫作TypeScript,它是JavaScript的一个超集。它没有试图要改变语法,所以全部有效的JavaScript代码一样也是有效的TypeScript代码。然而,这个语言提供了一些开发时特性,好比,有助于造成API调用的接口,丰富的发现机制(它们甚至都不会出如今编译所产生的代码中)以及支持继承的类、强类型变量、静态修饰符等,而全部这些最终都会编译成很是有效的、跨浏览器的JavaScript代码。

  采用TypeScript是个轻松的决定。尽管它还处于beta测试阶段,但它产生的代码100%能够直接用在产品中,因此若是咱们发现它产生的代码有什么问题的话,咱们彻底能够跳过TypeScript,直接在JavaScript中进行修补。最后证实,TypeScript可用性至关高 —— 咱们的团队中有几我的对JavaScript有纯正癖,痛恨对“修改JavaScript这种语言”的全部企图都恨之入骨,即便他们几我的刚开始持有怀疑的态度,最后也一致认为,TypeScript为咱们提供了更高一层的控制力度,用它还可以进行重构,它也支持并行开发,对咱们可以发布高质量的基于Web的代码有着极大的促进做用。

  2012 – TypeScript

class Greeter {
    public static greeting: string = "Hello, World";
    public setGreeting(element: HTMLElement): void {
        element.innerText = Greeter.greeting;
    }
}  var greeter: Greeter = new Greeter();
var div: HTMLElement = document.createElement("div");
greeter.setGreeting(div);
document.body.appendChild(div);

  TypeScript不是我所在的惟一的改变。咱们还想消除在为对象设置数据绑定时的繁文琐节。当时咱们所采用的Knockout也是一个很是不错的框架,但它所须要的工做仍是比咱们所想的要多。咱们团队中诱人对一些替代方案进行了调查研究,最后选定了AngularJS。刚开始我对它仍是有所怀疑的,但很快发现,这个方案真的同用于Web的XAML方案很是相似。采用它咱们能够在使用声明式UI的状况下,还能解决另一个问题,就是咱们还能够将命令逻辑从中隔离出来。到如今为止已经有几个月了,咱们的团队在使用TypeScript和AngularJS这些相关技术时一直都很愉快,而且至关的爱用这套技术。 我如今正在参加WintellectNOW的一个课程,由于我决定这事关重大。然而,要说30年的经验教会了我什么的话,那就是:今天还存在,明天就消失。我不是一个C#开发人员,也不是一个JavaScript开发者,更不是一个AngularJS奇才。毫不是!我只是一个编程人员,一个程序员,纯正的、朴素的、简单的程序员。各类编程语言只不过是个工具,我只是碰巧学会了不少编程语言而已。好吧,再来一次 “Hello, World”。我但愿你能喜欢这段旅程。。。一段直到如今的旅程。

  2013 – AngularJS

<div ng-app>
    <div ng-init="greeting = 'Hello, World'">
        {{greeting}}
    </div>
</div>

  “再见了,读者朋友。”

  英文原文:30 Years of Hello, World

相关文章
相关标签/搜索