Categories
การพัฒนาซอฟท์แวร์

รูปแบบ Commit Message ของ Git ที่น่าสนใจ

ที่มา: dev.to

เพื่อให้การทำงานเป็นทีมมีประสิทธิภาพมากขึ้น เราควรใส่ใจกับ Commit Message ของ Git

เพราะ Commit Message ช่วยในการสื่อสารกับเพื่อนร่วมทีม หรือแม้แต่เป็นการสื่อสารกับตัวเราเองในอนาคต เพื่อให้รู้ว่ามีการเปลี่ยนแปลงอะไรบ้าง จะเกิดผลกระทบอะไรบ้าง

บล็อกนี้นำเสนอรูปแบบหนึ่งสำหรับ Commit Messageของ Git ที่น่าสนใจ

รูปแบบของ Commit Message

!type(?scope): !subject

❗คือ บังคับว่าต้องมี
❓คือ มีหรือไม่มี ก็ได้


Type

  • ❗ต้องมีเสมอ
จากรูปแบบ Commit Message :
!type(?scope): !subject

Type บอกว่าการเปลี่ยนแปลงนี้ทำเกี่ยวกับอะไร โดยมี Types ให้เลือก ดังนี้

  • test
    • สร้างหรือเปลี่ยนแปลง Test Code
  • feat
    • เพิ่ม Feature ใหม่ สำหรับ Project
  • refactor
    • ทำ Code Refactoring โดยไม่กระทบกับ Logic หรือ Rules
  • style
    • เมื่อมีการเปลี่ยน Code Style หรือมีการ Formatting Code
  • fix
    • แก้ Error หรือ Bugs ในระบบ
  • docs
    • เปลี่ยนแปลง Document ของ Project
  • chore
    • มีการเปลี่ยนแปลงที่ไม่เกี่ยวกับ Code หรือ Test
    • เป็นการเปลี่ยนแปลงด้าน Development Dependency หรือ Tools เช่น
      • eslint
      • prettier
      • .gitignore
  • build
    • มีการเปลี่ยนแปลงที่ส่งผลต่อ Build Process หรือ External Dependency
    • เปลี่ยนแปลง Dependency ของ Project
  • perf
    • การเปลี่ยนแปลงที่เกี่ยวข้องกับการเพิ่ม Performance ของระบบ
  • ci
    • เปลี่ยนแปลง CI/CD Configuration File เช่น
      • Circle
      • Travis
      • Jenkins
  • revert
    • มีการย้อยกลับไปที่ Commit ก่อนหน้านี้
📝 Notes (เกี่ยวกับ Type)
  • ใน Commit message ต้องมี Type เสมอ
  • ต้องมีแค่ 1 Type ต่อ 1 Commit
  • ถ้าไม่รู้จะใช้ Type ใด เป็นไปได้ว่า Commit ใหญ่เกินไป
    • ควรแยก Commit ให้เล็กพอที่จะเลือก Type ได้
    • และแต่ละ Commit ต้องเป็นการเปลี่ยนแปลงเพียงเรื่องเดียว

Subject

  • ❗ต้องมีเสมอ
จากรูปแบบ Commit Message :
!type(?scope): !subject

Subject ต้องใช้ประโยคเชิงคำสั่งที่ขึ้นต้นด้วย Verb.1 (โดยไม่มี to) แทนที่จะเป็น Past Tense

เพื่อบอกทีมว่า commit นี้จะทำอะไร ถ้าเรา apply มัน:

If applied, this commit will do something according to this message

เปรียบเทียบ 2 commit message นี้ดู

ตัวอย่าง: การใช้ Subject ใน Commit Message ของ Git
ตัวอย่าง: การใช้ Subject ใน Commit Message ของ Git

จะเห็นว่า

If applied, this commit will change the markup ✅, ดู make sense กว่า

“If applied, this commit will changed the markup” 🟥

นอกจากนี้การเขียน Subject ควรเขียนสั้น ๆ กระชับ โดยทั่วไปไม่ควรเกิน 50 ตัวอักษร ถ้าต้องการเขียนยาวกว่านี้ให้ไปเขียนใน Body ของการ Commit


Scope

  • ❓ มีหรือไม่มี ก็ได้
  • บอก Context หรือบริบทของ Commit นี้

จากรูปแบบ Commit Message :

!type(?scope): !subject

จากรูปแบบที่เขียนมาก่อนหน้านี้ เราจัดการ Commit Message ให้ชัดเจนด้วยการใช้

  • Type บอกประเภทของการเปลี่ยนใน Commit นี้
  • Subject บอกอย่างชัดเจนว่าจะเกิดอะไรขึ้น เมื่อ Apply Commit นี้

แม้ว่า Scope ไม่จำเป็นต้องมีก็ได้ แต่มันช่วยบอก Context ของ Commit นี้เพิ่มเติมได้

และยังช่วยลดภาระของ Subject ลงได้ ทำให้ Subject สั้นและกระชับกว่าเดิม

หมายเหตุ :

  1. Scope ต้องใส่ใน “วงเล็บ” เช่น (Scope) เสมอ
  2. Scope จะถูกแบ่งแยกด้วย “/” (Slash) ได้ เช่น
    • (module/AuthService)
    • (package/PackageName)

ตัวอย่าง

ตัวอย่าง: การใช้ Scope ใน Commit Message ของ Git
ตัวอย่าง: การใช้ Scope ใน Commit Message ของ Git

แนวปฏิบัติเพิ่มเติมเพื่อการ Commit ที่ดี

  • Commit บ่อย ๆ และ เล็ก ๆ
    • ช่วยให้การ review code ง่ายขึ้น
    • ช่วยให้ย้อนกลับไปยังจุดที่ต้องการได้ง่าย
    • ช่วยให้การ merge ง่ายขึ้น เพราะเมื่อเกิด merge conflict จะมี code ไม่มากที่ต้องพิจารณา
    • การเปลี่ยนแปลง code ทีละน้อย ทำให้คุณภาพโค้ดดีขึ้น พัฒนาขึ้นอย่างต่อเนื่อง
  • การเขียน Body ใน Commit
    • เว้น 1 บรรทัดจากหัวข้อ
    • ควรเขียนให้สั้น และกระชับเช่นกัน
    • ควร Wrap ความยาวต่อ 1 บรรทัด ไม่เกิน 72 ตัวอักษร
    • ควรเขียนอธิบายว่าทำอะไร และทำไม (What + Why)
    • ขึ้นต้นประโยคด้วยตัวพิมพ์ใหญ่ และปิดท้ายประโยคด้วยจุด
  • Commit Message เป็นเพียงเครื่องมือหนึ่งในการสื่อสาร ทีมพัฒนาซอฟต์แวร์ยังจำเป็นต้องคุยกัน สื่อสารกันบ่อย ๆ
Categories
หนังสือ

รีวิวหนังสืออวสานอัลไซเมอร์ (THE END OF ALZHEIMER’S)

เป็นหนังสือที่มีประโยชน์และน่าอ่านมาก ๆ อ่านเพลิน อ่านสนุก (สำหรับคนที่ชอบอ่านหนังสือที่เป็นข้อมูลทางวิทยาศาสตร์)
ให้คะแนน 10/10

มีประโยคหลักประโยคหนึ่งที่ผู้เขียนพูดซ้ำหลายครั้งว่า
“ทุกคนรู้จักผู้รอดชีวิตจากมะเร็ง แต่ไม่มีใครรู้จักผู้รอดชีวิตจากอัลไซเมอร์”

“บ่อยแค่ไหนที่เราได้ยินว่าโรคอัลไซเมอร์นั้นป้องกันและรักษาไม่ได้”
หนังสือเล่มนี้บอกว่าเป็นเพราะอัลไซเมอร์เป็นโรคที่ซับซ้อน
ไม่ได้เกิดจากปัจจัยเดียว แต่มีถึง 36 ปัจจัยที่ทำให้เกิดโรคนี้

ผู้เขียนได้อธิบายแต่ละปัจจัยด้วยข้อมูลทางวิทยาศาสตร์
ซึ่งมาจากการทุ่มเทศึกษาและวิจัยถึง 30 ปี

การที่จะรักษาโรคอัลไซเมอร์ได้นั้นต้องแก้ไขทั้ง 36 ปัจจัยพร้อมกัน
ด้วยกระบวนการที่เรียกว่า ReCODE

กระบวนการ ReCODE ไม่ใช่วิธีสำเร็จรูปซะทีเดียว
เราต้องตรวจหาค่าหลายอย่างของร่างกาย
และแก้ไขค่าต่าง ๆ ให้กลับมาเป็นค่าที่เหมาะสม
ซึ่งแต่ละคนจะมีค่าที่ต้องให้ความสำคัญไม่เหมือนกัน

กระบวนการ ReCODE มีรายละเอียดเยอะมาก ๆ
ซึ่งวิธีการส่วนใหญ่นั้นเราต้องปรับพฤติกรรมและการใช้ชีวิต เช่น
– โภชนาการ อาหารที่ควรทาน ไม่ควรทาน รวมถึงอาหารเสริม
– แก้ไขการอักเสบในร่างกาย
– ออกกำลังกาย
– การนอน
– ความเครียด
– การฝึกสมอง
– รักษาลำไส้
– ปรับสมดุลฮอร์โมน
– กำจัดสารพิษและเชื้อโรค
– การใช้ยา

ถึงแม้หลายประเด็นอาจยังเป็นที่สงสัยจากวงการแพทย์และวิทยาศาสตร์
แต่เมื่อไม่มีอะไรจะเสียแล้ว ข้อมูลในหนังสือเล่มนี้ก็อาจเป็นความหวังสุดท้ายให้กับใครหลายคน
ซึ่งผู้เขียนหวังว่า “ไม่มีใครควรตายจากโรคอัลไซเมอร์” อีก
และเมื่ออ่านจบเราก็คิดว่าผู้เขียนทุ่มเทเพื่อสิ่งนี้จริง ๆ

Categories
หนังสือ

หนังสือ Building a Second Brain

โดยส่วนตัวแล้วผมคิดว่าหนังสือเล่มนี้น่าจะเป็นหนึ่งในหนังสือที่ดีที่สุด เปลี่ยนชีวิตของผมที่สุด และอยากแนะนำมากที่สุดอีกเล่มหนึ่ง

ก่อนหน้านี้ผมรู้สึกว่าทุกอย่างในชีวิตมันมากเกินไป เข้ามาเร็วเกินไป เปลี่ยนแปลงเร็วเกินไป จนจัดการไม่ทัน เรียนรู้ไม่ทัน จำได้ไม่หมด ทำให้รู้สึกเครียดอยู่บ่อย ๆ

แม้ว่าหนังสือ Building a Second Brain เล่มนี้จะไม่หนามาก แต่ผมใช้เวลาอ่านนานมากถึง 2 เดือนเต็ม เพราะระหว่างที่อ่าน ผมค่อย ๆ ลองนำไอเดียที่ได้จากหนังสือมาทดลองใช้ อ่านแต่ละบทซ้ำ ๆ เพื่อปรับระบบที่สร้างขึ้นซ้ำแล้วซ้ำอีก จนได้ระบบที่เริ่มเหมาะสมกับตัวเอง

ผมใช้ระบบนี้กับการทำงาน การเรียนรู้สิ่งใหม่ ๆ งานอดิเรก และชีวิตส่วนตัว
ตอนนี้ผมรู้สึกว่าหลาย ๆ อย่างเริ่มอยู่ในระดับที่สามารถควบคุมได้ เครียดน้อยลง และสามารถไว้ใจในระบบที่ตัวเองสร้างขึ้นได้

ไอเดียที่หนังสือบอกเล่าไม่ใช่ระบบที่สำเร็จรูป ไม่ตายตัว ไม่ได้บอกว่าต้องใช้เครื่องมือตัวไหนเพราะจะไม่มีเครื่องมือที่ใช้ได้กับทุกคน มันปรับเปลี่ยนได้ แต่ละคนสามารถเลือกสิ่งที่คิดว่ามีประโยชน์มาใช้ และเราก็ทิ้งส่วนที่คิดว่าไม่ใช่ไปได้เช่นกัน ทุกคนจะสร้างระบบของตนเองที่ไม่เหมือนกัน

แม้วันนี้เรามีระบบเป็นของตัวเองแล้ว เราก็ต้องปรับเปลี่ยนระบบของเราอยู่เสมอตามแต่ละช่วงเวลาและความต้องการในชีวิต

หนังสือเล่มนี้นำเสนอหลากหลายแนวคิด อธิบายเข้าใจง่าย แนวคิดหลักจะถูกอธิบายซ้ำจนเราจำขึ้นใจและนำไปใช้ได้ ซึ่งแนวคิดที่เป็นแกนหลักที่สุดคือ CODE ซึ่งมาจาก

  • Capture : เก็บข้อมูลที่เรารู้สึกว่ามันสำคัญกับเราจริง ๆ จากหลายแหล่ง ให้มารวมกันในที่เดียว
  • Organize : จัดการกับข้อมูลต่าง ๆ เหล่านั้นตามการใช้งาน โดยใช้หลักการของ PARA : Project, Area, Resource และ Archives
  • Distill : สกัดสาระลำคัญด้วย Progressive Summarization
  • Express : แชร์ความรู้ของเรา โดยที่เราจะมี Note และระบบที่เราสร้างขึ้นมาช่วยสนับสนุน

ในตอนนี้ผมเองมีระบบในการ Capture และ Organize ที่ช่วยผมได้มากและผมพอใจในระดับหนึ่งแล้ว แต่ยังต้องทบทวนและฝึกฝน Distill และ Express ต่อไป

นอกจาก CODE ที่เป็นแนวคิดหลักของหนังสือแล้ว PARA ซึ่งเป็นแนวคิดในการ Organize ข้อมูลต่าง ๆ ก็สำคัญไม่แพ้กัน และอาจเป็นเรื่องที่ผู้อ่านส่วนใหญ่สนใจที่สุดด้วย ซึ่ง PARA ประกอบด้วย

  • Project : เก็บสิ่งที่เรากำลังทำ กำลังสนใจที่สุดอยู่ในขณะนี้ ซึ่งมักจะเป็นสิ่งที่มีขอบเขตเวลาจำกัด และในเวลาหนึ่ง ๆ จะมีเพียงไม่กี่อย่าง
    ซึ่งเท่าที่ผมอ่านความเห็นของผู้อ่านท่านอื่น ๆ ที่ได้อ่านหนังสือ Building a Second Brain เล่มนี้ มีหลายคนที่ไม่ชอบแนวคิด PARA เพราะคิดว่าตนเองไม่มี Project ที่กำลังทำอยู่ แต่ถ้าทำความเข้าใจดี ๆ จะพบว่า Project สามารถเป็นได้มากกว่าโครงการที่เกี่ยวกับงานหรือการเรียน เช่น
    • รายการซื้อของประจำสัปดาห์
    • วางแผนจัดงานวันเกิดให้ลูก
    • วางแผนสำหรับการหางานใหม่
    • วางแผนการท่องเที่ยวญี่ปุ่น
  • Area : มีความคล้ายกับ Project แต่มีขอบเขตเวลายาวกว่า หรืออาจจะยังไม่มีขอบเขตเวลาที่สิ้นสุด ณ ตอนนี้ เช่น
    • วางแผนการออกกำลังกายและติดตามผล
    • วางแผนการเงินของครอบครัว
    • วางแผนสำหรับการเกษียณ
  • Resource : คือข้อมูลอ้างอิงที่เราสามารถนำมาใช้ใน Project อื่น ๆ ในอนาคต
  • Archives : คือ Project หรือ Area ที่ไม่ต้องทำหรือไม่สนใจในตอนนี้แล้ว แต่เราไม่อยากลบทิ้งไปเพราะอาจนำกลับมาทำใหม่อีกครั้ง หรืออาจนำข้อมูลมาใช้กับโปรเจคใหม่ ๆ ในอนาคต เช่น
    • โควิด-19 กลับมาระบาดอีกครั้ง ทำให้เราต้องพักแผนการไปเที่ยวญี่ปุ่นไว้ก่อน เราก็สามารถย้ายโปรเจค “วางแผนการท่องเที่ยวญี่ปุ่น” มาที่ Archives ได้ และหากสามารถไปท่องเที่ยวได้อีกครั้ง เราก็สามารถย้ายโปรเจค “วางแผนการท่องเที่ยวญี่ปุ่น” กลับไปที่ Project ได้เช่นกัน
    • บริษัทได้ลูกค้ารายใหญ่ซึ่งมาพร้อมกับโปรเจคใหม่ ทำให้ทั้งทีมต้องพักโปรเจคที่กำลังทำอยู่แล้วมาช่วยกันทำโปรเจคใหม่ เราก็สามารถย้ายโปรเจคที่ถูกพักไว้มาที่ Archives ได้เช่นกัน

ใครที่อยากสร้างระบบที่ช่วยจัดการชีวิตและข้อมูลในโลกดิจิตอลของตนเอง ในขณะที่ทุกอย่างถาโถมเข้ามาจากทุกทิศทุกทาง ผมแนะนำหนังสือ Building a Second Brain เล่มนี้ครับ

Categories
หนังสือ

หนังสือ วะบิ ซะบิ

เป็นหนังสือที่จะอ่านง่าย ๆ สบาย ๆ อ่านไปเรื่อย ๆ ก็ได้

หรือจะอ่านช้า ๆ พยายามคิดตาม ทำความเข้าใจ ก็จะกลายเป็นหนังสือที่อ่านยากขึ้นมา
เพราะหลายอย่างมันขัดแย้งกับความคิด ความเชื่อ ค่านิยมของคนทั่วไป

โดยความเข้าใจหลังจากอ่านจบ
วะบิ ซะบิ มีหลัก 3 เรื่อง
1. ไม่มีสิ่งใดสมบูรณ์แบบ
2. ไม่มีสิ่งใดเสร็จสมบูรณ์
3. ไม่มีสิ่งใดคงอยู่ตลอดไป

โดยส่วนตัว อ่านแล้วรู้สึกดี รู้สึกสบายใจ ปล่อยวาง
รู้สึกว่าแนวคิดของ วะบิ ซะบิ เป็นแนวคิดที่ ชีวิตเบาสบาย

Categories
การพัฒนาซอฟท์แวร์

การเลือกใช้ Integer ใน Golang

การเลือกใช้ Integer ใน Golang

Golang เป็นภาษาที่มีประเภทของ Integer มากกว่าภาษาอื่นบางภาษา จากตัวเลือกที่ค่อนข้างเยอะ บางครั้งเราอาจสงสัยว่าเมื่อใดที่เราควรใช้ Integer ประเภทใด บทความนี้แนะนำการเลือกใช้ Integer ใน Golang ครับ

ก่อนที่เราจะไปดูหลักเกณฑ์ในการเลือกใช้ เรามาดูกันก่อนว่า Golang มี Integer กี่แบบ

ประเภทขนาด ช่วงของข้อมูลที่เก็บได้
int88 bits-128 ถึง 127
int1616 bits-32768 ถึง 32767
int3232 bits–2147483648 ถึง 2147483647
int6464 bits–9223372036854775808 ถึง 9223372036854775807
uint88 bits0 ถึง 255
uint1616 bits0 ถึง 65536
uint3232 bits0 ถึง 4294967295
uint6464 bits0 ถึง 18446744073709551615
ตาราง แสดงประเภทและช่วงข้อมูลที่เก็บได้สำหรับ Integer แต่ละชนิดใน Golang

นอกจากนี้ Golang ยังมี int และ uint ซึ่งขนาดของมันสามารถเป็นได้ทั้ง 32 bits หรือ 64 bits ขึ้นกับ platform เช่น ถ้าบนเครื่อง 32-bits compiler ก็จะใช้ค่า int และ uint เป็น 32 bits

ในทางตรงข้าม ถ้าบนเครื่อง 64-bits ส่วนใหญ่แล้ว compiler ก็จะใช้ค่า int และ uint เป็น 64 bits (แต่จาก FAQ ของ Golang เค้าบอกว่าไม่ได้เป็นอย่างนี้เสมอไป แต่ก็ไม่ได้ให้ข้อมูลอะไรเพิ่มเติม และผมเองก็หาข้อมูลเพิ่มเติมไม่ได้ด้วยครับ)

FAQ : size ของ int ใน golang

Zero value

ถึงแม้ Golang จะมีประเภทของ Integer หลายประเภท แต่ค่า zero value ของ Integer ทุกประเภท คือ 0

เลือกประเภทของ Integer

เมื่อเรารู้จัก Integer แต่ละประเภทใน Golang แล้ว การเลือกว่าจะใช้ Integer ประเภทใด มีหลักที่เรียบง่ายอยู่ 3 ข้อ คือ

1. ถ้ารู้ขนาดและเครื่องหมาย

ถ้าเราทำงานกับ Binary file หรือ Network protocol หรือข้อมูลที่เรารู้ขอบเขตของขนาดข้อมูลและเครื่องหมายว่าเป็นจำนวนเต็มบวกหรือลบอย่างแน่นอนล่วงหน้าแล้ว ให้เราเลือกใช้ Integer เจาะจงประเภทใดประเภทหนึ่งจากตารางข้างบนไปเลย

2. ถ้าต้องรองรับ Integer ประเภทใดก็ได้

ถ้าเราต้องเขียน Function ที่ควรทำงานกับจำนวนเต็มประเภทใดก็ได้ ให้เขียน function มาคู่หนึ่ง โดยที่ function หนึ่งมี parameter เป็น int64 และอีก function หนึ่งมี parameter เป็น uint64

💡 เราสามารถเห็น pattern นี้ได้ใน Go standard library เช่น ฟังก์ชัน FormatInt / FormatUint หรือ ParseInt / ParseUint ใน strconv package

เหตุผลที่ int64 และ uint64 เหมาะสมในสถานการณ์นี้ เพราะในตอนนี้ Golang ยังไม่มี Generics (เฉพาะตอนนี้) และ Golang ไม่มี Function Overloading อีกด้วย จากเหตุผลเหล่านี้ ส่งผลให้เราต้องเขียนหลาย Function และต้องตั้งชื่อให้ต่างกัน

การใช้ int64 และ uint64 ช่วยให้เราเขียน Function แค่ครั้งเดียว แล้วให้ผู้ที่เรียกใช้แปลงค่า Arguments ที่จะส่งให้ Function และแปลงค่าที่รับคืนจาก Function ได้เองไม่ยากนัก

💡 แต่ถ้าขนาดของ Integer มีความสำคัญ เราควรเขียน Function แยกให้กับ Integer แต่ละประเภท เหมือนกับ math/bits package

3. กรณีอื่น ๆ

กรณีอื่น ๆ นอกจากข้อ (1) และ (2) ให้ใช้ int

จนกว่าเราจะมีข้อพิสูจน์ที่ชัดเจนถึงเรื่องขนาดและเครื่องหมายของจำนวนเต็ม เราจึงค่อยเปลี่ยนไปใช้ Integer ประเภทอื่นเพื่อเพิ่มประสิทธิภาพครับ

อ้างอิง

Categories
การพัฒนาซอฟท์แวร์

รีวิวหนังสือ Head First Go

หนังสือ Head First Go
หนังสือ Head First Go

หนังสือ Head First Go เล่มนี้ เป็นหนังสือ Golang ที่ผมคิดว่าอ่านง่าย อ่านสนุกมาก

สำหรับมือใหม่ที่เพิ่งหัดเขียน Golang หนังสือเล่มนี้เหมาะมากที่จะอ่านเป็นเล่มแรก ๆ เพราะมีรูปภาพประกอบการอธิบาย ให้เข้าใจได้ง่าย มีรูปอธิบายโค้ดแต่ละบรรทัด และโค้ดตัวอย่างก็ไม่ยาวจนเกินไป ผมคิดว่ารูปประกอบในหนังสือเล่มนี้ช่วยให้จำ syntax และเข้าใจหัวข้อต่าง ๆ ได้ง่ายขึ้นมาก

ตัวอย่างการอธิบายโค้ด Golang ในหนังสือ Head First Go
ตัวอย่างรูปประกอบการอธิบายเนื้อหา
ตัวอย่างการอธิบายโค้ด Golang ในหนังสือ Head First Go
ตัวอย่างรูปประกอบการอธิบายเนื้อหา
ตัวอย่างการอธิบายโค้ด Golang ในหนังสือ Head First Go
ตัวอย่างรูปประกอบการอธิบายเนื้อหา

ในฐานะคนที่เขียน Golang มานานแล้ว ผมก็ชอบหนังสือเล่มนี้นะครับ ผมชอบวิธีอธิบาย ชอบรูปประกอบ เพราะช่วยให้เราจำสิ่งที่เรารู้อยู่แล้วได้ง่ายขึ้น และยังช่วยให้เราได้เทคนิคใหม่ ๆ เพื่อนำไปใช้อธิบายคนอื่นต่อได้ด้วย

อีกส่วนที่ผมชอบมาก คือ หัวข้อ “there are no Dumb Questions” ที่มีแทรกอยู่เรื่อย ๆ ซึ่งจะตอบคำถามสำหรับมือใหม่ที่เพิ่งจะมาเรียนรู้ Golang แล้วสงสัยว่า

  • ทำไม Golang ไม่มีสิ่งนี้ ?
  • ในภาษาอื่นทำแบบนี้ แต่ทำไม Golang ทำอีกแบบนึง ?
ผมชอบเนื้อหาส่วน "there are no Dumb Questions" ในหนังสือ Head First Go เล่มนี้มาก
ผมชอบเนื้อหาส่วน “there are no Dumb Questions”

ผมว่าเนื้อหาส่วนนี้ช่วยให้คนที่เคยเขียนภาษาอื่นมาก่อน เข้าใจธรรมชาติของ Golang มากขึ้น

และช่วยให้คนที่เขียน Golang มาซักพักแล้ว เข้าใจมากขึ้นว่า ผู้ที่พัฒนา Golang ขึ้นมา มีเจตนาอะไรที่เลือกทำอย่างนั้น

ในส่วนของเนื้อหา หนังสือเล่มนี้ก็ครอบคลุมส่วนหลัก ๆ ของ Golang ได้ครบถ้วนเพียงพอสำหรับมือใหม่ที่จะเริ่มเขียน Golang แล้ว

แต่สำหรับมือเก๋าอาจไม่ได้ความรู้อะไรเพิ่มเติมมากนัก บางประเด็นก็ไม่ได้ลงลึกนัก เช่น เรื่อง Channel ที่เนื้อหาหลักไม่พูดถึงเรื่อง buffer เลย แต่ก็ไปเก็บตกให้เล็กน้อยในส่วนของเนื้อหาท้ายเล่ม

ผมอ่านหนังสือเล่มนี้ใน oreilly.com ผมคิดว่าการจัด format ดีมาก ไม่ต่างจากหนังสือที่เป็นเล่มเลย ส่วนถ้าเป็น kindle ก็ไม่ได้แย่มาก แต่สู้อ่านใน oreilly.com ไม่ได้ (ลองไปกดดาวน์โหลด kindle version มาลองอ่านดูก่อนก็ได้ครับ)

หนังสือเล่มนี้หนา 560 หน้า ผมใช้เวลาอ่านวันละ 2-3 ชั่วโมง + coding ตามเนื้อหาแทบทุกส่วน และยังทดลองเพิ่มเติมเองเพื่อให้เข้าใจมากขึ้น เรียกว่าอ่านละเอียดมาก อ่านเหมือนคนไม่เคยเขียน Golang มาก่อน ผมใช้เวลาอ่าน 10 วันก็จบครับ

……

มือใหม่ที่ต้องการศึกษา Golang ผมแนะนำหนังสือเล่มนี้เลยครับ

Categories
การพัฒนาซอฟท์แวร์

Hosting ฟรี สำหรับ Static Website

รวม Hosting ฟรี (หรือราคาถูก) สำหรับวาง Static Website ที่น่าใช้งาน

Netlify

Github Pages

Gitlab Pages

Render

Vercel

Firebase Hosting

Cloudflare Pages

Surge

Amazon S3

Statically

VULTR

DigitalOcean App Platform

000webhost

Freehostia

AwardSpace

Categories
หนังสือ

รีวิวหนังสือ The Power of INPUT

หนังสือ The Power of Input เล่มนี้ เป็นหนังสือที่ต่อเนื่องจากหนังสือ The Power of Output ของผู้เขียนท่านเดียวกัน
ถึงแม้จะเป็นหนังสือเกี่ยวกับ Input แต่ตลอดทั้งเล่มผู้เขียนได้พูดถึง Output อยู่ตลอดเวลา เมื่ออ่านจบเราจะยิ่งเข้าใจเรื่องของการ Output มากขึ้น

หนังสือเล่มนี้นำเสนอเทคนิคดี ๆ เกี่ยวกับ Input เช่น การอ่าน การฟัง การเรียน การพูดคุย การจัดการการใช้งานคอมพิวเตอร์และ Internet และอีกหลาย ๆ เรื่อง

โดยส่วนตัวผมคิดว่าหนังสือเล่มนี้อ่านง่าย อ่านให้จบได้อย่างรวดเร็ว เพราะแม้เนื้อหาจะเยอะ(300 กว่าหน้า) แต่ผู้เขียนแบ่งเนื้อหาออกเป็นหัวข้อย่อย ๆ โดยแต่ละหัวข้อจบใน 2-3 หน้า นอกจากนี้แต่ละหัวข้อผู้เขียนได้สรุปใจความสำคัญไว้ให้แล้ว มีรูปประกอบซึ่งเป็นใจความสำคัญในทุกหัวข้อ และไฮไลต์ข้อความสำคัญไว้ให้ด้วย

สรุปสั้น ๆ สำหรับบางหัวข้อที่ผมให้ความสนใจ
กฎพื้นฐานของ Input
วิธีอ่านหนังสือ

Categories
หนังสือ

หนังสือ The Power of Input – วิธีอ่านหนังสือ

การอ่านนอกจากจะเพื่อความบันเทิง เสริมความรู้ หรือพัฒนาตนเองแล้ว การอ่านยังช่วยแก้ปัญหาให้เราได้ด้วย ครั้งต่อไปที่เลือกซื้อหนังสือ ลองเลือกหนังสือที่น่าจะช่วยแก้ปัญหา ที่เรากำลังพบเจออยู่ดูครับ

การอ่านคือก้าวแรกของการเรียนรู้

การเรียนรู้มีขั้นตอนของมัน การทำตามขั้นตอนตามลำดับจะช่วยเพิ่มประสิทธิภาพของการเรียนรู้ การข้ามลำดับก็ส่งผลให้ประสิทธิภาพลดลง

ลำดับขั้นตอนในการเรียนรู้

  1. อ่านหนังสือ
    จะเรียนรู้อะไรให้เริ่มที่การอ่าน และเริ่มจากพื้นฐานของเรื่องนั้น ๆ ก่อน
  2. ดูวิดีโอหรือฟังคลิปเสียง
  3. เข้าเรียน ฟังบรรยาย หรือฟังสัมมนา
  4. เรียนแบบตัวต่อตัว
  5. สอนผู้อื่น

อ่านเร็ว V.S. อ่านละเอียด

ต่อให้เราอ่านหนังสือเดือนละ 10 เล่ม ถ้าเราไม่ทำ Output เลย เราจะจำไม่ได้ ไม่เข้าใจลึกซึ้ง เสียเงิน เสียเวลาเปล่า

ดังนั้นเมื่อเราอ่านหนังสือจบ 1 เล่ม ให้หยุดเพื่อทำ Output ก่อนที่จะเริ่มอ่านหนังสือเล่มต่อไป โดย Output ที่ต้องทำ มีตามลำดับดังนี้

  1. เขียน
    เขียนในสิ่งที่เราค้นพบ เขียนสิ่งที่จะลองทำตาม หรือเขียนรีวิวหนังสือเล่มนั้น
  2. เล่าให้คนอื่นฟัง อาจจะเป็นคนในครอบครัว เพื่อน หรือคนที่ทำงานก็ได้
  3. นำสิ่งที่เราค้นพบไปปฏิบัติ
  4. สอนผู้อื่น

เมื่อเราทำตามนี้หลังอ่านหนังสือเล่มนึงจบ เราก็จะได้ความรู้ติดตัวแล้ว หลังจากนั้นค่อยเริ่มอ่านหนังสือเล่มต่อไป

ดังนั้นอย่าตั้งเป้าที่การอ่านหนังสือให้ได้มาก ๆ แต่ให้อ่านอย่างละเอียด ให้เข้าใจอย่างลึกซึ้ง อธิบายได้ รีวิวได้ หรืออภิปรายเรื่องนั้น ๆ กับผู้อื่นได้

วิธีหนึ่งที่ช่วยให้เราอ่านอย่างละเอียด คือ คิดไว้ก่อนอ่านหนังสือว่าเราจะเขียนรีวิวหรือจะอธิบายให้คนอื่นฟัง

เมื่อเราฝึกอ่านโดยละเอียดจนชำนาญแล้ว ค่อยอ่านให้เร็วหรืออ่านให้เยอะทีหลัง

เทคนิคหนึ่งที่จะช่วยเพิ่มประสิทธิภาพการอ่านให้อ่านเร็วและอ่านได้ละเอียดขึ้น คือ “การอ่านข้ามไปมา”

การอ่านข้ามไปมา เหมาะสำหรับหนังสือทั่วไป หนังสือธุรกิจ แต่ไม่เหมาะกับหนังสือนิยายหรือการ์ตูน

การอ่านข้ามไปมาเริ่มที่การดูสารบัญ เลือกเรื่องที่อยากรู้ แล้วเริ่มอ่านจากส่วนนั้น

ซึ่งเมื่ออ่านแบบข้ามไปมา ให้เราเน้นที่

  • ส่วนท้ายของแต่ละบท
  • บทนำ
  • บทส่งท้าย
  • บทสรุป (มักอยู่ครึ่งหลังของหนังสือ)

เมื่ออ่านแบบข้ามไปมาเสร็จแล้ว เราจะเข้าใจภาพรวมของหนังสือ จากนั้นค่อยกลับมาอ่านตั้งแต่หน้าแรกจนจบอีกครั้ง ผู้เขียนบอกว่าการทำแบบนี้จะช่วยให้เราอ่านละเอียดและอ่านเร็วขึ้นถึง 2 เท่า นอกจากนี้ยังช่วยกำจัด “การดองหนังสือ” ได้ด้วย

การเลือกหนังสือ

ผู้เขียนแบ่งหนังสือตามคุณค่าเป็น 2 แบบ คือ

  1. หนังสือโฮมรัน
    หนังสือที่มีเนื้อหาให้เราค้นพบเยอะ ช่วยเราพัฒนาตนเองและเปลี่ยนแปลงชีวิตได้เยอะ
  2. หนังสือสไตรก์
    หนังสือที่แทบไม่มีอะไรให้เราค้นพบ ไม่ช่วยให้เราพัฒนาตนเองเลย

ผู้เขียนบอกว่าการ “เลือกหนังสือ” สำคัญกว่า “วิธีอ่านหนังสือ” เสียอีก เราจึงต้องลดหนังสือสไตรก์เพื่อเพิ่มโอกาสในการเจอหนังสือโฮมรัน

สำหรับมือใหม่ เมื่อรู้ว่าเราอยากอ่านหนังสือเพื่อพัฒนาตนเองในด้านไหน หรือแก้ปัญหาอะไรแล้ว ควรเริ่มจากหนังสือที่นักอ่านหรือผู้เชี่ยวชาญแนะนำ และควรเลือกให้เหมาะกับระดับของเราด้วย มือใหม่ควรเริ่มที่หนังสืออ่านง่าย ๆ เมื่อเราชำนาญแล้วก็ขยับไปอ่านเล่มที่ยาก ๆ ได้

นอกจากนี้การเลือกหนังสือ เราควรอ่านอย่างเป็นกลางและสมดุล คือ เมื่อเราศึกษาในเรื่องใด เราควรเลือก

  • หนังสือเป็นกลาง
  • หนังสือที่เราเห็นด้วย
  • หนังสือที่เราเห็นต่าง

แต่ถ้าไม่มีเวลา ให้อ่านแค่ “หนังสือที่เราเห็นด้วย ” และ “หนังสือที่เราเห็นต่าง” ก็พอ

ก่อนที่จะอ่าน เราต้องทำสมองให้ว่าง ไม่เอนเอียงไปด้าน เห็นด้วย/ไม่เห็นด้วย หรือชอบ/เกลียด ซึ่งคนทั่วไปอาจทำไม่ได้เพราะมี “Confirmation Bias หรือ ความลำเอียงเพื่อยืนยัน” กับสมมติฐานหรือความเชื่อที่มีอยู่แล้ว

เมื่อเราอ่านทั้ง “หนังสือที่เราเห็นด้วย ” และ “หนังสือที่เราเห็นต่าง” แล้ว เราจะพิจารณาเรื่องนั้นได้อย่างสมดุล

การอ่านนิยาย

ประโยชน์ของการอ่านหนังสือนิยาย คือ

  1. ทำให้กลายเป็นคนรักการอ่าน เพราะหนังสือนิยายให้ความสนุก ความบันเทิง “คนที่ไม่ชอบอ่านหนังสือควรเริ่มจากการอ่านนิยาย
  2. ทำให้หัวดีขึ้น เพราะสมองได้รับการกระตุ้นมากขึ้นจากการอ่านหนังสือ
  3. ทำให้รู้จักเข้าอกเข้าใจผู้อื่น เพราะการอ่านนิยายเราต้องใช้อารมณ์ร่วมกับตัวละคร
  4. ส่งเสริมความคิดสร้างสรรค์ จากการต้องนึกภาพตาม
  5. ช่วยคลายความเครียด
  6. ทำให้เราลองสมมติตัวเองเป็นคนอื่น ช่วยให้เราเรียนรู้ผ่านชีวิตตัวละครในนิยาย
  7. สนุก

ซึ่งหนังสือนิยายและการ์ตูนก็เป็นหนังสือประเภทหนึ่งที่เหมาะกับการอ่านเป็น e-book อีกด้วย

e-book

ใครที่อ่านหนังสือเดือนละหลายเล่ม อาจลองอ่านแบบ e-book ดู เพราะว่า

  • ราคาถูกกว่าหนังสือแบบเป็นเล่ม
  • ซื้อง่าย ไม่ต้องเดินทาง ไม่ต้องรอ ซื้อแล้วอ่านได้ทันที
  • ไม่ใช้พื้นที่เก็บ
  • พกพาได้มากกว่า

แต่หนังสือเป็นเล่มก็ยังมีบางอย่างที่ดีกว่า เช่น

  • จดจำได้ง่ายกว่า (จากงานวิจัย)
  • อ่านง่ายกว่า
  • มีสมาธิสูงกว่า
  • อ่านแบบข้ามไปมาได้ง่าย
  • ไฮไลต์และเขียนแทรกได้ง่าย เพิ่มประสิทธิภาพการอ่าน

Categories
หนังสือ

หนังสือ The Power of Input – กฎพื้นฐานของ Input

ทุกวันนี้ข้อมูลความรู้ไม่ใช่สิ่งที่ขาดแคลนแล้ว เราสามารถหาข้อมูลในสิ่งที่เราอยากรู้ได้ทุกอย่าง เราจึงพยายามอ่านเยอะ ๆ เรียนรู้เยอะ ๆ แต่ถ้าเรารับ Input แล้วสุดท้ายจำไม่ได้ก็ไม่มีประโยชน์อยู่ดี

ผู้เขียนหนังสือเล่มนี้พบว่าคนส่วนใหญ่จำสิ่งที่อ่านในแต่ละสัปดาห์ได้แค่ 3% เท่านั้น แต่ถ้าเรารับเฉพาะข้อมูลที่จำเป็น และเลือกที่จะไม่รับหรือทิ้งสิ่งที่ไม่จำเป็นซะ เราก็จะสามารถเพิ่มอัตราการจดจำข้อมูลได้ถึง 90% หรือเพิ่มขึ้น 30 เท่า เลยทีเดียว

ดังนั้นการรับ Input เป็นเรื่องของคุณภาพ มากกว่าเรื่องของปริมาณ และเมื่อเราคุมคุณภาพของ Input ได้แล้วค่อยเพิ่มปริมาณทีหลัง

หนังสือ The Power of Input เล่มนี้ มีกฎพื้นฐาน 3 ข้อ คือ

  1. ต้อง “ตั้งใจ”
    การรับ Input ห้ามทำไปงั้น ๆ แต่เราต้อง อ่านอย่างตั้งใจ ฟังอย่างตั้งใจ ดูอย่างตั้งใจ
  2. ตั้งเป้าหมายของการสร้าง Output ก่อน แล้วค่อยลงมือทำ Input
    เราต้องกำหนด Output ที่ต้องการให้เป็นรูปธรรมและกำหนดเวลาให้ชัดเจน เช่น เราวางเป้าหมายว่าต้องการสอบ TOEIC ให้ได้ 450 คะแนน ภายในสิ้นปีนี้ เพื่อที่จะไปเรียนต่อที่ต่างประเทศ ดังนั้นเราจึงต้องศึกษาภาษาอังกฤษ ซึ่งการทำแบบนี้จะช่วยมองเห็นวิธีการเรียนที่ชัดเจนขึ้น รู้ว่าต้องซื้อหนังสือแบบไหน และใช้เวลาเรียนสัปดาห์ละกี่ชั่วโมง
  3. ทำ Input กับ Output ไปพร้อม ๆ กัน
    ซึ่งเรื่องนี้ก็คือ “บันใดวนแห่งการพัฒนาตนเอง” ในหนังสือ The Power of Output นั่นเอง เช่น เมื่อเราอ่านหนังสือเราควรจดไปด้วยและเมื่อเราอ่านจบเราควรเขียนรีวิว เขียนสรุป หรือเล่าให้เพื่อนฟัง

เทคนิคการทำ Input ให้เกิด Output มากขึ้น

เทคนิคที่จะช่วยให้เราจดจำ Input ได้มากขึ้น หรือสร้าง Output ได้มากขึ้นก็คือ การตั้งเป้าหมายการทำ Output ไว้ล่วงหน้า ผู้เขียนบอกว่าการทำแบบนี้จะเพิ่มประสิทธิภาพได้ 100 เท่า เลยทีเดียว

ยกตัวอย่างเช่น เมื่อหัวหน้าให้เราไปเข้าอบรมเป็นเวลา 3 วันและบอกกับเราว่าต้องกลับมาสอนคนในบริษัทเป็นเวลา 3 ชั่วโมง เราคงจะตั้งใจฟัง จดเนื้อหาที่สำคัญ และจดจำได้มากขึ้นอย่างแน่นอน

วิธีเก็บเฉพาะข้อมูลที่จำเป็น

ผู้เขียนพูดถึง Cocktail party effect ว่า เมื่อเราอยู่ในงานปาร์ตี้ที่มีคนเยอะ ๆ แล้วมีใครซักคนพูดถึงชื่อเรา เราก็ยังจะได้ยินแม้อยู่ท่ามกลางเสียงดังก็ตาม

นั่นเป็นเพราะในสมองของเรามี “สมาธิเลือกสรร (Selective Attention)” หรือที่ในหนังสือเล่มนี้เรียกว่า “การตั้งเสาอากาศแห่งความสนใจ” มาช่วยเราเก็บเฉพาะข้อมูลที่มีความสำคัญ

เทคนิคที่จะช่วย “ตั้งเสาอากาศแห่งความสนใจ” คือ

  1. เขียนคีย์เวิร์ดของสิ่งที่เราสนใจ แล้วกลับมาดูเป็นครั้งคราว
  2. ตั้งเป้าหมายให้ชัดเจน ว่าเราจะเรียนรู้อะไรจาก Input นั้น ช่วยให้สมองเราเลือกรับรู้จุดที่มีความสำคัญได้โดยอัตโนมัติ
  3. ตั้งคำถามกับตัวเอง เพราะเวลาที่สมองถูกถาม มันจะพยายามหาคำตอบของคำถามนั้น
  4. ตั้ง Output ไว้ล่วงหน้า เช่น อ่านหนังสือเล่มนี้แล้วจะเขียนรีวิว ซึ่งการตั้ง Output ไว้ล่วงหน้าเป็นวิธีที่ดีเยี่ยมสำหรับการตั้งเสาอากาศแห่งความสนใจ

เพิ่มความสามารถในการจดจำด้วยอารมณ์

สมองเราจะจดจำได้ดีขึ้นเมื่อเรื่องนั้น ๆ มีอารมณ์เข้ามาเกี่ยวข้อง ดังนั้นเพื่อเพิ่มความสามารถของสมองในการจดจำ Input เราควรที่จะ

  1. สร้างให้เป็นเรื่องราว อาจประยุกต์เป็นการอ่านในรูปแบบการ์ตูนหรือนิยาย
  2. เรียนรู้ในสิ่งที่รู้สึกตื่นเต้น อยากรู้อยากเห็น
  3. เมื่อซื้อหนังสือมาให้อ่านทันที เพราะตอนนั้นเรามีความรู้สึกอยากอ่าน
  4. เมื่อมีข้อสงสัย ให้หาคำตอบทันที
  5. นำเสนอต่อหน้าผู้อื่น เพราะความตื่นเต้น+การสอน จะช่วยเพิ่มความจำ
  6. พยายามเชื่อมโยง “ความประทับใจ” กับ “การเรียนรู้”
  7. เรียนรู้จากการท่องเที่ยว เพราะมีทั้งความตื่นเต้น ความระทึกใจ และประทับใจ