ทำไมพวกเขาไม่สอนสิ่งเหล่านี้ในโรงเรียน? [ปิด]


118

ในช่วงฤดูร้อนฉันโชคดีพอที่จะเข้าสู่ Google Summer of Code ฉันได้เรียนรู้มากมาย (อาจจะมากกว่าที่ฉันเรียนมาจากผลรวมของการเรียนในมหาวิทยาลัยทั้งหมด) ฉันสงสัยจริงๆว่าทำไมพวกเขาไม่สอนบางสิ่งที่ฉันเรียนรู้เร็วกว่านี้ในโรงเรียน หากต้องการชื่อไม่กี่:

  • การทดสอบหน่วย
  • การควบคุมเวอร์ชัน
  • การพัฒนาที่คล่องตัว

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

อย่าเข้าใจฉันผิดฉันไม่คิดว่ามหาวิทยาลัยจะสอนแฟชั่นการเขียนโปรแกรมที่ทันสมัยที่สุดเสมอไป แต่อาจารย์ของฉันไม่ควรสอนฉันอย่างอื่นนอกจาก "วาดแผนภาพก่อนเริ่มเขียนโค้ด"


47
ฉันพบว่าครูส่วนใหญ่อยู่นอกโลกแห่งความเป็นจริงมานานพอที่จะไม่ทันสมัยกับเทรนด์ล่าสุดเช่นการควบคุมเวอร์ชันและการทดสอบหน่วย
ริว

14
ฉันไม่แน่ใจว่าการเรียกเวอร์ชันควบคุมว่า "เทรนด์ล่าสุด" นั้นยุติธรรมหรือไม่ SCCS ได้รับการพัฒนาในปี 1972 - en.wikipedia.org/wiki/Source_Code_Control_System
JeffH

2
พวกเขาสอนสิ่งเหล่านี้ที่ RIT
geowa4

6
คุณถูก. ควรสอนสิ่งเหล่านั้นแทนโครงสร้างข้อมูลอัลกอริทึมการทำงานพร้อมกันระบบเครือข่ายและฐานข้อมูล ผมหมายถึงคนที่เคยต้องการที่จะเรียนรู้เหล่านั้น
Humphrey Bogart

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

คำตอบ:


188

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

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

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

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

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

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


44

เพราะครูของเรา:

  1. ไม่เคยลองทดสอบหน่วย
  2. ไม่ทราบวิธีใช้การควบคุมเวอร์ชันและ
  3. ยังไม่เคยได้ยินเรื่อง "การพัฒนาที่คล่องตัว"

นักเรียนควรดำเนินการด้วยตนเอง เราทำอย่างนั้นและกลับกลายเป็นดีใช่ไหม?


3
"เราทำอย่างนั้นแล้วและก็ออกมาดีใช่ไหม" - พวกเราบางคน ... บางคนหลงทางเพราะครูไม่ได้ทำทุกอย่างที่ทำได้
Andrei Rînea

12
ไม่ว่าครูจะทำอะไรคนก็ยังบ่น ผู้มีคมมักจะหิวกระหายความรู้และจะกลายเป็นดี
Jeffrey Jose

ครูของเราไม่ใช่นักพัฒนาซอฟต์แวร์และเราจะไม่ได้รับปริญญาด้านการพัฒนาซอฟต์แวร์ เรา - ส่วนใหญ่ไปเรียนวิทยาศาสตร์คอมพิวเตอร์ซึ่งเป็นสัตว์ร้ายที่แตกต่างกันโดยเน้นที่ทฤษฎีมากกว่าการปฏิบัติ
Dean J

1
@mislav: ใครคือครูของคุณ?
CesarGon

43

Leonardo da Vinci เขียนว่า

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

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


1
ฉันเห็นด้วยกับแรงผลักดันหลักของสิ่งที่คุณพูด แต่ฉันขอยืนยันว่าปัญหาในการจัดการหลายเวอร์ชันพร้อมกันเป็นองค์ประกอบทางทฤษฎีหลักที่ต้องทำความเข้าใจ ในทางตรงกันข้ามฉันยอมรับว่าการใช้เครื่องมือเช่น CVS และ SVN เพื่อแก้ปัญหานี้อยู่ในขอบเขตของ "การปฏิบัติ"
Andrew Swan

แต่การครอบคลุมการควบคุมเวอร์ชันในการบรรยายมากกว่าสองครั้งในระหว่างคลาส "Intro to Software Engineering" ทั่วไปอาจไม่จำเป็น ครอบคลุมสิ่งที่ทำการใช้งานขั้นพื้นฐานอาจจะเป็นเพียงเล็กน้อยในการแยกสาขา / การรวม
Adam Jaskiewicz

ฉันมีคลาสที่เรียกว่า "Team Software Project" ไม่ครอบคลุมการควบคุมเวอร์ชัน แต่ครอบคลุมถึง UML วิธีการพัฒนาซอฟต์แวร์การรวบรวมข้อกำหนดการทดสอบหน่วย ฯลฯ
Adam Jaskiewicz

@Alan คุณกำลังพูดถึงโรงเรียนไหน?
lifebalance

40

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

มหาวิทยาลัยมีแนวโน้มที่จะพึ่งพา 'วิทยาศาสตร์' มากขึ้น (อัลกอริทึมโครงสร้างข้อมูลคอมไพเลอร์ ฯลฯ ) เนื่องจากสิ่งเหล่านี้ 'เหนือกาลเวลา' มากกว่าแนวทางปฏิบัติที่ดีที่สุดของอุตสาหกรรมในปัจจุบันซึ่งมีแนวโน้มที่จะพัฒนาและเปลี่ยนแปลงในแต่ละปี ตัวอย่างเช่นการควบคุมเวอร์ชันมีการเปลี่ยนแปลงที่น่าทึ่งในช่วง 5 หรือ 10 ปีที่ผ่านมา แต่ big-O ยังคงเป็นขนาดใหญ่และการแฮช btrees และการเรียกซ้ำยังคงมีประโยชน์เหมือนเมื่อ 40 ปีที่แล้ว โดยทั่วไปความคิดของพวกเขาคือให้คุณมีรากฐานเพียงพอที่คุณจะสามารถเลือกใช้เครื่องมือเช่นคอมไพล์และเข้าใจความหมายเมื่อคุณได้รับแจ้งว่าโครงสร้างข้อมูลพื้นฐานเป็นกราฟที่กำหนดทิศทางแบบ acyclic ของแฮช SHA-1 และนักพัฒนาได้ทำงานอย่างหนัก เพื่อปรับจำนวน syscalls ให้เหมาะสมเพื่อให้เป็น io-bound

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


13

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

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

Tqm, Iso, Cmm, Agile เป็นต้นสิ่งเหล่านี้ล้วนเป็นแฟชั่นที่พวกเขาจะมาและพวกเขาจะไปไม่มีใครประสบความสำเร็จมากไปกว่าสามัญสำนึก วิศวกรและ บริษัท ที่ประสบความสำเร็จทั้งหมดใช้สามัญสำนึกบางอย่างนั่นคือสิ่งที่ทำให้พวกเขาประสบความสำเร็จมีเพียงไม่กี่คนที่ต้องการชื่อ ปัญหาคือคุณไม่สามารถขายสามัญสำนึกผู้จัดการไม่สามารถพิสูจน์คุณค่าของพวกเขาต่อ บริษัท โดยการฝึกอบรมและซื้อสามัญสำนึกโดยไม่มีชื่อที่ติดหู ตั้งชื่อตามที่ผู้บังคับบัญชาของพวกเขาอ่านในบทความข่าวหรือนิตยสารบางฉบับและผู้จัดการจะดูแลงานของพวกเขาและคุณจะดูแลคุณ มี บริษัท เพียงไม่กี่แห่งที่อ้างว่าปฏิบัติตามแนวทางปฏิบัติเหล่านี้จริง ส่วนใหญ่เขียนเช็คถึงที่ปรึกษาและรับใบรับรองรายปีและหรือตลอดชีพให้กับสโมสรบางแห่งเพื่อให้พวกเขาสามารถใส่กราฟิกบนเว็บไซต์หรือฉลากบนกล่องที่ผลิตภัณฑ์ของพวกเขาเข้ามา หลายคนจะโต้แย้งว่าสิ่งนี้หายาก ... เคยมีเห็นมันเกิดขึ้น ทั้งหมดนี้เป็นส่วนหนึ่งของธุรกิจคุณต้องตัดมุมในบางครั้งเพื่อทำกำไรและเปิดประตูไว้และเปิดไฟไว้ สาวกที่ไม่ยอมใครง่ายๆของการปฏิบัติทั้งหมดเหล่านี้ต่างก็โต้แย้งว่าสิ่งสุดท้ายคือแฟชั่นและสิ่งนี้ไม่ใช่อันสุดท้ายที่แพงเกินไปที่จะปฏิบัติตามอันนี้ไม่ได้ อันสุดท้ายเป็นของปลอมที่คุณเพิ่งจ้างที่ปรึกษาอันนี้เป็นของจริง เช่นเดียวกับภาษาโปรแกรมสิ่งเหล่านี้ก็จะพัฒนาไปด้วยเช่นกัน อันสุดท้ายเป็นของปลอมที่คุณเพิ่งจ้างที่ปรึกษาอันนี้เป็นของจริง เช่นเดียวกับภาษาโปรแกรมสิ่งเหล่านี้ก็จะพัฒนาไปด้วยเช่นกัน อันสุดท้ายเป็นของปลอมที่คุณเพิ่งจ้างที่ปรึกษาอันนี้เป็นของจริง เช่นเดียวกับภาษาโปรแกรมสิ่งเหล่านี้ก็จะพัฒนาไปด้วยเช่นกัน

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

ทำไมคนถึงคิดว่า cmm หรือคล่องตัวหรือคนอื่น ๆ เป็นแฟชั่น? ทำไมพวกเขาถึงคิดว่าไม่ใช่? ทำไมอาจารย์ถึงสอนโปรแกรมแบบนั้น เพื่อหลีกเลี่ยง gotos หรือเพื่อหลีกเลี่ยงค่าคงที่หรือเพื่อหลีกเลี่ยงสิ่งนี้และสิ่งนั้น? เป็นเพราะสร้างรหัสที่เชื่อถือได้มากขึ้นหรือไม่? โค้ดที่มีประสิทธิภาพดีขึ้น? ลดข้อผิดพลาดของมนุษย์? หรือเป็นเพราะการให้เกรดเอกสาร / โปรแกรมทำได้ง่ายกว่าทำให้มีเวลาทำวิจัยมากขึ้น? เป็นเพราะพวกเขาไม่รู้วิธีการเขียนโปรแกรมและพวกเขาเพิ่งติดตามใครบางคนในหนังสือเรื่องนี้? พวกเขาสอนคุณหรือไม่ว่าคุณไม่มีโค้ดที่บำรุงรักษาเชื่อถือได้และมีประสิทธิภาพสูง? คุณไม่สามารถแม้แต่จะ "เลือกสองข้อ" ที่สามารถบำรุงรักษาได้ทั้งด้วยความน่าเชื่อถือและประสิทธิภาพสูง? บางครั้งคุณยอมสละความน่าเชื่อถือเพื่อประสิทธิภาพ บางครั้งคุณไม่สนใจเกี่ยวกับความน่าเชื่อถือหรือประสิทธิภาพคุณแค่อยากได้จากเวอร์ชัน 117.34 2 ของโปรแกรมซอฟต์แวร์บัญชีอื่นเป็นเวอร์ชัน 118.0.0 รูปแบบธุรกิจของคุณมาจากการขายการอัปเกรดเวอร์ชันและการสนับสนุนด้านเทคนิคและเท่าที่นักพัฒนาซอฟต์แวร์หุ่นยนต์รุ่นเก่าจะทำเช่นนั้นก็สามารถเขียนโค้ดเดียวกันในลักษณะเดียวกันได้ แทนที่อันที่ถูกไฟไหม้ด้วยของใหม่จากวิทยาลัยและขายอัพเกรดไปเรื่อย ๆ

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

ถามทุกอย่าง ... ฉันจะไหม้จริงๆหรือเปล่าถ้าสัมผัสหม้อไฟบนเตา? ผลกระทบทางจิตใจของการกลัวจะสร้างความเสียหายมากกว่าการถูกไฟลวกหรือไม่? มีวิธีทดสอบคำตอบที่ปลอดภัยโดยไม่บาดเจ็บหรือไม่?

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

โลกทั้งภายในและภายนอกมหาวิทยาลัยจะนำสูตรเหล่านี้มาใช้ (cmm, agile ฯลฯ ) ในการแก้ปัญหาและเมื่อมีอันถัดไปออกมาพวกเขาก็จะลดลงอย่างรวดเร็ว คุณไม่จำเป็นต้องใช้การควบคุมเวอร์ชันเพื่อให้ประสบความสำเร็จมีความสำเร็จมากมายเช่นเดียวกับที่ไม่มี (อันที่จริงเนื่องจากอายุของอุตสาหกรรมมีความสำเร็จอีกมากมายที่ไม่มีการควบคุมเวอร์ชันในตอนนี้) ในทำนองเดียวกันคุณสามารถประสบความสำเร็จได้ด้วยการทดสอบเพียงเล็กน้อย (ดูชื่อใหญ่ ๆ ในอุตสาหกรรมคอมพิวเตอร์เป็นตัวอย่าง) คุณสามารถประสบความสำเร็จได้ด้วยการทดสอบโค้ดของคุณเองและประสบความสำเร็จโดยปฏิบัติตามกฎที่ว่าคุณไม่ควรทดสอบโค้ดของคุณ คุณสามารถประสบความสำเร็จโดยใช้ emacs และคุณสามารถประสบความสำเร็จโดยใช้ vi คุณต้องตัดสินใจว่าส่วนผสมใดที่เหมาะกับคุณและหากคุณโชคดีหาที่ทำงานที่เห็นด้วยกับคุณ

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

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

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

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

เช่นเดียวกับธุรกิจอื่น ๆ งานของมหาวิทยาลัยคือการมีกำไร พวกเขาต้องจ้างนักวิชาการที่เหมาะสมเพื่อนำทั้งนักศึกษาที่เหมาะสมและเงินวิจัยที่เหมาะสมและประเภทของการวิจัยที่เหมาะสมเพื่อให้มหาวิทยาลัยได้รับผลกำไร พวกเขาต้องเสนอชั้นเรียนที่เหมาะสมเพื่อนำนักศึกษาที่เหมาะสมและผลิตบัณฑิตที่เหมาะสมเพื่อที่ว่าหลายทศวรรษที่ผ่านมานายจ้างทั้งที่อยู่ใกล้มหาวิทยาลัยและหวังว่าจะอยู่ห่างไกลจะรับรู้ว่ามหาวิทยาลัยแห่งนี้ผลิตพนักงานที่มีประสิทธิผลและสร้างผลกำไร (ใช่และบางครั้งคุณต้องดึงดูดนักกีฬาที่เหมาะสมในกีฬาที่เหมาะสมเพื่อให้ได้เวลาทีวีในปริมาณที่เหมาะสมและการจดจำชื่อและรายได้จากกีฬาในปริมาณที่เหมาะสม) บางมหาวิทยาลัยจะสอนภาษา C ++ และ Java บางแห่งไม่เคยสอน บางคนจะคิดค้น CMM และบางคนจะสอน Agile บางคนก็ไม่ทำเช่นกัน หากมหาวิทยาลัยมีคุณค่ามีอะไรให้คุณเรียนรู้ พวกเขาจะไม่สอนคุณทุกอย่างที่ต้องเรียนรู้ แต่จะมีประโยชน์ เรียนรู้ว่าบางสิ่งในขณะที่คุณอยู่ที่นั่นรวบรวมเครื่องมือหลากหลายรูปแบบไว้ในกล่องเครื่องมือของคุณ ออกจากมหาวิทยาลัยและได้งานทำ หากกล่องเครื่องมือของคุณไม่ดีอาจพบมหาวิทยาลัยอื่นและไม่เคยพูดถึงมหาวิทยาลัยแห่งแรก หากเป็นกล่องเครื่องมือ ok ให้ใช้เครื่องมือเหล่านั้นและสร้างขึ้นใหม่ตามเวลาของคุณเอง หากเป็นกล่องเครื่องมือที่ดีให้พูดสิ่งดีๆเกี่ยวกับมหาวิทยาลัยนั้นและนักวิชาการที่ดีที่คุณได้เรียนรู้สิ่งนี้และสิ่งนั้นมาจากโรงเรียนและจ่ายเงินคืนโรงเรียนสำหรับสิ่งที่พวกเขามอบให้คุณ แม้ว่าคุณจะไม่ได้รับเครื่องมือที่เป็นไปได้ทั้งหมดในแคตตาล็อกสากลของเครื่องมือของมหาวิทยาลัย แต่คุณก็จะต้องเดินจากไป แม้ว่าคุณจะเรียนไม่จบ ...


12

ฉันสอนสิ่งเหล่านี้เมื่อฉันเป็นผู้ช่วยที่สถาบันเทคโนโลยีโอเรกอน พวกเขาได้รับการสอนเพียงเบาบาง


ชื่อชั้นเรียนอะไร
Dean J

11

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

ชั้นเรียนที่สอนการควบคุมเวอร์ชันหรือวิธีเขียนแบบทดสอบหน่วยที่มีประสิทธิภาพ ... ซึ่งจะสอนคุณเกี่ยวกับการค้าได้แก่ การพัฒนาซอฟต์แวร์ (ที่ดี)


10

โอ้พระเจ้าอย่าให้ฉันเริ่ม

ครั้งหนึ่งฉันเคยเป็นคณบดี cs ในมหาวิทยาลัยที่มีชื่อเสียงบอกฉันว่าการเขียนโปรแกรมเชิงวัตถุเป็นเพียง 'แฟชั่น' ดังนั้นพวกเขาจึงไม่ได้เสนอชั้นเรียนใด ๆ ในการถ่ายทอดความเพ้อฝันเช่น C ++

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


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

และตอนนี้สิ่งที่พวกเขาสอน (อย่างน้อยก็ในสองสามปีแรก) ในมหาวิทยาลัยหลายแห่งคือ Java อาประชด
Matthew Schinckel

เมื่อไหร่ที่เขาบอกคุณว่า OOP เป็นแฟชั่น? จนกระทั่งการถือกำเนิดของ Java OOP ใกล้ชิดกับแฟชั่นมากกว่าความรู้ที่จำเป็น
Andrew Prock

@ [drewster]: 1994 แม้ว่าฉันคิดว่าคุณให้เครดิต Java มากเกินไป OOP เป็นความก้าวหน้าทางตรรกะในวิวัฒนาการของภาษาโปรแกรม จะเรียกมันว่า "แฟชั่น" ในช่วงใด ๆ ของประวัติศาสตร์ (น้อยกว่ามากในปี 1994) บ่งบอกถึงความไม่รู้ในระดับที่เกินกว่าความซีดของ CS คณบดี
Steven A. Lowe

2
อะไรคือการแยกขั้วเท็จระหว่างวิชาการกับโลกแห่งความจริง / ปฏิบัติ? เกือบทุกความคิดที่คุณใช้ในงาน "ในโลกแห่งความจริง" มาจากชุมชนวิชาการหรือได้รับการปรับปรุงโดยแนวคิดนี้ คุณคิดว่าการขาด GOTO มาจากไหน? วัตถุมาจากนักวิทยาศาสตร์คอมพิวเตอร์ในปี 1967 คน CS จำนวนมากไม่ชัดเจนเกี่ยวกับข้อดีของ OOP และยังคงเป็นสิ่งที่ยังไม่แน่ใจ อุตสาหกรรมคิดว่าช่วยได้ แต่มีโครงการที่ล้มเหลวจำนวนมากที่พิสูจน์ได้ว่าเป็นอย่างอื่น

9

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

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

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


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

@gbj เห็นด้วยฉันไม่รู้เลยว่าการควบคุมเวอร์ชันคืออะไรจนกว่าฉันจะได้งานและฉันเห็นประโยชน์ทันทีและเรียนรู้ในวันเดียว มีสิ่งที่สำคัญกว่ามากมายที่ต้องสอนใน IMO ของโรงเรียน
temp2290

7

ทำไมไม่จริง? ประสบการณ์ในการรับปริญญา CS ของฉันค่อนข้างเหมือนกัน เหตุผลก็คือคนที่สอนการเขียนโปรแกรมไม่ได้เขียนโปรแกรมเท่าที่ฉันสามารถบอกได้ ไม่จำเป็นต้องสอนสิ่งนั้นเพื่อรับการรับรองครูไม่คุ้นเคยกับมันและนักเรียนไม่เคยพัฒนาโครงการที่มีความสำคัญใด ๆ เป็นส่วนหนึ่งของการบ้าน ไม่มีแรงจูงใจที่จะสอนการเขียนโปรแกรมจริง ๆ เมื่อเทียบกับการสอนทฤษฎี CS หรือไวยากรณ์ Java


6

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


ดังนั้นเราควรจ้างวิศวกรซอฟต์แวร์เท่านั้นไม่ใช่นักวิทยาศาสตร์คอมพิวเตอร์? ;-)
Andrew Swan

หากคุณคิดว่าสิ่งเหล่านี้ตรงตามคำจำกัดความของ 'วิศวกรรม' ฉันกังวล เป็นไปตามคำจำกัดความของ skillets ไม่ใช่วิศวกรรม
Benjamin R

6

มันขึ้นอยู่กับมหาวิทยาลัย ฉันจบการศึกษาในปี 2546 จากความไม่เหมือนใครของออสเตรเลีย ในตอนนั้นเราได้เรียนรู้ UML, Unit Testing, XP (และ Agile Methodologies อื่น ๆ ) พร้อมกับสิ่งที่เป็นทางการเช่น Z อัลกอริทึมและโครงสร้างข้อมูลระบบปฏิบัติการ ฯลฯ

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

เท่าที่เกี่ยวข้องกับการควบคุมเวอร์ชันเราใช้ (CVS) ในโครงการเขียนโปรแกรมของเราตั้งแต่ปีที่ 2 เป็นต้นไป

ฉันเห็นด้วยอย่างยิ่งกับสิ่งที่ Glyph พูดด้วย CS เป็นสาขาวิชาที่ยังไม่บรรลุนิติภาวะโดยเฉพาะในช่วง 50 ปีที่ผ่านมาซึ่งเราไม่รู้ว่าเราควรเรียนรู้อะไรและอะไรเป็นเพียงแฟชั่นที่ผ่านไป ให้เวลา 150 ปีจากนั้นสิ่งต่างๆอาจทรุดโทรมมากขึ้น จำนวนโครงการในโลกแห่งความเป็นจริงที่ล้มเหลวทำให้เห็นได้ชัดว่านี่เป็นอุตสาหกรรมที่ยังไม่บรรลุนิติภาวะ ลองนึกดูว่า 80% ของโครงการสร้างล้มเหลว!


5

ทั้งหมดนี้สามารถครอบคลุม (ตื้น ๆ ) ได้อย่างง่ายดายในคลาสเดียวเกี่ยวกับแนวทางปฏิบัติในการพัฒนาซอฟต์แวร์ ไม่ใช่ส่วนหนึ่งของหลักสูตร CS ส่วนใหญ่เพราะนั่นไม่ใช่สิ่งที่ CS เกี่ยวกับแม้ว่าฉันคิดว่าการรายงานเนื้อหานั้นมีประโยชน์ โรงเรียนของฉันมีชั้นเรียนแบบนี้ ไม่ครอบคลุมถึงการควบคุมเวอร์ชัน แต่ครอบคลุมถึง UML การรวบรวมข้อกำหนดวิธีการพัฒนา (คล่องตัวและน้ำตกต่างๆ) การทดสอบหน่วยการทดสอบการรวม ฯลฯ และกำหนดให้เราต้องทำงานเป็นทีม 4-5 คนเพื่อพัฒนาโครงการ (Clue rip-off ค่อนข้างง่ายใน Java) หากคุณรู้สึกว่าจำเป็นต้องเรียนวิศวกรรมซอฟต์แวร์เพิ่มเติมพวกเขามีให้เป็นวิชาเลือก

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

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

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


3

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

ในหลักสูตรของเราเราได้รับการสอนกระบวนการซอฟต์แวร์ส่วนบุคคลซึ่งครอบคลุมสิ่งต่างๆเช่นการบันทึกเวลาที่ใช้ในโครงการการแสดงความคิดเห็นที่ดี ฯลฯ แต่ไม่มีการพูดถึงพื้นฐานระดับมืออาชีพเช่นการควบคุมเวอร์ชัน


3

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

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

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

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

ข้างต้นเป็น "ทักษะอ่อน" ซึ่งคุณไม่จำเป็นต้องใช้เขียนโค้ดที่ดี

อย่างไรก็ตามหากคุณไม่มีทักษะ "ยาก" เช่นโครงสร้างข้อมูลและอัลกอริทึมโอกาสในการเขียนโค้ดที่ดีก็เป็นไปไม่ได้เลย


2

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

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


สิ่งนี้ก็คือชั้นเรียนเหล่านั้นเป็นชั้นเรียนที่สูงขึ้นอย่างน้อยก็ในโรงเรียนของฉัน ฉันรู้สึกว่าสิ่งเหล่านี้ควรเป็นสิ่งแรกที่สอนหรืออย่างน้อยที่สุดก็ควรจะสอนในระดับกลาง
Jason Baker

2

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

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


2

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


2

ฉันได้เรียนรู้สิ่งต่างๆในปีแรกยกเว้นการพัฒนาที่คล่องตัว

ทุกอย่างเกี่ยวกับการเลือกโรงเรียนที่เหมาะสม IMHO หากคุณติดอันดับท็อป 10 คุณจะได้เรียนรู้ทุกสิ่งอย่างรวดเร็ว

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


2

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


2

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


1

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


ขออภัยฉันไม่เห็นการควบคุมแบบ Agile และเวอร์ชันที่เป็นแฟชั่นมากไปกว่าสายการประกอบหรือการประดิษฐ์แคลคูลัสเป็นแฟชั่น ในโลกแห่งความเป็นจริงเรากำลังออกแบบสิ่งต่าง ๆ ที่เปลี่ยนแปลงขั้นพื้นฐานในการเขียนโปรแกรม แต่มหาวิทยาลัยต่างๆยังไม่ได้สัมผัสกับความเป็นจริงในการบรรยายเล็ก ๆ น้อย ๆ ของพวกเขาโดยที่พวกเขาไม่รู้ว่าเราก้าวไปข้างหน้า
Austin

1

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

ความจริงของเรื่องนี้อาจเป็นไปได้ว่าศาสตราจารย์ของมหาวิทยาลัยไม่ได้ติดตามเทคนิคการพัฒนาใหม่ ๆ เท่าที่ควร พวกเขาอาจรู้สึกว่ามีสิ่งอื่น ๆ ที่สำคัญกว่าในหลักสูตรของพวกเขา


1

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

เป็นเพียงเพราะคนอย่าง Titus เท่านั้นที่เราได้รับนักวิชาการทุกคนที่สนใจการเขียนโปรแกรมอย่างแท้จริง - อ่านความคิดเห็นของเขาในหัวข้อนั้นที่นี่

ตอนที่ฉันเป็นนักเรียนฉันอ่านหนังสือในห้องสมุดเกี่ยวกับ Extreme Programming เราคุยกันเรื่องนี้ในชั้นเรียนซึ่งเป็นชั้นเรียนเดียวกันที่เรียกร้องให้เราปฏิบัติตาม "Waterfall Model" ของการพัฒนาซอฟต์แวร์โดยที่ "การรวบรวม" เป็นขั้นตอนหนึ่งของ ด้วยตัวเอง

ขอให้ดีที่สุดในอาชีพของคุณฉันหวังว่าคุณจะสำเร็จการศึกษาระดับปริญญาเป็นเรื่องดีที่มีตัวอักษรตามชื่อของคุณ :)


1

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


1

สิ่งเหล่านี้มาจากประสบการณ์ที่ จำกัด ของฉันในโปรแกรม CS ก่อนที่ฉันจะเปลี่ยนสาขาวิชาและประสบการณ์ของฉันในฐานะนักศึกษาฝึกงานที่ บริษัท ซอฟต์แวร์ขนาดใหญ่ การทดสอบหน่วยไม่ได้รับการสอนเนื่องจากโปรแกรมส่วนใหญ่ที่คุณต้องสร้างนั้นมีขนาดไม่ใหญ่พอที่จะต้องใช้การทดสอบอัตโนมัติดังนั้นคุณจึงรับประกันชุดอินพุตเฉพาะเพื่อให้สามารถทดสอบทุกอย่างด้วยตนเองได้ การสอนวิธีการทดสอบอัตโนมัติอาจรบกวนการจัดลำดับโครงการของคุณเนื่องจากโครงการส่วนใหญ่ให้คะแนนด้วยสคริปต์ที่เรียกใช้การทดสอบอัตโนมัติด้วยการดูโค้ดอย่างรวดเร็วเพื่อให้แน่ใจว่าคุณไม่มี int foo1 int foo2; และคุณใช้การเยื้องที่เหมาะสม

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

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


> เหตุใดจึงต้องใช้การควบคุมเวอร์ชันหากคุณทั้งคู่อยู่ในคอมพิวเตอร์เครื่องเดียวกัน ฉันใช้การควบคุมเวอร์ชันแม้ว่าฉันจะเป็นคนเดียวที่ใช้คอมพิวเตอร์ก็ตาม! ไม่เช่นนั้นคุณจะจัดการสาขาและแพตช์รีลีสได้อย่างไรหรือแม้กระทั่งดูไฟล์เวอร์ชันก่อนหน้า (ย้อนกลับไปก่อนที่การเปลี่ยนแปลงครั้งล่าสุดของคุณจะพัง)
Andrew Swan

Ditto จาก Andrew ฉันใช้เครื่องมือ SCM อย่างกว้างขวางแม้ว่างานทั้งหมดของฉันจะทำบนแล็ปท็อปของฉันและส่วนใหญ่เป็นงานเดี่ยว การสำรองข้อมูลการควบคุมการแก้ไขการแยกสาขาและการรวมการแก้ไขรหัสเก่า ทั้งหมดนี้เป็นเหตุผลที่จะใช้ไม่เพียง แต่สำหรับซอร์สโค้ด แต่สำหรับเนื้อหาที่ผลิตขึ้น
Matthew Schinckel

ไม่มีเหตุผลที่คุณจะไม่ให้คะแนนว่ารหัสของคุณผ่านการทดสอบหน่วย / การยอมรับหรือไม่

1

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

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

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


1

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

Plug: การเรียน BS ใน Comp Sci และ MS ใน Soft Eng ที่ DePaul University ส่วนใหญ่ฉันได้รับการสอนโดยอาจารย์ / อาจารย์ที่สอนนอกเวลาซึ่งฉันก็สบายดีเพราะฉันอยากให้พวกเขามาพร้อมกับเกร็ดเล็กเกร็ดน้อยจากวันก่อน และเชื่อมโยงกับชั้นเรียน นอกจากนี้ยังเป็นโรงเรียนพร็อพ / พาร์ทไทม์นักเรียนส่วนใหญ่มีงานทำโดยใช้สิ่งที่เรียนรู้

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

ในระหว่างการทดสอบหน่วยการเรียนของฉันมีอยู่เสมอ แม้ว่าพวกเขาจะเริ่มต้นคุณด้วย Java แต่พวกเขาก็ทำให้เราใช้ ANT และ JUnit สำหรับโปรเจ็กต์ทั้งหมด ซึ่งเป็นการเริ่มต้นที่ดีในการกำหนดค่าการสร้างและการทดสอบหน่วย

และ Extreme Programing รวมอยู่ในคลาส 3 หรือ 4 คลาสที่ฉันเข้าเรียน ฉันจำได้ว่าพวกเขาทั้งหมดเริ่มต้นด้วยแง่มุมที่แตกต่างกัน 12 ด้านตั้งแต่การตั้งโปรแกรมจับคู่ไปจนถึงการทดสอบหน่วย (ดูด้านบน) และตอนนี้ดูเหมือนว่าโฟกัสอยู่ที่ Agile

ดังนั้นคำตอบที่รวดเร็วคือใช่มีโรงเรียนที่มีแนวทางปฏิบัติมากกว่าคนอื่น ๆ


1

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

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

นอกจากนี้ Agile มีมานานแค่ไหนแล้วคุณหมายถึง Agile รูปแบบไหน? มีการใช้งานที่แตกต่างกันมากมายจากที่ฉันเคยเห็น


1

ฉันไม่คิดว่าการเขียนโปรแกรมแบบว่องไวเป็นเรื่องแฟชั่น แต่ในขณะเดียวกันฉันก็ยากที่จะคิดวิธีที่ครูจะมอบโปรเจ็กต์ให้คุณเพื่อให้คุณได้เรียนรู้ .. โครงการ B ขยายบน. ปัญหาคือเวลาและขอบเขต ในหลักสูตร 4 เดือนมันจะยาก

วิธีการควบคุมเวอร์ชันและการทดสอบหน่วยมีการเปลี่ยนแปลงและขึ้นอยู่กับภาษาหรือบุคคลที่กำหนด

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


อืมฉันคิดว่าวิทยาลัยและมหาวิทยาลัยมีความหมายเหมือนกัน .. ไม่ใช่เจ้าของภาษา

ขึ้นอยู่กับว่าคุณอยู่ที่ไหน (ประเทศที่ชาญฉลาด) ในสหรัฐอเมริกาพวกเขาเหมือนกันในแคนาดาต่างกัน ฉันคิดว่าในอเมริกาสิ่งที่ฉันเรียกว่าคอลลาจเรียกว่าจูเนียร์คอลลาจ ในออสเตรเลียเรียกว่า Taff (การสะกดคำอย่างไม่น่าให้อภัย) .. การไม่พูดเจ้าของภาษาทำให้เรื่องนี้ "สนุก" มาก
baash05
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.