Jon Skeet:我不想知道我在SO上到底花了多少时间

非商业转载请注明做译者、出处,并保留本文的原始连接:http://www.ituring.com.cn/article/76098程序员

Jon Skeet,谷歌软件工程师,微软资深C# MVP,拥有10余年C#项目开发经验。自2002年来,他一直是C#社区、新闻组、国际会议的活跃技术专家和Stack Overflow总排名第一的用户,回答了数以万计的C#和.NET相关问题,他还创建了Joda Time的.NET版本Noda Time。Jon著有《深刻理解C#》,他常年维护博客Coding Blog。外国程序员们调侃他的段子"Jon Skeet Facts"也颇有趣。数据库

图片描述

图灵访谈:毫无疑问你是一位C#方面的专家,撰写了3版的《深刻理解C#》,你有计划为你熟知的其余语言或工具写书吗?编程

Jon:很遗憾,除此以外我不多有熟悉的工具或语言了。我在Java方面还算比较专业,可是我感受讲Java的书已经不少了。微信

这几年,我一直想让本身学习一下F#,Go或者Ruby……我以为我真应该从某个时候开始学起来。我以为在我学习F#的时候截个屏感受应该很棒,这时候要是再有一个具体的学习目标就更好了。我但愿让其余人看到个人学习过程会对他们产生帮助。网络

图灵访谈:你每周花在回答问题上的时间有多少?对你来讲最大的收获是什么?闭包

Jon:要弄明白我每周花在StackOverflow上的时间很是困难——这不是件我想弄明白的事儿,由于我可能并不喜欢这个答案。回答问题会为我带来各类各样的收获,我最喜欢的事儿就是在回答一个问题的同时学到新的知识。另外,有时候我不少年前回答的问题会忽然收到新的评论,这个评论来自于如今仍须要面对这个问题的人,他们用个人答案解决了问题,这样的事我也很喜欢。异步

图灵访谈:不少你的读者很好奇你在Google的工做。Google内部有用C#写的项目吗?是什么项目?函数

Jon:对于我在Google的工做我不能说太多,可是我能够告诉你们我在Google已经写了两个C#的项目:个人针对C#的协议缓冲(Protocol Buffers)端口(20%的时间)以及Windows Phone 7上Google搜索应用的第一个版本。工具

还有一些关于访问Google API的C#项目,.NET的Google APIs Client Library是这些项目的根。性能

图灵访谈:你Google软件工程师的身份和微软MVP的身份之间有冲突吗?若是有,你是如何作到在Google提高你的技术能力的?

Jon:我只是个名义上的MVP,事实上——我并无在保密协议(NDA)下,我也没有从微软那里获得什么礼物,好比MSDN(微软开发者网络)的免费订阅之类的。可是做为MVP我仍是很高兴的,这证实了微软已经承认了我对.NET社区作出的贡献。

要想在Google提高技术能力和在别的公司决然不一样,在Google编程的挑战和在其余地方遇到的挑战有着天壤之别。为了要在C#方面跟得上,我都得在本身我的的时间里学习——好比我在Noda Time上花的时间也是个人业余时间。

图灵访谈:确实,C#是一种优雅、便捷、规范化的语言,可是,你认为C#最大的问题是什么?有什么已经存在的语言已经解决了这个问题?

Jon:仍是那个问题,我对其余语言知之甚少——因此让我来讲哪一个语言解决了C#没有解决的问题仍是挺难的。好比,虽然之前也被告知过,可是在我习惯于在C# 2里以匿名方法闭包以前,我都不太喜欢这样的用法。这是一个关于Blub困境的例子。我很喜欢C#让处理数据(经过LINQ)和异步代码变得更简单,可是,我不喜欢在C#里大量使用动态类型,虽然我很欣赏C#把这部分加入到语言中。我怀疑将来的语言可能会混合使用动态类型和静态类型,可是要从头开始就这么作——这样就能够避免这两种类型偶尔在C#里产生的矛盾了。

C#曾经有个问题(虽然已经在C# 6中得以解决了)是执行不可变类型时所须要的样板代码的数量。长时间以来我一直都很喜欢不可变性,可是C#在几年来的众多改进中(好比对象初始化设置)都只是帮助提升了可变类型。能看到主构造函数和只读自动执行属性开始解决这方面的问题我很高兴。

图灵访谈:你但愿看到C#在将来有什么样的新特性?Go的并行执行goroutines?或者是像F#或Scala那样的模式匹配?

Jon:我认为模式匹配是颇有可能的,可是对于goroutines我并不肯定……我感受C#已经选择了异步这条路线,若是混搭上goroutines会显得很奇怪。

说到其余特性——C#最好的特性永远是那些让我产生惊喜的特性。我以为这样的特性对于我来讲就必需要有CLR改变,固然,个人意思并非它们已经毫无可能。若是代码能明确显示出与之工做的数据类型的话,我就会比较欣赏,这样就能够很好地阻止你在上面执行不合适的操做了。在这样的一些原则下,我更愿意看到能够容许让单一实现分享到多种类型的类型系统,每一个类型只能显示底层API的有限子集。在某些状况下,可能会出如今同一个API下的多重类型,可是它们仍旧会是彻底不一样的类型——可能之间还会有一些显式转换。固然,F#的“测量单位(Units of Measure)”的概念可能也是出于这样的考虑。

图灵访谈:C#或者说.NET彷佛只能运行在Windows或者Linux下的Mono上,C#的发展前景对于C#程序员来讲彷佛也不是很明朗。你认为.NET应该扩展跨平台的兼容性吗?

Jon:我很是高兴能看到像Xamarin这样的工具,它可让C#代码运行在iOS和Android上,并且,我还买了一台iPad和一台Mac Mini,就是为了探索代码的运行状况。到时候你也可让C#代码运行在全部主流的移动平台上,还包括Mac,Linux以及Windows,我感受这还不算是很受限制吧。Mono的边边角角上仍是有点糙,这是当我研究Noda Time国际化的极端案例时发现的——可是它的工做性能仍是好得让人惊叹。Roslyn如今已经开源,并且已经能被Mono所用也是很振奋人心的事儿。

图灵访谈:微软如今将9寸如下wp受权费降为0。你认为这会增长C#开发者的数量吗?你对WP有什么样的期待?

Jon:由于Windows Phone和Android之间的利益冲突,我以为我最好仍是不要回答这个问题。

图灵访谈:做为一位C#高手,你对C#初学者们有什么建议吗?对于有编程经验的人来讲,你想提醒他们在学习过程当中要注意哪些事?

Jon:若是是个人话,我会首先关注语言的核心方面。不少写给初学者的书(在我看来)从开始的时候就用GUI和数据库的沟通做为第一章的内容,读者们还不知道他们敲下的代码是什么意思呢!这样作就是欲速而不达。我认为应该先要确保你理解这个语言,以后再去学习一堆关于函数库的知识……若是这样,就算你不知道具体某个调用是干什么的,至少你能够理解你面前代码的运行机制,而后你能够经过查看相关的文档来理解剩下的。

最常常被人误解的C#(以及Java)的方面彷佛就是各类变量、对象、以及索引的区别——若是你能够百分之百地肯定你理解了其中的区别,那你就已经上路了。

图灵访谈:在中国不少程序员随着年龄增大会转换角色,变成经理,你对这些程序员有什么样的建议?

Jon:从软件工程师到经理的转换在西方也很是常见,我怀疑虽然这有时是个好事,但不少时候也不是。我常常会看到不少经理在私底下都极想要作本身手下工做范围内的编程工做。我是想说,一个好的经理应该有能力用他们的经验来帮助初级工程师变得更有效率,他们能够分享本身的经验,在管理的同时也能指导他们。

从我的角度上说,我很高兴这两样我都有所涉及——我不想把本身和编程隔离,可是肩负必定的管理责任也是一件好事。


更多精彩,加入图灵访谈微信!

图片描述

相关文章
相关标签/搜索