สวัสดี! วันนี้ฉันอยากจะพูดถึง – คุณรู้ได้อย่างไรว่าคุณเขียนโปรแกรมได้ดีขึ้น?
แนวทางหนึ่งที่ชัดเจนคือ:
- ทำเป้าหมาย
- ตรวจสอบเป็นระยะๆ ว่าคุณบรรลุเป้าหมายเหล่านั้นหรือไม่
- ถ้าคุณทำ เฉลิมฉลอง
ฉันเกลียดเป้าหมาย
เป้าหมายอาจมีประโยชน์ แต่หลายครั้งที่ฉันพบว่ามันเครียดและไม่มีประโยชน์ ตัวอย่างเช่น นี่คือเป้าหมายสองสามข้อที่ฉันจดไว้สำหรับตัวเองเมื่อ 9 ปีที่แล้ว:
- เขียนโค้ด C จำนวนไม่น้อยที่ใช้งานได้จริงและคนทั่วไปใช้
- มีส่วนร่วมในโครงการโอเพ่นซอร์สในC
- เรียนรู้ C++
9 ปีต่อมา ฉันได้ทำ 0 สิ่งเหล่านั้น ด้วยการวางกรอบ “เป้าหมาย” ให้มองว่าสิ่งนี้เป็นสิ่งที่ไม่ดี! เช่น ฉันต้องการเรียนรู้ C++ และไม่ได้ทำ! ยังเขียน C ไม่ได้อยู่ดี! ไม่นะ! ฉันเดาว่าฉันล้มเหลว!
ฉันพบว่าการวางกรอบนี้น่าหดหู่และไม่ช่วยเหลือ อันที่จริง ฉันไม่มีเหตุผลที่แท้จริงในการเรียนรู้ C++ ในขณะนั้น และตอนนี้ก็ยังไม่มี ดังนั้นจึงทำให้รู้สึกว่าฉันไม่ได้เรียนรู้มัน
ฉันชอบคิดถึง เหตุการณ์สำคัญเล็กๆ แทนเป้าหมาย
เหตุการณ์สำคัญคืออะไร?
โดยปกติเมื่อเราพูดถึงเหตุการณ์สำคัญ เราหมายถึงสิ่งที่ยิ่งใหญ่ เช่น “ฉันจบการศึกษาจากมหาวิทยาลัย”
แต่ในโพสต์นี้ ฉันต้องการพูดถึงเหตุการณ์สำคัญในแง่ของนิรุกติศาสตร์ – หิน ที่วางทุก ไมล์ บนทางหลวง เพื่อให้คุณสามารถติดตามความคืบหน้าของคุณไปตามเส้นทาง
สิ่งเหล่านี้เกิดขึ้นบ่อยขึ้นมาก – บางทีคุณอาจใช้เครื่องมือใหม่เป็นครั้งแรก หรือคุณแก้ไขข้อผิดพลาดประเภทใหม่ที่คุณไม่เคยเห็นมาก่อน หรือคุณได้เรียนรู้เกี่ยวกับแนวคิดใหม่!
เหตุการณ์สำคัญ C เล็ก ๆ ของฉันบางส่วน
ต่อไปนี้คือตัวอย่างเล็กๆ น้อยๆ ของเหตุการณ์สำคัญเล็กๆ น้อยๆ จาก 9 ปีที่ผ่านมาที่เกี่ยวข้องกับเป้าหมาย “เรียนรู้ภาษา C/C++” ดั้งเดิมของฉัน
- เขียนเชลล์พื้นฐานมากในC
- เขียนโมดูลเคอร์เนลลินุกซ์ขนาดเล็ก
- เรียนรู้เกี่ยวกับ
strace
- เรียนรู้วิธีจัดระเบียบไบนารีของ ELF (สัญลักษณ์ ส่วนต่างๆ ฯลฯ)
- เรียนรู้ว่าสัญลักษณ์การดีบัก DWARF คืออะไรและทำงานอย่างไร
- พบข้อผิดพลาดเคอร์เนล Mac และจัดการเพื่อ เขียนโปรแกรมทำซ้ำในC
- เรียนรู้วิธีการใช้
gdb
เพื่อตรวจสอบหน่วยความจำของโปรแกรม C - ใช้การใช้ประโยชน์จากบัฟเฟอร์ล้นโดยใช้
gdb
และstrace
(สำหรับ CTF) - เขียนว่า คอมพิวเตอร์เป็นเกมที่รวดเร็ว
- ได้รับคอร์ดัมพ์สำหรับโปรแกรม C ++ ที่ขัดข้องและจัดการเพื่อดึงสแต็กเทรซออกมา
- เขียนรายงานจุดบกพร่องที่ถูกต้องสำหรับโปรแกรม C++ ที่มีหน่วยความจำรั่ว ซึ่งส่งผลให้ผู้ดูแลแก้ไขจุดบกพร่อง
- เรียนรู้เกี่ยวกับรูปแบบ RAII (แม้ว่าจะอยู่ใน Rust ไม่ใช่ C ++)
- จับคู่โปรแกรมกับเพื่อนเกี่ยวกับการนำปัญหา Advent of Code ไปใช้ในแอสเซมบลี x86
- โดยทั่วไปแล้ว ฉันสามารถเขียนโปรแกรม C พื้นฐานได้สบาย ๆ ตราบใดที่พวกเขาไม่ต้องทำอะไรแฟนซีเช่น “การจัดการหน่วยความจำ”
และยังมีเหตุการณ์สำคัญบางอย่างเช่นที่ฉันเขียน Ruby profiler ใน Rust ในปี 2018
เมื่อฉันคิดแบบนี้ ฉันรู้สึกดีกับทักษะของฉัน! ฉันได้เรียนรู้ทุกสิ่งที่เกี่ยวข้องกับการเขียนโปรแกรมระบบ มันเพิ่งเกิดขึ้นในวิธีที่ต่างไปจากที่ฉันคาดไว้ในตอนแรก
การเปลี่ยนเป้าหมายไม่ใช่เรื่องเลวร้าย
เหตุผลที่ฉันยังไม่ได้เรียน C นั้นไม่ใช่ว่าฉันห่วยหรือ C นั้นเป็นไปไม่ได้ที่จะเรียนรู้ แค่การเรียนรู้วิธีเขียน C ให้ดีไม่เคยเป็นสิ่งที่ฉันมีเหตุผลจริงๆ ที่ต้องทำ
แต่ฉันได้เรียนรู้ Rust and Go และ strace
และ gdb
และเกี่ยวกับโครงสร้างและสัญลักษณ์ C และ call stack และ heap และสิ่งอื่น ๆ มากมาย (อีกอย่าง ผมชอบบทความนี้มาก บางคนก็มีความหมายสำหรับ C ว่าทำไม C ถึงยังสำคัญอยู่)
และนั่นก็ใช้ได้ผลดี! ดังนั้น ฉันคิดว่าการมีความยืดหยุ่นเกี่ยวกับเป้าหมายและการเฉลิมฉลองเป้าหมายที่คุณทำสำเร็จจะดีขึ้นมาก แทนที่จะรู้สึกแย่กับเป้าหมายที่คุณ “ล้มเหลว”
เฉลิมฉลองเหตุการณ์สำคัญเล็กๆ ของคุณ
การ ฉลอง เหตุการณ์สำคัญเล็กๆ น้อยๆ เช่นนี้มีประโยชน์มากสำหรับฉัน ฉันเฉลิมฉลองอย่างมากด้วยการเขียนโพสต์บนบล็อก – ฉันเขียนรายการด้านบนโดยส่วนใหญ่โดยดูจากรายชื่อโพสต์บนบล็อกเก่าของฉันสำหรับสิ่งที่ฉันเขียนเกี่ยวกับเรื่องที่เกี่ยวข้องกับ C
ถ้าคุณไม่เขียนบล็อก (ไม่ใช่สำหรับทุกคนแน่นอน!) การเขียนสิ่งนี้ลงใน เอกสารคุยโม้ แทนอาจเป็นประโยชน์
แต่ฉันคิดว่ามันสำคัญที่จะเฉลิมฉลองเหตุการณ์สำคัญเหล่านี้ ที่ไหนสักแห่ง มันให้ความรู้สึกที่แท้จริงว่าฉันกำลังก้าวหน้าและช่วยให้ฉันมีแรงจูงใจที่จะเรียนรู้เกี่ยวกับสิ่งนั้นต่อไป