เรียนรู้การเขียนโปรแกรมใน C (มาจาก Python) [ปิด]


22

หากนี่ผิดที่จะถามคำถามนี้โปรดแจ้งให้เราทราบ

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

ดูเหมือนว่าจะซับซ้อนมากแม้จะเชื่อมต่อกับอินเทอร์เน็ต

คุณมีข้อเสนอแนะเกี่ยวกับสิ่งที่ฉันสามารถทำได้เพื่อเรียนรู้ C หรือไม่? มีเว็บไซต์ที่ดีหรือไม่? โครงการเจ๋ง ๆ

ขอบคุณ


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

@Pemdas C โดยปกติจะใช้สำหรับการสร้างโปรแกรมระบบ
Searock

ฉันขอแนะนำให้เริ่มต้นด้วยการอ่านเนื้อหาของไฟล์และอาจทำการแปลงขั้นพื้นฐานเป็นไฟล์อื่นได้หรือไม่ ตัวอย่าง: นำ CSV และแยกวิเคราะห์เป็นไฟล์ที่คั่นด้วยแท็บ คุณสามารถเรียนรู้วิธีอ่านข้อมูลส่วนหัวจากไฟล์ภาพ BMP ของ JPEG
Joshua Burns

ฉันจะมาช้าเพื่อเพิ่มคำตอบ แต่มีหนังสือเล่มเล็กออนไลน์C สำหรับโปรแกรม Pythonนี้ นอกจากนี้ผู้ผลิต "เรียนรู้การเขียนโปรแกรมด้วยวิธีที่ยาก" กำลังทำหนังสือชื่อว่า " Learn C the Hard Way " ซึ่งมีจุดประสงค์เพื่อผู้ที่รู้จัก python หรือคล้ายกันอยู่แล้ว
naught101

คำตอบ:


31

อย่าท้อแท้

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

หนังสือ

วัสดุออนไลน์


1
คุณสามารถแนะนำแบบฝึกหัดการเขียนโปรแกรมได้หรือไม่? สิ่งที่มีประโยชน์ยิ่งกว่า ขอบคุณ
Honza Pokorny

12

หากคุณต้องการเรียนรู้ C อย่าเริ่มต้นด้วยการเชื่อมต่ออินเทอร์เน็ต คุณสามารถทำได้ในภาษาอื่น ๆ นั่นไม่ใช่สิ่งที่สำคัญที่สุดในซี

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

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

บทช่วยสอนตัวชี้นี้มีประโยชน์เช่นกัน


C_Tutorialลิงค์เสีย ...
user3768495

11

มันจะมีความซับซ้อนมากที่จะเชื่อมต่อกับอินเทอร์เน็ต! ลองคิดดู:

  • คอมพิวเตอร์ของคุณอาจมีหลายวิธีในการเชื่อมต่อ - WLAN, Bluetooth, Ethernet, ฯลฯ แต่ละวิธีมีการตั้งค่าของตัวเองซึ่งคุณต้องตั้งค่า คุณโชคดีที่มีมาตรฐานอยู่แล้วและไดรเวอร์สำหรับเหล่านี้ ... ใช้เหล่านี้อาจจะเป็นจำนวนมากหนักกว่ามันมีอยู่แล้วในขณะนี้

  • ที่อยู่ IP สามารถเป็น IPv4 หรือ IPv6 และคุณต้องสามารถจัดการได้ทั้งสองอย่าง

  • อาจมีหรือไม่มีการกำหนดค่าพร็อกซีสำหรับระบบ

  • คุณต้องรองรับ FTP, HTTP หรือโปรโตคอลอื่น ๆ

  • คุณอาจต้องใช้การหมุนโทรศัพท์ดังนั้นคุณต้องระบุสมุดโทรศัพท์ด้วยรหัสผ่านและหมายเลขโทรศัพท์หากคุณยังไม่ได้เชื่อมต่อ เหมือนกันกับชื่อผู้ใช้ / รหัสผ่าน WLAN

  • คุณอาจต้องทำงานกับคุกกี้

  • ระบบอาจแคชข้อมูลบางอย่างดังนั้นคุณต้องการใช้แคชหรือไม่

และรายการไปเรื่อย ๆ

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

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


แก้ไข :

ฉันแนะนำโดยส่วนตัวว่าถ้าคุณมีเวลาว่างเรียนรู้ C # ก่อนแทน ทันทีที่คุณคุ้นเคยกับมันเริ่มเรียนรู้เกี่ยวกับunsafeคำหลักและวิธีใช้พอยน์เตอร์และทำการ marshaling ใน C # คุณจะยังมีห้องสมุดขนาดใหญ่ที่สามารถทำงานร่วมกับ Python ได้ แต่คุณสามารถทำสิ่งต่างๆมากมายที่คุณสามารถทำได้ใน C จากนั้นเปลี่ยนเป็นระบบ API ของการโทรด้วยตนเอง (เช่นInternetOpen ) และเรียนรู้ วิธีทำให้คนเหล่านั้นทำงาน คุณจะมีความยืดหยุ่นมาก แต่คุณจะได้รับการแนะนำที่ดีเกี่ยวกับแนวคิดระดับล่าง หลังจากที่คุณทำสิ่งเหล่านี้แล้ว เริ่มการเรียนรู้ C - แล้วคุณจะพบว่ามันเป็นแค่เค้กและคุณจะเห็น (ได้รับหรือไม่) ข้อดีและข้อเสียของภาษาระดับสูงและระดับต่ำและคุณจะสามารถ เพื่อค้นหาสิ่งที่เหมาะกับความต้องการของคุณ

ที่กล่าวว่าผมคิดว่าความผิดพลาดของหลักสูตรใน Cอาจจะมีประโยชน์เป็นจุดเริ่มต้นที่จะกระโดดลงไปในทะเลซี


8

อย่าอ่านรหัสเคอร์เนลเมื่อคุณเรียนรู้ C. มันเต็มไปด้วยเทคนิคที่จะบีบประสิทธิภาพเล็กน้อยทุกอย่างออกมา บางส่วนมันไม่ได้มาตรฐานมาก มันจะทำให้คุณคลั่งไคล้

ให้ดูที่โครงการคุณภาพโค้ดขนาดเล็กและเล็ก:

  • Lua - หากคุณไม่สนใจภาษาการเขียนโปรแกรมคุณอาจต้องการข้ามภาษานี้ ไม่อย่างนั้นมันเป็นโค้ดที่สวยงามและน่าทึ่งมากที่เห็นว่าพวกเขาทำสำเร็จได้เพียงเล็กน้อย (สิ่งที่คุณรู้สึกท้อแท้เมื่อคุณมาจาก Python)
  • ZeroMQ - ฉันชอบโครงการนี้ มันเป็นคิวข้อความที่เบาและเร็วมาก อีกครั้งสิ่งที่มีคุณภาพสูง
  • DarkHttpd - เว็บเซิร์ฟเวอร์ 2700 line ใน C. ครอบคลุมหัวข้อสนุก ๆ ไม่กี่อย่างเช่นการเขียนโปรแกรมซ็อกเก็ตการแยกวิเคราะห์และการทำงานกับโปรโตคอล

0

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

มันง่ายกว่าที่จะขึ้นไปบนเขาสูงชันโดยเดินไปไม่กี่ก้าว



-3

เรียนรู้ไวยากรณ์ C ก่อนจากนั้นใช้เพื่อเขียนโครงสร้างข้อมูลและอัลกอริทึม แน่นอนคุณสามารถอ่านเคอร์เนล Linux ในขณะที่คุณเชี่ยวชาญภาษา

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