อยากรู้ว่าทำงานเกี่ยวกับอะไร ช่วยอธิบายหน่อยครับ เข้าใจแต่พวกที่ที่เรียน Com Sci ว่าาจะเจาะเกี่ยวกับการเขียนโปรแกรมอย่างเดียว ส่วน Computer Engineering นี่จะส่วนมากจะเน้นเกี่ยวกับการออกแบบฮาร์ดแวร์+ซอฟต์แวร์อีกหน่อย แล้ว Software Engineer นี่คือพวกอะไรหรอ งงๆอยู่ครับ คือพวกออกแบบ+สร้าง+พัฒนา+ดูแลใช่หรือเปล่าคับ
ของต่างประเทศไม่รู้ แต่ผมว่าของไทยต้องเป็นคนคุยกับลูกค้าด้วยแหละครับ แบบต้องการโปรแกมลักษณะไหน วางแผนโปรเจคด้วย(เป็นโปรเจคแมนเนเจอร์) งานมันก็คาบๆ กันอยู่
(จากที่เรียนมา)
May the Force Close be with you. || @nuttyi
ในต่างประเทศผมก็ไม่รู้เช่นกัน แต่ในไทย Software En. เป็นแค่วิชาหนึ่งใน Com En. กับ Com Sci อ่ะคับ เรียนไปเพื่อให้รู้ถึงปัญหาของการออกแบบ Software การควบคุมโครงการพัฒนา software การคิดมูลค่าของ software แล้วก็พวกการยกระดับการพัฒนาพวก CMMI ขั้นพื้นฐานอ่ะคับ
ผมก็รู้ไม่มากเท่าไหร่ ผิดถูกยังไง เดี๋ยวคงมีคนรู้จริงมาอธิบายต่อไปครับ
+1 ครับ
เพิ่มเติมอีกนิด คือ เรียนรู้เกี่ยวกับ life cycle ของ software
software ก้อมีวันหมดอายุ ดังนั้นจึงต้องมีการออกแบบ วางแผน ประเมิน software
เลือกใช้เทคโนโลยีที่ดี ควบคุมมาตรฐานของ software ให้มีประสิทธิภาพ
ปัจจุบันมีดัชนีชี้วัดมาตรฐานแบ่งไปตาม CMMI Level ครับ
จากที่รู้มาป.ตรีในไทยไม่มีที่ไหนเปิดสอนสาขาSoftware Engineer
มีแต่เรียนวิชาของ Software Engineer ทั้ง Com En.,Com Sci และ IT
ฉนั้นเท่าที่เคยเรียนมา SoftwareEn. ไม่จำเป็นต้องเขียนโค๊ดเก่ง ไม่จำเป็นต้องพูดเก่ง แต่ต้องออกแบบและแก้ไขโครงสร้างและส่งต่อให้โปรแกรมเมอร์โดยที่ผิดพลาดน้อยที่สุด
มีครับอย่างน้อยก็ มช. ของจุฬาพึ่งโดนยุบไป(ปี 3 ปีนี้เป็ยรุ่นสุดท้าย)
May the Force Close be with you. || @nuttyi
KU มีครับ หลักสูตร SKE
ที่ ม แม่ฟ้าหลวง ก็มีครับ เรียนอยู่ครับ ^_^ อากาศดีๆ ดูหมอกยามเช้าๆทุกวัน หุหุ ถ้าอยากรู้ว่ามาเรียนที่นี่แล้ว จะต้องเจอกับวิชาอะไร กดลิ้งเลยครับ http://bit.ly/dHeweR แต่อาจจะยังไม่ครบทุกวิชาน้ะครับ เพราะสำหรับเด็กใหม่ ได้มีการปรับปรุงหลักสูตร ตามนโยบายของมหาวิทยาลัย
ปล.ที่นี่ เรียนเป็นภาษาอังกฤษทุกสาขาวิชา (ยกเว้น นิติศาสตร์) แต่ไม่ใช่หลักสูตรอินเตอร์น้ะครับ
กบจริงนะเรา T T
ตามข้างบนเลยคับ ผมมาหาข้อมูลก่อนจะเลือกจะไปเรียนที่มช.คับ
แล้วทำไมที่จุฬาโดนยุบละนั้น ชักเสียวๆละนั้น -*-
/>o</
มันไม่ฮิตน่ะครับ ที่สำคัญมันเรียนแยก ไปเรียนที่น่าน.. เหตุผลอื่นไม่รู้
May the Force Close be with you. || @nuttyi
CAMT ผมก็เรียนอยู่ แต่สาขาแอนนิเมชันอ่ะ
ลองดูครับ อันนี้ของเกษตร http://iup.eng.ku.ac.th/se.php
Software Engineering นี่ผมเรียกว่าศาสตร์แห่งการ "ผลิต" ซอฟต์แวร์ครับ
ต้องเข้าใจก่อนว่ามันไม่ใช่การเรียน "เขียนโปรแกรม" เพียงอย่างเดียว หัวใจของ Software Engineering คือการ "ทำซ้ำได้" ครับ ถ้าเราบอกว่าเราเขียนโปรแกรมบัญชีให้กับบริษัท A แล้วความซับซ้อนประมาณหนึ่ง เขียนเสร็จแล้วไปทำใหม่ให้กับบริษัท B ที่ความซับซ้อนเท่า ก็ควรใช้เวลาเท่ากันหรือน้อยกว่า ภายใต้คุณภาพที่เท่าเทียมกัน
มันมีเรื่องราวอีกเยอะมากที่จะทำให้บอกได้ว่า เราสามารถผลิตซอฟต์แวร์แบบเดิมได้คุณภาพเท่าเดิมในเวลาประมาณเดิม เช่น
เรื่องที่เรียนใน Software Engineering จึงไม่ใช่แค่การเรียนเขียนโปรแกรมครับ มันรวมไปถึงการแบ่งงาน, การจัดการ, การทดสอบ, ฯลฯ
lewcpe.com, @wasonliw
มันคือแนวคิดการทำงานตามหลักวิศวกรรมเพื่อให้ซอฟท์แวร์ที่ผลิตออกมามีมาตรฐานน่ะครับ
สำหรับผม แปลตรงตัวเลยครับมันก็คือ "วิศวกรรมซอฟท์แวร์"
ลองเปรียบเทียบง่ายๆ อุตสาหกรรมการผลิตรถยนต์ก็จะต้องมีวิศวกร (Engineer) คอยควบคุม
ส่วนประกอบต่างๆของรถยนต์ เช่น เครื่องยนต์ ตัวถัง ระบบจ่ายไฟ ระบบอิเล็กทรอนิคส์ ฯลฯ
การจะผลิตรถยนต์ขึ้นมาใหม่ 1 รุ่นใช่ว่าจะต้องออกแบบหรือสร้างสิ่งเหล่านี้ขึ้นมาใหม่ทั้งหมด
วิศวกรจะต้องใช้ประโยชน์จากการวิจัยและโครงสร้างที่มีจากรถรุ่นก่อนมาพัฒนาต่อ(หรือบางส่วนก็ก้อปปี้มาใช้เลย)
เช่นเดียวกันกับซอฟแวร์ ถ้าเอาใกล้ๆตัวก็ซอฟแวร์เกมครับ
การจะสร้างเกม 1 เกมก็ใช่ว่าจะต้องมานั่งโค้ดกันตั้งแต่ระบายสีลงบนจอทีละจุด เดี๋ยวนี้เค้ามี API
หรือ Engine ให้ใช้กันแทบทุกส่วนไม่ว่าจะเป็น Graphic, AI, 3D, Physic, Network
หรือ Game Engine ที่แค่เคาะโค้ดไม่กี่บรรทัด ใส่ภาพสวยๆเข้าไปแล้วออกมาเป็นเกมได้ก็ยัังมี
ศาสตร์ในการสร้างสิ่งเหล่านี้ขึ้นมาตั้งแต่ต้นจนจบก็คือ "วิศวกรรมซอฟท์แวร์" ครับ
ถ้าเพียงแค่การเขียนโค้ดหรือการออกแบบโครงสร้างซอฟแวร์ ไม่น่าจะเรียกว่า "วิศวกรรมซอฟท์แวร์"
แต่การนำความรู้ตรงนั้นไปประยุกต์และทำให้เกิดการนำไปใช้ต่อ สามารถนำไปวัดผลและประเมินเพื่อการพัฒนาต่อ
น่าจะเหมาะสมกับคำว่า "วิศวกรรม" มากกว่าครับ
เห็นด้วย +1
ศาสตร์ของ Software Engineering เกิดมาเนื่องจากเหตุการณ์ Software Crisis หรือแปลตรงตัวก็คือ วิกิตการณ์ซอฟต์แวร์ ซึ่งเป็นเหตุการณ์ที่บริษัทพัฒนาซอฟต์แวร์มากมายพัฒนาโปรแกรมขึ้นมาได้อย่างไม่มีคุณภาพ โปรแกรมเสร็จจริง แต่มีปัญหาใช้ไม่ได้ มีข้อผิดพลาดมากมาย ดังนั้นเพื่อให้เกิดคุณภาพจึงได้มีการนำหลักการของ Engineering ซึ่งมีทั้งการหลักการของการวิเคราะห์และออกแบบเข้ามาประยุกต์กับ Software จึงทำให้เกิดศาสตร์ทางด้าน Software Engineering ขึ้นมา
ผมมองงี้ครับ
เหมือนที่คุณ lew บอก SE ไม่ใช่เน้นที่เขียนโปรแกรม แต่เน้นไปที่กระบวนการพัฒนาของโครงการเพื่อให้ได้คุณภาพตามมาตรฐาน ซึ่งสามารถใช้ทรัพยากรได้อย่างคุ้มค่า ทำงานได้อย่างรวดเร็ว และลดปัญหาต่างๆ ที่อาจจะเกิดขึ้นให้ได้มากที่สุดครับ
ถ้ายกตัวอย่างง่ายๆ ก็ตามหลักการ Software Development Life Cycle (SDLC) เช่น Waterfall Model ซึ่งเป็นขั้นตอนการพัฒนาโครงการที่ปัจจุบันใช้กันค่อนข้างเยอะ (น่าจะใช้เยอะเพราะมันเป็นไปตามธรรมชาติของการพัฒนา ตามความคิดของผมนะ) โดยตัวโมเดลจะเริ่มที่ Requirements -> Design -> Implementation -> Verification -> Maintenance ครับ (ตัวนี้เหมือนจะเป็น Waterfall แบบเก่าคือทำเสร็จเป็นเรื่องๆ ไป แต่แบบใหม่จะสามารถทำย้อนกลับได้ด้วย คือหากกำลังทำ Design อยู่แล้วพบว่าผิดพลาดไม่ตรงตาม Requirement ก็จะไปทำส่วนของ Requirements ใหม่)
ที่กล่าวมาข้างต้นเป็นหลักการคร่าวๆ ของ Waterfall Model ซึ่งเป็น SDLC หลักการของ Software Engineering ครับ โดยจากทั้งหมดที่กล่าวมายังไม่ได้พูดถึงเรื่อง Quality เพิ่มเติมอีกนะครับ ไม่ว่าจะเป็นเรื่องของ CMMI มาตรฐานในการพัฒนา หรือการทำ Software Configuration Management เพื่อควบคุม Version และปัญหาในการพัฒนา และยังมีเรื่องอื่นๆ ที่ต้องศึกษาอีก
และสุดท้ายโดยส่วนตัวแล้วไม่ทราบเหมือนกันว่าถ้าเป็น Software Engineer มันทำอะไร แต่เท่าที่ได้ยินมาเหมือนจะเป็นแค่ Developer หรือ Programmer เท่านั้นเองเพียงแค่เปลี่ยนชื่อเรียกใหม่เฉยๆ และโดยศาสตร์ของ Software Engineering เป็นเพียงแค่ศาสตร์ๆ หนึ่ง ซึ่งผมคิดว่า Software Engineer เพียงตำแหน่งเดียวคงไม่สามารถทำทั้งหมดที่กล่าวมาได้แน่นอน ดังนั้นจึงมีการแตกแยกไปไหนมากมายหลายอาชีพ ทั้ง Project Manager, Business Analyst, System Analyst, System Architect, Developer, Tester, Quality Assurance, Software Configuration Management Engineer, etc. โดยสายอาชีพที่กล่าวมานี้จะมีความเกี่ยวข้องกับศาสตร์ของ Software Engineering ครับ
ข้อมูลจากความรู้ที่ได้เรียน ได้ศึกษา และได้ฟังมาจากผู้มีประสบการณ์ในการทำงานเกี่ยวกับ Software Engineering ครับ
ผมว่า Waterfall model เป็นวิธีที่ใช้ไม่ได้ผลเท่าไหร่นะ ถ้าอยากให้ software ที่ได้ตรงใจลูกค้ามากที่สุด ถึงแม้ว่าเราจะมีขั้นตอนของการทำ requirement analysis แต่เชื่อเถอะครับ ลูกค้าก็คงไม่บอกลายละเอียดในทุกๆจุดที่จะทำให้ software ตรงความต้องการได้ในครั้งเดียว
ผมยกตัวอย่างการสร้างบ้าน ลูกค้าบอกอยากได้บ้านสไตล์ยุโรป ถ้าเรามีทีมสถาปนิกทำการ simulation รูปแบบบ้านได้ออกมาก่อน แบบนี้ลูกค้าที่เห็นคงสั่งปรับเปลี่ยนรูปแบบได้ทันทีครับ เพราะสิ่งที่ลูกค้าต้องการ คือ รูปร่างหน้าตา
แต่การออกแบบ software นอกจากรูปร่างหน้าตาที่จะต้องออกแบบให้ดูแล้ว ยังต้องมีการออกแบบการใช้งานด้วย ถ้าลูกค้าต้องการ software ที่สามารถส่ง email ได้ เหล่าวิศวกรยังต้องมานั่งเลือกว่าจะใช้เทคโนโลยี pop3/smtp, exchange server, imap ซึ่งแต่ละอย่างก็มีข้อดีข้อเสียต่างกันไป ถ้าเลือกมาไม่ตรงใจลูกค้า ก็อาจจะต้องทำใหม่ได้
ดังนั้น Software Engineer จะต้องมีการมาจัดการเรื่อง Change ด้วยครับ ว่าจะยอมให้เปลี่ยนแปลงอะไรได้บ้าง ควบคุมเวลา ค่าใช้จ่าย จำนวนคนที่ใช้ทำงาน ฟีเจอร์ การ support ในอนาคต เพราะตามลำพังถ้าไม่คิดถึงเรื่องพวกนี้ก่อนล่วงหน้า Software ที่ส่งมอบไปอาจจะไม่ได้เป็นที่ต้องการของลูกค้าครับ
+1
แล้วก็ที่ผมยก Waterfall เพราะใช้กันเยอะและเข้าใจได้ง่าย ไม่ซับซ้อนมากโดยส่วนใหญ่จะใช้เยอะกับหน่วยของภาครัฐเนื่องจากมันต้องเป็นไปตามกระบวนการเป็นขั้นเป็นตอน (จะทำ Process แต่ล่ะอย่างนานมาก อย่างจะหาข้อสรุปของ Requirement ทีก็ต้องดูแล้วดูอีกกว่าจะได้ก็เป็นหลายเดือน) แล้วก็แต่ล่ะ Model ก็มีข้อดีข้อเสียต่างกันไป ก็ต้องเลือกใช้ให้เหมาะสม แล้วก็ถ้าอยากให้ได้ตรงใจลูกค้าก็ต้องใช้ Agile แต่ก็มีข้อเสียที่ไม่ค่อยจะมี Document มา Support สักเท่าไร หรือจะใช้แบบ RUP ก็ได้แต่ก็ต้องการคนที่มีความสามารถนิดนึ่ง
+1 ต้องยอมรับเลยว่าเรื่องของ Change และการพัฒนาซอฟต์แวร์เป็นของคู่กัน Software Engineering เองก็เกิดขึ้นมาเพื่อบริหารจัดการในส่วนนี้ด้วยเหมือนกัน เพื่อเป็นการอธิบายเพิ่มเติมให้คุณ By_Myself ที่ได้ตั้งกระทู้นี้ขึ้นมา ผมขอเสริมในเรื่องของการจัดการ Change อีกสักนิดละกันครับ
ถ้าหากเรามาลองคิดดูดีดีส่วนย่อยๆ ต่างๆ ของ Software Engineering นั้นก็ส่วนเกี่ยวข้องกับ Change ด้วยทั้งนั้น ผมขอเริ่มที่
โดยส่วนตัวแล้วผมเชื่อว่า Software Engineering นั้นจะเน้นที่ ส่วนหลักๆ ก็คือ Change Management เพื่อรับมือกับความเปลี่ยนในทุกๆ ด้านที่อาจเกิดขึ้นระหว่างการพัฒนา และ Development process เพื่อให้การพัฒนาเป็นไปตามกระบวนการที่ดีที่สุด (process ที่ดีจะต้องสร้างจากการนำ best practice ในแต่ละจุดมาผสานเข้าด้วยกัน) การควบคุมคุณภาพของ Software ก็จะทำได้ง่ายขึ้น ส่งผลให้การพัฒนา Software มีมาตราฐานที่ดีมากยิ่งขึ้น ปัญหาจากการใช้งานลดน้อยลง และสามารถพัฒนาได้แล้วเสร็จไวกว่าเดิม
การทดสอบกล่องขาว กล่องดำ, เฟสการพัฒนา, ไดอะแกรมแบบต่างๆ มากมาย
ลองดูพวก Software Reverse Engineering ไปเลยสนุกกว่า