วิชา / ทฤษฎี CS ที่ยากที่สุดที่คุณเรียน แต่สำคัญกับสาขาวิชานี้คืออะไร? และเหตุผลได้มั้ย
วิชา / ทฤษฎี CS ที่ยากที่สุดที่คุณเรียน แต่สำคัญกับสาขาวิชานี้คืออะไร? และเหตุผลได้มั้ย
คำตอบ:
“ วิทยาศาสตร์คอมพิวเตอร์มีปัญหา 2 ข้อ ได้แก่ การแคชการตั้งชื่อและข้อผิดพลาดแบบออฟไลน์ 1”
สุจริตสร้างคอมไพเลอร์!
การออกแบบและวิเคราะห์อัลกอริทึม
ฉันคิดว่าคำถามนั้นขึ้นอยู่กับครูที่คุณมีและวิธีการจัดระเบียบเรื่องนั้นในอาชีพของคุณ
การวิเคราะห์อัลกอริทึมอาจทำได้ยากอย่างที่ใครบางคนต้องการ รับทราบว่ามีปัญหาที่ยังไม่แก้และไม่เพียงเท่านั้น: ปัญหาที่แก้ไขไม่ได้
สิ่งคือคุณสามารถมีปัญหาและถ้าคุณรู้ว่ามันไม่สามารถแก้ไขได้นั่นคือสิ่งที่สมบูรณ์แบบ แต่ถ้าคุณไม่ทำล่ะ คุณสามารถใช้เวลามากมายในการพยายามแสดงให้เห็นว่าเป็น NP-Complete หรือพยายามหาวิธีแก้ปัญหาเวลาแบบพหุนามเพื่อแก้ปัญหา
การแสดงให้เห็นว่า NP-Completness นั้นไม่ใช่เรื่องง่าย ใช่ทราบปัญหามากมาย แต่สิ่งสำคัญคือการค้นหาการลดลงเพื่อแสดงให้เห็นว่าเป็นปัญหาที่สมบูรณ์ และถ้าคุณใช้เวลาหลายชั่วโมง / วัน / เดือนในการพยายามสาธิตมันและมันสามารถแก้ไขได้ในเวลาพหุนาม :)
นอกจากนี้ยังมีวิชาอื่น ๆ เช่นคอมไพเลอร์ , ทฤษฎีกลุ่มและฟังก์ชั่นซ้ำดั้งเดิมที่สามารถจะเป็นหนักเป็นแผนเรื่องหรือต้องการครู;)
การจดจำรูปแบบเช่นปัญญาประดิษฐ์ นี่หมายถึงคอมพิวเตอร์อัจฉริยะพร้อมกับเครื่องมือจดจำรูปแบบอื่น ๆ เช่นการรู้จำอักขระด้วยแสงเสียงเป็นข้อความการระบุใบหน้า ฯลฯ
หลายสิ่งที่ "เจ๋ง" ที่คุณสามารถทำได้หรือหวังว่าคุณจะทำได้ด้วยคอมพิวเตอร์ขึ้นอยู่กับอัลกอริธึมเหล่านี้และเราพยายามทำให้สมบูรณ์แบบมาหลายทศวรรษโดยที่ไม่ประสบความสำเร็จอย่างมากมาย
การเลือกของฉันคือทฤษฎีการคำนวณ
(อืม ... อาจจะไม่สำคัญ แต่ก็แน่ใจว่าเป็นเรื่องยาก)
วิทยาศาสตร์คอมพิวเตอร์มีปัญหาเพียงสองปัญหาเท่านั้น: การทำให้แคชใช้ไม่ได้และการตั้งชื่อ - ฟิลคาร์ลตัน
ทฤษฎีหมวดหมู่ (คณิตศาสตร์ไม่ต่อเนื่อง) แต่คุ้มค่า
การอ่านรหัส
หากคุณทำผิดเพียงเล็กน้อยก็อาจมีค่าใช้จ่ายหลายล้าน บริษัท
ระบบปฏิบัติการโดยเฉพาะส่วนที่เกี่ยวข้องกับเธรด
และเหตุผลไม่ใช่เพราะมันยากที่จะทำให้นักปรัชญา 5 คนกินพิซซ่าด้วยส้อม เหตุผลก็เพราะการเขียนรหัสแบบมัลติเธรดอยู่ในตัวของมันเองยากและไม่จำเป็นต้องง่ายสำหรับมนุษย์ (อย่างน้อยผู้ชาย - ตามภรรยาของฉัน) ใจที่จะคำนวณ
ฉันก็ลงคะแนนให้ Compiler Design เช่นกัน โดยเฉพาะอย่างยิ่งที่ส่วน DFA และ NFA เข้ามาฉันยังไม่ชัดเจนเกี่ยวกับปัญหาและสิ่งต่าง ๆ
เทคนิคนี้เป็นสาขาของคณิตศาสตร์ แต่มีความเกี่ยวข้องสูงใน CS
เกือบทุกอย่างใน CS ขึ้นอยู่กับคิว (มองเห็นได้ (ชัดเจน) และมองไม่เห็น (ไม่ค่อยชัดเจนหรือโดยนัย)
ในวันแรกของ CS คิวจะชัดเจน
คิวของโปรแกรม (แต่ละโปรแกรมสำรับไพ่)
ทุกวันนี้คิวไม่ชัดเจนนัก ตัวอย่างเช่นอินเทอร์เน็ต: เครือข่ายที่สลับแพ็คเก็ต แต่แพ็คเก็ตในรูปแบบคิวและการกำหนดเส้นทางแพ็คเก็ตเป็นรูปแบบของการลดคิว
มันไม่ยากเกินไปสำหรับปัญหาของเล่นที่คุณได้รับในหลักสูตร แต่เมื่อคุณเริ่มพิจารณาปัญหาที่แท้จริงมันจะกลายเป็นงานน่าเบื่อหน่ายอย่างจริงจัง
การตีความข้อกำหนดของลูกค้าเมื่อลูกค้าไม่รู้จริง ๆ ว่าพวกเขาต้องการอะไร นี่ไม่ใช่การสอนในวิทยาลัยและเป็นหนึ่งในทักษะที่สำคัญที่สุดที่จะมี
ส่วนตัวของฉันคือ Formal Logic มันยากที่จะเริ่มต้นด้วย แต่เมื่อคุณได้รับกฎและจัดการกับมันพอสมองของคุณไปLogic++;
ซึ่งในการพัฒนาเป็นสิ่งที่ดีมาก
ในฐานะที่เป็นหมายเหตุด้านข้างฉันกำลังตอบคำถามโดยตรง - นี่ไม่ใช่วิชาที่ยากที่สุดเมื่อฉันสำเร็จการศึกษา แต่อาจเป็นวิชาที่ "ยากที่สุดในชีวิต"
คอมไพเลอร์ก่อสร้าง ยาก แต่ต้องเข้าใจแนวคิดเบื้องหลัง
ออกแบบเคอร์เนลทุกคน? ฉันไม่รู้จริงๆว่ามันเสร็จสิ้นแล้วและอะไรคือคุณสมบัติเป้าหมายสำหรับระบบปฏิบัติการ แต่สำหรับฉันที่คิดว่าการออกแบบเคอร์เนลต้องเป็นงานที่น่ากลัว
ฉันคิดถึงความปลอดภัยของคอมพิวเตอร์ด้วย ฉันไม่รู้จริงๆว่าอะไรทำให้ระบบไม่ปลอดภัยยกเว้นแน่นอนว่ามีบัฟเฟอร์ล้นอย่างชัดเจน XSS และ SQL injections
ฉันไม่แน่ใจ แต่ดูเหมือนว่าอัลกอริทึมบางอย่างก็ไม่ปลอดภัยเช่นกัน ดูที่โครงการ MetaSploit โดยจะแสดงรายการการละเมิดความปลอดภัยทุกประเภทและประเภท: คุณสามารถดูว่ามีหลายวิธีที่โปรแกรมสามารถมีข้อบกพร่อง
มีหัวข้อที่น่าอึดอัดใจจำนวนมากในเขตมี แต่หยิบของฉันสำหรับความยากลำบากถาวรที่แท้จริงเป็นผู้ที่เกี่ยวข้องกับคุณสมบัติของระบบโลก ตัวอย่างของหัวข้อทั่วไปนี้รวมถึง:
สิ่งเหล่านี้ยากเพราะคุณหลังจากสิ่งที่มีอยู่เฉพาะเมื่อทุกอย่างถูกต้อง คุณต้องการคุณสมบัติของระบบทั่วโลกและยังมีเครื่องมือทั้งหมดที่มีอยู่ (และทุกอย่างที่ปรับให้เข้ากับปัญหาที่แท้จริงในประสบการณ์ของฉัน) เพียง แต่ให้เหตุผลท้องถิ่นเท่านั้น มันเป็นกระบวนการของการเริ่มจากการให้เหตุผลเกี่ยวกับชิ้นส่วนของโปรแกรมไปจนถึง Shebang ทั้งหมดที่ยากโดยเฉพาะอย่างยิ่งเพราะเป็นไปได้ที่จะมีชิ้นส่วนที่ถูกต้องทั้งหมดในตัวเอง แต่ยังมีข้อบกพร่องที่บอบบางเพราะส่วนประกอบถูกจัดอย่างไม่ถูกต้อง ข้อบกพร่องสามารถเป็นลักษณะฉุกเฉินที่ไม่พึงประสงค์ ...
บริการข้อมูลการจัดการ
ในช่วงที่ฉันเรียนอยู่ฉันเคยมีเรื่องการจัดการหนึ่งภาคการศึกษาแต่ละภาคซึ่งทำให้ฉันเป็นบ้า
ยาก! วิชาที่ดีเช่นคอมไพเลอร์ออกแบบ , OS ออกแบบฯลฯ เป็นยาก แต่พวกเขาเป็นจริงที่น่าสนใจและท้าทายความสามารถ ฉันสับสนในวิชาต่างๆเช่น Management Information System / Services เป็นต้นเนื่องจากพวกเขาเต็มไปด้วยความเบื่อหน่ายและคุณต้องผ่านทฤษฎีมากมาย
หากคุณกำลังทำงานในพอยน์เตอร์ C / C ++ เป็นแนวคิดที่สำคัญที่สุดที่ควรทราบ แต่อย่างใดฉันไม่เคยเข้าใจมันอย่างเต็มที่ในวิทยาลัย
การออกแบบและวิเคราะห์อัลกอริทึม มันไม่ยากนักที่จะเข้าใจและวิเคราะห์อัลกอริธึมที่รู้จักกันดีนั่นคือการออกแบบและวิเคราะห์อัลกอริธึมใหม่สำหรับปัญหาที่ยากนั้นยากและต้องการความเข้าใจในวงกว้างและการฝึกฝนในการใช้เทคนิคที่แตกต่างกัน
การเขียนโปรแกรมข้อ จำกัด ซึ่งจัดการกับปัญหาเกี่ยวกับ combinatorial, ปัญหา NP-complete
การเพิ่มประสิทธิภาพของอัลกอริทึมเป็นหัวข้อที่ท้าทาย
วิชา / ทฤษฎี CS ที่ยากที่สุดที่คุณเรียน แต่สำคัญกับสาขาวิชานี้คืออะไร?
คณิตศาสตร์ไม่ต่อเนื่อง
มันยากเพราะทฤษฎีนั้นมีความสัมพันธ์ซึ่งกันและกันอย่างหลวม ๆ แต่พวกมันถูกใช้ใน CS การท่องจำมากเกินไปฉันเดาว่า ...
พิสูจน์โดยการเหนี่ยวนำ, บิ๊กโอ, การเรียกซ้ำ, หารและพิชิต, ทฤษฎีกราฟ, blah blah .. argh!
คอมไพเลอร์สำหรับฉันนั้นง่ายเพราะเราต้องใช้ทฤษฎีของออโตมาต้า ^^
สัญกรณ์ Z / วิธีการที่ใช้ในการทำร้ายสมองของฉันที่วิทยาลัย ส่วนใหญ่เป็นเพราะฉันเกลียดมัน Hard นั้นง่ายกว่ามากเมื่อคุณสนุกกับสิ่งที่คุณทำและยากกว่าเมื่อคุณไม่ทำ
ฉันชอบคำตอบของคุณ (และฉันไม่ลืมที่จะยกระดับ) เช่นคอมไพเลอร์เคอร์เนล ฯลฯ แต่โปรแกรมเมอร์ส่วนใหญ่ไม่เคยพบปัญหาเหล่านี้ มีปัญหาง่ายขึ้นเล็กน้อย แต่พบบ่อยมากขึ้น: การทำงานพร้อมกัน - กระทู้ล็อค มันง่ายมากที่จะเขียนโปรแกรมที่สร้างข้อผิดพลาดที่น่าอัศจรรย์ถ้าเราทำแม้แต่บั๊กเล็ก ๆ ในสถาปัตยกรรมการทำงานพร้อมกัน
ดังนั้นฉันพูดว่ามันไม่ใช่ปัญหาที่ยากที่สุดในการคำนวณ แต่เนื่องจากมันใช้กันทั่วไปมันจึงเป็นสิ่งที่อันตราย
การเขียนโปรแกรมเชิงวัตถุ
อาจเป็นเพราะฉันตัดฟันของฉันใน FORTRAN และ APL แต่การเปลี่ยนจากภาษาเชิงปฏิบัติอย่างเคร่งครัดไปสู่วัตถุเป็นสิ่งที่ฉันดิ้นรนมาหลายปี มันไม่ได้ช่วยที่เรียกว่า 'ผู้เชี่ยวชาญ' เขียนบทความและแบบฝึกหัดที่ขัดแย้งกันในสิ่งที่มันหมายถึงการมุ่งเน้นวัตถุและวิธีที่ดีที่สุด / เหมาะสมของการสร้างโปรแกรมเชิงวัตถุ