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

24 | 编程语言漫谈

全栈工程师的定义和需要掌握的编程语言
编程语言的复杂性和灵活性
并发编程思维的重要性
编写测试代码的重要性
SQL的重要性
后端工程师和前端工程师要熟练掌握对方的语言
推荐Python作为脚本语言
基本掌握一门语言后要做实践和练习
初学者不要纠结“先学哪种语言”
搭建方便协作、性能过得去、可读性好、模块化好、可重用、易扩展的代码库
面临的语言挑战
使用Cython提高Python代码性能
使用Python编程
大数据处理和建模
用离散数学和语言逼近连续函数
语法器、词法器、编译器、解释器的原理及实现
不同类型的程序语言的本质区别
Lambda的演算和模型
函数中的递归、迭代及其实现原理
类型和类型系统
图灵机和状态机的计算理论
新人学编程如何做到触类旁通
自己最擅长的语言特性
总结
对软件工程和编程语言的看法
进入互联网公司工作
博士阶段的生物信息学
使用OCaml实现机器人仿真和控制的语言
硕士期间的学习内容
思维流动
编程语言漫谈

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

编程语言是一个已经被谈到耳朵发烫的话题,很多工程师都聊过。似乎无论怎么写,要么落入老生常谈的俗套,要么就是一堆理论上正确,但是对学习和理解编程语言并无多大益处的内容。
我跟池老师说:这篇可说的内容太多,反而不知道从何说起。池老师建议我:“任思维流动,想到哪写到哪。比如你可以点评一下自己最擅长的语言特性,比如新人学编程如何做到触类旁通,最后一通百通。”回想一下,这两个思路我似乎都用过了,以前写过点评 Ruby 和 Java 的文章,也写过自己的编程之路,今天说点平时不说的内容,可能不讨喜,但至少可以提供一些思考。
我在莱斯大学读硕士期间,课题就是程序语言和编译器设计。翻看当时用到的教科书和论文,需要我学习和掌握的内容大概都是这样的:
一些关于图灵机和状态机的计算理论
类型和类型系统,类型系统的证明和推断
函数中的递归、迭代及其实现原理
关于 Lambda 的演算和模型
命令式程序语言、函数式程序语言、逻辑式程序语言、以及面向对象程序语言的本质区别
语法器、词法器、编译器、解释器的原理及实现
所以,很多人刚开始接触编程语言,第一反应是怎么用、好不好用。而我看到一门语言,第一反应是这门语言是怎么实现的,类型系统是什么,计算能力的边界在哪等等。最早接触的几种语言,比如 C、OCaml、Schema、Python、Java 等,都被我拿着“手术刀”解剖过。那个时候,我想到最多的成语是庖丁解牛和洞若观火。
我的硕士毕业设计是用 OCaml 去实现一个机器人仿真和控制的语言,有点像 Matlab 里的机械模拟库。研究的目的,说白了就是不断用 0/1 这样的离散数学和语言,去逼近物理世界中很常见的连续函数(如导数和积分),而挑战的就是有限的计算资源和时间。
后来到了博士阶段,课题变成了生物信息学,那个时候常常要做的是生物学中的大数据处理和建模。由于业界很多数据科学相关的库都是 Python 实现的,于是我使用到了大量的 Python 编程。
不过在处理海量数据的时候,Python 的性能就成为一个很大的瓶颈。经常遇到的情况是,一个脚本或者一个函数库,其复杂度在一个临界点后是指数增长的,稍微大一点的数据量,动不动就要跑几天,或者干脆跑不出来。
于是我又开始学习并使用一种叫做 Cython 的语言。这种语言在语法方面算是 Python 和 C 的混合体,其编译器可以将 Cython 代码转化为 C 并编译成性能很好的可执行代码。那时候除了建模需要的数据清洗和数据模型的训练,另一个挑战就是写出高性能的代码。
博士毕业后,我没有选择留在学术界,而是进入了互联网公司工作。
Square 和 Airbnb 都是以 Ruby 和 Java 为主要编程语言的公司。这个时候,语言上面临的挑战已经不再是其计算能力或者性能,而是如何在工程中用适当的语言搭建出一个方便协作、性能过得去、可读性好、模块化好、可重用、易扩展的代码库。
很多时候工程师们争论的问题,不再是对和错、是与否的问题,而是每个人的观点应用到相关的场景中的时候带来的优劣比较。也就是说,是不是把合适的技术用到了正确的场景中。平衡是我们在这个阶段要着重考虑的,这种平衡有时候是时间复杂度,有时候是空间复杂度。
最近几年我主要使用 Ruby 和 Java 编程,这两门语言的优缺点就不在这里说了,网上有很多类似的观点。关于 Java,后面我会写一篇“Java 开发的中常见问题”,下面我会来简单聊聊自己对软件工程和编程语言的一些看法,有的是点评别人的观点,有的是我自己的观点,分享给你,希望可以给你带来一些启发。
1 初学者不要纠结“先学哪种语言”,这种时间花的很不值得,还不如随便挑一个语言,跳进去游几圈试试。对于工程师来说,学习第一门编程语言只是万里长征的第一步,只要你还在这个领域,就不可能只学一种语言,只会一种语言的工程师根本就不能称之为工程师。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

编程语言漫谈:探索学习与应用 作者以个人学术和工作经历为线索,分享了对编程语言的见解和经验。文章首先介绍了作者在学术阶段学习编程语言和编译器设计的经历,强调了对编程语言实现原理和设计原理的关注。随后,作者分享了在生物信息学研究和互联网公司工作中对Python、Cython、Ruby和Java的应用情况。总结经验时,作者提出了几点建议:初学者应尝试多种语言;掌握一门语言的基本特性后要进行实践和练习;后端工程师和前端工程师都应该熟练掌握对方的编程语言;SQL是一门重要的语言,应该熟练掌握;并发编程思维对于程序员至关重要。 本文通过作者的学习和工作经历,深入探讨了编程语言的学习和应用,为读者提供了宝贵的经验和建议。文章内容丰富,涵盖了编程语言的理论和实践,适合对编程语言感兴趣的读者阅读参考。同时,作者提出了关于全栈工程师的讨论题,引发读者思考。文章内容既有理论深度,又有实践经验,对于技术人员具有一定的指导意义。

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

全部留言(16)

  • 最新
  • 精选
  • 刘剑
    朱老师太牛了,你有做全栈的天赋。 我觉得朱老师应该问你是愿意将来成为一个全栈工程师?还是一个技术专家? 这两种的思维是完全不一样的。简单的说全栈是广度,技术专家是深度。但我想说的全栈工程师不能仅仅理解为前端+后端,全栈的核心是:世界充满了未解之谜,通过探索去解开自己感兴趣的谜底 全栈工程师学的东西越多,学习能力也变得越强,学习能力越强进入新领域就越快。这是我对全栈工程师的理解,如有不对之处还请朱老师指正。

    池建强回复: 理解的挺好。其实人们真正进入了高手模式,就能触类旁通,举一反三。这时候,你几乎可以做任何工作。 全栈只是工作的一种。

    2018-01-05
    17
  • 女巫在寒江
    发现安姐所提到的每一点都是自身所缺乏的…现在刚从C语言转到Java开发,只能说业务功能开发好了,但数据读取,一些容错考虑都浅得很

    池建强回复: 多写多练,多读专栏

    2018-01-12
    4
  • susu
    想了解一下,公司招聘的时候是否会更看重候选人使用特定语言的年限,还是相关领域的经验或者学习能力?

    池建强回复: 可以读读硅谷面试那篇,你提到的能力都会有考核。国内面试流程没有那么复杂,重点会考察使用语言的能力而不是年限。学习能力也需要,但更多是工作中体现出来的

    2018-01-05
    1
  • Yezhiwei
    想看看安姐的代码
    2018-01-06
    19
  • Y024
    除了并发和分布式思维,还得有量级的意识。
    2018-01-05
    8
  • 刘宗尧
    怎么理解语言的计算边界?
    2018-01-05
    1
  • 棋子
    sql、java、vue、python、测试框架、分布式思维,如java 的ForkJoinPool
    2022-06-07
  • Aloha12
    老师,我也是生物信息方面的,请问你用python分析数据时会用多线程处理吗?
    2020-11-01
  • 子郁
    写的真好,我 2 年多后才回复的留言,会看到吗? 安姐会看到么。
    2020-08-12
  • 爱学习的大叔
    如果你不能用一种编程语言的基本特性写出好代码,那换成另外一种语言也无济于事,你会写出同样差的代码。说的很对。
    2019-12-02
收起评论
显示
设置
留言
16
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部