กำเนิดดาวรุ่ง
Status: ทำงาน ทำงาน ทำงาน
: 0 ใบ
: 0 ใบ
เข้าร่วม: 02 Dec 2014
ตอบ: 42
ที่อยู่:
โพสเมื่อ: Tue Jun 22, 2021 18:07
[RE: ท่านใดเป็นโปรแกรมเมอร์ขอคำแนะนำหน่อยครับ]
คือจริง ๆ แล้วไอ้งานสาย Software Development เนี่ย มันไม่ได้มีแค่ Programmer อย่างเดียวครับ จริง ๆ แล้วมีอีกหลายตำแหน่งเลยที่เรายังขาดแคลนอยู่
ผมขออธิบายให้ฟังกว้าง ๆ เลยนะครับว่ามันมีอะไรบ้างตาม SDLC (Software Development Life Cycle) ขอเน้นย้ำว่าโคตรยาว ถ้ามีคนสนใจก็ยินดีเล่าให้ฟังนะครับ
ขอเริ่มตั้งแต่ต้นทางเลย
การที่เราจะทำ solution ใด ๆ ตัวนึงออกมา จะเริ่มจากการที่มี User จำนวนหนึ่งที่มีปัญหาในการใช้ชีวิต หรือ การทำงาน เราเรียกสิ่งนั้นว่า PAIN ครับ
พอมี Pain เกิดขึ้นเราจะให้คนกลุ่มนึงไปคุยกับ User เหล่านั้นเพื่อศึกษาถึงปัญหา และร่วมกันหาทางแก้ไขปัญหานี้ครับ คนเหล่านี้จะมีชื่อเรียกต่างกันออกไป ตามลักษณะขององค์กรณ์ครับ
BA (Business Analysis) - อันนี้ในเคสที่คนที่มี pain เป็นลูกค้า และอยากที่จะสร้าง solution บางอย่างที่จะต้องแก้ไขปัญหาที่เค้ามีโดยเฉพาะ คนกลุ่มนี้ต้องเข้าไปทำความเข้่าใจกับความต้องการลูกค้า เพื่อออกแบบระบบที่สามารถแก้ปัญหานั้น ๆ ได้ สกิลที่ต้องมีคือ Communication, ความเข้าใจในโดเมน หรือ ธุรกิจของลูกค้า, สามารถแปลงปัญหา หรือ ความต้องการของลูกค้าออกมาเป็น work flow หรือ solution ได้ และควรจะมีความเข้าใจในพื้นฐานงานด้าน development พอสมควร
PO (Product Owner) - อันนี้ในเคสที่ทำงานในบริษัทที่มี Product ของตัวเอง ไม่ได้มีลูกค้าจ้างงานเป็นชิ้น ๆ เพื่อแก้ปัญหาเฉพาะของเค้า แต่เป็นบริษัทเลยที่สร้างของขึ้นมาเองจากไอเดียที่ว่าจะแก้ปัญหาที่คนส่วนใหญ่มีร่วมกัน คน ๆ นี้ต้องมีความสามารถในการ ค้นคว้าข้อมูล สามารถคุยกับ user หรือ มโนความต้องการของ user ส่วนใหญ่ได้ ต้องออกแบบ Solution จากข้อมูลที่มี ดูเรื่องของ trend ที่จะเกิดขึ้นในอนาคต วาง Roadmap ของ Product ว่าจะไปทางไหน ต้องมีความเชี่ยวชาญใน Domain ของธุรกิจที่ตัวเองทำเป็นอย่างมาก และเอาข้อมูลเหล่านั้นมาแปลงเป็น Solution เป็น Software ได้ ควรจะมีความเข้าใจในพื้นฐานงานด้าน development พอสมควร
PM (Project Manager) - คนคนนี้เป็นคนที่รับเอาระบบที่ออกแบบแล้วมาคุยกับหลายภาคส่วน ทำความเข้าใจ และตกลงกันให้ออกมาเป็นความเข้าใจเดียวกันทั้งระบบ
ไม่ว่าจะเป็นฝั่งลูกค้า ภายในองค์กรณ์ วางไทม์ไลน์ของการพัฒนา solution คุยเรื่องราคา ต่อรองสิ่งต่าง ๆ สรุปทุกสิ่งอย่างกับลูกค้า และคนภายใน และคอยแก้ปัญหาเมื่อมีเหตุการณ์ไม่พึงประสงค์เกิดขึ้น เช่น ทำงานส่งไม่ทัน, รายละเอียดจากลูกค้าถูกเปลี่ยนกลางทาง และปัญหาอีกร้อยแปด ตำแหน่งนี้ต้องการสกิล Communication, Project management, Negotiation และ การแก้ปัญหาเฉพาะหน้าแบบตัวเป็นกรดครับ เพราะลูกค้ามักจะขอทุกสิ่งทุกอย่างที่ขอได้ มักจะเลทในทุก ๆ เรื่อง แต่จะขอให้เราทำให้เร็วที่สุด ถูกที่สุดเสมอ คนนี้ไม่จำเป็นต้องรู้ลึกในเรื่องของ Development มากนัก แต่ต้องเป็นคนที่ละเอียดที่สุด ต้องห้ามหลุดสาระสำคัญใด ๆ
==================================
พอเราได้ Solution ที่ถูกออกแบบมาอย่างดีแล้วก็จะถึงในส่วนที่เรียกว่า Implement ครับ หรือก็คือการเอาแผน ที่ถูกวาดไว้บนกระดาษออกมาทำให้เป็นจริง แต่ก่อนอื่น ก่อนที่ Developer จะลงมือทำงานได้ ส่วนใหญ่แล้ว solution ที่ถูกส่งต่อมามันจะมาในรูปแบบของภาพร่างครับ sketch กันบนกระดาษมีลูกษรโยงไปโยงมาเราต้องการอีกสองตำแหน่งตรงนี้
UX (User Experience) - ตำแหน่งนี้จะเป็นคนที่เอาไอ้ภาพร่าง ๆ ในกระดาษ หรือ ไอเดียในหัวของคนออกแบบ Solution ออกมาเขียนอีกครั้งให้ดูเข้าใจในลักษณะของ Wire frame จะเป็นกล่องสี่เหลี่ยมที่มีกล่อง หลาย ๆ กล่อง ปุ่มหลาย ๆ ปุ่ม เพื่ออธิบายให้คนอื่น ๆ เข้าใจว่า Solution หรือ Software ตัวนี้ทำงานยังไง flow ของมันเป็นแบบไหน เพื่อที่จะได้นำไปทดสอบกับ User จริง ๆ ก่อนที่เราจะลงมือทำงานกันครับ (ตำแหน่งนี้ค่าตัวแพงนะครับ แอบกระซิบให้ฟัง) มีหลากหลายทฤษฎีที่จะเอามาใช้ออกแบบครับ ก็ต้องออกแบบไป ทดสอบไป จนกว่าจะได้สิ่งที่ดีที่สุดออกมา สกิลที่ต้องการก็คือการออกแบบครับ ความเข้าใจในพฤติกรรมของผู้ใช้ และต้องรู้จักการทดลอง ทดสอบกับผู้ใช้จริง ตำแหน่งนี้มีคอร์สเปิดนะครับ สามารถหาเรียนได้ทั่วไป
UI (User Interface) - ตำแหน่งนี้มีหน้าที่ในการเปลี่ยนให้เหล่า wire frame ที่มีการตกลงกันแล้วในกระดาษ หรือในโปรแกรม ให้กลายเป็นหน้าตา Software หรือ Application ที่สวยงามมีสีสันครับ มีแสงตรงไหน มีเงาตรงไหน ปุ่มต่าง ๆ ควรจะเป็นสีอะไร วาดภาพตัวการ์ตูนประกอบ สรรหาถาพ background มาทำยังไงก็ได้ให้ application เราสวยงาม สกิลที่มีคือ ศิลปะ เลยครับ
Note: สองตำแหน่งนี้ ในไทยอาจจะโดนเหมารวมให้เป็นคนคนเดียวกันทำทั้งสองอย่างครับ และส่วนใหญ่ในประเทศไทย จะไม่ค่อยเน้นในฝั่งของ UX ซักเท่าไหร่นัก คงอีกซักพักครับ กว่านายทุนหรือ management จะให้ความสำคัญมากกว่านี้
==================================
อ่ะ เราได้ Application ที่ถูกออกแบบมาเป็นอย่างดีล่ะ ทีนี้เรามาเขียนโค๊ดกันเถอะ
ในส่วนของตำแหน่งฝั่งนี้ก็ยอดฮิตครับ มีชื่อเรียกหลากหลายมากมายผมขอเล่าให้ฟังรวม ๆ นะครับ
Back-end - ตำแหน่งนี้จะทำงานเกี่ยวกับ Logic เกียวกับข้อมูลครับ การเขียนแอพ เราต้องมีการแสดงผลข้อมูลบางอย่างบนหน้าแอพ และ เก็บข้อมูลบางอย่างจากผู้ใช้งานไป ซึ่งก็เป็นหน้าที่ของพวกนี้เค้าแหละครับ แต่เค้าจะปิดทองหลังพระครับ พวกเรา ๆ ไม่ค่อยได้เห็นผลงานของเค้าซักเท่าไหร่ เพราะมันจะออกมาเป็นตัวหนังสือติดกันเป็นพรึดที่เราอ่านไม่เข้าใจครับหลัก ๆ ก็จะทำงานประมาณนี้
ออกแบบฐานข้อมูล ว่าจะเก็บอะไร เก็บอย่างไร เก็บที่ไหน และจะส่งต่อข้อมูลอะไรออกไปให้ใช้บ้าง ส่งอย่างไร ส่งแบบไหน ทำยังไงให้ส่งเร็ว ทำยังไงให้ปลอดภัย ทำยังไงให้คนเข้ามาใช้ได้เยอะ ๆ แล้วระบบไม่ล่ม และอีกมากมายหลายหลาก ที่เกียวข้องกับข้อมูล
Front-end - เป็นคนที่จะเอาข้อมูลของฝั่ง Back-end ที่เขียนเอาไว้ เอามาแสดงผลให้เราดูครับ และบางครั้งก็จำเป็นต้องเก็บข้อมูลจาก user ส่งกลับไปเก็บไว้ที่หลังบ้านด้วยครับ ไม่ว่จะเป็นบน Web หรือ บน Mobile เราจะเรียกรวมว่าเป็น Front-end หมดเลย แต่โดยปกติแล้วถ้าเป็น front-end ฝั่ง mobile เค้าจะเรียกตัวเองว่า Mobile developer ไปเลยครับ
แต่ไม่เพียงแค่นั้น ตำแหน่งนี้ต้องทำแอพออกมาให้เหมือนกับที่ฝั่ง UX/UI ออกแบบมาด้วยครับ รูปกว้างเท่าไหร่ ปุ่มสีอะไร กดแล้วเคลื่อนไหวแบบไหน กดแล้วมี Action อะไรบนหน้าแอพบ้าง จะเรียกข้อมูลจากหลังบ้านยังไง เรียกกี่อัน ทำยังไงให้แสดงผลได้เร็วที่สุด
ส่วนใหญ่ตำแหน่งนี้จะแยกไปเลยครับ ใครทำเว็บก็ทำแต่เว็บ ใครทำ Mobile App ก็ทำแค่บนนั้น
Full-stack - ตำแหน่งนี้ก็คือคนที่ทำได้ทั้งสองสิ่งที่กล่าวมาข้างต้นครับ หลังก็ได้ หน้าก็ได้ ส่วนใหญ่จะเป็นคนที่เก่งด้านนึงมาก่อน แล้วมาหัดอีกด้านนึงทีหลัง เพื่อเพิ่มความสามารถให้ตนเอง ตำแหน่งนี้ค่าตัวสูงนะครับเพราะใคร ๆ ก็อยากได้แบบที่ทำได้หมด
และมีข้อได้เปรียบอีกอย่างคือ คนพวกนี้จะเข้าใจในระบบทั้งหมด ทำให้เวลาที่เขียนโค๊ดออกมาจะไม่ติดขัด ไม่ค่อยมีปัญหา เพราะเค้าเห็นภาพรวมก่อนที่จะเริ่มทำงาน
QA - เหมือน QC ในโรงงานเลยครับ ตำแหน่งนี้จะมีหน้าที่ในการทำให้มั่นใจว่า Application ที่ทำขึ้นมาจะไม่เกิดบั๊ค ไม่มีปัญหาใด ๆ ตามมา ฟังแล้วดูเหมือนง่ายนะครับ แต่จริง ๆ แล้วตำแหน่งนี้ สามารถแตกแขนงไปได้อีกเยอะเลย เพราะเค้าต้องเข้ามามีส่วนร่วมตั้งแต่ขั้นตอนของการออกแบบเลย การออกแบบใด ๆ ที่อาจจะทำให้เกิดปัญหา เค้าก็จะขัด หรือเสนอแนวทางอื่น ๆ ขึ้นมาครับ
คือแนวคิดสมัยใหม่จะคิดว่า ป้องกันปัญหาก่อนที่มันจะเกิด แทนที่จะไปตรวจสอบระบบตอนท้ายแล้วค่อยมาหาปัญหาให้ Developer แก้ไขกันภายหลัง
และจะมีอีกแขนงนึงที่กำลังฮิตช่วงนี้คือ โดยปกติแล้วเนี่ย QA เค้าจะตรวจสอบระบบ หรือ Application ด้วยการใช้มือกด กดเมาส์ กดมือถืออะไรก็ว่าไป แต่ถ้าต้องทำแบบเดิม ๆ ซ้ำ ๆ ทุก ๆ ครั้งที่มีระบบ หรือ ฟีเจอร์อะไรใหม่ ๆ เค้ามามันก็จะเสียเวลามาก ๆ ก็เลยมีแนวคิดว่า ทำไมเราไม่เขียนโค๊ดให้มาทดสอบระบบให้เรา แทนที่การใช้แรงงานคน เราเรียกพวกนี้ว่า Automated QA ครับ เป็น QA ที่เขียนโค๊ดได้เหมือน Developer นี่แหละ แต่โค๊ดที่เขียน มีไว้ทดสอบระบบที่ถูกเขียนขึ้นมาอีกทีครับ
อันนี้เป็นสายหลัก ๆ ที่คนนิยมกันครับ แต่จริง ๆ แล้วมีอีกหลายตำแหน่งมากมายไม่ว่าจะเป็นงานในฝั่ง Data หรือจะเป็นสาย DevOps ที่แตกแขนงจากสิ่งที่เล่าให้ฟังไปได้อีกพอสมควรเลย
จะสังเกตุเห็นว่าที่เล่ามา ไม่ได้พูดถึงภาษาเลยว่า ต้องใช้ภาษาอะไร Java JS React Node C# Python
จริง ๆ แล้วเรื่องของภาษาก็สำคัญนะครับ แต่ถ้าเราจะทำงานในด้านนี้ สุดท้ายแล้ว ภาษาไหน ๆ เราก็ต้องเอาอยู่ครับ ต้องเลือกใช้ให้ถูกว่าเวลาไหนควรจะใช้ภาษาอะไร framework อะไรมาตอบโจทย์
เล่ามายาวเลย ถ้าใครมีข้อสงสัยอะไรถามได้เลยนะครับ
แก้ไขล่าสุดโดย Toonnix เมื่อ Tue Jun 22, 2021 18:20, ทั้งหมด 1 ครั้ง