คุณจะทำอย่างไรเมื่อคุณไม่สามารถเข้าใจบางส่วนของการเขียนโปรแกรม [ปิด]


11

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

ตัวอย่างเช่นฉันไม่เคยเข้าใจพอยน์เตอร์ - สิ่งที่พวกเขาทำได้ดี (ไม่ใช่ส่วนหนึ่งของคำถาม - ไม่จำเป็นต้องติดแท็ก "Pointers" ... )


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


11
ฉันหวังว่าฉันจะเข้าใจว่าทำไมผู้คนถึงมีปัญหาในการทำความเข้าใจพอยน์เตอร์ ชื่อให้ความกระจ่างทั้งหมดที่ฉันต้องการ
ChaosPandion

1
บางComputer Architecture 101หลักสูตรจะช่วยอย่างมากกับการทำความเข้าใจพอยน์เตอร์ ... และทุกอย่างอื่น
ZJR

6
คำถามไม่ได้เกี่ยวกับพอยน์เตอร์โดยตรง แต่เป็นคำถามทั่วไป แต่ขอบคุณ
Bugster

2
ฉันไม่คิดว่าการเตือนคนที่แต่งตัวประหลาดของตัวอย่างหนึ่งที่เขาสารภาพว่ามีปัญหากับจะช่วยให้เขาหนึ่งบิตต่อการตรัสรู้ ... ทำบ่อยพอ แต่จะป้องกันไม่ให้เขาขอความช่วยเหลือจากความกลัวที่จะได้รับความนิยมซื้อ สายยาวของคำตอบตระหนี่และอวดรู้และความคิดเห็นที่ลดระดับ
haylem

4
@FrustratedWithFormsDesigner: "ฉันจะเรียนรู้ที่จะเรียนรู้ได้อย่างไร" ฉันคิดว่า คำถามใดที่ถูกต้องและมีค่า
haylem

คำตอบ:


22

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


2
+1: ทำงานให้ฉัน ฉันมีปัญหากับพอยน์เตอร์ใน ALGOL จนกระทั่งฉันเริ่มเขียนภาษาชุดประกอบ PDP-10
วินไคลน์

2
ความคิดที่น่าสนใจ แม้ว่าฉันจะชี้ให้เห็นว่าการเขียนและเรียกใช้โปรแกรมในชุดประกอบจะไปไกลเกินไป ในความคิดของฉันการไปเกินกว่าความเข้าใจพื้นฐานไม่จำเป็นในระดับนี้ แต่เดี๋ยวก่อนถ้านั่นคือสิ่งที่คุณต้องการจะทำพลังที่ยิ่งใหญ่กว่าของคุณ!
Bryan Field

1
@ George Bailey ใช่แล้วมันอาจจะเป็นเรื่องเล็กน้อยสำหรับการประกอบจริงและฮาร์ดแวร์จริง นั่นเป็นสาเหตุที่มีMIXและมีสถาปัตยกรรมของเล่นอื่นที่คล้ายคลึงกันอยู่ สำหรับชิ้นส่วนฮาร์ดแวร์มันเหมือนกัน - มีแกน CPU ของเล่นมากมายให้ศึกษา
SK-logic

+1: แนวคิดที่น่าสนใจและมีแนวโน้มที่จะทำงานได้อย่างแน่นอน แต่ (เพื่อใช้กรณีตัวอย่างของ OP อีกครั้ง) การลดระดับจากรายการระดับ C เป็นรายการระดับ ASM อาจเป็นถนนที่ยาวลำบากและคดเคี้ยวสำหรับผู้เริ่มต้น เวลามากกว่าที่คาดการณ์ไว้โดยหลักสูตร / โครงการ / อื่น ๆ มันอาจกลายเป็นคนที่มีแรงบันดาลใจไม่ดี (ซึ่งอาจไม่ใช่กรณีของ OP แต่จากมุมมองในระดับที่สูงขึ้นสิ่งนี้จะบล็อกนักเรียนจำนวนมากที่เข้าเรียนในชั้นเรียน CS และต้องเข้าใจสิ่งนี้ แต่ไม่ให้คำด่าเกี่ยวกับ CS) . แต่แน่นอนเป็นความคิดที่ดีในระยะยาว
haylem

การศึกษาระดับปริญญา CS ของฉันครอบคลุมเรื่องนี้ในสถาปัตยกรรมคอมพิวเตอร์ เราเรียนรู้เกี่ยวกับประตูลอจิกรวมเข้าด้วยกันในเครื่องจำลองลอจิกเพื่อสร้างโปรแกรมเสริม ALU และในที่สุดก็เป็น CPU RISC ที่ง่ายมาก นอกจากนี้เรายังเขียนโปรแกรมง่าย ๆ ในชุด MIPS นี่เป็นสิ่งที่จำเป็นสำหรับ BS ในสาขาวิทยาศาสตร์คอมพิวเตอร์และไม่ได้ถือว่าเป็นหนึ่งในหลักสูตร "weeder" ดังนั้นฉันจึงไม่คิดว่ามันจะอยู่ด้านบนสุดหรือไปไกลเกินไป
Adam Jaskiewicz

17

ระยะเวลาการเรียนรู้ที่เพิ่มขึ้นสั้น ๆ

  1. ลองและไม่เข้าใจแนวคิด
  2. พยายามใช้บางสิ่งบางอย่างที่เปิดเผยแนวคิด
  3. ลองทำแผนภาพแนวคิดบนไวท์บอร์ด (ถ้ามี)
  4. ลองพูดคุยกับคนที่เข้าใจแนวคิด
  5. พยายามอธิบายบิตที่คุณเข้าใจกับบุคคลนี้ (ช่วยในการมองเห็นแสงบางครั้ง)
  6. เริ่มต้นอีกครั้งจาก 1 จนกว่าคุณจะสามารถอธิบายให้คนที่อยู่ในสถานะ 1 ได้และทำให้พวกเขาได้รับ

ขั้นตอนเพิ่มเติม

ที่จะใช้ด้วยความระมัดระวัง

  • ค้นหาสื่อการอ่านและการศึกษาเพิ่มเติม :
    • ออนไลน์ (เครื่องมือค้นหายอดนิยมและ Wikipedia เป็นเพื่อนที่ดี)
    • ที่ห้องสมุด (อย่าดูถูกหนังสือและคนที่ไปที่นั่นเพื่ออ่าน)
    • ในระบบของคุณ (เอกสารรวมและ doc เครื่องมือมักจะมีความแปลกแยกในตอนแรก แต่กลับไปข้าง-เพื่อนที่ดีที่สุดของคุณหลังจากที่ในขณะ:. เรียนรู้ที่จะพบสิ่งที่คุณกำลังมองหาในพวกเขาเช่นman -k, aproposฯลฯ ... )
  • ลองอ่านโค้ดโดยใช้แนวคิด ...
  • ... และก้าวผ่านโค้ดด้วยเครื่องมือดีบั๊ก

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

เครดิต: Nupul (สำหรับการสร้างแผนภาพ)


2
+1! ฉันขอเพิ่ม - ก่อนพูดคุยได้ลองใช้ไวท์บอร์ดเพื่อ 'ร่างมันออก' (หรือเพียงแค่เก็บไวท์บอร์ดไว้ในมือเมื่อพูดคุยกับใครสักคน :)
ปริญญาเอก

1
+1 สำหรับ "การก้าวผ่านโค้ดด้วยดีบักเกอร์" ฉันได้เรียนรู้เกี่ยวกับแนวคิดมากมายด้วยเครื่องมือการดีบักอย่างง่าย ๆ ...
funkymushroom

@Nupul: คำแนะนำที่ดีเพิ่ม
haylem

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

การพูดกับไวท์บอร์ดทำเพื่อฉัน
ปีเตอร์

5

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

จากประสบการณ์ของฉันปริญญา CS ของฉันแห้งมากเป็นทางการมากและไร้ค่าอย่างที่สุดในการสอนการเขียนโปรแกรมใด ๆ ฉันเข้าร่วมการบรรยาย 2-3 ครั้งต่อสัปดาห์และถ้าคุณไม่เข้าใจมันก็เป็นเรื่องที่ค่อนข้างมาก - อาจารย์มีชั้นเรียนอื่นที่จะสอนและไม่สามารถช่วยคุณได้ และโอกาสก็คือผู้ชายคนหนึ่งเข้าใจในวิธีการบางอย่างและเขาจะสอนมันในวิธีที่แน่นอนและที่มันดังนั้นถ้าคุณไม่คิดเหมือนเขาคุณจะไม่เคยได้รับมัน สิ่งที่แย่กว่านั้นคือเนื่องจากเขามีแนวโน้มที่จะเข้าใจแนวคิดที่เกี่ยวข้องอื่น ๆ อีกนับพันล้านเขาอาจจะวางกรอบแนวคิดนี้ในแง่ของแนวคิดอื่น ๆ เหล่านั้นซึ่งอาจเป็นไปได้เหนือหัวของคุณหรือแม้แต่ในเนื้อหาของหลักสูตร

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

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


3

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

ถามคำถามเกี่ยวกับ stackexchange ... ;>


2

ฝึกฝนบ่อยๆทำให้เก่ง! (ดีขึ้นอยู่ดี) เพียงพยายามต่อไปและพยายามใช้แหล่งข้อมูลและความรู้สึกต่าง ๆ ให้มากที่สุดเท่าที่จะทำได้:

แหล่งที่มา: หนังสือ, อินเทอร์เน็ต, กลุ่มผู้ใช้, เพื่อน, การเรียนรู้วิดีโอ, การใช้เว็บไซต์ที่ให้คุณทดสอบโค้ด 'บิต' เล็กน้อยเช่น jsfiddle (ส่วนใหญ่เป็น HTML),
รูบลู (นิพจน์ทับทิม),
SQlzooสำหรับลอง sql,
jslint for javascript,
แผ่นรหัสสำหรับหลายภาษา

ในการจดจำสิ่งที่เป็นนามธรรมให้พิจารณาเรื่อง mneomics - แพทย์ใช้มัน!

พิจารณาตัวคุณเองว่าเป็นผู้เรียนรู้ตลอดชีวิตและอยู่ในระดับต่ำต้อยและคุณสามารถไปได้ไกล


1
+1 สำหรับ“ ฝึกซ้อม” แต่ช่วยในการจำ มันเป็นไม้ค้ำที่ไม่เพียงพอและไม่สามารถทดแทนได้และไม่ควรแทนที่ด้วยความเข้าใจ ในความเป็นจริงพวกเขาทำเครื่องหมายว่าไม่มีความเข้าใจ “ แพทย์ใช้พวกเขา” เพราะพวกเขาถูกบังคับให้เรียนรู้ข้อเท็จจริงที่ไม่เชื่อมโยงกันมากเกินไปในเวลาน้อยเกินไป เรากำลังค่อย ๆ หวนกลับไปสู่ความจริงที่ว่าการศึกษาของเราสำหรับแพทย์แพทย์แย่ลงและประเทศสหรัฐอเมริกาก็กำลังจะปรับปรุงการศึกษาอย่างสมบูรณ์ ตัวช่วยจำไม่ได้เป็นวิธีแก้ปัญหา แต่เป็นส่วนหนึ่งของปัญหา หากคุณพบว่าตัวเองกำลังใช้งานคุณไม่เข้าใจ
Konrad Rudolph

1

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

หากคุณต้องเข้าใจตอนนี้ ... ขอความช่วยเหลือจากเพื่อนหรือที่นี่ =)


1

สิ่งที่ทุกคนในไอทีทำ

ฉันใช้เครื่องมือค้นหาเพื่อค้นหาแนวคิดที่เกี่ยวข้องที่ฉันไม่เข้าใจจนกระทั่งฉันสามารถกลับไปที่หัวข้อที่ฉันต้องการจะเข้าใจได้ในตอนแรก

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

ความชัดเจนมากขึ้นเกี่ยวกับแนวคิดเหล่านี้และตัวชี้อื่น ๆ ที่เกี่ยวข้องอาจจะทำให้ทุกอย่างชัดเจนขึ้น


1

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

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


1

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

การเรียนรู้สร้างการเชื่อมต่อของเส้นประสาทใหม่ โดยไม่ต้องไปมากเกินไปในประสาท (ซึ่งฉันรู้ไปเพื่ออะไรเกี่ยวกับ) การสร้างการเชื่อมต่อใหม่ต้องใช้ชนิดที่แตกต่างกันของการสัมผัสกับแนวคิดสำหรับคนที่แตกต่างกัน ลองทำมุมต่าง ๆ อ่าน / ฟัง / ดูคำอธิบายที่แตกต่างกัน การปฏิบัติ!

หากวิธีนี้ใช้ไม่ได้ผลให้วางปัญหาไว้: คุณอาจพลาดส่วนอื่นของปริศนาที่เมื่อได้มาแล้วทำให้ปัญหาดั้งเดิมดูเหมือนชัดเจน

คุณรู้เหรอahaเหล่านี้! ช่วงเวลา? นี่คือเมื่อสมองของคุณเพิ่งเชื่อมต่อใหม่ นี่คือการเรียนรู้ที่เกิดขึ้น

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

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


0
  1. อ่านเอกสารที่เกี่ยวข้องและ Google ข้อสงสัยของคุณ

  2. ลองเขียนตัวอย่างโค้ดดูว่าพวกเขาทำอะไร

  3. ลองเรียกใช้งานโค้ดในการดีบักและดูทีละขั้นตอน

  4. หากคุณยังไม่เข้าใจพฤติกรรมบางอย่างให้ถามใครสักคนไม่ว่าจะด้วยตนเองหรือในเว็บไซต์เช่นนี้ หากคุณลองทั้งหมดข้างต้นคุณควรมีองค์ประกอบทั้งหมดเพื่อเขียนคำถามที่ดี อย่าอาย :)

ฉันคิดว่ามันเป็นสิ่งที่ทุกคนทำ


0

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

โดยพื้นฐานแล้วคอยดูและอดทนรอความเข้าใจที่จะเกิดขึ้น

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