การเรียนรู้ C จำเป็นสำหรับวิทยาศาสตร์คอมพิวเตอร์หรือไม่ [ปิด]


15

ฉันเป็นผู้พัฒนาส่วนหน้าซึ่งแทบไม่เห็นแม้แต่ไฟล์.hหรือ.cส่วนขยาย ฉันรู้ไวยากรณ์ C พื้นฐานฉันได้เรียนรู้ใน Unreality แต่ไม่เคยสนใจการเขียนโปรแกรมระดับต่ำเช่นนี้เพราะเป็นการตั้งค่าที่ง่ายเกินไปสำหรับสิ่งที่เรียบง่าย

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

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


4
นี่คือความเห็นของ Joel Spolsky เกี่ยวกับเรื่องนี้: joelonsoftware.com/articles/CollegeAdvice.html มันสามารถพูดคุยได้ แต่ฉันคิดว่าเขามีคะแนนของเขา
Doc Brown

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

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

ไม่จริง? มันควรจะเป็นมุมมองของการแก้ไขอัตโนมัติจากมหาวิทยาลัยหรือเป็นโรงเรียนแห่งเวทมนตร์ดำ? ฉันรู้ว่ามหาวิทยาลัย Unseen แม้ว่า: [
Deer Hunter

คำตอบ:


31

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

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

(เน้นที่เหมือง)

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

นอกจากนี้ C ไม่ใช่ภาษาที่ยิ่งใหญ่ หากคุณต้องการเรียนรู้ทุกแง่มุมของวิทยาการคอมพิวเตอร์อย่างแท้จริงคุณควรยักและพูดว่า 'meh' 'มีภาษาอะไรอีกบ้าง'


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

3
@Telastyn: หมายความว่าคุณมีความชำนาญพอที่จะเข้าใจและแก้ไขรหัสระบบปฏิบัติการและรหัสเครือข่าย - โดเมนที่ใช้ C สำหรับและนั่นคือมัน ไม่ได้หมายความว่าคุณจำเป็นต้องรู้วิธีการเขียนเกมใน C สร้าง UI ที่น่าสนใจและสร้างแอพพลิเคชั่นใน C, กราฟิคหรือเอนจิ้นเครื่องอัจฉริยะใน C; เพราะสำหรับโดเมนอื่น ๆ ของ CS มีตัวเลือกภาษาอื่น ๆ
rwong

12

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

จนถึงตอนนี้มหาวิทยาลัยมักจะใช้ระบบ Unix สะดวกนี่คือโปรแกรมใน C. หนึ่งสามารถเริ่มต้นด้วยการเรียนรู้ C บนเครื่องใด ๆ และในที่สุดก็เข้าไปในซอร์สโค้ดยูนิกซ์ใน C. ที่บ้านนักเรียนสามารถใช้คอมไพเลอร์ C เช่น Borland Turbo C บน Windows หรือMPWบน Mac - ใช้ได้ทุกที่

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

โรงเรียนเก่าบางแห่งเรียนรู้ Fortran แต่อีกครั้งมันไม่มีภาษาที่ทรงพลังเพียงพอในหลาย ๆ กรณีที่จะสามารถสอนวิชา CS ระดับสูงขึ้นได้ (ทฤษฎี AI ใน Fortran? ทำได้ แต่เจ็บปวด)

และเป็นเวลานาน C คือตัวเลือก

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


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


สำหรับการบันทึกนั้นการฝึกอบรมแบบ AI นั้นทำขึ้นมากับสหายที่เป็นคนโง่ของ C ผ่านยุค 70 และ 80, LISP แต่คำตอบนั้นอยู่บนหัว
jwrush

@ เขียนคำตอบของฉันไปตามบรรทัดที่คุณสามารถทำการศึกษา AI ใน C ได้มากกว่าเมื่อเปรียบเทียบกับภาษาอื่น ๆ ในเวลานั้น (ไม่ใช่ LISP - และฉันเรียนเสียงกระเพื่อมใน '90s สำหรับ AI) จริงอยู่ที่ MIT (บ้านของ eggheads) ในเวลานั้นสอนหลายชั้นเรียนใน LISP - และมันก็เป็นอีกทางเลือกหนึ่ง แต่ก็ไม่ค่อยมีประโยชน์ในด้านอื่น ในการสอนเป็นสิ่งสำคัญที่จะต้องทำงานจากพื้นฐานเดียวกันในแต่ละชั้นเรียนเพื่อไม่ให้ใช้เวลาหนึ่งหรือสองสัปดาห์ในการสอนนักเรียนอีกภาษาหนึ่งที่เชี่ยวชาญในชั้นเรียนนั้น

12

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

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

  • อัลกอริทึมและโครงสร้างข้อมูล มาตรฐานC แทบจะไม่มีสิ่งใดเลย - การใช้สิ่งเหล่านี้แล้วในภาษาหรือในห้องสมุดมาตรฐานของมันมีแนวโน้มที่จะเป็นระบบลดระดับความน่าเชื่อถือสำหรับนักเรียน: " ทำไมฉันถึงต้องใช้สิ่งที่หาได้ง่าย"เมื่อมองที่โค้ด C คุณจะเห็นค่าใช้จ่ายอัลกอริธึมทันทีเนื่องจากทุกอย่างใน C คอมไพล์ไปยังคำสั่งเครื่องเพียงไม่กี่ภาษาภาษาระดับสูง (เช่น Perl หรือ Python) มักจะใช้โครงสร้างข้อมูลขั้นสูง โค้ดรู้สึกเบา แต่ไม่ใช่คุณต้องการความรู้อย่างมากในการให้เหตุผลที่ถูกต้องเกี่ยวกับความซับซ้อนของอัลกอริทึมของโค้ดเหล่านั้นดังนั้นภาษาเหล่านี้จึงไม่เหมาะสำหรับอัลกอริทึมการเรียนรู้และโครงสร้างข้อมูลและโปรแกรมเมอร์จำนวนมาก ในภาษาระดับสูงมีแนวโน้มที่จะไม่สามารถจัดการกับปัญหา performace เมื่อพวกเขาพบพวกเขา

  • ระบบปฏิบัติการ. ระบบปฏิบัติการส่วนใหญ่เขียนด้วย C คุณต้องการทำความเข้าใจการสร้างกระบวนการโดยไม่ต้องโทรforkอย่างไร เลเยอร์ที่เป็นนามธรรมของ Java VM ไม่ได้ช่วยอะไรที่นี่ และเพียงแค่พูดถึงมันโดยไม่ต้องสร้างกระบวนการที่เลวร้ายยิ่งกว่าเดิม ... คุณจะเขียนซอฟต์แวร์อย่าง Eclipse ซึ่งสามารถเปลี่ยนเส้นทางของเอาต์พุตมาตรฐานไปยังหน้าต่างใดบานหนึ่งได้อย่างไร คุณต้องเข้าใจแนวคิดระดับ OS สำหรับสิ่งนั้นและคุณสามารถสัมผัสสิ่งเหล่านั้นโดยตรงใน C เท่านั้น

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

นอกจากนี้ยังมีข้อดีทางเทคนิคของความรู้ C:

  • การทำงานร่วมกันข้ามภาษา คุณต้องการรวมโมดูล Ruby ที่ยอดเยี่ยมเข้ากับโครงการ Python ของคุณ (แทนที่สองภาษาโดยพลการที่นี่) โอกาสที่วิธีเดียวที่จะทำเช่นนั้นคือผ่าน C เพราะทั้งสองภาษามีส่วนต่อประสานกับ C เป็นภาษาต่างประเทศ

  • ประสิทธิภาพการเขียนซอฟต์แวร์ที่สำคัญ หนึ่งไม่สามารถข้ามไประดับต่ำในการทำเช่นนี้


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


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

6

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

TL; DR : ในความคิดของฉัน C นั้นง่าย C ที่ดีนั้นสามารถอ่านได้และมีความสุขที่พบได้ในการต่อสู้บิต

C นั้นง่าย

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

ที่เรียบง่ายมีความสวยงาม

C ไม่ใช่ความลับ

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

bool kthread_freezable_should_stop(bool *was_frozen)
{
    bool frozen = false;

    might_sleep();

    if (unlikely(freezing(current)))
        frozen = __refrigerator(true);

    if (was_frozen)
        *was_frozen = frozen;

    return kthread_should_stop();
}

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

สามารถอ่านได้มีความสวยงาม

C โปร่งใส

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

for (char_ptr = str; ((unsigned long int) char_ptr & (sizeof (longword) - 1)) != 0;
        ++char_ptr)

if (*char_ptr == '\0')
    return char_ptr - str;

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

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


3

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

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

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

อีกหนึ่งงานที่ดีมากในวิทยาการคอมพิวเตอร์องค์ประกอบของระบบคอมพิวเตอร์ (ซึ่งเป็นจริงส่วนเท่า ๆ กันวิศวกรรมคอมพิวเตอร์และวิทยาศาสตร์คอมพิวเตอร์และมากสั้น ๆ ) ใช้วิธีพื้นฐานของการเรียนการสอนตรรกะดิจิตอลจากที่ที่มันสร้างเครื่องเครื่องมือ และภาษาก่อนสอนวิชาวิทยาศาสตร์คอมพิวเตอร์เบื้องต้น

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


2

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

เรียนรู้ C. มันจะทำให้คุณมั่นคง ฉันเก็บคู่มือโปรแกรมเมอร์ c เป็นเวลาหลายปีและอ่าน Kernighan และ Ritchie ตั้งแต่ต้นจนจบ ไม่สำคัญว่าคุณจะใช้ภาษาอะไรกับการทำความเข้าใจกับ C จะช่วยได้แน่นอน


1

สามารถเรียนรู้วิทยาศาสตร์คอมพิวเตอร์โดยไม่ต้องเรียนรู้ C หรือไม่?

คำตอบคือใช่ ฉันมีปริญญาของฉันใน CS และไม่จำเป็นต้องเรียนรู้ C แต่เป็น Java อย่างน้อยในโรงเรียนของฉันการเน้นคือการเรียนรู้การเขียนโปรแกรมเชิงวัตถุด้วยคำสอนบางอย่างเกี่ยวกับภาษาแอสเซมบลีโครงสร้างข้อมูลและการออกแบบฐานข้อมูล


7
คุณแน่ใจว่าปริญญาของคุณครอบคลุม " ทุกแง่มุม" ของ CS หรือไม่
SK-logic

ฉันจะบอกแง่มุมที่จำเป็นทั้งหมด ไม่มีการศึกษาระดับปริญญาครอบคลุมทุกด้านของโปรแกรมการศึกษาระดับปริญญา บวก "ทั้งหมด" เป็นเรื่องส่วนตัว
PhillyNJ

1
คุณกำหนด "จำเป็น" อย่างไร ทั้งหมดคือทั้งหมด - ความหมายซึ่งครอบคลุมแอปพลิเคชัน CS ที่เป็นไปได้ทั้งหมด มันไม่ใช่ "อัตนัย" มันค่อนข้างเชิงปริมาณ
SK-logic

ฉันกำหนด 'จำเป็น' ในบริบทที่ CS ครอบคลุมการศึกษาการคำนวณและเทคโนโลยีคอมพิวเตอร์ฮาร์ดแวร์และซอฟต์แวร์ไม่ใช่ภาษาเฉพาะใด ๆ ซึ่งเป็นการตอบคำถามเดิม
PhillyNJ

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

0

มันขึ้นอยู่กับสิ่งที่คุณต้องการจะทำกับสิ่งที่คุณเรียนรู้ มันเป็นความจริงอย่างแน่นอนว่าอัลกอริทึมจำนวนมากมีให้ใน C หรือสืบทอดมา อย่างไรก็ตามในช่วงหลายปีที่ผ่านมาฉันได้เห็นตัวอย่าง C ++, C # และ Java เพิ่มเติม สิ่งที่ CS สอนคือความเข้าใจทั่วไปเกี่ยวกับการคำนวณดังนั้นวิธีการเลือกหรือสร้างภาษาที่เหมาะสมสำหรับงานที่ทำอยู่

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


-1

หากคุณกำลังจะเรียนรู้ "ทุกแง่มุมของวิทยาศาสตร์คอมพิวเตอร์" (แผนทะเยอทะยาน!) คุณจะต้องจัดการกับภาษาแอสเซมบลีหลายภาษาที่แตกต่างกันและอย่างน้อยหนึ่ง HDL (และฝึกการเข้ารหัสในระดับเน็ตลิสต์ในนั้น)

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

อย่างไรก็ตามฉันสงสัยว่าคำถามนี้น่าจะคุ้มค่า ท้ายที่สุด C เป็นเพียงภาษาเล็ก ๆ คุณสามารถเรียนรู้พื้นฐานของมันได้ในเวลาอันสั้นกว่าที่คุณเสียไปเพราะคุณต้องเรียนรู้ C หรือไม่

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