引领开发工具近40年的程序员Anders Hejlsberg
有位神级程序员在近40年中一直创造引领潮流的开发工具(Turbo Pascal/Delphi/C#/TypeScript),他就是Anders Hejlsberg。
一、
Anders并没有大学文凭,但这丝毫不重要。当年微软Server部门负责人Bob Muglia认为,地球上只有几个人可以做出伟大的开发工具架构,Anders还是其中那个最棒的,顶尖中的顶尖。
当时,Anders在微软的竞争对手Borland工作。微软试图挖了他一年,但都被婉拒。
比尔盖茨打电话给Anders,说我可以做什么才能让你来。Anders后来回忆说,那是他人生特别尴尬的一个时刻。他已经财务自由,只想做自己热爱的事。
1996年,Anders和Borland高层有些意见分歧,微软趁机开出每年300万美元的高额待遇,更重要的是许诺他可以享有充分的协作资源,终于把这位英雄招至麾下。从后来的贡献看,也许3000万请到Anders,也不会亏。
二、
Anders是1960年出生在丹麦,父亲是摩托罗拉的工程师,典型的科技家庭。Anders在上中学时就开始编程,他回忆说那时用的HP2100还是纸带编程。上大学时有个高年级学生喜欢玩Mousehole纸牌游戏,但是老输钱给Anders,觉得他很牛,就请他合伙一个小公司叫Polydata。
Anders有台Z80,这电脑只有4Mhz CPU和32K内存,上面有微软Basic。结果Anders玩了一天就玩腻了,随后开始玩汇编。大神在20岁就显露了神迹,他两三个星期就写出了Pascal编译器,并卖给了一个英国公司。然后大神就辍学了,并在多个平台包括DOS上重写了Pascal编译器。
1983年,当时Borland还是个丹麦公司,自己做编译器做得很烂,找到Anders买了他的编译器并整合成Turbo Pascal。微软CTO在一次节目中说,这应该是PC上面第一个真正的集成开发环境(IDE),但Anders很谦虚地说他不知道。
当时Anders并未加入Borland,因为Borland后来搬到硅谷去了。Anders选择远程服务,因为当时并没有互联网也没有email,当时寄代码都是靠联邦快递。
1989年,Anders自己的公司Polydata经营不太好,加上女友很向往去美国,他就决定去美国加入Borland。
三、
Borland当然喜出望外,任命Anders为首席程序员。在Turbo Pascal成功后,Borland又发布了Turbo C,从而扬名天下。中国第一代程序员好像都是用Turbo C的,包括伟大的王小波同志。
而Anders的主要任务,是秘密开发可视化环境的超级IDE:Delphi。当时微软已经推出自己的Visual Basic大获好评,但一碰到直接编译二进制EXE的Delphi立刻被秒成渣渣。
Delphi使用Object Pascal,语言设计极其优雅,完美面向对象,完美结合数据库,而且可以直接操控操作系统(硬件和网络等),应该说开发Windows原生程序堪称完美。有意思的是,Delphi上面的VCL和RTL库都是用Delphi自己开发自己的,自带的源代码可以让程序员学习真正高手是怎么编程的。
当年国内大量著名程序都使用了Delphi,包括张小龙的Foxmail和雷军的WPS。
后来著名的Borland C++也被直接移植架在Delphi上,这就是C++ Builder。
这时我似乎听到盖茨在叹息,我非得此人不可。
四、
Anders加入微软时,正是互联网风起云涌之时。Sun刚发布了跨平台可以到处运行的Java,微软感觉生态受到严重威胁,抓紧开发Visual J++和WFC,Anders成了主导人物。VJ++很快成为世界上最快的Java编译器,并支持ActiveX等微软生态产品。
Sun发现微软不用自己的Java虚拟机,搞出个更快的东西。他们深深忧虑被微软分裂了Java,所以果断起诉了微软。结果微软败诉,被迫在VJ++页面承认和Sun Java不兼容,导致了VJ++的最终失败。
Anders第一次碰到自己的产品不是因为性能问题而失败,他承认自己有点天真了。短暂沮丧之后立刻恢复了大神本色:我们微软要自己搞一套和Java竞争的平台。
这就是2000年发布的C#和.net平台。Anders设计的C#也是优美的面向对象速度也经常快于Java。十几年过去,C#依旧是互联网开发的主力语言之一。
五、
近年来开源软件风起云涌,PHP/Python/Ruby/Swift等热度高升,年轻人都不记得Anders这个大叔了。结果在大家最意想不到的地方,大神再次亮剑。
JavaScript(JS)是互联网使用最多的脚本语言,而这个原本不该是Anders的强项,因为他是搞高大上的机器码编译器而不是低级的脚本的。然而,Anders再次推出TypeScript震撼了程序圈。
TypeScript是编译输出JavaScript的工具,也是JS的超集。它不仅可以输出客户端的JS,还可以输出服务端大热的Node.js。TypeScript大大提高了程序员写JS的效率和降低了差错的概率。
更难能可贵的是,作为顶级Geek,Anders积极拥抱开源社区,推动微软从封闭走向开放。TypeScript就是微软最早的开源产品之一。纳德拉上台后,Anders更是促成Visual Studio免费的重要推手,这个开发套件了包括了C#和TypeScript。
六、
在很多新兴语言变得越来越臃肿复杂的当下,程序员们怎么评价Anders的作品呢:有品味,优雅,简洁。Anders说,这是因为他对编程充满了热情。
年近60的Anders今天仍旧在写程序,他说一旦停止写代码后,就会膨胀飞起来,忘了程序员真正需要什么。我们现在还能看到他每个月在Github提交的代码。
引领开发工具近40年的程序员Anders Hejlsberg的更多相关文章
- 使用 Android Studio 开发工具创建一个 Android 应用程序,显示一行文字“Hello Android”,并将应用程序的名称更改为“FirstApp”。
需求说明: 使用 Android Studio 开发工具创建一个 Android 应用程序,显示一行文字"Hello Android",并将应用程序的名称更改为"Firs ...
- 使用 Android Studio 开发工具创建一个 Android 应用程序,并在 Genymotion 模拟器上运行
需求说明: 使用 Android Studio 开发工具创建一个 Android 应用程序,并在 Genymotion 模拟器上运行 实现步骤: 打开 Android Studio,创建一个 Andr ...
- Java基础学习总结(40)——Java程序员最常用的8个Java日志框架
作为一名Java程序员,我们开发了很多Java应用程序,包括桌面应用.WEB应用以及移动应用.然而日志系统是一个成熟Java应用所必不可少的,在开发和调试阶段,日志可以帮助我们更好更快地定位bug:在 ...
- 年近30的Java程序员为了达到月入三万的目标,都做了哪些准备?
1.我觉得像我这般年纪的(29岁),有相对扎实技术功底的(就不自谦了),对赚钱有着强烈欲望的程序员,应该定一个切实的小目标——五年内月入三万! 之所以要定这个目标,最主要的原因是老婆的批评刺痛了我—— ...
- 可视化工作流程设计开发OA系统,一两个程序员就搞定!
随着信息化的发展,越来越多的公司老板要求实现企业审批流程化.一个公司在初期,人员少,流程简单,员工也会经常不按工作流程来走,甚至有些跨部门的工作因为关系原因,没有走工作流程就实施,导致后期出现问题或者 ...
- JavaWeb开发之四:servlet技术 黑马程序员_轻松掌握JavaWeb开发之四Servlet开发 方立勋老师视频教程相当的经典
总结: 记住:servlet对象在应用程序运行的过程中只创建一次,浏览器每次访问的时候,创建reponse对象 request对象,然后调用servlet的service方法,reponse对象和re ...
- Java手机游戏开发简明教程 (SunJava开发者认证程序员 郎锐)
原文发布时间为:2008-07-30 -- 来源于本人的百度文章 [由搬家工具导入] Java手机游戏开发实例简明教程 (SunJava开发者认证程序员 郎锐)一、手机游戏编写基础1.手机游戏设计的基 ...
- 最佳开发工具大全,GitHub Star 6.2k+
一位曾经的谷歌工程师,花费两年时间,辛苦整理了一份清单.本文转自量子位,作者晓查.栗子.方驭洋,如有侵,可删! 这个名为 "xg2xg" 的清单,原本是这位前谷歌工程师(ex-Go ...
- 程序员为什么害怕低代码?ZT
转自:https://www.jianshu.com/p/cd89fe94cd30 低代码 是一种近些年兴起的企业软件快速开发技术和工具.借助低代码使用者无需编码即可完成企业应用的常用功能,少量编码扩 ...
随机推荐
- @FeignClient 情况下header的传递方法,RestTemplate情况下Header传递方法
今天因为要调用另一个服务,因为我们用的是SpringCloud框架,所以通过Fegin调用,正好另一方服务有权限校验,需要传递token和设备ID,这两个参数都需要放到Header中, 用 @Requ ...
- 阿里云最新Maven仓库地址 从此 我的maven依赖下载666~
配置指南 maven配置指南 打开maven的配置文件(windows机器一般在maven安装目录的conf/settings.xml),在<mirrors></mirrors> ...
- SpringCloud--1--服务治理Eureka
一.Eureka概述 1.Eureka特点 只需通过简单引入依赖和注解配置,就能让SpringBoot构建的微服务应用轻松地与Eureka服务治理体系进行整合. Eureka负责服务治理,即:微服务实 ...
- IdentityServer4实现Oauth2.0四种模式之隐藏模式
接上一篇:IdentityServer4实现OAuth2.0四种模式之密码模式,密码模式将用户的密码暴露给了客户端,这无疑是不安全的,隐藏模式可以解决这个问题,由用户自己在IdentityServ ...
- undefined reference to cv::imread(cv::String const&, int)
.build_release/lib/libcaffe-nv.so: undefined reference to cv::imread(cv::String const&, int)' .b ...
- 【POJ3613 Cow Relays】(广义矩阵乘法)
题目链接 先离散化,假设有\(P\)个点 定义矩阵\(A_{ij}\)表示\(i\)到\(j\)只经过一条边的最短路,\[{(A^{a+b})_{ij}=\min_{1\le k\le p} \{ ( ...
- Mongodb 学习笔记(二) :索引
Mongodb 是基于集合建立索引 (Index),索引的作用类似于传统关系型数据库,目的是为了提高查询速度 . 如果没有建立索引, Mongodb 在读取数据时必须扫描集合中的 所有文档记录. 这 ...
- jQuery.each的function中有哪些参数
1.没有参数 $("img").each(function(){ $(this).toggleClass("example"); }); 2.有一个参数,这个参 ...
- ThreadLocal源码及相关问题分析
前言 在高并发的环境下,当我们使用一个公共的变量时如果不加锁会出现并发问题,例如SimpleDateFormat,但是加锁的话会影响性能,对于这种情况我们可以使用ThreadLocal.ThreadL ...
- springboot学习入门简易版九---springboot2.0整合多数据源mybatis mysql8+(22)
一个项目中配置多个数据源(链接不同库jdbc),无限大,具体多少根据内存大小 项目中多数据源如何划分:分包名(业务)或注解方式.分包名方式类似多个不同的jar,同业务需求放一个包中. 分包方式配置多数 ...