คุณจะเขียนโค้ดอย่างไรเมื่อคุณไม่รู้ว่ามันใช้งานได้จริงอย่างไร [ปิด]


14

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

Googling เกี่ยวกับเรื่องนี้นำไปสู่ ​​GitHub repo ซึ่งเป็นประโยชน์ต่อฉันเพราะ codebase นั้นใหญ่และรหัสทำให้ฉันสับสน ฉันยังพบบทช่วยสอนสำหรับการสร้างโปรแกรมแก้ไขข้อความใน C ซึ่งทำหน้าที่คล้ายกับเสียงเรียกเข้า

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

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


14
คุณกำลังเปรียบเทียบตัวเองกับโครงการที่มีประวัติยาวนานและผู้คนที่ยอดเยี่ยม Unix เกิดขึ้นในกลุ่มวิจัยที่มีประสบการณ์หลายปีในการเขียนโปรแกรมระดับระบบและทำกำไรจากประสบการณ์ด้วย Multics OS ที่ซับซ้อนมากขึ้น เป็นกลุ่มขึ้นอยู่กับ vi ซึ่งขึ้นอยู่กับ ed โปรแกรมเหล่านี้ไม่ปรากฏขึ้นทันทีพวกเขาเป็นวิวัฒนาการที่ถูกสร้างขึ้นโดยคนหลายร้อยคน ดังนั้นอย่าผิดหวังเมื่อคุณพบว่ามันยากที่จะข้ามประวัติศาสตร์ทั้งหมด ไม่มีใครสามารถทำได้. ให้ลองทำโครงการที่อยู่ใกล้กับความเข้าใจของคุณ - อยู่ในมือคุณ แต่ยังคงท้าทาย
amon

8
คุณเพิ่งเรียนรู้ที่จะเล่นเพลงบนระนาดเอกและตอนนี้คุณต้องการที่จะเล่นในวงออเคสตราสากลขนาดใหญ่? มาเลยคุณคาดหวังมากเกินไป การเขียนโปรแกรมเป็นเหมือนการเล่นเครื่องดนตรี - คุณเริ่มด้วยท่วงทำนองขนาดเล็กที่เรียบง่ายและหลังจากฝึกฝนมาหลายปีคุณจะได้เรียนรู้การเล่นซิมโฟนี
Doc Brown

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

17
ปัญหาพื้นฐานของคุณคือการขาดความชัดเจนในความคิดของคุณ คุณพูดว่า "โปรแกรมแก้ไขข้อความอย่างง่าย ๆ เช่น vim" แล้วติดตามผลทันทีโดยสังเกตว่า codebase นั้นใหญ่และสับสน นี้ควรจะเป็นสัญญาณที่แรงกับคุณว่าอะไรที่คล้ายกับเป็นกลุ่มเป็นเรื่องง่าย แม้แต่โปรแกรมเมอร์ที่มีประสบการณ์ก็ยังตกหลุมพรางคุณอยู่ สิ่งที่คุณยังไม่เข้าใจจะไม่ง่าย พวกเขาจะมีความซับซ้อน การโปรแกรมคอมพิวเตอร์กำลังเปลี่ยนตรรกะทางจิตให้เป็นจริง เริ่มต้นด้วยการคิดให้ชัดเจนยิ่งขึ้นเกี่ยวกับการเขียนโปรแกรม
Eric Lippert

4
นอกจากนี้หยุดกังวลเกี่ยวกับ "การโกง" นี่ไม่ใช่เกม คุณมีเป้าหมายและเป็นเป้าหมายที่ดี ทำสิ่งที่คุณต้องทำเพื่อให้บรรลุเป้าหมายเหล่านี้ คุณคิดว่าโปรแกรมเมอร์คอมพิวเตอร์มืออาชีพไม่ได้ดูแหล่งที่มาเมื่อพวกเขาต้องการที่จะเรียนรู้วิธีการทำงานบางอย่าง? การเรียนรู้วิธีการเรียนรู้จากแหล่งข้อมูลที่คุณไม่ได้เขียนเป็นหนึ่งในทักษะการเขียนโปรแกรมที่สำคัญที่สุดดังนั้นเริ่มฝึกได้
Eric Lippert

คำตอบ:


17

หากนี่เป็นโครงการการเขียนโปรแกรมแรกของคุณแม้แต่ตัวแก้ไขข้อความอย่างง่ายอาจซับซ้อนเกินไป บางสิ่งบางอย่างเช่นเสียงเรียกเข้าหรือระบบปฏิบัติการนั้นไม่สมบูรณ์

การเข้าใกล้ปัญหา

โดยทั่วไปวิธีการเริ่มต้นจะคล้าย ๆ กันสำหรับโครงการส่วนใหญ่ แต่:

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

ตัวอย่าง

ลองมาตัวอย่างตัวแก้ไขข้อความ

  • คุณต้องการแสดงส่วนของไฟล์ข้อความบนหน้าจอแทรกและลบอักขระและบันทึกเวอร์ชันปัจจุบัน

  • เริ่มต้นด้วยการอ่านไฟล์และแสดงเนื้อหาของมัน

  • คุณจะระบุถึงปัญหาย่อยต่อไปนี้:

    • ฉันจะรู้ชื่อไฟล์ที่จะแสดงได้อย่างไร
    • ด้วยชื่อไฟล์ฉันจะรับเนื้อหาไฟล์ได้อย่างไร
    • ด้วยเนื้อหาของไฟล์ฉันจะแสดงมันได้อย่างไร

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

ขั้นตอนต่อไป

เมื่อเวลาผ่านไปเมื่อคุณพบปัญหาที่ซับซ้อนมากขึ้นคุณจะรู้ว่าการหาวิธีที่เหมาะสมในการย่อยสลายปัญหาของคุณนั้นยากขึ้นเรื่อย ๆ คุณจะสังเกตเห็นว่าการเปลี่ยนรหัสอาจน่าเบื่อเมื่อเวลาผ่านไป

ณ เวลานั้นถึงเวลาที่จะเรียนรู้สถาปัตยกรรมขั้นพื้นฐานและแนวคิดการออกแบบ


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

2
หากต้องการเพิ่มสิ่งนี้ "ฉันจะแสดงได้อย่างไร" อาจแบ่งย่อยลงเพื่อเขียนอักขระเฉพาะไปยังตำแหน่งที่ระบุบนหน้าจอ (ถ้าเรากำลังพูดถึงตัวแก้ไขบรรทัดคำสั่ง) ซึ่งควรเป็นสิ่งที่เราสามารถทำได้ ค้นหาคำตอบออนไลน์ได้อย่างง่ายดาย
Dukeling

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

15

คุณทำไม่ได้

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


โครงการดีเริ่มต้นด้วยอะไรดี? ฉันได้สร้างเกมแฮงก์แมนของตัวเอง (ในเครื่องเทอร์มินัล) เช่นเดียวกับเกม Tic Tac Toe ฉันไม่เห็นวิธีที่จะดำเนินการต่อดังนั้นฉันจึงคิดว่าตัวแก้ไขข้อความจะเป็นความคิดที่ดี
เฟ ธ เลส

3
@faithlesss - สิ่งที่อ่านและเขียนไฟล์ดูเหมือนว่าเป็นขั้นตอนกลางขั้นพื้นฐาน
Telastyn

9
ไฟล์ที่ผู้ชมอาจจะเป็นโครงการที่ดีแล้วเช่นเพจเจอร์เหมือนless, moreหรือviewโปรแกรม พวกเขาแบ่งปันบางส่วนของบรรณาธิการโดยไม่มีความซับซ้อนของบัฟเฟอร์การแก้ไขที่ไม่แน่นอน
amon

@Telastyn ฉันได้รับคุณ ถ้าดูจากการดูไฟล์แล้วอาจเป็นไฟล์ธรรมดาที่อ่านรูปแบบข้อความพื้นฐานแล้วลองหาวิธีอ่านบางอย่างเช่นไฟล์ json หรือ csv ไม่ควรที่จะแยกวิเคราะห์มันยากเพียงแค่ต้องดูที่เอกสาร string.h ฉันเดา ขอบคุณสำหรับคำแนะนำ!
เฟ ธ เลส

2
@Faithlesss นอกจากนี้ยังมีการดูคุณสมบัติของโปรแกรมแก้ไขบรรทัดผู้บุกเบิกโปรแกรมแก้ไขข้อความ
Bergi

2

คุณต้องตัดสินใจว่าคุณต้องการของคุณแก้ไขข้อความในการทำงาน

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

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

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

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


1

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

หลายทางเลือกที่อยู่ในใจ:

  • ศึกษารหัสของผลิตภัณฑ์ที่คุณคุ้นเคย หากคุณมีความเชี่ยวชาญvimให้ดูที่และลองทำความเข้าใจกับสิ่งที่เล็กและโดดเดี่ยวเช่นวิธีแสดงถึงข้อมูลหรือค้นหาอักขระเดียว ( fคำสั่ง)
  • การศึกษารหัสของโปรแกรมที่ง่ายมากและวิธีการทำงานของคุณขึ้นมาจากที่นั่น: catคำสั่งนั้นwcแล้วgrepแล้วsedตัวอย่างเช่น
  • ลองเขียนโปรแกรมที่ใช้เพียงคุณสมบัติเดียวของโปรแกรมแก้ไข อาจลบอักขระที่สองในทุกบรรทัดของไฟล์ (โดยไม่ต้องเขียนกลับ) หรือแสดงเฉพาะบรรทัด 50 ถึง 70 ของไฟล์

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