วิชา CS ที่นักศึกษาระดับปริญญาตรีต้องรู้ [ปิด]


34

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

ฉันจัดการผ่านวิทยาลัยของฉันและฝึกงานกับ บริษัท ด้วยซึ่งฉันทำโครงการและโชคดีที่พวกเขาไม่ได้สนใจคะแนนของฉันเนื่องจากพวกเขาสูงกว่าค่าเฉลี่ย

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

คุณมีข้อเสนอแนะอะไร? เช่นเดียวกับขั้นตอนวิธีเป็นหนึ่งเรื่อง


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

2
ฉันเกลียดการทำงานกับประเภทของคุณ ... jk (เรียงลำดับ) ถ้าฉันเป็นคุณฉันจะใช้เวลาก่อนตรวจสอบสิ่งที่คุณควรรู้จากโรงเรียน - วิธีที่คุณจะไม่เหมือนคนโง่ที่สัมภาษณ์ครั้งต่อไป หลังจากนั้นฉันจะได้เรียนรู้โครงสร้างข้อมูลและอัลกอริธึมในปริมาณพอสมควรซึ่งดูเหมือนว่าพวกเขาสามารถใช้ในโลกแห่งความเป็นจริงได้ คุณต้องคิดออกว่าคุณต้องการที่จะ หากนักพัฒนาเกมคุณอาจต้องใช้พีชคณิตเชิงเส้นกราฟิก 3 มิติรูปทรงเรขาคณิตในการคำนวณ โดยทั่วไปคุณต้องทบทวนข้อมูล str, alg, database, os และ compiler อย่างน้อยและเรียนรู้ต่อไป
งาน

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

1
คุณได้รับคำตอบที่ยอดเยี่ยมจาก CS มากมายด้านล่าง แต่ฉันคิดว่าการ จำกัด คำถามของคุณแบบว่าคุณพลาดสิ่งที่มีประโยชน์ที่สุดสองสามอย่างที่ฉันเห็นใน 15 ปีที่ฉันได้รับ BSCS สิ่งที่ทำให้คนแตกต่าง ที่ทำได้ดีในอุตสาหกรรม: ทักษะการสื่อสารกลุ่มเล็กและการทำงานเป็นทีม Silly ตามที่ปรากฏตรงไปที่แผนกการพูด / ภาษา / โรงละครและเข้าเรียนเช่น "การสื่อสารกลุ่มเล็ก ๆ " หรือ "ความเป็นผู้นำ / การบริหารทีม / กลุ่ม" แม้ว่าคุณจะไม่ได้วางแผนที่จะทำการจัดการทักษะที่คุณเลือกที่นั่นจะทำให้คุณเป็นวิศวกรและสมาชิกในทีมที่ดีขึ้น
cabbey

คำตอบ:


41

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

โครงสร้างคอมไพเลอร์จริงที่คุณเขียนเครื่องสแกนสัญลักษณ์และ parser ของคุณเองจากพื้นดินขึ้น

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

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

(และก่อนที่ใครบางคนกระโดดขึ้นและพูดว่า "คุณสามารถใช้ lex และ yacc ... " คำตอบคืออาจ - มันขึ้นอยู่กับระบบจำนวนมากในบางกรณีภาษาการเขียนโปรแกรมไม่ใช่ C (เช่น PL / M และ Ada) ในบางกรณีไม่มีแพลตฟอร์ม Lex หรือ Yacc ที่พร้อมใช้งานสำหรับแพลตฟอร์มความรู้เบื้องต้นหมายถึงการแก้ปัญหาอยู่ในมือแทนที่จะใช้มือบีบพยายามคิดหาวิธีที่จะทำให้เครื่องมือโค้งงอให้เหมาะกับปัญหา)


6
+1 คอมไพเลอร์เป็นหนึ่งในหลักสูตรโปรดของฉันที่ uni และมีประโยชน์เสมอ ฉันไม่ค่อยใช้ lex / yacc / bison, พื้นฐานมีการใช้ที่เป็นรูปธรรมมากขึ้น
Orbling

ฉันเห็นด้วยอย่างสิ้นเชิงแม้ว่าจะด้วยเหตุผลอื่น ทำความรู้จักกับวิธีการเขียนตัวสร้างรหัส - แม้ว่าฉันจะใช้ Lex และ Yacc - เป็นการแช่ครั้งแรกและดีที่สุดในการเขียนโปรแกรมเชิงวัตถุ
Peter Turner

คุณสามารถ (และควรรู้วิธี) เขียนตัวสร้างโค้ดใน C ธรรมดาหรือภาษาอื่นที่ไม่ใช่ OO จากนั้นเป็นบทเรียนในการเขียนโค้ดขั้นตอนที่มีขนาดใหญ่มากและแบ่งการสร้างตัวแยกวิเคราะห์ / สแกนเนอร์ / โค้ดออกเป็นขั้นตอนที่สมเหตุสมผลและเข้าใจได้
quick_now

+1 คอมไพเลอร์ประกอบด้วยรูปแบบและหลักการมากมายที่จะช่วยให้คุณเห็นการออกแบบและโค้ดในสภาพแสงที่แตกต่างอย่างสิ้นเชิงหลังจากที่ทำเสร็จแล้ว
Andrew T Finnell

2
"นี่คือสิ่งที่ฉันคิดว่าฉันจะไม่มีวันใช้อีกเลย" ถ้าฉันมีเงินดอลลาร์ทุกครั้งที่ฉันพูดกับตัวเองเมื่อตอนที่ฉันยังเด็ก ....
Nick Spreitzer

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

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

  3. แนวคิดของระบบปฏิบัติการ การจัดการหน่วยความจำ Schedulers ฯลฯ นักพัฒนาซอฟต์แวร์ทุกคนควรมีความเข้าใจที่ดีเกี่ยวกับระบบปฏิบัติการเนื่องจากรหัสที่คุณเขียนนั้นมีการโต้ตอบกับมันอยู่ตลอดเวลา

  4. NETSEC ฉันได้พบกับนักพัฒนาน้อยมากที่มีความเข้าใจเกี่ยวกับความปลอดภัยขั้นพื้นฐานกับการพัฒนา (บัฟเฟอร์ล้น, xss, SQLI, ฯลฯ ) นี่เป็นสิ่งจำเป็นถ้าคุณต้องการประสบความสำเร็จในอุตสาหกรรม เป็นการดีถ้าคุณสามารถเขียนสิ่งที่ยิ่งใหญ่ต่อไป แต่คุณจะไม่มีผู้ใช้จำนวนมากนานหากคุณไม่ได้รักษาความปลอดภัยข้อมูลของพวกเขา

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


1
+1 รายการทั้งหมดเป็นสิ่งจำเป็นมาก (4) โดยเฉพาะอย่างยิ่งมีความสำคัญในยุคการกระจายที่ทันสมัย
Orbling

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

+1 สำหรับกระบวนทัศน์การเขียนโปรแกรม ความเข้าใจที่ดีของความแตกต่างระหว่างภาษาต่าง ๆ ช่วยได้มาก
apoorv020

19

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

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

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

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

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

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

  5. หัวข้อยอดนิยมปัจจุบัน - ในทศวรรษที่ผ่านมาอาจเป็นฐานข้อมูลหรือการเขียนโปรแกรมเชิงวัตถุ วันนี้มันอาจเป็นเว็บโปรแกรมหรือสถาปัตยกรรมเชิงบริการ ไม่ว่าแฟชั่นปัจจุบันจะเป็นอย่างไร ถ้าเพียงเพื่อดูว่าแฟชั่นเป็นเรื่องเกี่ยวกับ

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

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

  8. P และ NP - ตกลงอันนี้อยู่ในเส้นทางวิกฤติของคุณแล้ว แต่ให้ความสนใจต่อไป คุณต้องการให้แน่ใจว่าคุณสามารถแก้ไขใครบางคนเมื่อพวกเขาเรียก NP "ไม่ใช่พหุนาม" อย่างไม่ถูกต้องเช่นถ้า!

  9. หัวข้อจากหลักสูตรที่คุณไม่ชอบ - อาจเป็นหลักสูตร CS ที่คุณพบว่ามีระดับต่ำเกินไปในเชิงทฤษฎีหรือหลักสูตรที่ไม่ใช่ CS ที่คุณคิดว่าน่ารังเกียจเกินไปยากเกินไปหรือน่าเบื่อเกินไป . หากหลักสูตรเช่นนี้ดูเหมือนจะเป็นปัญหาสำหรับคุณและคุณพบว่าตัวเองอธิบายกับคนอื่นว่าทำไมคุณถึงดีใจที่คุณไม่ต้องทำอย่างนั้นควรบอกคุณว่าคุณจะได้เรียนรู้มากมาย โดยการเรียน! บางทีคุณอาจไม่ได้เรียนรู้เนื้อหาของหลักสูตร แต่คุณจะได้เรียนรู้เกี่ยวกับขีด จำกัด ของคุณเองและอาจเพิ่มเติมเกี่ยวกับเหตุผลที่คุณทำเอง [คำแนะนำ: พวกเขามักจะอ่อนแอ]

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

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


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

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

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

ในขณะที่ความรู้เรื่องคำชมนั้นมีประโยชน์อย่างแน่นอน แต่ฉันเชื่อว่าความรู้เรื่องการเติมเต็มนั้นเกี่ยวข้องกับเศรษฐศาสตร์มากกว่า
ijw

1
@ijw: เกี่ยวกับเศรษฐศาสตร์สำหรับนักเรียน CS Joel มีการสนทนาที่ดีที่ควรค่าแก่การอ่าน: joelonsoftware.com/articles/CollegeAdvice.html
Macneil

8

หลังจากคุยกับตัวแทน บริษัท และเพื่อนที่มีการสัมภาษณ์หลายครั้ง:

  • ฐานข้อมูล
  • OOP
  • อัลกอริทึม
  • โครงสร้างข้อมูล

มีแนวโน้มที่จะเป็น"musts"สำหรับการจ้างงานใหม่ (หรือตามที่พวกเขากล่าวว่าหลักสูตร "แนะนำอย่างยิ่ง")

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

หวังว่าจะช่วย!


1
จะเห็นด้วยกับ OOP และโครงสร้างข้อมูล
apoorv020

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

3
+1 สำหรับคลาสคณิตศาสตร์ นอกจากนี้ยังช่วยให้คุณเรียนรู้การติดตามปัญหา / ระบบที่มีขนาดใหญ่
Michael K

1
ระบบเครือข่ายเป็นสิ่งที่ดีที่ต้องทำ
Keyo

OOP คุณสามารถโปรแกรมใน Haskell หรือ C โดยไม่ต้องใช้ OOP ... ฉันจะให้มันใช้กันอย่างแพร่หลาย แต่ฉันไม่คิดว่ามันเป็นพื้นฐาน การสัมผัสกับกระบวนทัศน์ต่าง ๆ ในทางกลับกันดูเหมือนจะมีประโยชน์มาก
Matthieu M.

6

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

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

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

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


+1 เนื่องจากปริญญาวิทยาศาสตร์คอมพิวเตอร์ช่วยให้คุณได้รับประสบการณ์กับวิชา / เทคโนโลยีที่หลากหลาย เพียงให้แน่ใจว่าได้ใส่ใจกับหลักสูตรการออกแบบซอฟต์แวร์
นาย Ant

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

5

มี 2 ​​วิธีในการตอบคำถามของคุณ ให้ฉันลองทั้งคู่ วิธีแรกคือการมองสิ่งต่าง ๆ จากมุมมองของตลาดงานที่มีศักยภาพทักษะการเขียนโค้ด ฯลฯ ดังนั้นนี่คือรายการของฉัน:

  1. โครงสร้างข้อมูล
  2. การวิเคราะห์อัลกอริทึม
  3. การเขียนโปรแกรมเชิงวัตถุ
  4. อาจเป็นหลักสูตรเฉพาะใน C ++ หรือ Java
  5. ระบบปฏิบัติการ
  6. การออกแบบส่วนต่อประสานกับผู้ใช้
  7. การเขียนโปรแกรมแบบขนาน

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

  1. ภาษา จำกัด และทฤษฎีออโตมาตะ
  2. คอมไพเลอร์ก่อสร้าง
  3. ทฤษฎีกราฟ
  4. ปัญญาประดิษฐ์

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

2

ฉันยังจะเพิ่มวิศวกรรมซอฟต์แวร์หรือการออกแบบการปฏิบัติในรายการแม้ว่านักเรียนมักจะเลือกเนื้อหาของพวกเขาในอุตสาหกรรม

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

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

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


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

@ Mark: คุณช่วยอธิบายเหตุผลเบื้องหลัง downvote ได้ไหม?
apoorv020

@ apoorv020 โดยไม่อธิบายว่าทำไมคุณจึงแนะนำให้ใช้วิศวกรรมซอฟต์แวร์หรือการออกแบบการปฏิบัติคำตอบของคุณไม่มีประโยชน์ การแก้ไขของคุณยังไม่ได้อธิบายว่าทำไมคุณจึงแนะนำ

@ apoorv020 สิ่งเดียวที่คุณจะได้รับจากการแลกของรางวัลสำหรับการใช้ Software Engineering หรือ Design Practices คือคุณมักจะสร้างโครงการขนาดกลาง (อะไรก็ตามที่มีความหมาย)? คุณเรียนรู้อะไรจากการเรียนหลักสูตรเหล่านั้นด้วยตนเอง

เป็นสิ่งที่ดีที่จะรู้ แต่สิ่งเหล่านี้ไม่ใช่วิชา CS
Thomas Owens

2

สิ่งที่ฉันเรียนรู้ในวิทยาลัยที่ฉันใช้ทุกวัน:

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

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

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

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


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

มันเป็น ฉันได้ออกมาจากมันในด้านเทคนิคและเสียใจมัน
pwc

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

@ Macneil: ในหลักสูตรของฉันหลักสูตรฐานข้อมูลหลักเป็นข้อกำหนดเบื้องต้น (ครอบคลุมพื้นฐานทั้งหมด: การสร้างแบบจำลอง ER, รูปแบบปกติ, SQL (ไม่ใช่แค่พื้นฐาน SQL, สารประกอบ / ซ้อน, ฯลฯ ) ตำแหน่งดัชนี ฯลฯ ) ซับซ้อนกว่า วิชาฐานข้อมูลเป็นวิชาเลือก (ฉันคิดว่ามีทั้งหมดสามข้อ) ฉันไม่เคยเลือกที่จะรับพวกเขาเนื่องจากฉันคิดว่ามันเป็นสิ่งที่ฉันสามารถดูดซับอิสระได้ง่ายกว่าหลักสูตรอื่น ๆ ที่ฉันจะพลาด คิดว่าฉันใช้ขั้นสูงหรือแทน
Orbling

@pwc: ฉันเดิมพันคุณจำได้ไหมว่าทำไมคุณถึงออกไปจากที่นี่
Orbling

2

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

  • โครงสร้างข้อมูลและอัลกอริธึม

    แทบทุกอย่างในการคำนวณกลับมาที่การจัดการข้อมูลโดยใช้อัลกอริทึม ให้ความสนใจเป็นพิเศษกับอาร์เรย์และแฮชเทเบิ้ลเนื่องจากเป็นโครงสร้างข้อมูลที่มีประโยชน์มากที่สุดในการใช้งานทั่วไป แต่รายการและแผนภูมิและกราฟ (ดีมีรายการที่ จำกัด ประเภทของต้นไม้ มีความสำคัญเช่นกัน ยิ่งไปกว่านั้นการเข้าใจอัลกอริทึมมีความสำคัญต่อการสร้างโค้ดที่ไม่น่ากลัว (ไม่เช่นนั้นคุณจะทำสิ่งที่แย่มากเช่นใช้อัลกอริทึมO ( n 3 ) โดยที่ O ( n log n ) จะทำ) หากปริญญา CS ของคุณไม่มีหลักสูตร DS + A บังคับมันไม่ใช่ CS หรือวิศวกรรมซอฟต์แวร์ หรือแม้แต่เขียนโปรแกรม

นอกจากนั้นหลักสูตรที่ฉันพบว่ามีประโยชน์มากที่สุดในช่วงหลายปีที่ผ่านมาคือ:

  • เห็นพ้องด้วย

    มีหลายแง่มุมสำหรับการทำงานพร้อมกัน แต่ฉันคาดหวังว่าจะเข้าใจความแตกต่างระหว่างหน่วยความจำที่แชร์และการส่งข้อความ ฉันต้องการให้มีความครอบคลุมที่แข็งแกร่งของกลยุทธ์การล็อก (mutexes, semaphores, ฯลฯ ) และธุรกรรม

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

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


1

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

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


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

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

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

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

1

ฉันคิดว่าคุณควรศึกษาสิ่งต่อไปนี้:

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

OOP: - นี่คือขนมปังและเนย ต้องมี หนังสือหากคุณต้องการถาม: หนังสือเล่มแรกของคุณควรเป็น: - มุ่งหน้าไปที่ OOAD ก่อนจากนั้นคุณสามารถไปหาหนังสือของ Grady Booch และ Ivar Jacobson

โครงสร้างข้อมูลและอัลกอริทึม: - สำคัญมากในการพัฒนาความคิดเชิงตรรกะและความคิด

สำหรับฉันเท่านี้ก็เพียงพอแล้ว มันไม่สายเกินไป. :)


1

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

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

จากนั้นงานหลักสูตรพิเศษอ่าน:

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

1

มันขึ้นอยู่กับว่าไม่มีคำตอบที่ดีสำหรับคำถามนี้

โปรแกรมเมอร์เป็นโลกทั่วไปในการระบุคนที่เขียนซอฟต์แวร์คอมพิวเตอร์

ตอนนี้ออกมีซอฟต์แวร์ทุกชนิด ตัวอย่างเช่นการใช้วิกิพีเดียเป็นแหล่งของการวางนัยทั่วไปเราสามารถพบกับ3 ลักษณะทั่วไปที่ยอดเยี่ยม :

  • การเขียนโปรแกรมระบบ
  • ซอฟต์แวร์เขียนโปรแกรม
  • ซอฟต์แวร์แอปพลิเคชัน

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

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

เราไม่สามารถพูดถึงซอฟต์แวร์แอพพลิเคชั่นทุกชนิด:
- วิดีโอเกม: พีชคณิต, ฟิสิกส์, หลักสูตรเชิงวัตถุ?
- ซอฟต์แวร์ทางคณิตศาสตร์: หลักสูตรคณิตศาสตร์?
- การแก้ไขภาพ: คณิตศาสตร์ฟิสิกส์หลักสูตรอัลกอริทึม?
- ระบบอัตโนมัติทางอุตสาหกรรม: คณิตศาสตร์ฟิสิกส์อัลกอริทึมหลักสูตรหุ่นยนต์?
- ซอฟต์แวร์ทางการแพทย์: ชีววิทยา, การแพทย์, หลักสูตรอื่นคืออะไร?
- มีหลายสิ่งที่นี่: มีหลักสูตรมากมายที่นี่

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

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

ตามที่คุณได้เรียนรู้มาอย่างขมขื่นในวิทยาศาสตร์คอมพิวเตอร์เชิงทฤษฎี! คุณไหลหลักสูตรนี้หรือไม่ : P

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

ดังนั้นตอนนี้หลักสูตรต้องมีในอาชีพ CS ของคุณคืออะไร?

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

มีความรู้สึกผิดเกี่ยวกับความเป็นจริงในวิทยาศาสตร์คอมพิวเตอร์ ยกตัวอย่างเช่นนักวิทยาศาสตร์คอมพิวเตอร์บางครั้งอยู่ห่างจากผู้พัฒนาซอฟต์แวร์จริงๆ

ลองดูคำอธิบายของวิกิพีเดีย

สนุกกับชีวิต :)

2 เซ็นต์ของฉัน

ขอโทษสำหรับภาษาอังกฤษที่ไม่ดีจริงๆของฉัน


1

มอบสิ่งที่นักเรียน CS ต้องมีความคล่องแคล่วเป็นภาษาอังกฤษ

หากไม่มีความเข้าใจทั้งในการพูดและเขียนภาษาอังกฤษคุณจะเสียเปรียบตลอดกาล

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

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

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


1

ฉันมาที่นี่จากมุมมองที่แตกต่างออกไปเล็กน้อยโดยที่ฉันไม่ได้สำเร็จการศึกษาใน CS ฉันจบการศึกษาด้านวิศวกรรมอิเล็กทรอนิกส์ (มีธุรกิจเล็กน้อย)

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

สิ่งที่ฉันจะบอกว่าฉันเลือกที่ฉันพบว่ามีประโยชน์:

  • การออกแบบ RDBMS - RDBMS นั่งอยู่หลังระบบและไซต์ส่วนใหญ่และคุณควรเข้าใจอย่างน้อยพื้นฐานของสิ่งที่เกิดขึ้น (ฉันได้เรียนรู้สิ่งนี้ในงาน)
  • การออกแบบ UI พื้นฐาน - โปรแกรมเมอร์ที่ดีที่สุดที่ฉันเคยทำงานด้วยสามารถผลิตแอปพลิเคชันที่ใช้งานได้ซึ่งไม่น่าเกลียดเท่านรก ยกเว้นหนึ่ง แต่เขาเป็นข้อยกเว้นที่พิสูจน์กฎ
  • การเขียนโปรแกรมพื้นฐานบางอย่าง - และฉันหมายถึงพื้นฐาน ฉันเรียนรู้ C (สำหรับการประมวลผลภาพและระบบฝังตัว) ภาษาแอสเซมบลีบางภาษา (ซึ่งฉันลืมภายในสัปดาห์ที่จบหลักสูตร) ​​และ Pascal (หลักสูตรการคำนวณขั้นพื้นฐานเป็นมาตรฐานสำหรับวิศวกรทั้งหมด) เมื่อสัมภาษณ์ฉันรู้สึกงงว่าผู้สำเร็จการศึกษา CS เพียงไม่กี่คนที่สามารถเขียนโปรแกรมในลักษณะใดก็ตามองค์กรการค้าจะพิจารณาว่ามีประโยชน์ดังนั้นฉันจึงไม่คาดหวังมากนัก แต่ฉันคาดหวังให้พวกเขารู้พื้นฐาน
  • ลอจิก - ฉันเรียนรู้ผ่านอุปกรณ์อิเล็คทรอนิคส์นักคณิตศาสตร์ผ่านทฤษฏี CS จบด้วยการเขียนโปรแกรม แต่อย่างไรก็ตามคุณเรียนรู้คุณควรเข้าใจมันอย่างถ่องแท้
  • ทักษะการสื่อสาร - ฉันเรียนสองสามหลักสูตรที่มหาวิทยาลัยนอกระดับที่แท้จริงของฉันทักษะการนำเสนอและความกล้าแสดงออก สามัญสำนึกจำนวนมาก แต่ไม่เคยเจ็บที่จะบอกสิ่งที่สมเหตุสมผลสองสามครั้ง
  • พื้นฐานของธุรกิจและการบัญชี โปรแกรมเมอร์บางคนทำตัวเหมือนมันไม่สำคัญ แต่ในใจของฉันมันสำคัญกับทุกคนที่ทำงานใน บริษัท - นี่คือวิธีการทำงานของเกมและมันจะควบคุมชีวิตของคุณดังนั้นทำไมคุณไม่อยากรู้ว่าอย่างน้อยพื้นฐานของ อย่างไรและทำไมสิ่งต่าง ๆ เกิดขึ้น?

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


0

ฉันจะเพิ่มหลักสูตรทรัพยากรบุคคล / จิตวิทยาพื้นฐานบางอย่างลงในรายการด้วย

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

รู้จักศัตรูของคุณเพื่อป้องกันตัวเอง


-1

ปีที่ 1:

  1. OOP ขั้นพื้นฐานในภาษาระดับสูง
  2. โครงสร้างข้อมูล

ปีที่ 2:

  1. คอมไพเลอร์คุณสร้างเกาแบบง่าย ๆ
  2. เห็นพ้องด้วย

ปีที่ 3:

  1. ขั้นตอนวิธี
  2. ระบบปฏิบัติการคุณเพิ่มฟังก์ชันการทำงานและการปรับปรุงให้เป็นแบบง่าย
  3. ภาษาทางการ

ปีที่ 4:

  1. ระบบเครือข่าย
  2. ระบบกระจาย
  3. หน้าจอผู้ใช้
  4. คอมไพเลอร์ขั้นสูง
  5. ระบบปฏิบัติการขั้นสูง
  6. ปัญญาประดิษฐ์
  7. คอมพิวเตอร์กราฟฟิค

หลักสูตรเหล่านั้นควรมีทฤษฎีและการฝึกฝนการเขียนโปรแกรมมากมาย


-2

เป็นเรื่องที่แปลกไม่มีใครพูดถึงสถาปัตยกรรมคอมพิวเตอร์


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