ประสบการณ์จากการทำโปรเจค SE

11. October 2008

From LifeOnVM

 

มาเขียนเรื่องนี้ช้าไปหน่อยนึง ก็จบไปแล้วสำหรับการเรียนวิชาที่ขึ้นชื่อว่า "ถีก" ที่สุดวิชาหนึ่งของภาคคอม

วิชานี้ (SE - Software Engineering) เป็นอะไรที่ดูเผินๆแล้วดูจะคาบเกี่ยวกับ SA (System Analysis) ซะมาก  ซึ่งพอเรียนจริงๆแล้วปรากฎว่า ...

 

มันก็เป็นแบบนั้นจริงๆ! (แป่ว ~)

ถ้าจะให้สรุปจริงๆก็คือว่า SA มันดูจะไม่ค่อยลงลึกใน Technical Detail มากแค่นั้นแหละ จะทำอะไรให้มันดู Generic ไว้ก่อน เรื่องเทคโนโลยีที่ใช้ Implement จะใช้อะไรก็ได้ ส่วน SE นี่จะละเอียดถึงขั้นมองกันเป็น Class เลยทีเดียว

ตอนทำโปรเจคก็อยู่กลุ่มเดียวกัน แจน แจ๋ เอย ต้น ปัน แบงค์ลาว สร้อย สุธี ปาย แล้วก็ จ้า พอจะรู้ชะตาตัวเองอยู่แล้วว่ายังไงก็ได้ทำโค้ดแน่ๆ Y_Y

ขอสรุป Lessons Learned จากโปรเจคไว้เป็นหัวข้อให้อ่านง่าย ดังต่อไปนี้

แบ่งงาน Document

การที่จะให้คนหลายคนเขียนเอกสารด้วยกันนี่เราต้องเจอปัญหาเรื่อง Consistency แน่ๆ วิธีแก้อย่างหนึ่งคือการเอาเอกสารคำศัพท์ที่ทุกคนสามารถแก้ไขได้อัพโหลดไว้บนเว็บ แต่ก็จะมีปัญหาอีกคือ แล้วจะทำยังไงให้คนเข้ามาอ่าน .. อันนี้ก็ยากอยู่เหมือนกัน

ปัญหาอีกอย่างก็เรื่องเข้าใจไม่ตรงกัน เช่น ตอนเขียน Use Case - Sequence นี่ก็แบ่งไปทำคนละอันสองอัน แล้วปรากฎว่าพอทำเสร็จแล้วเข้าใจไม่ตรงกันก็ต้องมาแก้ อาจจะแก้ได้โดยการคุยกันให้เข้าใจก่อนกลับไปเขียนล่ะมั้ง

แล้วก็มีปัญหาเรื่องการขึ้นต่อกันของ Document (Dependency) ว่าอันไหนต้องทำก่อนทำหลัง อันนี้ถ้าคนที่รับผิดชอบงานสำคัญอันแรกช้า อันอื่นก็จะช้าตามไปด้วย ต้องระวัง แล้วก็เรื่อง Dependency นี่เองที่ทำให้านแบ่ง Document มันทำไม่ได้ง่ายเหมือนกับการแบ่งงานไปพิมพ์

นัดบ่อย

การนัดบ่อยๆมีทั้งข้อดีและไม่ดี บางคนก็จะรู้สึกว่าจะนัดทำไมบ่อยๆัตั้งเยอะแยะ บางคนก็รู้สึกว่านัดไปแล้วก็ไม่เห็นจะได้เนื้องานอะไรขึ้นมาเลยหรือไปตามที่นัดแล้วก็ไม่เห็นจะได้อะไร ก็เลยไม่ไปตามนัดซะงั้น .. แล้วการจะนัดคนให้ได้ครบก็เป็นเรื่องยากมากเพราะว่างไม่ค่อยจะตรงกัน

เลยได้ข้อสรุปของตัวเองว่า วิธีนัดที่ดีควรจะนัดไปนั่งทำงานกันตรงนั้นเลยครับ การนัดในลักษณะ ตกลง ทำความเข้าใจ แบ่งงาน แล้วแยกย้ายกลับไป หวังว่าจะได้งานตามที่ตกลงกลับมา ดูจะเวิร์คแค่กับคนบางประเภทจริงๆนะ 

เทคโนโลยีที่ใช้

ผมพบจบเจอคนหลายคนที่ไม่ค่อยปลื้มกับการเขียนโปรแกรมประเภท Database-driven Application ส่วนหนึ่งก็เพราะมันวนไปวนมาครับ เขียนมาเสร็จก็มีคนเขียนไว้แล้ว แถมดีกว่าด้วย งานก็ซ้ำไปซ้ำมาจะทำไปบ่อยๆทำไม ลักษณะงานส่วนใหญ่ก็มีออกแบบ Database เขียน SQL ทำหน้า User Interface ก็จบ ผมเองก็ต้องยอมรับว่าเป็นหนึ่งในคนกลุ่มนั้นเหมือนกัน ตอนทำงานนี้ก็เลยพยายามจะดึงอะไรใหม่ๆแปลกๆมาใช้ซะหน่อย งานนี้ผมก็ได้ลอง Subsonic ไปเรียบร้อยสมใจอยาก

แบ่งงาน Design + UI + Coding

อันนี้จัดว่าเป็นเรื่องยากถึงยากที่สุด o__O

เนื่องจากว่าตั้งแต่ตั้งเป้าไว้ว่าคราวนี้จะใช้ ASP.NET + Subsonic + MySQL แล้วไม่มีคนอื่นในทีมที่เคยเขียน ASP.NET มาก่อนเลย ตอนแรกก็คิดไว้ (ในอุดมคติ) ว่าจะให้ทุกคนไปหัดมา เป็นแล้วก็มาช่วยกันเขียนครับ

แต่จริงๆในสถานการณ์ที่เวลามันบังคับ แต่ละคนก็ไม่ค่อยมีเวลาให้โปรเจค มันทำแบบนั้นไม่ได้หรอก วิธีการที่ดีคือต้องโยนให้แต่ละคน "รับผิดชอบ" ไปเป็นส่วนๆเลย ส่วนๆที่ว่านี้ ถ้าดีหน่อยก็อาจจะแบ่งกันเป็น Class  แต่ส่วนใหญ่ที่เห็นแบ่งกันแล้วทำงานสะดวกก็คือแบ่งกันเป็นราย Page ซึ่งมันทำให้แบ่งงานง่ายขึ้น แต่ก็ให้ข้อเสียตามมามากมาย เช่น แต่ละคนก็ใช้วิธีติดต่อ Database ไม่เหมือนกัน บางคนก็ hard-coded บางคนก็แยกไว้ใน configuration file กระจัดกระจายไปหมด เคยไปบ่นๆเรื่องนี้ไว้ใน Twitter @wienat ก็มาตอบอย่างตรงไปตรงมาว่า โปรเจค SE มันไม่ต้องแคร์เรื่อง maintainability มากก็ได้ ทำให้จบไปพอ o__O' ... ซึ่งก็ถูกต้องนะครับ

สำหรับโปรเจคกลุ่มผมเองก็วางแผนไว้ว่าจะให้ Coding 5 คน แต่ทำไปทำมาได้ทำจริงๆแค่ประมาณ 3 คน คือ ต้น ปัน แก๊น คือปกติแล้วผมรู้สึกว่า คนเราพอทำอะไรซักอย่างเป็น (Just Work) ในการทำครั้งต่อๆมา เราก็มักจะไม่อยากทำแบบเดิมๆ แต่มักจะหาวิธีที่มันเป็น Best Practice เสมอ ซึ่งคนอื่นๆเค้าไม่อยากมาเสียเวลากับเราด้วยน่ะสิ

ก็เลยเรียนรู้ว่าจะแบ่งงานแบบไหนก็ต้องดูกลุ่มด้วยครับ ถ้าเป็น Embedded Environment อยู่แล้ว ก็คงต้องต้องเอางานเสร็จไว้ก่อน (รึเปล่า)

 

จริงๆแล้วอยากเขียนอีกแต่นึกไม่ออก - -'' ทิ้งเวลาไว้นานเกิน

เกรดออกแล้ว เรื่องนี้ก็จบด้วยดีครับ :)

General , , ,

ฝึกงาน - สัปดาห์ที่ 2

29. March 2008

สัปดาห์ที่ผ่านมาค่อนข้างยุ่ง เลยไม่ได้เขียนเลย ขอสรุปเป็นเรื่องเดียวเลยละกัน

วันจันทร์ - นั่ง Port โปรแกรมต่อ

ได้ Assignment แรกมาเป็นการ Port โปรแกรมภาษา C/C++ ไปเป็น Java ก็เลยจัดการต่อวันนี้จนเสร็จ แต่จนแล้วจนรอดมันก็ยังมี Bug น่ะ เสร็จตอนเช้าๆ ตอนบ่ายก็ชิวเลย ไม่ค่อยได้เทสต์เท่าไหร่

วันอังคาร - รับ URD / เตรียม Present

เมนเตอร์ คือ พี่จิน นัดคุยแล้วเอา URD หรือ User Requirement Document มาให้ เป็น Requirement ที่ค่อนข้างจะเคลียร์ทีเดียว ไม่คิดว่าจะเขียนกันละเอียดขนาดนี้ ทำงานสบายขึ้นแยะเลยP

เนื่องจากวันรุ่งขึ้นมี  Presentation ก็เลยนั่งเตรียม Slide กันช่วงบ่าย ก็แบ่งหัวข้อกับกิทำกันคนละครึ่ง กิก็ทำส่วนของกิได้ดีเลย ทำให้ลดดีกรีความน่าเบื่อของ Presentation ลงได้บ้าง ตอนเย็นใกล้กลับบ้านมากก็ยังไม่เสร็จ แต่ต้องไปกินข้าวกับพวกนัท แจน เอิร์ธ เลยต้องแอบหนีกิไปก่อน ขอโทดค้าบ -/\- วันนั้นไปกิน MOS Burger ที่พารากอนกันละมั้ง

วันพุธ - Presentation

หลังจาก Present เสร็จก็ได้รับคอมเม็นต์มาจากพี่เมนเตอร์ จริงๆก็เป็นเรื่องเดิมๆคือพูดเร็วนั่นแหละ แต่ครั้งหน้าจะต้อง Present เป็น English แล้ว คิดว่ายังไงก็คงพูดช้าลงแน่ๆ (ฮาาา) กลุ่มเพื่อนๆที่มีหลายคนเช่น Resource Report ก็ Present กันยิ่งใหญ่เลยทีเดียว หยั่งกับงาน SA ที่คณะแน่ะ

เย็นนี้เพื่อนๆก็ชวนกันไปกิน Ootoya (เขียนแบบนี้รึเปล่า ?) ที่พารากอน มันเป็นร้านอาหารญี่ปุ่นที่ถ้าสั่งเป็น Set แล้วจะเติมข้าวได้ไม่อั้นอ่ะ ก็อิ่มอร่อยทีเดียว เติมไป 2 ครั้งแน่ะ แต่ไม่ได้กินคนเดียวนะ ฮาา (โกงข้าว Refill)

กินเสร็จต้องไปต่อกับพวกเด็กๆที่ Shabushi อีก ไปเลี้ยงปลอบใจให้น้องเป้หน่อย เสร็จกลับถึงบ้านเกือบๆห้าทุ่ม 

วันพฤหัส - User Interface Prototyping

ตอนเช้านั่งกับโอปอล ไม่ค่อยทำไรเท่าไหร่ ก็ลองเปิด RAD (Rational Application Developer) ซึ่งจริงๆแล้วมันก็เป็นการต่อยอด Eclipse ขึ้นมานั่นเอง ลองสร้างโปรเจค Struts ตามตัวอย่างดู ก็เหมือนจะสะดวกดีนะ แต่ถ้าพึ่ง Rational ไปตลอด คง Config อะไรเองไม่เป็นเลย เพราะมันทำให้หมดทุกอย่างเลยน่ะ  

จริงๆตามตารางเวลาโปรเจค ช่วงนี้มันจะเป็น Requirement Gathering + Analysis น่ะ ก็เลยทำ Prototype เพื่อไปตรวจสอบกับพี่จินว่าสิ่งที่เข้าใจตรงกันรึเปล่า ก็แค่ใช้ Visio ทำ Windows XP User Interface อ่ะ ใช้งานง่ายเลยทีเดียว ก็เขียนเป็นแบบหน้าจอ ต่อ หน้าจอ ไปเรื่อยๆ ส่วนกิก็เขียน Flow งานให้พี่จินดู  ก็จบไปอีกวัน

เย็นนี้กลับไปกินข้าวบ้านครับ ส่วนแก๊นแอบไปกิน KFC

วันศุกร์ - J2EE / Verifying the Requirement

วันนี้ช่วงเช้าจนถึงบ่าย 3 นั่งศึกษา J2EE ตลอดเลย มันมีหนังสือของ IBM ในตระกูล RedBooks อ่ะ โหลดฟรี แล้วก็อ่านง่ายเลยทีเดียว แถมที่ทำงานยังมี "ปรินท์บุฟเฟต์" อีก ฮาาา ก็เลยเอาออกมาอ่านได้ง่ายๆ

เท่าที่ศึกษา J2EE ดู ก็พบว่ามันมีเรื่องใหญ่ๆ 3 เรื่องอ่ะ คือ EJB (Enterprise Java Beans), Servlets และ JSP เจ้า JSP นี่มักจะใช้ทำส่วนที่เป็น Presentation ส่วน Servlets เอามาทำ Controller ส่วน EJB นี่จะเป็น Business Logic ด้านหลังที่สามารถเอามาใช้ใหม่ได้โดยง่าย แต่เรื่องพวกนี้มันใหญ่เว่อร์น่ะ อยากได้หนังสือ Head First Servlet and JSP มาอ่านเหมือนกัน แต่สงสัยต้องอ่าน Design Pattern ที่ซื้อมาให้จบก่อน T-T 

ตอนเที่ยงวันนี้ไปกินข้าวหมูกรอบ ต่อด้วยผัดไทยอารีย์ที่ซื้อมากินใน Pantry เยี่ยมเลย แทบหลับคาคอม - -'' 

พอใกล้บ่าย 3 ไอกิไปดูที่ Printer ก็เจอ URD แปลกๆของกลุ่มเราที่ไม่รู้ว่ามาจากไหน ปรากฎว่าพี่จินปรินท์ผิด แล้วก็เจอพี่จิน ก็เอา Prototype ให้ดู ทุกอย่างก็ผ่านไปด้วยดี แล้วก็เจอ Project Owner คุณธนสารเค้าก็บอกให้อัดเด็กพวกนี้ได้เต็มที่เลย ก็เอาสิครับ : ) พี่จินก็เลยจะเพิ่ม Requirement ให้ แล้วเราก็ถามพี่จินเพิ่มนิดหน่อยเรื่อง Lithography เค้าก็อธิบายอย่างละเอียดเลยน่ะ กระบวนการมันเรียกว่า Chemical Mechanical Polish มั้ง ถ้าจำไม่ผิด ก็สนุกดี

ตกเย็นตอนแรกนึกว่าจะได้ไปแกะ แต่ไม่ได้ไปแฮะ :( ป๊อปเบี้ยว อดร้องเพลงเลย

เสาร์อาทิตย์นี้ว่าจะเอา SA มาทวนซักหน่อย หวังว่าคงทำได้ ...'' 

Internship

ฝึกงาน - Business Analyst / Project Management / CMOS

18. March 2008

ไปถึงตอนเช้าตามเวลาใหม่ 8:30 ทันตามเวลาเป๊ะ

Business Analyst

พูดเกี่ยวกับอาชีพ Business Analyst ซึ่ง BA จะเป็นคนที่มีความรุ้เรื่องธุรกิจเป็นอย่างดี จนถึงเรื่องของการวางแผน การเก็บ Requirement และการวิเคราะห์ Requirement (RA) แต่ไม่รู้เรื่อง Technical เยอะเท่ากับ SA คนจะมาทำอาชีพนี้ได้อาจจะมาจาก Technical Background เช่นพวก Engineer ก็ได้ หรือจะเป็นคนที่เคยเรียนเกี่ยวกับพวก Financial, Marketing ก็ยังได้ และเหมือนกับ SA คือนอกจากเรื่องความรู้แล้วก็ยังต้องมีทักษะการสื่อสาร และบุคลิกที่ดีอีกด้วย

งานของ BA จะเป็นงานในขั้นตอนแรกๆ Planning, Requirement Gathering, Requirement Analysis (ทำร่วมกับ SA) ดังนั้นถ้า BA ทำส่วนนี้ใน Software Development Life Cycle (SDLC) มาพลาด ก็อาจะส่งผลเสียให้ Phase หลังๆเน่าไปด้วยได้

Project Management

สอน Phase ต่างๆในการจัดการโครงการ ซึ่งก็จะต่างกันไปตามแต่ Methodolody อย่างที่สอนเรียกว่า World-wide Project Management Method (WWPMM) คิดค้นขึ้นมาโดยบริษัทที่ไปฝึกงานนี่หล่ะ แล้วก็บอกเหตุผลต่างๆที่ทำให้ Project Success หรือ Fail ท้ายสุดให้ทำ Workshop ทำทัวร์ภูกระดึง ทำไปทำมาจนเลทจากกำหนดการไปเป็นชั่วโมงเลย ได้กลับบ้านทุ่มตรง

Project Assignment

วันนี้ได้รู้ Project ที่จะต้องทำใน 2 เดือนหลังจากนี้แล้ว เพื่อนๆจุฬากระจายกันไปทุกที่เลย โอปอลทำ Internal Operation, นัททำ Resource Report, เอิร์ธทำ RPG (ไม่รู้มันคืออะไร), แจนยังไม่แน่ แต่คงเป็น IRMS (ไม่รู้ว่าคืออะไรเหมือนกัน) เราเองทำ CMOS ... และยังไม่เห็นคนอื่นอยู่กลุ่มเดียวกัน (บ๊ะ!) และยังไม่รู้เช่นกันว่ามันคืออะไร - -'' เด๋วจะไปเสิร์ชดูคร่าวๆ หวังว่าคงไม่ใช่ฮาร์ดแวร์นะ ได้กลิ่นตะกั่วบัดกรีโชยมาแต่ไกลเลย

From Wikipedia, the free encyclopedia

CMOS refers to:

ไม่มีอันไหนดูจะเป็นไปได้เลยแฮะ ... ช็อค = =

 

Internship