นักเรียนจำนวนมากเมื่อสำเร็จการศึกษาและรับงานแรกรู้สึกว่าพวกเขาไม่รู้วิธีการเขียนโปรแกรมแม้ว่าพวกเขาจะเป็นโปรแกรมเมอร์ที่ดีในวิทยาลัยก็ตาม
อะไรคือความแตกต่างระหว่างการเขียนโปรแกรมในสภาพแวดล้อมทางวิชาการและการเขียนโปรแกรมใน 'โลกแห่งความจริง'?
นักเรียนจำนวนมากเมื่อสำเร็จการศึกษาและรับงานแรกรู้สึกว่าพวกเขาไม่รู้วิธีการเขียนโปรแกรมแม้ว่าพวกเขาจะเป็นโปรแกรมเมอร์ที่ดีในวิทยาลัยก็ตาม
อะไรคือความแตกต่างระหว่างการเขียนโปรแกรมในสภาพแวดล้อมทางวิชาการและการเขียนโปรแกรมใน 'โลกแห่งความจริง'?
คำตอบ:
ในโปรแกรมวิทยาศาสตร์คอมพิวเตอร์ระดับปริญญาตรีแบบดั้งเดิมคุณเรียนรู้เพียงแค่การเขียนโปรแกรม แต่โลกแห่งความจริงไม่ต้องการคนที่เป็นแค่โปรแกรมเมอร์ โลกแห่งความจริงต้องการวิศวกรซอฟต์แวร์ตัวจริง ฉันรู้ว่ารายละเอียดงานหลายอย่างดูเหมือนจะไม่แสดงความแตกต่างนี้ซึ่งสร้างความสับสนให้กับเรื่องเท่านั้น ในโลกแห่งความจริงคุณจะต้องสามารถ:
ใช่แล้วคุณต้องเขียนโค้ดด้วยเช่นกัน แต่โดยเฉลี่ยแล้ว 40-40% ของเวลาของนักออกแบบซอฟต์แวร์
ดังนั้นไม่ใช่ว่าวิทยาการคอมพิวเตอร์ที่เพิ่งสร้างใหม่ไม่รู้ว่าจะเขียนโปรแกรมอย่างไร (จริงๆแล้วเป็นโปรแกรมเมอร์ที่ดีมาก) มันเป็นเรื่องที่หลายคนไม่รู้ว่าจะทำอะไรได้อีก
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% ที่ร้านค้าที่ใหญ่และแย่จริงๆ
ครูของคุณให้คุณ:
การเขียนโปรแกรมในโรงเรียนและการเขียนโปรแกรมในโลกแห่งความเป็นจริงนั้นแตกต่างกันอย่างสิ้นเชิงกับจุดที่มีการทับซ้อนกันน้อยมาก CS จะเตรียมคุณให้พร้อมสำหรับการพัฒนาซอฟต์แวร์ "โลกแห่งความจริง" เช่นการฝึกกรีฑาจะเป็นการเตรียมกองทัพสำหรับการต่อสู้
พวกเขาเผชิญกับปัญหาที่แตกต่าง:
Academia เน้นไปที่ "ศาสตร์แห่งการเขียนโปรแกรม" เป็นหลักดังนั้นการศึกษาวิธีการสร้างอัลกอริธึมที่มีประสิทธิภาพโดยเฉพาะหรือการพัฒนาภาษาที่ปรับให้เหมาะสมกับกระบวนทัศน์บางอย่าง อุตสาหกรรมส่วนใหญ่เน้นในการผลิตสิ่งที่ต้องขาย มันต้องอาศัย "เครื่องมือ" ที่ไม่เพียง แต่ภาษาและอัลกอริธึมเท่านั้น แต่ยังรวมถึงไลบรารี
ความแตกต่างใน "โฟกัส" นี้เป็นสิ่งที่ทำให้นักวิชาการใน C ไม่สามารถเขียนโปรแกรม windows (เนื่องจากเรา windows API ไม่ได้อยู่ในมาตรฐาน C99!) ดังนั้นจึงรู้สึกว่าเป็น "ไม่สามารถโปรแกรม" แต่ที่จริงแล้วเขามีความสามารถทั้งหมดที่จะเรียนรู้ด้วยตัวเองในสิ่งที่เขาขาดหายไป สิ่งที่ไม่มีการศึกษาเชิงวิชาการที่เหมาะสม (ไม่จำเป็นต้องทำใน Academia) - ค่อนข้างหายาก
คำตอบที่ดี ให้ฉันเพิ่มการเขียนโปรแกรมเชิงวิชาการมีแนวโน้มที่จะเหมือนของเล่นเกือบทั้งหมด นี่เป็นสิ่งที่ดีสำหรับการสอน ในฐานะครูคุณพยายามถ่ายทอดความคิดอย่างมีประสิทธิภาพมากที่สุด ข้อเสียคือการเขียนโปรแกรมที่เหมือนจริงจะแตกต่างกันในเชิงคุณภาพมันยากที่จะลดช่องว่าง
พื้นที่หนึ่งของความแตกต่างคือในการวิเคราะห์ประสิทธิภาพ ฉันเขียนบทความจำนวนมากที่พยายามจะชี้ประเด็นนี้ การวิเคราะห์ประสิทธิภาพเป็นเพียงเผินๆเกี่ยวกับอัลกอริทึมและการวัด เพื่อให้ได้ผลอย่างแท้จริงคุณต้องเข้าหามันเป็นกระบวนการดีบั๊ก
พื้นที่ที่แตกต่างก็คือการบำรุงรักษา สิ่งนี้ครอบคลุมทุกอย่างตั้งแต่สไตล์ไปจนถึงการออกแบบภาษาเฉพาะโดเมน คุณไม่สามารถทำได้อย่างมีประสิทธิภาพเว้นแต่คุณจะรู้ว่าคุณกำลังพยายามย่อเล็กสุดอยู่จริง
สิ่งเหล่านี้ไม่ได้รับการสอนและพวกเขาสร้างความแตกต่างอย่างมากในด้านผลผลิต
ในโลกการศึกษาคนส่วนใหญ่เรียนวิทยาศาสตร์คอมพิวเตอร์หรือหลักสูตรที่เกี่ยวข้อง Dijkstra เคยตั้งข้อสังเกตไว้ว่า "วิทยาศาสตร์คอมพิวเตอร์ไม่ได้เกี่ยวกับคอมพิวเตอร์มากไปกว่าดาราศาสตร์เป็นเรื่องเกี่ยวกับกล้องโทรทรรศน์" คนที่เรียนวิทยาศาสตร์คอมพิวเตอร์เป็นคนแรกและสำคัญที่สุดในการเรียนรู้ที่จะเป็นนักวิทยาศาสตร์ไม่ใช่โปรแกรมเมอร์ ในฐานะโปรแกรมเมอร์เขาจะยังคงเป็นมือสมัครเล่นและการเปลี่ยนไปใช้โปรแกรมเมอร์มืออาชีพนั้นยาก
อัพเดท: ถ้าเป็นคนอ่านใจของฉัน: ความคาดหวังของบัณฑิตเมื่อเทียบกับความเป็นจริง ...
ปัจจัยของฉันสองประการ:
ขนาดปัญหา : ในสถาบันการศึกษาฉันส่วนใหญ่ต้องพัฒนาซอฟต์แวร์ "ตั้งแต่เริ่มต้น" ซึ่งหมายความว่าส่วนใหญ่โปรแกรมที่ใหญ่ที่สุดที่ฉันพบคือโปรแกรมที่ใหญ่ที่สุดที่ฉันเขียน สิ่งนี้เน้นความสามารถที่จำเป็นในการจัดการและรับมือกับความซับซ้อนที่เกิดขึ้นจากส่วนต่าง ๆ ของซอฟต์แวร์ที่ทำงานร่วมกัน หากฉันตระหนักถึงความพยายามที่จำเป็นในการทำความเข้าใจกับความซับซ้อนฉันอาจเลือกที่จะไม่อยู่ในอุตสาหกรรมเลย
การอ่านการเขียน VS : ผลข้างเคียงอีกประการของขนาดปัญหาคือบ่อยครั้งใน "โลกแห่งความจริง" เรามีงานที่คนอื่นเขียนไว้ไม่ว่าจะเพื่อการบำรุงรักษา การแบ่งงาน ดังนั้นการอ่านรหัสจึงมีความสำคัญมากกว่าการเขียน
ข้อเสนอสำหรับการพัฒนาการเรียนการเขียนโปรแกรมที่ดีขึ้น : Academia ควรเปิดเผยเราให้เข้ากับสถานการณ์ในโลกแห่งความเป็นจริงมากขึ้นโดยไม่ต้องถอยกลับไปฝึกอบรมสายอาชีพ แพทย์ต้องเผชิญหน้ากับศพในบางครั้งเพื่อดูว่าพวกเขา "ทำเพื่อมัน" (ฉันเคยได้ยินเรื่องราวของผู้คนลดลงแน่นอนหลังจากประสบการณ์นี้) ถ้าฉันเห็นในช่วงต้นทศวรรษที่ยี่สิบโครงการ 20K LOC ประกอบด้วยรูปแบบการเขียนโปรแกรมที่แตกต่างกันซึ่งฉันต้องเข้าใจในวันเดียวและแก้ไขข้อบกพร่องในสามฉันอาจพิจารณาตัวเลือกอาชีพอื่น ๆ - แม้ว่าอาจจะไม่
ความแตกต่างที่ใหญ่ที่สุดที่ฉันได้พบระหว่างการเขียนโปรแกรมเชิงวิชาการและอุตสาหกรรมนั้นเกี่ยวกับความทนทาน ทุกคนส่วนใหญ่มีประสบการณ์ "มันเหมาะกับฉัน" ขัดแย้งในอาชีพของพวกเขาและนี่คือส่วนขยายของเงื่อนไขนี้ ในสถาบันการศึกษามุ่งเน้นไปที่อัลกอริธึมและฟังก์ชั่นโดยคำนึงถึงการใช้งานและความเสถียรของซอฟต์แวร์ภายใต้เงื่อนไขในชีวิตประจำวัน
ตัวอย่างเช่นที่สำนักงานของฉันเรามีวิศวกรที่จะใช้ซอฟต์แวร์และเป็นผู้เชี่ยวชาญที่ทำให้เกิดปัญหาจากมุมที่ เขาจะคลิกที่ปุ่มเร็วที่สุดเท่าที่จะทำได้จนกว่าจะมีอะไรขัดข้อง ... หากการดำเนินการใช้เวลานานเกินไปเขาจะเริ่มคลิกแบบสุ่มไปทั่วหน้าจอ
การเปลี่ยนปรัชญาการเขียนโปรแกรมของเราเพื่อให้สิ่งต่าง ๆ "สตีฟพิสูจน์" โดยทั่วไปได้ปรับปรุงความเสถียรของแอปพลิเคชันของเรา
ฉันไม่มีประสบการณ์ส่วนตัวกับการฝึกอบรมการเขียนโปรแกรมในโรงเรียน - ฉันเป็นวิชาเอกภาษาอังกฤษ ถามฉันเกี่ยวกับ Keats และ Byron! - แต่ฉันได้รับการแนะนำใหม่หลายครั้งและนำพวกเขามาและให้คำปรึกษาพวกเขาในโลกของการพัฒนาซอฟต์แวร์มืออาชีพ ดังนั้นฉันสามารถพูดจากมุมมองนั้น
ประสบการณ์ของฉันคือจริง ๆ ทั้งหมดที่พวกเขาได้รับจากการศึกษาของพวกเขาคือความสนใจในการเขียนโปรแกรม ทักษะของพวกเขาแตกต่างจากศูนย์ถึงเล็กน้อย ความสามารถในการกำกับตนเองของพวกเขานั้นไม่มีอยู่แม้แต่ในทักษะที่สูงที่สุดของพวกเขา ความคิดของพวกเขาไม่เพียง แต่มีขนาดเล็กเท่านั้น จริง ๆ แล้วพวกเขาคิดในขนาดเล็ก ระบบที่ประกอบด้วยโค้ดมากกว่าสิบสองบรรทัดทำให้ระบบล้มเหลวเป็นชิ้น ๆ
แต่คุณรู้อะไรไหม? พวกเขาได้รับความสนใจและนั่นเป็นเรื่องใหญ่ ความสนใจคือความอุดมสมบูรณ์ ฉันสามารถทำงานกับคนที่มีความสนใจ ฉันสามารถเปลี่ยนพวกเขาให้เป็นนักพัฒนาได้โดยที่พวกเขาสนใจฉันเป็นหนึ่งเดียว นั่นคือทั้งหมดที่ฉันเริ่มต้นด้วย สิ่งนั้นและเป็นการขอบคุณสำหรับนักเขียนนวนิยายชาวอเมริกันหลังสมัยใหม่
ในด้านวิชาการ
ข้อเสีย
pluses
ในอุตสาหกรรม
ลองดู:
http://www.dodgycoder.net/2011/10/how-to-become-better-programmer.html
การเขียนโปรแกรมเชิงวิชาการเป็นเรื่องของโค้ดด้วยตัวเอง นี่เป็นสิ่งสำคัญในการเรียนรู้วิธีการทำงาน คุณภาพของรหัสและการควบคุมการแก้ไขนั้นไม่ได้มีความสำคัญมากนัก ด้วยข้อยกเว้นที่น่าทึ่งรหัสไม่ได้มีชีวิตอยู่นอกเหนือการกำหนด ขอบเขตของโครงการมีแนวโน้มที่จะถูก จำกัด มากและไม่น่าจะคืบคลาน
ในโลกแห่งความเป็นจริงคุณควรมีรหัสต้นฉบับน้อยที่สุด รหัสจำนวนมากได้รับการพัฒนาโดยทีมงาน มันจะดีกว่าถ้าใช้ไลบรารีรูทีนมากกว่าเขียนโค้ดด้วยตัวคุณเอง คุณภาพของรหัสและการควบคุมการแก้ไขมีความสำคัญมากขึ้น รหัสมีแนวโน้มที่จะมีอายุการใช้งานนานเกินกว่าที่คาดไว้เดิม ขอบเขตโครงการมักจะค่อนข้างกว้างและมีแนวโน้มที่จะคืบคลานอย่างมากหากไม่ได้รับการจัดการ
อันที่จริงแล้ว
ไม่สามารถแยกความแตกต่างระหว่างการเขียนโปรแกรมระดับการศึกษาและการเขียนโปรแกรมในโลกแห่งความเป็นจริงอย่างเต็มที่
ฉันว่าความแตกต่างที่ยิ่งใหญ่ที่สุดอาจเป็นเช่นนี้: ในการเขียนโปรแกรมในโลกแห่งความเป็นจริง - คุณต้องรู้มากกว่าการเขียนโปรแกรมและควรจะสามารถปรับตัวได้อย่างรวดเร็ว
คุณต้องปฏิบัติตามกฎหมายของภาคธุรกิจนั้นโดยขึ้นอยู่กับภาคส่วนที่คุณทำงาน
ไมเคิลแตะปลายภูเขาน้ำแข็งเพียงโดยระบุงานที่เกี่ยวข้องกับการเขียนโปรแกรมซึ่งฉันจะจัดว่าเป็นเรื่องง่าย
โดยทั่วไปคุณจะต้องเผชิญกับความท้าทายอย่างน้อยสองเรื่องต่อเรื่องในอุตสาหกรรม:
หากคุณเปรียบเทียบโครงการการเขียนโปรแกรมระดับปริญญาเอกการวิจัยกับโลกแห่งความเป็นจริงโอกาสที่พวกเขาจะคล้ายกันมากในความยากลำบากความรู้ระดับเข้าและอื่น ๆ
ความแตกต่างที่แท้จริงเพียงอย่างเดียวคือโครงการโลกแห่งความจริง
มันเป็นเกมบอลที่แตกต่างเมื่อมีคนสร้างกฎ :)
หากคุณดูที่วิชาที่ศึกษาในสาขาวิชาการคุณจะพบว่าประมาณครึ่งหนึ่งของวิชาคณิตศาสตร์วิทยาศาสตร์และวิชาอื่น ๆ และอีกครึ่งหนึ่งของวิชาด้านวิชาการเช่น: การออกแบบคอมไพเลอร์ทฤษฎีของอัลกอริธึมสถาปัตยกรรมคอมพิวเตอร์ การเพิ่มประสิทธิภาพระบบปฏิบัติการอิเล็กทรอนิคส์ดิจิตอลและหลักสูตรอื่น ๆ ที่เกี่ยวข้องกับอุตสาหกรรมเช่นการเขียนโปรแกรม 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
ปัญหาที่แท้จริงคือไม่ได้เป็นหนึ่งในกองเทคโนโลยีที่จำเป็นสำหรับธุรกิจในทุกวันนี้
ข้างต้นครอบคลุมคำถามของความเหมาะสมของผู้สำเร็จการศึกษาเพื่องานธุรกิจเช่นการเขียนโปรแกรมในสภาพแวดล้อมทางธุรกิจ ความต้องการในการวิจัยในห้องปฏิบัติการ ฯลฯ ไม่ได้ครอบคลุมอยู่ในคำตอบนี้ พื้นที่อื่น ๆ ต้องการทักษะมากกว่าด้านบนเช่นการพัฒนาเกมการพัฒนาแบบฝังการพัฒนาระบบแบบเรียลไทม์ ฯลฯ
มาตราส่วน & โฟกัส
จากประสบการณ์ของฉันในสภาพแวดล้อมทางวิชาการโดยทั่วไปขนาดของแอปพลิเคชันที่คุณทำงานมีขนาดเล็กมากบางสิ่งที่สามารถทำให้เสร็จในหนึ่งวันหรือหนึ่งสัปดาห์หรือบางทีตราบเท่าที่ภาคเรียนหนึ่ง โดยทั่วไปทุกสิ่งที่คุณเขียนจะเป็นรหัสทิ้งที่ถูกทิ้งหลังจากระยะ ในโลกแห่งความเป็นจริงคุณอาจพบว่าตัวเองกำลังทำงานกับแอปพลิเคชันที่ทีมใหญ่ใช้เวลาหลายเดือนในการพัฒนาอย่างเต็มที่ คุณใช้เวลามากขึ้นและตรวจแก้จุดบกพร่องของรหัสของผู้อื่นและพยายามทำความเข้าใจกับโครงสร้างพื้นฐานของ codebase การเล่นกลไม่ทำลายส่วนที่มีอยู่เพื่อเพิ่มความต้องการใหม่หรือแก้ไข
ความต้องการบูรณาการลูกค้า
นอกจากนี้ยังมีด้านการพัฒนารหัสเช่นการวิเคราะห์ความต้องการการทดสอบการรวม ฯลฯ ที่มีแนวโน้มที่จะเป็นตัวแทนน้อยในโครงการทางวิชาการ เพื่อการให้คะแนนอย่างเป็นธรรมโดยทั่วไปแล้วข้อกำหนดจะถูกกำหนดไว้แล้วโดยผู้สอนและมันก็ไม่ได้ตัดสินใจร่วมกันในการประชุม คุณไม่จำเป็นต้อง "ขายลูกค้า" ด้วยวิธีการเฉพาะที่ไม่ใช่สิ่งที่พวกเขาต้องการ แต่สิ่งที่แตกต่างจากความต้องการของพวกเขานั้นเป็นไปได้จากมุมมองทางเทคนิค ในการตั้งค่าทางวิชาการลูกค้าของคุณ (ผู้ที่จบการศึกษาหรือผู้สอน) มีแนวโน้มที่จะมีความคิดที่เป็นรูปธรรมในสิ่งที่พวกเขาต้องการในโลกแห่งความเป็นจริงคุณอาจพบลูกค้าที่ไม่รู้จริง ๆ ว่าพวกเขาต้องการอะไรและต้องเลือกสมอง ควรจะสร้าง
การบำรุงรักษาและการบำรุงรักษา
ในสถาบันการศึกษา (อย่างน้อยในระดับปริญญาตรี) ซอฟต์แวร์ถูกสร้างขึ้นโดยมีเป้าหมายระยะสั้นอยู่ในใจโดยทั่วไปแล้วจะทำการบ้านหรือโครงการภาคการศึกษาให้เสร็จสิ้น เมื่อการมอบหมายเสร็จสมบูรณ์รหัสจะถูกโยนทิ้งไปและไม่เคยเห็นอีกเลย
ในการตั้งค่าระดับมืออาชีพซอฟต์แวร์ส่วนใหญ่เขียนด้วยการใช้งานในระยะยาว ซอฟต์แวร์มีจุดประสงค์เพื่อใช้เป็นเวลาอย่างน้อยสองสามปีและจะต้องมีการสร้างเพื่อให้บำรุงรักษาและอัปเดตได้อย่างง่ายดายตลอดเวลา
ที่เกี่ยวข้องกับเรื่องนี้คืองานบำรุงรักษา งานเขียนโปรแกรมมืออาชีพส่วนใหญ่เกี่ยวข้องกับการอัพเดตหรือบำรุงรักษาซอฟต์แวร์ที่มีอยู่ สิ่งที่เรียกว่าโครงการ "กรีนฟิลด์" เป็นข้อยกเว้นไม่ใช่เรื่องปกติ