30年的Helloworld行业动态

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

1981–TIBASIC

1984–CommodoreBASIC

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

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

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

1986–6502汇编语言

*=$C000;settheinitialmemoryaddressCHROUT=$FFD2;settheaddressforthecharacteroutsubroutineLDY#$00LOOPLDAHELLO,YCMP#$00BEQENDJSRCHROUTINYBNELOOPENDRTSHELLOASC'HELLO,WORLD.';PETSCIIHELLOENDDFB0;zerobytetomarktheendofthestring大约也就是这个时候,我意识到我是真的喜欢编写软件了。高中时我参加了一些课程,但他们教的不过是一些很愚蠢的小型Pascal语言,设计这种语言就是为了使学习如何编程变得“轻松一些”。真是轻松了吗?经过使用“机器监视器”徒手编写复杂的程序之后,我感觉Pascal实在是太过于轻松了。我还真是不得不承认,用Pascal编写“Hello,World”的语法实在是太简单了。

1989–Pascal

1990–C

#includemain(){printf("HelloWorld");}这段小程序包含了一个处理标准输入/输出的库,然后就在屏幕上输出了一段文字。C中的库使得C可以开发跨平台的应用——不管是在Windows还是在Linux中调用的都是同一个函数,但库本身实现了能够运行于目标机的所有底层子程序。上面这段代码也是我多年后在Linux机器上首选摆弄的代码。如果那时你还没有入计算机这个行当,有些情况是我光用语言很难说明白的,那时要是你不弄个Linux自定义安装版,大家就觉得你不是个真正的程序员。我所说的“弄个自定义安装版”,意思是梳理Linux的源代码,将其按照你自己独特的硬件对Linux进行定制。其中最有意思的要数对显卡的处理了,要掌握监视器的“点时钟”情况,其中还需要施展各种奇巧淫技才能让主板很好的配合图形芯片一起工作。好吧,我跑题了。

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

1992–C++

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

1993–Fortran

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

1993–PERL

1993–HTML

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

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

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

1995–RPG

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

1995–COBOL

IDENTIFICATIONDIVISION.PROGRAM-ID.HELLO.ENVIRONMENTDIVISION.DATADIVISION.WORKING-STORAGESECTION.01WELCOME-MESSAGEPICX(12).PROCEDUREDIVISION.PROGRAM-BEGIN.MOVE"HelloWorld"TOWELCOME-MESSAGE.DISPLAYWELCOME-MESSAGE.PROGRAM-DONE.STOPRUN.没过多久,顶尖的RPG专家就来到我们公司,给我们上了3天的课程,这是因为最酷的事情发生在AS/400的世界中。不仅仅是AS/400正在转向64位(大家都知道位数加倍后就会比原先好上一倍,对吧?),而且RPG语言也正在得到巨大的改进,版本IV比以为更多了融合了面向过程的特性以及一些面向对象的原则。这得多酷啊?我们扎入培训中后心里乐开了花,因为睁大所有的老式RPG开发者都在为努力学习这种“新的编程风格”而挠头时,我心里的石头终于落地了,终于能够回到我用C和C++时更为熟悉的面向过程的编程风格了,再也无需使用过去的那种刻板而受局限的基于指示符和列的RPG语言了。

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

1996–RPG/ILE

1998–SQL

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

1996–QuakeC

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

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

1998–VB6(COM)和ASP

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

1998–JavaScript

1998–XML/XSLTtoHTML

2002–PHP

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

2004–Java

publicclassHello{publicstaticvoidmain(String[]args){System.out.println("Hello,World");}}在语言当中我对Java并不感冒,但是我们要用到的特殊东西涉及到微软将要放弃的JVM,而且一个定制的服务器并不需要扩展。当把平台迁移到了.Net平台,我很惊讶的发现IIS服务器比其他几个专用的Java服务器能处理更多的请求。我说的“迁移”,其实是重新构建了一个新平台。我们寻求一种把J++代码转换为c#代码,但发现那确实不实用。幸运的是C#与Java非常是接近,大多数团队都能通过现存系统的“规则”轻松的将其翻译成能在Windows运行的系统,且把MySQL迁移到SQLServer2005。注意Java的"Hello,World"和C#是多么的接近。

2005–C#

2008–Silverlight(C#和XAML)

publicpartialclassMainPage:UserControl{publicMainPage(){InitializeComponent();Loaded+=MainPage_Loaded;}voidMainPage_Loaded(objectsender,RoutedEventArgse){Greeting.Text="Hello,World.";}}当然,Silverlight后来就象一只垃圾股一样日薄西山了。那时Silverlight仍然是一个非常有用也很有竞争力的技术,I但一旦人们发现微软不再对这种技术进行投入了,Silverlight马上就行将就木了——虽然人们感觉它过时了,但这和它在那时是不是一个正确的工具没有丝毫的关系。HTML5在宣传自己是“编写一次,到处运行”方面也做得相当不错,成百上千的公司在能够意识到他们的错误(HTML5的口红“编写一次,到处运行”的实际意思是,“编写一次,到处碰壁,然后为每个平台还得再编写一次”)之前,不顾一切、争先恐后地加入了HTML5的阵营。

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

2011–WinRT/C#

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

THE END
1.C++招聘招聘C++人才猎聘C++招聘网为您提供大量的C++招聘信息,有超过10000多C++招聘信息任你选寻,招聘C++人才就来猎聘C++招聘网!https://www.liepin.com/career/c2/
2.北京c++本科招聘(工资待遇要求)北京小蝇科技有限责任公司北京北京小蝇科技有限责任公司 c++ 本科需要什么经验? 1-3年占比最多,占66.7%,3-5年占33.3% 按经验统计 1-3年 ¥25.0K 3-5年 ¥25.0K 北京北京小蝇科技有限责任公司 c++ 本科工资按经验统计,1-3年工资¥25.0K,3-5年工资¥25.0K。 c++https://www.jobui.com/company/15790271/salary/j/c%2B%2B/beijing/edu2/
3.C/C++兼职接单外包平台招聘其他后端开发接单云工网提供C/C++兼职接单招聘平台:数千名优秀在线全职兼职开发外包接单、电商、网站、APP等;C/C++3天免费试用,先体验后雇佣!https://www.yungong.com/cpp
4.应届生必看!23个高质量C++项目推荐,校招简历秒加分总共挑选了 23 个 C/C++ 项目,供大家按需选择。 一、简单难度(适合个人练手) 1、压测工具Webbench(C实现) -- 2.7k stars 项目简介:Webbench 是一个著名的轻量级 Web 压力测试工具,用于对 Web 服务器进行性能测试和基准测试。通过这个项目,你可以学习如何模拟高并发请求,了解 Web 服务器在高负载情况下的表现。https://www.jianshu.com/p/6637ccb4eae0
5.海波无敌科技12年C/C++工程师兼职时间: 下班后 周六 周日 所在区域: 西安 全区 技术能力 本人从事软件开发超过十二年,专业从事桌面软件开发,精通c/c++语言,使用过多门界面开发框架,如:MFC、WPF、CEF3、DrectUI等。曾经给煤炭、石油、电力行业开发过多款软件,至今这些软件依然在行业内使用。https://www.yuanjisong.com/consultant/187088
6.免费开源的C/C++IDE,DevC++6.5安装教程devc++6.5安装本文介绍了DevC++作为初学者C/C++开发工具的推荐,对比了VisualStudio的优缺点,并提供了DevC++6.5的安装步骤。同时,文章指出Python在就业市场的需求和优势,强调了在大学期间学习编程的重要性,尤其是Python,因为它易于上手且在大数据和自动化领域应用广泛。 摘要由CSDN通过智能技术生成 https://blog.csdn.net/xxue345678/article/details/132413592
7.兼职C/C++/C#/Java/Python网络编程发信人: redsun86 (小淘气), 信区: CPP 标 题: 【兼职】C/C++/C#/Java/Python 网络编程 发https://bbs.byr.cn/article/CPP/102972
8.c语言工程师,c++工程师(远程兼职)广州一张满减券科技社招广州一张满减券科技社招 c语言工程师,c++工程师(远程兼职) 2024最新招聘求职信息,薪资:6-16,地点:广州,点击查看更多广州一张满减券科技招聘岗位、岗位职责要求、工作内容、薪资待遇介绍等企业招聘信息。https://www.nowcoder.com/jobs/detail/210084?jobId=210084
9.C/C++小组C/C++ 加入小组 创建于2006-11-24 组长:求索中小组类型:学习 真奇怪,竟然没有搜到C或C++的小组!那我创建一个吧。C# /cuda /前端/web 兼职社恐的小美409-10 17:23 手痒痒吗?快来练练这14个c++项目(附源码)豆包4908-30 16:21 可视化看代码,可太轻松了,推荐推荐!https://www.douban.com/group/29271/
10.通过华为鯤鹏性能优化工具对C/C++应用程序进行性能分析时,分析(2010?全国卷?28)亚里士多德在《政治学》中认为,世上有两种形式的平等,即数量平等和比值平等。数量平等是绝对平均主义,比值平等则是根据个人的实际价值,按比例分配与之相称的事物。根据以上观点,通常所说的“分数面前人人平等”应该是 https://www.shuashuati.com/ti/217806c9e6d14d498e4c93795030a88c.html?fm=bd0d484c144ada13d73e2c631be893e8ca
11.产品经理学习总结之技术和设计篇C/C++/C C还算好点,***的时候能弄懂一点指针的概念,很久不写也就忘记了。C++/C#有个好处,可以使用MS的IDE——VS2013。 JAVA 仅仅入门过,有意从事安卓相关职业的同学可以学习。 Python/Ruby 脚本类语言。Python入门,Ruby没学过。相对,Python的免费电子书比较多,推荐「Python 中文学习大本营」。 https://developer.51cto.com/art/201507/482744_all.htm
12.深圳市同为数码科技股份有限公司校园招聘(三)软件工程师(C/C++) (深圳、武汉) 岗位职责: 方向一: 负责实现IPC产品上业务和应用软件的开发,维护。 任职资格: 1、本科及以上学历,计算机相关专业; 2、熟悉C/C++开发语言,精通多进程,多线程技术,在linux环境进行软件开发; 3、熟悉Linux/RTOS环境下的开发和调试,熟练掌握嵌入式linux上调试手段和工具。 https://xjh.haitou.cc/article/1972843.html
13.硕士应届生英文简历模板13篇(全文)精通c/c++语言;精通dsp(tms320c2407) c环境,有程序开发的`成功经验 精通labwindows/cvi,具有虚拟仪器程序开发测试经验 熟悉protel dxp等硬件开发工具 熟悉硬件设计语言vhdl,具有应用vhdl实现fft设计成功经验 熟悉各种调试电路仪器的使用 语言及计算机能力 六级80分,具备良好的听说读写能力,能熟练阅读英文资料 https://www.99xueshu.com/w/filebod7exr1.html
14.社区工作人员笔试题目(精选10篇)5.在C++程序中调用被C 编译器编译后的函数,为什么要加extern “C”? 首先,作为extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。 通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。例如https://www.360wenmi.com/f/file2a36aajd.html
15.C与C++编程C语言C++编程基础C与C++编程版块提供C与C++编程入门教程,C语言基础教程,C++教程等相关信息,在经管之家(原人大经济论坛)找到您满意的解答。https://bbs.pinggu.org/forum-2912-1.html
16.6月26日苏州园区人才市场现场招聘会c.精通相關測試設備及測試原理,能編寫測試程式,產品類型如:Driver IC/ Power/Logic/ MCU 中海物业管理有限公司苏州分公司 展位号:Q21 管理处收银 4名(预约面试) 性别不限,大专及以上学历,财务及相关专业,持会计证,财务相关岗位1年以上相关工作经验,肯吃苦耐劳,品貌端正,缴纳园区公积金。 物业管家 5名http://www.xszrcw.com/news/news-show-4022.htm
17.Dotcpp编程(C语言网)编程入门学习训练题库C语言网(Dotcpp编程),老牌的编程入门学习平台,不仅仅提供C语言、C++、Java、Python、编译器(编程软件)等技术的教程资源和工具,还提供包括计算机二级、蓝桥杯真题在内的编程题库,让初学者学练同步,真正学会编程!https://www.dotcpp.com/