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

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


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

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

  1. 乔恩·斯凯特(Jon Skeet)-编程的查克·诺里斯(Chuck Norris)

    by Prosper Otemuyiwa 通过Prosper Otemuyiwa 乔恩·斯凯特(Jon Skeet)-编程的查克·诺里斯(Chuck Norris) (Jon Skeet - The ...

  2. 向Stack Overflow上排名第一的大神Jon Skeet提问!

    Jon Skeet 谷歌软件工程师,微软资深C# MVP,拥有10余年C#项目开发经验.自2002年来,他一直是C#社区.新闻组.国际会议的活跃技术专家和Stack Overflow总排名第一的用户, ...

  3. Jon Skeet's C# and .NET articles and links

    Jon Skeet's C# and .NET articles and links http://jonskeet.uk/csharp/ http://codeblog.jonskeet.uk/

  4. 计算机考试不用输入扩展名吗,本周末的 计算机等级考试,如果不想考0分,一定要花2分钟看完...

    原标题:本周末的 计算机等级考试,如果不想考0分,一定要花2分钟看完 嗨喽~下午好!我是超甜的小虎 泰戈尔的爱情诗<世上最远的距离>里有一段"世上最远的距离不是生与死的距离,而是 ...

  5. java 隐藏地址栏参数_要想在浏览器的地址栏上的URL中隐藏传输的参数,需要将form标签的method属性值设置为( )。 (5.0分)_学小易找答案...

    [填空题]若在JSP页面的不同作用域中有相同名称的对象,且EL表达式中又省略了相应的作用域类型名,则系统将会按照 . . . 的先后顺序查找相应对象. (20.0分) [简答题]AJAX异步请求过程中 ...

  6. 励志!26岁单臂博士生:我想在科研的道路上发更多高质量论文

    "人生应该坚持不懈地努力."尽管3岁时因车祸失去右臂,只能左手握笔,袁鑫的字却力透纸背,正如他的人生,坚韧有力. >>>> 靠左手敲代码,武汉科技大学计算机 ...

  7. 成考本科计算机找工作有用吗,就是想问问成人高考的学历 到底有多大用,找工作好找么?...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 最近一直有同学提问: "成人高考的本科学历有用吗?我想参加成人高考 我知道成人本科能考公务员能评职称 就是想问问成人高考的学历 到底有多大用,找 ...

  8. 想学习编程,该怎么开始,需要多长时间?

    想学习编程,该怎么开始,需要多长时间? 其实学编程也没有啥特别的方法,和我们没基础学驾照差不多. 考A照.B照还是C照,我们先得拎清,它们的用途存在一定差异 .一样的,学编程是学C,Java.Pyth ...

  9. 不想打工了,手头上仅有5万元,想回农村做养殖,能养什么?

    "不想打工了,手头上仅有5万元,想回农村做养殖,能养什么?"这个问题问得有点早了. 为什么?你忽视了前提条件. 你首先应该这样问"不想打工了,手头上仅有5万元,能想回农村 ...

最新文章

  1. Android开发之大位图压缩水印处理
  2. PHP 字符处理 加密解密 函数收集
  3. docker 开发常用命令总结
  4. Android性能优化之虚拟机调优
  5. 32tomcat的目录结构
  6. 如何有效申请TI的免费样片
  7. [Kaggle] Spam/Ham Email Classification 垃圾邮件分类(BERT)
  8. 异常的分类 java 1615309080
  9. linux异常级别,linux性能异常定位之进程级别
  10. 2017-08-16 BEX5下集成FullCalendar
  11. Linux NAT基本流程与实现技巧
  12. 0.0 研磨设计模式
  13. mysql读写分离如何保证数据同步_MySQL 主从同步 、 MySQL 读写分离
  14. ubuntu 关机后自动重启(并没有解决,服了)
  15. golang学习之五:error、painc、recover
  16. 做嵌入式开发经历(三).绝知此事要躬行
  17. 【Java】文件管理器
  18. 蚂蚁集团CEO宣布辞职,发生了什么?
  19. java文件下载错误提示_java文件下载出错
  20. C++多线程技术--API

热门文章

  1. 数据结构——Prim法最小树生成
  2. 08.音频系统:第003课_Linux音频驱动程序:第005节_DAPM_widget_route_path
  3. 【狂神说笔记——Java基础03-方法】
  4. XY310 4G 安卓智能核心板(虎贲T310平台)
  5. debian上硬盘休眠工具hdparm使用方法总算是弄清楚了
  6. Q版疯狂大炮游戏android源码下载
  7. 医号馆门诊管理软件SaaS系统——药品出入库管理
  8. 学习git与github
  9. Win10系统删除所有自带应用后重启系统导致的资源管理器无线卡死重启的解决方案
  10. windows 10系统的若干调优思路