世界上最好的专家解释了他们如何解决最困难的问题; 免费。
有很多资源可以教您如何解决算法问题,以及通常如何获得技术面试机会。 很多人和公司教如何被录用。 但似乎很少有人和公司关注您被录用后的情况。
做事和交付解决问题的软件是最好的增长方式,但是通常这种增长是有极限的。 并非每个项目都必须每秒处理数千个请求,处理TB的数据或提供可能的最佳性能。 但是即使在那种情况下,也有一种简单(尽管不容易)的方法来学习一两个关于困难和具有挑战性的计算问题的东西:阅读白皮书。
我第一次看到白皮书是在团队负责人的桌子上。 它被打印在A4清单上,并在左上角装订在一起。 我给了它一个简短的外观,然后想到:"嗯,也许我也应该尝试阅读一些白皮书。" 快速谷歌搜索,这里就是" Google文件系统"。 十五页,没有复杂的数学模型,熟悉的术语(例如"元数据","副本","高可用性")应该是一个很好的白皮书。
我开始阅读,却惊讶地发现它是用一种普通的语言编写的,这种语言易于理解和遵循。 案文密密麻麻,充满了并非总是熟悉的术语,但它不是充满了难以理解的形式结构的"学术"文本。
但是,很快,我开始对细节感到不知所措。 在第二节的中间,我的思想在徘徊。 我不得不一直专注于文本,以便以后才发现我完全忘记了该段的含义。 我意识到我无法以与社交网络或技术文章上的文章相同的方式阅读白皮书; 它需要更严肃的方法。
因此,我打印了白皮书并将其装订在左上角,拿着钢笔和笔记本,预约了一个半小时的会议,没有邀请任何客人,然后开始使用该纸。 有几节? 共有9个部分:简介,设计概述,系统交互,……,结论。 好的,前十页包含问题的定义,体系结构的概述,然后详细说明如何解决各种挑战。 其余页面涉及在生产,结论和进一步工作中运行系统。 现在我可以开始阅读了……
在分配的半小时内,我几乎可以到达第3部分。为避免掉落"堆栈溢出",我记下了文档的每个部分,突出显示了打印输出中最重要的部分,并分别写下了要学习或学习的内容。 再次访问:POSIX API,Linux vnode层,B树,带有校验和的数据损坏检测,O_APPEND模式等等。
如何阅读技术书籍
获得真正理解的个人经验,而不是幻想
我花了四次这样的会议才能完成阅读。 这是深入了解问题并系统解决问题的非常不寻常的经历。 它与通常的*例程有很大的不同,在常规例程中,您搜索诸如
BeanNotOfRequiredTypeException之类的特定内容,单击第一个链接,然后滚动到接受的答案,甚至不看问题,看看是否有一些快速解决方案可以解决问题。 不,在这里作者首先描述他们正在从事的工作。 这是一个分布式文件系统,必须能够很好地处理X,Y和Z。 然后,他们概述了这些假设,然后提出了一种体系结构,然后继续解释了它的工作原理……如果有可能进行拍摄,那么发现频道可能会根据此白皮书创建一个纪录片。
除了系统地解决问题的方法外,该阅读还为我提供了一些技术模式的示例(我们只有一个母版,但仅适用于元数据并将其全部保存在内存中),这使我难以确定 事物(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
该列表绝不是详尽无遗的。 还有许多其他出色的论文(也有许多白皮书看起来更像是营销材料),其中世界上最好的专家向他们解释了问题以及如何解决该问题。 这是提高软件工程水平的很好资源。
(本文翻译自Yan Babitski的文章《A Simple Way To Become a Better Software Engineer》,参考:
https://medium.com/swlh/a-simple-way-to-become-a-better-software-engineer-2faa1cace55b)