การปฏิบัติแบบเฉพาะแบบใดที่อาจเรียกว่า "งานฝีมือซอฟต์แวร์" มากกว่า "วิศวกรรมซอฟต์แวร์"? [ปิด]


11

แม้ว่าจะไม่ใช่ความคิดใหม่ดูเหมือนว่าจะมีความสนใจในฝีมือการผลิตซอฟต์แวร์เพิ่มขึ้นอย่างมากในช่วงสองสามปีที่ผ่านมา (โดยเฉพาะอย่างยิ่งหนังสือชื่อ Clean Code ที่มักจะแนะนำคือClean Code: Handbook of Agile Software Craft )

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

ในการวาดความคล้ายคลึง - มีอาคารจำนวนมากที่สร้างขึ้นใน 50s และ 60s ในสไตล์ที่ทันสมัยมากซึ่งใช้เวลาน้อยมากบัญชีของคนที่จะอาศัยอยู่ในพวกเขาหรือว่าอาคารเหล่านั้นจะอายุเมื่อเวลาผ่านไป อาคารหลายหลังที่พัฒนาอย่างรวดเร็วกลายเป็นชุมชนแออัดหรือพังยับเยินมานานก่อนที่จะมีชีวิต ฉันแน่ใจว่านักพัฒนาซอฟต์แวร์ส่วนใหญ่ที่ใช้เวลาไม่กี่ปีภายใต้การคาดการณ์ของพวกเขาจะได้รับรหัสฐานที่คล้ายคลึงกัน

สิ่งที่เฉพาะเจาะจงที่ช่างฝีมือซอฟต์แวร์อาจทำคือวิศวกรซอฟต์แวร์ (อาจเป็นคนเลว) อาจไม่ได้?


1
อุปมานั้นดูไม่เข้าท่า ทั้งฝีมือซอฟต์แวร์และวิศวกรรมซอฟต์แวร์มีเป้าหมายเดียวกัน (และส่วนได้เสีย) ในการปรับปรุงประโยชน์ในระยะยาวของซอฟต์แวร์
rwong

3
ฉันคิดว่าประเด็นนี้ส่วนใหญ่เป็นปัญหาไม่ว่าคุณจะพิจารณา "วิศวกร" หรือ "ช่างฝีมือ" ชื่อที่ดูเท่ห์กว่าและคำตอบปัจจุบันดูเหมือนจะพิสูจน์ได้ว่า ชื่อเรื่องใดก็ตามที่คุณต้องการชัดแจ้งนัยว่าบุคคลนั้นรู้ว่ากำลังทำอะไรอยู่
Ben Brocka

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

มันฟังดูเหมือนเป็นชื่อที่เสแสร้งจริงๆที่จะให้ตัวเอง
michaelsnowden

คำตอบ:


13

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

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

ความหลงใหลเล็กน้อยครอบคลุมสิ่งเหล่านี้โดยไม่ทำให้เหงื่อออก


ฉันคิดว่าอันสุดท้ายมีความสำคัญอย่างยิ่ง
Lovis

7

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

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

สิ่งที่เฉพาะเจาะจงที่ช่างฝีมือซอฟต์แวร์อาจทำคือวิศวกรซอฟต์แวร์ (อาจเป็นคนเลว) อาจไม่ได้?

ไม่มีอะไร - วิศวกรเป็นช่างฝีมือ ... แต่มากกว่านี้ วิศวกรรมสร้างขึ้นด้วยฝีมือ

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

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


2
และคุณมีการศึกษาเพื่อสำรองประสบการณ์ของคุณแน่นอนดีใจที่คุณไม่ได้พูดว่า "เป็นทางการ"
treecoder

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

แม้ว่านั่นไม่ได้หมายความว่าคนที่ไม่มีการศึกษาอย่างเป็นทางการนี้ไม่สามารถฝึกวิศวกรรม พวกเขาไม่สามารถเรียกตัวเองว่าวิศวกรในฐานะมืออาชีพ
Thomas Owens

1
ฉันไม่เห็นด้วยวิศวกรไม่จำเป็นต้องเป็นช่างฝีมือ
นิโคล

2
@Renesis ตามคำนิยามวิศวกรรมเป็นงานฝีมือ คำจำกัดความของงานฝีมือ: "ศิลปะการค้าหรืออาชีพที่ต้องใช้ทักษะพิเศษโดยเฉพาะทักษะการใช้" วิศวกรรมเป็นอาชีพที่ต้องใช้ทักษะพิเศษดังนั้นจึงเป็นงานฝีมือ อย่างไรก็ตามมันยังเป็นการประยุกต์ใช้ทฤษฎีทางวิทยาศาสตร์ (เหนือสิ่งอื่นใด) ซึ่งทำให้มันมากขึ้น
โธมัสโอเวนส์

2

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

เป้าหมายของมันคือสองเท่า: คืนความไว้วางใจในโปรแกรมเมอร์และเพื่อทำเช่นนั้นยกระดับคุณภาพของซอฟต์แวร์และทักษะการพัฒนา

Sw Craftsmanship ส่งเสริมการปฏิบัติทางเทคนิคเช่น:

  • หลักการออกแบบที่เป็นของแข็ง
  • รูปแบบการออกแบบ
  • TDD (อุปมา "บัญชีสองรายการ")
  • ...

และการปฏิบัติของทีม / องค์กร:

  • การเขียนโปรแกรมคู่
  • การให้คำปรึกษา
  • รหัส katas
  • Dojos / โค้ดถอย
  • ...

ดังนั้นฉันจะบอกว่าความแตกต่างระหว่าง 2 ชัดเจน: ฝีมือซอฟต์แวร์พยายามที่จะแก้ไขปัญหาส่วนใหญ่ของวิศวกรรมซอฟต์แวร์ที่มีมานานกว่า 40 ปีซึ่งวันนี้ทำให้วินัยของเราดูไม่น่าเชื่อถือและพิการด้วยประวัติความล้มเหลว


1
ฉันไม่เห็นด้วย - เหตุผลที่วิศวกรรมซอฟต์แวร์ล้มเหลวก็เพราะไม่มีวิศวกรช่างฝีมือเท่านั้นที่แกล้งเป็นวิศวกร นาซ่าไม่ได้ส่งยานอวกาศไปยังดวงจันทร์โดยใช้ช่างฝีมือ!
gbjbaanb

@gbjbaanb ฉันคิดว่ามันค่อนข้างตรงกันข้าม - เรามีวิศวกรและนั่นคือเหตุผลที่พวกเขาพยายามที่จะยึดแบบจำลองทางวิศวกรรมแบบดั้งเดิมและความคิดจากอุตสาหกรรมอื่น ๆ ลงบนซอฟต์แวร์ แต่มันไม่ได้ผล
guillaume31

ยานอวกาศไม่ได้ทำจากสิ่งที่จับต้องไม่ได้ซึ่งสามารถออกแบบใหม่ปรับโครงสร้างและปรับใช้ซ้ำได้ กฎหมายที่พวกเขาเชื่อฟังส่วนใหญ่แตกต่างจากโปรแกรมซอฟต์แวร์
guillaume31

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

โปรดระบุ "ความคิดของวิศวกร" ในบริบทของซอฟต์แวร์
guillaume31

1

ไปที่http://manifesto.softwarecraftsmanship.org/ฉันจะได้สิ่งต่อไปนี้

ช่างแตกต่างจากการรับรู้แบบดั้งเดิมของ "วิศวกร" เพราะ

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

4
จริงๆแล้วทุกหัวข้อย่อยอธิบายวิศวกรที่ดี โดยเฉพาะอย่างยิ่ง 1, 2 และ 4
Thomas Owens

@ThomasOwens แล้ววิศวกรที่ไม่ดีล่ะ? เขายังเป็นช่างฝีมือหรือไม่? หรือช่างฝีมือดีหรือไม่ดี?
ร่าเริง

@Eurhoric ฉันไม่คิดว่าคุณจะเป็นวิศวกรที่ดีได้โดยไม่ต้องเป็นช่างฝีมือที่ดี มันเหมือนฉาก คุณต้องบรรลุ "ช่างฝีมือดี" ก่อนที่คุณจะบรรลุ "วิศวกรที่ดี" อย่างไรก็ตามคุณสามารถเป็นช่างฝีมือที่ดีและไม่ใช่วิศวกรที่ดีได้
Thomas Owens

1

ลุงบ๊อบบอกเป็นนัยว่าการเขียนโปรแกรมเป็นระเบียบวินัยที่อายุน้อยมากซึ่งยังไม่มีกฎหมายหรือกฎระเบียบที่มั่นคงที่รับรองโดยรัฐบาล (หรือเป็นเฟรดเดอริกบรูคส์) ฉันไม่ได้อ้างอิงหนังเรื่องนี้ที่นี่

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

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

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


0

Refactoring เพื่อรูปแบบ

นั่นคือการสร้างบางสิ่งบางอย่างที่สอดคล้องกับข้อกำหนดซอฟต์แวร์ 90% จากนั้นปรับโครงสร้างโครงการทั้งหมดให้เป็นการออกแบบที่สะอาดและสง่างาม

โดยปกติแล้ววิศวกรรมซอฟต์แวร์จะป้องกันไม่ให้คุณทำเช่นนี้เพราะมีคุณสมบัติตรงตามข้อกำหนด 90% หมายความว่าซอฟต์แวร์มีมูลค่าทางธุรกิจเพียงพอต่อลูกค้าว่าไม่ควรแก้ไขด้วยวิธีการที่สำคัญ (ยกเว้นการแก้ไขข้อบกพร่องที่มีลำดับความสำคัญสูง)

วิศวกรรมซอฟต์แวร์จะแนะนำให้คุณสร้างความเสถียรให้กับซอฟต์แวร์ ณ จุดนี้

นอกจากนี้หากโครงการไม่ได้เริ่มต้นด้วยการออกแบบที่หรูหราตั้งแต่แรกเริ่มก็จะถือว่าเป็นโครงการที่ดำเนินการไม่ดี(โดยไม่คำนึงถึงผลลัพธ์ของโครงการ) ตามวิศวกรรมซอฟต์แวร์

สไปค์โซลูชั่น

การออกแบบที่ได้รับแรงบันดาลใจจากการแก้ปัญหาขัดขวางเป็นปกติไม่เป็นที่ยอมรับตามวิธีการทางวิศวกรรมซอฟต์แวร์ที่แพร่หลาย

การเลิกด้วยเหตุผลใด

ในวิศวกรรมซอฟต์แวร์การเลิกประเภทใด ๆ จะได้รับอนุญาตให้เกิดขึ้นเมื่อสิ้นสุดวงจรชีวิตของระบบซอฟต์แวร์เท่านั้น ต้องมีการวางแผนเป็นส่วนหนึ่งของ SDLC

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

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


-1

ฉันจะบอกว่ามีการทดสอบหน่วยครอบคลุม 100% ของรหัสจะเป็นสิ่งที่ดี ตามที่อนุญาตให้สิ่งที่เกินจะถูกแยกออกไป

บางครั้งฉันเปรียบเทียบการพัฒนาซอฟต์แวร์กับรูปปั้น มันไม่ใช่สิ่งที่คุณเพิ่ม แต่เป็นสิ่งที่คุณเอาไป

เห็นได้ชัดว่าคุณสามารถที่จะไปไกลเกินไป ไม่มีใครจะบอกได้ว่าพลอยกรวดเล็ก ๆ เป็นประติมากรรมที่ดี: เอส


3
เราพูดถึงมันวาวแค่ไหนกัน? :-)
Chris

1
เวลาส่วนใหญ่ที่ฉันเห็นด้วยกับเรื่องนี้ - แต่ฉันไม่แน่ใจว่าเข้มงวด 100% คุ้มค่าเสมอ - เช่น getters / setters ที่พวกเขาไม่มีเหตุผล โดยทั่วไปแล้วรหัสที่สร้างจะดีกว่าโดยไม่ต้องทดสอบหน่วย (แม้ว่าการทดสอบการรวมอาจเหมาะสม)
FinnNk

@FinnNk - ฉันเห็นด้วย ฉันเคยใช้ dotCover เมื่อเร็ว ๆ นี้และมันบอกว่า getter / setter ได้รับการคุ้มครองถ้ามันถูกใช้ในการทดสอบอื่น ดังนั้นฉันไม่ได้หมายถึงวิธีการทดสอบสำหรับผู้ทะเยอทะยาน & ผู้ตั้งสติ
แอนโทนีสก็อตต์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.