朱赟的技术管理课
朱赟
计算机博士,前 Airbnb 技术经理
48935 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 39 讲
时长 13:23
时长 13:31
朱赟的技术管理课
15
15
1.0x
00:00/00:00
登录|注册

27 | 小议Java语言

规范开发环境,提供合适的工具
规范所有项目的 API,保持统一的风格和模式
所有项目使用统一的文件夹结构
深入了解依赖注入,选择一个好框架
不要重复造轮子
Lambda 的实现
面试经历
研究经历
Java 开发中的常见问题
为什么到了 Java 8 才有 Lambda?
我和 Java 语言的开发者
小议Java语言
参考文章

该思维导图由 AI 生成,仅供参考

今天我和你聊聊 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/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了Java语言的发展历程和技术特点,以及在实际开发中需要注意的问题。作者通过自身经历和与Java开发者的交流,介绍了Java语言的设计和实现。文章首先描述了作者与Java开发者的亲身经历,包括与教授Corky的交流和在Oracle面试的经历。随后,文章解释了Java 8才有Lambda表达式的实现的原因,并探讨了Lambda表达式在编程语言中的复杂性和实现方式。最后,文章指出了Java 8中Lambda表达式的一些局限性,以及编程语言变革的艰难和复杂性。此外,文章还提到了在Java开发中需要注意的问题,如统一使用成熟的技术社区、深入了解依赖注入框架、统一的文件夹结构、规范的API和开发环境等。通过这些内容,读者可以全面了解Java语言的发展历程和技术特点,以及在实际开发中需要注意的问题。整篇文章内容丰富,涵盖了从个人经历到技术细节的多个方面,对于想要深入了解Java语言的读者具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《朱赟的技术管理课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(15)

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

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

    2018-01-12
    18
  • 子悠
    每过段时间看自己以前写的代码都有一种,“我去,这代码哪个傻瓜写的,肯定不是我”的感觉
    2018-01-12
    9
  • 白白白小白
    虽然我是php开发,但是我还是认真的读完就!
    2018-05-07
    5
  • 有福
    为了这个文章直接订阅了专栏
    2018-01-15
    4
  • 飓风
    工具文件夹可能叫util比较合适,个人偏见。
    2018-01-13
    4
  • 闫飞
    第一个例子好像有点不对啊,f返回的是一个匿名函数,所以f(10)得到的是个函数对象,必需要再加一层括号才能求值,得到调用值。 Java用接口的概念和多态来封装函数对象,和C++某些方面有异曲同工之处,但是其stream api和optional类型提供了极好的monad实现。 c++的类型系统对函数式支持更加严格一些,尤其是fp和自动类型推断以及泛型元编程的支持水乳交融,非常巧妙,不像Java尝试用OO来搞定一切。
    2018-01-13
    3
  • 极客时间攻城狮
    吉利
    2018-01-13
    1
    1
  • 王建Tyrion
    上个月刚刚把代码重构一番,按照标准的文件夹规范,上个版本真是自己能把自己看晕(=_=)
    2018-01-12
    1
  • 何慧成
    组织级的规范很重要
    2020-08-30
  • 爱学习的大叔
    我们在开发时基本只停留在语言表面上,只是手到擒来的拿来用,原来在背后有这么多的故事。学习了.
    2019-12-05
收起评论
显示
设置
留言
15
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部