หากมีการเรียนรู้ภาษาการเขียนโปรแกรมใหม่ในแต่ละปีรายการควรเป็นอย่างไร [ปิด]


19

ในบทที่หนึ่งของ"The Pragmatic Programmer"เป้าหมายการเรียนรู้แรกคือ:

เรียนรู้ภาษาใหม่อย่างน้อยหนึ่งภาษาทุกปี ภาษาที่ต่างกันแก้ปัญหาเดียวกันด้วยวิธีที่ต่างกัน โดยการเรียนรู้วิธีการต่าง ๆ คุณสามารถช่วยขยายความคิดของคุณและหลีกเลี่ยงการทะเลาะในร่อง [ ... ]

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

แต่เมื่อเรียนรู้ส่วนย่อยที่สมเหตุสมผลของรายการแล้วสิ่งต่อไปคืออะไรและเพราะเหตุใด


3
ในคำตอบนี้ฉันเขียนกระบวนทัศน์ทางภาษาบางอย่างที่สามารถศึกษาเพื่อขยายความสามารถของคุณ ฉันจะเริ่มต้นด้วยการพยายามเรียนรู้กระบวนทัศน์ทั้งหมดเหล่านี้ (แทนที่จะมุ่งเน้นไปที่ภาษา) ดังนั้นทำเครื่องหมายเลือกภาษาที่คุณใช้ในปัจจุบันจากนั้นเลือกภาษาที่มีความแตกต่างจากสิ่งที่คุณคุ้นเคย มีจุดเริ่มต้นไม่มากนักใน C # จากนั้น Java พยายามกระจายความหลากหลายมากขึ้นในตอนแรก เมื่อคุณครอบคลุมประเภทพื้นฐานทั้งหมดแล้วคุณสามารถเลือกภาษาทั่วไปอื่น ๆ
Simon P Stevens

@Simon: ทำไมไม่ตอบคำถามนี้ที่นี่?
ริชาร์ด

1
คุณจะได้เรียนรู้มากมายจาก Java ไปยัง C # แต่จะไม่ไปทางอื่นมากนัก
Casebash

@ Richard ฉันไม่คิดว่ามันจะเป็นคำตอบที่สมบูรณ์ฉันแค่บอกคุณถึงสิ่งที่เกี่ยวข้องที่ฉันเขียนที่อื่น
Simon P Stevens

1
คนส่วนใหญ่ที่เรียนภาษาปีละครั้งจะเป็น "แจ็คของการซื้อขายทั้งหมด แต่เป็นผู้เชี่ยวชาญที่ไม่มี" จนกว่าคุณจะมุ่งเน้นไปที่ไม่กี่ปีที่ผ่านมา ฉันเชื่อว่าจากประสบการณ์มากมายที่ความคิดของโปรแกรมเมอร์ 'เต็มสแต็ค' นั้นเป็นเท็จยกเว้น 1% - 5% ของนักพัฒนา คนแบ็คเอนด์ฮาร์ดคอร์ส่วนใหญ่ที่ฉันรู้ว่าไม่มีทักษะการใช้ front-end ที่ดีและในทางกลับกัน
junky

คำตอบ:


19

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


7
ฉันขอลายเซ็นของคุณได้ไหม :-)
Christian Davén

1
+1 คำตอบที่ยอดเยี่ยมแม้ว่ามันอาจจะเป็นวิธีที่ตลกขบขัน
Joe D

1
@ Joe D ไม่ได้มีความหมายในลักษณะที่ตลกขบขันอย่างสิ้นเชิง หากคุณสามารถทำสิ่งนี้ได้คุณเชี่ยวชาญทุกซอกทุกมุม
ทางเลือก

-1 เพราะไม่ได้หมายความว่ามันจะมีอารมณ์ขันอย่างสิ้นเชิง (เช่นเราไม่มีภาษาที่ถูกทอดทิ้งกึ่งหนึ่ง / การนำไปใช้งานวางรอบ)
ZJR

2
@ZJR ดังนั้น 99% อารมณ์ขัน 1% อารมณ์ขันไม่เลวใช่ไหม Cmon นอกจากนี้ทำไมคุณถึงลงคำตอบตามความคิดเห็น
ทางเลือก

13

คุณควรเพิ่ม "ความเกี่ยวข้องกับส่วนต่าง" ให้มากที่สุดนั่นคือเพิ่มโอกาสในด้านใหม่ ๆ ที่คุณยังไม่แข็งแกร่ง แตกต่างกันไปทั้งการเขียนโปรแกรมภาษาและแนวคิด หากคุณไม่รู้จักภาษาเชิงวัตถุใด ๆ ให้ลองใช้ Java และกรอบงานที่เป็นนามธรรมสูงเช่น Hibernate จากนั้นเขียนข้อมูลการดูแลระบบบางอย่างในภาษาสคริปต์เช่น Python หรือ Perl จากนั้นเลือกทักษะระดับต่ำใน C หรือ C ++ เขียนโค้ดเซิร์ฟเวอร์แบบมัลติเธรดประสิทธิภาพสูง หากคุณไม่รู้จักการเขียนโปรแกรมที่ใช้งานได้ให้ลองใช้ Haskell กับปัญหาทฤษฎีกราฟบางอย่างเช่นการแก้ Peg Solitaireและอื่น ๆ เป็นไปได้มากที่จะทำเพื่อทุกสิ่งที่คุณเรียนรู้จะมีมูลค่าทางการตลาดทันทีจนกว่าคุณจะหลงผิด เป็นความปลอดภัยของวัตถุความสามารถ ,เปิดฉากหรือVHDL

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


9

ภาษาที่ไม่ส่งผลกระทบต่อวิธีที่คุณคิดเกี่ยวกับการเขียนโปรแกรมไม่คุ้มค่าที่จะรู้ - Alan Perlis

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

กระบวนทัศน์เหล่านี้คืออะไร? ขั้นสูงหนังสือแนวคิดเทคนิคและรูปแบบของการเขียนโปรแกรมคอมพิวเตอร์ให้ดีภาพรวมกับแผนที่แบบกราฟิก

ดังนั้นหากคุณรู้จักภาษา C-like เท่านั้นการเรียนรู้ Scheme / Lisp นั้นมีประโยชน์อย่างมาก หากคุณรู้ภาษาที่จำเป็นและมีประโยชน์อยู่แล้วการเรียนรู้ภาษาอารัมภบทจะเป็นประโยชน์และอื่น ๆ

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

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


และภาษามีผลต่อความคิดของคุณไม่มากนักกับสิ่งที่มันช่วยให้คุณสามารถแสดงออกได้ แต่มากขึ้นโดยสิ่งที่มันบังคับให้คุณแสดงออก
Florian F

9

C - เป็นสิ่งจำเป็น "รองรับทุกอย่าง" ภาษาการเขียนโปรแกรมระบบ

Lisp (Scheme) - ภาษา ur ที่แปลก แต่ทรงพลังอย่างเหลือเชื่อที่แฮ็กเกอร์ผู้ยิ่งใหญ่คิดว่าเจ๋ง

Smalltalk - เพราะนี่คือสิ่งที่ OO ตั้งใจให้เป็น

Erlang (หรือภาษานักแสดงอื่น ๆ ) เพื่อทำความเข้าใจกับนักแสดง

Haskell - เข้าใจ Monads

Javascript - เพราะทุกที่และจำเป็นสำหรับการเขียนสคริปต์เบราว์เซอร์

หนึ่งใน Python / Ruby / Perl (แต่มันไม่สำคัญว่าอะไร) - ดังนั้นคุณจะรู้ว่าภาษาสคริปต์ที่เป็นที่นิยมทันสมัยและทันสมัยพร้อมการสนับสนุนห้องสมุดที่ดีรู้สึกอย่างไร

SQL - เพื่อให้คุณสามารถพูดคุยกับฐานข้อมูลเชิงสัมพันธ์

อารัมภบท - เพราะคุณยังต้องทำให้ใจ


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

ไม่ว่าคุณจะเรียนรู้ Perl, Python หรือ Ruby แน่นอน ยกตัวอย่างเช่น Python มี list comprehensions ซึ่งไม่มีอยู่ใน Ruby และ Ruby มีโมดูลซึ่งไม่มีอยู่ใน Python คุณสามารถทำซ้ำผลลัพธ์ของทั้งสองสิ่งในภาษาใดภาษาหนึ่ง แต่การเรียนรู้อย่างใดอย่างหนึ่งจะมีผลต่อความคิดของคุณในวิธีที่แตกต่างกันมาก
philosodad

1
อารัมภบท - เพราะคุณยังต้องทำให้ใจคุณ - ความคิดเห็นที่ดีที่สุดตลอดกาล +1
Zachary K

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

4
  • ไป (ภาษาการเขียนโปรแกรมระดับระบบใหม่พร้อมการสนับสนุนที่ดีสำหรับการทำงานพร้อมกันและแนวคิดที่ไม่เป็นแบบดั้งเดิม)
  • Lua (ภาษาสคริปต์เรียบง่ายแสดงออกมีความยืดหยุ่นสูงและมีความสมดุลอย่างจำเป็นการทำงานและการเขียนโปรแกรมเมตาดาต้าอนุญาต OOP)
  • D (C / C ++ ถูกต้องแล้ว)
  • Groovy (การเขียนโปรแกรมอย่างรวดเร็วและเมตาในโลก Java
  • ไอเฟล (ออกแบบโดยสัญญาและแนวทางที่แตกต่างสำหรับ OOP)
  • Prolog (ภาษาการเขียนโปรแกรมแบบลอจิก)

1
ทำไมบางคนควรเรียนรู้สิ่งเหล่านี้ ( สาเหตุที่เป็นบิตที่น่าสนใจที่นี่มีภาษาการเขียนโปรแกรมที่ไม่ซ้ำกันอย่างแท้จริงคือ: กระบวนทัศน์ทุกคนได้รับการดำเนินการมากกว่าหนึ่งครั้ง)
Richard

ที่น่าสนใจที่จะเห็นว่าคุณคิดDคือCทำถูกต้อง โดยส่วนตัวเมื่อฉันใช้ C ฉันมักจะใช้มันสำหรับบางสิ่งในระดับต่ำซึ่งฉันไม่ต้องการ abstractions OOP เลย
Jonas

@ โจนัส: เรายังคงต้องการภาษาที่เรียบง่ายถูกต้องในขณะที่ภาษานี้ไม่ได้มา D สามารถใช้งานได้ดีในรูปแบบที่จำเป็น สำหรับคุณแล้ว D2 มีฟังก์ชั่นให้ใช้งานได้มากกว่าเมื่อเสร็จแล้วอาจจะเป็นการใช้กระบวนทัศน์ที่ดีที่สุดกับภาษาที่จำเป็นที่สุด
Maniero

ทำถูกต้องเป็นอัตนัย สำหรับฉันErlangเป็นภาษาที่เล็กและเรียบง่ายทำถูกต้อง ส่วนที่ขาดหายไปเป็นกรอบ GUI ที่ยอดเยี่ยมและหากคุณทำระบบที่ซับซ้อนบางทีคุณอาจต้องการภาษาที่พิมพ์ได้มากกว่านี้
Jonas

@ Jonas: Erlang เป็นภาษาที่ดี แต่มันไม่ใช่ C / C ++ ที่ถูกต้องมันต่างกันโดยสิ้นเชิง
Maniero

2

1) Prolog: มันแตกต่างอย่างสิ้นเชิงกับภาษาที่จำเป็นทั้งหมดที่คุณใช้มาจนถึงตอนนี้และมันจะเปลี่ยนวิธีที่คุณคิดเกี่ยวกับปัญหา

2) เสียงกระเพื่อม: ถ้าไม่มีมันคุณก็อาจจะใช้ Vi

3) Erlang: อีกครั้งมันแตกต่างอย่างสิ้นเชิงเหมือนกันมันดูค่อนข้างทันสมัย

4) บางอย่างจาก Turing Tarpit (เช่น Brainfuck) และอาจเขียนคอมไพเลอร์หรือล่ามสำหรับมัน: ฉันไม่สามารถคิดเหตุผลที่จะทำสิ่งนี้ แต่รู้สึกว่าเป็นความคิดที่ดี


1
"หากไม่มีคุณก็อาจใช้ Vi" ฉันประหลาดใจที่ไม่มีใครเลือกที่ :) :)
Gauthier

ฉันใช้ vi! (gvim ดี)
Zachary K

1

นอกจากสิ่งที่คุณระบุไว้

Haskell, F #, Clojure, OCaml, Lua, Go, D, Erlang, วัตถุประสงค์ C.


1

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

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