《左耳听风》[ ] 书籍 [x] 讲座 [ ] 视频
作者 陈皓 出版社 极客时间
阅读日期 2020年9月8日 更新日期 2020年9月8日
相关链接 左耳听风 备注

大致的结构如下: 专栏《左耳听风》 - 图1是一个专栏,个人观点讲述 技术+成长+管理,内容挺多,可以学习学习。

洞悉技术的本质,享受科技的乐趣

技术变现

这个技术培训讲师挺有意思,看作者会一门技术,有企业邀请去做讲师:

  • 去经历大多数人经历不多的,把学习时间花在比较难的地方
  • 写文章就要写没人写过的,或者别人写过,但我能写得更好的
  • 技术和知识是完全可以变现的

这段话镇住了我,web开发水深火热,前几天的小程序培训讲师直说,我是vue粉丝不会react,但拿手本事是 小程序+讲师,一样镇得住。技术是基础,是台阶,到一定范围之后可以试试差异化。

分享的东西 系统、独特,就有价值,注重输出。

这让我想到了 前端早早聊的分享大会,很多主题都是差异化的东西。

提升工作效率,节省的时间和经历用于提升。

如何变现技能?

  • 千里之行,积于跬步 。一个一个的小成功,让别人推荐你、有求于你,获得更多实践和经验,正向反馈
  • 关注有价值的东西 ,市场需求和技术趋势,哪些技能才是真正的供不应求
  • 找到能体现价值的地方,高速发展的公司中,技术人员的价值可以最大化,区别于成熟公司、起步公司。
  • 动手能力很重要,代码中全是细节,有了细节才能更好了解解决方案
  • 关注技术付费点,一个是帮别人挣钱、一个省钱
  • 提升自己的能力和经历,才会让人信任。比如知名开源开发、大厂核心开发
  • 找到有价值的信息源,去找信息的源头,比如 xxx best practice
  • 输出观点和价值观
  • 朋友圈很重要,方便沟通交流

这两篇文章很实用,带给人思考。

一次信息泄露始末

一个应用没有及时升级补丁,造成了信息泄露。进一步讨论了选型、处理。

现在github可以自动检测有问题的 npm包

技术领导力

中国的技术还在加速发展,快速扩张,一种粗放和精耕细作的比较,处在不同的发展阶段。这个和国家社会的发展类似。

一个软件工程师怎么算有技术领导力:

  • 能够发现问题,现有方案的问题
  • 能够提供解决问题的思路和方案,比较方案的优缺点
  • 做出正确的技术决定
  • 更优雅、简单、容易的方式解决问题
  • 正确方式管理团队
  • 创新能力

怎么成长

展示的基础技术,吃透基础。编程+系统

编程
C语言。经典,了解操作系统。
编程范式。培养抽象思维、提高效率、提升质量

比如面向对象编程(C++、Java)、泛型编程(C++、Go、C#)、函数式编程(JavaScript、 Python、Lisp、Haskell、Erlang)等。

算法和数据结构。抽象问题、提高程序的合理性和执行效率。

系统

  • 计算机系统原理、操作系统原理和基础、网络基础、数据库原理。分布式技术架构

这部分先复制了。

计算机系统原理:CPU 的体系结构(指令集 [CISC/RISC]、分支预测、缓存结构、总线、DMA、中断、陷阱、多任务、虚拟内存、虚拟化等),内存的原理与性能特点(SRAM、DRAM、DDR-SDRAM 等),磁盘的原理(机械硬盘 [盘面、磁头臂、磁头、启停区、寻道等]、固态硬盘 [页映射、块的合并与回收算法、TRIM 指令等]),GPU 的原理等。 学习计算机系统原理的价值在于,除了能够了解计算机的原理之外,你还能举一反三地反推出高维度的分布式架构和高并发高可用的架构设计。 比如虚拟化内存就和今天云计算中的虚拟化的原理是相通的,计算机总线和分布式架构中的 ESB 也有相通之处,计算机指令调度、并发控制可以让你更好地理解并发编程和程序性能调优……这里,推荐书籍《深入理解计算机系统》(Randal E. Bryant)。 操作系统原理和基础:进程、进程管理、线程、线程调度、多核的缓存一致性、信号量、物理内存管理、虚拟内存管理、内存分配、文件系统、磁盘管理等。 学习操作系统的价值在于理解程序是怎样被管理的,操作系统对应用程序提供了怎样的支持,抽象出怎样的编程接口(比如 POSIX/Win32 API),性能特性如何(比如控制合理的上下文切换次数),怎样进行进程间通信(如管道、套接字、内存映射等),以便让不同的软件配合一起运行等。 要学习操作系统知识,一是要仔细观察和探索当前使用的操作系统,二是要阅读操作系统原理相关的图书,三是要阅读 API 文档(如 man pages 和 MSDN Library),并编写调用操作系统功能的程序。这里推荐三本书《UNIX 环境高级编程》、《UNIX 网络编程》和《Windows 核心编程》。

学习操作系统基础原理的好处是,这是所有程序运行的物理世界,无论上层是像 C/C++ 这样编译成机器码的语言,还是像 Java 这样有 JVM 做中间层的语言,再或者像 Python/PHP/Perl/Node.js 这样直接在运行时解释的语言,其在底层都逃离不了操作系统这个物理世界的“物理定律”。

所以,了解操作系统的原理,可以让你更能从本质理解各种语言或是技术的底层原理。一眼看透本质可以让你更容易地掌握和使用高阶技术。

网络基础:计算机网络是现代计算机不可或缺的一部分。需要了解基本的网络层次结构(ISO/OSI 模型、TCP/IP 协议栈),包括物理层、数据链路层(包含错误重发机制)、网络层(包含路由机制)、传输层(包含连接保持机制)、会话层、表示层、应用层(在 TCP/IP 协议栈里,这三层可以并为一层)。

比如,底层的 ARP 协议、中间的 TCP/UDP 协议,以及高层的 HTTP 协议。这里推荐书籍《TCP/IP 详解》,学习这些基础的网络协议,可以为我们的高维分布式架构中的一些技术问题提供很多的技术方案。比如 TCP 的滑动窗口限流,完全可以用于分布式服务中的限流方案。

数据库原理:数据库管理系统是管理数据库的利器。通常操作系统提供文件系统来管理文件数据,而文件比较适合保存连续的信息,如一篇文章、一个图片等。但有时需要保存一个名字等较短的信息。如果单个文件只保存名字这样的几个字节的信息的话,就会浪费大量的磁盘空间,而且无法方便地查询(除非使用索引服务)。

但数据库则更适合保存这种短的数据,而且可以方便地按字段进行查询。现代流行的数据库管理系统有两大类:SQL(基于 B+ 树,强一致性)和 NoSQL(较弱的一致性,较高的存取效率,基于哈希表或其他技术)。

学习了数据库原理之后便能了解数据库访问性能调优的要点,以及保证并发情况下数据操作原子性的方法。要学习数据库,你可以阅读各类数据库图书,并多做数据库操作以及数据库编程,多观察分析数据库在运行时的性能。

分布式技术架构:数据库和应用程序服务器在应对互联网上数以亿计的访问量的时候,需要能进行横向扩展,这样才能提供足够高的性能。为了做到这一点,要学习分布式技术架构,包括负载均衡、DNS 解析、多子域名、无状态应用层、缓存层、数据库分片、容错和恢复机制、Paxos、Map/Reduce 操作、分布式 SQL 数据库一致性(以 Google Cloud Spanner 为代表)等知识点。

学习分布式技术架构的有效途径是参与到分布式项目的开发中去,并阅读相关论文。

  • 非同一般的学习能力,能快速学习新技术、关键技术可以深入。
  • 坚持做正确的事
  • 不断提高自己的要求和标准

Google评分卡,0-10分,不同的领域,这里 对照Google评分卡,看看你的技术水平在什么段位?

程序员必备知识

推荐了一些书,略过

CodeReview

“这段代码很棒”,很少听到review的人这样说的,学到了,自己会这么去做的。

GO Docker和新技术

技术敏感、技术先机

技术答疑

加班严重没时间学习怎么办

可能并不在于加班和工作强度大到没时间,关键看你对学习有多少的渴望程度,对要学的东西有多大的热情。这点是非常重要的,因为学习这事其实挺反人性的。反人性的事基本上都是要付出很多,而且还要坚持很久。所以,如果对学习没有渴望的话,或是不能从学习中找到快乐的话,那么其实是很难坚持的,无论你有没有时间。

为什么你能够写出这么多东西

  • 学习的阶段
  • 利益驱动的阶段
  • 记录观点,打脸阶段
  • 和别人交流的阶段

怎么选择自己的人生和职业发展

  • 客观审视自己,面试是最直观的
  • 确定自己想要什么,不可能什么都要,不要受到其他东西的影响
  • 注重长期的可能性,而不是短期的功利。做挑战,多选择
  • 关注自己得到的,少关注失去的,有得有失
  • 不要和大众思维一样。需要权衡

该看第十了