ฉันจะแน่ใจได้อย่างไรว่าฉันเรียนรู้วิธีการโปรแกรมมากกว่าเพียงแค่เรียนรู้รายละเอียดภาษา [ปิด]


82

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

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


25
ลองเรียนรู้ภาษาอื่น พยายามที่จะแก้ปัญหาที่คุณรู้วิธีแก้ปัญหาในภาษาแรกของคุณในภาษาใหม่ของคุณ มันจะไม่ง่ายในตอนแรก แต่คุณจะรู้ว่าคุณกำลังเรียนรู้เมื่อการแก้ปัญหาเก่าด้วยวิธีใหม่กลายเป็นเรื่องง่ายขึ้นอย่างเห็นได้ชัด (หมายเหตุ: อาจใช้เวลาสักครู่)
FrustratedWithFormsDesigner

42
นอกจากนี้ผู้ที่อ้างว่าสามารถเรียนรู้ภาษาในหนึ่งสัปดาห์จำเป็นต้องกำหนดความหมายเมื่อพวกเขาพูดว่า "เรียนรู้" "What do you mean you're not an expert in LanguageX?!? I can learn a language in a Week!". 1 สัปดาห์ต่อมา:"See, I've learnt the language, and here's a Hello World example I copied from Wikipedia to prove it!"
JohnL

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

10
@ PaulR: ใช้เวลาไม่ถึง 10,000 ชั่วโมงในการเรียนรู้วิธีการขี่จักรยาน หรือว่ายน้ำสำหรับเรื่องนั้น
Robert Harvey

7
@ Paul พูดว่ามันเกี่ยวกับการใช้เวลา 10k ชั่วโมงที่จะโททักษะไม่เพียง แต่ "เรียนรู้" มัน
โทเบียส Kienzler

คำตอบ:


96

ไม่ต้องกังวลเกี่ยวกับการพบแนวคิดไร้สาระ "ทักษะ" ที่ได้ยินกันโดยทั่วไปในข้อความเช่น:

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

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

นี้มีการพิสูจน์เพียง: การใช้จ่ายหนึ่งสัปดาห์ (หรือจริงๆระยะเวลาใด ๆ มากกว่าสองสามวัน) พยายามที่จะเรียนรู้พื้นฐานของHaskell , เปิดฉากหรือAGDA ในไม่ช้าคุณจะเริ่มฟังเพลงเซซามีสตรีทที่เล่นในหัวของคุณ "สิ่งหนึ่งในสิ่งเหล่านี้ไม่เหมือนคนอื่น ๆ ... "

ผลก็คือมีภาษาโปรแกรมเทคนิคและวิธีการต่าง ๆ ที่ต่างจากเรา 95% ที่เราเคยทำหรือเคยทำมา หลายคนไม่ทราบว่ามีแนวคิดอื่นใดที่มีอยู่ซึ่งใช้ได้และแนวคิดเหล่านี้ไม่จำเป็นต้องเป็นโปรแกรมเมอร์ที่มีงานทำและมีประสิทธิภาพ

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

นอกจากนี้ฉันจะบอกว่ากรณีส่วนใหญ่ที่ผู้คนอ้างว่าพวกเขามีหรือสามารถเรียนรู้สิ่งที่ซับซ้อนเช่นภาษาการเขียนโปรแกรมอย่างรวดเร็วเป็นเวลาหนึ่งสัปดาห์พวกเขากำลังทุกข์ทรมานจากDunning Kruger Effect , Wikipedia (เหมืองที่เน้น)

เอฟเฟ็กต์ Dunning – Kruger เป็นอคติเกี่ยวกับความรู้ความเข้าใจที่บุคคลไร้ฝีมือประสบจากความเหนือกว่าภาพลวงตาการจัดอันดับความสามารถของตนสูงกว่าค่าเฉลี่ยโดยไม่ตั้งใจ อคตินี้มีสาเหตุมาจากการไร้ความสามารถทางอภิปัญญาของคนไร้ฝีมือที่จะรับรู้ถึงความผิดพลาดของพวกเขา

ฉันจะดูคนที่จะ perview มีประสบการณ์มากกว่านี้ในแนวคิดของการเรียนรู้ในการเขียนโปรแกรมโดยปีเตอร์นอร์วิกนี้: เรียนรู้การเขียนโปรแกรมในรอบสิบปี

นักวิจัย (Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973)) แสดงให้เห็นว่ามันใช้เวลาประมาณสิบปีในการพัฒนาความเชี่ยวชาญในหลากหลายสาขารวมถึงการเล่นหมากรุกดนตรี การประพันธ์โทรเลขการวาดภาพการเล่นเปียโนการว่ายน้ำเทนนิสและการวิจัยทางด้านประสาทวิทยาและโครงสร้าง กุญแจสำคัญคือการฝึกฝนโดยเจตนา: ไม่เพียง แต่ทำมันซ้ำแล้วซ้ำอีก แต่ท้าทายตัวเองด้วยงานที่เกินความสามารถในปัจจุบันของคุณลองใช้วิเคราะห์การทำงานของคุณทั้งในขณะและหลังทำและแก้ไขข้อผิดพลาดใด ๆ จากนั้นทำซ้ำ และทำซ้ำอีกครั้ง


แน่นอนว่ามีชุดของหลักการที่ครอบคลุมซึ่งจะทำให้ทุกภาษาง่ายต่อการเรียนรู้!

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

หลังจากสิบปีคุณจะสามารถโปรแกรมทั่วไป ซึ่งหมายความว่าคุณสามารถเขียนรหัสที่เหมาะสมในภาษาหรือรูปแบบของภาษา ดังนั้นหลังจาก 10 ปีคุณก็พร้อมที่จะเริ่มจัดการกับแนวคิดการตัดขวางกว้างเหล่านี้นับไม่ถ้วนสำหรับชีวิตที่เหลือของคุณและขาดการเป็นEdsger W. Dijkstra , Donald KnuthหรือJohn D. Carmackคุณจะไม่ไปไหน ของพวกเขา.


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

5
@ CharlesE.Grant ฉันคิดว่าคุณประเมินค่าสูงไปกว่าสิ่งที่คนส่วนใหญ่เรียนในวิทยาลัยและใช้เวลานานแค่ไหนในการใช้ภาษากึ่งภาษาเช่น Haskell หรือ Prolog ฉันจะโต้แย้งวิศวกรที่มีประสบการณ์ในอุตสาหกรรมที่ไม่มีประสบการณ์การเขียนโปรแกรมที่ใช้งานได้จะใช้เวลานานกว่าหนึ่งสัปดาห์กว่าจะสามารถแก้ไขข้อบกพร่องแรกของเขาในโปรแกรม Haskell
Jimmy Hoffa

11
ฉันยังคงยืนยันว่าแนวคิดพื้นฐานพื้นฐานที่ค่อนข้างกะทัดรัด เมื่อคุณเข้าใจการเขียนคำใหม่คุณมีเครื่องมือสำหรับกำหนดแลมบ์ดาแคลคูลัส SK แคลคูลัสเครื่องทัวริงอัลกอริทึมมาร์คอฟ ฯลฯ ความคิดพื้นฐานจำนวนเล็กน้อยสามารถครอบคลุมวิทยาศาสตร์คอมพิวเตอร์ส่วนใหญ่ได้ แต่แน่นอนต้องมีประสบการณ์เพื่อให้สามารถเห็นรูปแบบที่เรียบง่ายในสิ่งที่ดูเหมือนซับซ้อน
SK-logic

4
ฉันจะบอกว่ามันไม่ใช่เอฟเฟ็กต์ Dunning – Kruger มากนักเพียงแค่สมมติว่า "ภาษาโปรแกรม" = "ภาษาการเขียนโปรแกรม c-style" หลังจากรู้จำนวนที่เหมาะสมของ c ++ จำนวนที่เหมาะสมของ C # และบางส่วนของ perl และ python ฉันรู้ว่าฉันสามารถพูดภาษา Java, PHP และอื่น ๆ ได้ในหนึ่งสัปดาห์ ไม่จำเป็นต้องเป็นผู้เชี่ยวชาญ แต่อย่างน้อยก็ค่อนข้างคล่องแคล่ว ผมไม่รับจาวาสคริปต์ในไม่กี่วัน ณ จุดนั้นมันเป็นเรื่องเกี่ยวกับการเรียนรู้ความแตกต่างระหว่างพวกเขาเป็นหลัก หมายเหตุ: ภาษาที่นิยมใช้ในโลกแห่งความเป็นจริงนั้นเหมือน c สิ่งเดียวกันไม่จำเป็นต้องเป็นจริงในการพูดการอารัมภบท
neminem

2
@WayneWerner อย่างจริงจังความแตกต่างระหว่างภาษา Haskell หรือ Prolog และ algol นั้นเป็นอะไรที่มากกว่าวากยสัมพันธ์คุณเป็นเพียงการสานต่อตำนาน ทำแบบทดสอบของฉันด้านบน: ใช้เวลาหนึ่งสัปดาห์ในการเรียนรู้ Haskell และดูว่ามันเหมาะกับคุณอย่างไร สุจริตมันจะดีสำหรับคุณมากมายที่จะเรียนรู้จากการทำเช่นนั้น
Jimmy Hoffa

51

... ฉันจะพัฒนาทักษะการเขียนโปรแกรมที่สามารถนำไปใช้กับทุกภาษาแทนที่จะใช้เพียงภาษาเดียวได้อย่างไร

กุญแจสำคัญในคำถามนี้คือการก้าวข้ามภาษาและคิดว่าไม่ใช่ภาษาที่คุณกำลังเข้ารหัส

วัด?

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

สิ่งนี้คล้ายกับสิ่งที่เราเห็นในการเรียนรู้ภาษาพูด คนที่พูดหลายภาษาได้อย่างคล่องแคล่วคิดความหมายและมันออกมาในภาษาที่กำหนด

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

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

เมื่อมีความสามารถในการใช้ AST นี้ในหัวการเรียนรู้ภาษาอื่นภายในโรงเรียนแห่งความคิดที่คล้ายกัน (การไปBefungeเป็นการกระโดดจาก Java แต่ไม่มากจากForth ) กลายเป็นเรื่องง่าย - มัน 'แค่' แปล AST เป็นภาษาใหม่ซึ่งง่ายกว่าในเวลาที่ 3, 4 และ 5 (ฯลฯ ... )


มีบทความคลาสสิกเป็นโปรแกรมเมอร์จริงไม่ใช้ปาสกาล ส่วนหนึ่งของการอ่านนี้:

... Real Programmer ที่ตั้งใจสามารถเขียนโปรแกรม Fortran ในภาษาใดก็ได้

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

ในการนี้ผมต้องชี้ให้เห็นในบทความที่ตีพิมพ์โดยพลอากาศเอกไม่ว่าจะเขียน Fortran ในภาษาใด ย่อหน้าที่สามของบทความ (ที่ไม่ได้เป็นคำพูดนำ) ตรงคำถามที่อยู่:

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

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

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

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

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

(ฉันขอโทษ ChaosPandion สำหรับการขอยืมอย่างหนักจากความคิดที่เขานำเสนอ )


3
ไม่จำเป็นต้องขอโทษ ฉันคิดว่าคุณเขียนคำตอบที่น่าประทับใจ
ChaosPandion

ฉันต้องการเครดิตคนที่ทำให้ฉันคิดในทิศทางนั้นเพื่อเขียนคำตอบ

3
นี่เป็นคำตอบที่ดีมาก หวังว่าฉันจะสามารถโหวตได้สองครั้ง
Wayne Werner

2
ที่จริงแล้วนี่คือเหตุผลที่คุณไม่ควรเรียนรู้ OO ก่อนเพราะสมองของคุณมี AST ที่แย่ที่สุดเท่าที่จะเป็นไปได้
Morg

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

12

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

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

และใช่คุณจะค้นพบภาษาเช่น Haskell ที่จะสอนสิ่งใหม่ให้คุณเมื่อคุณมีพื้นฐานที่มั่นคงในพื้นฐาน

โปรแกรมเมอร์บางคนอาจคิดว่าทุกภาษาเหมือนกันเพราะพวกเขาไม่ได้สัมผัสกับสิ่งที่ทำให้พวกเขาคิดแตกต่างกัน ภาษาที่ใช้กันมากที่สุดทั้งหมดมาจาก Algol (ภาษาเหล่านี้เป็นภาษาเชิงโพรซีเดอร์) และภาษาเหล่านั้นส่วนใหญ่เป็นภาษาที่มีความโค้งงอคล้ายกับ C พวกเขาส่วนใหญ่ทำสิ่งเดียวกันแม้ว่าจะมีความซับซ้อนมากกว่า


2
นี่มันไม่จริงจริงเหรอ? ภาษาโปรแกรมบางโปรแกรมเข้ารหัสทุกอย่างเป็นฟังก์ชั่นแท้ ๆ (รวมถึงการตัดสินใจ + ลูป) คนอื่น ๆ สามารถสร้างแบบจำลองด้วยการผลักและ popping วัตถุจากชุด ฯลฯ
jozefg

1
อะไรไม่จริงเหรอ? คุณต้องเรียนรู้วิธีการรวบรวมข้อมูลก่อนจึงจะสามารถเดินหรือวิ่งได้
Robert Harvey

1
อาฉันควรระบุว่าฉันหมายถึงย่อหน้าสุดท้ายฉันเห็นด้วยกับส่วนที่เหลือของคำตอบ
jozefg

1
ฉันได้แทนที่ย่อหน้าสุดท้ายด้วยประโยคที่ดีกว่าเพื่อสะท้อนความเชื่อมั่นของฉัน
Robert Harvey

5

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

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

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

ฉันเขียนโปรแกรมมา 30 ปี (OMFG!) และยังคงใช้php.netเพื่อค้นหาคำสั่งใน PHP เพราะไม่ใช่ภาษาแรกของฉัน

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

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


ความคิดเห็นของคุณเป็นคนแรกที่ฉันอ่านเกี่ยวกับแบบจำลองและรูปแบบ! ฉันมีความคิดเห็นของคุณ 100% สิ่งหนึ่งคือการได้รับภาษาและเริ่มทำโปรแกรม อีกอย่างหนึ่งคือการคิดผ่านปัญหาและค้นหาเครื่องมือที่เหมาะสมในการแก้ปัญหาจากนั้นคุณเริ่มมองหาภาษาและเริ่มโปรแกรม

3

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

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

ดังนั้นบางทีคุณสามารถเล่นเพลงสองสามเพลงได้ดีมาก แต่คุณไม่สามารถเบี่ยงเบนหรือรับเพลงใหม่ได้อย่างรวดเร็ว นี่อาจจะเทียบเท่าโปรแกรมเมอร์. NETที่ยังคงสร้างแอปพลิเคชั่นCRUDเดิมซ้ำแล้วซ้ำอีกในบางจุดลองสิ่งใหม่เพิ่มในการเรียกใช้บริการเว็บหรือ UI ขั้นสูงหรือเขียนเป็นภาษาใหม่ทั้งหมด เมื่อคุณพบอุปสรรคทำไมสิ่งต่าง ๆ เกิดขึ้นอย่างที่พวกเขาทำถามคำถามเกี่ยวกับการแลกเปลี่ยนกองซ้อน ฯลฯ ในที่สุดคุณจะเห็นรูปแบบทั้งหมดที่เกิดขึ้นอย่างต่อเนื่องและรู้ทฤษฎีพื้นฐานบางอย่างและการเรียนรู้ภาษาใหม่จะไม่ ดูเหมือนเกือบจะเป็นที่น่ากลัว


1

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

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

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


1

กลยุทธ์ของฉันคือการมุ่งเน้นไปที่ทักษะบริสุทธิ์มากกว่าทักษะเฉพาะ

แทนที่จะเรียนรู้ไวยากรณ์พิเศษของ Python (หรือภาษาใด ๆ ) สำหรับสิ่งที่คุณต้องการจะทำใช้วงจรสมองของคุณในการแก้ปัญหาเชิงนามธรรมเช่นวิธีแก้ปัญหาทุกประเภทในประเภทนั้นได้ดีที่สุด

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

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

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

คุณต้องการตั้งคำถามตลอดเวลาและยอมรับเฉพาะเมื่อโซลูชันนั้นรวดเร็วสง่างามและเชื่อถือได้เท่านั้น


1
"อย่าฟังโปรแกรมเมอร์คนอื่น ๆ " - แน่นอน "- คุณจะรู้ได้อย่างไรว่าคุณเขียนโค้ดที่อ่านได้และบำรุงรักษาง่าย - เพื่อนของคุณจะบอกคุณหลังจากตรวจสอบรหัสเหตุผล: คุณไม่สามารถระบุได้ด้วยตัวเองเพราะคุณรู้จักผู้เขียนมากกว่ารหัสที่เขียนขึ้นเองคอมพิวเตอร์ ไม่สามารถบอกคุณได้ด้วยเหตุผลเดียวกับที่ไม่สามารถบอกได้ว่าภาพวาดนั้นเป็นศิลปะหรือไม่ดังนั้นคุณต้องมีมนุษย์คนอื่น - ที่สามารถดูแลซอฟต์แวร์ได้ - เพื่อดูสิ่งที่คุณเขียนและแสดงความคิดเห็น ... " ( แหล่งที่มาอ้าง )
gnat

@gnat ทำในสิ่งที่คุณต้องการ ฉันแค่บอกคุณว่าเนื่องจากโปรแกรมเมอร์ส่วนใหญ่ไม่สามารถเขียนโค้ดอึได้ความคิดเห็นของพวกเขาอาจเป็นอันตรายและคุณควรนำกระเป๋าและถุงใส่เกลือมาจัดการกับสิ่งนั้น นอกจากนี้ฉันเชื่อว่า "สิ่งที่แก้ไขได้และอ่านได้โดยคนปัญญาอ่อน" ไม่ใช่สัญญาณของคุณภาพเลย เชื่อในสิ่งที่คุณต้องการ แต่อย่าไปประมาณ -1 เพียงเพราะคนไม่เห็นด้วยกับวิสัยทัศน์ของคุณ
Morg

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

อะไรก็ตาม เนื้อหา> แบบฟอร์ม เก็บรูปของคุณฉันจะเก็บเนื้อหาของฉันไว้
Morg

0

มีวิธีการทางทฤษฎี เรียนรู้เกี่ยวกับการใช้งานคอมพิวเตอร์ภายใต้การปกหนังสือ วิธีประมวลผลคำแนะนำพื้นฐานของสตริงรวมเข้าด้วยกันเพื่อให้การดำเนินการและโครงสร้างที่ซับซ้อนยิ่งขึ้นซึ่งเราได้รับอนุญาตในการเขียนโปรแกรมระดับสูง

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

โดยส่วนตัวเมื่อฉันต้องการเรียนรู้ภาษาใหม่ฉันใช้puzzlers Project Euler ฉันไปที่ตัวต่อที่ฉันได้แก้ไขไปแล้วในภาษา OOP (เป็นตัวอย่าง) และพยายามที่จะแก้ปัญหาด้วยการใช้ฟังก์ชั่นในขณะที่พยายามทำตามแนวทางปฏิบัติที่ดีที่สุดของภาษาใหม่ เมื่อคุณแก้ปัญหาเดียวกันโดยใช้วิธีการที่แตกต่างกันสองวิธีคุณไม่เพียง แต่เห็นว่าความแตกต่างที่แท้จริงคืออะไร แต่พวกเขายังแสดงให้คุณเห็นว่าพื้นที่ทั่วไปอยู่ที่ใด พื้นที่ทั่วไปเหล่านี้ที่ใช้ร่วมกันโดยทุกภาษาคือการเขียนโปรแกรมจริงความแตกต่างเป็นเพียงวิธีที่แตกต่างเพื่อให้บรรลุ


4
ฉันจะไม่เรียกการเรียนรู้เกี่ยวกับพฤติกรรมทางกายภาพของคอมพิวเตอร์ว่า "วิธีการเชิงทฤษฎี" "วิธีการทางทฤษฎี" จะเป็นการเรียนรู้ทฤษฎีการอ่านวิทยานิพนธ์ทัวริสต์โบสถ์และการเรียนรู้เกี่ยวกับแกงมอร์ด พื้นฐานของทฤษฎีจำนวน, สิ่งเหล่านี้คือการสนับสนุนทางทฤษฎี การไม่พูดว่าคำตอบของคุณนั้นถูกหรือผิดเพียงแค่พูดว่าฉันจะอ้างถึงสิ่งนั้นเพราะวิธีการที่เป็นรูปธรรมไม่ใช่ทฤษฎีเพราะมันขาดทฤษฎี
Jimmy Hoffa

@JimmyHoffa - คะแนนดี!
ระบบดาวน์

1
"วิธีการที่ตัวประมวลผลพื้นฐานถูกรวมเข้าด้วยกัน (... )" ดูเหมือนจะเป็นความคิดที่น่ากลัวสำหรับผู้เริ่มต้น (OP ไม่ได้ระบุว่าเขาเป็นหนึ่ง แต่ให้สมมติเพื่อการโต้แย้งมันสอน 'micro-optimization' โดยไม่สอนว่า ในการปรับให้เหมาะสม (สถาปัตยกรรมสเตจ 3-5 ช่วงอาจถือว่าล้าสมัยเล็กน้อย ... ) อย่าเข้าใจฉันผิด CA น่าทึ่ง แต่การรู้คุณค่าที่เหมาะสมจะต้องใช้คำเช่น 'out-of-order' และ 'multiscalar' และอาจเกิดขึ้นหลังจากประสบการณ์การเขียนโปรแกรมพื้นฐาน
Maciej Piechotka

0

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

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

เพียงแค่พิจารณานักดาบผู้โด่งดังหลายคนจู่โจมดาบของพวกเขาและออกไปต่อสู้กับหอกหลังจากฝึกมา 7 วัน อะไรจะเกิดขึ้น? พวกเขาจะสนใน

ภาษามักจะไม่ยากที่จะเรียนรู้ แต่ต้องใช้ความอดทนและการออกกำลังกายให้เก่ง นอกจากนี้ไม่มีวิธีที่ถูกต้องในการเรียนรู้การเขียนโปรแกรม

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

นี่คือสองสิ่งที่คุณอาจต้องการทำเมื่อเรียนรู้ภาษา

  • อ่านเกี่ยวกับภาษา ถ้ามันฟังดูน่าสนใจลองแอป Hello world ด้วยตัวเอง
  • อ่านบทเรียน, เคล็ดลับ, บล็อก
  • สร้างแอพที่เรียบง่ายเพื่อความสนุก
  • ทดสอบคุณสมบัติที่แตกต่าง
  • หากคุณชอบมันจริงๆซื้อหนังสือและ / หรือแบบฝึกหัดวิดีโอ
  • ค้นหาห้องสมุดที่ดี
  • ค้นหาคำตอบถามเฉพาะในกรณีที่คุณไม่พบคำตอบ
  • ช่วยเหลือผู้อื่นเพื่อขอคำตอบ (ที่ไหนดีกว่าที่นี่?)
  • ทำสิ่งที่มีประโยชน์ การสร้างแอพเครื่องคิดเลขอาจเป็นการออกกำลังกายที่ดี แต่ถ้าคุณทำแอพพลิเคชั่นรายการที่ต้องทำและจริง ๆ แล้วคุณใช้บนพีซี / โทรศัพท์ความรู้สึกนั้นน่าพึงพอใจ 100 เท่า

สัมผัสกับภาษาใหม่สำรวจห้องสมุดใหม่เรียนรู้ลูกเล่นใหม่ ๆ ในเวลาว่างของคุณ ก่อนที่คุณจะรู้ว่าคุณจะแปลกใจกับทักษะของคุณเอง


0

ในกรณีของฉันฉันเรียนรู้วิธีการเขียนโปรแกรมจริงผ่านทางต่อไปนี้:

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

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


0

ฉันคิดว่าถ้าคุณสามารถคิดวิเคราะห์คุณมีการเริ่มต้นที่ดี

เรียนรู้ภาษาใด ๆ ที่คุณต้องการและทำงานเป็นชุดของตัวอย่างเช่นนำเสนอในหนังสือที่สอนการเขียนโปรแกรม

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

อ่านรหัสของโปรแกรมเมอร์อื่น ๆ และพยายามเข้าใจว่าทำไมพวกเขาถึงแก้ไขปัญหาด้วยวิธีนี้

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

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

ฉันหวังว่าความคิดเห็นของฉันจะตอบคำถามของคุณอย่างน้อยบางส่วน

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