วิธีแนะนำคอมพิวเตอร์ที่ไม่รู้หนังสืออายุ 50 ปีในการเขียนโปรแกรม [ปิด]


10

เมื่อวันก่อนพ่อของฉันถามคำถามที่ฉันจะไม่คาดหวังจากเขา

"ฉันจะเรียนรู้ C ++ ได้อย่างไร"

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

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

ในทุกกรณีเขาแค่ต้องการอ่าน สิ่งที่จะสอนเขา เขาดูดซับข้อมูลเหมือนฟองน้ำ

ฉันไม่สงสัยเลยในแรงจูงใจของพ่อหรือความสามารถในการทำสิ่งนี้ดังนั้นเป้าหมายทั่วไปของฉันก็คือ:

พาพ่อของฉันเข้าสู่โลกของคอมพิวเตอร์และพาเขาไปที่การเขียนโปรแกรม

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

ดังนั้นฉันขอให้คุณทั้งหมด: ฉันจะเริ่มต้นด้วยทั้งหมดนี้ที่ไหน และมีทรัพยากรที่ดีที่สุดออกมีอะไรบ้าง ฉันควรให้เขาเริ่ม Linux แทน Windows หรือไม่ C ++ เป็นความคิดที่ไม่ดีหรือไม่?

โปรดจำไว้ว่าเขาต้อง (IMO) เรียนรู้คอมพิวเตอร์ก่อนแล้วจึงเข้าใจเป็นอย่างแรก (ประสบการณ์ "สวัสดีโลก") ของการเขียนโปรแกรม

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

และฉันตั้งใจจะเริ่มต้นเขาด้วย C ++ (ไม่ใช่ Python, Java และอื่น ๆ ) เพราะฉันรู้ดีที่สุดและจะสามารถช่วยเขาไปพร้อมกับรหัสได้ (ตอนนี้ฉันมีความรู้น้อยที่สุดในภาษาอื่น)

แก้ไข: ฉันได้รับคำแนะนำมากมายเพื่อใช้ Python เหตุผลเดียวที่ฉันต้องการทำ C ++ คือฉันรู้และสามารถมีได้เมื่อพ่อของฉันต้องการความช่วยเหลือ My VERY FIRST เป็นครั้งแรกในการเขียนโปรแกรมคือ Java ฉันเรียนรู้ Java และฉันทำได้ดี ฉันเปิดให้คำแนะนำอื่น ๆ แต่โปรดให้แอปพลิเคชันที่มีประสิทธิภาพสำหรับข้อเสนอแนะของคุณ

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


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

@ThomasOwens คุณจะรู้ได้อย่างไรว่าไม่มีครูหรือผู้สอนมืออาชีพในชุมชน Meta ที่ดูน้อยกว่านี้จะต้องไปไหน? ฉันคิดว่าฉันสามารถให้สิ่งนั้นได้ (แม้ว่าฉันจะชอบที่จะอยู่ที่นี่จริงๆ) โปรดย้ายไปหาฉัน หากมีบางสิ่งที่ฉันสามารถทำได้เพื่อทำให้คำถามนี้สอดคล้องกับเกณฑ์เพื่อให้ชุมชน SO / โปรแกรมเมอร์ดูได้ดีขึ้นโปรดช่วยฉันด้วย
skippr

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

@ThomasOwens ดีฉันไม่ได้อยู่ที่นี่เพื่อสะอื้นหรือหมุนรอบดังนั้นฉันจะทำให้ดีที่สุดกับมัน ขอบคุณ
skippr

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

คำตอบ:


13

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

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

ด้วยเหตุผลเดียวกันอย่าเริ่มต้นเขาบน Linux แทน Windows เพราะเขามีปัญหาสองอย่างที่ต้องให้ความสนใจคือการเรียนรู้ Linux และเรียนรู้รหัสในเวลาเดียวกัน! เบี่ยงเบนความสนใจให้น้อยที่สุด

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

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

และหากเขามีคำถามใด ๆ ให้รับบัญชี StackOverflow :)


4

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

มีบางสิ่งที่สำคัญสำหรับการเขียนโปรแกรม:

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

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

ดังนั้นฉันขอแนะนำให้พ่อของคุณจัดการภาษาการเขียนโปรแกรมที่ง่ายกว่าในครั้งแรก: Ruby, Python, C, C #, Haskell เป็นต้น (Haskell ยากสำหรับผู้ที่ตั้งโปรแกรมภาษาที่จำเป็นเท่านั้น แต่ฉัน ' อยากรู้อยากเห็นว่าสามเณรที่สมบูรณ์ประสบความรู้สึก "ปลาออกจากน้ำ" เดียวกัน)

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

เมื่อพ่อของคุณคุ้นเคยกับฟังก์ชั่นคลาส, วัตถุ, วิธีการจากนั้นข้อผิดพลาดและความแตกต่างของ C ++ จะไม่ทำให้คุณรู้สึกหนักใจ Heck แม้การเริ่มต้นด้วย C จะง่ายขึ้น: มันไม่ได้ให้อภัยแต่มีคุณสมบัติที่สับสนน้อยกว่าที่ต้องกังวล

คุณอยากรู้เกี่ยวกับ Linux vs Windows; ฉันไม่แน่ใจว่าความแตกต่างสำคัญมากแค่ไหน หากเขาคุ้นเคยกับสภาพแวดล้อมอื่นแล้วการเปลี่ยนเป็นเพียงอุปสรรคอื่น หากเขาไม่รู้จักฉันจะแนะนำให้ใช้ Linux แต่ส่วนใหญ่เป็นเพราะการติดตั้งเครื่องมือที่ดีนั้นเป็นเรื่องง่ายอย่างน่าขัน: apt-get install <foo>ทำงานกับการกระจายส่วนใหญ่และการแจกแจงที่ไม่สนับสนุนaptมักจะให้สิ่งที่คล้ายกัน ไม่กี่นาทีต่อมาแพคเกจใหม่ที่เรียบร้อยของคุณนั้นได้รับการติดตั้งซึ่งมักจะเร็วกว่าที่ฉันจะต้องหาแหล่งดาวน์โหลดที่เชื่อถือได้สำหรับไบนารีของ Windows ที่คอมไพล์แล้วซึ่งไม่เหมือนม้าโทรจัน


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

หืมมฉันแยกทักษะออกเป็นหมวดหมู่ต่าง ๆ เพื่อให้ประเด็นที่การจมอยู่กับไวยากรณ์และความหมายสามารถทำให้การพัฒนาทักษะอื่น ๆ - ภาษาที่มีกฎความรู้สึกลับน้อยลงจะทำให้การไหลของนามธรรมง่ายขึ้น - แต่ฉัน ดูเหมือนจะยังไม่ได้ระบุว่าจุดดี
sarnold

1
จากภาษาที่แนะนำฉันจะชอบ Python อย่างแน่นอน แต่ถ้าพ่อของคุณมีความโน้มเอียงทางสายตาการประมวลผล (ดูที่ www.processing.org) อาจเป็นบทนำที่น่าสนใจ (แม้ว่าจะมีปัญหาหลายอย่างที่ไม่เหมาะสม)
James Youngman

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