เทคนิคที่ผมเลือกใช้เขียนโปรแกรม

แต่ก่อนอยากศึกษา Structured programming, OOP, FP, TDD, design pattern และ programming language ใหม่ ๆ เพราะแต่ก่อนเขียน Pascal นี่ส่วนมากเป็นโปรแกรมแก้โจทย์แบบเขียนคนเดียวไม่เกิน 2 ชั่วโมง ถ้าโครงการใหญ่กว่านั้นล่ม 🥺

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

pattern ที่ลองทำแล้วได้ผลมากคือ

  1. มองเป็น data transformation
  2. ใช้ data หลวม ๆ เช่น map หรือ alist
  3. ถ้าใช้ภาษา dynamic ได้ก็ดี
  4. พยายามทำให้โปรแกรมอ่านจากบนลงล่างได้
  5. พยายามทำให้ function ยาวไม่เกิน 20 บรรทัด (และขึ้นบรรทัดใหม่ตาม style ปกติ)

โปรแกรมที่ผมเขียนส่วนมาเกี่ยวกับ tree แล้วก็มีการโยงกันไปมาระหว่าง tree และ string บางทีก็มี lattice ด้วย ในแต่ละ node พอผ่านแต่ละ function ไปข้อมูลใน node บางทีก็เพิ่มขึ้นเรื่อย ๆ บางทีก็เปลี่ยน string เป็น lattice แล้วเอา lattice ไปเข้าอีก function นึงกลายเป็น lattice ที่เส้นเยอะกว่าเดิม 😛 ผมเคยพยายามจะทำเป็น class หรือ struct แล้วพอว่ามันเปลี่ยนบ่อยมาก

แต่ถ้าทำโปรแกรมคงคลังของธุรกิจเดียวที่ class ก็จะหน้าตาหนี table ใน relational database ไปได้ไม่กี่มากน้อย ข้อ (2) นี่อาจจะไม่จำเป็นก็ได้ (มั้ง) พอเป็น class/struct แล้วบางทีมันก็มีข้อดีว่าช่วยสื่อสารกับคนอื่น ๆ ในทีมได้ แต่โปรแกรมแบบที่ว่าในย่อหน้านี้ผมไม่ค่อยได้ทำไง

การศึกษาภาษาอื่น ๆ เข่น Haskell, Scala, TypeScript ก็อาจจะมีประโยชน์และทำให้ผมสิ่งดี ๆ อื่น ๆ ก็ได้ แต่สำหรับผม ผมมองว่าไม่ใช่เรื่องเร่งด่วน หรือการเรียน design pattern แบบที่ใช้กับ Java หรือ C++ ผมก็มองสำหรับผมรู้ก็ดีแต่ว่าไม่ใช่เรื่องเร่งด่วน

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

อีกอย่างที่รู้สึกว่าจำเป็นต้องเรียนคือพวก numpy, MXNet, PyTorch, Tensorflow ส่วนมากเป็น library ที่มันทำให้โปรแกรมเร็วขึ้นโดยที่ไม่ต้องออกแรงมากเลย ใช้ SIMD ด้วยคำสั่งเดียว ทั้งบน CPU, GPU, TPU