左耳听风
陈皓
网名“左耳朵耗子”,资深技术专家,骨灰级程序员
立即订阅
40357 人已学习
课程目录
已完结 108 讲
0/6登录后,你可以任选6讲全文学习。
开篇词 | 洞悉技术的本质,享受科技的乐趣
免费
01 | 程序员如何用技术变现(上)
02 | 程序员如何用技术变现(下)
03 | Equifax信息泄露始末
04 | 从Equifax信息泄露看数据安全
05 | 何为技术领导力?
06 | 如何才能拥有技术领导力?
07 | 推荐阅读:每个程序员都该知道的知识
08 | Go语言,Docker和新技术
09 | 答疑解惑:渴望、热情和选择
10 | 如何成为一个大家愿意追随的Leader?
11 | 程序中的错误处理:错误返回码和异常捕捉
12 | 程序中的错误处理:异步编程以及我的最佳实践
13 | 魔数 0x5f3759df
14 | 推荐阅读:机器学习101
15 | 时间管理:同扭曲时间的事儿抗争
16 | 时间管理:如何利用好自己的时间?
17 | 故障处理最佳实践:应对故障
18 | 故障处理最佳实践:故障改进
19 | 答疑解惑:我们应该能够识别的表象和本质
20 | Git协同工作流,你该怎么选?
21 | 分布式系统架构的冰与火
22 | 从亚马逊的实践,谈分布式系统的难点
23 | 分布式系统的技术栈
24 | 分布式系统关键技术:全栈监控
25 | 分布式系统关键技术:服务调度
26 | 分布式系统关键技术:流量与数据调度
27 | 洞悉PaaS平台的本质
28 | 推荐阅读:分布式系统架构经典资料
29 | 推荐阅读:分布式数据调度相关论文
30 | 编程范式游记(1)- 起源
31 | 编程范式游记(2)- 泛型编程
32 | 编程范式游记(3) - 类型系统和泛型的本质
33 | 编程范式游记(4)- 函数式编程
34 | 编程范式游记(5)- 修饰器模式
35 | 编程范式游记(6)- 面向对象编程
36 | 编程范式游记(7)- 基于原型的编程范式
37 | 编程范式游记(8)- Go 语言的委托模式
38 | 编程范式游记(9)- 编程的本质
39 | 编程范式游记(10)- 逻辑编程范式
40 | 编程范式游记(11)- 程序世界里的编程范式
41 | 弹力设计篇之“认识故障和弹力设计”
42 | 弹力设计篇之“隔离设计”
43 | 弹力设计篇之“异步通讯设计”
44 | 弹力设计篇之“幂等性设计”
45 | 弹力设计篇之“服务的状态”
46 | 弹力设计篇之“补偿事务”
47 | 弹力设计篇之“重试设计”
48 | 弹力设计篇之“熔断设计”
49 | 弹力设计篇之“限流设计”
50 | 弹力设计篇之“降级设计”
51 | 弹力设计篇之“弹力设计总结”
52 | 管理设计篇之“分布式锁”
53 | 管理设计篇之“配置中心”
54 | 管理设计篇之“边车模式”
55 | 管理设计篇之“服务网格”
56 | 管理设计篇之“网关模式”
57 | 管理设计篇之“部署升级策略”
58 | 性能设计篇之“缓存”
59 | 性能设计篇之“异步处理”
60 | 性能设计篇之“数据库扩展”
61 | 性能设计篇之“秒杀”
62 | 性能设计篇之“边缘计算”
63 | 区块链技术的本质
64 | 区块链技术细节:哈希算法
65 | 区块链技术细节:加密和挖矿
66 | 区块链技术细节:去中心化的共识机制
67 | 区块链技术细节:智能合约
68 | 区块链技术 - 传统金融和虚拟货币
69 | 程序员练级攻略:开篇词
70 | 程序员练级攻略:零基础启蒙
71 | 程序员练级攻略:正式入门
72 | 程序员练级攻略:程序员修养
73 | 程序员练级攻略:编程语言
74 | 程序员练级攻略:理论学科
75 | 程序员练级攻略:系统知识
76 | 程序员练级攻略:软件设计
77 | 程序员练级攻略:Linux系统、内存和网络
78 | 程序员练级攻略:异步I/O模型和Lock-Free编程
79 | 程序员练级攻略:Java底层知识
80 | 程序员练级攻略:数据库
81 | 程序员练级攻略:分布式架构入门
82 | 程序员练级攻略:分布式架构经典图书和论文
83 | 程序员练级攻略:分布式架构工程设计
84 | 程序员练级攻略:微服务
85 | 程序员练级攻略:容器化和自动化运维
86 | 程序员练级攻略:机器学习和人工智能
87 | 程序员练级攻略:前端基础和底层原理
88 | 程序员练级攻略:前端性能优化和框架
89 | 程序员练级攻略:UI/UX设计
90 | 程序员练级攻略:技术资源集散地
91 | 程序员面试攻略:面试前的准备
92 | 程序员面试攻略:面试中的技巧
93 | 程序员面试攻略:面试风格
94 | 程序员面试攻略:实力才是王中王
95 | 高效学习:端正学习态度
96 | 高效学习:源头、原理和知识地图
97 | 高效学习:深度,归纳和坚持实践
98 | 高效学习:如何学习和阅读代码
99 | 高效学习:面对枯燥和量大的知识
左耳听风
登录|注册

73 | 程序员练级攻略:编程语言

陈皓 2018-06-12
为了进入专业的编程领域,我们需要认真学习以下三方面的知识。
编程语言。你需要学习 C、C++ 和 Java 这三个工业级的编程语言。为什么说它们是工业级的呢?主要是,C 和 C++ 语言规范都由 ISO 标准化过,而且都有工业界厂商组成的标准化委员会来制定工业标准。次要原因是,它们已经在业界应用于许多重要的生产环境中。
C 语言不用多说,现今这个世界上几乎所有重要的软件都跟 C 有直接和间接的关系,操作系统、网络、硬件驱动等等。说得霸气一点儿,这个世界就是在 C 语言之上运行的。
而对于 C++ 来说,现在主流的浏览器、数据库、Microsoft Office、主流的图形界面、著名的游戏引擎等都是用 C++ 编写的。而且,很多公司都用 C++ 开发核心架构,如 Google、腾讯、百度、阿里云等。
而金融电商公司则广泛地使用 Java 语言,因为 Java 的好处太多了,代码稳定性超过 C 和 C++,生产力远超 C 和 C++。有 JVM 在,可以轻松地跨平台,做代码优化,做 AOP 和 IoC 这样的高级技术。以 Spring 为首的由庞大的社区开发的高质量的各种轮子让你只需关注业务,是能够快速搭建企业级应用的不二之选。
此外,我推荐学习 Go 语言。一方面,Go 语言现在很受关注,它是取代 C 和 C++ 的另一门有潜力的语言。C 语言太原始了,C++ 太复杂了,Java 太高级了,所以 Go 语言就在这个夹缝中出现了。这门语言已经 10 多年了,其已成为云计算领域事实上的标准语言,尤其是在 Docker/Kubernetes 等项目中。Go 语言社区正在不断地从 Java 社区移植各种 Java 的轮子过来,Go 社区现在也很不错。
如果你要写一些 PaaS 层的应用,Go 语言会比 C 和 C++ 更好,目前和 Java 有一拼。而且,Go 语言在国内外一些知名公司中有了一定的应用和实践,所以,是可以学习的(参看:《Go 语言、Docker 和新技术》一文)。此外,Go 语言语法特别简单,你有了 C 和 C++ 的基础,学习 Go 的学习成本基本为零。
理论学科。你需要学习像算法、数据结构、网络模型、计算机原理等计算机科学专业需要学习的知识。为什么要学好这些理论上的知识呢?
其一,这些理论知识可以说是计算机科学这门学科最精华的知识了。说得大一点,这些是人类智慧的精华。你只要想成为高手,这些东西是你必需要掌握和学习的。
其二,当你在解决一些很复杂或是很难的问题时,这些基础理论知识可以帮到你很多。我过去这 20 年从这些基础理论知识中受益匪浅。
其三,这些理论知识的思维方式可以让你有触类旁通,一通百通的感觉。虽然知识比较难啃,但啃过以后,你将获益终生。
另外,你千万不要觉得在你的日常工作或是生活当中根本用不上,学了也白学,这样的思维方式千万不要有,因为这是平庸的思维方式。如果你想等我用到了再学也不晚,那么你有必要看一下这篇文章《程序员的荒谬之言还是至理名言?》。
系统知识。系统知识是理论知识的工程实践,这里面有很多很多的细节。比如像 Unix/Linux、TCP/IP、C10K 挑战等这样专业的系统知识。这些知识是你能不能把理论应用到实际项目当中,能不能搞定实际问题的重要知识。
当你在编程的时候,如何和系统进行交互或是获取操作系统的资源,如何进行通讯,当系统出了性能问题,当系统出了故障等,你有大量需要落地的事需要处理和解决。这个时候,这些系统知识就会变得尤为关键和重要了。
这些东西,你可以认为是计算机世界的物理世界,上层无论怎么玩,无论是 Java NIO,还是 Nginx,还是 Node.js,它们都逃脱不掉最下层的限制。所以,你要好好学习这方面的知识。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《左耳听风》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(75)

  • emoji
    几个问题,
    1.您一下子提到了四门语言,我们这些后生究竟应该精通一门呢,还是多元呢?如果多元,深度是个问题?
    2.总有一些经常变和亘古不变的东西,数据结构,算法,网络,计算机基本原理,这些都是很少改变的,而且也需要花很多精力和时间去学习,您提到的几个语言都是经久不衰的,也需要花精力和时间去学习,而时间的总量是固定的,那么我们如何取舍呢?
    3.语言本身只是工具,能不能用学到的语言解决问题,这个很关键,不是吗?能不能这么理解,学另一个语言,是因为本语言在某些特定的问题上遇到瓶颈,只能用别的语言来解决?

    作者回复: 1)我把Java放在第一位,就是说Java很重要。C语言要学。C++可以跳过,学了C语言,Go语言很自然就学会了。编程语言不复杂的,多花点时间没坏处。

    2)不要取舍,排优先级。这些基础知识都是计算机科学专业大学本科的知识,4年你能拿得出来吗?

    3)Java语言让你不用关注底层,而关注业务和架构,C语言让你关注底层原理,Go语言介于C和Java之间,掌握多门语言会让你对他们有比较。他们各有各的适用场景。

    如果你想成为一个高手,多学几门语言是必须的!

    2018-06-12
    44
  • D瓜哥
    读《Effective Java》时,建议学一学Google Guava库,这两个是出之一人之手。书中的很多思想直接就在Guava库中提现出来了。那种感觉,非常棒。
    2018-06-12
    25
  • akaQin
    谭浩强是真的坑。。竟然还被用作了大学教材误人子弟
    2018-06-12
    15
  • 李沛霖-程序猿
    C#呢?它的标准和发展现在都要好过java,
    2018-06-12
    12
  • zliweijk
    为什么大学老师不是有经验的编程工程师,而是毕业直接任教的,读大学时几乎没有听过老师说现在流行什么技术,什么样的企业用什么样的技术比较多,应届生如何才能更好找到适合的工作
    2018-06-12
    9
  • 给我二两面
    Go语言确实很简单,我花了一周时间读了本《go programming language》就可以上手写了。如果你已经会了一门语言,再学习其他编程语言时,要从语言特性角度去学(比如支不支持闭包,如何实现类继承机制,包管理机制是什么,静态作用域还是动态作用域),就会发觉学的非常快。语法细则看一遍即可。实际写代码时,IDE会给你充分提示,静态语言尤是。写着写着就熟练了。
    2018-06-12
    8
  • D瓜哥
    设计模式方面,我更推荐《大话设计模式》程杰著,清华大学出版社出版。
    这本书以对话的方式授业解惑;每个模式也是以故事的方式循序渐进地推进,直至设计模式。
    另外,难能可贵地是,它还把过去的关于设计模式的几本经典书籍的重点知识摘抄融入正文中。并以黑体标注。强烈推荐!
    2018-06-12
    1
    7
  • 胖胖的奥利奥
    刚开始学的PHP,后面再学习C语言之后就会发现,其实很多语言的实现都有这些底层语言的影子

    作者回复: 是的。学得多就会越学越快

    2018-06-12
    7
  • LI
    耗子叔推荐的书都很不错,但是实际中没有遇到也没有办法深刻理解
    2018-06-12
    6
  • 云学
    搞了8年的c c++,正在接触java,不同的语言确实可以开阔思维,写出更好的代码
    2018-06-12
    4
  • Dawn
    皓子哥,我毕业3年一直做PHP,现在公司又做前端居多,没有code review,而且永远在写业务。
    产品流量稍微大一点,后端就被C++团队接手了,被发配写管理后台。
    前段时间特别犹豫要不要转Java。
    看了您的文章,坚定了我转型的决心,为了自己的长远发展,重头开始!
    2018-07-09
    3
  • kursk.ye
    耗子,两个问题。
    (1)你总是说“继承需要给子类暴露一些父类的设计和实现细节”,可是我想了想,除了重写要知道父类方法的参数类型这种必要信息,没有暴露太多细节啊,能不能举例说明哪些信息是不必要的暴露。不过我完全赞成你说继承更多是为了多态。
    (2)另外,我每次看编程类的书,其实不是看书,而是在码书,因为很多情况下我只有把书上例子实现一遍,把玩一下代码我才能理解,所以我才能真正理解,这就导致我书“看”得很慢,你以前blog里推荐的JavaScript definition guide我就是这么码完的(不知道什么原因我发现你这次介绍前端时没有介绍这本书),我不知道你是怎么解决这个问题,因为看你这份书单,我觉得退休前能看完已经不错了,我今年38岁
    2018-06-21
    1
    3
  • 小波波孙
    讲讲Python吧
    2018-06-20
    3
  • 多米
    明显golang
    2018-06-12
    3
  • cosmos lee
    感谢皓叔的推荐。我现在公司用的是php做开发,自己目前在学习c,之后想继续学习c++再到java。但是皓叔前面说java的竞争力最强,那么是不是尽快开始入门java更好呢?

    作者回复: 可以啊

    2018-06-12
    3
  • 风萧萧
    “如果你想看纸书的话,The Go Programming Language 一书在豆瓣上有 9.2 分,但是国内没有卖的。”这本书英文原版国内有引进,也有中译本《Go 程序设计语言》。
    2018-08-15
    2
  • Yayu
    好厉害,这个课程可能是我之前购买所有学习资料里最超值的一份。大牛的经验是无价之宝。
    2018-08-11
    2
  • myco 前
    想请教皓哥一个问题:我是计算机专业的同学,工作后写了几年Java;想通过看APUE同时捡起来C和类Unix系统;但是开始敲起书上代码的时候发现系统的头文件远不像jdk代码那样文档清晰,感觉难以入门,不知道如何找系统函数文档,如何了解系统调用底层的实现,有点理不清头绪。为了避免陷入X-Y问题,我再说下我的目的:我目标是想学习C,了解类Unix系统底层的东西。想问下皓哥和同学们又啥好的建议?

    作者回复: 挺好的,先学C,再学Uinx。文档谷歌一下就可以找到:C语言的:https://en.cppreference.com/w/c 及 https://www.gnu.org/software/libc/manual/ ,Linux的:http://man7.org/linux/man-pages/man2/syscalls.2.html

    2018-06-29
    1
    2
  • kuna
    您好,我想问问您对 rust 语言怎么看,相对于 C++ 来说是否有某些场景可以替代?Stackoverflow 的调查显示 rust 连续几年排名第一 most loved dreaded and wanted language,但从社区反映来看口碑不佳,您认为是否有深入了解必要,谢谢!

    作者回复: Rust我还是喜欢的,不过我也是在观望中。因为我这篇文章内容太多了,所以只能选择主流的,这样才能确保不让大家走弯路,所以我没提。对于你的这个问题,我个人建议,就个人兴趣是可以深入了解的,但是就职业生涯来说,我则是持保守立场的。

    2018-06-19
    2
  • 兔子ORZ
    推荐那本《seven languages in seven weeks》(7周7语言)读起来很爽:)
    2018-06-15
    2
收起评论
75
返回
顶部