ความแตกต่างระหว่างการเขียนโปรแกรมในโรงเรียนกับการเขียนโปรแกรมในอุตสาหกรรมหรือไม่ [ปิด]


50

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

อะไรคือความแตกต่างระหว่างการเขียนโปรแกรมในสภาพแวดล้อมทางวิชาการและการเขียนโปรแกรมใน 'โลกแห่งความจริง'?


ตัวอย่าง: techcrunch.com/2011/11/12/…
rdasxy

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

9
คำถามนี้ถามเกี่ยวกับการศึกษาในระดับปริญญาเอกหรือหลังจากสำเร็จการศึกษาหรือเป็นเพียงการตั้งค่า "ห้องเรียนกับโลกแห่งความเป็นจริง" หรือไม่?
บ๊อบ

@Bob นี่เป็นข้อมูลเพิ่มเติมเกี่ยวกับสถาบันการศึกษาทั่วไป ห้องเรียน / วิจัย / การอ่าน / การมอบหมายโดยตรงกับการเขียนโปรแกรม "โลกแห่งความจริง" ในอุตสาหกรรม
rdasxy

ตกลง. นั่นยังไม่ชัดเจนนักเนื่องจากมี "การเขียนโปรแกรมเชิงวิชาการ" ซึ่งทำโดยผู้ที่ต้องการพูดช่วยนักชีววิทยาในการจำลองเซลล์
บ๊อบ

คำตอบ:


72

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

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

ใช่แล้วคุณต้องเขียนโค้ดด้วยเช่นกัน แต่โดยเฉลี่ยแล้ว 40-40% ของเวลาของนักออกแบบซอฟต์แวร์

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


18
Oh yeah, and you also have to be able to write code too, but that's, on average, only 40 - 60% of a software engineer's time.- หรือแม้แต่ 0-20% ที่ร้านค้าที่ใหญ่และแย่จริงๆ
Ritch Melton

1
+1 สำหรับคำตอบที่ดีมากและ +1 (ควรมากกว่า) สำหรับ Ritch หากวิศวกรใช้งบประมาณมากกว่า 20% ของวงจรชีวิตโครงการในการเขียนโปรแกรมแสดงว่ามีบางอย่างผิดปกติมาก การออกแบบ 50% การทดสอบ 30% ส่วนที่เหลืออีก 20% .... ทุกอย่างรวมถึงการเข้ารหัสดูเหมือนจะถูกต้อง ด้วยการออกแบบที่เหมาะสมการเข้ารหัสควรเป็นเรื่องเล็กน้อย หากไม่มีมันสิ่งที่ผู้คนเรียกว่า "การเข้ารหัส" นั้นจริง ๆ แล้วไม่มีที่สิ้นสุดถูกเขียนใหม่พยายามแฮ็คการออกแบบบางอย่างร่วมกันขณะที่พวกเขาเดินไปตาม </rant>
Mawg

36

ที่มหาวิทยาลัย...

ครูของคุณให้คุณ:

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

ใน "โลกแห่งความจริง" ...

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

ข้อสรุป

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


11
นี่คือสิ่งที่ฉันจะตอบ ในโรงเรียนคุณรู้ปัญหาและรู้วิธีแก้ปัญหา ใน "โลกแห่งความจริง" คุณไม่ค่อยรู้จักวิธีแก้ปัญหาและบ่อยครั้งที่ไม่รู้จักปัญหาจริง
บ๊อบ

20

พวกเขาเผชิญกับปัญหาที่แตกต่าง:

Academia เน้นไปที่ "ศาสตร์แห่งการเขียนโปรแกรม" เป็นหลักดังนั้นการศึกษาวิธีการสร้างอัลกอริธึมที่มีประสิทธิภาพโดยเฉพาะหรือการพัฒนาภาษาที่ปรับให้เหมาะสมกับกระบวนทัศน์บางอย่าง อุตสาหกรรมส่วนใหญ่เน้นในการผลิตสิ่งที่ต้องขาย มันต้องอาศัย "เครื่องมือ" ที่ไม่เพียง แต่ภาษาและอัลกอริธึมเท่านั้น แต่ยังรวมถึงไลบรารี

ความแตกต่างใน "โฟกัส" นี้เป็นสิ่งที่ทำให้นักวิชาการใน C ไม่สามารถเขียนโปรแกรม windows (เนื่องจากเรา windows API ไม่ได้อยู่ในมาตรฐาน C99!) ดังนั้นจึงรู้สึกว่าเป็น "ไม่สามารถโปรแกรม" แต่ที่จริงแล้วเขามีความสามารถทั้งหมดที่จะเรียนรู้ด้วยตัวเองในสิ่งที่เขาขาดหายไป สิ่งที่ไม่มีการศึกษาเชิงวิชาการที่เหมาะสม (ไม่จำเป็นต้องทำใน Academia) - ค่อนข้างหายาก


10

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

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

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

สิ่งเหล่านี้ไม่ได้รับการสอนและพวกเขาสร้างความแตกต่างอย่างมากในด้านผลผลิต


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

@Giorgio: เพื่อประสิทธิภาพฉันมีโค้ดพื้นฐานที่มีอยู่แล้ว (ไม่ใหญ่มาก) ที่ฉันแสดงวิธีการปรับให้เหมาะสมแม้ว่าจะมีการทำซ้ำหลายครั้งและได้รับปัจจัยเร่งความเร็วขนาดใหญ่ มันเป็นทักษะที่ง่ายต่อการสอน สำหรับ DSL และการบำรุงรักษาฉันยังมีตัวอย่างที่ชื่นชอบที่สามารถใช้สำหรับการสอน ทั้งสองสิ่งนี้สามารถปรับเข้ากับหลักสูตรภาคเรียนได้อย่างง่ายดายโดยมีพื้นที่ว่าง ดังนั้นฉันคิดว่ามันสามารถทำได้
Mike Dunlavey

1
ตกลงฉันเข้าใจ: ใช้ตัวอย่างขนาดใหญ่และโลกแห่งความจริงและให้นักเรียนทำงานกับพวกเขา ความคิดที่ดีมาก
Giorgio

@Giorgio: ฉันเป็นอาจารย์เมื่อ 30 ปีที่แล้วดังนั้นฉันยังจำบางส่วนของวิธีการทำ ฉันยังใส่ความคิดเหล่านี้ไว้ในหนังสือที่ขายได้ไม่ดีซึ่งหมายความว่าฉันมีเวลาคิดและอธิบายว่ามันเข้ากันได้อย่างไร
Mike Dunlavey

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

8

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


8

อัพเดท: ถ้าเป็นคนอ่านใจของฉัน: ความคาดหวังของบัณฑิตเมื่อเทียบกับความเป็นจริง ...

ปัจจัยของฉันสองประการ:

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

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

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


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

2
นี้! ครั้งแรกที่คุณดำดิ่งลงไปใน 1 ล้าน LOC codebase คุณจะรู้ว่าสิ่งนี้จะไม่เป็นเช่นเดียวกับทุกสิ่งที่คุณทำในมหาวิทยาลัย เป็นที่ชัดเจนอย่างรวดเร็วว่าคุณจะไม่เข้าใจความสมบูรณ์ของ codebase นั้นและสิ่งที่คุณเข้าใจจะต้องมาจากการอ่านและทำความเข้าใจรหัสของผู้อื่นแทนที่จะมาจากการสร้างและเขียนเอง
Roman Starkov

4

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

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

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


3

ฉันไม่มีประสบการณ์ส่วนตัวกับการฝึกอบรมการเขียนโปรแกรมในโรงเรียน - ฉันเป็นวิชาเอกภาษาอังกฤษ ถามฉันเกี่ยวกับ Keats และ Byron! - แต่ฉันได้รับการแนะนำใหม่หลายครั้งและนำพวกเขามาและให้คำปรึกษาพวกเขาในโลกของการพัฒนาซอฟต์แวร์มืออาชีพ ดังนั้นฉันสามารถพูดจากมุมมองนั้น

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

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


2

ในด้านวิชาการ

ข้อเสีย

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

pluses

  • เรามีเวลาเหลือเฟือสำหรับการวิจัย
  • การโยกย้ายจากวัตถุประสงค์เบื้องต้นไม่ก่อให้เกิดปัญหามากนัก

ในอุตสาหกรรม

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

ลองดู:

http://www.dodgycoder.net/2011/10/how-to-become-better-programmer.html


ฉันจะต้องไม่เห็นด้วยกับส่วน "ใช้จริง" ในช่วงต้นยุคกลางยุค 90 ฉันไป 5 ปีที่ บริษัท ต่าง ๆ 3 แห่งใหญ่เล็กและกลางและไม่มีอะไรที่ฉันเขียนลงไปในการผลิต ฉันไม่คิดว่านี่เป็นประสบการณ์ที่ผิดปกติ
Bruce Ediger

2

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

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


1

อันที่จริงแล้ว

ไม่สามารถแยกความแตกต่างระหว่างการเขียนโปรแกรมระดับการศึกษาและการเขียนโปรแกรมในโลกแห่งความเป็นจริงอย่างเต็มที่

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

คุณต้องปฏิบัติตามกฎหมายของภาคธุรกิจนั้นโดยขึ้นอยู่กับภาคส่วนที่คุณทำงาน

ไมเคิลแตะปลายภูเขาน้ำแข็งเพียงโดยระบุงานที่เกี่ยวข้องกับการเขียนโปรแกรมซึ่งฉันจะจัดว่าเป็นเรื่องง่าย

โดยทั่วไปคุณจะต้องเผชิญกับความท้าทายอย่างน้อยสองเรื่องต่อเรื่องในอุตสาหกรรม:

  • กฎหมายที่บังคับใช้ (เช่นการรักษาความลับของลูกค้าเพื่อการแพทย์)
  • ความรู้เรื่อง (เช่นระบบใบแจ้งหนี้ภาษีสินค้าคงคลังการจัดการทรัพยากรแผนการแพทย์มาตรฐานอุตสาหกรรม)
  • ข้อกำหนดของลูกค้าที่ขาดหรือไม่มีอยู่จริงหรือแตกต่างจากมาตรฐานอุตสาหกรรม / กฎหมายที่บังคับใช้

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

ความแตกต่างที่แท้จริงเพียงอย่างเดียวคือโครงการโลกแห่งความจริง

  • มีลูกค้า
  • มีงบประมาณ (เวลาเงินทรัพยากรบุคคล)

มันเป็นเกมบอลที่แตกต่างเมื่อมีคนสร้างกฎ :)


0

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

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

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

1- C # .NET หรือ VB.NET

2- ASP.NET

3- HTML และ CSS

4- SQL Server (หรือฐานข้อมูลอื่น)

5- การเขียนโปรแกรมและออกแบบโปรแกรม OO

6- จาวาสคริปต์

7- กรอบ MVC

8- การได้รับเครื่องมือควบคุมแหล่งกำเนิดแสง

9- การเปิดรับเครื่องมือทดสอบอัตโนมัติบางอย่าง

เครื่องมือติดตาม 10-Bug

แนวคิด 11-E-Commerce (ไม่บังคับ)

12 ออม

13- ทักษะการวิเคราะห์ธุรกิจบางอย่าง

14- ทักษะการสื่อสารบางอย่าง

15 อาจเป็นพื้นฐานการคำนวณแบบคลาวด์

ดังที่คุณเห็นว่าความต้องการส่วนใหญ่ข้างต้นนั้นไม่ค่อยได้รับความสนใจมากนัก (คุณอาจได้รับ 1 หลักสูตรในบางหลักสูตร) ​​ระหว่างวิทยาลัย / มหาวิทยาลัย

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

ส่วนใหญ่จาก Microsoft จะไม่ช่วยคนที่ต้องการพัฒนาแอพพลิเคชั่นใน Java

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

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


12
คุณมี 15 รายการในรายการของคุณ ฉันคิดว่าฉันสามารถเพิ่มอีก 30 ได้มันไม่ใช่หน้าที่ของสถาบันการศึกษาที่จะสอนคุณทุกอย่าง แต่เพื่อสอนวิธีหาเส้นทางผ่านทุกสิ่งนั้น และเพื่อให้มีความรู้ที่จะยังคงใช้งานได้เมื่อเทคโนโลยีในปัจจุบันทั้งหมดจะล้าสมัย (ใน 10 ปีจากนี้) เป็นสิ่งที่ทฤษฎีทั้งหมดดีและไม่ต้องเสียเวลา !
Giorgio

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

@Emmad Kareem: ใช่มีช่องว่างขนาดใหญ่ฉันเห็นด้วย บ่อยครั้งที่อาจารย์มหาวิทยาลัยไม่ได้รู้ว่าเกิดอะไรขึ้นใน "โลกแห่งความจริง" เพราะพวกเขาเพ่งความสนใจไปที่การวิจัยเชิงนามธรรม แต่มันเป็นทักษะการคิดเชิงนามธรรมที่ตอนนี้ให้ฉันเรียนภาษาใหม่ภายในไม่กี่สัปดาห์ (การเรียนรู้สกาล่าตอนนี้) ฉันยังเข้าใจด้วยว่าอาจเป็นเพราะคุณมีปัญหาเรื่องเงินมากขึ้น ฉันโตในอิตาลีและเมื่อฉันเรียนค่าธรรมเนียมมหาวิทยาลัยประมาณ 200 $ ต่อปี (บวกเราต้องซื้อหนังสือด้วยตัวเอง) ฉันเดาว่านี่จะน้อยมากเมื่อเทียบกับสิ่งที่คุณจ่ายในสหรัฐอเมริกา
Giorgio

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

1
เสีย? หากคุณมีองศาที่คุณอ้างว่ามีคุณควรรู้ให้ดีขึ้น แม้ว่าคุณจะไม่ได้นั่งอยู่ที่นั่นการเขียนโปรแกรมคณิตศาสตร์ขั้นสูงบทเรียนที่ได้เรียนรู้จากการศึกษามันแปลโดยตรงไปที่
Rig

0

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

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


0

การบำรุงรักษาและการบำรุงรักษา

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

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

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

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