朱赟的技术管理课
朱赟
计算机博士,前Airbnb技术经理
立即订阅
11176 人已学习
课程目录
已完结 39 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 | 从工程师到管理者,我的思考与实践
免费
01 | 职场分身术:从给答案到做引导
02 | Bug引发事故,该不该追究责任?
03 | 每个工程师都应该了解的:A/B测试
04 | 如何帮助团队成员成长
05 | 当我们给别人提意见时,要注意些什么?
06 | 每个工程师都应该了解的:聊聊幂等
07 | 当别人给我们提意见时,该如何应对?
08 | 说说硅谷公司中的一对一沟通
09 | 每个工程师都应该了解的:大数据时代的算法
10 | 项目延期了,作为负责人该怎么办?
11 | 管理和被管理:期望值差异
12 | 每个工程师都应该了解的:数据库知识
13 | 管理者在进行工作分配时,会考虑哪些问题?
14 | 硅谷人到底忙不忙?
15 | 每个工程师都应该了解的:系统拆分
16 | 技术人如何建立个人影响力?
17 | 管理者不用亲力亲为:关键是什么?
18 | 每个工程师都应该了解的:API 的设计和实现
19 | 硅谷面试:那些你应该知道的事儿
20 | 项目管理中的三个技巧
21 | 每个工程师都应该了解的:中美在支付技术和大环境下的差异
22 | 不要做微观的管理者
23 | 如何处理工作中的人际关系?
24 | 编程语言漫谈
25 | 兼容并包的领导方式
26 | 如何做自己的职场规划?
27 | 小议Java语言
28 | 如何激发团队人员的责任心
29 | 说说硅谷互联网公司的开发流程
30 | 编程马拉松
31 | 工程师、产品经理、数据工程师是如何一起工作的?
32 | 硅谷人如何做 Code Review
33 | 技术人的犯错成本
34 | 如何从错误中成长?
35 | 理解并建立自己的工作弹性
36 | 如何对更多的工作说“不”
尾声:成长不是顿悟,而是练习
新书 |《跃迁:从技术到管理的硅谷路径》
朱赟的技术管理课
登录|注册

27 | 小议Java语言

朱赟 2018-01-12
今天我和你聊聊 Java 语言,这也是我使用最久最熟悉的编程语言之一。
读博士的时候我做过两个领域。刚刚进入莱斯大学的时候进的是程序语言设计组。组里当时有两个教授,分别做两个领域。
一个是瓦利德·塔哈( Walid Taha ),主要研究领域是类型系统和嵌入式系统的程序语言设计。另一个是罗伯特·卡特赖特( Robert Cartwright),他喜欢大家叫他 Corky,主要研究的是 Java 的理论和实现。
Corky 教授的研究项目中,有一个叫做 DrJava 的项目。DrJava 是一个轻量级的 Java 开发环境。主要是给在校学生用的,它提供了一个简单直观的交互界面,可以实现类似 Shell 的交互式 Java 代码执行方式。DrJava 在美国大学里有很多人使用,目前已经超过两百万的下载量。
Corky 是个典型的美国教授,与生俱来的花白卷发,清癯的脸庞上一双眼睛炯炯有神,高挺的鼻梁。他常年都是和学生一样的打扮:T 恤牛仔裤加运动鞋。出入的时候,背上总是背着一个蓝灰色的电脑包。
当他不谈学术的时候,你会觉得他有着与年龄不相称的单纯和童真。他会和一群学生一起吃系里免费的披萨和点心,也会和其他教授一起站在系里走廊上聊天和哈哈大笑;然而一旦你和他讨论起 Java,他就变得滔滔不绝,整个人散发出特别的魅力。他对 Java 的理解十分深入,我每次和他对话都颇有收益。
虽然我的导师是瓦利德(Walid),但同在一个语言组,平时的研讨班都在一起,我也就有了很多的机会和 Corky 一起讨论各种程序语言的特性和实现。也就是在那个时候,我对 Java 语言有了比较多深层次的了解。

我和 Java 语言的开发者

我的硕士论文是独立实现的一个程序设计语言,包括它的解释编译和用户界面。这个语言主要用于机器人系统的嵌入式编程和仿真,曾经在一家石油公司的井下控制系统开发中被使用。不过因为我导师的离开和种种其他原因,我博士生涯的后三年转了另一个导师做生物信息学的数据分析和建模。
因为有程序设计语言的研究经验,博士毕业找工作的时候,也投了份简历在 Oracle 的 Java 语言开发组。也因为有这样相应的背景,我很顺利地拿到了 Java 核心类库 (Java Core Library) 开发小组的 Onsite 面试机会。
我去面试的时候应该是 2012 年底,当时面试的那个小组一共好像只有七八个人的样子。Oracle 的面试大部分是白板和聊天,和现在比较主流的面试,上机做题并无 Bug 运行的体验很不相同。我介绍了自己的硕士毕业设计,然后就谈起 Java 新的库或版本可能会增加哪些支持。
2012 年底的时候,Scala 和 Clojure 刚刚火起来不太久,Java 还没有对 Lambda 的支持。而当时整个 Java 团队也正在考虑这件事。话题牵扯到了 Lambda 的实现,正好是我非常熟悉的话题,因为我的导师瓦利德( Walid )主要的研究领域就是函数式语言,而对 Lambda 的实现,也是函数式编程语言的核心。
具体的讨论细节我已经不记得了,不过有两点感触颇深:一是他们对于选择哪些函数进核心库( Core Libarary )非常谨慎。Java 早期是很轻量级的,后来的版本功能越来越强大,但是语言本身也越来越沉重,这也是很多人喜欢 Scala 的原因。
二是实现函数库的语言开发者对每个函数的精度和运行时间的要求到了令人发指的程度,听说他们有时候读无数的论文,看无数的实现,作大量的比较,就只是为了敲定到底应该在最终的函数中使用哪一种实现方式。
比如浮点数是有舍入误差( Rounding Error )的,那么一个数值计算中先算哪一步、后算哪一步带来结果都可能是不同的;而实现中的考虑,往往为了小数点后面十几位以后的一个 1,组里也要反复斟酌很久。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《朱赟的技术管理课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(14)

  • GeekAmI
    Java看了两周,找了一份工作,以战养兵。期待安姐开设Java系列的技术高阶课程!

    池建强回复: 我去劝劝,看是否有第二季

    2018-01-12
    13
  • Silence
    每过段时间看自己以前写的代码都有一种,“我去,这代码哪个傻瓜写的,肯定不是我”的感觉
    2018-01-12
    7
  • 有福
    为了这个文章直接订阅了专栏
    2018-01-15
    3
  • 白白白小白
    虽然我是php开发,但是我还是认真的读完就!
    2018-05-07
    2
  • zhuhf
    工具文件夹可能叫util比较合适,个人偏见。
    2018-01-13
    2
  • 闫飞
    第一个例子好像有点不对啊,f返回的是一个匿名函数,所以f(10)得到的是个函数对象,必需要再加一层括号才能求值,得到调用值。

    Java用接口的概念和多态来封装函数对象,和C++某些方面有异曲同工之处,但是其stream api和optional类型提供了极好的monad实现。

    c++的类型系统对函数式支持更加严格一些,尤其是fp和自动类型推断以及泛型元编程的支持水乳交融,非常巧妙,不像Java尝试用OO来搞定一切。
    2018-01-13
    2
  • 哈哈哈,你才是笨蛋
    吉利
    2018-01-13
    1
    1
  • 王建Tyrion
    上个月刚刚把代码重构一番,按照标准的文件夹规范,上个版本真是自己能把自己看晕(=_=)
    2018-01-12
    1
  • 柠檬树
    我们在开发时基本只停留在语言表面上,只是手到擒来的拿来用,原来在背后有这么多的故事。学习了.
    2019-12-05
  • mikejiang
    java语言用得不多,没想到居然也支持Lamda了
    2019-11-25
  • JasonYe
    Scala语言怎样
    2019-09-04
  • vwarship
    实现闭包大体有两种方式。能不能用源代码展示一下?
    2018-10-08
  • michael
    参与设计一门语言再学习应用语言,真是得心应手
    2018-09-13
  • iLeGeND
    为什么留言不显示呢
    2018-05-21
收起评论
14
返回
顶部