<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Home on kidpeterpan.github.io</title><link>https://kidpeterpan.github.io/</link><description>Recent content in Home on kidpeterpan.github.io</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 04 Aug 2026 00:00:00 +0700</lastBuildDate><atom:link href="https://kidpeterpan.github.io/index.xml" rel="self" type="application/rss+xml"/><item><title>ตอนที่ 5: Functions</title><link>https://kidpeterpan.github.io/go/05-functions/</link><pubDate>Tue, 04 Aug 2026 00:00:00 +0700</pubDate><guid>https://kidpeterpan.github.io/go/05-functions/</guid><description>&lt;hr&gt;
&lt;p&gt;ตอนที่ 5 เราจะค่อย ๆ ย้ายโค้ดที่กองอยู่ใน &lt;code&gt;main&lt;/code&gt; ออกมาแบ่งเป็น function กันบ้าง หลังจากตอนที่แล้วเราใช้ block และ control structures ควบคุม flow ของโปรแกรมได้แล้ว
ในตอนนี้เราจะจัดโค้ดให้เรียกใช้ซ้ำได้ ตั้งแต่ syntax พื้นฐาน ไปจนถึงฟีเจอร์เฉพาะของ Go อย่าง multiple return values, closure และ &lt;code&gt;defer&lt;/code&gt;
แล้วปิดท้ายด้วยกฎ &lt;strong&gt;call by value&lt;/strong&gt; ที่จะช่วยไขปริศนาอีกหลายอย่างในตอนถัด ๆ ไป&lt;/p&gt;
&lt;p&gt;สิ่งที่จะได้ตอนจบบทนี้:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;เขียน function ตั้งแต่ syntax พื้นฐานจนถึงการจำลอง named/optional parameters ด้วย struct&lt;/li&gt;
&lt;li&gt;ใช้ variadic parameter รับค่าไม่จำกัด และส่ง slice เข้าไปด้วย &lt;code&gt;...&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;ใช้ multiple return values พร้อม &lt;code&gt;error&lt;/code&gt; เป็นค่าสุดท้าย ตาม convention ของ Go&lt;/li&gt;
&lt;li&gt;รู้จัก named return values และรู้ว่าทำไมควรหลีกเลี่ยง blank return&lt;/li&gt;
&lt;li&gt;ใช้ function เป็น value เก็บในตัวแปรและ map ได้เหมือน value ทั่วไป&lt;/li&gt;
&lt;li&gt;เขียน anonymous function และ closure เพื่อ capture ตัวแปรรอบตัว&lt;/li&gt;
&lt;li&gt;ส่ง function เป็น parameter และ return function ออกมา (higher-order function)&lt;/li&gt;
&lt;li&gt;ใช้ &lt;code&gt;defer&lt;/code&gt; ผูก cleanup ให้รันอัตโนมัติทุกครั้งที่ function จบ&lt;/li&gt;
&lt;li&gt;เข้าใจกฎ call by value — ทำไม &lt;code&gt;map&lt;/code&gt;/&lt;code&gt;slice&lt;/code&gt; ถึงมี behavior ต่างจากที่คิด&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="my-8 overflow-x-auto"&gt;
 &lt;pre class="mermaid text-left text-sm leading-normal"&gt;
graph TD
 A[Function พื้นฐาน: input -&gt; output] --&gt; B[Return tricks: หลายค่า + named return]
 A --&gt; C[Input tricks: variadic + struct options]
 B --&gt; D[Function เป็น value: ตัวแปร / map]
 D --&gt; E[Closure: capture ตัวแปรรอบตัว]
 E --&gt; F[ส่ง function เป็น parameter: sort.Slice]
 E --&gt; G[return function: factory]
 E --&gt; H[defer: cleanup แบบ LIFO]
 H --&gt; I[Call by value: copy เสมอ]
&lt;/pre&gt;
&lt;/div&gt;

&lt;hr&gt;
&lt;h2 id="วธทำตามบทน"&gt;วิธีทำตามบทนี้&lt;/h2&gt;
&lt;p&gt;เราจะสร้าง project ใหม่ ชื่อ &lt;code&gt;go-functions&lt;/code&gt; เพื่อให้ทดลองโค้ดได้โดยไม่กระทบ project จากตอนก่อน เปิด terminal แล้วรัน:&lt;/p&gt;</description></item><item><title>Cognitive Debt</title><link>https://kidpeterpan.github.io/article/cognitive-debt/</link><pubDate>Mon, 03 Aug 2026 00:00:00 +0700</pubDate><guid>https://kidpeterpan.github.io/article/cognitive-debt/</guid><description>&lt;blockquote&gt;
&lt;p&gt;แปลจาก &lt;a href="https://ankursethi.com/blog/prevent-cognitive-debt-by-manually-retyping-llm-generated-code/"&gt;Prevent cognitive debt by manually retyping LLM-generated code&lt;/a&gt; โดย Ankur Sethi&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="ปญหาทคนใช-ai-เขยนโคดทกคนกำลงเจอ"&gt;ปัญหาที่คนใช้ AI เขียนโค้ดทุกคนกำลังเจอ&lt;/h2&gt;
&lt;p&gt;สมมติว่าเรามี Coding Assistant (( &lt;em&gt;โปรแกรม AI ที่ช่วยเขียนโค้ด เช่น Copilot หรือ Claude Code&lt;/em&gt; )) สักตัว แล้วปล่อยให้มันจัดการทุกอย่างในโปรเจกต์ ตั้งแต่ต้นจนจบ ฟังดูเหมือนฝันเลยใช่ไหม?&lt;/p&gt;
&lt;p&gt;Ankur Sethi เล่าว่าเขาเคยคิดแบบนั้น แต่ทุกครั้งที่ปล่อยให้ AI เขียนฟีเจอร์ทั้งหมดให้เสร็จในครั้งเดียว เขากลับรู้สึก &amp;ldquo;ไม่พอใจและสับสน&amp;rdquo; วิธีที่เขาพบว่าใช้ได้ผลจริงคือการให้ AI &lt;strong&gt;เร่งงานส่วนที่น่าเบื่อ&lt;/strong&gt; — งานที่เราไม่อยากนั่งทำเอง แต่ก็ยังอยากเข้าใจว่ามันทำงานอย่างไร&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Just because a problem is boring doesn&amp;rsquo;t mean I want to fully offload my understanding of the solution to a machine.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;ประโยคนี้คือใจความสำคัญของบทความทั้งหมด — การที่งานน่าเบื่อ &lt;strong&gt;ไม่ได้หมายความว่าเราอยากยกความเข้าใจ&lt;/strong&gt; ในวิธีแก้ปัญหานั้นให้เครื่องจักรไปทั้งหมด&lt;/p&gt;</description></item><item><title>ตอนที่ 4: Blocks, Shadows, and Control Structures</title><link>https://kidpeterpan.github.io/go/04-blocks-shadows-and-control-structures/</link><pubDate>Sun, 02 Aug 2026 00:00:00 +0700</pubDate><guid>https://kidpeterpan.github.io/go/04-blocks-shadows-and-control-structures/</guid><description>&lt;hr&gt;
&lt;p&gt;ตอนที่ 4 เราจะปูพื้นฐาน &amp;ldquo;ตรรกะและการจัดระเบียบโปรแกรม&amp;rdquo; ของ Go หลังจากตอนที่แล้วเราจัดกลุ่มข้อมูลด้วย composite types ได้แล้ว ตอนนี้เราจะมาทำให้โปรแกรมตัดสินใจและวนซ้ำได้ด้วย block, &lt;code&gt;if&lt;/code&gt;, &lt;code&gt;for&lt;/code&gt;, &lt;code&gt;switch&lt;/code&gt; และรู้ว่า &lt;code&gt;goto&lt;/code&gt; มีอยู่จริงแต่แทบไม่ควรใช้&lt;/p&gt;
&lt;p&gt;สิ่งที่จะได้ตอนจบบทนี้:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;เข้าใจ block และกฎการมองเห็นตัวแปร (scope) ซึ่งเป็นรากของทุกอย่างที่เหลือ&lt;/li&gt;
&lt;li&gt;รู้จัก shadowing และหลีกเลี่ยงบั๊กที่เกิดจาก &lt;code&gt;:=&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;ใช้ &lt;code&gt;if&lt;/code&gt; พร้อมตัวแปรที่ scope กับทั้ง if/else&lt;/li&gt;
&lt;li&gt;ใช้ &lt;code&gt;for&lt;/code&gt; ทั้งสี่รูปแบบ และเลือก &lt;code&gt;for-range&lt;/code&gt; ให้ถูกงาน&lt;/li&gt;
&lt;li&gt;ใช้ &lt;code&gt;switch&lt;/code&gt; และ blank switch ให้สื่อเจตนา&lt;/li&gt;
&lt;li&gt;รู้ว่าทำไม &lt;code&gt;goto&lt;/code&gt; จึงถูกจำกัดจนแทบไร้อันตราย&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="my-8 overflow-x-auto"&gt;
 &lt;pre class="mermaid text-left text-sm leading-normal"&gt;
graph TD
 U[Universe block: predeclared identifiers] --&gt; P[Package block]
 P --&gt; F[File block: imports]
 F --&gt; Fn[Function block: params + locals]
 Fn --&gt; B["Inner blocks: {} ของ if / for / switch"]
 B --&gt;|declare ชื่อซ้ำกับชั้นนอก| S[Shadowing]
&lt;/pre&gt;
&lt;/div&gt;

&lt;hr&gt;
&lt;h2 id="วธทำตามบทน"&gt;วิธีทำตามบทนี้&lt;/h2&gt;
&lt;p&gt;เราจะสร้าง project ชื่อ &lt;code&gt;go_blocks_control&lt;/code&gt; แยกจาก project ตอนก่อน เพื่อทดลองโค้ดโดยไม่กระทบกัน เปิด terminal แล้วรันคำสั่งนี้:&lt;/p&gt;</description></item><item><title>ตอนที่ 3: Composite Types</title><link>https://kidpeterpan.github.io/go/03-composite-types/</link><pubDate>Sat, 01 Aug 2026 00:00:00 +0700</pubDate><guid>https://kidpeterpan.github.io/go/03-composite-types/</guid><description>&lt;hr&gt;
&lt;p&gt;ตอนที่ 3 เราจะเรียนรู้ &lt;strong&gt;composite types&lt;/strong&gt; หรือชนิดข้อมูลที่ประกอบขึ้นจากค่าอื่น ได้แก่ &lt;code&gt;array&lt;/code&gt;, &lt;code&gt;slice&lt;/code&gt;, &lt;code&gt;map&lt;/code&gt; และ &lt;code&gt;struct&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;ถ้าตอนที่ 2 สอนให้เราเลือกชนิดของ “ค่าเดี่ยว” เช่น &lt;code&gt;int&lt;/code&gt;, &lt;code&gt;string&lt;/code&gt; และ &lt;code&gt;bool&lt;/code&gt; ตอนนี้เราจะเริ่มจัดกลุ่มค่าเหล่านั้นเป็นข้อมูลที่ใช้งานจริง เช่น รายการสินค้า, คะแนนสอบ, ตารางราคา และข้อมูลผู้ใช้&lt;/p&gt;
&lt;p&gt;สิ่งที่จะได้ตอนจบบทนี้:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;เลือกใช้ &lt;code&gt;array&lt;/code&gt;, &lt;code&gt;slice&lt;/code&gt;, &lt;code&gt;map&lt;/code&gt; และ &lt;code&gt;struct&lt;/code&gt; ได้ถูกสถานการณ์&lt;/li&gt;
&lt;li&gt;ใช้ &lt;code&gt;len&lt;/code&gt;, &lt;code&gt;cap&lt;/code&gt;, &lt;code&gt;append&lt;/code&gt;, &lt;code&gt;make&lt;/code&gt;, &lt;code&gt;copy&lt;/code&gt;, &lt;code&gt;clear&lt;/code&gt; ได้อย่างปลอดภัย&lt;/li&gt;
&lt;li&gt;เข้าใจว่า slice อาจแชร์ backing array เดียวกันได้อย่างไร&lt;/li&gt;
&lt;li&gt;เข้าใจว่า string เป็น sequence ของ byte และจัดการ Unicode ด้วย rune ได้อย่างไร&lt;/li&gt;
&lt;li&gt;อ่าน map ด้วย comma ok idiom และใช้ map จำลอง set&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="my-8 overflow-x-auto"&gt;
 &lt;pre class="mermaid text-left text-sm leading-normal"&gt;
graph TD
 Q[ข้อมูลที่ต้องการเก็บ] --&gt; A{"รู้จำนวนแน่นอน?"}
 A --&gt;|ใช่| AR[Array]
 A --&gt;|ไม่ใช่| SL[Slice]
 Q --&gt; M{"ค้นหาด้วย key?"}
 M --&gt;|ใช่| MAP[Map]
 Q --&gt; S{"หลาย field ที่สัมพันธ์กัน?"}
 S --&gt;|ใช่| ST[Struct]
 AR --&gt;|เป็น backing store ให้| SL
&lt;/pre&gt;
&lt;/div&gt;

&lt;hr&gt;
&lt;h2 id="วธทำตามบทน"&gt;วิธีทำตามบทนี้&lt;/h2&gt;
&lt;p&gt;เราจะสร้าง project ชื่อ &lt;code&gt;go_composite_types&lt;/code&gt; แยกจาก project ตอนก่อน เพื่อทดลองโค้ดโดยไม่กระทบกัน เปิด terminal แล้วรันคำสั่งนี้:&lt;/p&gt;</description></item><item><title>ตอนที่ 2: Predeclared Types and Declarations</title><link>https://kidpeterpan.github.io/go/02-predeclared-types-and-declarations/</link><pubDate>Fri, 31 Jul 2026 00:00:00 +0700</pubDate><guid>https://kidpeterpan.github.io/go/02-predeclared-types-and-declarations/</guid><description>&lt;hr&gt;
&lt;p&gt;ตอนที่ 2 เราจะเริ่มเขียน Go ที่มีข้อมูลจริงมากขึ้น หลังจากตอนที่แล้วเรามี module และ workflow &lt;code&gt;fmt → vet → build&lt;/code&gt; แล้ว ตอนนี้เราจะเรียนรู้ว่า Go เก็บข้อมูลแต่ละแบบอย่างไร และควรประกาศตัวแปรแบบไหนให้โค้ดสื่อเจตนาได้ชัดเจน&lt;/p&gt;
&lt;p&gt;สิ่งที่จะได้ตอนจบบทนี้:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;เข้าใจ &lt;code&gt;bool&lt;/code&gt;, integer, float, complex, string และ rune ว่าควรใช้แบบไหนกับงานแบบใด&lt;/li&gt;
&lt;li&gt;แปลง type ได้อย่างถูกต้องเมื่อ type ไม่ตรงกัน&lt;/li&gt;
&lt;li&gt;เลือกใช้ &lt;code&gt;var&lt;/code&gt;, &lt;code&gt;:=&lt;/code&gt; และ &lt;code&gt;const&lt;/code&gt; ได้เหมาะสมกับบริบท&lt;/li&gt;
&lt;li&gt;รู้ว่าทำไม Go จึงบังคับให้จัดการ unused variable&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="my-8 overflow-x-auto"&gt;
 &lt;pre class="mermaid text-left text-sm leading-normal"&gt;
graph TD
 A["สร้าง module"] --&gt; B["ทดลอง zero value และ literal"]
 B --&gt; C["เลือก type ให้เหมาะกับข้อมูล"]
 C --&gt; D["convert เมื่อ type ไม่ตรงกัน"]
 D --&gt; E["ประกาศด้วย var หรือ :="]
 E --&gt; F["ใช้ const กับค่า compile time"]
 F --&gt; G["go fmt → go vet → go build"]
&lt;/pre&gt;
&lt;/div&gt;

&lt;hr&gt;
&lt;h2 id="วธทำตามบทน"&gt;วิธีทำตามบทนี้&lt;/h2&gt;
&lt;p&gt;เราจะสร้าง project ชื่อ &lt;code&gt;go_types&lt;/code&gt; แยกจาก project ตอนที่ 1 เพื่อให้ทดลองโค้ดได้โดยไม่กระทบกัน หากมี project นี้อยู่แล้ว ให้ข้ามคำสั่งสร้างโฟลเดอร์ไปได้เลย&lt;/p&gt;</description></item><item><title>ตอนที่ 1: Setting Up Your Go Environment</title><link>https://kidpeterpan.github.io/go/01-setting-up-your-go-environment/</link><pubDate>Thu, 30 Jul 2026 00:00:00 +0700</pubDate><guid>https://kidpeterpan.github.io/go/01-setting-up-your-go-environment/</guid><description>&lt;hr&gt;
&lt;p&gt;ตอนที่ 1 ของซีรีส์ Go เราจะตั้งค่า environment ตั้งแต่ศูนย์ — ติดตั้ง Go, เริ่มเขียนโปรแกรมแรก, เรียนรู้เครื่องมือหลักอย่าง &lt;code&gt;go build&lt;/code&gt;, &lt;code&gt;go fmt&lt;/code&gt;, &lt;code&gt;go vet&lt;/code&gt; และสร้าง &lt;code&gt;Makefile&lt;/code&gt; เพื่อ automate workflow&lt;/p&gt;
&lt;p&gt;สิ่งที่จะได้ตอนจบบทนี้:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;โปรแกรม Hello World ที่ compile เป็น native binary ได้&lt;/li&gt;
&lt;li&gt;เข้าใจ &lt;code&gt;go build&lt;/code&gt;, &lt;code&gt;go fmt&lt;/code&gt; และ &lt;code&gt;go vet&lt;/code&gt; และใช้ให้เป็นนิสัย&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Makefile&lt;/code&gt; ที่รัน workflow &lt;code&gt;fmt → vet → build&lt;/code&gt; ใน command เดียว&lt;/li&gt;
&lt;li&gt;workflow มาตรฐานที่นำไปใช้กับ project อื่น ๆ ได้&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="my-8 overflow-x-auto"&gt;
 &lt;pre class="mermaid text-left text-sm leading-normal"&gt;
graph TD
 A["Source code .go"] --&gt;|go fmt| B["Formatted code"]
 B --&gt;|go vet| C{"Static checks pass?"}
 C --&gt;|yes| D["go build"]
 C --&gt;|no| A
 D --&gt; E["Native binary"]
 E --&gt; F["Deploy / run"]
&lt;/pre&gt;
&lt;/div&gt;

&lt;hr&gt;
&lt;h2 id="step-1-ตดตง-go"&gt;Step 1: ติดตั้ง Go&lt;/h2&gt;
&lt;p&gt;Go toolchain มีตัวติดตั้งสำหรับทุก platform ให้เลือกตามเครื่องที่ใช้&lt;/p&gt;</description></item><item><title>JetBrains Context</title><link>https://kidpeterpan.github.io/article/jetbrains-context/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0700</pubDate><guid>https://kidpeterpan.github.io/article/jetbrains-context/</guid><description>&lt;blockquote&gt;
&lt;p&gt;แปลและสรุปจาก &lt;a href="https://www.jetbrains.com/agentic-software-development/context/"&gt;JetBrains Context: Codebase knowledge for AI agents&lt;/a&gt; โดย JetBrains&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="ปญหาท-jetbrains-context-พยายามแก"&gt;ปัญหาที่ JetBrains Context พยายามแก้&lt;/h2&gt;
&lt;p&gt;Coding agent มักจะ &amp;ldquo;หลงทาง&amp;rdquo; เมื่อเจอโค้ดเบสที่ซับซ้อน — ทุกงานที่ agent ได้รับต้องเริ่มจากขั้นตอนสำรวจ (( &lt;em&gt;exploration overhead - เวลาและ token ที่ agent ใช้ค้นหาไฟล์ ทำความเข้าใจ dependency และศึกษารูปแบบโค้ดที่มีอยู่ ก่อนลงมือแก้ปัญหาจริง&lt;/em&gt; )) ไม่ว่าจะเป็นการหาไฟล์ที่เกี่ยวข้อง ทำความเข้าใจ dependency หรือค้นหารูปแบบการเขียนโค้ดที่ทีมใช้อยู่&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;JetBrains Context&lt;/strong&gt; วางตัวเองเป็น (( &lt;em&gt;&lt;strong&gt;repository intelligence layer&lt;/strong&gt; - เลเยอร์ที่ให้ความรู้เชิงลึกเกี่ยวกับโครงสร้างและเนื้อหาของ repository แก่ระบบอื่น ในที่นี้คือ AI agent&lt;/em&gt; )) ซึ่งทำให้โค้ดเบส &amp;ldquo;พร้อมสำหรับ agent&amp;rdquo; มากขึ้น — ลดขั้นตอนสำรวจ เพิ่มความเร็วในการทำงาน และลดต้นทุนเมื่อต้องทำงานกับ repository ขนาดใหญ่ระดับ production&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="ผลลพธทวดไดจรง"&gt;ผลลัพธ์ที่วัดได้จริง&lt;/h2&gt;
&lt;p&gt;JetBrains ทดสอบเครื่องมือนี้บน SWE-bench 205 งาน, งานใน production monorepo 175 งาน และงาน code localization 1,953 งาน แล้วรายงานผลดังนี้:&lt;/p&gt;</description></item><item><title>Loop Engineering</title><link>https://kidpeterpan.github.io/article/loop-engineering/</link><pubDate>Sat, 27 Jun 2026 00:00:00 +0700</pubDate><guid>https://kidpeterpan.github.io/article/loop-engineering/</guid><description>&lt;blockquote&gt;
&lt;p&gt;แปลจาก &lt;a href="https://addyosmani.com/blog/loop-engineering/"&gt;Loop Engineering&lt;/a&gt; โดย Addy Osmani&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="loop-engineering-คออะไร"&gt;Loop Engineering คืออะไร&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Loop engineering is replacing yourself as the person who prompts the agent. You design the system that does it instead.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;กล่าวคือ Loop Engineering (( &lt;em&gt;การออกแบบลูปงาน&lt;/em&gt; )) คือกระบวนทัศน์ใหม่ที่เปลี่ยนมุมมองต่อการทำงานร่วมกับ AI Agent — แทนที่จะนั่ง Prompt Agent ทีละขั้นแบบ Manual เราออกแบบ &lt;strong&gt;ระบบ&lt;/strong&gt; ที่จัดการ Agent เหล่านั้นแทนตัวเราเอง&lt;/p&gt;
&lt;p&gt;ผู้นำในวงการอย่าง Peter Steinberger และ Boris Cherny ต่างชี้ไปในทิศทางเดียวกันว่า วิศวกรที่แข็งแกร่งในยุคนี้ไม่ใช่คนที่ Prompt เก่งที่สุด แต่คือคนที่ &lt;strong&gt;ออกแบบ Loop ได้ดีที่สุด&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="5-องคประกอบหลกของ-loop"&gt;5 องค์ประกอบหลักของ Loop&lt;/h2&gt;
&lt;h3 id="1-automations--ระบบอตโนมตสำหรบคนหางาน"&gt;1. Automations — ระบบอัตโนมัติสำหรับค้นหางาน&lt;/h3&gt;
&lt;p&gt;กระบวนการที่ทำงานตามตารางเวลาโดยไม่ต้องมีคนกดเริ่ม โดยมีเป้าหมายเพื่อ:&lt;/p&gt;</description></item><item><title>Leading Effective Engineering Teams</title><link>https://kidpeterpan.github.io/book/leading_effective_engineering_teams/</link><pubDate>Sat, 13 Jun 2026 12:00:00 +0700</pubDate><guid>https://kidpeterpan.github.io/book/leading_effective_engineering_teams/</guid><description>&lt;h2 id="what-makes-a-software-engineering-team-effective"&gt;What Makes a Software Engineering Team Effective?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1. ทีมที่เวิร์กคืออะไร?&lt;/strong&gt;
ทีมที่ประสบความสำเร็จไม่ใช่แค่กลุ่มคนที่ทำงานประสานกันเท่านั้น แต่คือกลุ่มคนที่ผูกพันกันด้วยความรับผิดชอบและเป้าหมายร่วมกัน
(( &lt;em&gt;&lt;strong&gt;Effective team&lt;/strong&gt; - ทีมที่สามารถผลิตฟีเจอร์หรือผลิตภัณฑ์ที่มีประโยชน์ออกมาใช้งานได้จริงอย่างสม่ำเสมอ ตั้งแต่การเขียนโค้ด ทดสอบ ไปจนถึงปล่อยให้ผู้ใช้งานจริง&lt;/em&gt; ))&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. กุญแจสำคัญ 5 ประการจากงานวิจัย Project Aristotle&lt;/strong&gt;
Google ค้นพบว่า &amp;ldquo;วิธีที่คนในทีมปฏิสัมพันธ์และทำตัวต่อกัน&amp;rdquo; นั้นสำคัญกว่า &amp;ldquo;ทักษะของคนในทีม&amp;rdquo; เสียอีก โดยมีปัจจัยสำคัญ 5 ข้อเรียงตามลำดับดังนี้:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;รู้สึกปลอดภัยทางจิตวิทยา (( &lt;em&gt;&lt;strong&gt;Psychological safety&lt;/strong&gt; - การที่คนในทีมกล้าแสดงความคิดเห็น หรือเสนอไอเดียโดยไม่กลัวว่าจะถูกตำหนิหรือถูกตัดสิน&lt;/em&gt; )) ซึ่งถือเป็นรากฐานที่สำคัญที่สุด&lt;/li&gt;
&lt;li&gt;พึ่งพากันได้ (( &lt;em&gt;&lt;strong&gt;Dependability&lt;/strong&gt; - สมาชิกในทีมสามารถพึ่งพากันและกันในการทำงานให้เสร็จตรงตามเวลาและได้คุณภาพ&lt;/em&gt; ))&lt;/li&gt;
&lt;li&gt;โครงสร้างและความชัดเจน (( &lt;em&gt;&lt;strong&gt;Structure and clarity&lt;/strong&gt; - ทุกคนเข้าใจเป้าหมายของโปรเจกต์และหน้าที่รับผิดชอบของตัวเองอย่างชัดเจน&lt;/em&gt; ))&lt;/li&gt;
&lt;li&gt;ความหมายของงาน (( &lt;em&gt;&lt;strong&gt;Meaning&lt;/strong&gt; - การรู้สึกว่างานที่กำลังทำอยู่มีความหมายและมีจุดประสงค์&lt;/em&gt; ))&lt;/li&gt;
&lt;li&gt;ผลกระทบของงาน (( &lt;em&gt;&lt;strong&gt;Impact&lt;/strong&gt; - ความเชื่อมั่นว่างานที่ทำสามารถสร้างความเปลี่ยนแปลงที่ดีให้กับองค์กรหรือสังคมได้&lt;/em&gt; ))&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;3. พลังของแรงจูงใจ (Motivation)&lt;/strong&gt;
งานที่ต้องใช้ความคิดสร้างสรรค์อย่างงานซอฟต์แวร์นั้น แรงจูงใจภายใน (( &lt;em&gt;&lt;strong&gt;Intrinsic reward&lt;/strong&gt; - ความรู้สึกเติมเต็มทางใจ เช่น ความภูมิใจในผลงาน หรือการได้เรียนรู้ทักษะใหม่ ๆ ซึ่งส่งผลดีระยะยาวมากกว่ารางวัลภายนอกอย่างโบนัส&lt;/em&gt; )) เป็นแรงขับเคลื่อนสำคัญที่สุด ประกอบด้วย 3 อย่าง ได้แก่:&lt;/p&gt;</description></item><item><title>Hidden Potential</title><link>https://kidpeterpan.github.io/book/hidden_potential/</link><pubDate>Sun, 07 Jun 2026 12:00:00 +0700</pubDate><guid>https://kidpeterpan.github.io/book/hidden_potential/</guid><description>&lt;h2 id="creatures-of-discomfort"&gt;Creatures of Discomfort&lt;/h2&gt;
&lt;p&gt;วิธีที่ช่วยให้เราเรียนรู้ได้เร็วที่สุดไม่ใช่การรอจนกว่าตัวเองจะพร้อม หรือเลือกทำเฉพาะเรื่องที่เราถนัด แต่คือการเรียนรู้ที่จะ &amp;ldquo;อยู่ร่วมกับความรู้สึกอึดอัดและเป็นมิตรกับมัน&amp;rdquo; (( &lt;em&gt;discomfort - ความรู้สึกไม่สบายใจหรือความยากลำบากเมื่อต้องทำสิ่งใหม่ ๆ ที่ไม่คุ้นเคย&lt;/em&gt; ))
เราจำเป็นต้องฝึกความกล้า 3 รูปแบบ ได้แก่:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;กล้าที่จะปล่อยมือจากวิธีเดิม ๆ ที่คุ้นชิน เพื่อเปิดโอกาสให้ตัวเองได้ลองหาวิธีใหม่ที่ดีกว่า&lt;/li&gt;
&lt;li&gt;กล้าที่จะเริ่มต้นลงมือทำทั้งที่ยังไม่พร้อม เพราะการรอให้พร้อมมักจะทำให้ไม่ได้เริ่มเสียที&lt;/li&gt;
&lt;li&gt;กล้าที่จะยอมรับและทำผิดพลาดให้มากขึ้น เพราะความผิดพลาดเป็นสะพานเชื่อมไปสู่การเรียนรู้ที่แท้จริง&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://kidpeterpan.github.io/images/hidden_potential/how-we-think-learning-happens.webp" alt="How learning actually happens"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="human-sponges"&gt;Human Sponges&lt;/h2&gt;
&lt;p&gt;การทำตัวให้เหมือนฟองน้ำ (( &lt;em&gt;Being a sponge - การมีนิสัยรักการเรียนรู้และเปิดรับสิ่งใหม่ ๆ เสมือนฟองน้ำที่คอยซึมซับน้ำ&lt;/em&gt; )) เปรียบได้กับฟองน้ำทะเลที่มีความสามารถหลัก 3 ประการ คือ:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ดูดซับ&lt;/li&gt;
&lt;li&gt;กรองออก&lt;/li&gt;
&lt;li&gt;ประยุกต์&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;การทำเช่นนี้คือการเลือกสรรอย่างเหมาะสม ไม่ใช่การดูดซับทุกสิ่งเข้ามาโดยไม่คิดวิเคราะห์ (( &lt;em&gt;Passive - การรับข้อมูลเข้ามาฝ่ายเดียวโดยไม่ได้วิเคราะห์หรือตอบสนองกลับ&lt;/em&gt; ))&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;หัวใจสำคัญคือการพยายามทำงานอย่างชาญฉลาด (( &lt;em&gt;work smart - การทำงานที่เน้นประสิทธิภาพและการวางแผนเพื่อผลลัพธ์ที่ดีที่สุด&lt;/em&gt; )) แทนที่จะเป็นแค่การทำงานหนักด้วยแรงหรือเวลาเพียงอย่างเดียว (( &lt;em&gt;work hard - การโหมทำงานหนักโดยไม่ได้ไตร่ตรองถึงวิธีที่ดีกว่า&lt;/em&gt; ))&lt;/p&gt;</description></item></channel></rss>