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


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.