ภาษาโปรแกรมที่พัฒนาทักษะการเขียนโปรแกรมโดยทั่วไปของคุณ? [ปิด]


27

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


12
ไม่ใช่คนเดียว ค่อนข้าง: ให้มากที่สุดเท่าที่จะเป็นไปได้แต่ละอันจะต่างจากผู้อื่นมากที่สุด

คำตอบ:


27

สำหรับการเขียนโปรแกรมและอัลกอริทึม "ปกติ":

  • หลามดีในการเรียนรู้ใช้งานง่ายอ่านง่าย
  • C ++ สอนให้คุณรู้ว่าคอมพิวเตอร์เป็นอย่างไร

สำหรับประสบการณ์ที่เปลี่ยนความคิด:

  • Haskell
  • อารัมภบท

สำหรับการทำลายจิตใจของคุณและข้ามเส้นแบ่งระหว่าง padawan และ Jedi Master:

  • LISP สามัญ

3
ใช่เห็นด้วยกับ chrisaycock, C และแอสเซมบลีจะสอนคุณว่าคอมพิวเตอร์จริง ๆ คือ C ++ เป็นขั้นตอนเล็กน้อยมากขึ้นไป แต่คุณจะยังคงจัดการกับปัญหาเช่นตัวชี้หน่วยความจำและปัญหาที่มีประสิทธิภาพสูง
Lacrymology

MH Prolog นั้นยอดเยี่ยม แต่ฉันล้มเหลวที่จะเห็นว่ามันน่าสนใจสำหรับการพัฒนาทักษะการเขียนโปรแกรมทั่วไป ฉันเห็นว่ามันเป็นระบบสัญกรณ์คณิตศาสตร์ / ตรรกะทางเลือกซึ่งมีโครงสร้างที่คุณสามารถสืบค้นได้มากกว่าภาษาการเขียนโปรแกรม (อธิบายถึง stati ไม่ใช่โพรซีเดอร์) แก้ไข: แน่นอนว่าจะเปลี่ยนวิธีที่คุณคิดเกี่ยวกับบางสิ่งบางอย่าง แต่สิ่งที่ไม่ได้เขียนโปรแกรม
cbrandolino

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

3
Prolog เป็นภาษาที่รู้จักกันดีที่สุดของกระบวนทัศน์เชิงตรรกะ มันเป็นสิ่งสำคัญที่จะทำให้จิตใจของคุณโค้งในทุกกระบวนทัศน์ที่คุณสามารถจัดการได้หากสิ่งที่คุณต้องการคือการพัฒนาให้ดีขึ้นในฐานะโปรแกรมเมอร์มันจะช่วยให้คุณมีความว่องไวทางจิตใจและมันจะให้เครื่องมือใหม่แก่คุณ ฉันเดาภาษา Lisp ใด ๆ ที่จะทำสิ่งที่ฉันเห็นใน Common LISP คือมันดูเหมือนว่า Lisp ที่ใช้งานได้ดีที่สุดสำหรับฉัน
Lacrymology

1
ฉันจะลงคะแนนให้ Scheme มากกว่า Common LISP - ฉันคิดว่ามันขึ้นอยู่กับว่าคุณคิดว่าคุณจะใช้ Lisp ในการผลิตจริงหรือไม่ ถ้าไม่ใช่ให้ไปที่ Scheme
Skilldrick

13

อย่าลืมJavascript

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

และมันใช้งานได้จริงเพราะเบราว์เซอร์ที่จริงจังทุกตัวมี

(แน่นอนว่ามันมีนิสัยใจคอที่ไม่เป็นที่พอใจด้วยเช่นกันบางภาษาที่ใช้งานไม่ได้)


1
JS มีคุณสมบัติ OO ที่ Java ไม่มีหรือไม่
Mahmoud Hossam

3
@Phobia: JS ทำ OO ด้วยวิธีที่ต่างออกไปโดยสิ้นเชิง ไม่มีคลาส การสืบทอดจะทำผ่านต้นแบบ - โดยพื้นฐานแล้ววัตถุสามารถสืบทอดจากวัตถุอื่นได้ ฟังก์ชั่นเป็นค่าชั้นหนึ่ง; คุณไม่เพียง แต่สามารถผ่านมันไปได้ แต่คุณสามารถกำหนดวิธีการใหม่ให้กับวัตถุที่มีอยู่ได้อย่างง่ายดาย วิธีที่ JS ทำการซ่อนข้อมูลนั้นค่อนข้างแตกต่างจาก Java: ทุกอย่างที่วัตถุเปิดเผยเป็นสาธารณะดังนั้นคุณจึงซ่อนข้อมูลและวิธีการโดยใช้การปิด โปรดทราบว่าไม่มี 'canonical OO'; JS ค่อนข้างใกล้เคียงกับ 'OO' ดั้งเดิม 'ที่ Smalltalk คิดค้นกว่าเช่น C ++ แต่ OO ของ Java ก็เป็น' canonical 'ด้วยเช่นกัน
9000

11

Cและแอสเซมบลีสำหรับวิธีการทำงานของคอมพิวเตอร์

HaskellและLISPสำหรับการเขียนโปรแกรมใช้งานได้

APLสำหรับการเขียนโปรแกรมเวกเตอร์และตัวย่อ

ทุบตีหรือtcshสำหรับวิธีการจัดการคอมพิวเตอร์โดยทางโปรแกรม


4
แทนที่จะใช้ APL คุณสามารถใช้ J โดยผู้เขียนคนเดียวกัน
9000

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

9

ฉันอยากจะแนะนำ Scheme

มันเป็นภาษาที่ใช้งานได้จริง (ส่วนใหญ่คิดว่าเป็นภาษาถิ่น) จาก Lisp ความแตกต่างสำคัญกับ Common เสียงกระเพื่อมเป็นวิธีการของมันคือความเรียบง่ายมาก - มากดังนั้น ตัวอย่างเช่นในการแจกแจงแบบปกติของ Scheme (รูปแบบใด ๆ <R5 หรือ Mit / GNU / Scheme) คุณจะไม่พบการใช้งานแบบวนซ้ำ: คุณจะต้องทำด้วยตัวเองโดยใช้การเรียกซ้ำแบบหาง

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

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

นี่คือบทเรียนวิดีโอบางส่วนที่ฉันหวังว่าจะทำให้คุณสนใจในภาษาที่น่าสนใจนี้ทันที - ผู้บรรยายเป็นผู้เขียน SICP: http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman- บรรยาย /


ขอขอบคุณ. ฉันต้องเตือนคุณว่าบทเรียนนั้นง่ายที่จะทำให้โปรแกรมเมอร์ที่มีความปรารถนาจะหลั่งน้ำตา
cbrandolino

@cbrandolino - จริงแล้วคลาสโปรแกรมการทำงานของเราทำให้ผู้คนจำนวนมากออกจากโปรแกรมวิทยาศาสตร์คอมพิวเตอร์
jmort253

1
Scheme นั้นเรียบง่าย แต่ใน R5 มันเพิ่มหูดบางตัวและใน R6 มันมีขนาดใหญ่มาก มันน่าเสียดายเพราะมันสวยมาก สำหรับภาษาที่เรียบง่าย แต่ยังใช้งานได้จริงให้ตรวจสอบ Lua
Javier

@ จาเวียร์คุณพูดถูก ฉันจะแก้ไขคำตอบเพื่อระบุการใช้งาน
cbrandolino

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

4

LISP ควรมีโครงการร่วมกับ "โครงสร้างและการตีความโปรแกรมคอมพิวเตอร์" ของ Abelson & Sussman จะสอนให้คุณคิดในแง่อื่นนอกเหนือจากที่กำหนดโดย C / C ++

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


4

Java เป็นหนึ่งในภาษาที่สอนมากที่สุดในมหาวิทยาลัยทั่วโลกและมีเหตุผลสำหรับมัน แม้ว่ามันจะเป็นเหมือนไดโนเสาร์ แต่ก็ให้ภาพรวมที่ดีมากเกี่ยวกับแนวคิดของการเขียนโปรแกรมที่ทันสมัย มันไม่ได้แสดงให้คุณเห็นว่าคอมพิวเตอร์ทำงานอย่างไรเช่น Assembler หรือแม้กระทั่งภาษานามธรรมที่มีอยู่แล้วมากยิ่งขึ้น C แต่นักบินจะต้องสามารถบินได้และไม่สามารถสร้างเครื่องบินด้วยตัวเอง - ไปเรียนรู้ JAVA เป็นพื้นฐานที่ดีสำหรับรหัสใด ๆ ที่คุณจะเขียนใน (สำหรับ reson) ภาษาที่พบบ่อยที่สุดในปัจจุบัน: Java, c ++, php, c #, ruby ​​(บนราง) python และอื่น ๆ ...

สูงสุด


3

C # 3 พร้อม LINQ

มันเป็นคำแนะนำที่ดีสำหรับการเขียนโปรแกรมการใช้งาน

ลองเขียนโปรแกรม (หรือแก้ Project Euler) และแทนที่ลูปให้มากที่สุดเท่าที่จะทำได้ด้วยการเรียก LINQ
ช่วยหนึ่งต้นแบบแนวคิดของการเขียนโปรแกรมการทำงานและการประเมินผลขี้เกียจ

จากจุดนี้เราสามารถไปยัง F # ได้


3

มือฉันพูด Haskell และด้วยเหตุผลสองประการ:

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

3

ฉันอยากจะแนะนำ Scala ถ้ามีใครมาจากโลก C / Java

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

ดังนั้นหากคุณคุ้นเคยกับ OO สกาล่าใช้คำศัพท์ที่คุณรู้เพื่ออธิบายโลกที่ใช้งานได้

ฉันพบว่ามันง่ายกว่าสำหรับฉันที่จะเข้าใจการเขียนโปรแกรมฟังก์ชั่นใน Scala มากกว่าดำดิ่งลงในการเขียนโปรแกรมที่ใช้งานได้มากกว่าเช่น Haskell, List ... ฯลฯ


2

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

  • C ++ (ใช้งานไม่ได้ แต่มีแนวคิดอย่างเช่นพอยน์เตอร์และการจัดการหน่วยความจำที่มีค่า)
  • ดร. โครงการ
  • ML / Ocaml (เราเขียนภาษาอื่นโดยใช้ ML / Ocaml!)
  • จาวาสคริปต์ (ฟังก์ชั่นภาษาที่ดึงดูดความสนใจในอุตสาหกรรมทั้งฝั่งไคลเอ็นต์และฝั่งเซิร์ฟเวอร์)

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


1

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


1

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

บางภาษาได้รับอิทธิพลอย่างมากจากทฤษฎีหมวดหมู่เช่นocamlและHaskellและบางภาษาเป็นสายพันธุ์ข้ามเช่นCurry (หน้าที่และตรรกะ) แกงกะหรี่น่าจะเป็นภาษาที่น่าเหลือเชื่อที่สุดที่ฉันรู้จักไม่ใช่แค่เพราะมันทำให้จิตใจของ Haskell เต็มไปด้วยการเขียนโปรแกรมเชิงตรรกะ แต่ยังเป็นเพราะการรวมเข้ากับการเขียนโปรแกรมตามข้อ จำกัด

ภาษาที่สนุกก็คือสาธารณรัฐโคลัมเบีย-ปี่ตั้งแต่มันเป็นไปอย่างหนักในการทำงานพร้อมกัน แต่ยังเพราะล่าสุดพอร์ต Arduino


1

โปรแกรมเมอร์ที่มีความโค้งมนมีลูกเล่นหลาย ๆ อย่างที่อยู่บนแขนเสื้อของเขาและเธอเหล่านี้รวมถึง:

  • การประกอบเพื่อการเรียนรู้วิธีการทำงานของคอมพิวเตอร์
  • ภาษาขั้นตอนเช่น C หรือ Pascal
  • ภาษาที่ใช้งานได้เช่น Scheme
  • ภาษา OOP เช่น Squeak

สิ่งเหล่านี้สอนวิธีคิดและแนวทางปัญหาที่แตกต่างกันเล็กน้อย


0

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

ตัวอย่างเช่นสมมุติ c #

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

และอย่างที่สองอย่าใช้เวลากับภาษาแปลกใหม่ (เช่น Haskel) การพูดแบบ บริษัท มีโปรแกรมที่คุ้มค่ากับความพยายามของคุณ: java (ราชาแห่งขุนเขา), c # / vb.net, php และ sql


0

มีโปรแกรมที่ง่ายมากสำหรับการเขียน Java Applets ที่เรียกว่าการประมวลผล

ภาษานี้จะให้ความเข้าใจพื้นฐานเกี่ยวกับตัวแปรลูปและสิ่งต่างๆนั้นถ้าคุณเพิ่งเริ่มต้น


0

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

การชุมนุมเป็นเรื่องสนุกถ้าคุณต้องการขุดในระดับที่ต่ำกว่านั้น แต่อย่าคาดหวังว่าจะได้ทำอะไรมากมาย :)


0

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

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