ลำดับการเรียนรู้การเขียนโปรแกรมภาษาในอุดมคติ? [ปิด]


17

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

NB: นี่คือพอร์ตของคำถามที่ฉันถามในstackoverflowและถูกปิดเพราะเป็นอัตนัยและโต้แย้ง


เป็นคำถามที่ดีมาก จะมีคำตอบใดถ้าคำถามนี้มุ่งเน้นประสิทธิภาพ ฉันอยากรู้: programmers.stackexchange.com/questions/16323/… : D
JoeBilly

4
ฉันประหลาดใจและยินดีเป็นอย่างยิ่งที่ LISP ปรากฏตัวตามคำถามระดับสูง
Inaimathi

1
คำถามนี้ก็ถามที่นี่ (แม้ว่าฉันคิดว่านี่มาก่อน): programmers.stackexchange.com/questions/41720/ …
oosterwal

ต้องบันทึกลิงก์นี้ที่นี่ - streamhead.com/what-programming-language-to-learn-next
Gulshan

คำตอบ:


26

Python, Lisp, C, Haskell

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

  1. Python : เริ่มต้นด้วยภาษาไดนามิกระดับสูง OO และฟังก์ชั่น เพราะมันเป็นสิ่งสำคัญสำหรับผู้เริ่มต้นที่จะรู้สึกมีประสิทธิผลโดยเร็วและไม่ถูกปิดโดยไวยากรณ์ของมนุษย์ต่างดาว, การขาดห้องสมุด, การขาดหลายแพลตฟอร์ม, ขาดทรัพยากรการเรียนรู้, และการขาดชุมชน Python สามารถอ่านได้สูงมีห้องสมุดที่ดีมากมาย (โดยเฉพาะห้องสมุดวิทยาศาสตร์ - นักวิทยาศาสตร์ / วิศวกรสมัยใหม่ต้องรู้วิธีการเขียนโปรแกรม) สามารถเรียกใช้งานได้ง่ายจากระบบปฏิบัติการส่วนใหญ่มีบทเรียนมากมายและหนังสือฟรีทั้งหมดและเป็นมิตรกับผู้ใช้ - ทั้งหมดในขณะที่ยังคงมีพลังมากพอที่จะเติบโตไปพร้อมกับคุณในขณะที่คุณเป็นโปรแกรมเมอร์ขั้นสูงที่ทำงานกับปัญหาใหญ่ สิ่งสำคัญคือการเสริมความสำคัญ + ข้อตกลงที่มีประโยชน์สำหรับผู้เริ่มต้น: การอ่านโค้ดนับได้มากและคุณควรเขียนโค้ดสำหรับตัวคุณเองและผู้อื่นเพื่อให้เข้าใจได้ง่าย

  2. เสียงกระเพื่อม: โดยเฉพาะอย่างยิ่งอย่างน้อยอ่านโครงสร้างและการตีความของโปรแกรมคอมพิวเตอร์หรือดูวิดีโอ SICPและเปิดตากว้างมากโดยเห็นรากฐานและพลังของการเขียนโปรแกรม - หนึ่งสามารถทำได้มากด้วยน้อย เรียนรู้ว่า Lisp สามารถแสดงไม่เพียงแค่กระบวนทัศน์การทำงาน แต่ OO, ตรรกะ / การประกาศและอื่น ๆ - เช่นการสร้างภาษาเฉพาะโดเมนใหม่ อ่านPAIP ของ Norvigเพื่อเป็นสักขีพยานในสิ่งที่อาจารย์สามารถทำได้ด้วยภาษา จากนั้นตรวจสอบClojureภาษา Lisp ทันสมัยที่อาจเป็นหนึ่งในสิ่งที่ใหญ่ต่อไป

  3. C: เพียงเพราะมันเป็นภาษากลางของการคำนวณ :) อาจเป็นทางเลือกในทุกวันนี้หากเป็นโปรแกรมเมอร์ในโดเมนที่ไม่ใช่ซอฟต์แวร์เป็นหลัก ฉันพบว่ามันน่าเกลียด แต่ก็คุ้มค่าที่จะได้รับความรู้เกี่ยวกับฮาร์ดแวร์พื้นฐาน ไปกับK&Rแน่นอน

  4. Haskell : พลังการทำงานที่บริสุทธิ์ ที่ไหน Com.Sci ปัจจุบัน ทฤษฏีและพลังการแสดงออกที่เป็นประโยชน์ ดูโลกแห่งความจริง Haskell

หลังจากทัวร์ด้านบนจะมีความชำนาญอย่างมากในการแก้ปัญหาและแสดงวิธีแก้ไขปัญหาในรหัสและรู้สึกสบายใจกับกระบวนทัศน์ที่นี่ :

ข้อความแสดงแทน


ฉัน (โดยธรรมชาติ) แทน Smalltalk สำหรับ Python เป็น # 1 แต่ฉันบอกว่าการรู้ว่า Python (a) ได้รับความนิยมอย่างแพร่หลายมากกว่า Smalltalk และ (b) การให้ Smalltalk พูดกับภาษาอื่นนั้นยากเหมือนใน Java ซึ่งต้องบอกว่าหนักพอที่จะทำให้มือใหม่หงุดหงิด "scriptiness" ของไพ ธ อนดูเหมือนจะเป็นประโยชน์อย่างมาก
Frank Shearar

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

+1 ฉันไม่แน่ใจว่า Haskell ควรอยู่ด้านบน แต่เพื่อความเป็นธรรมฉันยังไม่รู้และอยู่ในรายชื่อต่อไปดังนั้นอาจเป็นภาษาสุดท้ายที่ฉันเรียนรู้
Inaimathi

2
1- คลิกเพื่อดูแผนภาพขนาดเต็ม @ i54.tinypic.com/168ity1.jpg
Mike Clark

ฉันจะ +1 สิ่งนี้ถ้า C ไม่อยู่ในรายการ
Balog Pal

28

นี่คือวิธีที่ฉันจะทำ:

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

  2. C ++ (หรือ Java): ภาษาที่พิมพ์เร็ว หากคุณต้องการการวางแนววัตถุคุณก็รู้แนวคิดบางอย่างอยู่แล้ว แนวคิดหลักคือ "แปล" สิ่งที่คุณทำใน Python และทำด้วยข้อ จำกัด ใหม่ (ส่วนใหญ่เป็นประเภท) ตอนนี้ถ้าคุณมีแนวคิดที่ถูกต้องการเพิ่มประเภทไม่ใช่ปัญหา ขั้นตอนต่อไปคือการคิดในระดับต่ำมากขึ้น (Java ไม่ได้ช่วยที่นี่) และตัวชี้สอนดี โดยนี้ฉันหมายถึงการอธิบายเกี่ยวกับพื้นที่ที่อยู่, CPU, ระบบปฏิบัติการเล็กน้อยเพื่อให้คุณสามารถเริ่มเห็นใต้โปรแกรมของคุณ ภาษาที่คอมไพล์แนะนำความแตกต่างระหว่างการตีความและการรวบรวมมีประโยชน์มากในการอธิบายว่าภาษาเครื่องคืออะไร ฯลฯ

  3. การชุมนุม : ในที่สุดไม่มีเวทมนต์คุณแค่คุยกับเครื่องจักร มีการถกเถียงเกี่ยวกับไวยากรณ์ของ Intel และ GAS ไม่ใช่เรื่องสำคัญ ถ้าคุณมี MIPS ฉันเชื่อว่ามันดีกว่าสำหรับการสอน แต่ฉันคิดว่า x86 สะดวกกว่าเพราะมันแพร่หลายมากขึ้น (x86_64 ดีกว่าเนื่องจากมีการลงทะเบียนและ niceties มากกว่า) คุณเพียงแค่ต้องลบความซับซ้อนบางส่วนและให้นักเรียนตรวจสอบเพิ่มเติมหากพวกเขาต้องการ

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

  1. Scheme (หรือ Common Lisp หรือ Clojure): ดังที่ @dukeofgaming กล่าวว่าภาษา Lisp ช่วยให้คุณสอนการเรียกซ้ำได้เป็นอย่างดี (สำหรับโครงการนี้ดีที่สุดเนื่องจากไม่มีลูปที่ชัดเจน) แต่ฉันจะไปสอนอีกสองสิ่ง: การปิดและมาโคร มาโครคือสิ่งที่แยกภาษา Lisp ออกจากภาษาอื่น โดยส่วนตัวฉันไม่ชอบมาโคร Scheme แต่นี่ไม่สำคัญเกินไป ฉันคิดว่ามาโคร Clojure นั้นดีเช่น (แต่การเรียกซ้ำใน Clojure นั้นไม่สะอาดเนื่องจาก JVM ไม่มีการเรียกซ้ำแบบหาง) การปิดเป็นแนวคิดที่สำคัญมากเมื่อคุณค้นหา "Javascript" ในทันที เมื่อศึกษา C ++, Python และ Lisp แล้ว Javascript จะกลายเป็น "เรื่องไม่สำคัญ"

  2. Haskell : สำหรับภาษาที่ใช้งานได้ฉันไม่คิดว่าคุณจะเอาชนะ Haskell ได้ Lisp และ Scheme ถือว่าเป็นหน้าที่ แต่เพื่อเน้นการเขียนโปรแกรมเชิงหน้าที่คุณต้องบังคับให้นักเรียนคิดโดยไม่ต้องพูด Haskell ยังมีสิ่งที่ดีมาก ๆ อีกเช่นการจับคู่และการจับคู่รูปแบบสำหรับ "การทำลาย" ฉันไม่รู้จัก Haskell มากนัก แต่ความกระชับของรหัสที่คุณเขียนได้นั้นสวยงามมาก การรู้จัก Haskell เป็นอย่างดีทำให้เส้นทางที่จะเข้าใจ Erlang ง่ายขึ้นมาก

  3. Forth : ภาษาสแต็ก มันทำลายตรรกะของคุณโดยสิ้นเชิงอีกครั้ง (ถ้า Lisp และ Haskell ไม่เพียงพอ) ฉันจะสอนเท่าที่โจนส์ออกไปเพราะพวกเขารู้ว่าการชุมนุมแล้วคุณจะเข้าใจได้อย่างสมบูรณ์ว่าเกิดอะไรขึ้น (การรู้จัก Forth จะเป็นการเปิด PostScript เป็นต้น)

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

คุณสามารถเลือกศึกษา:

  1. SmallTalk : ภาษาเชิงวัตถุล้วนๆ เมื่อต้องการดูว่าเกิดอะไรขึ้นเมื่อคุณใช้การวางแนววัตถุอย่างจริงจังภาษาไม่จำเป็นต้องใช้ "ถ้า", "สำหรับ" ทุกอย่างเป็นข้อความ: สำนึกที่ยิ่งใหญ่อีกครั้ง (สิ่งนี้จะทำให้ Objective-C ง่ายขึ้นในขณะนี้)

  2. ไป : ภาษา (สวยงาม) โดยเน้นที่การเห็นพ้องด้วย ฉันพบว่าโปรแกรม Go ที่ดีและสะดวกสบายด้วย

  3. อารัมภบท : กระบวนทัศน์การเขียนโปรแกรมอื่น ฉันไม่ได้เขียน Prolog ใด ๆ แต่ฉันเข้าใจว่ามันเป็นอีกภาษาหนึ่งที่น่าเหลือเชื่อ


6
Python และ Ruby (ฉันไม่รู้เกี่ยวกับ Lua) เป็นภาษาที่พิมพ์อย่างมาก ฉันคิดว่าคุณหมายถึงว่าพวกเขาเป็นแบบไดนามิกมากกว่าที่จะพิมพ์แบบคงที่
Daniel Roseman

13
โปรดใช้ภาษา C และ C ++ เป็นสองภาษาแยกกัน
David Thornley

1
Bjarne พูดว่า : "ไม่มีภาษาที่เรียกว่า" C / C ++ "วลีนี้มักใช้โดยผู้ที่ไม่มีเงื่อนงำเกี่ยวกับการเขียนโปรแกรม (เช่นบุคลากรฝ่ายทรัพยากรบุคคลและผู้จัดการที่ไม่ดี) หรือใช้โดยคนที่ไม่เข้าใจง่าย รู้ C ++ (และมักจะไม่ใช่ C เช่นกัน) "
fredoverflow

1
ฉันต้องการให้ใครบางคนโต้แย้งว่าการชุมนุมควรนำหน้า C ++ หรือไม่ ณ จุดที่มันจะค่อนข้างง่ายที่จะเข้าใกล้การชุมนุมเนื่องจากแนวคิดที่เรียบง่ายและชุดเล็ก ๆ ของเครื่องมือให้ยังทำงานร่วมกับดิบหน่วยความจำและดิบอ้างอิงหน่วยความจำที่ควรจะเป็นประโยชน์มากเมื่อใกล้ c ++ ที่ใช้การอ้างอิงที่ระบุไปยังที่อยู่ทั้งสองโดยพลการ ตำแหน่งและค่าหน่วยความจำสร้างความสับสนให้กับ sh * จากคนส่วนใหญ่
Filip Dupanović

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

12
  • คนที่คุณต้องการในตอนนี้
  • คนที่คุณต้องการต่อไป
  • คนที่คุณต้องการหลังจากนั้น

อย่างจริงจังฉันอาจได้เรียนรู้พื้นฐาน BASIC, COBOL, Fortran, Forth, Pascal และ Prolog ในเวลาของฉัน แต่ฉันไม่เคยต้องการใช้พวกเขาเป็นพิเศษและฉันไม่เห็นวิธีใด ๆ ที่พวกเขามีอิทธิพลต่อการใช้งานอื่น ๆ ภาษายกเว้นกระบวนทัศน์ที่อาจทำให้เข้าใจผิดจากคนอื่น ฉันใช้เวลานานในการปลดปล่อย BASIC ให้มากพอที่จะเขียน Pascal ที่มีโครงสร้างสองสามปีที่จะหยุดเขียนรหัส Pascal ใน C และอีกสองสามปีที่ผ่านมาเพื่อรอ OOP จริง ๆ เมื่อฉันเริ่มใช้ Objective-C และ Java ในทางกลับกันเนื่องจากฉันทำงาน (เฉพาะ) ในภาษา OO โดยเฉพาะฉันสามารถจดจ่อกับการปรับปรุงการใช้ภาษา OO ของฉันได้โดยไม่ต้องพยายามทำให้พวกเขาดูเหมือน Scheme หรือ PostScript


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

8

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

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

  2. Perl

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

  3. C ++หรือJava

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

  4. เสียงกระเพื่อมสามัญ

    นี่คือรางวัลสำหรับคำขวัญก่อนหน้า คุณจะพบเสียงสะท้อนของสิ่งที่คุณได้เรียนรู้ในภาษาก่อนหน้านี้ทั้งหมดและดูว่าการอ้างสิทธิ์ก่อนหน้านี้โง่มากเพียงใดเมื่อเขียนโปรแกรมใน Lisp ตัวประมวลผลล่วงหน้าและเทมเพลตของ C ++ เตรียมไว้เพื่อชื่นชมระบบแมโครของ Lisp คุณจะได้รับความง่ายในการแสดงออกจาก Perl โอกาสในการเพิ่มประสิทธิภาพระดับต่ำจาก C ความสามารถในการสร้างนามธรรมของ C ++ หรือ Java และผ่านสิ่งเหล่านี้ทั้งหมด ไม่มีสามข้อก่อนหน้านี้ - อาจยกเว้นดีบักเกอร์ของ Perl - จะเตรียมคุณให้พร้อมสำหรับประสบการณ์การเขียนโปรแกรมเชิงโต้ตอบด้วยสภาพแวดล้อมแบบREPL ที่ ("read, eval, print loop") ทำงานกับรูปภาพใช้งานได้ - ซึ่งจะเปลี่ยนความสัมพันธ์ระหว่างซอร์สโค้ดของคุณและแนวคิดของ "โปรแกรมปฏิบัติการ" - แนวคิดของการสร้างโปรแกรม

นอกเหนือจากที่กล่าวมาทั้งสี่การสำรวจรูปแบบการเขียนโปรแกรมอื่น ๆ เช่นการเขียนโปรแกรมเชิงปฏิบัติการใน Haskell หรือการเขียนโปรแกรมเชิงตรรกะใน Prolog ทำให้มีความเข้าใจที่ครอบคลุมมากขึ้นเกี่ยวกับการเขียนโปรแกรม - ความรู้ที่หลากหลายหากคุณต้องการ - แต่ ณ เวลานั้น โดยการปรับปรุงฝีมือของคุณ - ความรู้ลึก - ด้วยภาษาใด ๆ ที่คุณรู้

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


4
+1 สำหรับ C และ Common LISP แต่ Perl เป็นภาษาที่สอง :) Python จะให้บริการที่ยอดเยี่ยมเป็นภาษาแบบไดนามิกในขณะที่ยังส่งเสริมนิสัยการเขียนโปรแกรมที่ดีเช่นรหัสที่สามารถอ่านได้สำหรับตัวคุณเองและคนอื่น ๆ ในสัปดาห์เดือนหรือปีหลังจากการเขียนโปรแกรมครั้งแรก
limist

1
เกี่ยวกับคำแนะนำ Perl: นั่นเป็นเพียงฉันแสดงอายุของฉัน แน่นอนว่าในวันนี้ Python หรือ Ruby จะเป็นสิ่งทดแทนที่ใกล้เคียงกัน แต่ทั้งคู่มีความดื้อรั้นมากกว่า Perl และเอนเอียงไปสู่การวางแนววัตถุ class-as-a-bag-of-method-style ที่โปรแกรมเมอร์ใหม่ออกมาจาก C doesn ยังต้องการ ฉันจำได้ว่าเมื่อฉันเรียนรู้ Perl ฉันก็รู้สึกตื่นตระหนกขึ้นมาทันทีและไม่นานหลังจากนั้นฉันก็เริ่มใช้สิ่งอำนวยความสะดวกเชิงวัตถุ บ่อยครั้งที่การมุ่งเน้นของ OO เป็นเพียงแค่การเบี่ยงเบนและไม่จำเป็นต้องทำพิธี
seh

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

True, Fred และนั่นคือสิ่งที่ฉันหมายถึง: ใช้ประโยชน์จากคุณสมบัติโดยไม่ต้องคิดว่าพวกเขาสามารถนำเสนอต้นทุนได้อย่างไร - ค่าใช้จ่ายที่คุณอาจหลีกเลี่ยงก่อนหน้านี้โดยหลีกเลี่ยงความสามารถของคุณลักษณะเช่นกันเพราะมันจะซับซ้อนเกินไป เพื่อดำเนินการด้วยตนเอง ยกตัวอย่างเช่นบ่นว่า RTTI คือ "ช้าเกินไป" ทันทีทำให้เกิดคำถามของวิธีการอื่นที่คุณกำลังจะแก้ปัญหาได้
seh

6

1. Smalltalk

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

Smalltalk เป็นภาษา OO ที่บริสุทธิ์ในแง่ที่ว่า "ทุกสิ่งเป็นวัตถุ"

นอกจากนี้ยังสอนเทคนิคการใช้งานหลายอย่างโดยเฉพาะอย่างยิ่งใน Collection API: ข้อความการผูกมัดฟังก์ชั่นการสั่งซื้อที่สูงขึ้นแผนที่ลดและอื่น ๆ

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

2. PROLOG

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

3. เสียงกระเพื่อมสามัญ

โครงการทดแทนที่นี่หากคุณต้องการ Common Lispรองรับหลายกระบวนทัศน์โดยเฉพาะ OO และการทำงาน นอกจากนี้ยังมีประวัติอันยาวนาน (เสียงกระเพื่อมเป็นภาษาที่ใช้กันอย่างแพร่หลายที่เก่าแก่ที่สุดที่สอง: เฉพาะเก่ากว่า FORTRAN ของ)

4. Haskell

(Caveat: ฉันเพิ่งเริ่มเรียนรู้มัน) อาจเป็นภาษาที่ใช้งานได้ดีที่สุดในโลก มันมีระบบประเภทคงที่ขั้นสูงมาก Handy บทนำ หนังสืออยู่

5. C หรือ Delphi

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

ทำไมคำสั่งนี้?

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

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

Common Lisp กลับกันเป็นภาษาของผู้ใหญ่ มันมีมาตรฐานที่เป็นผู้ใหญ่มันได้รับการออกแบบภาษาชั้นนำมานานหลายทศวรรษ (พร้อมกับ Smalltalk) - คุณสมบัติใหม่ที่แปลกใหม่ที่คุณชื่นชอบภาษาที่คุณเพิ่งได้รับ? โอกาสเป็นความคิดที่บ่มเพาะใน Lisp หรือ Smalltalk Common Lisp ยังมีความกระปรี้กระเปร่านิดหน่อยและคุณจะพบกับความวุ่นวายในทุกที่ที่คุณไป

Haskell เป็นอันดับสี่ในรายการเพราะ (ฉันบอกว่า: ฉันเพิ่งเริ่มเรียนรู้เท่านั้น) ความบริสุทธิ์ของมันหมายความว่าสิ่งที่พบได้ทั่วไป (เช่น I / O) นั้นยากกว่าการทำมากกว่าภาษาที่ใช้งานได้น้อย คน Haskell ยังใช้คำศัพท์ที่ค่อนข้างแปลกใหม่ (คำเช่น "catamorphism", พูด) และคุณอาจจะรู้สึกดีขึ้นเมื่อใช้ประสบการณ์การเขียนโปรแกรมใต้เข็มขัดของคุณก่อนที่จะแก้ปัญหา (แต่ฉันต้องทำซ้ำอีกครั้งฉันเพิ่งจะเริ่มเรียนรู้! เอาความเห็นนี้ด้วยเกลือนิดหน่อย!)

และทำไม C / Delphi จึงมีอยู่ เพราะถ้าคุณทำงานในระบบฝังตัวคุณไม่ควรเรียนรู้การเขียนโปรแกรมคิดว่าการจัดการหน่วยความจำด้วยตนเองมีอยู่ทั้งหมด การรวบรวมขยะทำงานได้ดีพอสำหรับเครื่องระดับปี 1980 โทรศัพท์ของคุณทรงพลัง!

ในที่สุดฉันไม่ได้ใส่Erlangในรายการด้านบนแม้ว่าฉันควร


2
นี่เป็นลำดับการเรียนรู้หรือไม่?
Wizard79

มันชัดเจนว่าเป็นลำดับ (ความยาว 1)
Frank Shearar

น้อยหน้า: ฉันจะให้หนึ่งขั้นตอนในลำดับและคุณให้คนอื่น ๆ และชุมชนจะลงคะแนนในการเรียงลำดับดังกล่าวใช่ไหม?
Frank Shearar

3
@ Frank ฉันไม่ได้หมายความอย่างนั้น ฉันคาดว่าลำดับเต็ม และฉันคิดว่าการสั่งซื้อไม่สามารถทำได้โดยการลงคะแนน
Gulshan

กรุณา folks: ถ้าคุณกำลังจะ downvote อธิบายว่าทำไม
Frank Shearar

5
  1. หลาม แนะนำการเขียนโปรแกรมที่ยอดเยี่ยม สิ่งนี้จะผูกกับการสัมผัสก่อนหน้านี้กับการเขียนโปรแกรม

  2. โครงการ ยังเป็นการแนะนำการเขียนโปรแกรมที่ยอดเยี่ยม หากจัดการกับการเขียนโปรแกรมสามเณรคุณอาจต้องการสอนสิ่งนี้ก่อน ทางเลือกหนึ่งคือ Python ก่อนแล้ว Common Lisp แทนที่จะเป็น Scheme: ทำงานได้มากกว่า แต่ได้รางวัลมากกว่า

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

  4. อารัมภบท อีกทางเลือกหนึ่งแทนภาษาที่ใช้ในวัตถุประสงค์ทั่วไปหากคุณพบว่าคุณชอบภาษาที่ดีกว่า

  5. Haskell สำหรับระบบประเภทและฟังก์ชั่นบริสุทธิ์ถ้าไม่มีอะไรอื่น

  6. มีผู้สมัครหลายคนที่นี่เนื่องจากเป็นไปไม่ได้ที่จะครอบคลุมแนวคิดทั้งหมดด้วยหกภาษา Common Lisp เป็นสิ่งที่ควรค่าแก่การเรียนรู้หากระบบแมโครและระบบวัตถุ (ซึ่งแตกต่างจากระบบอื่น ๆ ที่ฉันเคยเห็น) Forth, Tcl, และ APL เป็นภาษาแปลก ๆ ที่ได้เห็นความสำเร็จและหนึ่งในนั้นจะดีเพื่อป้องกันนักเรียนจากความรู้สึกเหมือนเขาหรือเธอได้เรียนรู้มันทั้งหมด แอร์ลังจะดีสำหรับการทำงานพร้อมกัน


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

นี่คือรายการที่ดีงามฉันอาจจะกลับคำสั่งใน Haskell และ Prolog หากนักเรียนมีประสบการณ์ที่ไม่ดีโดยเฉพาะฉันจะล้มลงหกรายการชนและเริ่มด้วยสิ่งที่ง่ายกว่า
Orbling

4

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

คุณอาจต้องการพิจารณา 'ภาษา' ระดับสคริปต์ OS เช่น Batch, grep, awk ฯลฯ 'Make' อาจอยู่ในหมวดหมู่นี้

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

คุณอาจต้องการพูดถึง APL เพียงแค่จากจุดยืนทางประวัติศาสตร์ - หรือปล่อยให้มันพักผ่อนอย่างสงบสุข ตัวเลือกของคุณ.


1
เหตุผลที่ฉันไม่แนะนำ SQL ก็คือไม่ใช่ภาษาที่ใช้โดยทั่วไป ฉันอยากให้นักเรียนมีสิ่งที่เปิดเผยและเป็นเรื่องทั่วไปมากกว่าเช่น Prolog ภาษาสคริปต์ระดับ OS นั้นไม่มีอะไรที่ภาษาทั่วไปมากขึ้นเช่น Python หรือ Perl จะไม่ทำ ครั้งล่าสุดที่ฉันได้สัมผัสภาษาโคบอลมันไม่ได้เสนอแนวคิดที่คุณไม่สามารถทำได้ดีกว่าในภาษาอื่น ฉันชอบข้อเสนอแนะ APL ไม่มากสำหรับคุณค่าทางประวัติศาสตร์เนื่องจากเป็นภาษาที่แตกต่างกันมาก
David Thornley

@ David Thornley: ฉันยอมรับว่า SQL ไม่ใช่ภาษาวัตถุประสงค์ทั่วไป SQL มีแนวคิดเชิงตรรกะที่น่าสนใจและตั้งทฤษฎีว่าเป็นการดำเนินงานขั้นพื้นฐานที่ไม่ได้เกิดขึ้นในภาษาอื่น ๆ อีกมากมายเช่น union, join, group by, ฯลฯ ที่น่าสังเกตสำหรับทุกคนที่อาจต้องเผชิญกับฐานข้อมูล
oosterwal

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

2

ผมจะแนะนำแรกอ่านอีริค Raymonds "วิธีที่จะเป็นแฮ็กเกอร์" เพราะเขามีจุดที่น่าสนใจบางอย่างเกี่ยวกับวิธีการที่จะเริ่มต้นรวมทั้งเสียงกระเพื่อมซึ่งมี "รหัสเป็นข้อมูลและเป็นรหัส" ความคิด

สำหรับการเขียนโปรแกรมฉันขอแนะนำ Haskell, Prolog, SQL และภาษาแอสเซมบลี (บางอย่าง)

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


2

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

ที่สอง> เมื่อคุณเริ่มเรียนรู้คุณต้องการที่จะเริ่มต้นที่สูงและลงมือทำหรือไม่? หรือเริ่มต้นที่ต่ำและทำงานในแบบของคุณ การเรียนรู้ C # (ระดับสูง) นั้นแตกต่างจากการเรียนรู้การชุมนุม (ระดับต่ำ) มาก

ทางเลือกขนาดใหญ่จะขึ้นอยู่กับสิ่งที่คุณต้องการจะทำ การเขียนโปรแกรมควบคุมมักจะรวม C หรือ Assembly ... การเขียนโปรแกรมเว็บไซต์จะเป็น PHP, C #, asp, ฯลฯ ... คุณจะไม่ได้สัมผัสแอสเซมบลีสำหรับการเขียนโปรแกรมเว็บ ... ฯลฯ ...

เท่าที่เป็นพื้นฐาน ... เมื่อคุณตัดสินใจว่าคุณต้องการทำอะไรง่ายกว่าในการเลือกภาษา ยกตัวอย่างเช่นฉันได้กลายเป็นนักวิเคราะห์ข้อมูลที่โรงพยาบาล ดังนั้นภาษา "ทางเลือก" ของฉันคือ SQL / TSQL / DB2 สำหรับการเข้าถึงข้อมูล, C # WPF สำหรับไคลเอนต์ windows, Silverlight สำหรับเว็บไคลเอ็นต์, RPG / CL บางอย่างสำหรับตรรกะส่วนหลังของ IBM ...

โดยส่วนตัวฉันชอบหนังสือดี + สร้างโปรแกรมของคุณเองเพื่อฝึกฝนภาษา ฉันชอบ APress และชอบอ่าน C # 2008 ภาพประกอบเมื่อเรียนรู้ C # พวกเขามีหนังสือเล่มอื่น ๆ ที่ครอบคลุมพื้นฐานสำหรับผู้ที่ไม่ได้เรียนรู้เช่นเดียวกับผู้เชี่ยวชาญ


2

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

  • Smalltalk - นี่คือ OO ที่ดีที่สุดและการได้รับแสงอย่างง่ายจะเปิดตาของคุณในแบบที่ควรทำ ดีที่สุดในการเรียนรู้แนวคิด OO
  • Java หรือ C # - มอบแนวทางสถาปัตยกรรมและการวางแผนที่มากขึ้นให้กับ OO ในขณะที่แนะนำประเภทการตรวจสอบแบบคงที่
  • Ruby หรือ Python คุณไม่สามารถชื่นชมมันจนกว่าคุณจะรู้สึกว่า Java หรือ C #
  • Erlang - การทำงานพร้อมกันทำในลักษณะที่ทำให้ดูง่าย มันดีกว่าภาษา OO หรือ C ของคุณมาก
  • Lisp, Haskell หรือภาษาหน้าที่อื่น ๆ - มันเป็นแนวทางที่แตกต่างในการแก้ปัญหา
  • C - โดยการสร้างส่วนขยายเนทีฟสำหรับ Java หรือการใช้อัลกอริทึมระดับต่ำกว่านี้จะใกล้เคียงกับการชุมนุมเป็นคนต้องการจนกว่าพวกเขาจะเขียนคอมไพเลอร์

คุณอาจถามว่า "C ++ อยู่ที่ไหน" แล้ว X ล่ะ? จริงๆแล้วการเรียนรู้หลาย ๆ ภาษานั้นเป็นสองสิ่ง: มันเสริมสร้างประสบการณ์ของคุณและให้ไดรฟ์เพื่อเรียนรู้ภาษาเพิ่มเติม รายชื่อภาษาที่ฉันรู้จักดี (Java, C #, Ruby, C ++, Javascript) ล้วน แต่เป็นเชิงวัตถุ แต่ส่วนใหญ่เป็นเพราะนั่นคือสิ่งที่ฉันต้องทำทุกวัน รายชื่อภาษาที่ฉันสัมผัส (Smalltalk, Python, Erlang, JESS, C, Assembly [Motorola 6502/6510], Go) ได้สอนบทเรียนที่มีค่าให้ฉัน อย่างน้อยฉันก็สามารถเข้าใจสิ่งที่เกิดขึ้นกับภาษาเหล่านั้น มีหลายสิ่งที่ฉันไม่ได้สำรวจ แต่อาจเป็นไปได้มากในอนาคต มีภาษามาร์กอัปสองสามภาษาเช่นกัน: HTML, XSL: FO, XSLT, CSS, XML, SGML ที่ผู้คนต้องการได้รับหากพวกเขาจะทำงานกับเว็บในทางใดทางหนึ่ง

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


2

คำตอบส่วนใหญ่ดูเหมือนกันคร่าวๆดังนั้นฉันจะเสนอความเห็นที่ต่างออกไป ฉันเชื่อมานานแล้วว่าภาษาแรกที่ดีที่สุดคือ Tcl

ทำไม? สำหรับหนึ่งมันง่ายมากที่จะเรียนรู้ ไม่มีไวยากรณ์ในภาษามากนักดังนั้นนักเรียนสามารถมุ่งเน้นไปที่แนวคิดของการเขียนโปรแกรมมากขึ้นและน้อยลงเกี่ยวกับลักษณะทางไวยากรณ์ของภาษาเฉพาะ ในขณะที่เขียนนี้ Tcl มีกฎ 12 ข้อที่ควบคุมทั้งภาษา (เพิ่มจากสิบเอ็ดสองสามทศวรรษที่ผ่านมา)

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

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

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

เมื่อคุณเรียนรู้ Tcl และ C แล้วภาษาอื่น ๆ ส่วนใหญ่จะอยู่ที่ไหนสักแห่งระหว่างทั้งสองสุดขั้วและควรจะง่ายต่อการรับ รายการทั้งหมดของฉันกับสี่ฉันจะสอนหลังจาก Tcl และ C คือ:

  1. Tcl
  2. Python สำหรับแนวคิด OO รวมถึงพฤติกรรมการกำหนดบล็อกโดยการเยื้องเพื่อเปรียบเทียบกับภาษาอื่น
  3. Ruby - สำหรับคนที่แตกต่างกันใน OO รวมถึงทางรถไฟเพื่อเรียนรู้เกี่ยวกับกรอบ
  4. java - ใช้ได้ทุกที่คุณจำเป็นต้องรู้และต้องการเรียนรู้เกี่ยวกับ JVM
  5. groovy - วงกลมกลับไปเป็นภาษาแบบไดนามิก

1

ภาษาแอสเซมบลี, C, SQL, C #

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

  1. คุณไม่สามารถปลอมทางผ่านภาษาแอสเซมบลี; คุณได้รับมันหรือไม่ คอมไพเลอร์จะไม่บันทึกคุณไม่มีกรอบหรือค่าใช้จ่ายห้องสมุดและคุณไม่สามารถซ่อนจากสถาปัตยกรรมเครื่อง; มันเป็นโปรแกรมบริสุทธิ์ (ที่ระดับ add-two-numbers เริ่มต้น)

  2. หลังจากที่คุณเขียนโปรแกรมภาษาแอสเซมบลีสองสามตัวที่มีมากกว่าสองร้อยบรรทัดพอยน์เตอร์และการจัดการหน่วยความจำจะไม่ลึกลับอีกต่อไปและคุณควรเริ่มสังเกตเห็นรูปแบบในโค้ด (ถ้า, เปลี่ยน, อาร์เรย์, ลูปเป็นต้น) ) C นำรูปแบบเหล่านั้นออกสู่แสงแดดและให้แสงส่อง ไลบรารี่มาตรฐานมีประโยชน์โดยไม่ต้องใหญ่โต แต่อย่ากังวลกับมาโคร / เทมเพลต / ฯลฯ ที่เวทีนี้.

  3. ตอนนี้กระโดดลงในฐานข้อมูลด้วย SQL อย่าไปลงน้ำด้วยวิธีการที่เก็บไว้เพียงรับพื้นฐานของตารางและคิวรี

  4. หลังจากที่คุณเขียนโปรแกรม C สองสามตัวที่มีมากกว่าสองร้อยบรรทัดพอยน์เตอร์โครงสร้างและการจัดการหน่วยความจำนั้นมีลักษณะที่สองและโครงสร้างขั้นตอนเป็นเพื่อนเก่า คุณจะเริ่มสังเกตเห็นรูปแบบที่มีลำดับสูงกว่า: ฟังก์ชั่นเหล่านี้มักจะไปกับโครงสร้างข้อมูลนี้ส่วนของรหัสนี้ก็เหมือนกับส่วนของรหัสนั้นยกเว้นวิธี X, Y และ Z และอื่น ๆ เพิ่มความเข้าใจในข้อมูลเชิงสัมพันธ์ของคุณและตอนนี้คุณพร้อมสำหรับภาษาเชิงวัตถุ ด้วยกรอบขนาดใหญ่และเอกสารป้านโดยทั่วไป ยินดีต้อนรับสู่โลกแห่งความจริง! สำรวจ GUI เขียนแอปเดสก์ท็อปเขียนเว็บไซต์เขียนบริการเว็บเขียนสิ่งที่คุณต้องการ ไปหางานถ้าคุณเอนเอียง

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


1

คุณต้องการพื้นฐาน:

  1. รหัสเครื่อง
  2. ภาษาแอสเซมบลี
  3. เสียงกระเพื่อม

หลังจากนั้นอาจไม่เป็นไร


0

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

C, C ++, JAVA / C #, Python / Ruby, ภาษาอื่น ๆ (Assembly / Lisp / Prolog ฯลฯ )

  • ฉันไม่คิดว่าภาษาแรกจะต้องเป็นภาษาที่ง่ายที่สุด แต่ฉันคิดว่าควรให้ความคิดโดยรวมเกี่ยวกับวิธีการทำงานของคอมพิวเตอร์ทำให้เกิดสิ่งที่เป็นนามธรรม
  • การเปลี่ยนจาก C เป็น C ++ จะง่ายขึ้น จะมี OOP กระบวนทัศน์ที่ใช้มากที่สุดในทุกวันนี้
  • การเปลี่ยนจาก C ++ เป็น C # / Java จะง่ายขึ้น ฉันชอบ C # เพราะมันรวมกระบวนทัศน์จำนวนมากเช่นการเขียนโปรแกรมใช้งานได้
  • เมื่อมีคนมาที่ภาษาไดนามิกเช่น Python หรือ Ruby จะมี " WoW " มันจะง่ายกว่าที่จะรู้สึกถึงความงามของการพิมพ์แบบไดนามิก แต่การเรียนรู้ภาษาแบบไดนามิกก่อนและแบบคงที่ในภายหลังจะทำให้ " โอ้ทำไมฉันต้องเพิ่มสิ่งเหล่านี้? "
  • ตอนนี้กระบวนทัศน์และภาษาที่ใช้มากที่สุดเกือบเสร็จแล้ว ดังนั้นสำรวจสิ่งที่คุณต้องการ จากชุดประกอบไปยัง Lisp, Prolog หรือ Haskell และค้นพบบริบทใหม่ของคุณสมบัติของภาษาการเขียนโปรแกรมที่หลากหลาย

ที่นี่ C เป็นเพียงการเริ่มต้น
Gulshan

การตั้งค่าของ C # มากกว่า java ขึ้นอยู่กับปัจจัยหลายอย่างที่ฉันจะบอกว่าทั้งสองมีค่าเกือบเท่ากัน
prasonscala

0

Scheme, C, C ++

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

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

  2. C
    การย้ายจาก Scheme เป็น C เป็นสิ่งที่รุนแรงมาก แต่ให้คุณเรียนรู้เกี่ยวกับการทำแผนที่ภาษาระดับสูงเป็นภาษาระดับต่ำ การเรียนรู้รูปแบบหน่วยความจำ (พอยน์เตอร์ฮีปสแต็ค ฯลฯ ) และวิธีการรวบรวมและเรียกใช้โปรแกรมวิธีที่พอยน์เตอร์สแต็คและฮีปทำงานเป็นทักษะที่จำเป็น ด้วยความเข้าใจระดับต่ำนี้คุณสามารถเริ่มต้นวิเคราะห์โปรแกรมในระดับที่สูงขึ้น (Big O) คุณสามารถเริ่มต้นการแยกประเภทข้อมูลนามธรรมของคุณเล่นกับการใช้งานที่แตกต่างกัน (เช่นตารางแฮชธรรมดากับต้นไม้ไบนารีสำหรับชุด)

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

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

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


0

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

  • C - ตัวชี้และการจัดการหน่วยความจำ
  • C ++ - ข้อมูลพื้นฐาน OO และยังเป็นที่นิยมมาก
  • Java / C # - ภาษายอดนิยม
  • การประกอบขั้นพื้นฐานบางอย่าง
  • ฟังก์ชั่นภาษา - เช่น Haskell
  • ภาษาสคริปต์ - เช่น Python

0
  1. หลาม ในการทำสิ่งต่าง ๆ ให้ทำโปรแกรมธรรมดา ขั้นตอนการปฏิบัติงาน OO และ (ในขอบเขต) การทำงาน

  2. นิพจน์ทั่วไป พวกเขาอยู่ในห้องสมุด Python แต่เป็น DSL แยกต่างหาก

  3. เชลล์ (BASH หรืออะไรก็ตาม) The "&", "|", ";" ตัวดำเนินการสำหรับการรวมกระบวนการมีความสำคัญและไม่เป็นที่พอใจใน Python

  4. SQL นี่คือ - ตอนนี้ - ภาษากลางสำหรับการเข้าถึงข้อมูล

  5. XHTML นี่คือ - สำหรับตอนนี้ - ภาษากลางสำหรับการนำเสนอข้อมูล

  6. CSS

อาจจะ C ถ้ามันจำเป็น


ดูเหมือนว่าคุณจะเหลือเวที "การตรัสรู้ที่ลึกซึ้ง " ออกไป นั่นคือเลข 7 ใช่ไหม
Mark C

@ Mark C: เพียงพยายามปกปิด "ภาษาและกระบวนทัศน์ที่ใช้กันอย่างแพร่หลายส่วนใหญ่ในวันนี้" จากประสบการณ์ของฉันบางทีอาจมีการใช้ "อื่น ๆ " หรือ DSL มากกว่าภาษาโปรแกรม ฉันไม่แน่ใจว่าสิ่งนี้นำไปสู่การรู้แจ้งที่ลึกซึ้ง - เพียงแค่ได้สัมผัสกับหลายภาษาที่ใช้งานจริง
S.Lott

ถูกต้องฉันเห็นว่าเขาพูดอย่างนั้นแล้วฉันก็สังเกตเห็นว่าเขายังพูดว่า "หรือกระบวนทัศน์" มันเป็นเรื่องตลกที่ดี
ทำเครื่องหมาย C

@ Mark C: แต่ SQL และ CSS เป็น "กระบวนทัศน์อื่น ๆ " ที่น่าสนใจที่สุด อันที่จริงการแสดงออกปกติเป็นกระบวนทัศน์ที่ทำให้เกิดคำถามมากมายเกี่ยวกับ Stack Overflow
S.Lott

0

เริ่มใกล้กับโลหะ:

  1. ผู้ประกอบ
  2. C ++
  3. ค#
  4. เสียงกระเพื่อม
  5. Python หรือ Ruby

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

  1. ผู้ประกอบ: 3 เดือน
  2. C: 6 เดือน
  3. C ++: 2 ปี
  4. C #: 6 เดือน
  5. ชัด: 3 เดือน
  6. Python / Ruby: 3 เดือน

นอกจากว่าคุณตั้งใจจะสอนพวกเขาว่า "สวัสดีชาวโลก" ซึ่งน่าจะใช้เวลาประมาณหนึ่งเดือนสำหรับทั้ง 6 คน


-1

ทำไมไม่ลองเข้าไปดูและเรียนรู้ VB หรือ C # ทั้งความเห็นของฉันเป็นภาษาที่สมบูรณ์ตั้งแต่เริ่มต้นจนถึงขั้นสูง imho


4
เพราะนั่นไม่ใช่ความกว้างใด ๆ ดังนั้นจึงไม่ใช่คำตอบสำหรับคำถาม ยิ่งกว่านั้นถ้าคุณคิดว่าหนึ่ง (หรือทั้งสองอย่าง) ครอบคลุมเนื้อหาทุกอย่างที่คุณควรเรียนรู้คุณต้องเรียนรู้ภาษามากขึ้น
David Thornley
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.