เทคนิคที่ผมเลือกใช้เขียนโปรแกรม
แต่ก่อนอยากศึกษา Structured programming, OOP, FP, TDD, design pattern และ programming language ใหม่ ๆ เพราะแต่ก่อนเขียน Pascal นี่ส่วนมากเป็นโปรแกรมแก้โจทย์แบบเขียนคนเดียวไม่เกิน 2 ชั่วโมง ถ้าโครงการใหญ่กว่านั้นล่ม 🥺
ตอนนี้รู้สึกว่าเขียนโปรแกรมได้ใหญ่ยาวหรือซับซ้อนได้เท่าที่ต้องการแล้ว (คนอื่นมาเปิดดูอาจจะรู้สึกว่าไม่ค่อยมีอะไรและมั่ว ๆ 😸 ซึ่งก็อาจจะจริง)
pattern ที่ลองทำแล้วได้ผลมากคือ
- มองเป็น data transformation
- ใช้ data หลวม ๆ เช่น map หรือ alist
- ถ้าใช้ภาษา dynamic ได้ก็ดี
- พยายามทำให้โปรแกรมอ่านจากบนลงล่างได้
- พยายามทำให้ 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