Các ngôn ngữ quan trọng để học để hiểu các cách tiếp cận và khái niệm khác nhau là gì? [đóng cửa]


172

Khi tất cả những gì bạn có là một cặp dao cắt chốt và một chai vodka, mọi thứ trông giống như khóa trên cánh cửa của nhà thuyền của Wolf Blitzer. (Thay thế nó bằng búa và đinh nếu bạn không đọc xkcd)

Tôi hiện đang lập trình Clojure, Python, Java và PHP, vì vậy tôi quen thuộc với cú pháp C và LISP cũng như điều khoảng trắng. Tôi biết hệ thống cấp bách, chức năng, bất biến, OOP và một vài loại và những thứ khác. Bây giờ tôi muốn nhiều hơn nữa!

Các ngôn ngữ có một cách tiếp cận khác nhau và sẽ hữu ích cho việc lựa chọn công cụ thực tế hoặc hiểu biết lý thuyết là gì?

Tôi không cảm thấy muốn học một ngôn ngữ chức năng khác (Haskell) hoặc một ngôn ngữ OOP bắt buộc khác (Ruby), tôi cũng không muốn thực hành các ngôn ngữ vui nhộn không thực tế như Brainfuck.

Một điều rất thú vị tôi thấy mình là các ngôn ngữ dựa trên ngăn xếp đơn âm như Factor.

Chỉ khi tôi cảm thấy tôi hiểu hầu hết các khái niệm và có câu trả lời cho tất cả các câu hỏi của mình, tôi mới muốn bắt đầu suy nghĩ về ngôn ngữ đồ chơi của riêng mình để chứa tất cả các sở thích cá nhân của tôi.


3
Tôi chỉ +1 cho tham chiếu xkcd, nhưng câu hỏi cũng thú vị.

63
Bạn dường như là một lập trình viên thành công, phần còn lại là gia tăng. Không cố gắng trở thành một người tinh ranh, nhưng ... làm thế nào là cuộc sống của bạn tài chính khôn ngoan, mối quan hệ khôn ngoan, sức khỏe khôn ngoan, vui vẻ khôn ngoan, sở thích khôn ngoan? Có lẽ bây giờ là thời gian để theo đuổi một số trong những điều đó. Tôi không tin rằng bạn cần biết hơn một tá ngôn ngữ cùng một lúc. Nếu bạn được trả tiền để sử dụng một - tìm hiểu nó. Nếu bạn muốn viết một cuốn sách về một - hãy tìm hiểu nó. Khác hơn là bạn có một cơ sở lập trình tốt. Tại sao học một cái gì đó (như J - ý kiến ​​phụ của tôi :)) mà bạn sẽ không nghiêm túc (đọc make $) sử dụng ở bất cứ đâu? Đừng là hacker tuyệt vời nhất tại một nghĩa trang.
Hamish Grubijan

6
Vâng, tôi là một lập trình viên thành công theo tiêu chuẩn của riêng tôi. Hiện tại tôi không kiếm được nhiều tiền, nhưng này, tôi 19. Tôi đầu tư thời gian vào tất cả những điểm đó và hơn thế nữa, nhưng tôi thấy cả sở thích và niềm vui trong lập trình. Tôi cũng muốn nói rằng có một sự khác biệt giữa việc hiểu một ngôn ngữ và thông thạo nó. Nắm vững Python và Clojure là đủ cho tôi. Tôi thực sự muốn hiểu các tùy chọn khác, bởi vì nó sẽ cải thiện mã của tôi, giúp tôi hiểu máy tính của mình và giúp tôi xác định ngôn ngữ lập trình của riêng mình.
Pepijn

5
Bạn đã thấy lập trình viên.SE ? Điều này rơi vào loại câu hỏi tốt hơn hỏi ở đó.

Câu trả lời:


287

Các vấn đề thực tiễn rất chủ quan, vì vậy tôi sẽ nói đơn giản rằng việc học các mô hình ngôn ngữ khác nhau sẽ chỉ phục vụ để giúp bạn trở thành một lập trình viên tốt hơn. Còn gì thiết thực hơn thế nữa?

Chức năng, Haskell - Tôi biết bạn nói rằng bạn không muốn, nhưng bạn thực sự nên xem xét lại. Bạn đã có một số tiếp xúc chức năng với Clojure và thậm chí cả Python, nhưng bạn chưa trải nghiệm nó hết mức mà không có Haskell. Nếu bạn thực sự chống lại Haskell thì thỏa hiệp tốt là ML hoặc OCaml.

Tuyên bố, Datalog - Nhiều người muốn giới thiệu Prolog trong vị trí này, nhưng tôi nghĩ Datalog là một ví dụ rõ ràng hơn về ngôn ngữ khai báo.

Mảng, J - Tôi mới chỉ phát hiện ra J, nhưng tôi thấy đó là một ngôn ngữ tuyệt đẹp. Nó sẽ xoắn tâm trí của bạn thành một bánh quy cây. Bạn sẽ cảm ơn J vì điều đó.

Stack, Factor / Forth - Factor rất mạnh và tôi dự định đào sâu vào nó càng sớm càng tốt. Forth là cha đẻ của các ngôn ngữ Stack, và như một phần thưởng bổ sung, thật đơn giản để tự thực hiện . Có một cái gì đó để nói về việc học thông qua thực hiện.

Dataflow, Oz - Tôi nghĩ rằng ảnh hưởng của Oz đang tăng lên và sẽ chỉ tiếp tục phát triển trong tương lai.

Dựa trên nguyên mẫu, JavaScript / Io / Self - Self là ông bố và có ảnh hưởng lớn trên mọi ngôn ngữ dựa trên nguyên mẫu. Điều này không giống với OOP dựa trên lớp và không nên đối xử như vậy. Nhiều người tìm đến một ngôn ngữ nguyên mẫu và tạo ra một hệ thống lớp đặc biệt, nhưng nếu mục tiêu của bạn là mở rộng tâm trí của bạn, thì tôi nghĩ đó là một sai lầm. Sử dụng ngôn ngữ đến hết khả năng của nó. Đọc các chương trình tổ chức mà không có lớp học cho ý tưởng.

Expert System, CLIPS - Tôi luôn khuyến nghị điều này. Nếu bạn biết Prolog thì có khả năng bạn sẽ có được ưu thế trong việc tăng tốc, nhưng đó là một ngôn ngữ rất khác.

Frink - Frink là ngôn ngữ có mục đích chung, nhưng nó nổi tiếng với hệ thống chuyển đổi đơn vị. Tôi thấy ngôn ngữ này rất truyền cảm hứng trong nỗ lực không ngừng của nó để trở thành tốt nhất trong những gì nó làm. Thêm vào đó ... nó thực sự rất thú vị!

Chức năng + Loại tùy chọn, Qi - Bạn nói rằng bạn đã trải nghiệm với một số hệ thống loại, nhưng bạn có kinh nghiệm với hệ thống loại "skinnable * không? Không ai có ... nhưng họ nên như vậy. Qi giống như Lisp theo nhiều cách, nhưng nó loại hệ thống sẽ thổi tâm trí của bạn.

Các diễn viên + Khả năng chịu lỗi, Erlang - Mô hình quy trình của Erlang gây nhiều tiếng vang, nhưng các cơ chế hoán đổi lỗi và mã nóng của nó đang thay đổi trò chơi. Bạn sẽ không tìm hiểu nhiều về FP mà bạn sẽ không học với Clojure, nhưng các tính năng FT của nó sẽ khiến bạn tự hỏi tại sao nhiều ngôn ngữ dường như không thể hiểu đúng.

Thưởng thức!


8
+1 - một câu trả lời tuyệt vời.
duffymo

2
Cảm ơn bạn đã chỉ cho tôi rất nhiều ngôn ngữ để học.

2
Tôi sẽ thêm Erlang cho lập trình dựa trên diễn viên và Pháo đài cho công cụ Lập trình song song.
nickik

2
+1 cho khả năng trao đổi nóng và nhận diện lỗi của Erlang
Mic

14
Không lắp ráp? Thật tốt khi hiểu về cách các bộ xử lý làm việc để tìm hiểu loại mã họ thích.
Nick T

33

Thế còn Prolog (để hợp nhất / quay lui, v.v.), Smalltalk (cho "mọi thứ là một thông điệp"), Forth (đánh bóng ngược, phiên dịch luồng, v.v.), Scheme (tiếp tục)?

Không phải là một ngôn ngữ, nhưng Nghệ thuật của Giao thức Metaobject là thứ linh tinh


Sửa lỗi cho tôi nếu tôi sai, nhưng tôi nghĩ Python sortof đã tiếp tục. Và từ những gì tôi đã đọc, tôi thà tìm hiểu Yếu tố và Mục tiêu-C hơn là Forth và Smalltalk, nhưng tôi có thể sẽ cắt góc ở đó.
Pepijn

1
@pepijn, python không có các phần tiếp theo hạng nhất (mặc dù tôi đang làm việc với một bản hack mã byte để giả mạo nó)
aaronasterling

1
Objective-C rút ra từ Smalltalk, nhưng tôi nghĩ rằng sự thực sự đến từ ST là sự năng động của chính môi trường.
John Cromartie

33

Tôi thứ hai Haskell. Đừng nghĩ rằng "Tôi biết một Lisp, vì vậy tôi biết lập trình chức năng". Bạn đã bao giờ nghe nói về các lớp học? Các loại dữ liệu đại số? Đơn nguyên? Các ngôn ngữ chức năng "Hiện đại" (ít nhiều - ít nhất không phải 50 tuổi;)), đặc biệt là Haskell, đã khám phá rất nhiều khái niệm mới rất hữu ích. Các lớp loại thêm đa hình ad-hoc, nhưng loại suy luận (một điều nữa mà các ngôn ngữ bạn đã biết không có) hoạt động như một bùa mê. Các kiểu dữ liệu đại số đơn giản là tuyệt vời, đặc biệt là để mô hình hóa các cấu trúc dữ liệu giống như cây, nhưng cũng hoạt động tốt đối với các enum hoặc các bản ghi đơn giản. Và các đơn vị ... tốt, hãy nói rằng mọi người sử dụng chúng để tạo ra ngoại lệ, I / O, trình phân tích cú pháp, hiểu danh sách và nhiều hơn nữa - theo cách hoàn toàn chức năng!

Ngoài ra, toàn bộ chủ đề đủ sâu để giữ một người bận rộn trong nhiều năm;)


"Ngoài ra, toàn bộ chủ đề đủ sâu để khiến một người bận rộn trong nhiều năm;)" - Tôi tự hỏi, tại sao điều này sẽ là một điều tốt? Rốt cuộc, cuộc sống của chúng ta là hữu hạn.
chay

1
@vegai: Tại sao nó sẽ là một điều xấu? Có những cách tồi tệ hơn để dành cả đời cho việc học. Và không ai nói rằng bạn phải học trong nhiều năm chỉ để sử dụng ngôn ngữ đúng cách - chỉ là chủ đề đó không cạn kiệt sau một thời gian ngắn. (Cũng lưu ý mặt cười - phần đó không hoàn toàn nghiêm trọng.)

32

Tôi hiện đang lập trình Clojure, Python, Java và PHP [...] Các ngôn ngữ có cách tiếp cận khác nhau và sẽ hữu ích cho việc lựa chọn công cụ thực tế hoặc hiểu lý thuyết?

C

rất nhiều mã C nằm xung quanh --- nó thực sự thiết thực. Nếu bạn cũng học C ++, sẽ có rất nhiều mã xung quanh (và bước nhảy vọt là ngắn khi bạn biết C và Java).

Nó cũng cung cấp cho bạn (hoặc buộc bạn phải có) một sự hiểu biết tuyệt vời về một số vấn đề lý thuyết; chẳng hạn, mỗi chương trình đang chạy trong một mảng 4 GB, theo một nghĩa nào đó. Con trỏ trong C thực sự chỉ là các chỉ số trong mảng này --- chúng chỉ là một loại số nguyên khác nhau. Không khác nhau trong Java, Python, PHP, ngoại trừ ẩn bên dưới một lớp bề mặt.

Ngoài ra, bạn có thể viết mã hướng đối tượng trong C, bạn chỉ cần có một chút thủ công về vtables và như vậy. Bộ sưu tập câu đố di động của Simon Tatham là một ví dụ tuyệt vời về mã C hướng đối tượng khá dễ tiếp cận; nó cũng được thiết kế khá tốt và đáng để đọc cho một lập trình viên C mới bắt đầu / trung cấp. Đây là những gì xảy ra trong Haskell quá --- các lớp loại theo nghĩa nào đó "chỉ là một vtable khác".

Một điều tuyệt vời khác về C: tham gia hỏi đáp với các lập trình viên C lành nghề sẽ giúp bạn có rất nhiều câu trả lời giải thích cho C về các cấu trúc cấp thấp hơn, giúp xây dựng nền tảng kiến ​​thức gần gũi hơn của bạn.

Tôi có thể đang thiếu quan điểm của OP --- Tôi nghĩ rằng tôi đang đánh giá các câu trả lời khác --- nhưng tôi nghĩ đó có thể là một câu trả lời hữu ích cho những người khác có câu hỏi tương tự và đọc chủ đề này.


1
Điều này cần nhiều upvote. C là ngôn ngữ số một khi bạn cần hoặc muốn tìm hiểu về kim loại trần và hiểu hoạt động của máy - hoặc ngôn ngữ lập trình cấp cao hơn - từ đầu. Hơn nữa, nó cũng là một trình biên dịch C rất phổ biến cho hầu hết mọi kiến ​​trúc CPU từng được phát minh.
ăn kiêng

27

Từ trang của Peter Norvig:

"Học ít nhất nửa tá ngôn ngữ lập trình. Bao gồm một ngôn ngữ hỗ trợ trừu tượng lớp (như Java hoặc C ++), một ngôn ngữ hỗ trợ trừu tượng hóa chức năng (như Lisp hoặc ML), một ngôn ngữ hỗ trợ trừu tượng cú pháp (như Lisp), một ngôn ngữ hỗ trợ khai báo cú pháp (như Lisp), một ngôn ngữ hỗ trợ khai báo cú pháp thông số kỹ thuật (như các mẫu Prolog hoặc C ++), một mẫu hỗ trợ coroutines (như Biểu tượng hoặc Lược đồ) và một mẫu hỗ trợ song song (như Salu). "

http://norvig.com/21-days.html


13

Tôi ngạc nhiên rằng sau 6 tháng và hàng trăm phiếu bầu, không ai nhắc đến SQL ...


10

Trong các loại như định lý / hệ thống loại nâng cao: Coq (Tôi nghĩ Agda cũng thuộc loại này).

Coq là một trợ lý bằng chứng được nhúng vào một ngôn ngữ lập trình chức năng.

Bạn có thể viết bằng chứng toán học và Coq giúp xây dựng một giải pháp. Bạn có thể viết các hàm và chứng minh các thuộc tính về nó.

Nó có các loại phụ thuộc, một mình tôi. Một ví dụ đơn giản:

concatenate: forall (A:Set)(n m:nat), (array A m)->(array A n)->(array A (n+m))

là chữ ký của hàm nối hai mảng có kích thước n và m của các phần tử của A và trả về một mảng có kích thước (n + m). Nó sẽ không biên dịch nếu hàm không trả về điều đó!

Được dựa trên tính toán của các công trình quy nạp, và nó có một lý thuyết vững chắc đằng sau nó. Tôi không đủ thông minh để hiểu tất cả, nhưng tôi nghĩ rằng đáng để xem xét, đặc biệt nếu bạn có xu hướng theo lý thuyết loại.

EDIT: Tôi cần đề cập: bạn viết một hàm trong Coq và sau đó bạn có thể CHỨNG MINH nó là chính xác cho bất kỳ đầu vào nào, điều đó thật tuyệt vời!


Tôi coq thứ hai. Khi học hầu hết các ngôn ngữ, bạn vẫn có thể sử dụng các kỹ thuật cũ của mình, nhưng coq buộc bạn phải viết tổng số chương trình luôn hoạt động.
Bruno Martinez

Tôi đã cố gắng học Coq vào mùa hè năm ngoái nhưng đã từ bỏ vì tôi thấy khó tìm được tài liệu tốt về việc học và sử dụng nó. Bất kỳ đề xuất?

Tôi đã học được từ một khóa học tại trường đại học của mình và sau đó đọc "Coq'Art: Tính toán của các công trình quy nạp" Nó không đủ để thực sự làm chủ nó, nhưng đủ để đánh giá cao nó.
Bruno Martinez

6

Một trong những ngôn ngữ mà tôi đang quan tâm để có một điểm rất khác nhau về quan điểm (trong đó có một từ vựng mới để xác định các yếu tố ngôn ngữ và cú pháp khác triệt để) là J . Haskell sẽ là sự lựa chọn rõ ràng đối với tôi, mặc dù nó là một lang chức năng, vì hệ thống loại của nó và các tính năng độc đáo khác mở ra tâm trí của bạn và khiến bạn phải suy nghĩ lại về kiến ​​thức trước đây về lập trình (chức năng).


5

Giống như Fogus đã gợi ý cho bạn trong danh sách của anh ấy, tôi khuyên bạn cũng nên xem ngôn ngữ OzML / Mozart Nhiều mô hình, chủ yếu nhắm vào lập trình đồng thời / đa tác nhân.

Liên quan đến tính đồng thời và phép tính phân tán, tương đương với phép tính Lambda (đứng sau lập trình hàm) được gọi là Phép tính Pi.

Tôi mới chỉ bắt đầu xem xét một số cách thực hiện phép tính Pi. Nhưng họ đã mở rộng quan niệm của tôi về điện toán.


5

Lập trình Dataflow, hay còn gọi là lập trình dựa trên dòng chảy là một bước tiến tốt trên con đường. Một số từ thông dụng: xử lý paralell, tạo mẫu nhanh, lập trình trực quan (không tệ như âm thanh đầu tiên).

Các bài viết của Wikipedia rất hay:

Trong khoa học máy tính, lập trình dựa trên dòng chảy (FBP) là một mô hình lập trình xác định các ứng dụng là mạng của các quá trình "hộp đen", trao đổi dữ liệu qua các kết nối được xác định trước bằng cách gửi tin nhắn, trong đó các kết nối được chỉ định bên ngoài tới các quy trình. Các quy trình hộp đen này có thể được kết nối lại vô tận để tạo thành các ứng dụng khác nhau mà không phải thay đổi nội bộ. Do đó, FBP là định hướng thành phần tự nhiên.

Đọc sách của JPM: http://jpaulmorrison.com/fbp/

(Chúng tôi đã viết một triển khai đơn giản trong C ++ cho mục đích tự động hóa gia đình và chúng tôi rất hài lòng với nó. Tài liệu đang được xây dựng.)


+1, tôi tin rằng lập trình dữ liệu và lập trình dựa trên luồng (cũng có thể là lập trình phản ứng chức năng) sẽ trở thành một phần quan trọng trong tương lai đa lõi của chúng ta.

5

Bạn đã học được rất nhiều ngôn ngữ. Bây giờ là lúc để tập trung vào một ngôn ngữ và làm chủ nó.


3

có lẽ bạn có thể muốn dùng thử LabView để lập trình trực quan, mặc dù nó dành cho mục đích kỹ thuật.

tuy nhiên, bạn có vẻ khá quan tâm đến tất cả những gì ngoài kia, do đó gợi ý

Ngoài ra, bạn có thể dùng thử ứng dụng Android để xây dựng công cụ trực quan


LabView có một 'cú pháp' hài hước nhưng thật khó để nhấp và kéo tất cả mã của bạn. Tôi sẽ không giới thiệu nó cho một lập trình viên.
Ishtar

Đó là những gì tàu với Lego NXT, phải không? Hoàn toàn không làm việc cho tôi. Nhờ đề nghị mặc dù.
Pepijn

Đó là từ National Cụ. LabVIEW là một môi trường phát triển đồ họa giúp các nhà khoa học và kỹ sư làm việc hiệu quả hơn
Belun

2

Bruce A. Tate, lấy một trang từ Lập trình viên thực dụng đã viết một cuốn sách về chính xác: Bảy ngôn ngữ trong bảy tuần: Hướng dẫn thực dụng để học ngôn ngữ lập trình

Trong cuốn sách, ông bao gồm Clojure, Haskell, Io, Prolog, Scala, Erlang và Ruby.


2
Được cảnh báo rằng cuốn sách chứa đầy các tài liệu tham khảo về các bộ phim dường như đã trở thành một phần của văn hóa nhạc pop Hoa Kỳ. Nếu bạn chưa xem phim, bạn sẽ không biết Tate nói về cái gì. Nếu bạn đã xem các bộ phim, bạn vẫn có thể bị trì hoãn bởi sự nhân hóa liên tục của các ngôn ngữ lập trình hoặc đơn giản là không thích các nhân vật trong câu hỏi (tôi không thích Mary Poppins; trùng hợp là tôi cũng không thích Ruby, vì vậy sự tương tự có thể là một cái gì đó).
Alan Plum

2

Sao Thủy : http://www.mercury.csse.unimelb.edu.au/

Đó là một Prolog được gõ, với các kiểu và chế độ duy nhất (nghĩa là xác định rằng vị ngữ append(X,Y,Z)có nghĩa là X gắn với Y là Z mang lại một Z cho X và Y, nhưng có thể mang lại nhiều X / Y cho một Z cho trước). Ngoài ra, không cắt hoặc các vị từ ngoài logic khác.

Nếu bạn muốn, thì đó là Prolog vì Haskell là Lisp.


1
  1. Lập trình không bao gồm nhiệm vụ của lập trình viên.
  2. Những điều mới luôn thú vị, nhưng có một số thứ cũ rất tuyệt.

Hệ thống cơ sở dữ liệu đầu tiên là dBaseIII đối với tôi, tôi đã dành khoảng một tháng để viết các ví dụ nhỏ (dBase / FoxPro / Clipper là một db dựa trên bảng với các chỉ mục). Sau đó, tại nơi làm việc đầu tiên của tôi, tôi đã gặp MUMPS và tôi bị đau đầu. Tôi còn trẻ và mới mẻ, nhưng phải mất 2 tuần để hiểu mô hình cơ sở dữ liệu MUMPS. Có một khoảnh khắc, giống như trong truyện tranh: sau 2 tuần, một nút đã được bật và bóng đèn vừa sáng lên trong tâm trí tôi. MUMPS là tự nhiên, mức độ thấp và rất rất nhanh. (Đó là một btree không cân bằng, không được định dạng mà không có loại.) Xu hướng ngày nay cho thấy đường quay trở lại: NoQuery, db-value-key, db đa chiều - vì vậy chỉ còn một số bước nữa và chúng ta tiếp cận Quai bị.

Dưới đây là phần trình bày về các ưu điểm của MUMPS: http://www.sl slideshoware.net/george.james/mumps-the-iNET-scale-database-presentation

Một tài liệu ngắn về db ​​phân cấp: http://www.cs.pitt.edu/~chang/156/14hier.html

Giới thiệu về toàn cầu MUMPS (trong MUMPS, biến cục bộ, short: local là biến bộ nhớ và biến toàn cục, short: globalals là "biến db", đặt biến toàn cục đi vào đĩa ngayelly): http: // gradvs1.mgateway.com/doad/extternal1.pdf (PDF)


1

Nói rằng bạn muốn viết một bài thơ tình yêu ...

Thay vì sử dụng búa chỉ vì đã có sẵn trong tay, hãy học các công cụ thích hợp cho nhiệm vụ: học nói tiếng Pháp.

Khi bạn đã đạt đến trình độ nói gần như bản ngữ, bạn đã sẵn sàng để bắt đầu bài thơ của mình.


4
Tất nhiên, nó sẽ là một bài thơ rác rưởi, bởi vì bạn cần nói tốt trên mức bản địa bình thường để viết thơ. Và bạn gái của bạn sẽ cần phải học tiếng Pháp để đọc nó. Trừ khi cô ấy là người Pháp, trong trường hợp đó cô ấy có thể sẽ thấy xấu hổ.
John Lawrence Aspden

Thật trớ trêu, John, tôi thích nó (Tôi là người Pháp, btw)
Vinzz

1

Mặc dù học các ngôn ngữ mới ở cấp độ học thuật là một sở thích thú vị, IMHO bạn thực sự không thể học sử dụng một ngôn ngữ cho đến khi bạn cố gắng áp dụng nó vào một vấn đề trong thế giới thực. Vì vậy, thay vì tìm kiếm một ngôn ngữ mới để học, trước tiên tôi sẽ tìm kiếm một thứ mới để xây dựng và chỉ sau đó tôi mới tìm ngôn ngữ phù hợp để sử dụng cho một dự án cụ thể đó. Đầu tiên chọn vấn đề, sau đó là công cụ, không phải cách khác ..


1

Đối với bất kỳ ai đã ở đây từ giữa những năm 80, tôi khuyên bạn nên học BASIC 8 bit. Đó là cấp độ rất thấp, rất nguyên thủy và đó là một bài tập thú vị để lập trình xung quanh các lỗ của nó.

Trên cùng một dòng, tôi sẽ chọn một máy tính dòng HP-41C (hoặc trình giả lập, mặc dù không có gì vượt qua phần cứng thực sự). Thật khó để bọc bộ não của bạn xung quanh nó, nhưng cũng đáng. Một TI-57 sẽ làm, nhưng sẽ là một trải nghiệm hoàn toàn khác. Nếu bạn quản lý để giải các phương trình bậc hai trên TI-55, bạn sẽ được coi là bậc thầy (nó không có điều kiện và không có nhánh nào ngoại trừ RST, điều đó đã đưa chương trình quay lại bước 0).

Và cuối cùng, tôi chọn FORTH (nó đã được đề cập trước đó). Nó có một thứ Lisp-ish "xây dựng ngôn ngữ của bạn", nhưng lại là kim loại trần trụi hơn nhiều. Nó sẽ cho bạn biết lý do tại sao Rails thú vị và khi DSL có ý nghĩa và bạn sẽ hiểu rõ về máy tính không phải RPN của bạn đang nghĩ gì trong khi bạn nhập.


1

PostScript. Đây là một ngôn ngữ khá thú vị vì nó dựa trên ngăn xếp và nó khá thực tế một khi bạn muốn đặt mọi thứ lên giấy và bạn muốn hoàn thành nó hoặc khắc phục sự cố tại sao nó không được thực hiện.

Erlang. Sự song song nội tại mang lại cho nó một cảm giác khá bất thường và bạn lại có thể học được những điều hữu ích từ đó. Tôi không chắc lắm về tính thực tiễn, nhưng nó có thể hữu ích cho một số nhiệm vụ tạo mẫu nhanh và các hệ thống dự phòng cao.

Hãy thử lập trình GPU - hoặc CUDA hoặc OpenCL. Đó chỉ là các phần mở rộng C / C ++, nhưng mô hình tinh thần của kiến ​​trúc lại hoàn toàn khác với cách tiếp cận cổ điển, và nó chắc chắn sẽ trở nên thiết thực một khi bạn cần thực hiện một số thao tác thực sự.


1

Erlang, Forth và một số công việc nhúng với ngôn ngữ lắp ráp. Có thật không; mua một bộ Arduino hoặc một cái gì đó tương tự, và tạo ra một tiếng bíp đa âm trong lắp ráp. Bạn sẽ thực sự học được điều gì đó.


1

Ngoài ra còn có anic :

https://code.google.com.vn/p/anic/

Từ trang web của nó:

Nhanh hơn C, An toàn hơn Java, Đơn giản hơn * sh

anic là trình biên dịch triển khai tham chiếu cho ngôn ngữ lập trình dataflow mục đích chung, hiệu năng cao, hoàn toàn song song, không có bế tắc ANI.

Nó dường như không còn được phát triển tích cực nữa, nhưng dường như nó có một số khái niệm thú vị (và cuối cùng, đó là những gì bạn dường như là sau).


1

Mặc dù không đáp ứng yêu cầu "khác biệt" của bạn - tôi muốn đặt cược rằng Fantom là ngôn ngữ mà một lập trình viên chuyên nghiệp nên xem xét. Bằng sự thừa nhận của riêng họ, các tác giả của fantom gọi nó là một ngôn ngữ nhàm chán. Nó chỉ đơn thuần che giấu các trường hợp sử dụng phổ biến nhất của Java và C #, với một số cú pháp đóng được mượn từ ruby ​​và các ngôn ngữ mới hơn tương tự.

Tuy nhiên, nó quản lý để có trình biên dịch bootstrapping của riêng mình, cung cấp một nền tảng giảm cài đặt mà không phụ thuộc bên ngoài, có các gói đúng - và hoạt động trên Java, C # và bây giờ là Web (thông qua js).

Nó có thể không mở rộng tầm nhìn của bạn về các cách lập trình mới, nhưng chắc chắn nó sẽ cho bạn thấy những cách lập trình tốt hơn.


1

Một điều mà tôi thấy thiếu từ các câu trả lời khác: ngôn ngữ dựa trên thuật ngữ viết lại.

Bạn có thể xem Pure - http://code.google.com.vn/p/pure-lang/ .

Mathematica cũng đang viết lại dựa trên, mặc dù không dễ để biết được chuyện gì đang xảy ra, vì nó khá khép kín.


0

APL, Forth và hội.

Có một số thú vị. Lấy bộ robot Lego Mindstorm và RobotC của CMU và viết một số mã robot. Mọi thứ xảy ra khi bạn viết mã phải "bẩn" và tương tác với thế giới thực mà bạn không thể học theo bất kỳ cách nào khác. Vâng, cùng một ngôn ngữ, nhưng một quan điểm rất khác nhau.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.