<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tony Bai &#187; 博客</title>
	<atom:link href="http://tonybai.com/tag/%e5%8d%9a%e5%ae%a2/feed/" rel="self" type="application/rss+xml" />
	<link>https://tonybai.com</link>
	<description>一个程序员的心路历程</description>
	<lastBuildDate>Sun, 12 Apr 2026 22:30:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Go写业务是垃圾？Rust重写是坨屎？聊聊程序员评论区里的那股“煞气”</title>
		<link>https://tonybai.com/2025/09/19/the-tension-in-programmer-comments/</link>
		<comments>https://tonybai.com/2025/09/19/the-tension-in-programmer-comments/#comments</comments>
		<pubDate>Fri, 19 Sep 2025 00:10:06 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[Bug]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Emacs]]></category>
		<category><![CDATA[GC问题]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[go1.24]]></category>
		<category><![CDATA[Gopher]]></category>
		<category><![CDATA[Go语言第一课]]></category>
		<category><![CDATA[MAC]]></category>
		<category><![CDATA[Rust]]></category>
		<category><![CDATA[Rustacean]]></category>
		<category><![CDATA[TonyBai]]></category>
		<category><![CDATA[Vim]]></category>
		<category><![CDATA[WebAssembly]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[“煞评”]]></category>
		<category><![CDATA[上下文]]></category>
		<category><![CDATA[专栏]]></category>
		<category><![CDATA[业务]]></category>
		<category><![CDATA[严谨]]></category>
		<category><![CDATA[事实]]></category>
		<category><![CDATA[二元对立]]></category>
		<category><![CDATA[优越感]]></category>
		<category><![CDATA[信仰]]></category>
		<category><![CDATA[光]]></category>
		<category><![CDATA[入门宝典]]></category>
		<category><![CDATA[公众号]]></category>
		<category><![CDATA[共同努力]]></category>
		<category><![CDATA[内容创作者]]></category>
		<category><![CDATA[净化]]></category>
		<category><![CDATA[分 享者]]></category>
		<category><![CDATA[创作者]]></category>
		<category><![CDATA[初学时期]]></category>
		<category><![CDATA[助推者]]></category>
		<category><![CDATA[化解]]></category>
		<category><![CDATA[匿名]]></category>
		<category><![CDATA[博客]]></category>
		<category><![CDATA[压力]]></category>
		<category><![CDATA[受害者]]></category>
		<category><![CDATA[同理心]]></category>
		<category><![CDATA[吐槽]]></category>
		<category><![CDATA[喷子]]></category>
		<category><![CDATA[困惑]]></category>
		<category><![CDATA[基石]]></category>
		<category><![CDATA[复杂性]]></category>
		<category><![CDATA[大规模分布式系统]]></category>
		<category><![CDATA[存在价值]]></category>
		<category><![CDATA[小型项目]]></category>
		<category><![CDATA[工程背景]]></category>
		<category><![CDATA[工程问题]]></category>
		<category><![CDATA[建设]]></category>
		<category><![CDATA[建设性]]></category>
		<category><![CDATA[建设性批评]]></category>
		<category><![CDATA[微服务]]></category>
		<category><![CDATA[心理动因]]></category>
		<category><![CDATA[思想]]></category>
		<category><![CDATA[思想碰撞]]></category>
		<category><![CDATA[思维惯性]]></category>
		<category><![CDATA[情绪]]></category>
		<category><![CDATA[情绪宣泄]]></category>
		<category><![CDATA[情绪投射]]></category>
		<category><![CDATA[戾气]]></category>
		<category><![CDATA[执念]]></category>
		<category><![CDATA[技术世界]]></category>
		<category><![CDATA[技术圣战]]></category>
		<category><![CDATA[技术方向]]></category>
		<category><![CDATA[技术社区]]></category>
		<category><![CDATA[技术观点]]></category>
		<category><![CDATA[技术讨论]]></category>
		<category><![CDATA[技术进步]]></category>
		<category><![CDATA[技术选型]]></category>
		<category><![CDATA[技术部落主义]]></category>
		<category><![CDATA[抽象能力]]></category>
		<category><![CDATA[挣扎]]></category>
		<category><![CDATA[挫败感]]></category>
		<category><![CDATA[探索]]></category>
		<category><![CDATA[操作系统]]></category>
		<category><![CDATA[攻击性]]></category>
		<category><![CDATA[放大效应]]></category>
		<category><![CDATA[断言大师]]></category>
		<category><![CDATA[新人]]></category>
		<category><![CDATA[智慧]]></category>
		<category><![CDATA[替代方案]]></category>
		<category><![CDATA[最优解]]></category>
		<category><![CDATA[权衡]]></category>
		<category><![CDATA[权衡考量]]></category>
		<category><![CDATA[来源]]></category>
		<category><![CDATA[极客时间]]></category>
		<category><![CDATA[架构]]></category>
		<category><![CDATA[框架]]></category>
		<category><![CDATA[正确]]></category>
		<category><![CDATA[源码]]></category>
		<category><![CDATA[煞气]]></category>
		<category><![CDATA[珍视]]></category>
		<category><![CDATA[理性]]></category>
		<category><![CDATA[病毒]]></category>
		<category><![CDATA[知识体系]]></category>
		<category><![CDATA[知识储备]]></category>
		<category><![CDATA[知识的局限性]]></category>
		<category><![CDATA[知识的诅咒]]></category>
		<category><![CDATA[社交约束]]></category>
		<category><![CDATA[社区修行]]></category>
		<category><![CDATA[祥和之气]]></category>
		<category><![CDATA[秀优越]]></category>
		<category><![CDATA[程序员]]></category>
		<category><![CDATA[精神家园]]></category>
		<category><![CDATA[经验]]></category>
		<category><![CDATA[编辑器]]></category>
		<category><![CDATA[网络匿名性]]></category>
		<category><![CDATA[网络评论区]]></category>
		<category><![CDATA[观点]]></category>
		<category><![CDATA[讨论]]></category>
		<category><![CDATA[讨论氛围]]></category>
		<category><![CDATA[论据]]></category>
		<category><![CDATA[评论区]]></category>
		<category><![CDATA[语言]]></category>
		<category><![CDATA[读者]]></category>
		<category><![CDATA[谦逊]]></category>
		<category><![CDATA[负面情绪]]></category>
		<category><![CDATA[质疑]]></category>
		<category><![CDATA[资历]]></category>
		<category><![CDATA[资格论]]></category>
		<category><![CDATA[资深开发者]]></category>
		<category><![CDATA[身份]]></category>
		<category><![CDATA[身份认同]]></category>
		<category><![CDATA[软件开发]]></category>
		<category><![CDATA[辩论]]></category>
		<category><![CDATA[逻辑]]></category>
		<category><![CDATA[部落主义]]></category>
		<category><![CDATA[风险]]></category>
		<category><![CDATA[驱散]]></category>
		<category><![CDATA[高认知负荷]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=5178</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2025/09/19/the-tension-in-programmer-comments 大家好，我是Tony Bai。 做公众号/博客这些年，我收到了成千上万条来自程序员朋友的评论。绝大多数都充满了智慧、好奇和善意，正是这些交流，构成了我持续分享的最大动力。但与此同时，我也常常在评论区里，感受到一股强烈的、带有攻击性的无形之气。 比如，当我分享一篇关于Go在业务场景实践的文章时，总会有人跳出来，言简意赅地留下一句：“用Go写业务是不是很垃圾？” 又比如，当社区在探讨用Rust重构某个C++项目时，评论区可能会出现这样的“高论”：“用Rust重写C++代码，就是从一坨屎变成了另一坨屎。” 这些评论，往往脏字当头，不带任何论据，纯粹是情绪的宣泄。我思来想去，觉得用“戾气”或“喷子”来形容，似乎都不够精准。直到有一天，一个词蹦进了我的脑海——“煞气”。 这个词，源于传统文化，意指一种凶戾、非理性、具有破坏性的气场。它精准地捕捉了这类评论的本质：其目的并非交流思想，而是用情绪的冲击波，扼杀讨论，打击分享者的热情。正因如此，我之前公众号的自动精选评论和留言不得不改为手工精选，这不仅增加了工作量，还降低了评论展示的及时性。 今天，这篇文章不旨在批判，而是想和大家一起，深入地聊一聊程序员评论区里的这股“煞气”，尝试理解它从何而来，并探讨作为技术社区的一员，我们该如何面对它，如何保护我们共同的精神家园。 “煞气”的百态图鉴：你一定见过的几种典型“煞评” 这股“煞气”并非铁板一块，它以多种面目出现在我们的视野中，总有一种让你觉得似曾相识： “一言以蔽之”型 这类评论堪称“断言大师”，从不屑于提供论据，仅用一句话便能给一门语言、一个框架甚至一个技术方向盖棺定论。 “Go就是不行。” “WebAssembly没前途。” “微服务就是个坑。” 简洁，有力，不容置疑，仿佛掌握了宇宙的终极真理。 “非黑即白”型（技术圣战） 在他们眼中，技术选型不是基于场景和权衡，而是一场关乎信仰的“圣战”。语言、编辑器、操作系统……万物皆可站队，异端必须被消灭。 “用Rust重写C++就是从一坨屎变成另一坨屎。” “Vim/Emacs之外皆异端！” “还在用Windows/Mac开发？笑死。” “资格论”与“秀优越”型 这类评论善于通过攻击对方的身份、资历或知识储备，来釜底抽薪式地否定其观点，从而建立自己的优越感。 “你连源码都没读过，凭什么评论？” “这东西我十年前就玩过了，没什么新意。” “等你写到百万行代码再来讨论架构吧。” “情绪投射”型 这类评论者，往往将自己在工作中因某项技术受挫而产生的负面情绪，无差别地投射到所有相关的公开讨论中，把评论区当成了情绪的垃圾桶。 “我们项目刚被XXX坑惨了，这玩意儿就是个彻头彻尾的垃圾！” “又在吹这门语言？我刚因为它的GC问题加了三天班！” 这些充满“煞气”的评论，像病毒一样侵蚀着技术社区的讨论氛围，让许多乐于分享的创作者心生寒意，也让许多渴望学习的新人望而却步。 溯源“煞气”：它们究竟从何而来？ 要应对“煞气”，首先要理解它的来源。它并非简单的“素质问题”，背后往往有更深层次的、属于程序员群体的心理动因： 高认知负荷与挫败感： 软件开发本质上是一项与复杂性搏斗的高难度、高挫败感的工作。代码不工作是常态，被需求反复折磨是日常。长期累积的压力和挫败感，需要一个宣泄的出口，而匿名的网络评论区便成了最廉价的选择。 强身份认同与技术部落主义： 许多程序员倾向于将自我价值与所掌握的技术栈深度绑定。“我是Gopher”、“我是Rustacean”，这种身份认同感带来了归属感，但也催生了“部落主义”。攻击对立的技术，本质上是在捍卫自我身份和所属部落的“荣耀”。 对“最优解”的执念与抽象能力的差异： 我们的工作是与逻辑打交道，追求严谨和正确，这使得许多程序员潜意识里相信存在一个放之四海而皆准的“最优解”。这种思维惯性，导致在面对需要权衡（Trade-off）的工程问题时，容易陷入“非黑即白”的二元对立，无法容忍不同场景下的不同选择。 知识的诅咒： 一些资深开发者，已经忘记了自己初学时期的困惑和挣扎。他们对自己领域内“显而易见”的知识缺乏同理心，容易将新手的提问或不成熟的观点视为“愚蠢”，并报以轻蔑或不耐烦。 网络匿名性的放大效应： 这是所有网络社区的通病。脱离了现实世界的社交约束，人们更容易释放出内心的攻击性。 化解“煞气”：我们每个人的社区修行 面对弥漫的“煞气”，无论是内容创作者还是普通读者，我们每个人都身处其中，既可能是受害者，也可能在不经意间成为助推者。与其抱怨环境，不如从自身做起，共同参与到社区的净化与建设中来。 给所有社区参与者的“修行建议”： 评论前，区分“观点”与“情绪”： 在敲下键盘前，花一秒钟审视内心：我即将表达的，是基于逻辑和事实的技术观点，还是仅仅是想吐槽一下今天遇到的某个Bug或者糟糕的心情？有意识地分离这两者，是理性讨论的第一步。 拥抱“建设性批评”的艺术： 如果你不同意某个观点，这非常正常，甚至是技术进步的源泉。但请尝试用建设性的方式来表达： 提供论据： “我认为这个方案有风险，因为在XX场景下，它可能会导致YY问题。” [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2025/the-tension-in-programmer-comments-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2025/09/19/the-tension-in-programmer-comments">本文永久链接</a> &#8211; https://tonybai.com/2025/09/19/the-tension-in-programmer-comments</p>
<p>大家好，我是Tony Bai。</p>
<p>做公众号/博客这些年，我收到了成千上万条来自程序员朋友的评论。绝大多数都充满了智慧、好奇和善意，正是这些交流，构成了我持续分享的最大动力。但与此同时，我也常常在评论区里，感受到一股强烈的、带有攻击性的无形之气。</p>
<p>比如，当我分享一篇关于Go在业务场景实践的文章时，总会有人跳出来，言简意赅地留下一句：“用Go写业务是不是很垃圾？”</p>
<p>又比如，当社区在探讨用Rust重构某个C++项目时，评论区可能会出现这样的“高论”：“用Rust重写C++代码，就是从一坨屎变成了另一坨屎。”</p>
<p>这些评论，往往脏字当头，不带任何论据，纯粹是情绪的宣泄。我思来想去，觉得用“戾气”或“喷子”来形容，似乎都不够精准。直到有一天，一个词蹦进了我的脑海——<strong>“煞气”</strong>。</p>
<p>这个词，源于传统文化，意指一种凶戾、非理性、具有破坏性的气场。它精准地捕捉了这类评论的本质：其目的并非交流思想，而是用情绪的冲击波，扼杀讨论，打击分享者的热情。正因如此，我之前公众号的自动精选评论和留言不得不改为手工精选，这不仅增加了工作量，还降低了评论展示的及时性。</p>
<p>今天，这篇文章不旨在批判，而是想和大家一起，<strong>深入地聊一聊程序员评论区里的这股“煞气”，尝试理解它从何而来，并探讨作为技术社区的一员，我们该如何面对它，如何保护我们共同的精神家园。</strong></p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/paid/go-micro-column-2025-pr.png" alt="" /></p>
<h2>“煞气”的百态图鉴：你一定见过的几种典型“煞评”</h2>
<p>这股“煞气”并非铁板一块，它以多种面目出现在我们的视野中，总有一种让你觉得似曾相识：</p>
<ul>
<li>
<p><strong>“一言以蔽之”型</strong><br />
这类评论堪称“断言大师”，从不屑于提供论据，仅用一句话便能给一门语言、一个框架甚至一个技术方向盖棺定论。</p>
<ul>
<li><em>“Go就是不行。”</em></li>
<li><em>“WebAssembly没前途。”</em></li>
<li><em>“微服务就是个坑。”</em><br />
简洁，有力，不容置疑，仿佛掌握了宇宙的终极真理。</li>
</ul>
</li>
<li>
<p><strong>“非黑即白”型（技术圣战）</strong><br />
在他们眼中，技术选型不是基于场景和权衡，而是一场关乎信仰的“圣战”。语言、编辑器、操作系统……万物皆可站队，异端必须被消灭。</p>
<ul>
<li><em>“用Rust重写C++就是从一坨屎变成另一坨屎。”</em></li>
<li><em>“Vim/Emacs之外皆异端！”</em></li>
<li><em>“还在用Windows/Mac开发？笑死。”</em></li>
</ul>
</li>
<li>
<p><strong>“资格论”与“秀优越”型</strong><br />
这类评论善于通过攻击对方的身份、资历或知识储备，来釜底抽薪式地否定其观点，从而建立自己的优越感。</p>
<ul>
<li><em>“你连源码都没读过，凭什么评论？”</em></li>
<li><em>“这东西我十年前就玩过了，没什么新意。”</em></li>
<li><em>“等你写到百万行代码再来讨论架构吧。”</em></li>
</ul>
</li>
<li>
<p><strong>“情绪投射”型</strong><br />
这类评论者，往往将自己在工作中因某项技术受挫而产生的负面情绪，无差别地投射到所有相关的公开讨论中，把评论区当成了情绪的垃圾桶。</p>
<ul>
<li><em>“我们项目刚被XXX坑惨了，这玩意儿就是个彻头彻尾的垃圾！”</em></li>
<li><em>“又在吹这门语言？我刚因为它的GC问题加了三天班！”</em></li>
</ul>
</li>
</ul>
<p>这些充满“煞气”的评论，像病毒一样侵蚀着技术社区的讨论氛围，让许多乐于分享的创作者心生寒意，也让许多渴望学习的新人望而却步。</p>
<h2>溯源“煞气”：它们究竟从何而来？</h2>
<p>要应对“煞气”，首先要理解它的来源。它并非简单的“素质问题”，背后往往有更深层次的、属于程序员群体的心理动因：</p>
<ol>
<li><strong>高认知负荷与挫败感：</strong> 软件开发本质上是一项与复杂性搏斗的高难度、高挫败感的工作。代码不工作是常态，被需求反复折磨是日常。长期累积的压力和挫败感，需要一个宣泄的出口，而匿名的网络评论区便成了最廉价的选择。</li>
<li><strong>强身份认同与技术部落主义：</strong> 许多程序员倾向于将自我价值与所掌握的技术栈深度绑定。“我是Gopher”、“我是Rustacean”，这种身份认同感带来了归属感，但也催生了“部落主义”。攻击对立的技术，本质上是在捍卫自我身份和所属部落的“荣耀”。</li>
<li><strong>对“最优解”的执念与抽象能力的差异：</strong> 我们的工作是与逻辑打交道，追求严谨和正确，这使得许多程序员潜意识里相信存在一个放之四海而皆准的“最优解”。这种思维惯性，导致在面对需要权衡（Trade-off）的工程问题时，容易陷入“非黑即白”的二元对立，无法容忍不同场景下的不同选择。</li>
<li><strong>知识的诅咒：</strong> 一些资深开发者，已经忘记了自己初学时期的困惑和挣扎。他们对自己领域内“显而易见”的知识缺乏同理心，容易将新手的提问或不成熟的观点视为“愚蠢”，并报以轻蔑或不耐烦。</li>
<li><strong>网络匿名性的放大效应：</strong> 这是所有网络社区的通病。脱离了现实世界的社交约束，人们更容易释放出内心的攻击性。</li>
</ol>
<h2>化解“煞气”：我们每个人的社区修行</h2>
<p>面对弥漫的“煞气”，无论是内容创作者还是普通读者，我们每个人都身处其中，既可能是受害者，也可能在不经意间成为助推者。与其抱怨环境，不如从自身做起，共同参与到社区的净化与建设中来。</p>
<p><strong>给所有社区参与者的“修行建议”：</strong></p>
<ol>
<li><strong>评论前，区分“观点”与“情绪”：</strong> 在敲下键盘前，花一秒钟审视内心：我即将表达的，是基于逻辑和事实的技术观点，还是仅仅是想吐槽一下今天遇到的某个Bug或者糟糕的心情？有意识地分离这两者，是理性讨论的第一步。</li>
<li><strong>拥抱“建设性批评”的艺术：</strong> 如果你不同意某个观点，这非常正常，甚至是技术进步的源泉。但请尝试用建设性的方式来表达：
<ul>
<li><strong>提供论据：</strong> “我认为这个方案有风险，因为在XX场景下，它可能会导致YY问题。”</li>
<li><strong>提供替代方案：</strong> “相比A方案，我更推荐B方案，因为B在处理XX方面更有优势。”</li>
<li><strong>补充上下文：</strong> “这个观点在小型项目中可能适用，但在大规模分布式系统中，我们需要额外考虑……”<br />
这样的评论，远比一句简单的“你这是垃圾”有价值千万倍。</li>
</ul>
</li>
<li><strong>常怀谦逊与同理心：</strong> 技术世界浩瀚无垠，我们每个人都只是其中渺小的一粟。承认自己知识的局限性，尊重不同技术在不同场景下的存在价值。我们今天所不屑的，可能正是我们昨天所困惑的；我们今天所熟稔的，可能是别人明天将要探索的新大陆。多一份同理心，少一份优越感。</li>
</ol>
<h2>小结：化“煞气”为“祥和之气”，共建更有价值的技术社区</h2>
<p>回到开头的那些评论。Go写业务当然不是垃圾，Rust重写C++也绝非原地踏步。每一种技术选择背后，都有其复杂的工程背景和权衡考量。一个健康的技术社区，应该是一个能够容纳并理性探讨这些权衡的地方。</p>
<p>我们探讨“程序员的‘煞气’”，目标不是消灭所有反对的声音，健康的质疑和辩论是技术进步的基石。我们的目标，是希望将那些无意义的、纯粹消耗热情的情绪宣泄，转化为能够推动我们共同进步的思想碰撞。</p>
<p>这需要我们每一位社区参与者的共同努力：分享者多一份对人性的理解和对经验的珍视，评论者多一份理性和建设性的态度。</p>
<p>愿我们都能成为驱散“煞气”的光，让技术社区的每一次讨论，都离智慧更近一步。</p>
<hr />
<p><strong>想系统学习Go，构建扎实的知识体系？</strong></p>
<p>我的新书《<a href="https://book.douban.com/subject/37499496/">Go语言第一课</a>》是你的首选。源自2.4万人好评的极客时间专栏，内容全面升级，同步至Go 1.24。首发期有专属五折优惠，不到40元即可入手，扫码即可拥有这本300页的Go语言入门宝典，即刻开启你的Go语言高效学习之旅！</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/go-primer-published-4.png" alt="" /></p>
<hr />
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求，请扫描下方公众号二维码，与我私信联系。</p>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p style='text-align:left'>&copy; 2025, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2025/09/19/the-tension-in-programmer-comments/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>世界读书日：如何高效阅读“砖头”技术书？我的心法分享（文末赠书）</title>
		<link>https://tonybai.com/2025/04/23/tips-for-reading-technical-books/</link>
		<comments>https://tonybai.com/2025/04/23/tips-for-reading-technical-books/#comments</comments>
		<pubDate>Wed, 23 Apr 2025 00:08:53 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[benchmark]]></category>
		<category><![CDATA[Channel]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[goroutine]]></category>
		<category><![CDATA[gotest]]></category>
		<category><![CDATA[Go语言精进之路]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[Mutex]]></category>
		<category><![CDATA[select]]></category>
		<category><![CDATA[tgpl]]></category>
		<category><![CDATA[TheGoProgrammingLanguage]]></category>
		<category><![CDATA[世界读书日]]></category>
		<category><![CDATA[亚马逊]]></category>
		<category><![CDATA[人工智能]]></category>
		<category><![CDATA[共享内存]]></category>
		<category><![CDATA[函数]]></category>
		<category><![CDATA[博客]]></category>
		<category><![CDATA[并发]]></category>
		<category><![CDATA[思维导图]]></category>
		<category><![CDATA[技术书籍]]></category>
		<category><![CDATA[接口]]></category>
		<category><![CDATA[方法]]></category>
		<category><![CDATA[方法集合]]></category>
		<category><![CDATA[笔记]]></category>
		<category><![CDATA[线程]]></category>
		<category><![CDATA[豆瓣]]></category>
		<category><![CDATA[跨主题交叉]]></category>
		<category><![CDATA[输出]]></category>
		<category><![CDATA[通道]]></category>
		<category><![CDATA[长期主义者]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=4605</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2025/04/23/tips-for-reading-technical-books 大家好，我是Tony Bai。 今天是世界读书日。聊到读书，尤其是咱们技术人经常要面对的那些厚重的“技术砖头”，估计不少朋友都有过类似的挣扎：道理都懂，书很重要，但就是感觉难啃、读不进去，或者读完就忘，效果不彰。 技术书籍往往信息密集、逻辑严谨、内容晦涩，想要高效地从中汲取养分，确实需要讲究一些方法。我自己就是一个长期主义者，坚信持续学习和深入思考的力量。多年来，我不仅坚持阅读，也一直在我的博客tonybai.com以及本公众号上进行长期的、持续的输出，这个过程让我对如何高效阅读和内化知识，有了一些切身的体会和思考。 此外，如今AI工具日益强大，如何结合传统方法与智能辅助，是一个非常值得探讨的话题。 今天，我就结合我的长期实践，和大家分享一些个人实践，特别是在攻克难点和整理笔记环节，我也会着重谈谈AI如何能成为我的得力助手，希望能帮助你更好地攻克技术“硬书”，将知识真正转化为自己的竞争力。 心法一：明确目标，精准选书——为何而读？ 在信息爆炸的时代，选对书可能比努力读更重要。开始前，先明确“为何而读”： 当前痛点/目标是什么？ (深入Go并发？掌握K8s？学习AI Agent开发？) 这本书能解决问题吗？ 通过看目录、序言、书评（例如在豆瓣读书、亚马逊评论区、O&#8217;Reilly Learning Platform、Manning官网 等站点优质站点查找）、作者背景来判断。 难度是否匹配？ (是否需要前置知识？) 我的做法： 基于工作和学习规划、以及遇到的技术瓶颈选书，优先选择能直接解决我当下问题的、或者能为我未来方向打下坚实基础的书(这的确需要一些前瞻性的技术眼光)。带着明确的目的去读，效率和动力都会高很多。 心法二：主动出击，建立框架——如何开始？ 面对“砖头书”，忌直接死磕。先做“侦察”，建立整体认知： 速览目录、序言、总结： 把握全书结构、核心思想。 带着问题阅读： 主动思考你想从中获得什么答案。 我的做法： 我通常会先花半小时到一小时快速“翻阅”全书，在脑海里构建一个大致的知识地图。然后根据我的目标，决定是通读全书，还是重点阅读某些章节。对于特别重要的章节，我会先看一遍小结，再带着问题去细读正文。 心法三：攻克难点，允许“跳过” 遇到难啃的概念或复杂逻辑卡壳时： 别死磕，标记跳过： 保持阅读节奏，避免挫败感。后续内容或整体理解可能有助于回头解决。 寻求外援： 查阅资料、社区提问，或同主题书籍的交叉阅读，从多个角度帮助理解难啃的技术概念。 AI在此环节的“神助攻” 在这个最容易卡壳、也最考验耐心的环节，AI展现出了惊人的辅助潜力，能显著提升我们攻克难点的效率。以下是一些你可以尝试的提示词示例（以经典书籍《The Go Programming Language》为例）： 多角度解释： “请用一个现实生活中的例子，解释《The Go Programming Language》中描述的 Go channel 的概念，特别是带缓冲和不带缓冲 channel 的区别。” “我正在读 TGPL 关于 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2025/tips-for-reading-technical-books-1.jpg" alt="" /></p>
<p><a href="https://tonybai.com/2025/04/23/tips-for-reading-technical-books">本文永久链接</a> &#8211; https://tonybai.com/2025/04/23/tips-for-reading-technical-books</p>
<p>大家好，我是Tony Bai。</p>
<p>今天是世界读书日。聊到读书，尤其是咱们技术人经常要面对的那些厚重的“技术砖头”，估计不少朋友都有过类似的挣扎：道理都懂，书很重要，但就是感觉难啃、读不进去，或者读完就忘，效果不彰。</p>
<p>技术书籍往往信息密集、逻辑严谨、内容晦涩，想要高效地从中汲取养分，确实需要讲究一些方法。我自己就是一个<strong>长期主义者</strong>，坚信持续学习和深入思考的力量。多年来，我不仅坚持阅读，也一直在我的博客tonybai.com以及本公众号上进行<strong>长期的、持续的输出</strong>，这个过程让我对如何高效阅读和内化知识，有了一些切身的体会和思考。 此外，如今AI工具日益强大，如何结合传统方法与智能辅助，是一个非常值得探讨的话题。</p>
<p>今天，我就结合我的<strong>长期实践</strong>，和大家分享一些个人实践，<strong>特别是在攻克难点和整理笔记环节，我也会着重谈谈AI如何能成为我的得力助手</strong>，希望能帮助你更好地攻克技术“硬书”，将知识真正转化为自己的竞争力。</p>
<h2>心法一：明确目标，精准选书——为何而读？</h2>
<p><img src="https://tonybai.com/wp-content/uploads/2025/tips-for-reading-technical-books-2.jpg" alt="" /></p>
<p>在信息爆炸的时代，<strong>选对书可能比努力读更重要</strong>。开始前，先明确“为何而读”：</p>
<ul>
<li><strong>当前痛点/目标是什么？</strong> (深入Go并发？掌握K8s？学习AI Agent开发？)</li>
<li><strong>这本书能解决问题吗？</strong> 通过看目录、序言、书评（例如在<strong>豆瓣读书、亚马逊评论区、O&#8217;Reilly Learning Platform、Manning官网</strong> 等站点优质站点查找）、作者背景来判断。</li>
<li><strong>难度是否匹配？</strong> (是否需要前置知识？)</li>
</ul>
<p><strong>我的做法：</strong> 基于工作和学习规划、以及遇到的技术瓶颈选书，优先选择能直接解决我当下问题的、或者能为我未来方向打下坚实基础的书(这的确需要一些前瞻性的技术眼光)。带着明确的目的去读，效率和动力都会高很多。</p>
<h2>心法二：主动出击，建立框架——如何开始？</h2>
<p><img src="https://tonybai.com/wp-content/uploads/2025/tips-for-reading-technical-books-3.jpg" alt="" /></p>
<p>面对“砖头书”，忌直接死磕。先做“侦察”，建立整体认知：</p>
<ul>
<li><strong>速览目录、序言、总结：</strong> 把握全书结构、核心思想。</li>
<li><strong>带着问题阅读：</strong> 主动思考你想从中获得什么答案。</li>
</ul>
<p><strong>我的做法：</strong> 我通常会先花半小时到一小时快速“翻阅”全书，在脑海里构建一个大致的知识地图。然后根据我的目标，决定是通读全书，还是重点阅读某些章节。对于特别重要的章节，我会先看一遍小结，再带着问题去细读正文。</p>
<h2>心法三：攻克难点，允许“跳过”</h2>
<p><img src="https://tonybai.com/wp-content/uploads/2025/tips-for-reading-technical-books-4.jpg" alt="" /></p>
<p>遇到难啃的概念或复杂逻辑卡壳时：</p>
<ul>
<li><strong>别死磕，标记跳过：</strong> 保持阅读节奏，避免挫败感。后续内容或整体理解可能有助于回头解决。</li>
<li><strong>寻求外援：</strong> 查阅资料、社区提问，或<strong>同主题书籍的交叉阅读</strong>，从多个角度帮助理解难啃的技术概念。</li>
</ul>
<p><strong>AI在此环节的“神助攻”</strong></p>
<p>在这个最容易卡壳、也最考验耐心的环节，AI展现出了惊人的辅助潜力，能显著提升我们攻克难点的效率。以下是一些你可以尝试的提示词示例（以经典书籍《<a href="http://www.gopl.io/">The Go Programming Language</a>》为例）：</p>
<ul>
<li>
<p><strong>多角度解释：</strong></p>
<ul>
<li>“请用一个现实生活中的例子，解释《The Go Programming Language》中描述的 Go channel 的概念，特别是带缓冲和不带缓冲 channel 的区别。”</li>
<li>“我正在读 TGPL 关于 interface 的章节，对于『接口值』的内部结构（类型和值）有点模糊，请用更通俗的语言解释一下，并说明为什么 nil 接口值不等于包含 nil 指针的接口值？”</li>
<li>“请对比 TGPL 中提到的 goroutine 和传统操作系统线程，用打比方的方式解释goroutine的『轻量』体现在哪里？”</li>
</ul>
</li>
<li>
<p><strong>代码示例具象化：</strong></p>
<ul>
<li>“请根据《The Go Programming Language》中关于 select 语句的介绍，写一个简单的 Go 代码示例，展示如何使用 select 实现一个非阻塞的 channel 发送操作。”</li>
<li>“我需要理解 TGPL 中错误处理章节提到的 %w 动词，请提供一个 Go 代码片段，演示如何使用 fmt.Errorf 和 %w 来包装错误，并随后使用 errors.Is 和 errors.As 来检查和提取原始错误。”</li>
</ul>
</li>
<li>
<p><strong>模拟对话与“抬杠”：</strong></p>
<ul>
<li>“假设你是一位 Go 语言专家，我正在学习 TGPL 的并发章节。我对于 mutex 和 channel 的选择有些困惑，在什么场景下应该优先选择 mutex？什么时候 channel 是更好的选择？我们来讨论一下，请给出你的理由和实例。”</li>
<li>“我看到 TGPL 中提到『不要通过共享内存来通信，而应该通过通信来共享内存』。这句话很经典，但我对其理解不够深入。你能挑战我的理解吗？比如，在哪些情况下共享内存（如使用 sync.Mutex）反而是更合适的选择？请举例说明。”</li>
</ul>
</li>
</ul>
<p>AI就像一位不知疲倦、拥有广阔知识的“<strong>智能私教</strong>”，能够针对你的难点进行个性化的“辅导”，<strong>极大地加速了理解和突破瓶颈的过程</strong>。</p>
<h2>心法四：提炼精华，有效笔记</h2>
<p><img src="https://tonybai.com/wp-content/uploads/2025/tips-for-reading-technical-books-5.jpg" alt="" /></p>
<p>“不动笔墨不读书”，关键是怎么记：</p>
<ul>
<li><strong>用自己的话总结：</strong> 这是内化的核心，检验是否真懂。</li>
<li><strong>建立知识关联：</strong> 将新知识与旧知识联系起来。</li>
<li><strong>代码示例验证：</strong> 亲自实践代码是关键。</li>
<li><strong>结构化整理：</strong> 思维导图、结构化笔记等，用于复习和输出。但在我来看，这不是必须。</li>
</ul>
<p><strong>AI在此环节的“效率加速器”</strong></p>
<p>在整理和消化大量信息的过程中，AI 同样能扮演好“智能助手”的角色，帮助我们提高效率，聚焦核心。以下是一些你可以尝试的提示词示例（同样以《The Go Programming Language》为例，前提是你拥有该书籍的电子版数据，用来喂给AI）：</p>
<ul>
<li>
<p><strong>辅助总结与提炼：</strong></p>
<ul>
<li>“请帮我将《The Go Programming Language》第七章『接口（Interfaces）』的核心内容，总结成 5-7 个关键要点，用 bullet points 形式列出。”</li>
<li>“我正在阅读 TGPL 关于『并发（Concurrency）』的部分，特别是 goroutine 和 channel。请提取这段内容中关于『select 语句』的主要用途和注意事项。”</li>
<li><strong>（重要提示）</strong> AI 的总结是草稿，<strong>你必须用自己的理解去审核、修改、重写和完善</strong>，将信息转化为你自己的知识结构。</li>
</ul>
</li>
<li>
<p><strong>笔记结构化建议：</strong></p>
<ul>
<li>“我正在为《The Go Programming Language》的第五章『函数（Functions）』做笔记，请给我建议 2-3 种不同的笔记组织结构，例如概念分类、按重要性排序、或者 Q&amp;A 形式。”</li>
</ul>
</li>
<li>
<p><strong>快速原型代码：</strong></p>
<ul>
<li>“根据 TGPL 中关于『方法（Methods）』的讨论，特别是嵌入（embedding）和方法集（method sets）的概念，请给我生成一个简单的 Go 代码示例，演示结构体嵌入后方法的调用规则。”</li>
<li>“请基于 TGPL 中对 go test 工具的介绍，给我生成一个包含基本测试函数、基准测试函数（benchmark）和示例函数（example）的简单 Go测试文件模板。”</li>
</ul>
</li>
</ul>
<p>AI在这里的作用，不是替代思考，而是<strong>将我们从一些相对重复、机械性的信息整理工作中解放出来</strong>，让我们能<strong>将宝贵的认知资源更集中地用于深度理解、批判性思考、知识关联和创造性应用上</strong>，这一点与“<a href="https://tonybai.com/2025/04/19/learn-go-in-ai-era">AI会写Go代码了，初学者还需要系统学习吗？</a>”一文观点异曲同工。</p>
<h2>心法五：学以致用，输出倒逼</h2>
<p><img src="https://tonybai.com/wp-content/uploads/2025/tips-for-reading-technical-books-6.jpg" alt="" /></p>
<p>阅读只是输入，真正的内化需要输出和实践，这是一个<strong>需要长期坚持</strong>的过程：</p>
<ul>
<li><strong>实践应用：</strong> 在项目中应用所学知识。</li>
<li><strong>分享与教学：</strong> 写文章、做分享，输出是最好的学习。这也是我的实践精华。</li>
<li><strong>参与讨论：</strong> 与他人交流碰撞思想。</li>
<li><strong>持续回顾：</strong> 温故而知新。</li>
</ul>
<p><strong>我的做法：</strong> <strong>我长期坚持在tonybai.com博客进行输出，这是我奉行长期主义、内化知识最重要的方式之一。</strong> 把学到的东西用自己的理解讲出来、写出来，这个过程本身就是对知识体系最好的锤炼和检验。同时，在星球里回答大家的提问，也是在不断地进行知识输出和巩固。<strong>没有输出的阅读，效果终将有限。</strong></p>
<h2>小结：拥抱工具，以我为主，终身学习</h2>
<p>高效阅读技术书籍，是一项可以通过刻意练习而不断提升的<strong>技能</strong>。在 AI 时代，我们拥有了强大的工具来<strong>辅助</strong>我们攻克难关、整理信息。但请始终牢记，<strong>AI 是我们的“协处理器”和“智能拐杖”，思考和理解的主体，永远是我们自己。</strong></p>
<p>找到适合自己的节奏，在关键环节善用AI的辅助，保持耐心和好奇心，将阅读视为一场<strong>需要长期投入</strong>的修行。</p>
<p><strong>如果你希望将阅读和实践更紧密地结合起来，系统性地提升Go语言能力，并探索Go与AI的结合：</strong></p>
<ul>
<li>我把我多年 Go 语言实践和思考的精华，沉淀在了 <strong>《Go语言精进之路》</strong> 这本书中，它侧重于连接理论与实践，希望能为你打通 Go 语言学习的“任督二脉”。</li>
</ul>
<p><img src="http://image.tonybai.com/img/tonybai/go-programming-from-beginner-to-master-qr.png" alt="img{512x368}" /></p>
<ul>
<li>同时，在我的知识星球 <strong>「Go &amp; AI 精进营」</strong> 中，我开设了像 <strong>【Go进阶课】</strong> 这样覆盖语法强化、设计先行与工程实践的<strong>体系化课程</strong>，并提供深度的 <strong>专家答疑</strong> 和活跃的 <strong>社区交流</strong>。我们一起学习，一起实践，一起拥抱 Go 和 AI 的未来。</li>
</ul>
<p><img src="http://image.tonybai.com/img/tonybai/gopher-and-ai-tribe-zsxq-small-card.jpg" alt="img{512x368}" /></p>
<hr />
<p><strong>【世界读书日 · 特别福利】点赞 + 留言 + 在看，赢取签名版《Go语言精进之路》！</strong></p>
<p>为了感谢大家一直以来的支持，并响应世界读书日的精神，鼓励大家在阅读与实践的道路上不断精进，我特别准备了一个<strong>【世界读书日专属福利】</strong>活动！参加门槛很低，大家只需移步到<a href="https://mp.weixin.qq.com/s/CGYu_Za6a7kz2p2OYvP8Aw">我的公众号同名文章</a>下点赞 + 留言 + 在看，我将结合<strong>留言内容的质量</strong>与<strong>【在看】</strong>情况，从参与本次活动的读者中，抽取<strong>1</strong>位幸运儿赠送一本由我<strong>亲笔签名</strong>的<strong>《Go语言精进之路》(卷1或卷2随机)</strong>！获奖名单将在五一劳动节当天公布，获奖读者请在名单公布后的 <strong>48</strong> 小时内，主动通过<strong>公众号后台</strong>联系我，并提供准确的邮寄信息，以便我将签名版书籍寄送给您。</p>
<p>活动时间：即刻起 &#8211; 2025年04月30日23:59。</p>
<p><strong>期待大家的踊跃参与和精彩分享！</strong> 让我们在阅读与交流中，共同进步！</p>
<p>希望今天分享的这些心法和 AI 应用思路能对你有所启发。<strong>你有什么高效阅读技术书籍的独门秘诀？或者你觉得 AI 在学习中还能扮演哪些角色？欢迎在评论区留言交流！</strong></p>
<hr />
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求，请扫描下方公众号二维码，与我私信联系。</p>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p style='text-align:left'>&copy; 2025, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2025/04/23/tips-for-reading-technical-books/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>揭秘顶尖技术专家的15个关键方法与心态，不只靠代码</title>
		<link>https://tonybai.com/2025/04/13/top-programmers-methods-mindset/</link>
		<comments>https://tonybai.com/2025/04/13/top-programmers-methods-mindset/#comments</comments>
		<pubDate>Sun, 13 Apr 2025 14:02:12 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[expert]]></category>
		<category><![CDATA[Programmers]]></category>
		<category><![CDATA[PythonZen]]></category>
		<category><![CDATA[Simple]]></category>
		<category><![CDATA[一手资料]]></category>
		<category><![CDATA[习惯]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[写作]]></category>
		<category><![CDATA[协作]]></category>
		<category><![CDATA[博客]]></category>
		<category><![CDATA[声誉]]></category>
		<category><![CDATA[工具]]></category>
		<category><![CDATA[工程师]]></category>
		<category><![CDATA[思维]]></category>
		<category><![CDATA[技术专家]]></category>
		<category><![CDATA[持续学习]]></category>
		<category><![CDATA[文档]]></category>
		<category><![CDATA[演讲]]></category>
		<category><![CDATA[特质]]></category>
		<category><![CDATA[程序员]]></category>
		<category><![CDATA[简洁]]></category>
		<category><![CDATA[表达]]></category>
		<category><![CDATA[解决问题]]></category>
		<category><![CDATA[调试]]></category>
		<category><![CDATA[错误信息]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=4561</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2025/04/13/top-programmers-methods-mindset 这可能是我看到的关于‘如何成为顶尖程序员’最深刻的总结之一！ 在快速迭代的技术世界里，每一位开发者或许都曾思考：是什么区分了“优秀”与“卓越”？仅仅是掌握了最新的框架或语言吗？Matthias Endler在他广受关注的文章《我所认识的最优秀的程序员》中，基于多年的观察，提炼出了那些真正顶尖的工程师们所共有的特质与习惯。这并非一份简单的技能清单，而更像是一份关于技术匠心、持续成长和专业心态的深度指南。在这篇文章中，我门将一同探索这些宝贵的洞见，希望能为你我的技术之路带来启发。 要深入理解顶尖程序员的与众不同之处，我们首先需要探究他们是如何构建坚实的技术基础，以及在日常工作中如何对待最基本的技术细节。 夯实基础：深度理解与精准调试 卓越并非空中楼阁，它建立在对一手资料和工具的深刻理解和对错误的精准把握之上。 深入理解工具 (Know Your Tools Well): 顶尖开发者追求对所用技术的基本原理的深刻理解（Grokking），这远超仅仅“会用”的层面。一个普通用户可能会在使用中磕磕绊绊、感到困惑、甚至用错方法而忽略优化。而专家则追求透彻理解，他们能够自信地写出配置，理解其中每一行的含义并能向同事解释清楚，不留任何疑问。要真正做到“深入了解”一个工具，你需要掌握它的： 历史: 谁创造了它？为何创造？旨在解决什么问题？了解背景有助于把握其设计哲学。 现状: 谁在维护？他们在哪里工作？当前开发的重点是什么？这关乎其发展方向和稳定性。 局限: 何时不适用？它的边界条件和可能失效的场景是什么？知其短板才能扬长避短。 生态: 有哪些关键的库或插件？社区活跃度如何？谁在广泛使用它？生态决定了其生命力和可扩展性。 正如文中所举的例子：如果你是一名重度使用 Kafka 的后端工程师，成为顶尖人才意味着你需要对 Kafka 有着系统和深入的认知，而非仅仅依赖于论坛上的零散信息。 阅读原始文档 (Read the Reference): 遇到问题时，他们的第一反应往往不是求助于Stack Overflow或LLM，而是直奔官方文档、规范或源代码。无论是Apache的配置、Python标准库，还是TOML 规范，他们相信第一手资料的价值。这种习惯让他们能够自信地配置工具的每一行参数，并清晰地解释其原因。深入了解技术的历史（Why）、现状（Who &#38; What）和局限性（When not to use）是他们专业性的体现。如果你重度依赖Kafka，那么对Kafka的深入了解就应该是你的基本功。 细读错误信息 (Read The Error Message): 面对错误，他们不会惊慌失措或随意猜测，而是会真正地、深入地阅读错误信息，尝试理解其背后的含义。他们相信，错误信息本身就蕴含了解决问题的线索。这种从细微处推理的能力，让他们能够独立解决大部分问题，甚至在帮助他人时展现出惊人的洞察力。 拒绝猜测 (Don&#8217;t Guess): “面对模棱两可，拒绝猜测的诱惑”——《Python之禅》中的这条原则被顶尖开发者奉为圭臬。猜测可能会暂时“解决”问题，但错误的假设会构建脆弱的认知模型，遗患无穷。他们宁愿花费更多时间去问询、查阅资料、使用调试器，也要确保自己基于确凿的事实进行判断和行动。 掌握了扎实的基础知识固然重要，但真正的挑战往往在于如何运用这些知识去解决现实世界中的复杂问题。卓越的工程师在这方面同样展现出非凡的能力。 攻坚克难：拆解问题与拥抱挑战 拥有扎实的基础后，真正的较量在于如何面对并征服技术难题。解决复杂问题的能力，是衡量工程师价值的核心标尺。 分解问题 (Break [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/top-programmers-methods-mindset-1.jpg" alt="" /></p>
<p><a href="https://tonybai.com/2025/04/13/top-programmers-methods-mindset">本文永久链接</a> &#8211; https://tonybai.com/2025/04/13/top-programmers-methods-mindset</p>
<p><strong>这可能是我看到的关于‘如何成为顶尖程序员’最深刻的总结之一！</strong></p>
<p>在快速迭代的技术世界里，每一位开发者或许都曾思考：是什么区分了“优秀”与“卓越”？仅仅是掌握了最新的框架或语言吗？Matthias Endler在他广受关注的文章《<a href="https://endler.dev/2025/best-programmers/">我所认识的最优秀的程序员</a>》中，基于多年的观察，提炼出了那些真正顶尖的工程师们所共有的特质与习惯。这并非一份简单的技能清单，而更像是一份关于技术匠心、持续成长和专业心态的深度指南。在这篇文章中，我门将一同探索这些宝贵的洞见，希望能为你我的技术之路带来启发。</p>
<p>要深入理解顶尖程序员的与众不同之处，我们首先需要探究他们是如何构建坚实的技术基础，以及在日常工作中如何对待最基本的技术细节。</p>
<h2>夯实基础：深度理解与精准调试</h2>
<p><img src="https://tonybai.com/wp-content/uploads/top-programmers-methods-mindset-2.jpg" alt="" /></p>
<p>卓越并非空中楼阁，它建立在对一手资料和工具的深刻理解和对错误的精准把握之上。</p>
<ul>
<li>
<p><strong>深入理解工具 (Know Your Tools Well):</strong> 顶尖开发者追求对所用技术的<strong>基本原理的深刻理解（Grokking）</strong>，这远超仅仅“会用”的层面。一个普通用户可能会在使用中磕磕绊绊、感到困惑、甚至用错方法而忽略优化。而专家则追求透彻理解，他们能够自信地写出配置，理解其中每一行的含义并能向同事解释清楚，不留任何疑问。要真正做到“深入了解”一个工具，你需要掌握它的：</p>
<ul>
<li><strong>历史:</strong> 谁创造了它？为何创造？旨在解决什么问题？了解背景有助于把握其设计哲学。</li>
<li><strong>现状:</strong> 谁在维护？他们在哪里工作？当前开发的重点是什么？这关乎其发展方向和稳定性。</li>
<li><strong>局限:</strong> 何时不适用？它的边界条件和可能失效的场景是什么？知其短板才能扬长避短。</li>
<li><strong>生态:</strong> 有哪些关键的库或插件？社区活跃度如何？谁在广泛使用它？生态决定了其生命力和可扩展性。</li>
<li>正如文中所举的例子：如果你是一名重度使用 Kafka 的后端工程师，成为顶尖人才意味着你需要对 Kafka 有着系统和深入的认知，而非仅仅依赖于论坛上的零散信息。</li>
</ul>
</li>
<li>
<p><strong>阅读原始文档 (Read the Reference):</strong> 遇到问题时，他们的第一反应往往不是求助于Stack Overflow或LLM，而是直奔官方文档、规范或源代码。无论是Apache的配置、Python标准库，还是TOML 规范，他们<strong>相信第一手资料的价值</strong>。这种习惯让他们能够自信地配置工具的每一行参数，并清晰地解释其原因。深入了解技术的历史（Why）、现状（Who &amp; What）和局限性（When not to use）是他们<strong>专业性的体现</strong>。如果你重度依赖Kafka，那么对Kafka的深入了解就应该是你的基本功。</p>
</li>
<li>
<p><strong>细读错误信息 (Read The Error Message):</strong> 面对错误，他们不会惊慌失措或随意猜测，而是会<strong>真正地、深入地阅读错误信息</strong>，尝试理解其背后的含义。他们相信，错误信息本身就蕴含了解决问题的线索。这种从细微处推理的能力，让他们能够独立解决大部分问题，甚至在帮助他人时展现出惊人的洞察力。</p>
</li>
<li>
<p><strong>拒绝猜测 (Don&#8217;t Guess):</strong> “面对模棱两可，拒绝猜测的诱惑”——《<a href="https://peps.python.org/pep-0020/">Python之禅</a>》中的这条原则被顶尖开发者奉为圭臬。猜测可能会暂时“解决”问题，但错误的假设会构建脆弱的认知模型，遗患无穷。他们宁愿花费更多时间去问询、查阅资料、使用调试器，也要确保自己基于确凿的事实进行判断和行动。</p>
</li>
</ul>
<p>掌握了扎实的基础知识固然重要，但真正的挑战往往在于如何运用这些知识去解决现实世界中的复杂问题。卓越的工程师在这方面同样展现出非凡的能力。</p>
<h2>攻坚克难：拆解问题与拥抱挑战</h2>
<p><img src="https://tonybai.com/wp-content/uploads/top-programmers-methods-mindset-3.jpg" alt="" /></p>
<p>拥有扎实的基础后，真正的较量在于如何面对并征服技术难题。<strong>解决复杂问题的能力，是衡量工程师价值的核心标尺。</strong></p>
<ul>
<li>
<p><strong>分解问题 (Break Down Problems):</strong> 面对棘手的难题，卓越工程师的核心策略是<strong>将其分解为更小、更易于管理的部分</strong>。这需要经验，也需要优秀的解决问题的技巧。他们懂得，将大问题拆解成一系列小问题逐一攻破，最终会发现原本看似不可能的任务变得可行。这正是专业开发工作的核心价值所在。</p>
</li>
<li>
<p><strong>勇于实践 (Don&#8217;t Be Afraid To Get Your Hands Dirty):</strong> 他们从不畏惧接触陌生的代码库或技术栈，不会轻易说“这不归我管”或“我帮不了你”。相反，他们会主动深入其中，通过阅读和修改代码来学习。这种<strong>勇于探索和实践</strong>的态度，使他们能够快速掌握新技能，并最终成为团队中不可或缺的关键人物，仅仅因为他们是那些“敢于动手”的人。</p>
</li>
<li>
<p><strong>保持简洁 (Keep It Simple):</strong> 聪明的工程师可能会写出复杂的代码，但<strong>卓越的工程师追求编写简洁的代码</strong>。他们深知，在大多数情况下，简单即是最好，因为它更易于理解、维护和扩展。懂得在复杂度和实用性之间做出明智取舍，是区分顶尖人才的重要标志。</p>
</li>
</ul>
<p>主动解决问题的能力令人钦佩，然而，是什么支撑着顶尖开发者在漫长的职业生涯中始终保持敏锐和活力呢？答案往往隐藏在他们独特的思维模式和对成长的持续追求之中。</p>
<h2>成长心态：持续学习与谦逊求知</h2>
<p><img src="https://tonybai.com/wp-content/uploads/top-programmers-methods-mindset-4.jpg" alt="" /></p>
<p>技术能力之外，是什么支撑着顶尖开发者持续进步？关键在于永恒的成长心态和对知识的敬畏。 <strong>技术日新月异，唯有持续学习和开放心态才能立于不败之地。</strong></p>
<ul>
<li>
<p><strong>永不止步的学习 (Never Stop Learning):</strong> 许多顶尖开发者，即使年逾花甲，依然保持着对新知识的好奇心和学习热情。他们不会固守陈规，而是<strong>持续评估新技术的价值</strong>。即使决定不采用某项新技术，他们也能清晰地阐述原因、适用场景及替代方案。这种开放和批判性的学习态度，让他们始终保持思维的敏锐和知识的更新。</p>
</li>
<li>
<p><strong>地位无关紧要 (Status Doesn’t Matter):</strong> 他们乐于与任何人交流，无论是首席工程师还是初级开发者。他们相信<strong>每个人身上都有值得学习的地方</strong>，尤其是新人往往能带来不受“历史包袱”束缚的新鲜视角和创意。</p>
</li>
<li>
<p><strong>耐心是美德 (Have Patience):</strong> 无论是面对行为“怪异”的计算机，还是需要时间学习成长的同事，<strong>耐心</strong>都是不可或缺的品质。顶尖开发者明白，问题总有逻辑可循，他人只是信息不全。缺乏耐心只会让人陷入抱怨和挫败。专注、投入和耐心是解决难题、推动项目和维系团队的关键。</p>
</li>
<li>
<p><strong>永不归咎于计算机 (Never Blame the Computer):</strong> 面对看似随机或无法解释的 Bug，他们坚信背后<strong>必有逻辑原因</strong>，只是尚未找到。他们会持续挖掘，直到找到根源。这种承担责任、刨根问底的态度，是他们能够不断进步和深入理解系统的基础。</p>
</li>
<li>
<p><strong>勇于承认未知 (Don’t Be Afraid to Say “I Don’t Know”):</strong> 承认“我不知道”并非示弱，而是<strong>诚实和学习的起点</strong>。顶尖的开发者从不害怕暴露自己的知识边界，他们知道这是提出问题、进行推导和学习新知的契机。拒绝不懂装懂，是建立信任和实现真正成长的基础。</p>
</li>
</ul>
<p>技术上的精进和持续成长的内在驱动力是成为顶尖开发者的核心要素，但他们的影响力往往超越了个人代码的范畴。卓越工程师深知协作与分享的力量，并以此来放大自身价值。</p>
<h2>协作与影响力：乐于助人，善于表达</h2>
<p><img src="https://tonybai.com/wp-content/uploads/top-programmers-methods-mindset-5.jpg" alt="" /></p>
<p>顶尖的技术实力若想产生更广泛的影响，离不开有效的协作、清晰的表达和积极的知识分享。<strong>卓越工程师的影响力，往往超越其个人代码产出。</strong></p>
<ul>
<li>
<p><strong>乐于助人 (Always Help Others):</strong> 尽管自身工作繁忙，他们通常都乐于向他人伸出援手。这种<strong>天生的好奇心和乐于助人的精神</strong>，不仅帮助了他人，也促使他们自身不断思考和学习，是他们成为优秀工程师的重要因素。拥有这样的成员，对任何团队来说都是巨大的财富。</p>
</li>
<li>
<p><strong>写作即思考 (Write):</strong> 大多数顶尖工程师都具备良好的沟通能力，并且乐于分享知识。<strong>写作（博客、文档、演讲稿等）是他们整理思路、沉淀知识并扩大影响力的重要方式</strong>。清晰的写作往往反映了清晰的思维逻辑，这与其代码风格常常是相辅相成的。</p>
</li>
<li>
<p><strong>建立声誉 (Build a Reputation):</strong> 做好工作是基础，但<strong>让你的工作成果被认可</strong>，才能真正扩大你的影响力。无论是构建关键系统、开发流行工具、贡献开源项目还是著书立说，都是建立声誉的方式。声誉的建立是一个长期投入的过程，它能让你接触到更有挑战的项目，吸引更多合作者，最终“规模化”你的积极影响。</p>
</li>
</ul>
<p>从深入理解基础到攻坚克难，从保持成长心态到积极协作与分享，这些关键特质共同描绘了顶尖技术专家的画像。</p>
<h2>小结</h2>
<p>成为一名顶尖的程序员，并非一蹴而就，也无关天赋异禀。正如Matthias Endler在文章中所揭示的，这更关乎一系列<strong>刻意培养的习惯、严谨的思维方式和持续精进的专业态度</strong>。从深入理解基础，到勇于面对挑战，再到保持谦逊学习和积极协作，这些特质共同构筑了卓越工程师的画像。</p>
<p>这并非一份僵化的检查清单，而是一面镜子，映照出我们可以在日常工作中不断打磨和提升的方向。愿这些来自顶尖开发者实践的启示，能激励我们在技术的道路上走得更远、更稳健。</p>
<p><strong>原文链接:</strong> <a href="https://endler.dev/2025/best-programmers/">The Best Programmers I Know | Matthias Endler</a> &#8212; https://endler.dev/2025/best-programmers</p>
<p>你认为顶尖开发者最重要的特质是什么？欢迎在评论区分享你的观点。</p>
<hr />
<p><strong>加入「Go &amp; AI 精进营」知识星球，开启你的技术跃迁之旅！</strong></p>
<p>我们致力于打造一个高品质的 <strong>Go 语言深度学习</strong> 与 <strong>AI 应用探索</strong> 平台。在这里，你将获得：</p>
<ul>
<li><strong>体系化 Go 核心进阶内容:</strong> 深入「Go原理课」、「Go进阶课」、「Go避坑课」等独家深度专栏，夯实你的 Go 内功。</li>
<li><strong>前沿 Go+AI 实战赋能:</strong> 紧跟时代步伐，学习「Go+AI应用实战」、「Agent开发实战课」，掌握 AI 时代新技能。</li>
<li><strong>星主 Tony Bai 亲自答疑:</strong> 遇到难题？星主第一时间为你深度解析，扫清学习障碍。</li>
<li><strong>高活跃 Gopher 交流圈:</strong> 与众多优秀 Gopher 分享心得、讨论技术，碰撞思想火花。</li>
<li><strong>独家资源与内容首发:</strong> 技术文章、课程更新、精选资源，第一时间触达。</li>
</ul>
<p>衷心希望「Go &amp; AI 精进营」能成为你学习、进步、交流的港湾。让我们在此相聚，享受技术精进的快乐！欢迎你的加入！</p>
<p><img src="https://tonybai.com/wp-content/uploads/gopher-and-ai-tribe-zsxq-small-card.jpg" alt="" /><br />
<img src="http://image.tonybai.com/img/tonybai/go-programming-from-beginner-to-master-qr.png" alt="img{512x368}" /></p>
<p><img src="http://image.tonybai.com/img/tonybai/go-first-course-banner.png" alt="img{512x368}" /><br />
<img src="http://image.tonybai.com/img/tonybai/imooc-go-column-pgo-with-qr.jpg" alt="img{512x368}" /></p>
<p>著名云主机服务厂商DigitalOcean发布最新的主机计划，入门级Droplet配置升级为：1 core CPU、1G内存、25G高速SSD，价格6$/月。有使用DigitalOcean需求的朋友，可以打开这个<a href="https://m.do.co/c/bff6eed92687">链接地址</a>：https://m.do.co/c/bff6eed92687 开启你的DO主机之路。</p>
<p>Gopher Daily(Gopher每日新闻) &#8211; https://gopherdaily.tonybai.com</p>
<p>我的联系方式：</p>
<ul>
<li>微博(暂不可用)：https://weibo.com/bigwhite20xx</li>
<li>微博2：https://weibo.com/u/6484441286</li>
<li>博客：tonybai.com</li>
<li>github: https://github.com/bigwhite</li>
<li>Gopher Daily归档 &#8211; https://github.com/bigwhite/gopherdaily</li>
<li>Gopher Daily Feed订阅 &#8211; https://gopherdaily.tonybai.com/feed</li>
</ul>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。</p>
<p style='text-align:left'>&copy; 2025, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2025/04/13/top-programmers-methods-mindset/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Go早期的那些布道者</title>
		<link>https://tonybai.com/2024/05/17/the-early-evangelists-of-go/</link>
		<comments>https://tonybai.com/2024/05/17/the-early-evangelists-of-go/#comments</comments>
		<pubDate>Fri, 17 May 2024 13:43:39 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[AndrewGerrand]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Ardan]]></category>
		<category><![CDATA[badger]]></category>
		<category><![CDATA[BillKennedy]]></category>
		<category><![CDATA[BradFitzpatrick]]></category>
		<category><![CDATA[BrianKetelsen]]></category>
		<category><![CDATA[cobra]]></category>
		<category><![CDATA[Context]]></category>
		<category><![CDATA[DaveCheney]]></category>
		<category><![CDATA[deps.dev]]></category>
		<category><![CDATA[Dgraph]]></category>
		<category><![CDATA[DmitryVyukov]]></category>
		<category><![CDATA[FrancescCampoy]]></category>
		<category><![CDATA[fuzzing]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[go-fuzz]]></category>
		<category><![CDATA[go-nuts]]></category>
		<category><![CDATA[go.mod]]></category>
		<category><![CDATA[go1.18]]></category>
		<category><![CDATA[go1.23]]></category>
		<category><![CDATA[GoCourse]]></category>
		<category><![CDATA[GoExecutionTracer]]></category>
		<category><![CDATA[gohugo]]></category>
		<category><![CDATA[GoInAction]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[gomodule]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Gopher]]></category>
		<category><![CDATA[gopherchina]]></category>
		<category><![CDATA[GopherCon]]></category>
		<category><![CDATA[GoProgrammingBlueprints]]></category>
		<category><![CDATA[gops]]></category>
		<category><![CDATA[goroutine]]></category>
		<category><![CDATA[GoTime]]></category>
		<category><![CDATA[govanityurls]]></category>
		<category><![CDATA[Go社区]]></category>
		<category><![CDATA[grafana]]></category>
		<category><![CDATA[hey]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[hugo]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[JaanaDogan]]></category>
		<category><![CDATA[JustForFunc]]></category>
		<category><![CDATA[KenThompson]]></category>
		<category><![CDATA[LiveJournal]]></category>
		<category><![CDATA[MatRyer]]></category>
		<category><![CDATA[Memcached]]></category>
		<category><![CDATA[NUMA]]></category>
		<category><![CDATA[pprof]]></category>
		<category><![CDATA[Rakyll]]></category>
		<category><![CDATA[RobertGriesemer]]></category>
		<category><![CDATA[RobPike]]></category>
		<category><![CDATA[RussCox]]></category>
		<category><![CDATA[spf13]]></category>
		<category><![CDATA[statik]]></category>
		<category><![CDATA[SteveFrancia]]></category>
		<category><![CDATA[tailscale]]></category>
		<category><![CDATA[UltimateGo]]></category>
		<category><![CDATA[unique]]></category>
		<category><![CDATA[upspin]]></category>
		<category><![CDATA[vendor]]></category>
		<category><![CDATA[viper]]></category>
		<category><![CDATA[WireGurad]]></category>
		<category><![CDATA[workshop]]></category>
		<category><![CDATA[博客]]></category>
		<category><![CDATA[布道师]]></category>
		<category><![CDATA[接口]]></category>
		<category><![CDATA[播客]]></category>
		<category><![CDATA[标准库]]></category>
		<category><![CDATA[泛型]]></category>
		<category><![CDATA[调度器]]></category>
		<category><![CDATA[鼓吹者]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=4168</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2024/05/17/the-early-evangelists-of-go Go自2009年开源至今已经快15年了！这期间，有很多人对Go语言的发展做出了重要贡献，起到了至关重要的作用，他们被视为Go语言的早期布道者和鼓吹者。他们向Go社区传达着Go的价值观、Go的最新发展、Go的使用方法以及最佳实践。 这些人有来自Go团队的，有来自Google但非Go团队的，也有Go的早期采纳者和贡献者。如今这些人的状况不尽相同。有些人依然在活跃在Go团队中，为Go的演进持续做着贡献；有些人由于各种原因，已经退居二线，但仍心系Go的发展；还有一些人则逐渐淡出Go社区，或者说不再复当年的那种热忱。 不过，无论哪种，这些人为Go语言的推广和发展都做出了不可磨灭的贡献，值得Gopher们铭记。在这篇文章中，我就来说说这些Go早期的布道师。也可以让后进入Go阵营的Gopher们了解一下过去的事情。 注：这里是不完全统计，还有很多早期Go布道师做出了重要贡献，限于篇幅，这里就不一一列举细数了。 Rob Pike Rob Pike 是Go语言的共同创始人之一，他在2007年与Ken Thompson和Robert Griesemer一起开始了Go语言的开发。 作为一名经验丰富的计算机科学家，Rob Pike曾在贝尔实验室工作，参与了Plan 9和Inferno操作系统的开发，UTF-8也是他的杰作。此外，他还是C语言和UNIX操作系统的早期贡献者之一。 Rob Pike为Go语言的设计和实现做出了重大贡献。他的设计理念强调简洁、并发和高效，这些理念深深影响了Go语言的核心特性。在Go语言的早期发展阶段，Rob Pike几乎主导了Go语言规范的制定，并负责了许多关键语言特性的开发。在Ken Thompson退休后，他成为了Go语言第一代的领军人物。 除了技术贡献，Rob Pike还是最为积极的Go语言推广者。他在Google内外的各种会议和技术活动中发表演讲，介绍Go语言的优势、应用场景以及使用方法。他的演讲风格生动有趣，深受开发者的喜爱。此外，Rob Pike还撰写了大量关于Go语言的博客和技术文档，为社区提供了宝贵的学习资源。 截图来自golang.design 他的“3 Day Go Course”也是最早、最权威的Go教程，即便在今天看来略有些Outdated了:)。 注：关于Rob Pike的早期3-days Go Course ppt，可以在这里下载https://www.cs.cmu.edu/afs/cs.cmu.edu/academic/class/15440-f11/go/doc/ 现如今，Rob Pike已经从Google退休了，并长居澳大利亚，并继续为Go语言的发展做着贡献。尽管他不再像早期那样频繁地参与社区活动，但他的影响力依然深远，Go 1.18泛型发布前，Rob Pike就及时纠正了Go团队对泛型的支持策略。 Rob Pike的工作为Go语言奠定了坚实的基础，使其成为现代编程语言中的一颗璀璨明珠。 Robert Griesemer Robert Griesemer是Go语言的另一位共同创始人。他在加入Go团队之前，他曾参与Google V8 JavaScript引擎、Sawzall语言、Java HotSpot虚拟机和Strongtalk系统的工作，拥有丰富的编程语言设计和实现经验。 Griesemer在设计和实现Go语言方面发挥了关键作用，尤其是在语法和编译器的开发上。Griesemer的设计理念强调语言的简洁性和易用性，这使得Go语言在开发者中迅速获得了广泛的认可。他致力于优化编译器性能，使Go程序能够高效地运行在各种平台上。Griesemer还参与了Go语言标准库的设计和实现，为开发者提供了丰富的工具和资源。 在Go语言的推广方面，Griesemer同样不遗余力。他经常参与技术会议和社区活动，分享Go语言的设计理念和最佳实践，他也是唯一在GopherChina上现场进行分享的Go语言之父。 他的技术讲座深入浅出，帮助许多开发者快速上手Go语言。此外，Griesemer还与其他团队成员合作撰写了多篇技术论文和博客，进一步推动了Go语言的普及。 截图来自golang.design 目前，Griesemer依然在Google Go团队工作，奋战在Go语言的开发和优化的第一线。他和Ian Lance Taylor共同设计和实现了Go泛型机制，大幅提升了Go的表达能力。他的工作对Go语言的成功起到了至关重要的作用，使其成为许多大型项目和企业的首选开发语言。 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/the-early-evangelists-of-go-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2024/05/17/the-early-evangelists-of-go">本文永久链接</a> &#8211; https://tonybai.com/2024/05/17/the-early-evangelists-of-go</p>
<p>Go自2009年开源至今<a href="https://tonybai.com/2023/11/11/go-opensource-14-years/">已经快15年了</a>！这期间，有很多人对Go语言的发展做出了重要贡献，起到了至关重要的作用，他们被视为<strong>Go语言的早期布道者和鼓吹者</strong>。他们向Go社区传达着Go的价值观、Go的最新发展、Go的使用方法以及最佳实践。</p>
<p>这些人有来自Go团队的，有来自Google但非Go团队的，也有Go的早期采纳者和贡献者。如今这些人的状况不尽相同。有些人依然在活跃在Go团队中，为Go的演进持续做着贡献；有些人由于各种原因，已经退居二线，但仍心系Go的发展；还有一些人则逐渐淡出Go社区，或者说不再复当年的那种热忱。</p>
<p>不过，无论哪种，这些人为Go语言的推广和发展都做出了不可磨灭的贡献，值得Gopher们铭记。在这篇文章中，我就来说说这些Go早期的布道师。也可以让后进入Go阵营的Gopher们了解一下过去的事情。</p>
<blockquote>
<p>注：这里是不完全统计，还有很多早期Go布道师做出了重要贡献，限于篇幅，这里就不一一列举细数了。</p>
</blockquote>
<h2><a href="https://en.wikipedia.org/wiki/Rob_Pike">Rob Pike</a></h2>
<p>Rob Pike 是Go语言的共同创始人之一，他在2007年与Ken Thompson和Robert Griesemer一起开始了Go语言的开发。</p>
<p><img src="https://tonybai.com/wp-content/uploads/the-early-evangelists-of-go-2.jpeg" alt="" /></p>
<p>作为一名经验丰富的计算机科学家，Rob Pike曾在贝尔实验室工作，参与了Plan 9和Inferno操作系统的开发，UTF-8也是他的杰作。此外，他还是C语言和UNIX操作系统的早期贡献者之一。</p>
<p>Rob Pike为Go语言的设计和实现做出了重大贡献。他的设计理念<a href="https://time.geekbang.org/column/article/426740">强调简洁、并发和高效</a>，这些理念深深影响了Go语言的核心特性。在Go语言的早期发展阶段，Rob Pike几乎主导了Go语言规范的制定，并负责了许多关键语言特性的开发。在Ken Thompson退休后，他成为了Go语言第一代的领军人物。</p>
<p>除了技术贡献，Rob Pike还是<strong>最为积极的Go语言推广者</strong>。他在Google内外的各种会议和技术活动中发表演讲，介绍Go语言的优势、应用场景以及使用方法。他的演讲风格生动有趣，深受开发者的喜爱。此外，Rob Pike还撰写了大量关于Go语言的博客和技术文档，为社区提供了宝贵的学习资源。</p>
<p><img src="https://tonybai.com/wp-content/uploads/the-early-evangelists-of-go-3.png" alt="" /><br />
<center>截图来自golang.design</center></p>
<p>他的<a href="https://tonybai.com/2012/08/23/the-go-programming-language-tutorial-part1/">“3 Day Go Course”</a>也是最早、最权威的Go教程，即便在今天看来略有些Outdated了:)。</p>
<p><img src="https://tonybai.com/wp-content/uploads/the-early-evangelists-of-go-5.png" alt="" /></p>
<blockquote>
<p>注：关于Rob Pike的早期<a href="https://www.cs.cmu.edu/afs/cs.cmu.edu/academic/class/15440-f11/go/doc/">3-days Go Course ppt</a>，可以在这里下载https://www.cs.cmu.edu/afs/cs.cmu.edu/academic/class/15440-f11/go/doc/</p>
</blockquote>
<p>现如今，Rob Pike已经从Google退休了，并长居澳大利亚，并继续为Go语言的发展做着贡献。尽管他不再像早期那样频繁地<a href="https://tonybai.com/2024/01/07/what-we-got-right-what-we-got-wrong/">参与社区活动</a>，但他的影响力依然深远，<a href="https://tonybai.com/2022/04/20/some-changes-in-go-1-18">Go 1.18泛型</a>发布前，<a href="https://tonybai.com/2021/10/28/expectations-for-generics-in-go-1.18">Rob Pike就及时纠正了Go团队对泛型的支持策略</a>。</p>
<p>Rob Pike的工作为Go语言奠定了坚实的基础，使其成为现代编程语言中的一颗璀璨明珠。</p>
<h2><a href="https://en.wikipedia.org/wiki/Robert_Griesemer">Robert Griesemer</a></h2>
<p>Robert Griesemer是Go语言的另一位共同创始人。他在加入Go团队之前，他曾参与Google V8 JavaScript引擎、Sawzall语言、Java HotSpot虚拟机和Strongtalk系统的工作，拥有丰富的编程语言设计和实现经验。</p>
<p>Griesemer在设计和实现Go语言方面发挥了关键作用，尤其是在语法和编译器的开发上。Griesemer的设计理念强调语言的简洁性和易用性，这使得Go语言在开发者中迅速获得了广泛的认可。他致力于优化编译器性能，使Go程序能够高效地运行在各种平台上。Griesemer还参与了Go语言标准库的设计和实现，为开发者提供了丰富的工具和资源。</p>
<p>在Go语言的推广方面，Griesemer同样不遗余力。他经常参与技术会议和社区活动，分享Go语言的设计理念和最佳实践，他也是唯一在GopherChina上现场进行分享的Go语言之父。</p>
<p>他的技术讲座深入浅出，帮助许多开发者快速上手Go语言。此外，Griesemer还与其他团队成员合作撰写了多篇<a href="https://tonybai.com/2022/05/04/the-paper-of-go-programming-language-and-environment">技术论文和博客</a>，进一步推动了Go语言的普及。</p>
<p><img src="https://tonybai.com/wp-content/uploads/the-early-evangelists-of-go-4.png" alt="" /><br />
<center>截图来自golang.design</center></p>
<p>目前，Griesemer依然在Google Go团队工作，奋战在Go语言的开发和优化的第一线。他和<a href="https://github.com/ianlancetaylor">Ian Lance Taylor</a>共同设计和实现了<a href="https://tonybai.com/2021/02/18/typing-generic-go-by-griesemer-at-gophercon-2020/">Go泛型机制</a>，大幅提升了Go的表达能力。他的工作对Go语言的成功起到了至关重要的作用，使其成为许多大型项目和企业的首选开发语言。</p>
<h2><a href="https://en.wikipedia.org/wiki/Brad_Fitzpatrick">Brad Fitzpatrick</a></h2>
<p>Brad Fitzpatrick是一位资深的美国程序员。在加入Go团队之前，Fitzpatrick就因创建LiveJournal和Memcached而闻名。后来加入Google，成为Go团队的重要成员，并在Go语言社区中拥有很高的声誉。</p>
<p>在Go语言的发展过程中，Fitzpatrick为许多关键组件做出了贡献，尤其是在网络库和并发编程模型方面。他创建了诸如HTTP包和<a href="https://github.com/golang/go/issues/14660">context包</a>等核心库，这些库广泛应用于Go语言的网络编程中。</p>
<p>Fitzpatrick不仅在技术上对Go做出了杰出贡献，他还是Go社区活动的积极参与者，是Go团队中参与社区活动的“典范”。他经常在技术会议和用户组活动中发表演讲，分享自己的经验和最佳实践。Fitzpatrick的工作帮助许多开发者更好地理解和使用Go语言，推动了社区的发展。</p>
<p><img src="https://tonybai.com/wp-content/uploads/the-early-evangelists-of-go-6.png" alt="" /><br />
<center>截图来自golang.design</center></p>
<p>几年前，Fitzpatrick离开了Google并重新创业，他联创的<a href="https://github.com/tailscale">Tailscale</a>基于<a href="https://tonybai.com/2020/03/29/hello-wireguard/">WireGuard</a>和Go打造号称世界上最容易使用的安全private network产品。一些Go commiter和Ex-googler也被Fitzpatrick招入tailscale。Tailscale团队后续也成为了Go的重要贡献团队，比如<a href="https://github.com/go4org">go4org</a>下的很多实用包，像<a href="https://github.com/go4org/intern">intern</a>、<a href="https://tonybai.com/2023/04/16/understanding-unsafe-assume-no-moving-gc">unsafe-assume-no-moving-gc</a>、<a href="https://github.com/go4org/mem">mem</a>等。其中的intern还是<a href="https://github.com/golang/go/issues/62483">Go 1.23中加入的unique包</a>的灵感之源。</p>
<p>仍然活跃在Go开源社区的Fitzpatrick依旧继续为Go语言和其他开源项目做着贡献，他的热情和奉献精神使他成为Go社区中备受尊敬的领袖之一。</p>
<h2><a href="https://github.com/adg">Andrew Gerrand</a></h2>
<p>Andrew Gerrand是Go团队的早期成员之一，他为Go团队工作七年，早期也是Go项目的Top10贡献者。但他在Go团队的主要职责其实是围绕该语言构建社区并管理开源项目。Gerrand的工作帮助许多开发者快速上手Go语言。他编写的Go语言文章深入浅出，覆盖了从基础语法到高级特性的方方面面。此外，Gerrand还创建了Go Playground，一个在线编程环境，使开发者能够方便地编写和运行Go代码。</p>
<p>除了技术文档，Gerrand还积极参与社区活动。他组织和主持了多次Go语言会议（比如GopherCon）和用户组活动，推动了Go社区的建设和发展，是Rob Pike做Go社区推广的好搭档。。Gerrand还经常在Go语言的官方博客上发表文章，介绍Go的最新特性和最佳实践，官博早期的大部分文章都出自他手。由此看来，Gerrand在早期对Go语言的推广和社区建设做出过重要贡献。</p>
<p>从2016年开始，他跟随Rob Pike转战<a href="https://github.com/upspin/upspin">Upspin项目</a>，这个项目活跃了一年多，虽然现在依然在更新，但关注度目前已不是很高。Gerrand目前已经远离Go项目开发，并且很少撰文或参与Go社区活动。但他仍然在upspin、<a href="https://github.com/google/deps.dev">deps.dev</a>等google项目上使用Go进行着开发和维护工作。</p>
<p>如果要关注Gerrand的日常，可以<a href="https://twitter.com/enneff">在X上follow他的账号</a>。</p>
<h2><a href="https://swtch.com/~rsc/">Russ Cox</a></h2>
<p>Russ Cox是早期Go语言团队的重要成员之一，对Go语言的设计和实现做出了重大贡献。他拥有麻省理工学院的计算机科学博士学位，曾在贝尔实验室和Rob Pike一起在<a href="http://plan9.bell-labs.com/plan9">Plan9项目</a>上工作过。Cox在加入Google后，成为Go语言项目的核心开发者之一。</p>
<p>Russ Cox对Go的贡献是全方位的，无论在语言特性、工具链、社区推广等方面都有很大建树。这也使得他在Rob Pike退休后，迅速成为了Go语言的第二代领军人物。</p>
<p>近几年进入Go阵营的开发者对Russ Cox不可谓不熟悉，他主导了<a href="https://tonybai.com/2020/12/03/should-you-commit-the-vendor-folder-in-go">vendor</a>、type alias、<a href="https://go.dev/ref/mod">Go module</a>、<a href="https://tonybai.com/2022/03/25/intro-generics">泛型</a>等设计和实现，直接引领了Go的演进方向。</p>
<p>近几年，Russ Cox经常在GopherCon大会上代表Go团队发表主旨演讲，并在官博亲自撰文，向Go社区传达Go语言的演进思路与方向。经过多年历练，Russ Cox逐渐扛起了Go这杆大旗，接过了Rob Pike手中沉甸甸的Go接力棒。</p>
<h2><a href="https://github.com/dvyukov">Dmitry Vyukov</a></h2>
<p>Dmitry Vyukov是一位俄罗斯大神级程序员，英特尔并行编程黑带级程序员。加入Google后一直从事性能优化方面的工作，包括并发无锁算法、执行跟踪和竞争检测工具、fuzzing工具等。Vyukov虽然不是Go团队成员，但他对Go的贡献却是核心级的，主要包括：</p>
<ul>
<li><a href="https://tonybai.com/2017/06/23/an-intro-about-goroutine-scheduler/">Goroutine scheduler的设计和实现</a>，从G-M模型，到G-P-M模型，至今Goroutine scheduler还是在Vyukov实现的基础上修修补补的。他还提出了<a href="https://docs.google.com/document/d/1d3iI2QWURgDIsSR6G2275vMeQ_X7w-qxM2Vp7iGwwuM/pub">Go调度器的NUMA设计方案</a>，但目前尚未进入Go proposal流程</li>
<li><a href="https://tonybai.com/2021/06/28/understand-go-execution-tracer-by-example">Go execution tracer的设计和实现</a></li>
<li><a href="https://tonybai.com/2015/12/08/go-fuzz-intro/">设计和实现Go Fuzzing的早起雏形</a>，并<a href="https://tonybai.com/2021/12/01/first-class-fuzzing-in-go-1-18">推动Fuzzing进入Go项目</a>。</li>
</ul>
<p>除了技术贡献，Vyukov早期也会参与一些会议和社区活动，虽然不多，主要是推广Go execution tracer和<a href="https://tonybai.com/2015/12/08/go-fuzz-intro/">go-fuzz工具</a>。</p>
<p>目前，Vyukov依然在Google工作，也在继续为Go语言的发展做着力所能及的贡献。</p>
<h2><a href="https://spf13.com/about/">Steve Francia</a></h2>
<p>Steve Francia是早起Go语言社区的重要成员之一，对Go语言的推广和社区建设做出了重要贡献。Francia在加入Google之前，曾在MongoDB、Docker公司工作，拥有丰富的开发和管理经验。之后他加入Google，在Go语言项目中担任开发者关系经理，负责推动Go语言在企业中的应用。</p>
<p>Francia最为人称道的是他开发并开源的几个Go项目，包括<a href="https://tonybai.com/2015/09/23/intro-of-gohugo/">goHugo</a>、<a href="https://tonybai.com/2023/03/25/the-guide-of-developing-cli-program-in-go">Cobra</a>和<a href="https://tonybai.com/2022/09/20/use-viper-to-do-merge-of-yml-configuration-files/">viper</a>等。其中的hugo，一个基于Go语言的静态网站生成器，广受开发者的欢迎。</p>
<p>除了技术贡献，Francia还致力于社区建设。他组织和主持了多次Go语言会议和用户组活动，推动了Go社区的发展。Francia还在其<a href="https://spf13.com">个人博客</a>上撰写了大量关于Go语言的技术文档，为开发者提供了宝贵的学习资源。</p>
<p>目前，Francia已经离开了Google和Go团队，并在一家位于纽约的初创公司担任CTO。目前在Go社区，他已不再像以前那样活跃，但他的几个开源项目依然保持积极开发中，也有人协助他打理这些开源项目。</p>
<p>总之，Francia的工作对Go语言的普及和社区建设起到了重要的作用，帮助Go成为开发者们最喜爱的编程语言之一。</p>
<h2><a href="https://github.com/rakyll">Jaana Dogan</a></h2>
<p>Jaana Dogan是这个布道者列表中唯一的女性程序员。她曾是Go语言团队的一名工程师，对Go语言的性能优化、诊断和工具开发做出了重要贡献。但她在Go团队工作的时间并不长，很快就离开了Go团队，原因未知。目前她供职在github。</p>
<p>Dogan对社区的贡献主要体现在其<a href="https://rakyll.org/">关于Go的独特观点的博客文章</a>、<a href="https://go.dev/doc/diagnostics">诊断相关的技术文档</a>以及其开源的诸多项目，比如：<a href="https://github.com/rakyll/hey">hey</a>、<a href="https://github.com/google/gops">gops</a>、<a href="https://github.com/GoogleCloudPlatform/govanityurls">govanityurls</a>、<a href="https://github.com/rakyll/statik">statik</a>等。这些项目都不大，但却十分实用。</p>
<p>很多gopher中<a href="https://tonybai.com/2021/07/06/add-metrics-for-go-application-using-go-metrics">使用hey进行http压测</a>，gops则是高频使用的Go辅助诊断工具，govanityurls则是我的《<a href="https://tonybai.com/2021/09/03/the-approach-to-go-get-private-go-module-in-house">小厂内部私有Go module拉取方案</a>》的重要组件。statik也是<a href="https://tonybai.com/2021/02/25/some-changes-in-go-1-16">Go 1.16版本</a>引入<a href="https://tonybai.com/2020/12/12/a-forward-look-to-new-feature-of-go-1-16/">go:embed</a>之前在可执行文件中嵌入静态文件的一个可选工具。</p>
<p>Dogan在社区中以其深入的技术见解和乐于分享的态度，赢得了广泛的尊重和赞誉。不过，离开Google后，尤其是进入github后，Dogan在Go上面的投入似乎变少了很多，博客文章基本也不更新了，也没有新的开源项目产出，这对Go社区来说算是一个“损失”吧。</p>
<h2><a href="https://github.com/bketelsen">Brian Ketelsen</a>和<a href="https://github.com/erikstmartin">Erik St. Martin</a></h2>
<p>将Brian Ketelsen和Erik St. Martin放在一起说，是因为他们一起对Go语言以及Go社区的最大贡献就是共同创办了<a href="https://www.gophercon.com/">GopherCon</a>，这是全球最大也是最权威的Go语言开发者大会，每年都会吸引大量来自世界各地的Go开发者。GopherCon不仅是一个技术交流的平台，也是Go社区的重要聚会，促进了开发者之间的交流与合作。两人在组织和推动GopherCon的过程中，展示了他们对Go语言的热情和奉献精神。今年(2024年)也是GopherCon诞生的第10个年头，想必这又是一场Go语言和Go社区的盛会！</p>
<p><img src="https://tonybai.com/wp-content/uploads/the-early-evangelists-of-go-7.jpg" alt="" /></p>
<p>除了会议组织和社区活动，Ketelsen和St. Martin还与William Kennedy联合撰写了关于Go语言的技术书籍<a href="https://book.douban.com/subject/25858023/">《Go in Action》</a>。这本书深入浅出地介绍了Go语言的基础知识和实际应用，为开发者提供了系统的学习资源。此外，他们还参与了多个开源项目，为Go语言的生态系统做出了重要贡献。</p>
<p>目前，Ketelsen和St. Martin都供职于微软公有云团队，仍然活跃在Go社区。</p>
<h2><a href="https://www.campoy.cat/">Francesc Campoy</a></h2>
<p>Francesc Campoy是Go语言社区的知名讲师和布道者，对Go语言的推广和普及做出了重要贡献。Campoy在加入Google之前，曾在西班牙的一家软件公司工作，拥有丰富的开发经验。他在Go语言项目中担任开发者关系经理，负责向开发者推广Go语言。Campoy也曾作为GopherChina的嘉宾在多年前来到中国布道！</p>
<p>Campoy的工作帮助许多开发者快速上手Go语言。他制作了一系列高质量的Go语言视频教程“<a href="https://youtube.com/c/justforfunc">Just for func</a>”，涵盖了从基础语法到高级特性的方方面面。这些视频教程深入浅出，受到了广泛的欢迎。此外，Campoy还创建了Go语言的官方YouTube频道，定期发布技术讲座和演示，进一步推动了Go语言的普及。</p>
<p>2016年，Campoy从Google离职，加入<a href="https://dgraph.io/">Dgraph Labs</a>，负责原生GraphQL数据库<a href="https://github.com/dgraph-io/dgraph">dgraph</a>以及<a href="https://github.com/dgraph-io/badger">键值数据库badger</a>的开发。后来Dgraph labs内讧，Campoy转投到apple名下。</p>
<p>进入Apple后，Campoy就渐渐从Go社区淡出了。但他仍然会进行一些Go项目的开发，Github的activity中有他的一些活动记录，但更多地是对私有仓库的贡献。</p>
<h2><a href="https://dave.cheney.net/">Dave Cheney</a></h2>
<p>如果说Go团队之外，谁是大家最喜欢的Go布道师和意见领袖，<strong>矮胖子Dave Cheney</strong>肯定可以拿到数一数二的选票。</p>
<p>相信早期学过Go语言的Gopher们，没有没读过Dave Cheney的个人博客的。他的博客从2010开始写的内容就几乎都与Go相关，并且思维缜密，写作风格深入浅出，颇受Gopher欢迎。</p>
<p>很多人还参与过他在世界各地举办的Go用户活动。Dave Cheney也是来到中国GopherChina大会最多的Go布道师，为中国Gopher带来了精彩的演讲以及<a href="https://dave.cheney.net/practical-go/presentations/qcon-china.html">极具干货的大会前Workshop</a>。</p>
<p>除了技术资料外，Dave Cheney早期在Go项目的issue上、在<a href="https://groups.google.com/g/golang-nuts">go-nuts邮件列表</a>以及stackoverflow上也是非常活跃，非常乐于帮助那些想给Go项目做出贡献的gopher融入。同时他在github.com/pkg下开源的诸多项目也非常实用（比如https://github.com/pkg/errors），深受大家欢迎。</p>
<p>更多关于Dave Cheney对Go语言的贡献，可以阅读其<a href="https://dave.cheney.net/about">个人博客的about页面</a>。</p>
<p>不过不知何故，从2021年初开始，Dave Cheney的博客开始停更，他在社区的声音也逐渐消失。直到今年年初，Dave Cheney才又更新了一篇名为<a href="https://dave.cheney.net/2024/02/22/microblog-testmain-can-cause-one-to-question-reality">“Microblog: TestMain can cause one to question reality”</a>的文章。</p>
<p>不过从Dave Cheney的github Contribution activity来看，Dave仍然在大量的编写代码，只是这些代码是commit到private仓库的。</p>
<p>希望Dave Cheney能早日回归Go社区，并恢复当初的那份热忱。</p>
<h2><a href="https://twitter.com/goinggodotnet">Bill Kennedy</a></h2>
<p>Bill Kennedy是Go语言社区的知名讲师和布道者，对Go语言的推广和普及做出了重要贡献，并且这种贡献一直持续至今。</p>
<p>Kennedy是<a href="https://www.ardanlabs.com/">ardan labs</a>的CTO，也是该公司的主要讲师，他最拿手的Ultimate Go培训已经开办了十多年了，每年都会在全球进行很多场培训，此外，GopherCon大会前的Workshop总是少不了Bill Kennedy的training。</p>
<p>除了Training，Ardan Labs早期的博客文章也堪称精品，不少Gopher因这些文章而受益！Kennedy的工作主要是帮助许多开发者快速上手Go语言。他还撰写了多本关于Go语言的技术书籍，如《Go in Action》和《Ultimate Go》。这些书籍深入浅出，涵盖了从基础语法到高级特性的方方面面，为开发者提供了系统的学习资源。</p>
<p>除了技术培训，Kennedy还积极参与Go语言演进和Go社区活动之中，这其中一个最典型的事件就是2019年他代表广大Gopher用户发<a href="https://www.ardanlabs.com/blog/2019/07/an-open-letter-to-the-go-team-about-try.html">给Go团队的公开信</a>，极力组织不成熟的try关键字提案进入Go语言。</p>
<p>目前，Kennedy依然活跃在Go社区，继续推动Go语言的发展和普及。</p>
<h2><a href="https://github.com/matryer">Mat Ryer</a></h2>
<p>Mat Ryer是Go语言社区的一位资深开发者和布道者，他是一名英国程序员。他之前在Go社区非常活跃，积极参与技术会议和社区活动，分享Go语言在实际项目中的应用经验和最佳实践，其中最持久的莫过于主持<a href="https://changelog.com/gotime">Go Time播客</a>了！”Go Time”是一个专注于Go编程语言的播客节目。该播客由Changelog Media出品，主要内容涵盖了Go语言的新特性、最佳实践、社区新闻、工具和库的推荐，以及与Go生态系统相关的各种话题。节目通常会邀请Go社区的知名开发者、贡献者和专家作为嘉宾，分享他们的经验和见解。截至写本文时，该播客已经发布了315期，每期都有音频和<a href="https://github.com/thechangelog/transcripts/blob/master/gotime/">文字稿</a>。</p>
<p>除了上述活动，Mat Ryer还是<a href="https://book.douban.com/subject/26907929/">《Go Programming Blueprints》</a>一书的作者。</p>
<p>如今Mat Ryer依然活跃在Go社区，他供职于Grafana，依然从事着Go语言开源项目的开发，同时主持Go Time播客以及组织和参与各种Go用户会议。</p>
<h2>参考资料</h2>
<ul>
<li><a href="https://golang.design/history/">Go history</a> &#8211; https://golang.design/history/</li>
</ul>
<hr />
<p><a href="https://public.zsxq.com/groups/51284458844544">Gopher部落知识星球</a>在2024年将继续致力于打造一个高品质的Go语言学习和交流平台。我们将继续提供优质的Go技术文章首发和阅读体验。同时，我们也会加强代码质量和最佳实践的分享，包括如何编写简洁、可读、可测试的Go代码。此外，我们还会加强星友之间的交流和互动。欢迎大家踊跃提问，分享心得，讨论技术。我会在第一时间进行解答和交流。我衷心希望Gopher部落可以成为大家学习、进步、交流的港湾。让我相聚在Gopher部落，享受coding的快乐! 欢迎大家踊跃加入！</p>
<p><img src="http://image.tonybai.com/img/tonybai/gopher-tribe-zsxq-small-card.png" alt="img{512x368}" /><br />
<img src="http://image.tonybai.com/img/tonybai/go-programming-from-beginner-to-master-qr.png" alt="img{512x368}" /></p>
<p><img src="http://image.tonybai.com/img/tonybai/go-first-course-banner.png" alt="img{512x368}" /><br />
<img src="http://image.tonybai.com/img/tonybai/imooc-go-column-pgo-with-qr.jpg" alt="img{512x368}" /></p>
<p>著名云主机服务厂商DigitalOcean发布最新的主机计划，入门级Droplet配置升级为：1 core CPU、1G内存、25G高速SSD，价格5$/月。有使用DigitalOcean需求的朋友，可以打开这个<a href="https://m.do.co/c/bff6eed92687">链接地址</a>：https://m.do.co/c/bff6eed92687 开启你的DO主机之路。</p>
<p>Gopher Daily(Gopher每日新闻) &#8211; https://gopherdaily.tonybai.com</p>
<p>我的联系方式：</p>
<ul>
<li>微博(暂不可用)：https://weibo.com/bigwhite20xx</li>
<li>微博2：https://weibo.com/u/6484441286</li>
<li>博客：tonybai.com</li>
<li>github: https://github.com/bigwhite</li>
<li>Gopher Daily归档 &#8211; https://github.com/bigwhite/gopherdaily</li>
</ul>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。</p>
<p style='text-align:left'>&copy; 2024, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2024/05/17/the-early-evangelists-of-go/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>这可能是最权威、最全面的Go语言编码风格规范了！</title>
		<link>https://tonybai.com/2022/11/26/intro-of-google-go-style/</link>
		<comments>https://tonybai.com/2022/11/26/intro-of-google-go-style/#comments</comments>
		<pubDate>Sat, 26 Nov 2022 05:56:25 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[best-practices]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[cockroachdb]]></category>
		<category><![CDATA[Cpp]]></category>
		<category><![CDATA[decisions]]></category>
		<category><![CDATA[EffectiveGo]]></category>
		<category><![CDATA[FAQ]]></category>
		<category><![CDATA[gitlab]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[GoFAQ]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[gotips]]></category>
		<category><![CDATA[Go语言编码风格规范]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[idiomatic]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[sourcegraph]]></category>
		<category><![CDATA[style-guide]]></category>
		<category><![CDATA[uber]]></category>
		<category><![CDATA[代码风格]]></category>
		<category><![CDATA[博客]]></category>
		<category><![CDATA[地道]]></category>
		<category><![CDATA[惯用法]]></category>
		<category><![CDATA[编码规范]]></category>
		<category><![CDATA[谷歌]]></category>
		<category><![CDATA[鹅厂]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=3747</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2022/11/26/intro-of-google-go-style 每种编程语言除了固定的语法之外，都会有属于自己的地道的(idiomatic)写法。其实，自然语言也不例外，你想，你用心想想是不是这样。 语言的设计者们希望开发人员都能编写统一风格的地道的代码，这样不仅代码可读性好，便于社区统一代码风格，而且针对惯用法的优化也可能会让地道的代码拥有更好的运行效率。语言团队也会不遗余力的通过各种方式(文档、blog、演讲、书籍、视频等)向开发者传授如何写出更地道、更高效、可读性更好的代码。 以Go语言为例，为了能让Gopher更好的了解如何写出高效、地道的Go代码，Go开源伊始就编写了《Effective Go》和《Go FAQ》两篇文档。前者负责介绍Go惯用法，后者则担负着将Go语言设计层面的问题以及解决思路与Gopher进行对齐的重任： 同时，Go语言之父们以及Go团队核心成员们在早期十分活跃并不遗余力的向Go社区推广Go的惯用法，Go官方站点上积累的各个早期的blog文章以及各个talk资料也成为了gopher学习地道Go编码的重要参考： 这些资料为了全世界Gopher的Go编码风格建立了基线。大多数情况下只要遵循这些资料并借助gofmt工具的自动格式化就可以写出风格比较地道的Go代码了。 然而《Effective Go》更像是说明地道风格Go代码的总体原则，不能“面面俱到”的覆盖每个编码的细节，而大公司对内部代码的风格一致性有着严格的要求。这不仅是高质量的要求，也是内部高效协作的要求。于是在若干年后，一些较早接纳Go且成为Go重度用户的大厂和初创公司结合自己的工程实践纷纷推出了公司内使用的Go编码风格规范，这里就包含我们耳熟能详的Uber、鹅厂、sourcegraph、CockroachDB、gitlab 等。这些Go代码风格指南也成为Go社区开发人员在代码风格规范性方面的重要参考。 不过，这些公司推出的代码风格指南有一个共同特点，那就是规范性有余，但权威性和全面性不足。Go社区都期待这Go语言的发源地：Google公司的Go编码风格规范的推出。之前，Google已经在其style guide站点上推出了其内部使用的很多主流编程语言的style guide，包括：C++、Java、C#、JavaScript、Python、Shell等。 在2022年11月份中旬，就在Go刚刚过完其第13个生日而步入青少年成长阶段之际，Google内部的Go语言编码风格规范终于出现在其style guide站点上了！ 不过，在介绍Google Go style guide前，我们首先要知道有关google style guide的几点内容： 这些guide的主要目的是Google内部自用，所有开发人员、代码审查人员、代码可读性导师必须要遵守并达成一致； 所有语言的style guide都会随着语言的演进而持续更新优化； 各个语言的style guide的结构布局与写作风格都不相同； 这些style guide都不接受Google之外人员的pr。 如上图，Google内部的Go语言编码风格规范系列文档目前由四个部分组成，它们分别是概述、指南、决定和最佳实践。根据概述篇的内容我们可以大体知道每篇文档的功用。这一系列文档汇集了当前编写可读的且地道的(idiomatic)Go代码的最佳方法，其目的是使刚接触这门语言的开发者能够避免常见的错误，同时也为那些在Google内部审查Go代码的人提供统一的风格。 这些文档的重要性略有不同： 指南篇（https://google.github.io/styleguide/go/guide）概述了Google的Go编码风格的基础。这份文件是权威性的，并被用作风格决定和最佳实践两个文档中建议的基础。 决定篇 (https://google.github.io/styleguide/go/decisions) 是一份内容更详细的文档，总结了关于特定风格点的决定，并在适当的地方讨论了决定背后的理由。这些决定可能偶尔会根据新的数据、新的语言特性、新的库或新出现的模式而改变。 最佳实践篇（https://google.github.io/styleguide/go/best-practices）记录了一些随着时间的推移而发展起来的模式，这些模式可以解决常见的问题，且可读性好并足够健壮，可以满足对代码可维护性的要求。 初步阅读了一下，这系列文档份的确算是目前最权威、最全面的Go语言编码风格规范了！其中决定篇和最佳实践篇涵盖的内容非常全面，内容和例子也非常到位。只不过，这套规范由于刚刚推出，还有很多改善优化和标记todo的地方。并且，其中有些内容是与Google是强相关的，但这依然是一份值得每个gopher认真阅读的资料。 此外，整套文档中经常引用一个名为“Go tips”的文档，不过该文档尚未放出，但从行文中引用的go tips的章节标题来看，很值得期待！ 本博客正在将这套文档翻译为中文供大家参考，目前概述篇、指南篇和决定篇和最佳实践篇均已经初步翻译完毕(机翻辅助)。待go tips文档发布后，这里也会将其译为中文。 “Gopher部落”知识星球旨在打造一个精品Go学习和进阶社群！高品质首发Go技术文章，“三天”首发阅读权，每年两期Go语言发展现状分析，每天提前1小时阅读到新鲜的Gopher日报，网课、技术专栏、图书内容前瞻，六小时内必答保证等满足你关于Go语言生态的所有需求！2022年，Gopher部落全面改版，将持续分享Go语言与Go应用领域的知识、技巧与实践，并增加诸多互动形式。欢迎大家加入！ 我爱发短信：企业级短信平台定制开发专家 https://tonybai.com/。smspush : 可部署在企业内部的定制化短信平台，三网覆盖，不惧大并发接入，可定制扩展； 短信内容你来定，不再受约束, 接口丰富，支持长短信，签名可选。2020年4月8日，中国三大电信运营商联合发布《5G消息白皮书》，51短信平台也会全新升级到“51商用消息平台”，全面支持5G RCS消息。 著名云主机服务厂商DigitalOcean发布最新的主机计划，入门级Droplet配置升级为：1 core CPU、1G内存、25G高速SSD，价格5$/月。有使用DigitalOcean需求的朋友，可以打开这个链接地址：https://m.do.co/c/bff6eed92687 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/google-go-style/google-go-style-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2022/11/26/intro-of-google-go-style">本文永久链接</a> &#8211; https://tonybai.com/2022/11/26/intro-of-google-go-style</p>
<p>每种编程语言除了固定的语法之外，都会有属于自己的<strong>地道的(idiomatic)写法</strong>。其实，自然语言也不例外，你想，你用心想想是不是这样。</p>
<p>语言的设计者们希望开发人员都能编写统一风格的地道的代码，这样不仅代码可读性好，便于社区统一代码风格，而且针对惯用法的优化也可能会让地道的代码拥有更好的运行效率。语言团队也会不遗余力的通过各种方式(<a href="https://go.dev/doc">文档</a>、<a href="https://go.dev/blog">blog</a>、<a href="https://go.dev/talks">演讲</a>、<a href="http://www.gopl.io">书籍</a>、视频等)向开发者传授如何写出更地道、更高效、可读性更好的代码。</p>
<p>以Go语言为例，为了能让Gopher更好的了解如何写出高效、地道的Go代码，Go开源伊始就编写了<a href="https://go.dev/doc/effective_go">《Effective Go》</a>和<a href="https://go.dev/doc/faq">《Go FAQ》</a>两篇文档。前者负责介绍Go惯用法，后者则担负着将Go语言设计层面的问题以及解决思路与Gopher进行对齐的重任：</p>
<p><img src="https://tonybai.com/wp-content/uploads/intro-of-google-go-style-2.png" alt="" /></p>
<p>同时，Go语言之父们以及Go团队核心成员们在早期十分活跃并不遗余力的向Go社区推广Go的惯用法，Go官方站点上积累的各个早期的<a href="https://go.dev/blog/all">blog文章</a>以及<a href="https://go.dev/talks/">各个talk资料</a>也成为了gopher学习地道Go编码的重要参考：</p>
<p><img src="https://tonybai.com/wp-content/uploads/intro-of-google-go-style-3.png" alt="" /></p>
<p>这些资料为了全世界Gopher的Go编码风格建立了基线。大多数情况下只要遵循这些资料并借助gofmt工具的自动格式化就可以写出风格比较地道的Go代码了。</p>
<p>然而《Effective Go》更像是说明地道风格Go代码的总体原则，不能“面面俱到”的覆盖每个编码的细节，而大公司对内部代码的风格一致性有着严格的要求。这不仅是高质量的要求，也是内部高效协作的要求。于是在若干年后，一些较早接纳Go且成为Go重度用户的大厂和初创公司结合自己的工程实践纷纷推出了公司内使用的Go编码风格规范，这里就包含我们耳熟能详的<a href="https://tonybai.com/2019/10/12/uber-go-style-guide/">Uber</a>、<a href="https://github.com/Tencent/secguide">鹅厂</a>、<a href="https://about.sourcegraph.com/handbook/engineering/go_style_guide">sourcegraph</a>、<a href="https://github.com/cockroachdb/cockroach/blob/master/docs/style.md">CockroachDB</a>、<a href="https://docs.gitlab.com/ee/development/go_guide/">gitlab</a> 等。这些Go代码风格指南也成为Go社区开发人员在代码风格规范性方面的<strong>重要参考</strong>。</p>
<p>不过，这些公司推出的代码风格指南有一个共同特点，那就是<strong>规范性有余，但权威性和全面性不足</strong>。Go社区都期待这Go语言的发源地：Google公司的Go编码风格规范的推出。之前，Google已经在其<a href="https://google.github.io/styleguide/">style guide站点</a>上推出了其内部使用的很多主流编程语言的style guide，包括：<a href="https://google.github.io/styleguide/cppguide.html">C++</a>、<a href="https://google.github.io/styleguide/javaguide.html">Java</a>、<a href="https://google.github.io/styleguide/csharp-style.html">C#</a>、<a href="https://google.github.io/styleguide/jsguide.html">JavaScript</a>、<a href="https://google.github.io/styleguide/pyguide.html">Python</a>、<a href="https://google.github.io/styleguide/shellguide.html">Shell</a>等。</p>
<p><img src="https://tonybai.com/wp-content/uploads/intro-of-google-go-style-4.png" alt="" /></p>
<p>在2022年11月份中旬，就在Go刚刚过完其<a href="https://tonybai.com/2022/11/11/go-opensource-13-years">第13个生日</a>而步入青少年成长阶段之际，<a href="https://google.github.io/styleguide/go/">Google内部的Go语言编码风格规范</a>终于出现在其style guide站点上了！</p>
<p><img src="https://tonybai.com/wp-content/uploads/intro-of-google-go-style-5.png" alt="" /></p>
<p>不过，在介绍Google Go style guide前，我们首先要知道有关google style guide的几点内容：</p>
<ul>
<li>这些guide的主要目的是Google内部自用，所有开发人员、代码审查人员、代码可读性导师必须要遵守并达成一致；</li>
<li>所有语言的style guide都会随着语言的演进而持续更新优化；</li>
<li>各个语言的style guide的结构布局与写作风格都不相同；</li>
<li>这些style guide都不接受Google之外人员的pr。</li>
</ul>
<p>如上图，Google内部的Go语言编码风格规范系列文档目前由四个部分组成，它们分别是概述、指南、决定和最佳实践。根据概述篇的内容我们可以大体知道每篇文档的功用。这一系列文档汇集了当前编写可读的且地道的(idiomatic)Go代码的最佳方法，其目的是使刚接触这门语言的开发者能够避免常见的错误，同时也为那些在Google内部审查Go代码的人提供统一的风格。</p>
<p>这些文档的重要性略有不同：</p>
<ul>
<li>
<p><a href="https://tonybai.com/google-go-style/google-go-style-guide">指南篇</a>（https://google.github.io/styleguide/go/guide）概述了Google的Go编码风格的基础。这份文件是权威性的，并被用作<strong>风格决定</strong>和<strong>最佳实践</strong>两个文档中建议的基础。</p>
</li>
<li>
<p><a href="https://tonybai.com/google-go-style/google-go-style-decisions">决定篇</a> (https://google.github.io/styleguide/go/decisions) 是一份内容更详细的文档，总结了关于特定风格点的决定，并在适当的地方讨论了决定背后的理由。这些决定可能偶尔会根据新的数据、新的语言特性、新的库或新出现的模式而改变。</p>
</li>
<li>
<p><a href="https://tonybai.com/google-go-style/google-go-style-best-practices">最佳实践篇</a>（https://google.github.io/styleguide/go/best-practices）记录了一些随着时间的推移而发展起来的模式，这些模式可以解决常见的问题，且可读性好并足够健壮，可以满足对代码可维护性的要求。</p>
</li>
</ul>
<p>初步阅读了一下，这系列文档份的确算是目前最权威、最全面的Go语言编码风格规范了！其中决定篇和最佳实践篇涵盖的内容非常全面，内容和例子也非常到位。只不过，这套规范由于刚刚推出，还有很多改善优化和标记todo的地方。并且，其中有些内容是与Google是强相关的，但这依然是一份值得每个gopher认真阅读的资料。</p>
<p>此外，整套文档中经常引用一个名为“Go tips”的文档，不过该文档尚未放出，但从行文中引用的go tips的章节标题来看，很值得期待！</p>
<p>本博客正在将这套文档翻译为中文供大家参考，目前<a href="https://tonybai.com/google-go-style">概述篇</a>、<a href="https://tonybai.com/google-go-style/google-go-style-guide">指南篇</a>和<a href="https://tonybai.com/google-go-style/google-go-style-decisions">决定篇</a>和<a href="https://tonybai.com/google-go-style/google-go-style-best-practices">最佳实践篇</a>均已经初步翻译完毕(机翻辅助)。待go tips文档发布后，这里也会将其译为中文。</p>
<hr />
<p><a href="https://wx.zsxq.com/dweb2/index/group/51284458844544">“Gopher部落”知识星球</a>旨在打造一个精品Go学习和进阶社群！高品质首发Go技术文章，“三天”首发阅读权，每年两期Go语言发展现状分析，每天提前1小时阅读到新鲜的Gopher日报，网课、技术专栏、图书内容前瞻，六小时内必答保证等满足你关于Go语言生态的所有需求！2022年，Gopher部落全面改版，将持续分享Go语言与Go应用领域的知识、技巧与实践，并增加诸多互动形式。欢迎大家加入！</p>
<p><img src="http://image.tonybai.com/img/tonybai/gopher-tribe-zsxq-small-card.png" alt="img{512x368}" /><br />
<img src="http://image.tonybai.com/img/tonybai/go-programming-from-beginner-to-master-qr.png" alt="img{512x368}" /></p>
<p><img src="http://image.tonybai.com/img/tonybai/go-first-course-banner.png" alt="img{512x368}" /><br />
<img src="http://image.tonybai.com/img/tonybai/imooc-go-column-pgo-with-qr.jpg" alt="img{512x368}" /></p>
<p><a href="https://tonybai.com/">我爱发短信</a>：企业级短信平台定制开发专家 https://tonybai.com/。smspush : 可部署在企业内部的定制化短信平台，三网覆盖，不惧大并发接入，可定制扩展； 短信内容你来定，不再受约束, 接口丰富，支持长短信，签名可选。2020年4月8日，中国三大电信运营商联合发布《5G消息白皮书》，51短信平台也会全新升级到“51商用消息平台”，全面支持5G RCS消息。</p>
<p>著名云主机服务厂商DigitalOcean发布最新的主机计划，入门级Droplet配置升级为：1 core CPU、1G内存、25G高速SSD，价格5$/月。有使用DigitalOcean需求的朋友，可以打开这个<a href="https://m.do.co/c/bff6eed92687">链接地址</a>：https://m.do.co/c/bff6eed92687 开启你的DO主机之路。</p>
<p>Gopher Daily(Gopher每日新闻)归档仓库 &#8211; https://github.com/bigwhite/gopherdaily</p>
<p>我的联系方式：</p>
<ul>
<li>微博(暂不可用)：https://weibo.com/bigwhite20xx</li>
<li>微博2：https://weibo.com/u/6484441286</li>
<li>博客：tonybai.com</li>
<li>github: https://github.com/bigwhite</li>
</ul>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。</p>
<p style='text-align:left'>&copy; 2022, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2022/11/26/intro-of-google-go-style/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2021年博客回顾与总结</title>
		<link>https://tonybai.com/2021/12/31/2021-blog-summary/</link>
		<comments>https://tonybai.com/2021/12/31/2021-blog-summary/#comments</comments>
		<pubDate>Fri, 31 Dec 2021 14:48:15 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[2021]]></category>
		<category><![CDATA[2022]]></category>
		<category><![CDATA[epoll]]></category>
		<category><![CDATA[fasthttp]]></category>
		<category><![CDATA[fuzzing]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[go-module]]></category>
		<category><![CDATA[go1.16]]></category>
		<category><![CDATA[go1.17]]></category>
		<category><![CDATA[go1.18]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[Gopher]]></category>
		<category><![CDATA[gopherdaily]]></category>
		<category><![CDATA[Gopher日报]]></category>
		<category><![CDATA[Gopher部落]]></category>
		<category><![CDATA[gRPC]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[Rust]]></category>
		<category><![CDATA[TCP]]></category>
		<category><![CDATA[zap]]></category>
		<category><![CDATA[专栏]]></category>
		<category><![CDATA[元旦]]></category>
		<category><![CDATA[博客]]></category>
		<category><![CDATA[插件]]></category>
		<category><![CDATA[播客]]></category>
		<category><![CDATA[极客时间]]></category>
		<category><![CDATA[标准库]]></category>
		<category><![CDATA[泛型]]></category>
		<category><![CDATA[知识星球]]></category>
		<category><![CDATA[跨年]]></category>
		<category><![CDATA[逃逸分析]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=3391</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2021/12/31/2021-blog-summary 2021年对我来说是极其充实的一年。 在这一年里，生活上的充实体现在带娃上。除了要带不到一岁的二宝，还要辅导大宝学习，陪大宝上补习班。 工作中，由于我刚入行智能网联汽车这个行业，要学的东西很多，要做的东西也很很多，要解决的问题同样很多，每天都十分忙碌。 业余时间，我还实现了“Go语言第一课”的极客专栏的上线，完成了一本Go进阶图书出版的前期准备工作，坚持Gopher部落星球的运营工作、坚持Gopherdaily(Gopher日报)的日更以及公众号iamtonybai的更新。 在这样的忙碌状态下，2021年，我居然还写了60余篇博客！现在看来，时间真得是挤出来的。特别是下半年极客专栏上线后，我几乎每天仅能睡5-6个小时，这样持续高强度的工作、学习与输出让我的身体也“每况愈下”：患上了轻度腰托，心脏也不时出现症状。 我快速翻看了今年这60多篇博客文章，多数是Go语言相关的，并且从访问量来看，也十分受大家欢迎。这里我根据阅读数量选出了2021年本播客最受欢迎的文章TOP10： 《使用multipart/form-data实现文件的上传与下载》 《Go 1.17中值得关注的几个变化》 《通过实例理解Go标准库http包是如何处理keep-alive连接的》 《Go标准库http与fasthttp服务端性能比较》 《“能力越大，责任越大” – Go语言之父详解将于Go 1.18发布的Go泛型》 《一文搞懂Go语言的plugin》 《Go 1.16中值得关注的几个变化》 《http.Client的连接行为控制详解》 《Go 1.18新特性前瞻：Go工作区模式》 《Go语言第一课背后的那些事》 从剩下的文章中我也精选出一些对Go程序员十分有用的文章，列在这里，大家有时间可以看看： 《Go语言学习技术路线图2021发布了》 《Go 1.18对泛型的支持策略》 《一文告诉你如何用好uber开源的zap日志库》 《通过实例理解Go逃逸分析》 《Rust vs. Go：为什么强强联合会更好》 《对Go 1.16 io/fs设计的第一感觉：得劲儿！》 《小厂内部私有Go module拉取方案》 《Go语言之父谈Go编程语言与环境》 《gRPC客户端的那些事儿》 《gRPC服务的响应设计》 《Ian Lance Taylor：Go泛型使用的一般准则》 《Go 1.18新特性前瞻：原生支持Fuzzing测试》 《Go经典阻塞式TCP协议流解析的实践》 《Go基于I/O多路复用的TCP协议流解析实践》 《Go中被闭包捕获的变量何时会被回收》 还有不到2个小时，2021即将过去! 2022年，Tony Bai博客会有更多关于Go、分布式系统、架构设计、云原生基础设施、中间件与服务等方面的文章呈现给大家，敬请期待！ 最后，祝大家2022元旦快乐，在新的一年里，身体倍儿棒，万事儿顺畅，事业蒸蒸上。 “Gopher部落”知识星球正式转正（从试运营星球变成了正式星球）！“gopher部落”旨在打造一个精品Go学习和进阶社群！高品质首发Go技术文章，“三天”首发阅读权，每年两期Go语言发展现状分析，每天提前1小时阅读到新鲜的Gopher日报，网课、技术专栏、图书内容前瞻，六小时内必答保证等满足你关于Go语言生态的所有需求！部落目前虽小，但持续力很强，欢迎大家加入！ [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2021-blog-summary-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2021/12/31/2021-blog-summary">本文永久链接</a> &#8211; https://tonybai.com/2021/12/31/2021-blog-summary</p>
<p>2021年对我来说是极其充实的一年。</p>
<p>在这一年里，生活上的充实体现在<strong>带娃</strong>上。除了要带不到一岁的<a href="https://daughter2.tonybai.com">二宝</a>，还要辅导<a href="https://daughter.tonybai.com">大宝</a>学习，陪大宝上补习班。</p>
<p>工作中，由于我刚入行智能网联汽车这个行业，要学的东西很多，要做的东西也很很多，要解决的问题同样很多，每天都十分忙碌。</p>
<p>业余时间，我还实现了<a href="http://gk.link/a/10AVZ">“Go语言第一课”的极客专栏</a>的上线，完成了一本Go进阶图书出版的前期准备工作，坚持<a href="https://tonybai.com/2021/12/17/gopher-tribe-first-anniversary-review">Gopher部落星球</a>的运营工作、坚持<a href="https://github.com/bigwhite/gopherdaily">Gopherdaily(Gopher日报)</a>的日更以及公众号<strong>iamtonybai</strong>的更新。</p>
<p>在这样的忙碌状态下，2021年，我居然还写了60余篇博客！现在看来，时间真得是挤出来的。特别是下半年极客专栏上线后，我几乎每天仅能睡5-6个小时，这样持续高强度的工作、学习与输出让我的身体也“每况愈下”：患上了轻度腰托，心脏也不时出现症状。</p>
<p>我快速翻看了今年这60多篇博客文章，多数是Go语言相关的，并且从访问量来看，也十分受大家欢迎。这里我根据阅读数量选出了2021年本播客最受欢迎的文章TOP10：</p>
<ul>
<li><a href="https://tonybai.com/2021/01/16/upload-and-download-file-using-multipart-form-over-http/">《使用multipart/form-data实现文件的上传与下载》</a> </li>
<li><a href="https://tonybai.com/2021/08/17/some-changes-in-go-1-17">《Go 1.17中值得关注的几个变化》</a> </li>
<li><a href="https://tonybai.com/2021/01/08/understand-how-http-package-deal-with-keep-alive-connection">《通过实例理解Go标准库http包是如何处理keep-alive连接的》</a> </li>
<li><a href="https://tonybai.com/2021/04/25/server-side-performance-nethttp-vs-fasthttp">《Go标准库http与fasthttp服务端性能比较》</a> </li>
<li><a href="https://tonybai.com/2021/02/18/typing-generic-go-by-griesemer-at-gophercon-2020/">《“能力越大，责任越大” – Go语言之父详解将于Go 1.18发布的Go泛型》</a></li>
<li><a href="https://tonybai.com/2021/07/19/understand-go-plugin">《一文搞懂Go语言的plugin》</a></li>
<li><a href="https://tonybai.com/2021/02/25/some-changes-in-go-1-16">《Go 1.16中值得关注的几个变化》</a></li>
<li><a href="https://tonybai.com/2021/04/02/go-http-client-connection-control/">《http.Client的连接行为控制详解》</a></li>
<li><a href="https://tonybai.com/2021/11/12/go-workspace-mode-in-go-1-18">《Go 1.18新特性前瞻：Go工作区模式》</a></li>
<li><a href="https://tonybai.com/2021/10/25/the-things-behind-the-first-lesson-of-go-language">《Go语言第一课背后的那些事》</a></li>
</ul>
<p>从剩下的文章中我也精选出一些对Go程序员十分有用的文章，列在这里，大家有时间可以看看：</p>
<ul>
<li><a href="https://tonybai.com/2021/02/08/go-programming-language-learning-roadmap-2021">《Go语言学习技术路线图2021发布了》</a></li>
<li><a href="https://tonybai.com/2021/10/28/expectations-for-generics-in-go-1.18">《Go 1.18对泛型的支持策略》</a></li>
<li><a href="https://tonybai.com/2021/07/14/uber-zap-advanced-usage">《一文告诉你如何用好uber开源的zap日志库》</a></li>
<li><a href="https://tonybai.com/2021/05/24/understand-go-escape-analysis-by-example/">《通过实例理解Go逃逸分析》</a> </li>
<li><a href="https://tonybai.com/2021/03/15/rust-vs-go-why-they-are-better-together">《Rust vs. Go：为什么强强联合会更好》</a></li>
<li><a href="https://tonybai.com/2021/03/23/io-fs-interface-is-an-excellent-design/">《对Go 1.16 io/fs设计的第一感觉：得劲儿！》</a> </li>
<li><a href="https://tonybai.com/2021/09/03/the-approach-to-go-get-private-go-module-in-house">《小厂内部私有Go module拉取方案》</a></li>
<li><a href="https://tonybai.com/2021/10/06/the-go-programming-language-and-environment/">《Go语言之父谈Go编程语言与环境》</a></li>
<li><a href="https://tonybai.com/2021/09/17/those-things-about-grpc-client/">《gRPC客户端的那些事儿》</a> </li>
<li><a href="https://tonybai.com/2021/09/26/the-design-of-the-response-for-grpc-server">《gRPC服务的响应设计》</a> </li>
<li><a href="https://tonybai.com/2021/11/07/using-generics-in-go">《Ian Lance Taylor：Go泛型使用的一般准则》</a></li>
<li><a href="https://tonybai.com/2021/12/01/first-class-fuzzing-in-go-1-18">《Go 1.18新特性前瞻：原生支持Fuzzing测试》</a></li>
<li><a href="https://tonybai.com/2021/07/28/classic-blocking-network-tcp-stream-protocol-parsing-practice-in-go/">《Go经典阻塞式TCP协议流解析的实践》</a></li>
<li><a href="https://tonybai.com/2021/07/31/io-multiplexing-model-tcp-stream-protocol-parsing-practice-in-go/">《Go基于I/O多路复用的TCP协议流解析实践》</a></li>
<li><a href="https://tonybai.com/2021/08/09/when-variables-captured-by-closures-are-recycled-in-go">《Go中被闭包捕获的变量何时会被回收》</a></li>
</ul>
<p>还有不到2个小时，2021即将过去! 2022年，Tony Bai博客会有更多关于Go、分布式系统、架构设计、云原生基础设施、中间件与服务等方面的文章呈现给大家，敬请期待！</p>
<p>最后，祝大家2022元旦快乐，在新的一年里，身体倍儿棒，万事儿顺畅，事业蒸蒸上。</p>
<hr />
<p><a href="https://mp.weixin.qq.com/s/jUqAL7hf2GmMun64BJufEA">“Gopher部落”知识星球</a>正式转正（从试运营星球变成了正式星球）！“gopher部落”旨在打造一个精品Go学习和进阶社群！高品质首发Go技术文章，“三天”首发阅读权，每年两期Go语言发展现状分析，每天提前1小时阅读到新鲜的Gopher日报，网课、技术专栏、图书内容前瞻，六小时内必答保证等满足你关于Go语言生态的所有需求！部落目前虽小，但持续力很强，欢迎大家加入！</p>
<p><img src="http://image.tonybai.com/img/tonybai/gopher-tribe-zsxq-small-card.png" alt="img{512x368}" /></p>
<p><img src="http://image.tonybai.com/img/tonybai/go-first-course-banner.png" alt="img{512x368}" /><br />
<img src="http://image.tonybai.com/img/tonybai/imooc-go-column-pgo-with-qr.jpg" alt="img{512x368}" /><br />
<img src="http://image.tonybai.com/img/tonybai/imooc-k8s-practice-with-qr.jpg" alt="img{512x368}" /></p>
<p>Gopher Daily(Gopher每日新闻)归档仓库 &#8211; https://github.com/bigwhite/gopherdaily</p>
<p>我的联系方式：</p>
<ul>
<li>微博：https://weibo.com/bigwhite20xx</li>
<li>微信公众号：iamtonybai</li>
<li>博客：tonybai.com</li>
<li>github: https://github.com/bigwhite</li>
<li>“Gopher部落”知识星球：https://public.zsxq.com/groups/51284458844544</li>
</ul>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。</p>
<p style='text-align:left'>&copy; 2021, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2021/12/31/2021-blog-summary/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>“Gopher部落”知识星球开球了</title>
		<link>https://tonybai.com/2020/11/22/zssq-gopher-tribe-born/</link>
		<comments>https://tonybai.com/2020/11/22/zssq-gopher-tribe-born/#comments</comments>
		<pubDate>Sun, 22 Nov 2020 00:31:32 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[gopherdaily]]></category>
		<category><![CDATA[Gopher部落]]></category>
		<category><![CDATA[专栏]]></category>
		<category><![CDATA[博客]]></category>
		<category><![CDATA[知识付费]]></category>
		<category><![CDATA[知识星球]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=2996</guid>
		<description><![CDATA[考虑了很久自己要不要开一个知识星球？自己并不擅长社群运营，但 自己的技术内容输出档次又是不错的且是持续的，能让一定范围的朋友感觉是有价值的； 面对大家的问题，相信自己的知识和经验储备也能给出很具参考价值的答案； 并且这样的一个知识付费的产品还能反过来督促自己输出更多、更有价值的内容，何乐而不为！ 于是鄙人下载了知识星球的app，大胆地点击了“创建星球”，“Gopher部落”这颗星球就这样诞生了！ Gopher部落知识星球 编写星球介绍的时候，我又犯难了！星球上都发些啥内容呢？聚焦哪些方面的？自己擅长的领域包括Go语言、Kubernetes、容器等。愿意主动跟踪IT领域最新技术趋势，有自己的一套学习方法理论，加上工作多年，对职场有些感悟；自己也是一个兴趣广泛的人，先将这些大概率能分享的填上吧。 那星球与其他内容输出渠道，比如：博客、公众号、微博、知乎等有啥区别的，是不是星球有的，其他渠道也会同步发布呢？我必须对星友给出承诺啊！于是冥思苦想，写了下面这几条开球承诺： 每月至少2篇高品质首发Go技术文章 怎么理解？首发代表星球的顺位排行第一！星友们有抢先阅读的权利，就和各大视频网站针对会员的“提前看3集”的权利类似。但这些文章后续也会通过其他渠道付费阅读。或星主根据个人自媒体运营需要，会挑选少数文字在免费渠道做推广使用。 星主博客技术文章首发阅读权（提前三天)； 有些文章星主是向免费分享的，但考虑到星友的权利，承诺星友的“三天”首发阅读权的。 每年两期Go语言发展现状分析； 作为长期跟踪Go语言演化和发展的gopher，在每年两次go版本发布时会输出Go语言当前现状的详细介绍。这个是区别于星主传统的“XXX中值得关注的几个变化”系列的。 每天提前1小时阅读到新鲜的Gopher日报（Go生态圈技术动态、技术会议、大事件、新版本特性、重大bug/安全隐患等）； 星主维护着Gopher日报(github.com/bigwhite/gopherdaily)，这是一个免费分享的技术日报。星主唯一能控制的就是渠道的推送时间。因此，这里承诺星友们Gopher日报的抢先1小时阅读权利。并且可以与星主就日报中的技术事件进行提问和讨论。 星主出品的网课、技术专栏、图书内容前瞻； 星主爱好制作网课、技术专栏以及与纸版书写作，因此可以给星友提供这方面内容的“前瞻”权利；星主也希望通过和星友的交流反馈，提升作品质量。 Go语言相关电子版本资料的抢先获得权(仅限公开资料) 星主关注最新IT技术趋势，会抢先收集到一些公开的技术资料，这些资料也会第一时间分享给各位星友。 针对星友提问的六小时内必答保证（仅限回答时间在早7点~晚8点之内的问题）。 最后就是给星球提问的承诺了。思来想去，给出了“六小时必答”的承诺，估计这也是星主能给出的极限承诺了。毕竟，每个人都有自己的主要工作，不能盯着星球:)。如果节假日星主回答晚了，或因特殊原因没有及时看到提问提醒，还请各位星友担待包涵:)。 星球首开，福利自然是少不了的！2020年年底之前，8.8折(很吉利吧^_^)加入星球。扫描下方图片二维码即享优惠！ 感谢大家对本星球的支持！ 我的Go技术专栏：“改善Go语⾔编程质量的50个有效实践”上线了，欢迎大家订阅学习！ 我的网课“Kubernetes实战：高可用集群搭建、配置、运维与应用”在慕课网上线>了，感谢小伙伴们学习支持！ 我爱发短信：企业级短信平台定制开发专家 https://tonybai.com/ smspush : 可部署在企业内部的定制化短信平台，三网覆盖，不惧大并发接入，可定制扩展； 短信内容你来定，不再受约束, 接口丰富，支持长短信，签名可选。 2020年4月8日，中国三大电信运营商联合发布《5G消息白皮书》，51短信平台也会全新升级到“51商用消息平台”，全面支持5G RCS消息。 著名云主机服务厂商DigitalOcean发布最新的主机计划，入门级Droplet配置升级为：1 core CPU、1G内存、25G高速SSD，价格5$/月。有使用DigitalOcean需求的朋友，可以打开这个链接地址：https://m.do.co/c/bff6eed92687 开启你的DO主机之路。 Gopher Daily(Gopher每日新闻)归档仓库 &#8211; https://github.com/bigwhite/gopherdaily 我的联系方式： 微博：https://weibo.com/bigwhite20xx 微信公众号：iamtonybai 博客：tonybai.com github: https://github.com/bigwhite 微信赞赏： 商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。 &#169; 2020, bigwhite. 版权所有.]]></description>
			<content:encoded><![CDATA[<p>考虑了很久自己要不要开一个知识星球？自己并不擅长社群运营，但</p>
<ul>
<li>自己的技术内容输出档次又是不错的且是持续的，能让一定范围的朋友感觉是有价值的；</li>
<li>面对大家的问题，相信自己的知识和经验储备也能给出很具参考价值的答案；</li>
<li>并且这样的一个知识付费的产品还能反过来督促自己输出更多、更有价值的内容，何乐而不为！</li>
</ul>
<p>于是鄙人下载了<strong>知识星球</strong>的app，大胆地点击了“创建星球”，<strong>“Gopher部落”</strong>这颗星球就这样诞生了！</p>
<p><img src="https://tonybai.com/wp-content/uploads/gopher-tribe-zxxq-card.png" alt="" /><br />
<center>Gopher部落知识星球</center></p>
<p>编写星球介绍的时候，我又犯难了！星球上都发些啥内容呢？聚焦哪些方面的？自己擅长的领域包括Go语言、Kubernetes、容器等。愿意主动跟踪IT领域最新技术趋势，有自己的一套学习方法理论，加上工作多年，对职场有些感悟；自己也是一个兴趣广泛的人，先将这些大概率能分享的填上吧。</p>
<p>那星球与其他内容输出渠道，比如：博客、公众号、微博、知乎等有啥区别的，是不是星球有的，其他渠道也会同步发布呢？我必须对星友给出承诺啊！于是冥思苦想，写了下面这几条<strong>开球承诺</strong>：</p>
<ul>
<li>每月至少2篇高品质首发Go技术文章</li>
</ul>
<p>怎么理解？首发代表星球的顺位排行第一！星友们有<strong>抢先阅读的权利</strong>，就和各大视频网站针对会员的“提前看3集”的权利类似。但这些文章后续也会通过其他渠道<strong>付费阅读</strong>。或星主根据个人自媒体运营需要，会挑选少数文字在免费渠道做推广使用。</p>
<ul>
<li>星主博客技术文章首发阅读权（提前三天)；</li>
</ul>
<p>有些文章星主是向免费分享的，但考虑到星友的权利，承诺星友的“三天”首发阅读权的。</p>
<ul>
<li>每年两期Go语言发展现状分析；</li>
</ul>
<p>作为长期跟踪Go语言演化和发展的gopher，在每年两次go版本发布时会输出Go语言当前现状的详细介绍。这个是区别于星主传统的“XXX中值得关注的几个变化”系列的。</p>
<ul>
<li>每天提前1小时阅读到新鲜的Gopher日报（Go生态圈技术动态、技术会议、大事件、新版本特性、重大bug/安全隐患等）；</li>
</ul>
<p>星主维护着Gopher日报(github.com/bigwhite/gopherdaily)，这是一个免费分享的技术日报。星主唯一能控制的就是渠道的推送时间。因此，这里承诺星友们Gopher日报的抢先1小时阅读权利。并且可以与星主就日报中的技术事件进行提问和讨论。</p>
<ul>
<li>星主出品的网课、技术专栏、图书内容前瞻；</li>
</ul>
<p>星主爱好制作网课、技术专栏以及与纸版书写作，因此可以给星友提供这方面内容的“前瞻”权利；星主也希望通过和星友的交流反馈，提升作品质量。</p>
<ul>
<li>Go语言相关电子版本资料的抢先获得权(仅限公开资料)</li>
</ul>
<p>星主关注最新IT技术趋势，会抢先收集到一些公开的技术资料，这些资料也会第一时间分享给各位星友。</p>
<ul>
<li>针对星友提问的六小时内必答保证（仅限回答时间在早7点~晚8点之内的问题）。</li>
</ul>
<p>最后就是给星球提问的承诺了。思来想去，给出了“六小时必答”的承诺，估计这也是星主能给出的极限承诺了。毕竟，每个人都有自己的主要工作，不能盯着星球:)。如果节假日星主回答晚了，或因特殊原因没有及时看到提问提醒，还请各位星友担待包涵:)。</p>
<p>星球首开，福利自然是少不了的！2020年年底之前，8.8折(很吉利吧^_^)加入星球。扫描下方图片二维码即享优惠！</p>
<p><img src="https://tonybai.com/wp-content/uploads/gopher-tribe-zxxq-promotion-until-20201231.png" alt="优惠券" /></p>
<p>感谢大家对本星球的支持！</p>
<hr />
<p>我的Go技术专栏：“<a href="https://www.imooc.com/read/87">改善Go语⾔编程质量的50个有效实践</a>”上线了，欢迎大家订阅学习！</p>
<p><img src="https://tonybai.com/wp-content/uploads/go-column-pgo-with-qr-and-text.png" alt="img{512x368}" /></p>
<p>我的网课“<a href="https://coding.imooc.com/class/284.html">Kubernetes实战：高可用集群搭建、配置、运维与应用</a>”在慕课网上线>了，感谢小伙伴们学习支持！</p>
<p><img src="https://tonybai.com/wp-content/uploads/k8s-practice-with-qr-and-text.png" alt="img{512x368}" /></p>
<p><a href="https://tonybai.com/">我爱发短信</a>：企业级短信平台定制开发专家 https://tonybai.com/<br />
smspush : 可部署在企业内部的定制化短信平台，三网覆盖，不惧大并发接入，可定制扩展； 短信内容你来定，不再受约束, 接口丰富，支持长短信，签名可选。</p>
<p>2020年4月8日，中国三大电信运营商联合发布《5G消息白皮书》，51短信平台也会全新升级到“51商用消息平台”，全面支持5G RCS消息。</p>
<p>著名云主机服务厂商DigitalOcean发布最新的主机计划，入门级Droplet配置升级为：1 core CPU、1G内存、25G高速SSD，价格5$/月。有使用DigitalOcean需求的朋友，可以打开这个<a href="https://m.do.co/c/bff6eed92687">链接地址</a>：https://m.do.co/c/bff6eed92687 开启你的DO主机之路。</p>
<p>Gopher Daily(Gopher每日新闻)归档仓库 &#8211; https://github.com/bigwhite/gopherdaily</p>
<p>我的联系方式：</p>
<ul>
<li>微博：https://weibo.com/bigwhite20xx</li>
<li>微信公众号：iamtonybai</li>
<li>博客：tonybai.com</li>
<li>github: https://github.com/bigwhite</li>
</ul>
<p>微信赞赏：<br />
<img src="https://tonybai.com/wp-content/uploads/wechat-zanshang-code-512x512.jpg" alt="img{512x368}" /></p>
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。</p>
<p style='text-align:left'>&copy; 2020, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2020/11/22/zssq-gopher-tribe-born/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>又当爸爸了！</title>
		<link>https://tonybai.com/2020/07/29/my-second-daughter-was-born/</link>
		<comments>https://tonybai.com/2020/07/29/my-second-daughter-was-born/#comments</comments>
		<pubDate>Wed, 29 Jul 2020 06:01:34 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[生活簿]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Blogger]]></category>
		<category><![CDATA[七月]]></category>
		<category><![CDATA[二宝]]></category>
		<category><![CDATA[二胎]]></category>
		<category><![CDATA[博客]]></category>
		<category><![CDATA[女儿]]></category>
		<category><![CDATA[家庭]]></category>
		<category><![CDATA[感悟]]></category>
		<category><![CDATA[摄影]]></category>
		<category><![CDATA[果果]]></category>
		<category><![CDATA[爸爸]]></category>
		<category><![CDATA[生活]]></category>
		<category><![CDATA[老婆]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=2932</guid>
		<description><![CDATA[2020年7月23日早6点46分，随着我家二宝(小名：七月)的呱呱坠地，我又当爸爸了! 图：二宝出生后的第一张照片 距离我家大宝(果果)的出生已经十年了。在这十年间，果果已经出落成一个聪明可爱、灵通剔透、漂亮温柔的大姑娘了，妥妥的是妈妈的小棉袄，爸爸的小情人:)，姥姥的小粘包，爷爷奶奶的乖孙女。 图：大宝果果是大姑娘了 但每每当果果提到其同班同学多数都有姐妹或兄弟陪伴上学、上才艺课的时候，我和我老婆的心里就会一动：究竟该不该给果果生一个亲弟弟/妹妹呢？ 2019下半年，我们决定为果果生个弟弟或妹妹。我们计划尝试半年，如果不行，我们年龄也大了，也许真的就不会再要了。结果上天十分眷顾我们，老婆在10月末怀上了。 大宝的愿望是我们要二宝的最直接和最主要的原因，我们也觉得两个宝宝在人生路上能相互陪伴总是更好的。其次，大宝出生时，我们还年轻，体验不充分，这次想再来一遍(也不知道哪来的这份勇气^_^)；再次，老人那边还有精力，还可以帮忙照顾孩子，我们在忙事业的同时，也不会有太多的后顾之忧；最后，两个宝宝也让家庭结构更合理。 写到这里，我也感觉上面的理由写得有些“冠冕堂皇”！想要就要，哪还需要这么多“借口”^_^。 生二宝唯一的担心就是已经是“高龄”的老婆。和十年前年轻的她相比，这次在孕期、生产和产后的风险都要高出许多。因此，在整个十月怀胎以及生产的过程中，我都更为紧张，但能做的也只有全程守护在老婆身边：制定营养计划、每天接送、全程陪检等。老婆本人倒是没有这方面担心，鉴于大宝生产前后的顺利，她坚信这次二宝也会同样顺利。 整个孕期也正如老婆坚信的那样，一切都很顺利，除了老婆患上了妊娠期糖尿病。老婆的一个性格特点就是认准一件事后，就能坚定不移地、自律地执行下去。由于妊娠期糖尿病对饮食的要求，老婆整整几个月都远离美味的“糖分”，保证了二宝在肚肚里的健康发育。同时，为了能够像一胎那样顺产，老婆坚持每天都要走上1w步，风雨无阻，天气不好，就在楼梯间里爬楼梯或在顶楼露台来回踱步。这份坚毅让老婆在38周的彩超检查中收获了期望的结论：医生看完彩超结果后给了我老婆十分肯定的诊断意见：你一定可以自己生！ 老婆，你真的很伟大！ 老婆在7月22日早晨见红了。按照一般经验，见红后24-48小时二宝就会出生了。7月23日凌晨3点老婆有了宫缩反应，虽然还不规律，但保险起见，我和老婆还是决定带上行李赶往医院。3:30到达医院急诊，产科的急诊大夫给开了一些检查和检验，结果出来后，就安排老婆去了(盛京医院滑翔园区)第五产科住院处办理住院。住院医生给老婆做了内检，说老婆今天很快就能生。早上5:00多，老婆进入待产室。随着规律性宫缩的到来，老婆十分痛苦。6点20分，医生决定让老妈进分娩室，我就在外面焦急等待。 老婆肚子里的二宝仿佛知道体谅她的妈妈，十分配合妈妈生产，让产程大大缩短，大大减少了老婆生产过程中承受的疼痛的时长。 在老婆进入分娩室后仅30分钟，站在分娩室外的我就听到了我家二宝第一声响亮的婴儿啼哭声。那时那刻，我和大宝出生时一样，流下了兴奋而又心疼老婆的眼泪。 母女平安！我的一颗高悬的心终于放下了，我再次当爸爸了！ 微信赞赏： &#169; 2020, bigwhite. 版权所有.]]></description>
			<content:encoded><![CDATA[<p>2020年7月23日早6点46分，随着我家<a href="https://daughter2.tonybai.com">二宝(小名：七月)</a>的呱呱坠地，<strong>我又当爸爸了</strong>!</p>
<p><img src="https://tonybai.com/wp-content/uploads/my-second-daughter/ally-was-born.jpeg" alt="img{512x368}" /><br />
<center>图：二宝出生后的第一张照片</center></p>
<p>距离我家<a href="https://tonybai.com/2010/05/11/now-i-am-a-father/">大宝(果果)的出生</a>已经十年了。在这十年间，<a href="https://daughter.tonybai.com">果果</a>已经出落成一个聪明可爱、灵通剔透、漂亮温柔的大姑娘了，妥妥的是<strong>妈妈的小棉袄，爸爸的小情人:)，姥姥的小粘包，爷爷奶奶的乖孙女</strong>。</p>
<p><img src="https://tonybai.com/wp-content/uploads/guoguo-ten-years-old/guoguo-10-years-old-1.jpg" alt="img{512x368}" /><br />
<center>图：大宝果果是大姑娘了</center></p>
<p>但每每当果果提到其同班同学多数都有姐妹或兄弟陪伴上学、上才艺课的时候，我和我老婆的心里就会一动：<strong>究竟该不该给果果生一个亲弟弟/妹妹呢？</strong> 2019下半年，我们决定为果果生个弟弟或妹妹。我们计划尝试半年，如果不行，我们年龄也大了，也许真的就不会再要了。结果<strong>上天十分眷顾我们，老婆在10月末怀上了</strong>。</p>
<p>大宝的愿望是我们要二宝的最直接和最主要的原因，我们也觉得两个宝宝在人生路上能相互陪伴总是更好的。其次，大宝出生时，我们还年轻，体验不充分，这次想再来一遍(<strong>也不知道哪来的这份勇气^_^</strong>)；再次，老人那边还有精力，还可以帮忙照顾孩子，我们在忙事业的同时，也不会有太多的后顾之忧；最后，两个宝宝也让家庭结构更合理。</p>
<blockquote>
<p>写到这里，我也感觉上面的理由写得有些“冠冕堂皇”！想要就要，哪还需要这么多“借口”^_^。</p>
</blockquote>
<p>生二宝唯一的担心就是已经是“高龄”的老婆。和十年前年轻的她相比，这次在孕期、生产和产后的风险都要高出许多。因此，在整个十月怀胎以及生产的过程中，我都更为紧张，但能做的也只有全程守护在老婆身边：制定营养计划、每天接送、全程陪检等。老婆本人倒是没有这方面担心，鉴于大宝生产前后的顺利，她坚信这次二宝也会同样顺利。</p>
<p>整个孕期也正如老婆坚信的那样，一切都很顺利，除了老婆患上了妊娠期糖尿病。老婆的一个性格特点就是认准一件事后，就能坚定不移地、自律地执行下去。由于妊娠期糖尿病对饮食的要求，老婆整整几个月都远离美味的“糖分”，保证了二宝在肚肚里的健康发育。同时，为了能够像一胎那样顺产，老婆坚持每天都要走上1w步，风雨无阻，天气不好，就在楼梯间里爬楼梯或在顶楼露台来回踱步。这份坚毅让老婆在38周的彩超检查中收获了期望的结论：医生看完彩超结果后给了我老婆十分肯定的诊断意见：<strong>你一定可以自己生</strong>！</p>
<p><strong>老婆，你真的很伟大！</strong></p>
<p>老婆在7月22日早晨见红了。按照一般经验，见红后24-48小时二宝就会出生了。7月23日凌晨3点老婆有了宫缩反应，虽然还不规律，但保险起见，我和老婆还是决定带上行李赶往医院。3:30到达医院急诊，产科的急诊大夫给开了一些检查和检验，结果出来后，就安排老婆去了(盛京医院滑翔园区)第五产科住院处办理住院。住院医生给老婆做了内检，说老婆今天很快就能生。早上5:00多，老婆进入待产室。随着规律性宫缩的到来，老婆十分痛苦。6点20分，医生决定让老妈进分娩室，我就在外面焦急等待。</p>
<p>老婆肚子里的二宝仿佛知道体谅她的妈妈，十分配合妈妈生产，让产程大大缩短，大大减少了老婆生产过程中承受的疼痛的时长。 在老婆进入分娩室后仅30分钟，站在分娩室外的我就听到了我家二宝第一声响亮的婴儿啼哭声。那时那刻，<strong>我和大宝出生时一样，流下了兴奋而又心疼老婆的眼泪</strong>。</p>
<p>母女平安！我的一颗高悬的心终于放下了，我再次当爸爸了！</p>
<hr />
<p>微信赞赏：<br />
<img src="https://tonybai.com/wp-content/uploads/wechat-zanshang-code-512x512.jpg" alt="img{512x368}" /></p>
<p style='text-align:left'>&copy; 2020, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2020/07/29/my-second-daughter-was-born/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>基于Markdown格式的电子书生成工具大比拼：gohugo、mdbook和peach</title>
		<link>https://tonybai.com/2020/06/27/gohugo-vs-mdbook-vs-peach/</link>
		<comments>https://tonybai.com/2020/06/27/gohugo-vs-mdbook-vs-peach/#comments</comments>
		<pubDate>Sat, 27 Jun 2020 11:35:53 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[ebook]]></category>
		<category><![CDATA[gitbook]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[gogs]]></category>
		<category><![CDATA[gohugo]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[hugo]]></category>
		<category><![CDATA[macos]]></category>
		<category><![CDATA[Markdown]]></category>
		<category><![CDATA[mdbook]]></category>
		<category><![CDATA[peach]]></category>
		<category><![CDATA[ReadtheDocs]]></category>
		<category><![CDATA[Rust]]></category>
		<category><![CDATA[博客]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=2926</guid>
		<description><![CDATA[基于Markdown格式文件写博客已经很多年了，一直使用的是Wordpress的markdown插件，由于各种遗留原因，一直没有转换到直接使用静态站点的方式。博客文章之间一般来说多是独立篇章，少有关联，即便是写一个系列文章，数量也不会太多。因此，用博客形式来组织书籍章节是不大合适的。“术业有专攻”，我们还得寻找专门用来制作电子书的工具或平台，并且要支持本地安装，支持基于Markdown格式的源数据文件。 专门用于制作电子书类文档的知名工具包括：gitbook和Read the Docs。不过前者的开源版本2018年末就不更新了，而Read the Docs则比较老，还需要多个工具配合。我个人倾向于单个二进制文件搞定一切。于是我找到了三个候选：gohugo、mdbook和peach，这三个候选部署时都只有一个二进制文件。gohugo和peach是Go语言实现的，而mdbook则是用Rust语言实现的。下面我们就来简单对比一下这三个基于Markdown格式的电子书制作工具。 1. mdbook mdbook是模仿gitbook样式的从markdown文件生成电子书的工具和静态站点服务，它仅聚焦于“电子书制作和站点服务”。如果不是类似gitbook风格的其他类静态内容服务，那么它并不适合。因此，该工具采用了惯例优先原则(convention over configuration)，使得使用时我们无需做太多的配置即可生成一个像模像样的电子书站点。 由于是rust实现的，mdbook本地部署时只需一个二进制文件，我们直接从它的github release上下载对应os平台的release文件（这里是macos的0.4.0版本）： wget -c https://github.com/rust-lang/mdBook/releases/download/v0.4.0/mdbook-v0.4.0-x86_64-apple-darwin.tar.gz 解压后，将mdbook所在路径添加到PATH环境变量中： $tar zxvf mdbook-v0.4.0-x86_64-apple-darwin.tar.gz x mdbook $ls mdbook* mdbook-v0.4.0-x86_64-apple-darwin.tar.gz $mdbook -help mdbook v0.4.0 Mathieu David &#60;mathieudavid@mathieudavid.org&#62; Creates a book from markdown files USAGE: mdbook [SUBCOMMAND] FLAGS: -h, --help Prints help information -V, --version Prints version information SUBCOMMANDS: build Builds [...]]]></description>
			<content:encoded><![CDATA[<p>基于<a href="http://en.wikipedia.org/wiki/Markdown">Markdown格式</a>文件<a href="https://tonybai.com/2015/09/19/write-blog-in-markdown/">写博客已经很多年了</a>，一直使用的是Wordpress的markdown插件，由于各种遗留原因，一直没有转换到直接使用静态站点的方式。博客文章之间一般来说多是独立篇章，少有关联，即便是写一个系列文章，数量也不会太多。因此，用博客形式来组织书籍章节是不大合适的。“术业有专攻”，我们还得寻找专门用来制作电子书的工具或平台，并且要支持本地安装，支持基于Markdown格式的源数据文件。</p>
<p>专门用于制作电子书类文档的知名工具包括：<a href="https://www.gitbook.com/">gitbook</a>和<a href="https://readthedocs.org/">Read the Docs</a>。不过前者的<a href="https://github.com/GitbookIO/gitbook">开源版本</a>2018年末就<a href="https://legacy.gitbook.com/">不更新了</a>，而<strong>Read the Docs</strong>则比较老，还需要多个工具配合。我个人倾向于单个二进制文件搞定一切。于是我找到了三个候选：<a href="https://gohugo.io/">gohugo</a>、<a href="https://github.com/rust-lang/mdBook">mdbook</a>和<a href="https://github.com/peachdocs/peach">peach</a>，这三个候选部署时都只有一个二进制文件。<a href="https://tonybai.com/2015/09/23/intro-of-gohugo/">gohugo</a>和peach是<a href="https://tonybai.com/tag/go">Go语言</a>实现的，而mdbook则是用<a href="https://www.rust-lang.org/">Rust语言</a>实现的。下面我们就来简单对比一下这三个基于Markdown格式的电子书制作工具。</p>
<h2>1. mdbook</h2>
<p>mdbook是模仿gitbook样式的从markdown文件生成电子书的工具和静态站点服务，它仅聚焦于“电子书制作和站点服务”。如果不是类似gitbook风格的其他类静态内容服务，那么它并不适合。因此，该工具采用了惯例优先原则(convention over configuration)，使得使用时我们无需做太多的配置即可生成一个<strong>像模像样</strong>的电子书站点。</p>
<p>由于是rust实现的，mdbook本地部署时只需一个二进制文件，我们直接从它的github release上下载对应os平台的release文件（这里是macos的0.4.0版本）：</p>
<pre><code>wget -c https://github.com/rust-lang/mdBook/releases/download/v0.4.0/mdbook-v0.4.0-x86_64-apple-darwin.tar.gz

</code></pre>
<p>解压后，将mdbook所在路径添加到<strong>PATH</strong>环境变量中：</p>
<pre><code>$tar zxvf mdbook-v0.4.0-x86_64-apple-darwin.tar.gz
x mdbook
$ls
mdbook*                        mdbook-v0.4.0-x86_64-apple-darwin.tar.gz

$mdbook -help
mdbook v0.4.0
Mathieu David &lt;mathieudavid@mathieudavid.org&gt;
Creates a book from markdown files

USAGE:
    mdbook [SUBCOMMAND]

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

SUBCOMMANDS:
    build    Builds a book from its markdown files
    clean    Deletes a built book
    help     Prints this message or the help of the given subcommand(s)
    init     Creates the boilerplate structure and files for a new book
    serve    Serves a book at http://localhost:3000, and rebuilds it on changes
    test     Tests that a book's Rust code samples compile
    watch    Watches a book's files and rebuilds it on changes

For more information about a specific command, try `mdbook &lt;command&gt; --help`
The source code for mdBook is available at: https://github.com/rust-lang/mdBook

</code></pre>
<p>接下来，我们就使用<strong>mdbook init</strong>命令创建一个电子书工程：</p>
<pre><code>$mdbook init go-ml

Do you want a .gitignore to be created? (y/n)
y
What title would you like to give the book?
go machine learning
2020-06-27 15:58:03 [INFO] (mdbook::book::init): Creating a new book with stub content

All done, no errors...

</code></pre>
<p>我们看到<strong>mdbook init</strong>生成了一个目录，目录布局如下：</p>
<pre><code>➜  /Users/tonybai/MyEbook/mdbook git:(master) ✗ $tree
.
└── go-ml
    ├── book
    ├── book.toml
    └── src
        ├── SUMMARY.md
        └── chapter_1.md

3 directories, 3 files

</code></pre>
<p>接下来，我们直接运行<strong>mdbook serve</strong>即启动了一个服务，用于访问该电子书：</p>
<pre><code>➜  /Users/tonybai/MyEbook/mdbook git:(master) ✗ $mdbook serve go-ml
2020-06-27 16:06:56 [INFO] (mdbook::book): Book building has started
2020-06-27 16:06:56 [INFO] (mdbook::book): Running the html backend
2020-06-27 16:06:56 [INFO] (mdbook::cmd::serve): Serving on: http://localhost:3000
2020-06-27 16:06:56 [INFO] (warp::server): listening on http://[::1]:3000
2020-06-27 16:06:56 [INFO] (mdbook::cmd::watch): Listening for changes...

</code></pre>
<p>我们通过浏览器访问<strong>http://localhost:3000</strong>，可以看到如下页面：</p>
<p><img src="https://tonybai.com/wp-content/uploads/gohugo-vs-mdbook-vs-peach/mdbook-1.png" alt="img{512x368}" /></p>
<p><center>图：mdbook生成的电子书首页</center></p>
<p>我们看到：我们没有做任何配置就生成了一个和gitbook样式差不多的电子书服务站点。该站点还支持选择页面显示模式（截图中使用的是默认的Light模式）、支持查询等。</p>
<p>如果我们要增加新章节、编排章节标题缩进，只需编辑电子书工程下面的<strong>src/SUMMARY.md</strong>：</p>
<pre><code>$cat SUMMARY.md
# Summary

- [Chapter 1](./chapter_1.md)
  - [Chapter 1.1](./chapter_1_1.md)
- [Chapter 2](./chapter_2.md)
</code></pre>
<p>这些对于多数人来说已经是足够了的，后续只需关注书籍内容即可，无需对mdbook生成的工程进行什么调整。mdbook会自动探测src目录下的文件变化并根据变化重新生成静态html文件。我们只需刷新页面即可看到最新变化。</p>
<h2>2. peach</h2>
<p><a href="https://peachdocs.org/docs">peach</a>是一款由Go语言实现的多语言、实时同步以及全文搜索功能的 Web 文档服务器。它由gogs的作者<a href="https://github.com/unknwon">无闻</a>打造，该作者的很多开源项目的文档也都是由peach生成和提供文档服务支撑的。<br />
我们可以直接使用<strong>go get</strong>安装peach：</p>
<pre><code>$export GONOSUMDB="github.com/russross/blackfriday"
$go get github.com/peachdocs/peach
go: github.com/peachdocs/peach upgrade =&gt; v0.9.8
$peach -v
Peach version 0.9.8.0810

</code></pre>
<p>接下来，我们用peach建立电子书工程：</p>
<pre><code>$peach new -target=go-ml.peach
➜  Creating 'go-ml.peach'...
➜  Creating 'templates'...
➜  Creating 'public'...
Do you want to use custom templates?[Y/n] n
✓  Done!

</code></pre>
<p>我们这里直接使用peach项目自身文档的自定义模板：</p>
<p>下载配置好的自定义模板：</p>
<pre><code>$ cd go-ml.peach

$ git clone https://github.com/peachdocs/peach.peach.git custom
Cloning into 'custom'...
remote: Enumerating objects: 62, done.
remote: Total 62 (delta 0), reused 0 (delta 0), pack-reused 62
Unpacking objects: 100% (62/62), done.
Checking connectivity... done.

</code></pre>
<p>启动web服务：</p>
<pre><code>$peach web

intro/
     |__ installation
     |__ getting_started
     |__ roadmap
howto/
     |__ documentation
     |__ webhook
     |__ templates
     |__ static_resources
     |__ navbar
     |__ pages
     |__ extension
     |__ protect_resources
     |__ upgrade
advanced/
        |__ config_cheat_sheet
faqs/
intro/
     |__ installation
     |__ getting_started
     |__ roadmap
howto/
     |__ documentation
     |__ webhook
     |__ templates
     |__ static_resources
     |__ navbar
     |__ pages
     |__ extension
     |__ protect_resources
     |__ upgrade
advanced/
        |__ config_cheat_sheet
faqs/
[Peach] 20-06-27 10:17:31 [ INFO] Peach 0.9.8.0810
[Peach] 20-06-27 10:17:31 [ INFO] Peach Server Listen on 127.0.0.1:5556

</code></pre>
<p>我们通过浏览器访问<strong>http://localhost:5556</strong>，可以看到如下页面：</p>
<p><img src="https://tonybai.com/wp-content/uploads/gohugo-vs-mdbook-vs-peach/peach-1.png" alt="img{512x368}" /></p>
<p><center>图：peach生成的电子书目录页</center></p>
<p>不过，和mdbook不同，上面peach加载并渲染的文档并不在本地，我们在custom/app.ini中看到如下配置：</p>
<pre><code>[docs]
TYPE = remote
TARGET = https://github.com/peachdocs/docs.git
SECRET = peach

</code></pre>
<p>我们看到当前例子采用了<strong>remote</strong>模式，即使用Github上的仓库peachdocs/docs中的数据(markdown文件）作为源文件进行渲染，而这个仓库的结构如下：</p>
<pre><code>$tree -L 2 docs
docs
├── TOC.ini
├── en-US
│   ├── advanced
│   ├── faqs
│   ├── howto
│   └── intro
├── images
│   └── github_webhook.png
└── zh-CN
    ├── advanced
    ├── faqs
    ├── howto
    └── intro

11 directories, 2 files

</code></pre>
<p>TOC.ini文件描述了文档结构布局：</p>
<pre><code>$cat TOC.ini
-: intro
-: howto
-: advanced
-: faqs

[intro]
-: README
-: installation
-: getting_started
-: roadmap

[howto]
-: README
-: documentation
-: webhook
-: templates
-: static_resources
-: navbar
-: pages
-: extension
-: protect_resources
-: upgrade

[advanced]
-: README
-: config_cheat_sheet

[faqs]
-: README

</code></pre>
<p>我们看到，和mdbook相比，peach的门槛稍高一些，需要学习TOC.ini中的特殊配置语法，同时如果要改变peach的默认风格，还要学习peach使用的模板语法(Peach 使用 Go 语言 Pongo2 v3 版本 作为模板引擎，它使用的是 Django HTML 格式)。</p>
<h2>3. gohugo+git book theme</h2>
<p>gohugo是这几年最火的静态站点生成工具。和上面两个工具不同的是：它致力于成为一个通用的静态站点工具，与hexo等目标一致。结合gohugo与git book风格的theme也能实现电子书制作与站点服务。</p>
<p>经过多年发展，gohugo的安装十分方便：在macos上，我们既可以使用go get安装（gohugo支持module），也可以使用brew安装：</p>
<pre><code>$brew install hugo

==&gt; Downloading https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/hugo-0.69.2.mojave.bottle.tar.gz

==&gt; Summary
/usr/local/Cellar/hugo/0.69.2: 42 files, 74.3MB
==&gt; `brew cleanup` has not been run in 30 days, running now...
Removing: /usr/local/Cellar/gettext/0.20.1... (1,899 files, 18.5MB)
... ...

$hugo version
Hugo Static Site Generator v0.69.2/extended darwin/amd64 BuildDate: unknown

</code></pre>
<p>通过<strong>hugo new site</strong>命令，我们来创建一个新的站点：</p>
<pre><code>$hugo new site go-machine-learning

Congratulations! Your new Hugo site is created in /Users/tonybai/MyEbook/gohugo/go-machine-learning.

Just a few more steps and you're ready to go:

1. Download a theme into the same-named folder.
   Choose a theme from https://themes.gohugo.io/ or
   create your own with the "hugo new theme &lt;THEMENAME&gt;" command.
2. Perhaps you want to add some content. You can add single files
   with "hugo new &lt;SECTIONNAME&gt;/&lt;FILENAME&gt;.&lt;FORMAT&gt;".
3. Start the built-in live server via "hugo server".

Visit https://gohugo.io/ for quickstart guide and full documentation.

</code></pre>
<p>下面是生成的站点的初始目录结构：</p>
<pre><code>$tree
.
└── go-machine-learning
    ├── archetypes
    │   └── default.md
    ├── config.toml
    ├── content
    ├── data
    ├── layouts
    ├── static
    └── themes

7 directories, 2 files

</code></pre>
<p>接下来我们来安装<a href="https://github.com/alex-shpak/hugo-book">gitbook theme</a>：</p>
<pre><code>$cd go-machine-learning

$git submodule add https://github.com/alex-shpak/hugo-book themes/book
Cloning into '/Users/tonybai/MyEbook/gohugo/go-machine-learning/hugo-book'...
remote: Enumerating objects: 3555, done.
Receiving objects:  18% (664/3555), 692.01 KiB | 4.00 KiB/s
... ...
remote: Total 3555 (delta 0), reused 0 (delta 0), pack-reused 3555
Receiving objects: 100% (3555/3555), 5.74 MiB | 5.00 KiB/s, done.
Resolving deltas: 100% (1809/1809), done.

</code></pre>
<p>我们可以修改一下顶层目录的config.toml，增加<strong>theme=”book”</strong>：</p>
<pre><code>baseURL = "http://example.org/"
languageCode = "zh-cn"
title = "Go机器学习"
theme = "book"

</code></pre>
<p>启动该站点：</p>
<pre><code>$hugo server --minify --theme book

                   | EN
-------------------+-----
  Pages            |  7
  Paginator pages  |  0
  Non-page files   |  0
  Static files     | 80
  Processed images |  0
  Aliases          |  0
  Sitemaps         |  1
  Cleaned          |  0 

Built in 26 ms
Watching for changes in /Users/tonybai/MyEbook/gohugo/go-machine-learning/{archetypes,content,data,layouts,static,themes}
Watching for config changes in /Users/tonybai/MyEbook/gohugo/go-machine-learning/config.toml
Environment: "development"
Serving pages from memory
Running in Fast Render Mode. For full rebuilds on change: hugo server --disableFastRender
Web Server is available at http://localhost:1313/ (bind address 127.0.0.1)
Press Ctrl+C to stop

</code></pre>
<p>这时由于content目录为空，因此通过浏览器访问: localhost:1313后只能看到只有一个标题的空白页面。</p>
<p>我们将https://github.com/alex-shpak/hugo-book themes/book下面的样例站点的content拷贝到我们的站点中：</p>
<pre><code> $cp -R themes/book/exampleSite/content .
 $ll content
total 8
drwxr-xr-x   6 tonybai  staff   192  6 27 16:36 ./
drwxr-xr-x  12 tonybai  staff   384  6 27 16:35 ../
-rw-r--r--   1 tonybai  staff  1165  6 27 16:36 _index.md
drwxr-xr-x   4 tonybai  staff   128  6 27 16:36 docs/
drwxr-xr-x   3 tonybai  staff    96  6 27 16:36 menu/
drwxr-xr-x   7 tonybai  staff   224  6 27 16:36 posts/

</code></pre>
<p>再次启动hugo server后，我们通过浏览器浏览，可以看到下面页面：</p>
<p><img src="https://tonybai.com/wp-content/uploads/gohugo-vs-mdbook-vs-peach/gohugo-1.png" alt="img{512x368}" /></p>
<p><center>图：gohugo生成的电子书目录页</center></p>
<p>我们看到这个页面分为三栏，最左侧是站点目录栏，中间是章节内容，右侧显示的是内容中的标题结构。电子书源文件分布在content目录下，该目录的结构如下：</p>
<pre><code>$tree -L 2 content
content
├── _index.md
├── docs
│   ├── example
│   └── shortcodes
├── menu
│   └── index.md
└── posts
    ├── _index.md
    ├── chapter_1.md
    ├── creating-a-new-theme.md
    ├── goisforlovers.md
    ├── hugoisforlovers.md
    └── migrate-from-jekyll.md

5 directories, 8 files

</code></pre>
<ul>
<li>
<p>&#95;index.md是首页布局</p>
</li>
<li>
<p>menu/index.md是左侧栏的布局</p>
</li>
</ul>
<p>其他均为文章内容源文件。如果我们要调整首页布局或左侧栏的书籍结构，我们只需调整上述两个文件即可。</p>
<h2>4. 小结</h2>
<p>我们粗略、快速对mdbook、peach和gohugo工具做了比较，三者部署时都是单二进制文件。</p>
<p>我们的目标是利用工具生成电子书，仅从达到这个目的难易度来看：</p>
<ul>
<li>
<p>mdbook是“门槛”最低的，几乎无需配置，就能搭建出一个像模像样的类似gitbook的图书站点；</p>
</li>
<li>
<p>peach门槛较高一些，要配置的东西多一些；</p>
</li>
<li>
<p>gohugo门槛适中，但却最为灵活和强大。如果对gohugo的模板语法十分熟悉，可以定义出一套满足自己风格的电子书浏览页面风格。</p>
</li>
</ul>
<hr />
<p>我的网课“<a href="https://coding.imooc.com/class/284.html">Kubernetes实战：高可用集群搭建、配置、运维与应用</a>”在慕课网上线了，感谢小伙伴们学习支持！</p>
<p><a href="https://tonybai.com/">我爱发短信</a>：企业级短信平台定制开发专家 https://tonybai.com/<br />
smspush : 可部署在企业内部的定制化短信平台，三网覆盖，不惧大并发接入，可定制扩展； 短信内容你来定，不再受约束, 接口丰富，支持长短信，签名可选。</p>
<p>2020年4月8日，中国三大电信运营商联合发布《5G消息白皮书》，51短信平台也会全新升级到“51商用消息平台”，全面支持5G RCS消息。</p>
<p>著名云主机服务厂商DigitalOcean发布最新的主机计划，入门级Droplet配置升级为：1 core CPU、1G内存、25G高速SSD，价格5$/月。有使用DigitalOcean需求的朋友，可以打开这个<a href="https://m.do.co/c/bff6eed92687">链接地址</a>：https://m.do.co/c/bff6eed92687 开启你的DO主机之路。</p>
<p>Gopher Daily(Gopher每日新闻)归档仓库 &#8211; https://github.com/bigwhite/gopherdaily</p>
<p>我的联系方式：</p>
<p>微博：https://weibo.com/bigwhite20xx<br />
微信公众号：iamtonybai<br />
博客：tonybai.com<br />
github: https://github.com/bigwhite</p>
<p>微信赞赏：<br />
<img src="https://tonybai.com/wp-content/uploads/wechat-zanshang-code-512x512.jpg" alt="img{512x368}" /></p>
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。</p>
<p style='text-align:left'>&copy; 2020, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2020/06/27/gohugo-vs-mdbook-vs-peach/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>果果十周岁了！</title>
		<link>https://tonybai.com/2020/05/03/guoguo-ten-years-old/</link>
		<comments>https://tonybai.com/2020/05/03/guoguo-ten-years-old/#comments</comments>
		<pubDate>Sun, 03 May 2020 05:24:50 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[生活簿]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Blogger]]></category>
		<category><![CDATA[七月]]></category>
		<category><![CDATA[二宝]]></category>
		<category><![CDATA[二胎]]></category>
		<category><![CDATA[十岁]]></category>
		<category><![CDATA[博客]]></category>
		<category><![CDATA[女儿]]></category>
		<category><![CDATA[家庭]]></category>
		<category><![CDATA[感悟]]></category>
		<category><![CDATA[摄影]]></category>
		<category><![CDATA[果果]]></category>
		<category><![CDATA[爸爸]]></category>
		<category><![CDATA[生活]]></category>
		<category><![CDATA[老婆]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=2937</guid>
		<description><![CDATA[好久没有在我的博客上写关于果果的事情了，因为很多关于果果成长的经历都记录在她自己的博客中了。但今天是她十周岁的生日，是个值得纪念的日子。闺女成长的十年，也是我学习为人父的十年。作为父亲，我发自内心地想说点啥，是回顾，也是感受，亦有些寄语^_^。 图：果果成长的十年 出生 老婆在2009年7月怀上了果果。那时我们刚刚新婚不久，二人世界还没过够^&#95;^，小家伙的突然到来还让我们有些“手足无措”。为此，我们还认真地讨论了两天，最终老婆拍板：我要生下这个孩子，于是果果保住了^&#95;^。如今，每当果果提及此事，都会“发狠”地盯上我几眼，我也只能呵呵呵呵地应对^_^。 老婆怀胎中段，我一直在福建出差，虽然有岳母陪在老婆身边，但年底那两个月，老婆心情十分差。直到那一年大年三十的下午2点，我才在桃仙机场下的飞机，匆匆赶回家。大街上连车的打不到，多亏还有公交系统。进入家门，心里满满的都是对老婆的愧疚。记忆中老婆似乎并没有说啥，只说了一句“吃饭吧”，我顿感心里热乎乎的。 果果似乎很享受在妈妈子宫中待着，预产期都过了几天了，她还没有反应，直到2010年5月3日凌晨1点多，规律性的宫缩“来袭”。我们匆忙赶到医院，早上6点半多，老婆进入产室，9点多，我在产室外听到了果果呱呱坠地后的第一声啼哭。 图：刚出生的果果 果果出生后，恰逢徐峥的作品《人在囧途》上映，影片中徐峥扮演角色的孩子叫果果，我们觉得这个小名不错，于是便给我们宝宝起名为果果。 第一次照顾这么小的孩子也着实让我们这些大人手忙脚乱一段时间。出月子后，生活逐渐恢复平稳。果果每天除了吃奶就是睡觉，也算是比较省心了。稍大一些后，果果似乎并不太愿意睡觉了，每次喂完奶都得放到小车上在厅里推过来推过去哄她睡觉，后来果果姥姥买的一个能发出大恐龙吼声的玩具也加入到促进果果睡眠的行列中^&#95;^。 第一次走路(0岁) 果果一直母乳喂养，身体也很壮实。抬头、翻身、学会爬行和其他孩子相比都略有提前。最让我印象深刻是她第一次学会独立行走。记得那是2010年农历春节前，我们家当时的供暖非常好，室温在28度以上。果果在家只穿一套内衣裤，因此行动和玩耍起来非常方便。之前果果就可以扶着床沿踱步了并且她似乎也很喜欢站起来的感觉。那天她自己在卧室的地板上玩耍，我在门口偷偷观察她。她玩了一会儿就开始扶着床站起来，看我站在门口，她居然放开了扶着床沿的双手，向我摇摇晃晃地走了过来。从床边到卧室门口大约有不到2米的距离，我也兴奋地张开双臂，引导她向我走来。她边走边兴奋地笑，似乎也在惊讶于自己能独立行走了。在她扑到我的怀中的那一刻，我才意识到我见证了果果人生第一次独立行走，老婆听到这个消息也是兴奋不已。自从果果学会了走路，此后便一发不可收拾^&#95;^。 打针不哭(1岁) 可能是因为母乳喂养，果果在一岁的这一年中没有患过任何感冒发烧的病症。但当母体带给她的免疫力逐渐失去作用后，果果便和其他小朋友一样，会得感冒，也会发烧。记得果果第一次感冒(刚过一岁生日没多久)就烧的特别厉害。由于我们也是第一次遇到这种情况，特别担心，于是就带她去医院检查。虽然我们期望医生开立口服药，但医生最终还是开了点滴。在护士站门口，果果看到其他孩子扎针时都哇哇的哭，心里也胆怯了。果不其然，当针头穿透她的皮肤进入血管的那一刻，果果也像其他孩子一样，哇哇大哭起来。 有了这次“痛苦”的扎针经历后，我们也对她进行了心理疏导，教她要学会坚强，从她的眼神看得出来，她似乎听懂了。在2011年的秋冬换季，果果又患感冒发烧。同样去了医院，同样开了点滴，但在护士站扎针的时候，果果居然很坚强的忍住了，没有哇哇的哭泣，这让看惯了孩子痛哭的护士也是惊奇不已。看着泪水在眼圈里打转但没有哭出来的果果，我们心里更是心疼她了。 送去幼儿园学说话(2岁) 果果在11个月的时候就会喊妈妈了，但直到2岁半她能吐出的字依然只有“妈妈”，偶尔也有“爸爸”。现在看来，果果说话晚是因为我们给她的语言刺激太少了。果果不愿意睡觉，一旦睡着了，老人生怕声音大吵醒她，于是就命令我们不许出声。久而久之，果果在潜意思中得到的声音刺激、语言刺激照比其他小朋友就要少很多。为此，我们还带着果果去看了生长发育门诊、做过筛查，结果都显示果果没有任何生理性的疾病。 我们需要找到一个让果果接受更多语言刺激的方法，最终我们决定在果果2岁零5个月的时候送她去幼儿园“学说话”。做过家长的都知道，送孩子去幼儿园的过程是“痛苦”的，孩子哭闹，家长心疼，但这个过程是必须要经历的。付出了就有收获。在果果上幼儿园后的一个月，果果的“话匣子”就彻底打开了^&#95;^。 更像女娃了，但怕大海(3岁) 出生时，果果头发稀少，为了让果果长出更好的头发，我们每隔一段时间就把她的头发剃的很短(几近光头)。在2岁之内，果果更像一个“男娃”。直到3岁以后，我们开始给她留头发了。小家伙似乎也知道留头发后自己更好看了，姥姥每次给她梳头扎辫她都很喜欢。留着还有些短的头发让她更像女娃了： 图：更像女娃的果果 下半年，我们把果果转到了更大的幼儿园，并且果果每天上幼儿园都不再费劲了。她在幼儿园也学到了许多知识、技能和礼节。 3岁的果果的身体显得比同龄的女宝高大一圈，我们也开始带着她到处出行游玩。劳动节黄金周我们第一次带孩子去海边。那天的风浪比较大，浪花拍击礁石的声音震耳欲聋，果果显得很害怕。我们抱着她向海边靠近，但她却一直在挣扎并大喊：“离开、离开、走、走”。当我自己独自向大海靠近时，她也大喊：“爸爸，你回来，你回来”。见此情景，我们都哈哈大笑起来。 后来我们去了一处比较海浪比较舒缓的地带，没有了海浪拍打的巨大轰隆声，果果镇定了许多。也开始站在沙滩上和其他小朋友一起挖起沙子了。 独立爬山(4岁) 4岁的果果不仅个头高，而且壮实了。我们在权衡了之后，决定在假期带她去爬山，并且我已经做好了背她上山的准备。那次我们爬的是千山。千山在整个省内的爬山困难指数排行榜上也是名列前茅的。不过小家伙似乎很喜欢爬山，在登山栈道上显得十分兴奋，我们也给她做心里建设，希望她自己爬到顶峰。虽然在中段她也曾打过退堂鼓，但最终小家伙还是凭借自己的双腿和毅力爬上了山顶，我和老婆也都是非常惊讶。下山过程中，小家伙也是一路欢喜，并没用我们费心。只是由于累了，在回程的车上，小家伙呼呼的睡了一道。 正因为此次爬山的经历，果果爱上了爬山。后续选择旅游景点，她总是先挑那些有山可爬的地方，比如：2019年的陕西的华山、骊山等。 和妈妈一起去普吉岛(5岁) 孩子小的时候，出行很麻烦，而且孩子能收获的东西有限。5岁是一个很好的节点，她基本能自立了，而且感知和吸收外界信息的能力已经很强了。 5岁这一年是果果第一次和妈妈出国旅游，此次出行的目的是泰国普吉岛，和她们一起去的还有老婆的同事，这些同事也能帮助老婆照顾照顾果果，顺道还能锻炼一下果果的交际能力。这也是果果第一次乘飞机出行，在机场她十分兴奋。她们的航班在首尔中转，从首尔飞到普吉需要5-6个小时，这下让果果过了一把飞行瘾，她尤其喜欢飞机起降过程中的那种感觉，以至于以后每次出行，她都嚷嚷着要买多次经停或中转的航班^&#95;^。 更难得可贵的是，这次的旅游经历深深印在果果的记忆中，至今每当翻看那时的照片时，她还能头头是道的给我们讲当时发生的故事。有些事情，我老婆都已经记不得了。 上小学了(6岁) 转眼间，果果来到了6周岁，已经到了上学的年龄了。9月份，果果正式成为一名珠江街第五小学一年级的“小豆包”。和第一次上幼儿园不同，这次果果适应的很快，也没有哭鼻子的情况。反倒是回来和我们说她班级有小朋友一直哭，她还很疑惑这些小朋友为什么要哭^&#95;^。 上学后，更多的教育责任“甩”给了班主任老师，我们平时更多是帮忙批改批改作业，督促读读书，带着上上才艺班。果果的古筝是各门才艺课中学的最好的，果果也有了那么一些古典的气质： 图：有一丝古典气质的果果 这一年我还给果果开了博客。有些东西，光靠脑子是记不住的，写下来，留给多年后的自己和孩子慢慢回味。在果果能自己维护这个博客之前，我就先替她维护了。 叛逆与独立(7~9岁) 进入到7岁以后，果果受到的教育多了，读的书多了，渐渐了有了自己的主见和小脾气，再也不是那个将父母话“奉为圭臬”的小女娃了。如果就某事“辩论”，她姥姥已经完全不是对手了。也只有我和老婆偶尔还能“恩威并举”的降住她:(。 果果喜欢读故事书。她最喜欢读郑渊洁的童话，按照她的说法，市面上郑渊洁的书她基本都读完了，有些书，她已经读过不止一遍了。受郑渊洁风格的影响，她喜欢写幻想类的作文，喜欢天马行空，因此在细节描写上就差了一些。 她还喜欢“米小圈上学记”，每天晚上都是在天猫精灵播放的米小圈上学记中入睡的。 她喜欢宜家买来的老虎和小狗玩偶，一个起名为花果，一个起名为木果，每天一左一右的陪她入睡。 天猫精灵是她每天不可或缺的“伙伴”。早上听新闻早报，天气预报；晚上听故事，听历史，听音乐；偶尔还和天猫精灵玩玩互动猜谜游戏。真不愧为互联网和智能时代的原著民。 8岁的果果，其古筝考级已经通过了10级，这还是在她不是很勤奋练琴的情况下取得的。 这个阶段的果果也十分贪玩，喜欢去游乐场，玩老爸都不敢玩的惊险刺激的项目(只能由她妈妈陪着)。 9岁时，她偶尔和妈妈看了一集“家有儿女”，从那时起就“沉迷”于该剧：只要拿起iPad就必然打开“家有儿女”视频。她看电视剧和她看书的特点一样，如果某一集是她喜欢的，她会反复看上好多遍，丝毫没有不耐烦的迹象。有些集的台词她都能背下来，并粘着我和我老婆要给我们讲。还别说，讲的还头头是道的^&#95;^。 亭亭玉立的大姑娘(10岁) 由于新冠疫情的影响，果果的10岁生日在家里过的，我们也没法带她出去“玩耍”一番。10岁的她已经是一个亭亭玉立的大姑娘了。她的个头快赶上她妈妈了，大长腿，身材是“青出于蓝而胜于蓝”。 图：十岁的果果 图：亭亭玉立的果果 这次10周岁的生日除了生日蛋糕，还有一个更为特殊的礼物，那就是妈妈肚里的二宝，这也是果果一直想要的弟弟/妹妹。自从知道妈妈怀了二宝之后，果果变得更加懂事了。每天晚上对着妈妈的肚子给二宝讲故事，晚上睡觉前也会对着妈妈肚子猛“亲”几口^&#95;^。 为了留下美好回忆，我们还特地在果果十周岁生日的时候在影楼留下了一家四口的合影： 图：十岁果果生日时一家四口合影 小结 果果成长的十年给我的最大感受就是：快！一晃间，果果都10岁了，二宝也即将出生。我和老婆也即将步入中年。这里做的这个阶段性的回顾，以期若干年后当记忆模糊时还能通过这篇文章回忆起当年果果小时候的点点滴滴。 这里也希望果果在未来的人生道路中能继续一帆风顺，身体健健康康，每天快快乐乐。 希望果果和即将出生的二宝一起姐妹情深，相濡以沫，共同走好人生之路。 [...]]]></description>
			<content:encoded><![CDATA[<p>好久没有在我的博客上写关于<a href="https://daughter.tonybai.com">果果</a>的事情了，因为很多关于果果成长的经历都记录在<a href="https://daughter.tonybai.com">她自己的博客</a>中了。但今天是她<a href="https://daughter.tonybai.com/2020/05/03/i-am-10-years-old/">十周岁的生日</a>，是个值得纪念的日子。闺女成长的十年，也是我学习为人父的十年。作为父亲，我发自内心地想说点啥，是回顾，也是感受，亦有些寄语^_^。</p>
<p><img src="https://tonybai.com/wp-content/uploads/guoguo-ten-years-old/guoguo-10-years-old-2.jpg" alt="img{512x368}" /><br />
<center>图：果果成长的十年</center></p>
<h3>出生</h3>
<p>老婆在2009年7月怀上了果果。那时我们刚刚新婚不久，二人世界还没过够^&#95;^，小家伙的突然到来还让我们有些“手足无措”。为此，我们还认真地讨论了两天，最终老婆拍板：<strong>我要生下这个孩子</strong>，于是果果保住了^&#95;^。如今，每当果果提及此事，都会“发狠”地盯上我几眼，我也只能呵呵呵呵地应对^_^。</p>
<p>老婆怀胎中段，我一直在福建出差，虽然有岳母陪在老婆身边，但年底那两个月，老婆心情十分差。直到那一年大年三十的下午2点，我才在桃仙机场下的飞机，匆匆赶回家。大街上连车的打不到，多亏还有公交系统。进入家门，心里满满的都是对老婆的愧疚。记忆中老婆似乎并没有说啥，只说了一句“吃饭吧”，我顿感心里热乎乎的。</p>
<p>果果似乎很享受在妈妈子宫中待着，预产期都过了几天了，她还没有反应，直到2010年5月3日凌晨1点多，规律性的宫缩“来袭”。我们匆忙赶到医院，早上6点半多，老婆进入产室，9点多，我在产室外听到了果果呱呱坠地后的第一声啼哭。</p>
<p><img src="https://tonybai.com/wp-content/uploads/guoguo-ten-years-old/guoguo-was-born.JPG" alt="img{512x368}" /><br />
<center>图：刚出生的果果</center></p>
<p>果果出生后，恰逢徐峥的作品《人在囧途》上映，影片中徐峥扮演角色的孩子叫果果，我们觉得这个小名不错，于是便给我们宝宝起名为<strong>果果</strong>。</p>
<p>第一次照顾这么小的孩子也着实让我们这些大人手忙脚乱一段时间。出月子后，生活逐渐恢复平稳。果果每天除了吃奶就是睡觉，也算是比较省心了。稍大一些后，果果似乎并不太愿意睡觉了，每次喂完奶都得放到小车上在厅里推过来推过去哄她睡觉，后来果果姥姥买的一个能发出大恐龙吼声的玩具也加入到促进果果睡眠的行列中^&#95;^。</p>
<h3>第一次走路(0岁)</h3>
<p>果果一直母乳喂养，身体也很壮实。抬头、翻身、学会爬行和其他孩子相比都略有提前。最让我印象深刻是她第一次学会独立行走。记得那是2010年农历春节前，我们家当时的供暖非常好，室温在28度以上。果果在家只穿一套内衣裤，因此行动和玩耍起来非常方便。之前果果就可以扶着床沿踱步了并且她似乎也很喜欢站起来的感觉。那天她自己在卧室的地板上玩耍，我在门口偷偷观察她。她玩了一会儿就开始扶着床站起来，看我站在门口，她居然放开了扶着床沿的双手，向我摇摇晃晃地走了过来。从床边到卧室门口大约有不到2米的距离，我也兴奋地张开双臂，引导她向我走来。她边走边兴奋地笑，似乎也在惊讶于自己能独立行走了。在她扑到我的怀中的那一刻，我才意识到我见证了果果人生第一次独立行走，老婆听到这个消息也是兴奋不已。自从果果学会了走路，此后便一发不可收拾^&#95;^。</p>
<h3>打针不哭(1岁)</h3>
<p>可能是因为母乳喂养，果果在一岁的这一年中没有患过任何感冒发烧的病症。但当母体带给她的免疫力逐渐失去作用后，果果便和其他小朋友一样，会得感冒，也会发烧。记得果果第一次感冒(刚过一岁生日没多久)就烧的特别厉害。由于我们也是第一次遇到这种情况，特别担心，于是就带她去医院检查。虽然我们期望医生开立口服药，但医生最终还是开了点滴。在护士站门口，果果看到其他孩子扎针时都哇哇的哭，心里也胆怯了。果不其然，当针头穿透她的皮肤进入血管的那一刻，果果也像其他孩子一样，哇哇大哭起来。</p>
<p>有了这次“痛苦”的扎针经历后，我们也对她进行了心理疏导，教她要学会坚强，从她的眼神看得出来，她似乎听懂了。在2011年的秋冬换季，果果又患感冒发烧。同样去了医院，同样开了点滴，但在护士站扎针的时候，果果居然很坚强的忍住了，没有哇哇的哭泣，这让看惯了孩子痛哭的护士也是惊奇不已。看着泪水在眼圈里打转但没有哭出来的果果，我们心里更是心疼她了。</p>
<h3>送去幼儿园学说话(2岁)</h3>
<p>果果在11个月的时候就会喊妈妈了，但直到2岁半她能吐出的字依然只有“妈妈”，偶尔也有“爸爸”。现在看来，果果说话晚是因为我们给她的语言刺激太少了。果果不愿意睡觉，一旦睡着了，老人生怕声音大吵醒她，于是就命令我们不许出声。久而久之，果果在潜意思中得到的声音刺激、语言刺激照比其他小朋友就要少很多。为此，我们还带着果果去看了生长发育门诊、做过筛查，结果都显示果果没有任何生理性的疾病。</p>
<p>我们需要找到一个让果果接受更多语言刺激的方法，最终我们决定在果果2岁零5个月的时候送她去幼儿园“学说话”。做过家长的都知道，送孩子去幼儿园的过程是“痛苦”的，孩子哭闹，家长心疼，但这个过程是必须要经历的。付出了就有收获。在果果上幼儿园后的一个月，果果的“话匣子”就彻底打开了^&#95;^。</p>
<h3>更像女娃了，但怕大海(3岁)</h3>
<p>出生时，果果头发稀少，为了让果果长出更好的头发，我们每隔一段时间就把她的头发剃的很短(几近光头)。在2岁之内，果果更像一个“男娃”。直到3岁以后，我们开始给她留头发了。小家伙似乎也知道留头发后自己更好看了，姥姥每次给她梳头扎辫她都很喜欢。留着还有些短的头发让她更像女娃了：</p>
<p><img src="https://tonybai.com/wp-content/uploads/guoguo-ten-years-old/guoguo-3-years-old.jpg" alt="img{512x368}" /><br />
<center>图：更像女娃的果果</center></p>
<p>下半年，我们把果果转到了更大的幼儿园，并且果果每天上幼儿园都不再费劲了。她在幼儿园也学到了许多知识、技能和礼节。</p>
<p>3岁的果果的身体显得比同龄的女宝高大一圈，我们也开始带着她到处出行游玩。劳动节黄金周我们第一次带孩子去海边。那天的风浪比较大，浪花拍击礁石的声音震耳欲聋，果果显得很害怕。我们抱着她向海边靠近，但她却一直在挣扎并大喊：“离开、离开、走、走”。当我自己独自向大海靠近时，她也大喊：“爸爸，你回来，你回来”。见此情景，我们都哈哈大笑起来。</p>
<p>后来我们去了一处比较海浪比较舒缓的地带，没有了海浪拍打的巨大轰隆声，果果镇定了许多。也开始站在沙滩上和其他小朋友一起挖起沙子了。</p>
<h3>独立爬山(4岁)</h3>
<p>4岁的果果不仅个头高，而且壮实了。我们在权衡了之后，决定在假期带她去爬山，并且我已经做好了背她上山的准备。那次我们爬的是千山。千山在整个省内的爬山困难指数排行榜上也是名列前茅的。不过小家伙似乎很喜欢爬山，在登山栈道上显得十分兴奋，我们也给她做心里建设，希望她自己爬到顶峰。虽然在中段她也曾打过退堂鼓，但最终小家伙还是凭借自己的双腿和毅力爬上了山顶，我和老婆也都是非常惊讶。下山过程中，小家伙也是一路欢喜，并没用我们费心。只是由于累了，在回程的车上，小家伙呼呼的睡了一道。</p>
<p>正因为此次爬山的经历，果果爱上了爬山。后续选择旅游景点，她总是先挑那些有山可爬的地方，比如：2019年的<a href="https://daughter.tonybai.com/2019/08/17/xian-chongqing-tour-2nd-day-2019/">陕西的华山</a>、<a href="https://daughter.tonybai.com/2019/08/17/xian-chongqing-tour-2nd-day-2019/">骊山</a>等。</p>
<h3>和妈妈一起去普吉岛(5岁)</h3>
<p>孩子小的时候，出行很麻烦，而且孩子能收获的东西有限。5岁是一个很好的节点，她基本能自立了，而且感知和吸收外界信息的能力已经很强了。</p>
<p>5岁这一年是果果第一次和妈妈出国旅游，此次出行的目的是泰国普吉岛，和她们一起去的还有老婆的同事，这些同事也能帮助老婆照顾照顾果果，顺道还能锻炼一下果果的交际能力。这也是果果第一次乘飞机出行，在机场她十分兴奋。她们的航班在首尔中转，从首尔飞到普吉需要5-6个小时，这下让果果过了一把飞行瘾，她尤其喜欢飞机起降过程中的那种感觉，以至于以后每次出行，她都嚷嚷着要买多次经停或中转的航班^&#95;^。</p>
<p>更难得可贵的是，这次的旅游经历深深印在果果的记忆中，至今每当翻看那时的照片时，她还能头头是道的给我们讲当时发生的故事。有些事情，我老婆都已经记不得了。</p>
<h3>上小学了(6岁)</h3>
<p>转眼间，果果来到了6周岁，已经到了上学的年龄了。9月份，果果正式成为一名珠江街第五小学一年级的“小豆包”。和第一次上幼儿园不同，这次果果适应的很快，也没有哭鼻子的情况。反倒是回来和我们说她班级有小朋友一直哭，她还很疑惑这些小朋友为什么要哭^&#95;^。</p>
<p>上学后，更多的教育责任“甩”给了班主任老师，我们平时更多是帮忙批改批改作业，督促读读书，带着上上才艺班。果果的古筝是各门才艺课中学的最好的，果果也有了那么一些古典的气质：</p>
<p><img src="https://tonybai.com/wp-content/uploads/guoguo-ten-years-old/guoguo-gavatar.jpg" alt="img{512x368}" /><br />
<center>图：有一丝古典气质的果果</center></p>
<p>这一年我还给果果开了<a href="https://daughter.tonybai.com">博客</a>。有些东西，光靠脑子是记不住的，写下来，留给多年后的自己和孩子慢慢回味。在果果能自己维护这个博客之前，我就先替她维护了。</p>
<h3>叛逆与独立(7~9岁)</h3>
<p>进入到7岁以后，果果受到的教育多了，读的书多了，渐渐了有了自己的主见和小脾气，再也不是那个将父母话“奉为圭臬”的小女娃了。如果就某事“辩论”，她姥姥已经完全不是对手了。也只有我和老婆偶尔还能“恩威并举”的降住她:(。</p>
<p>果果喜欢读故事书。她最喜欢读郑渊洁的童话，按照她的说法，市面上郑渊洁的书她基本都读完了，有些书，她已经读过不止一遍了。受郑渊洁风格的影响，她喜欢写幻想类的作文，喜欢天马行空，因此在细节描写上就差了一些。</p>
<p>她还喜欢“米小圈上学记”，每天晚上都是在天猫精灵播放的米小圈上学记中入睡的。</p>
<p>她喜欢宜家买来的老虎和小狗玩偶，一个起名为花果，一个起名为木果，每天一左一右的陪她入睡。</p>
<p>天猫精灵是她每天不可或缺的“伙伴”。早上听新闻早报，天气预报；晚上听故事，听历史，听音乐；偶尔还和天猫精灵玩玩互动猜谜游戏。真不愧为互联网和智能时代的原著民。</p>
<p>8岁的果果，其古筝考级已经通过了10级，这还是在她不是很勤奋练琴的情况下取得的。</p>
<p>这个阶段的果果也十分贪玩，喜欢去游乐场，玩老爸都不敢玩的惊险刺激的项目(只能由她妈妈陪着)。</p>
<p>9岁时，她偶尔和妈妈看了一集“家有儿女”，从那时起就“沉迷”于该剧：只要拿起iPad就必然打开“家有儿女”视频。她看电视剧和她看书的特点一样，如果某一集是她喜欢的，她会反复看上好多遍，丝毫没有不耐烦的迹象。有些集的台词她都能背下来，并粘着我和我老婆要给我们讲。还别说，讲的还头头是道的^&#95;^。</p>
<h3>亭亭玉立的大姑娘(10岁)</h3>
<p>由于新冠疫情的影响，果果的10岁生日在家里过的，我们也没法带她出去“玩耍”一番。10岁的她已经是一个亭亭玉立的大姑娘了。她的个头快赶上她妈妈了，大长腿，身材是“青出于蓝而胜于蓝”。</p>
<p><img src="https://tonybai.com/wp-content/uploads/guoguo-ten-years-old/guoguo-10-years-old-1.jpg" alt="img{512x368}" /><br />
<center>图：十岁的果果</center></p>
<p><img src="https://tonybai.com/wp-content/uploads/guoguo-ten-years-old/guoguo-10-years-old-4.jpg" alt="img{512x368}" /><br />
<center>图：亭亭玉立的果果</center></p>
<p>这次10周岁的生日除了生日蛋糕，还有一个更为特殊的礼物，那就是妈妈肚里的二宝，这也是果果一直想要的弟弟/妹妹。自从知道妈妈怀了二宝之后，果果变得更加懂事了。每天晚上对着妈妈的肚子给二宝讲故事，晚上睡觉前也会对着妈妈肚子猛“亲”几口^&#95;^。</p>
<p>为了留下美好回忆，我们还特地在果果十周岁生日的时候在影楼留下了一家四口的合影：</p>
<p><img src="https://tonybai.com/wp-content/uploads/guoguo-ten-years-old/guoguo-10-years-old-3.jpg" alt="img{512x368}" /><br />
<center>图：十岁果果生日时一家四口合影</center></p>
<h3>小结</h3>
<p>果果成长的十年给我的最大感受就是：<strong>快</strong>！一晃间，果果都10岁了，二宝也即将出生。我和老婆也即将步入中年。这里做的这个阶段性的回顾，以期若干年后当记忆模糊时还能通过这篇文章回忆起当年果果小时候的点点滴滴。</p>
<p>这里也希望果果在未来的人生道路中能继续一帆风顺，身体健健康康，每天快快乐乐。</p>
<p>希望果果和即将出生的二宝一起姐妹情深，相濡以沫，共同走好人生之路。</p>
<p>最后，<strong>人生在于经历，而不在于得失</strong>。</p>
<hr />
<p>我的联系方式：</p>
<p>微博：https://weibo.com/bigwhite20xx<br />
微信公众号：iamtonybai<br />
博客：tonybai.com<br />
github: https://github.com/bigwhite</p>
<p>微信赞赏：<br />
<img src="https://tonybai.com/wp-content/uploads/wechat-zanshang-code-512x512.jpg" alt="img{512x368}" /></p>
<p style='text-align:left'>&copy; 2020, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2020/05/03/guoguo-ten-years-old/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
