CodeGym /จาวาบล็อก /สุ่ม /ได้ติดอยู่? ส่วนที่ยากที่สุดในการเรียนรู้ Java และวิธีเอา...
John Squirrels
ระดับ
San Francisco

ได้ติดอยู่? ส่วนที่ยากที่สุดในการเรียนรู้ Java และวิธีเอาชนะมัน

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

1. ยาสามัญ

Generics ใน Java เป็นประเภทที่มีพารามิเตอร์ เมื่อสร้างประเภททั่วไป คุณไม่เพียงแต่ระบุประเภทเท่านั้น แต่ยังระบุประเภทข้อมูลที่จะใช้ด้วย ผู้เรียน Java มักกล่าวถึง Generics ว่าเป็นหนึ่งในส่วนที่ยากที่สุดของ Java เพื่อให้พวกเขาเข้าใจ “ปัญหาหลักของฉันยังคงเกี่ยวข้องกับ Generics มันง่ายกว่ามากเมื่อคุณมีเมธอดที่มีพารามิเตอร์ให้ติดตาม แต่จะสับสนเมื่อคุณต้องเขียนเอง” ผู้เรียน Java ที่ไม่ระบุชื่อกล่าว

เคล็ดลับและคำแนะนำ

นี่คือความคิดเห็นเกี่ยวกับ Generics ใน Java จาก Ravi Reddy โปรแกรมเมอร์และอาจารย์มหาวิทยาลัยผู้มีประสบการณ์: "Java Generics ทำสิ่งหนึ่งที่เทมเพลต C++ ไม่ทำ นั่นคือการใช้ความปลอดภัยของประเภท การนำเทมเพลต C++ ไปใช้เป็นเคล็ดลับตัวประมวลผลล่วงหน้าอย่างง่าย และไม่รับประกันความปลอดภัยของประเภท Generics ใน Java นั้นเหมือนกับเทมเพลต C ++ แต่มีความปลอดภัยเพิ่มเติม และ IMHO ความปลอดภัยประเภทเป็นคุณสมบัติที่สำคัญของสภาพแวดล้อมการพัฒนาที่ดี และใช่! อาจทำให้สับสนได้เนื่องจากความคิดของเราเปลี่ยนไประหว่างพารามิเตอร์และประเภท แต่ฉันเชื่อว่าการใช้เวลาในการฝึกฝนให้เชี่ยวชาญนั้นคุ้มค่ากับความพยายาม เพราะฉันพบว่าตัวเอง "คิด" ได้ดีขึ้นมากใน Java เมื่อฉันเข้าใจอินเทอร์เฟซและ Generics"

2. มัลติเธรด

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

เคล็ดลับและคำแนะนำ

นี่เป็นคำแนะนำ ที่ดีเกี่ยวกับวิธีจัดการกับมัลติเธรดจาก S.Lott สถาปนิกซอฟต์แวร์และผู้ใช้งาน StackExchange ซึ่งเป็นเว็บไซต์ถามตอบยอดนิยม: “มัลติเธรดเป็นเรื่องง่าย การเขียนโค้ดแอปพลิเคชันสำหรับมัลติเธรดนั้นง่ายมาก มีเคล็ดลับง่ายๆ และนี่คือการใช้คิวข้อความที่ออกแบบมาอย่างดี (อย่าม้วนของคุณเอง) เพื่อส่งข้อมูลระหว่างเธรด ส่วนที่ยากคือการพยายามให้หลายเธรดอัปเดตวัตถุที่ใช้ร่วมกันอย่างน่าอัศจรรย์ในทางใดทางหนึ่ง นั่นคือเวลาที่จะเกิดข้อผิดพลาดได้ง่าย เพราะผู้คนไม่ใส่ใจกับสภาพการแข่งขันที่เป็นอยู่ หลายคนไม่ใช้คิวข้อความและพยายามอัปเดตวัตถุที่ใช้ร่วมกันและสร้างปัญหาให้กับตนเอง สิ่งที่ยากขึ้นคือการออกแบบอัลกอริทึมที่ทำงานได้ดีเมื่อส่งข้อมูลระหว่างคิวต่างๆ นั่นเป็นเรื่องยาก

3. ปัญหาของคลาสพาธ

ข้อผิดพลาดของคลาสพาธถือเป็นหนึ่งในปัญหาที่นักพัฒนา Java บ่นมากที่สุดในการทำงานประจำวัน “ปัญหาของ Classpath อาจใช้เวลานานในการแก้ไขจุดบกพร่องและมีแนวโน้มที่จะเกิดขึ้นในเวลาและสถานที่ที่เลวร้ายที่สุดเท่าที่จะเป็นไปได้: ก่อนการเผยแพร่ และบ่อยครั้งในสภาพแวดล้อมที่ทีมพัฒนาเข้าถึงได้น้อยหรือไม่มีเลย นอกจากนี้ยังสามารถเกิดขึ้นที่ระดับ IDE และกลายเป็นแหล่งที่มาของประสิทธิภาพการทำงานที่ลดลง” Vasco Ferreira ผู้พัฒนา Java/Javascript ที่มีประสบการณ์และผู้เขียนบทเรียนเกี่ยวกับการเขียนโปรแกรมกล่าว

เคล็ดลับและคำแนะนำ

“ปัญหาของคลาสพาธไม่ใช่ระดับที่ต่ำหรือเข้าถึงไม่ได้อย่างที่เห็นในตอนแรก ทุกอย่างเกี่ยวกับไฟล์ zip (jars) ที่มีอยู่/ไม่มีอยู่ในไดเร็กทอรีบางไดเร็กทอรี วิธีค้นหาไดเร็กทอรีเหล่านั้น และวิธีดีบัก classpath ในสภาพแวดล้อมที่มีการเข้าถึงแบบจำกัด เมื่อทราบชุดแนวคิดที่จำกัด เช่น Class Loader, Class Loader Chain และโหมด Parent First / Parent Last ปัญหาเหล่านี้สามารถจัดการได้อย่างมีประสิทธิภาพ” ผู้เชี่ยวชาญอธิบาย

4. ความหลากหลายและการใช้อย่างถูกต้อง

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

เคล็ดลับและคำแนะนำ

ไม่มีวิธีอื่นในการจัดการกับความหลากหลายนอกจากการเรียนรู้ นี่คือวิธีที่ Torben Mogensen ผู้สอนการเขียนโปรแกรมที่มหาวิทยาลัยโคเปนเฮเกนอธิบายแนวคิดนี้: "การโอเวอร์โหลดอย่างง่าย: + อาจหมายถึงทั้งการบวกจำนวนเต็ม การบวกทศนิยม และการต่อสตริง (ในบางภาษา) ความแตกต่างของชนิดย่อย: ถ้า B เป็นชนิดย่อยของ (สืบทอดมาจาก) A ค่าใดๆ ของชนิด B สามารถใช้ในบริบทที่คาดหวังค่าของชนิด A ได้ ความหลากหลายแบบพาราเมตริก : ชนิดสามารถกำหนดพารามิเตอร์ได้ด้วยพารามิเตอร์ชนิด เช่น คุณอยู่ใน บริบทที่แตกต่างกันสามารถให้อาร์กิวเมนต์ประเภทต่างๆ ได้ ดังนั้นคุณจึงสร้างอินสแตนซ์ของประเภทที่กำหนดพารามิเตอร์ให้เป็นประเภทคอนกรีตที่แตกต่างกัน สิ่งนี้เรียกอีกอย่างว่า "แม่แบบ" หรือ "ทั่วไป" และโดยทั่วไปแล้วในภาษา OO จะระบุโดยใช้วงเล็บมุม (เช่น T<A>) ความหลากหลายของอินเทอร์เฟซ นี่เป็นกลไกโดยพื้นฐานที่คุณจำกัดความแตกต่างของชนิดย่อยกับชนิดย่อยที่ใช้อินเทอร์เฟซบางอย่างหรือความแตกต่างแบบพาราเมตริกเพื่อพิมพ์พารามิเตอร์ที่ใช้อินเทอร์เฟซบางอย่าง”

5. การสะท้อน

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

เคล็ดลับและคำแนะนำ

“ในกรณีของการสะท้อนและ Java การสะท้อนกลับอนุญาตให้ Java ซึ่งออกแบบมาให้พิมพ์แบบสแตติก สามารถพิมพ์แบบไดนามิกได้ การพิมพ์แบบไดนามิกไม่ได้เลวร้ายโดยเนื้อแท้ ใช่ มันช่วยให้โปรแกรมเมอร์สามารถทำลายหลักการ OOP บางอย่างได้ แต่ในขณะเดียวกันก็อนุญาตให้ใช้คุณสมบัติที่ทรงพลังมากมาย เช่น รันไทม์พร็อกซีและการฉีดการพึ่งพา ใช่ Java ให้คุณยิงเท้าตัวเองโดยใช้การสะท้อนกลับ อย่างไรก็ตาม คุณต้องเล็งปืนไปที่เท้าของคุณอย่างชัดเจน ปลดความปลอดภัยออกแล้วเหนี่ยวไก” Jayesh Lalwani โปรแกรมเมอร์และสถาปนิกแอปพลิเคชัน Java ที่มีประสบการณ์อธิบาย

6. สตรีมอินพุต / เอาท์พุต

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

เคล็ดลับและคำแนะนำ

“Java มีคลาสสตรีม I/O จำนวนมาก ส่วนใหญ่เกิดจากปัจจัยสองประการ ประการแรกคือมรดก บางคลาสยังคงมีอยู่ด้วยเหตุผลทางประวัติศาสตร์และไม่ได้เลิกใช้งานเนื่องจากไม่ถือว่าเป็นอันตราย ประการที่สองความยืดหยุ่น แอปพลิเคชันที่แตกต่างกันมีข้อกำหนดที่แตกต่างกัน คุณจึงมีหลายตัวเลือกขึ้นอยู่กับความต้องการของคุณ สิ่งที่เป็นนามธรรมที่เป็นประโยชน์ทำให้เกิดความชัดเจนเมื่อคุณอ่าน และด้วยโค้ดไม่กี่บรรทัด คุณก็สามารถทำอะไรได้มากมาย” Jonas Mellin ผู้เชี่ยวชาญด้าน Java จากสวีเดนกล่าว ลักษณะใดของ Java ที่คุณพบว่าเข้าใจยากที่สุดหรือติดขัดอยู่ช่วงหนึ่ง แบ่งปันประสบการณ์ของคุณในความคิดเห็น
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION