อะไรคือความแตกต่างที่สำคัญระหว่างวิศวกรซอฟต์แวร์และโปรแกรมเมอร์? [ปิด]


103

อะไรคือความแตกต่างที่สำคัญระหว่างวิศวกรซอฟต์แวร์และโปรแกรมเมอร์?


1
Joel ได้ถามคำถามนี้ไปแล้วนี่ไม่ใช่คำถามง่าย ๆ ที่จะตอบและฉันไม่แน่ใจว่ามีคำตอบที่ชัดเจนหรือไม่ แต่ฉันรู้ว่าโจเอลได้ตั้งคำถามนั้นแล้ว
Denaem

คำตอบ:


80

เมื่อทำการจ้างงานเรามองหาความแตกต่างระหว่างคนที่จะสามารถช่วยเราออกแบบระบบกำหนดกระบวนการสร้างข้อกำหนดทางเทคนิคดำเนินการ refactoring ขั้นสูง ฯลฯ และผู้ที่จะช่วยเราเขียนโปรแกรมงานออกจากรายการตรวจสอบ . ฉันเชื่อว่าคุณสามารถโทรหาอดีตวิศวกรซอฟต์แวร์และโปรแกรมเมอร์รายหลังได้


10
คุณช่วยอธิบายให้กระจ่างได้ไหมคุณจ้างทั้งสอง (สำหรับงานที่แตกต่างกัน) หรือแค่วิศวกรซอฟต์แวร์?
Jaap

2
คุณสามารถเรียกอดีตวิศวกรซอฟต์แวร์ แต่ฉันจะไม่ทำ ในฐานะที่เบรนแดนขานรับนั่นเป็นหน้าที่ของสถาปนิกซอฟต์แวร์
JᴀʏMᴇᴇ

131

มันขึ้นอยู่กับ บริษัท จริงๆเพราะฉันไม่คิดว่าจะมีกรอบทางกฎหมายในการบังคับใช้นิกายหรืออื่น ๆ หรืออย่างน้อยก็ไม่ทราบว่าสิ่งนี้อาจแตกต่างกันไปในแต่ละประเทศ (ตัวอย่างเช่นการใช้คำศัพท์ "วิศวกร" มีการควบคุมอย่างเป็นธรรมในประเทศฝรั่งเศส แต่มีหลากหลายรูปแบบที่ได้รับอนุญาตสำหรับคดี "ที่ไม่เหมาะสม")

ที่ถูกกล่าวว่าแนวโน้มทั่วไปไปเช่นนี้:

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

  • นักพัฒนาตำแหน่งมักจะคิดว่าซุปเปอร์ประเภทของตำแหน่งโปรแกรมเมอร์ มันครอบคลุมความรับผิดชอบเดียวกันรวมถึงความสามารถในการออกแบบและออกแบบส่วนประกอบซอฟต์แวร์และการเขียนเอกสารทางเทคนิคสำหรับมัน (รวมถึงข้อกำหนด) คุณสามารถ - อย่างน้อยในทางเทคนิค - นำคนอื่น ๆ (เช่นโปรแกรมเมอร์) แต่ไม่จำเป็นต้องเป็นทีม (มีฝอย ... )

  • วิศวกรตำแหน่งมักจะบ่งบอกว่าคุณเป็นนักพัฒนาที่มีประเภทที่เฉพาะเจาะจงของการศึกษาระดับปริญญาบางความรู้ทางด้านวิศวกรรมและมีความสามารถในการออกแบบระบบ (เช่นใน: การรวมกันของส่วนประกอบซอฟต์แวร์ / โมดูลที่ร่วมกันในรูปแบบนิติบุคคลซอฟต์แวร์ทั้งหมด) . โดยทั่วไปคุณเห็นภาพที่กว้างขึ้นและคุณจะมีความสามารถในการออกแบบและการอธิบายมันและแยกออกเป็นโมดูลที่มีขนาดเล็ก

แต่ทั้งหมดนี้เป็นที่ถกเถียงและที่ผมกล่าวว่าไม่มีความต้องการทางกฎหมายที่ฉันรู้ในประเทศสหรัฐฯ / อังกฤษ ที่ถูกกล่าวว่าในฝรั่งเศสคุณสามารถเรียกตัวเองว่า "วิศวกร" ถ้าคุณมาจากโรงเรียนวิศวกรรม (ได้รับการยอมรับจาก Commission des Titres d'Ingenieurs หรืออะไรทำนองนั้น) คุณไม่สามารถพูดได้ว่าคุณมี "ปริญญาวิศวกร" แต่คุณสามารถพูดได้ว่าคุณมี "ปริญญาในสาขาวิศวกรรม" หากคุณเรียนสาขาที่ตกอยู่ภายใต้การทำงานของวิศวกรรมและเทคโนโลยี

อาจเป็นได้ว่าบางประเทศมีความแตกต่างคล้ายกันฉันไม่รู้จริงๆ

กลับไปที่ชื่อวิศวกรซอฟแวร์ ... เมื่อคนหนึ่งของครูของฉันบอกว่าชั้นเรียนของเรา - และถูกต้องเพื่อ - ว่าไม่มีสิ่งดังกล่าวเป็นของวันนี้เป็นสิ่งที่เรียกว่า "วิศวกรรมซอฟต์แวร์" เพราะสิ่งวิศวกรรม (ไม่ว่าจะเป็นอาคารยานพาหนะชิ้นส่วนของฮาร์ดแวร์ ... ) หมายความว่าคุณมีความสามารถในการจินตนาการการออกแบบและทุกขั้นตอนของการผลิตและเพื่อทำนายความถูกต้องของทรัพยากรที่คุณต้องการ ต้นทุนการผลิต

นี่คือความจริงของสาขาวิชาวิศวกรรม "ที่แท้จริง" ที่สุด แน่นอนว่ามีความผันผวนแน่นอน (ราคาของวัสดุจะแตกต่างกันไปตามกาลเวลา) แต่มีแบบจำลองทางทฤษฎีที่ จำกัด มาก (สำหรับการออกแบบและการวางแผน) และแบบจำลองเชิงประจักษ์ (สำหรับการรักษาแบบเดิม ๆ ภายในข้อ จำกัด ที่เข้าถึงได้) ที่ช่วยให้คุณทำนายวันที่สิ้นสุดของโครงการและการใช้ทรัพยากรได้

ปัญหาที่สำคัญของซอฟต์แวร์คือยังไม่มี เราต้องการตั้งเป้าหมายสำหรับวิศวกรรมซอฟต์แวร์ แต่เรายังไม่ได้อยู่ที่นั่นจริงๆ เนื่องจากเรามีสภาพแวดล้อมที่คล่องแคล่วและมีพลวัตมีข้อ จำกัด ที่ผันแปรอย่างมากสำหรับโครงการและยังขาดวุฒิภาวะในการหวนกลับในกระบวนการของเรา แน่นอนว่าเราสามารถบอกได้ว่าเราทำได้ดีกว่านี้ (สามารถโต้แย้งได้กับข้อมูลที่หนักหน่วง) แต่เราได้รับมันมาตั้งแต่ยุค 60 (โครงการก่อนหน้านี้อยู่ใกล้กับคอมพิวเตอร์ที่ใช้ฮาร์ดแวร์เท่านั้นจึงใกล้ชิดกับวิศวกรรมจริงมากขึ้น ) ในขณะที่เราสร้างยานยนต์มานานกว่าศตวรรษยานพาหนะโดยทั่วไปสำหรับไม่กี่พันปีและสร้างมานานนับพันปีมากขึ้น (และได้รับการด่าสวยดีจริง ๆ ในบางส่วนของโลกทำให้คุณรู้สึกเหมือนเรา '

เราไม่สามารถที่จะกำหนดเวลาระบบคาดการณ์ได้อย่างถูกต้องเราไม่สามารถคาดการณ์ค่าใช้จ่ายในระบบได้อย่างถูกต้องเราไม่สามารถระบุระบบและลดความเสี่ยงโดยธรรมชาติและภายนอกอย่างมีประสิทธิภาพและ deterministically สิ่งที่ดีที่สุดที่เราสามารถทำได้คือสร้างการคาดเดาที่ดีพอและรองรับบัฟเฟอร์ในขณะที่พยายามอย่างดีที่สุดเพื่อปรับกระบวนการให้เหมาะสมเพื่อลดรอบและโอเวอร์เฮด

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

ดังนั้นจึงดูเหมือนว่าแทบจะไม่สามารถใช้แทนกันกับการกระทำที่เรียบง่ายของรูทีนการเขียนโปรแกรมหรือการกระทำขั้นสูงของการพัฒนาแอพพลิเคชั่น

ยังคงทุกอย่างเป็นเรื่องของแนวโน้ม เมื่อเร็ว ๆ นี้มันเป็นเรื่องธรรมดาที่จะมีทีม dev แนวนอนซึ่งทุกคนในทีมเป็นนักพัฒนาซอฟต์แวร์อาวุโส (ใช่แล้วเพราะมันทำให้เรารู้สึกพิเศษไม่ใช่หรือ?) โดยไม่มีความแตกต่างของอายุ (พอจริงในตัวฉัน ความเห็น) และทักษะที่ไม่แตกต่างกันมาก (uh-oh ... ) และความรับผิดชอบ (ตอนนี้มันไม่สามารถทำได้ดี

บางครั้งมันก็เป็นเพียงพลังแห่งนิสัยและเฉพาะกับวัฒนธรรมและศัพท์แสงของอุตสาหกรรม. ตำแหน่งเพิ่มเติมสำหรับการใช้งานการผลิตซอฟต์แวร์แบบฝังตัวสำหรับวิศวกรซอฟต์แวร์ ส่วนใหญ่เป็นเพราะมันอาจจะบอกเป็นนัยว่าคุณจะต้องจัดการกับฮาร์ดแวร์ด้วยเช่นกันในด้านนี้ดังนั้นคุณจึงต้องจัดการกับด้านอื่น ๆ ของการผลิตและ "ระบบ" ทั้งหมดที่คุณผลิต ไม่ใช่แค่บิตที่กำลังขันอยู่ข้างใน ในทางตรงกันข้ามของสเปกตรัมคุณไม่เห็นคำว่าวิศวกรถูกนำมาใช้ในตำแหน่งการผลิตซอฟต์แวร์ทางการเงิน อาจเป็นเพราะวิวัฒนาการเลียนแบบของอุตสาหกรรมนี้จากรุ่นก่อน (เช่นวิศวกรรมฝังตัวค้นหารากฐานในวิศวกรรมยานยนต์) หรือเพราะพวกเขาต้องการให้เครดิต / น้ำหนักมากหรือน้อย

และเพื่อให้แน่ใจว่าหลวมทุกคนในหมอกคุณจะพบชื่อเรื่องอื่นผสมกันทั้งคู่ (เช่น "Software Development Engineer" หรือ "Software Engineer in Test"!) จากนั้นคนอื่น ๆ ที่เน้นสะพานที่บ้าคลั่งมากขึ้นกับโดเมนอื่น ๆ ( คิดว่า "ผู้ออกแบบซอฟต์แวร์" และวิธี "สถาปัตยกรรมซอฟต์แวร์" อาจเป็นการขโมยคำศัพท์ที่ไร้ยางอาย) และปล่อยให้พวกเขาเข้ามา: Release Engineer, Change Development Manager, Build Engineer (อันนั้นจะไปที่ ffaaarrrrrr เช่นกัน) และบางครั้งก็แค่ "วิศวกร"

หวังว่าจะช่วยได้แม้ว่ามันจะไม่ใช่คำตอบจริงๆ

โอ้และนั่นหมายความว่า บริษัท ใหม่ของคุณกำลังพยายามล่อลวงคุณด้วยชื่อใหม่หรือว่าพวกเขาไม่สนใจชื่อเรื่องหรือว่าคุณกำลังจะมีตำแหน่งระดับสูงขึ้น วิธีเดียวที่จะรู้คืออ่านสเป็คงานของคุณพูดคุยกับพวกเขาและในที่สุดก็ให้ภาพและตัดสินด้วยตัวคุณเอง ฉันหวังว่ามันเป็นตัวเลือกหลังและคุณมีความสุขกับมัน (และอาจเป็นเงินสดมากขึ้นในนั้น) ;)


12
หนังสือ "โปรแกรมเมอร์เชิงปฏิบัติ" ยังระบุด้วยว่าซอฟต์แวร์ไม่เหมือนวิศวกรรม ในขณะที่คุณสามารถวางแผนบ้านหรือตึกระฟ้าเช่นการเปรียบเทียบสำหรับวิศวกรรมซอฟต์แวร์แทบจะไม่สามารถใช้งานได้ พวกเขาระบุว่า: ซอฟต์แวร์เป็นเหมือนการทำสวน วางแผนสวนปลูกพืช จากนั้นดูว่าอะไรคือสิ่งที่เติบโตกำจัดวัชพืชและปลูกพืชใหม่
Falcon

6
"เมื่อครูของฉันบอกชั้นเรียนของเราว่าไม่มีสิ่งนี้ ณ วันนี้เรียกว่า" วิศวกรรมซอฟต์แวร์ "เพราะวิศวกรรมบางอย่างหมายความว่าคุณมีความสามารถในการมองเห็นการออกแบบและทุกขั้นตอนของการผลิตและคาดการณ์ความแม่นยำ ทรัพยากรที่คุณต้องการ ". นั่นอาจเป็นเรื่องจริงในขณะที่เขียน เช่นเดียวกับสถาปัตยกรรมเราไม่สามารถคาดการณ์ค่าใช้จ่ายได้หากไม่ทราบข้อกำหนด (ตึกระฟ้ามีค่าใช้จ่ายเท่าไหร่ฉันจะไม่บอกคุณว่าต้องสูงเท่าไรก่อนที่คุณจะเริ่มสร้าง ... ) แต่เราสามารถทำนายค่าใช้จ่ายในภายหลังได้จากกลุ่มพัฒนาซอฟต์แวร์ที่พัฒนาแล้ว
MSalters

1
@MSalters: แน่นอนว่าคุณสามารถเปลี่ยนสิ่งนี้ได้: เช่น architeture เราไม่สามารถคาดการณ์ค่าใช้จ่ายได้หากไม่มีข้อกำหนด แต่แตกต่างจากสถาปัตยกรรมแม้จะมีข้อกำหนดที่กำหนดไว้อย่างดี (แม้ว่าเราจะเป็นของเหลวมากขึ้นเพราะพวกเขาคาดการณ์ได้ยากกว่าหรือเรามีแนวโน้มที่จะอนุญาตให้เปลี่ยนแปลง) เราไม่สามารถคาดการณ์ต้นทุนได้ คุณสามารถทำสิ่งนี้ในงานวิศวกรรมตามปกติจนถึงระดับความแม่นยำที่แม่นยำมากและขณะนี้เราสามารถระบุต้นทุนสำหรับสถานการณ์พิเศษได้มากกว่าใน SE เราคาดเดา (หยาบค่อนข้าง) เท่านั้น เราเริ่มดีขึ้นในการสร้างมัน แต่พวกเขาก็ยังเดาได้ค่อนข้างดี
haylem

3
@ Haylem: นั่นเป็นบรรทัดฐานในการพัฒนาซอฟต์แวร์ แต่ถ้าคุณทำงานใน บริษัท CMM ระดับ 4/5 คุณจะสังเกตเห็นว่าพวกเขาสามารถคาดการณ์ค่าใช้จ่ายและมักจะแนบระดับความมั่นใจ 95% กับพวกเขา พวกเขาเข้าใจฐานซอฟต์แวร์ของพวกเขาดีพอและมีความต้องการเพียงพอสิ่งกีดขวางบนถนนนั้นหายาก และค่าใช้จ่ายของสิ่งกีดขวางบนถนนจะลดลงเมื่อคุณมีประสบการณ์ในการจัดการกับมัน
MSalters

1
@pcurry: โปรดทราบฉันไม่ได้อ้างว่านี่เป็น "อนุกรมวิธานของฉัน" มันเป็นเรื่องปกติที่ได้รับการยกย่องจากนายหน้าและเงินเดือนขององค์กรและเป็นวิธีการที่ได้รับการยกย่องในหลักสูตร CS ด้านไอที พวกเขามักจะยิงกัน ดังนั้นฉันคิดว่าฉันแสดงมุมมองที่ถูกนำไปใช้โดย (เรียกว่า) วิศวกรซอฟต์แวร์มากกว่าโดย (อธิบายตนเอง) โปรแกรมเมอร์อย่างชัดเจน ไม่สำคัญว่าคุณจะเรียกตัวเองว่าอะไรมันสำคัญกว่าที่คนอื่นจะพิจารณาคุณว่าสำคัญ และมันก็สำคัญถ้าคุณใส่ใจเรื่องนั้น โดยส่วนตัวแล้วฉันไม่สนใจที่จะเป็นหนึ่งเดียวไม่เปลี่ยนฉัน
เฮย์เล็ม

81

วิศวกรซอฟต์แวร์คือคนที่ทำงานใน บริษัท ที่เรียกคนที่เขียนซอฟต์แวร์ให้พวกเขา "วิศวกรซอฟต์แวร์"

โปรแกรมเมอร์คือผู้ที่ทำงานกับ บริษัท ที่เรียกคนที่เขียนซอฟต์แวร์ให้กับพวกเขา "โปรแกรมเมอร์"

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


26
ฉันควรทราบว่าคำตอบนี้ไม่ได้เป็นเรื่องตลกจริงๆ
Jer

15

ดังนั้นจึงมี "วิศวกรซอฟต์แวร์" "โปรแกรมเมอร์" และ "นักพัฒนา" "Coder" และคุณจะไม่มีวันลืม "ผู้เชี่ยวชาญ SOA"

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

ในโฆษณาตำแหน่งงานความแตกต่างนั้นขึ้นอยู่กับบุคคล HR

บรรทัดล่าง: ทุกคนมีของตัวเองใน "สิ่งที่ทำให้พนักงานที่ดีที่ทำงานกับรหัส" และบางคนชอบที่จะเชื่อมโยงทักษะดังกล่าวและเช่นกับชื่อดังกล่าวและเช่น

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


10

ไม่มีความแตกต่าง พวกเขาเป็นสิ่งเดียวกัน อย่างไรก็ตาม บริษัท อาจมีคำบรรยายลักษณะงานอย่างเป็นทางการโดยใช้คำศัพท์และจากนั้นอาจมีความหมายเฉพาะของ บริษัท ต่อคำนั้น


8

การเขียนโปรแกรมเป็นเรื่องเกี่ยวกับรหัส วิศวกรรมซอฟต์แวร์เป็นเรื่องของผลิตภัณฑ์


3

ขึ้นอยู่กับว่า บริษัท กำหนดตำแหน่งอย่างไร อาจเป็นได้ว่าในฐานะวิศวกรซอฟต์แวร์คุณจะมีโอกาสในการตัดสินใจออกแบบมากขึ้นในขณะที่ในฐานะนักพัฒนาซอฟต์แวร์พวกเขาจะให้ไดอะแกรม UML แก่คุณและคุณจะเขียนโปรแกรม

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

เมื่อฉันเป็นสถาปนิก / นักพัฒนาชื่อของฉันคือนักวิทยาศาสตร์คอมพิวเตอร์ แต่ฉันจะบอกคนที่ฉันเป็นโปรแกรมเมอร์เนื่องจากสองคนแรกไม่ได้ถูกกำหนดอย่างง่ายดาย แต่คนส่วนใหญ่รู้ว่าโปรแกรมเมอร์ทำอะไร

หากชื่อเรื่องมีความสำคัญต่อคุณให้ยอมรับชื่อใหม่เนื่องจากวิศวกรจะมีเสียงดังกว่านักพัฒนา


3

ฉันไม่คิดว่าจะมี "ความแตกต่างอย่างเป็นทางการ" สำหรับประสบการณ์ของฉันที่อาจหมายถึง:

  • บริษัท บางแห่งใช้วิศวกรซอฟต์แวร์และนักพัฒนาซอฟต์แวร์เพื่ออ้างอิงในสิ่งเดียวกัน พวกเขาใช้คำศัพท์ที่พวกเขาชื่นชอบ
  • ส่วนอื่น ๆ ใช้ทั้งสองคำสำหรับตำแหน่งภายในที่แตกต่างกัน แต่บทบาทแตกต่างกันไปในแต่ละ บริษัท ! ในบางอย่างอาจเป็นเพียงความแตกต่างในฟังก์ชั่น (วิศวกรที่อ่อนนุ่มจะทำงานในการบำรุงรักษาและปรับปรุงระบบในขณะที่นักพัฒนาจะทำงานกับผลิตภัณฑ์ของ บริษัท ) หรืออาจเป็นลำดับชั้น (วิศวกรเป็นนักพัฒนาที่เหนือกว่า) หรือแม้แต่ วิศวกรขึ้นอยู่กับคำถามและคำตอบจริง ๆ !

นอกจากนี้ยังเป็นคำศัพท์ทางแฟชั่นที่เปลี่ยนไป ... คำแรกคือ "โปรแกรมเมอร์" จากนั้น "วิศวกรซอฟต์แวร์" และตอนนี้ดูเหมือนจะเป็น "นักพัฒนา" ...

เป็นการดีกว่าที่จะอ่านคำบรรยายลักษณะงานหรือกับคนใน บริษัท ที่เฉพาะเจาะจง


3

ในบางเขตอำนาจศาล "วิศวกร" มีความต้องการที่จะเป็นวิศวกรมืออาชีพ ในหมู่คนที่เชื่อถือได้ อย่างไรก็ตามในพื้นที่อื่นอาจไม่มีความแตกต่างเนื่องจากฉันเป็น "วิศวกรออกแบบ Softwere" ที่ทำงานในรัฐวอชิงตันเมื่อหลายปีก่อน


2

วิศวกรซอฟต์แวร์มักจะทำงานกับระบบที่มีขนาดใหญ่มากใช้เวลาหลายปีในการพัฒนาเช่น 5-16 ปีเป็นต้น โปรแกรมเมอร์มักจะมีต้นแบบของการเข้ารหัสและไม่มีอะไรอื่นอีกแล้ว แต่จริงๆแล้วมันขึ้นอยู่กับองค์กรที่คุณทำงานและวิธีที่ฝ่ายทรัพยากรบุคคลทำการตลาดตามที่อธิบายไว้ข้างต้น พวกมันเป็นสิ่งเดียวกัน อย่ายึดติดกับชื่อเรื่องมากเกินไปเพราะมันมีความหมายเหมือนกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.