成为一名更好的软件工程师的简单方法

世界上最好的专家解释了他们如何解决最困难的问题; 免费。

有很多资源可以教您如何解决算法问题,以及通常如何获得技术面试机会。 很多人和公司教如何被录用。 但似乎很少有人和公司关注您被录用后的情况。

做事和交付解决问题的软件是最好的增长方式,但是通常这种增长是有极限的。 并非每个项目都必须每秒处理数千个请求,处理TB的数据或提供可能的最佳性能。 但是即使在那种情况下,也有一种简单(尽管不容易)的方法来学习一两个关于困难和具有挑战性的计算问题的东西:阅读白皮书。

我第一次看到白皮书是在团队负责人的桌子上。 它被打印在A4清单上,并在左上角装订在一起。 我给了它一个简短的外观,然后想到:”嗯,也许我也应该尝试阅读一些白皮书。” 快速谷歌搜索,这里就是” Google文件系统”。 十五页,没有复杂的数学模型,熟悉的术语(例如”元数据”,”副本”,”高可用性”)应该是一个很好的白皮书。

我开始阅读,却惊讶地发现它是用一种普通的语言编写的,这种语言易于理解和遵循。 案文密密麻麻,充满了并非总是熟悉的术语,但它不是充满了难以理解的形式结构的”学术”文本。

但是,很快,我开始对细节感到不知所措。 在第二节的中间,我的思想在徘徊。 我不得不一直专注于文本,以便以后才发现我完全忘记了该段的含义。 我意识到我无法以与 交 络或技术文章上的文章相同的方式阅读白皮书; 它需要更严肃的方法。

> Ideas from the first two pages of “The Google File System” whitepaper

因此,我打印了白皮书并将其装订在左上角,拿着钢笔和笔记本,预约了一个半小时的会议,没有邀请任何客人,然后开始使用该纸。 有几节? 共有9个部分:简介,设计概述,系统交互,……,结论。 好的,前十页包含问题的定义,体系结构的概述,然后详细说明如何解决各种挑战。 其余页面涉及在生产,结论和进一步工作中运行系统。 现在我可以开始阅读了……

在分配的半小时内,我几乎可以到达第3部分。为避免掉落”堆栈溢出”,我记下了文档的每个部分,突出显示了打印输出中最重要的部分,并分别写下了要学习或学习的内容。 再次访问:POSIX API,Linux vnode层,B树,带有校验和的数据损坏检测,O_APPEND模式等等。

如何阅读技术书籍

获得真正理解的个人经验,而不是幻想

> Ideas from the first two pages of “The Google File System” whitepaper organized when taking notes

除了系统地解决问题的方法外,该阅读还为我提供了一些技术模式的示例(我们只有一个母版,但仅适用于元数据并将其全部保存在内存中),这使我难以确定 事物(O_APPEND模式或写时复制技术),以及如果有兴趣深入研究特定主题的参考列表。

我的下一个项目基于druid,在阅读其文档时,我发现了对启发设计的白皮书的引用。 因为我已经知道演习,所以我将它们打印出来,装订在左上角,然后开始一页一页地阅读。 这花费了大量时间,但是好处是值得的。 了解系统的基础知识可以使其更容易使用。 它允许设计问题的解决方案,而不是寻找使事情起作用的技巧。

作为从事分布式系统工作的后端软件工程师,我发现这些白皮书非常有见地:

· Google文件系统-分布式文件系统。 IIUC GFS启发了HDFS — Hadoop的文件系统—一种用于大数据解决方案的框架。
https://static.googleusercontent.com/media/research.google.com/ru//archive/gfs-sosp2003.pdf

· BigTable —启发HBase的分布式键值存储,也是Hadoop的组件。
https://static.googleusercontent.com/media/research.google.com/ru//archive/mapreduce-osdi04.pdf

· MapReduce —一种用于处理大型数据集(即大数据)的编程模型
https://static.googleusercontent.com/media/research.google.com/ru//pubs/archive/36632.pdf

· Dremel —一种用于查询只读嵌套数据的系统,”能够在几秒钟内对万亿行表运行聚合查询。” 它还描述了什么是”列存储格式”。
https://static.googleusercontent.com/media/research.google.com/ru//pubs/archive/36632.pdf

· Spanner-挑战CAP定理的分布式数据库
https://static.googleusercontent.com/media/research.google.com/ru//pubs/archive/43438.pdf

· Borg-启发Kubernetes的集群管理系统
https://static.googleusercontent.com/media/research.google.com/ru//pubs/archive/43438.pdf

· Chubby-分布式锁定服务(即分布式互斥锁)
https://static.googleusercontent.com/media/research.google.com/ru//archive/chubby-osdi06.pdf

· Goods-一种大规模组织结构化数据集的方法
https://static.googleusercontent.com/media/research.google.com/ru//pubs/archive/45390.pdf

· Ubiq-流数据处理系统。
https://static.googleusercontent.com/media/research.google.com/ru//pubs/archive/45805.pdf

该列表绝不是详尽无遗的。 还有许多其他出色的论文(也有许多白皮书看起来更像是营销材料),其中世界上最好的专家向他们解释了问题以及如何解决该问题。 这是提高软件工程水平的很好资源。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年5月13日
下一篇 2020年5月13日

相关推荐