Programming ต่างกับ Software Engineering ยังไง?

Supawit R
odds.team
Published in
1 min readJul 30, 2022

เคยสงสัยกันไหมครับว่าทำไมในสายการเขียนโปรแกรม บางทีเราก็จะได้ยินผู้คนเรียกคนที่เขียนโปรแกรมว่า programmer ไม่ก็ software engineer ที่นี่มีคำตอบให้

software engineer | https://unsplash.com/photos/64YrPKiguAE

TL;DR

programming เกี่ยวกับการสร้างโค้ดขึ้นมา ส่วน software engineering จะมองว่า programming เป็นส่วนหนึ่งของมัน และเสริมตรงที่ดูแลรักษาของที่สร้างจนกว่าจะสิ้นสุดอายุขัยของซอฟต์แวร์นั้น

differences between programming and software engineering

เพื่อแยกความแตกต่าง มี 3 ข้อที่ต้องคิดถึงคือ time, scale, และ trade-off

Consider of Time

Programming คือวิธีการสร้างซอฟต์แวร์ขึ้นมา

Software Engineer เหมือน programming และมีเรื่องที่เสริมเข้ามาคือจะให้ความกังวลว่าเมื่อเวลาผ่านไปแล้วระบบต้องการที่จะเปลี่ยน ระบบสามารถขยาย และยังคงประสิทธิภาพได้หรือเปล่า

ดังนั้นความแตกต่างคือ งาน programming จะโฟกัสที่ development ส่วนงาน software engineering จะโฟกัสที่ development, modification, และ maintenance

เพื่อให้เห็นผลกระทบของเวลาที่ชัดเจนขึ้น ลองดูคำถามนี้กัน

“คิดว่าโค้ดของเราจะอยู่ไปถึงเมื่อไรกัน”

เพื่อตอบคำถามนี้ลองจินตนาการถ้าเราจะต้องอยู่กับซอฟต์แวร์นั้นเป็นทศวรรษ (10 ปี)

ถ้าเป็นโค้ดที่อยู่ไม่นาน ก็น่าจะไม่มีผลกระทบเรื่องของเวลา

แต่ว่าโค้ดนั้นต้องอยู่กับเราไปอีกนาน การเปลี่ยนแปลงมักมีความสำคัญ เมื่อเวลาล่วงไป 10 ปี ซอฟต์แวร์เราต้องอัปเกรด library ไหมนะ? หรือภาษามีเวอร์ชันที่ใหม่ขึ้น?

Sustainable

ความยั่งยืน? เมื่อซอฟต์แวร์มีอายุมากขึ้น เราสามารถตอบสนองต่อการเปลี่ยนแปลงที่จะเกิดขึ้นได้หรือเปล่า? ทั้งเหตุผลเชิงของ technical และ business มองตรงที่ซอฟต์แวร์ของเรามีความสามารถที่จะเปลี่ยนไหม? ยังไม่ได้มองถึงว่าจะต้องเปลี่ยนจริง ๆ อาจจะด้วย สิ่งนั้นยังไม่มีคุณค่าพอที่จะเปลี่ยนหรือด้วยว่างานนั้นมีลำดับสำคัญน้อย

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

Consider of Scale

เราต้องทำงานกับคนกี่คนกัน? งาน programming ส่วนใหญ่มักจะถูกสร้างด้วยคน 1 คน แต่งานของ software engineering จะเป็นความร่วมมือกันของทีม

มีบางคนพยายามนิยาม software engineering ว่า “The multiperson development of multiversion programs.” — การพัฒนาโปแกรมแบบหลายเวอร์ชันที่ใช้หลายคนในการพัฒนา

ในโครงสร้างทีม, ผลิตผลของโปรเจกต์, นโยบายและแนวปฏิบัติ ของซอฟต์แวร์โปรเจกต์ล้วนถูกมองว่าเป็นความซับซ้อนของ software engineering ปัญหาที่ว่าก็เป็นส่วนหนึ่งของเรื่อง scale เช่นกัน

เมื่อองค์กรโตขึ้นและโปรเจกต์ขยับขยายออกไป ประสิทธิภาพในการพัฒนาซอฟต์แวร์จะมากขึ้นไหม? กระบวนการพัฒนาของพวกเรามีประสิทธิภาพมากขึ้นหรือเปล่า? แนวทางการใช้ version control และกลยุทธ์ในการทำการทดสอบเหมาะกับการเติบโตของคนและโค้ดที่เพิ่มขึ้นไหม? ปัญหาเรื่องการ scale มองไปถึงเรื่องการสื่อสารและการขยายคน สิ่งเหล่านี้ถูกพูดถึงในวันแรก ๆ ของ software engineering หรือเปล่า? เราเสียเงินเสียเวลาไปเท่าไร? กับการทำสิ่งที่ต้องทำซ้ำ ๆ

Consider of Trade-offs

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

ดังนั้นในทาง software engineering เรามักจะต้องประเมิน trade-off ระหว่างทางเลือกต่าง ๆ ที่จะไป ไม่ว่าจะเลือกภาษาโปรแกรมมิ่ง เลือกเฟรมเวิร์ก ว่าเราถ้าเราเลือกสิ่งนั้นจะได้ประโยชน์อะไร ไม่ได้อะไร หรือเสียประโยชน์อะไรไปบ้าง บางครั้งก็มีการเดิมพันที่สูงและบ่อยครั้งที่ดูไม่ครบองค์ประกอบ งานของ software engineer คือช่วยมององค์ประกอบที่เป็นไปได้เพื่อความยั่งยืนและการบริหารจัดการ ของการเติบโตขยับขยาย ของทั้งองค์กร ผลิตภัณฑ์ และกระบวนการพัฒนา

สุดท้ายไม่ได้หมายความว่า software engineering จะดีกว่า programming เสมอ เพียงแต่ problem domain ที่จะไปแก้ปัญหานั้นต่างกัน การนำไปใช้ให้เหมาะกับบริบทจึงสำคัญกว่า เช่น หากเราเอา software engineering ไปแก้ปัญหาที่เป็น programming ก็อาจมองว่า over engineer ก็เป็นได้..

อ้างอิงจาก https://abseil.io/resources/swe-book/html/ch01.html

--

--

Supawit R
odds.team

a developer who love to learn, read, and sleep.