64 คะแนน โดย xguru 2025-02-06 | 20 ความคิดเห็น | แชร์ทาง WhatsApp

ความคิดที่เปลี่ยนไป

  • ความเรียบง่ายไม่ได้เกิดขึ้นเอง แต่เป็นสิ่งที่ต้องอาศัยความพยายามอย่างต่อเนื่อง
  • ได้ตระหนักว่าไม่มีเหตุผลอะไรที่จะภูมิใจกับการจัดการหรือทำความเข้าใจความซับซ้อน
  • ในทีมที่มีระดับประสบการณ์หลากหลายปะปนกัน ภาษาแบบ Typed เป็นสิ่งจำเป็น
  • Java เป็นภาษาที่ยอดเยี่ยมเพราะมันไม่น่าสนุก
  • REPL ไม่มีประโยชน์มากนักในฐานะเครื่องมือออกแบบ แต่มีประโยชน์สำหรับการสำรวจทดลอง
  • การเขียนโปรแกรมจริง ๆ ควรเกิดขึ้นเกือบทั้งหมดก่อนถึงขั้นตอนการเขียนโค้ด
  • การพัฒนา Frontend ได้กลายเป็นดินแดนฝันร้ายแบบ Kafkaesque และไม่สนุกอีกต่อไป
  • แนวคิดเรื่องความสง่างามไม่สามารถเป็นตัวชี้วัดที่วัดผลได้จริง
  • การบริหารจัดการที่ดีจริง ๆ เป็นสิ่งล้ำค่ามาก (ตลอดอาชีพที่ผ่านมาพบการจัดการที่ดีจริง ๆ แทบไม่กี่ครั้ง)
  • DynamoDB เป็นฐานข้อมูลที่ดี หากตรงกับ workload เฉพาะทางนั้นอย่างพอดี
  • OOP เป็นแนวทางที่ยอดเยี่ยมในบริบทที่เหมาะสม การยึดติดกับ Functional เพียงอย่างเดียวเป็นเรื่องไม่ฉลาด

ความเห็นที่ได้มา

  • แก่นของวิศวกรรมคือการสื่อสาร
  • อย่าใช้แนวคิด Monad หนักเกินไปใน Java
  • Query Planner คือสิ่งที่โหดร้าย
  • ช่วงเวลาที่เรารู้สึกว่าอะไรบางอย่าง 'ง่าย' แท้จริงแล้วมักเป็นสัญญาณว่าเรายังเข้าใจมันไม่ดีพอ
  • ควรเปิดพื้นที่ให้นักพัฒนามือใหม่ได้สำรวจและทำผิดพลาดบ้าง
  • ควรพัฒนา Soft skill อย่างจริงจัง เพราะผลตอบแทนจากการลงทุนนั้นเห็นได้ทันที
  • ในการพัฒนาแอปพลิเคชันทั่วไป แทบไม่มีสิ่งที่เรียกว่า 'นามธรรมแบบใช้ได้ทั่วไปจริง ๆ' การเขียนเฉพาะโค้ดที่จำเป็นมักดีกว่า
  • ตรงกันข้าม การพัฒนาไลบรารีคือการออกแบบ abstraction จึงควรใช้เวลาเพื่อหาโครงสร้างที่ถูกต้อง (รูปแบบเชิงพีชคณิต)
  • ORM มีปัญหามากในทุกภาษาและทุก implementation เขียน SQL เองตรง ๆ ยังดีกว่า
  • ปัญหาของ Functional programming หลายครั้งเกิดจากผู้ศรัทธาในแนวทางนี้เอง
  • หากเวลาผ่านไปนานพอ คุณมักจะเสียใจมากที่สร้างระบบไว้บน Serverless Functions
  • Type คือคำยืนยันที่เราตัดสินลงไปขณะมองโลก
  • Distributed lock ยังคงเป็นปัญหาที่ยากมากอยู่เสมอ
  • ความสามารถด้านการทำ formal modeling และการวิเคราะห์เป็นทักษะที่ต้องมี
  • คุณสมบัติที่สำคัญที่สุดของชุดทดสอบ integration test คือความเป็นอิสระแยกขาดจากกัน
  • DynamoDB อาจเป็นตัวเลือกที่แย่ที่สุดสำหรับการพัฒนาแอปพลิเคชันทั่วไปก็ได้
  • คนส่วนใหญ่ไม่ได้สนใจเรื่อง 'craftsmanship' ของโค้ดมากนัก จงให้คุณค่ากับคนที่สนใจ แต่กับคนอื่นก็ต้องร่วมงานกับพวกเขาในจุดที่พวกเขาเป็นอยู่
  • เชื่อว่าภาษาแบบ gradual, dependently typed คืออนาคต
  • มั่นใจว่าในโค้ดทดสอบนั้น จะใส่คอมเมนต์มากแค่ไหนก็ยังไม่ถือว่ามากเกินไป

ความเห็นที่ไม่เปลี่ยนไป

  • ยังคิดว่าคนที่หมกมุ่นกับเรื่องเล็กน้อยอย่างสไตล์โค้ดหรือกฎ linting เป็นคนประหลาดอยู่ดี ควรไปโฟกัสเรื่องที่สำคัญกว่า
  • ยังคงยืนยันว่าสัดส่วน code coverage ไม่เกี่ยวข้องกับคุณภาพโค้ด (และหลายกรณียังมีแนวโน้มแปรผกผันกันด้วย)
  • Monolith ยังคงเป็นตัวเลือกที่ใช้ได้ดี
  • ยอมรับว่ายากมากที่จะเอาชนะงานวิจัยและการปรับปรุงของ RDBMS ที่สั่งสมมาหลายสิบปี
  • การจะใช้ Micro-service ต้องมีเหตุผลที่เหมาะสมจริง ๆ (น่าเสียดายที่ทุกวันนี้มันเริ่มถูกมองเป็นเรื่องปกติเกินไป)
  • โปรเจกต์ส่วนใหญ่ (แม้แต่โปรเจกต์ภายใน AWS เองก็เช่นกัน) ไม่ได้ต้องการ 'การสเกล' จริง ๆ และหลายครั้งการออกแบบโดยตั้งต้นจากการสเกลกลับให้ผลเสียมากกว่า
  • เชื่อว่า 93% ของผู้จัดการโครงการ หรืออาจถึง 95.2% หายไปก็แทบไม่ส่งผลอะไร หรืออาจทำให้องค์กรมีประสิทธิภาพขึ้นด้วยซ้ำ (สัดส่วนนี้เพิ่มขึ้นจากเมื่อ 4 ปีก่อน)
  • จะคอยดูว่าพอถึงปีที่ 15 แล้วมันจะเปลี่ยนไปอีกอย่างไร*

20 ความคิดเห็น

 
gongon 2025-02-11

เรื่องที่คนส่วนใหญ่น่าจะเห็นด้วย

 
aer0700 2025-02-07

หลังอยู่ในวงการมา 10 ปี หัวข้อเกี่ยวกับการพัฒนาซอฟต์แวร์ที่เปลี่ยนมุมมองไป

โปรเจ็กต์ส่วนใหญ่ไม่เคยมีวันที่ต้องสเกลจริง ๆ หรือไม่ก็หายไปก่อนจะถึงวันที่จำเป็นต้องสเกล...

 
roxie 2025-02-07

ภาษาแบบค่อยเป็นค่อยไปและมี dependent types คืออะไรเหรอ..?

 
botplaysdice 2025-02-07

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

ยกตัวอย่างเช่น ชนิดข้อมูล List ถ้าค่าข้างในถูกเรียงไว้หมดแล้ว ก็จะกลายเป็น SortedList ....

ถ้ามีคุณสมบัติแบบนี้ การตรวจชนิดข้อมูลตอนคอมไพล์ก็น่าจะพิสูจน์อะไรได้มากขึ้น

ถ้ามีฟังก์ชันที่รับ SortedList แล้วคืนค่า SortedList ... แต่ถ้าในโค้ดมีบั๊กจนทำให้สถานะการ sort พัง ตอนคอมไพล์ก็คงขึ้น type error เลย

แน่นอนว่า.... ต้นทุนของการตรวจชนิดข้อมูลก็น่าจะสูงพอสมควร...

แต่ในทางปฏิบัติมันไปได้ไกลถึงไหนแล้ว ผมก็ยังนึกภาพไม่ค่อยออกเลยครับ.

 
roxie 2025-02-07

อ๋อ ขอบคุณครับ ฟังดูน่าทึ่งดีนะ...

 
xguru 2025-02-07

หมายถึงภาษาที่สามารถย้ายและประยุกต์ใช้ได้อย่างยืดหยุ่นระหว่างระบบชนิดข้อมูลแบบ static และ dynamic

 
extendednoob 2025-02-06

Java น่าเบื่อ เลยกลับกลายเป็นภาษาที่ยอดเยี่ยม
หมายความว่ายังไง?

 
botplaysdice 2025-02-07

ไม่ว่าใครจะเขียนก็ออกมาคล้าย ๆ กัน เลยดูแลง่าย น่าจะหมายถึงแบบนั้นมั้งครับ

 
vwjdalsgkv 2025-02-06

ผมคิดว่าคงหมายถึงว่ามันมีความมั่นคงในตัวเอง เพราะไม่มีส่วนไหนที่ต้องใส่ใจเป็นพิเศษมากขึ้นหรือทำให้นักพัฒนาตกใจเป็นพิเศษ

 
dbs0829 2025-02-06

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

 
beoks 2025-02-06

เห็นด้วยครับ ผมเพิ่มการตรวจสอบสไตล์ไว้ใน CI และตั้งค่าให้ไม่สามารถ merge ได้หากไม่ปฏิบัติตามสไตล์

 
edunga1 2025-02-06

> ผมยังคงคิดว่าคนที่หมกมุ่นกับเรื่องจุกจิกอย่างสไตล์โค้ด กฎการ lint และอะไรทำนองนั้น เป็นคนแปลกอยู่ดี ควรโฟกัสกับเรื่องที่สำคัญกว่านี้

https://www.youtube.com/watch?v=JcY35HD77lg&t=828s
แต่ก็มีคนบอกว่าไม่ควรปล่อยผ่านไปเฉย ๆ เพราะสิ่งเหล่านี้เป็นปัจจัยที่ทำให้คนซึ่งก็เป็นมนุษย์เหมือนกัน มีสมาธิได้ยากขึ้น ดังนั้นแก้ให้เรียบร้อยแล้วค่อยเดินหน้าต่อจะดีกว่า

 
yadameda 2025-02-06

> คนส่วนใหญ่ไม่ได้สนใจเรื่อง "ความเป็นช่างฝีมือ" ของโค้ดมากนัก ควรให้คุณค่ากับคนที่สนใจเรื่องนี้ แต่กับคนที่เหลือก็ควรร่วมงานกับพวกเขาจากจุดที่พวกเขาอยู่

เห็นด้วย..

 
jjpark78 2025-02-06

เป็นคนหนึ่งที่เสียใจกับการสร้างระบบอยู่บนเซิร์ฟเวอร์เลส หลังอยู่ในวงการมา 10 ปี

Cold start ก็ยังช้าอยู่เหมือนเดิม,
พอถึงจุดหนึ่งทราฟฟิกก็พุ่งจนแทบไม่ต่างจาก on-demand แล้ว,
ต่อให้ระดมทุกวิถีทางมาก็ยัง deploy ช้าเกินไป

 
jjpark78 2025-02-06

กรณีที่ code coverage ไม่เกี่ยวข้องกับคุณภาพของโค้ด น่าจะมีอยู่สองแบบ

  • coverage ต่ำจนน่าแย่ (สำหรับผมคือ 80%) จนแทบไม่มีความหมาย หรือ
  • เขียน test scenario ไว้ให้ทำงานเฉพาะกับ normal scenario ที่เป็นโค้ดเส้นทางปกติเท่านั้น

ผมคิดว่าน่าจะมีอยู่สองกรณีนี้

ผมคิดว่า test code จะมีความหมายก็ต่อเมื่อมี coverage สูง และทดสอบส่วนเดิมซ้ำหลายครั้งด้วย input ที่ต่างกัน ภายใต้สถานการณ์ที่หลากหลายซึ่งสามารถทำให้เกิด error ได้

 
annyeong 2025-02-07

ผมก็รู้สึกว่าเมื่อตีความในความหมายอย่างหลัง มันเข้าถึงใจมากกว่านะครับ เพราะตัวเลขอย่าง code coverage ที่สูง ไม่ได้เชื่อมโยงกับคุณภาพของโค้ดโดยตรง สิ่งสำคัญคือการเติมเต็มด้วย test case ที่มีความหมาย

 
carnoxen 2025-02-06

> Java เป็นภาษาที่ยอดเยี่ยมก็เพราะมันไม่น่าสนุก

ฟังดูขำดีนะ 555

 
richardk 2025-02-06

เห็นด้วยครับ

ในการพัฒนาแอปพลิเคชันทั่วไป แทบจะไม่มีสิ่งที่เรียกว่า 'การทำ abstraction แบบใช้งานได้ครอบจักรวาลจริงๆ' อยู่เลย เขียนเฉพาะโค้ดที่จำเป็นจะดีกว่า

 
GN⁺ 2025-02-06
ความเห็นจาก Hacker News
  • มีความเห็นที่มองคนซึ่งยึดติดกับสไตล์โค้ดหรือกฎ linting ว่าแปลก แต่การใส่ใจรายละเอียดคือการให้คุณค่ากับความเป็นช่างฝีมือ
    • มีนักพัฒนาที่ไม่เห็นด้วยกับแนวคิดที่ว่าการเขียนโปรแกรมส่วนใหญ่ควรเสร็จสิ้นก่อนลงมือเขียนโค้ด โดยมองว่าการทำโค้ดและการออกแบบแบบวนซ้ำไปมานั้นสำคัญ
    • มีความเห็นว่าการจัดการและทำความเข้าใจความซับซ้อนเป็นเรื่องสำคัญ ระบบที่ดูเรียบง่ายเพียงแค่ย้ายความซับซ้อนไปไว้ที่อื่น
    • บางคนไม่เห็นด้วยกับความเห็นที่ว่า Java เป็นภาษาที่น่าเบื่อ และคิดว่าโค้ด Java อย่าง Spring ไม่ได้น่าเบื่อ แต่ออกจะไม่น่าสนุกเลยมากกว่า
    • บางคนก็ไม่เห็นด้วยกับแนวคิดที่ว่าการเขียนโปรแกรมควรเสร็จสมบูรณ์โดยไม่ต้องเขียนโค้ด เพราะถ้าไม่เขียนโค้ดก็มีโอกาสหลุดจากความเป็นจริงได้ง่าย
    • บางคนไม่เห็นด้วยกับความคิดที่ว่าการสร้างแบบจำลองและการวิเคราะห์เชิงรูปแบบเป็นสิ่งจำเป็น โดยคิดว่าการทดลองสำคัญกว่า
    • มีความเห็นว่าการใส่คอมเมนต์ในโค้ดทดสอบให้มากเป็นเรื่องที่ดี
    • มีความเห็นว่าการพัฒนาฝั่งฟรอนต์เอนด์เหมือนฝันร้าย แต่การอัปเดตแอป React + Typescript + MobX ก็ไม่ได้มีปัญหาใหญ่อะไร
    • มีความเห็นว่าควรมองการพัฒนาซอฟต์แวร์ต่างกันตามช่วงขององค์กร สตาร์ทอัปกับองค์กรที่พิสูจน์ product-market fit แล้วควรใช้แนวทางต่างกัน
    • มีความเห็นว่า Checked Exceptions ของ Java เป็นไอเดียที่ดี เพียงแต่ต้องการการปรับปรุงทางไวยากรณ์เล็กน้อยเพื่อให้จัดการข้อผิดพลาดได้ดีขึ้น
    • มีความเห็นว่าสถาปัตยกรรมแบบ monolithic ยังดีอยู่ และยากที่จะเอาชนะงานวิจัยกับการพัฒนาปรับปรุงของ RDBMS ได้
    • มีความเห็นว่าในทีมที่มีระดับประสบการณ์หลากหลาย ภาษาที่มี type เป็นสิ่งจำเป็น และควรคำนึงถึงมุมมองของโปรแกรมเมอร์ด้วย
    • มีความเห็นว่าถึงโปรเจกต์แมเนเจอร์ส่วนใหญ่จะหายไป ก็แทบไม่ส่งผลกระทบมากนัก
    • มีความเห็นว่าความเครียดเรื่องสไตล์โค้ดสะท้อนว่าการทำให้สไตล์ของโปรเจกต์ไปในทิศทางเดียวกันเป็นเรื่องสำคัญ
    • บางคนมองว่าการพัฒนาฝั่งฟรอนต์เอนด์เป็นฝันร้าย แต่บางครั้งก็สนุกกับมัน
    • มีความเห็นว่าความสง่างามไม่ใช่ตัวชี้วัดที่แท้จริง เพราะวิธีแก้ปัญหาที่ดูสง่างามไม่ได้ใช้งานได้จริงเสมอไป
    • มีความเห็นว่า DynamoDB เป็นตัวเลือกที่แย่ที่สุดสำหรับการพัฒนาแอปพลิเคชันทั่วไป และหลายกรณี SQL เหมาะสมกว่า