ทรัพยากรวิทยาการคอมพิวเตอร์เชิงทฤษฎีด้วยตนเองสำหรับโปรแกรมเมอร์


14

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

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


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

4
คุณเรียนหลักสูตรทฤษฎีที่วิทยาลัย / มหาวิทยาลัยอย่างเช่นโครงสร้างข้อมูลอัลกอริธึมเป็นต้น? หากคุณไม่จำเป็นต้องเรียนหลักสูตรระดับปริญญาตรีตามปกติแล้วหนังสือเรียนสำหรับหลักสูตรเหล่านั้นจะเป็นจุดเริ่มต้นที่ดี หลังจากนั้นคุณสามารถดูบทความวิกิพีเดียรายชื่อหนังสือและรายการวิดีโอหลักสูตรออนไลน์ที่ Coursera / Udacity / EdX / ... Coursera มีหลักสูตรทฤษฎีที่ดีงาม
Kaveh

คุณเรียนอะไรในวิทยาลัย
Omar Shehab

คุณเขียนโปรแกรมภาษาอะไร ทฤษฎี CS ส่วนใหญ่สามารถเรียนรู้ควบคู่กับบางสิ่งบางอย่างที่เป็นรูปธรรม ตัวอย่างเช่นหากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับภาษาทางการภาษา / นิพจน์ทั่วไป (เช่น regexp's) เป็นจุดเริ่มต้นที่ดีเช่นเดียวกับการเรียนรู้เกี่ยวกับคอมไพเลอร์ สำหรับทฤษฎีประเภทคุณอาจต้องการเล่นด้วยภาษาที่พิมพ์แบบคงที่เช่น Haskell, F # หรือ ML
Baby Dragon

ลองNew Turing Omnibusโดย Dewdney เป็นส่วนอ้างอิง / สำรวจ / ตัดขวางแบบอินโทร ดูหนังสือวิทยาศาสตร์ยอดนิยมที่เป็นแรงบันดาลใจให้ TCS
vzn

คำตอบ:


7

มันเป็นทุ่งกว้างที่มีพื้นที่แตกต่างกันบ้างเล็กน้อย

ฉันจะเริ่มต้นด้วยแนวคิดพื้นฐานที่สุดบางอย่างเกี่ยวกับคอมพิวเตอร์คือ: Hopcroft และ Ullman "รู้เบื้องต้นเกี่ยวกับทฤษฎีออโตมาตาภาษาและการคำนวณ"

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


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

จากนั้นคุณจะสามารถทำงานผ่านมันได้อย่างรวดเร็ว :)
Kate F

มันแตกต่าง แต่ไม่ความแตกต่าง CS มีหลักการอื่น ๆ อีกมากมาย
vzn

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

2
@JanJohannsen ฉันไม่เห็นด้วย - ตัวอย่างเช่นดูพฤติกรรมที่ไม่ได้กำหนดสำหรับ C.
Kate F

9

มีหลายวิธีในการเรียนรู้เกี่ยวกับทฤษฎีประเภท สำหรับโปรแกรมเมอร์ที่ทำงาน ประเภทและภาษาโปรแกรมโดย B. Pierce เป็นการเริ่มต้นที่ดี พื้นฐานที่เป็นประโยชน์สำหรับการเขียนโปรแกรมภาษาโดย R. Harper อาจดีเช่นกัน หากคุณต้องการบิตของง่ายต่อการอ่านพื้นหลังในการดำเนินงานความหมายผมขอแนะนำให้ G. Winskel ของความหมายอย่างเป็นทางการของการเขียนโปรแกรมภาษา: บทนำ ด้วย T. Nipkow, G. Klein, ซีแมนติกคอนกรีตตัวแปรของหนังสือของ Winskel ได้รับการทำเป็นทางการสำหรับผู้ช่วยพิสูจน์แบบโต้ตอบของ Isabelle / HOL ฉันสงสัยว่ามันเป็นเรื่องยากจริงๆที่จะจับกับนักเขียนเพียงแค่จากหนังสือเล่มนี้ (หรือใด ๆ ) คุณต้องการให้ผู้เชี่ยวชาญใกล้เคียงถามคำถาม หากคุณต้องการวิธีการทางคณิตศาสตร์มากขึ้นในประเภททฤษฎีคุณสามารถดู JR Hindley, JP Seldin, แลมบ์ดาแคลคูลัสและ combinators: บทนำหรือเอช Barendregt ของแลมบ์ดานิ่วกับประเภท แม้ว่าฉันจะไม่แนะนำให้เริ่มต้นจาก Barendregt

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


2

ฉันแนะนำการคำนวณความซับซ้อนและภาษาโดย Martin Davis, Ron Sigal และ Elaine Weyuker


นั่นเป็นหนังสือที่สวยงามสำหรับ TCS แบบเก่า ยกเว้นส่วนของความหมายเชิงทฤษฎีของโดเมนซึ่งสามารถข้ามได้
Martin Berger

1

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

ขอบคุณ @Kate F สำหรับตัวชี้ใช่ Hopcroft และ Ullman เป็นจุดเริ่มต้นที่ดีเยี่ยม

อย่างไรก็ตามนี่คือวิธีที่ฉันเริ่มต้น

  1. อ่านคำแนะนำเกี่ยวกับอัลกอริทึมโดย Cormen <\ br> นี่คือจุดเริ่มต้นที่ยอดเยี่ยม เมื่อคุณศึกษาพยายามที่จะเข้าใจหลักฐานแต่ละข้อให้มากที่สุด หากคุณเข้าใจการพิสูจน์ได้ดีให้ลองใช้รหัสเดียวกันกับภาษาที่คุณเลือก (ใช้เวลานานขึ้นเล็กน้อย แต่ก็คุ้มค่าที่จะลอง)

  2. ติดตามการประชุมชั้นนำในทฤษฎีเช่น
    FOCS
    SODA
    STOC
    EC (การพาณิชย์อิเล็กทรอนิกส์) - ทฤษฎีเกมขั้นตอนวิธี
    COLT (การประชุมเกี่ยวกับการเรียนรู้ทฤษฎี) - การเรียนรู้ทฤษฎี
    CRYPTO - การเข้ารหัส
    SOCG (Symposium on Computational Geometry) - การคำนวณเรขาคณิต
    CCC ความซับซ้อนในการคำนวณ) - ทฤษฎีความซับซ้อน

แม้ว่าคุณจะไม่เข้าใจลองอ่านและคิดให้มากเท่าที่จะทำได้ คุณต้องทำพิสูจน์ให้มากที่สุด ..

  1. นี่เป็นสถานที่ที่น่าแปลกใจที่จะดูว่าคุณกำลังคิดถึงความซับซ้อนในการคำนวณโดยเฉพาะ ( นี่คือจากสแตนฟอร์ด )
  2. ติดตาม Prof. Sanjeev Arora, Boaz Barak, Jelani Nelson, Madhu Sudan
  3. นี่คือชุดของข้อมูลที่สังเคราะห์ขึ้นในด้านการคำนวณเชิงซ้อน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.