Ngôn ngữ lập trình cải thiện kỹ năng lập trình của bạn nói chung? [đóng cửa]


27

Những ngôn ngữ nào bạn muốn đề nghị một lập trình viên học, không phải vì họ sẽ sử dụng nhiều ngôn ngữ (nhưng họ có thể có), mà bởi vì nó sẽ cải thiện kỹ năng lập trình của một người nói chung và để mọi người nghĩ khác (và có thể tốt hơn ) đường?


12
Không một ai. Thay vào đó: Càng nhiều trong số họ càng tốt, mỗi người càng khác nhau càng tốt so với những người khác.

Câu trả lời:


27

cho các thuật toán và lập trình "bình thường":

  • python, tốt để học, dễ sử dụng, đẹp để đọc.
  • C ++, dạy cho bạn biết máy tính THỰC SỰ LÀ GÌ.

cho một trải nghiệm thay đổi suy nghĩ:

  • Haskell
  • Prolog

vì đã phá hủy tâm trí của bạn và vượt qua ranh giới giữa Padawan và Jedi Master:

  • LISP thường gặp

3
vâng, đồng ý với chrisaycock, C và lắp ráp sẽ dạy cho bạn biết máy tính THỰC SỰ là gì, C ++ là một bước rất nhẹ lên trên, nhưng vẫn sẽ giúp bạn xử lý các vấn đề như con trỏ bộ nhớ và các vấn đề hiệu năng cao
Lacrymology

mh Prolog là tuyệt vời, nhưng tôi không thấy làm thế nào nó có thể thú vị để cải thiện các kỹ năng lập trình chung. Tôi thấy nó là một hệ thống ký hiệu toán học / logic thay thế, có cấu trúc mà bạn có thể truy vấn, giống như một ngôn ngữ lập trình (mô tả stati, không phải thủ tục). Chỉnh sửa: nó chắc chắn thay đổi cách bạn nghĩ về một cái gì đó, nhưng cái gì đó không phải là lập trình.
cbrandolino

Prolog chắc chắn là lập trình. Lập trình khai báo và bắt nguồn từ logic (và do đó tương đối toán học-ish), vâng. Nhưng vẫn lập trình. Về điểm cuối cùng, bạn có nghĩ rằng một Lisp khác (tức là Scheme) cũng sẽ làm như vậy không?

3
Prolog là ngôn ngữ nổi tiếng nhất của mô hình logic. Điều quan trọng là phải uốn cong tâm trí của bạn xung quanh tất cả các mô hình bạn có thể xử lý, nếu điều bạn muốn là trở thành một lập trình viên tốt hơn, nó sẽ giúp bạn có được sự nhanh nhẹn tinh thần cộng với nó sẽ cung cấp cho bạn các công cụ mới. Tôi đoán bất kỳ phương ngữ Lisp nào sẽ làm, những gì tôi thấy trong Common Lisp là nó trông giống như Lisp có thể sử dụng nhiều nhất đối với tôi.
Lacrymology

1
Tôi sẽ bỏ phiếu cho Đề án trên Lisp thông thường - Tôi đoán nó phụ thuộc vào việc bạn nghĩ bạn sẽ thực sự sử dụng Lisp trong sản xuất hay không. Nếu không, đi cho Đề án.
Skilldrick

13

Đừng quên Javascript .

Nó có các tính năng OO không phải là các tính năng OO thông thường của bạn. Nó rất phù hợp cho các chức năng và đóng cửa bậc cao hơn, và bạn thường xuyên sử dụng chúng. Nó cho phép nhiều thủ thuật lập trình chức năng. Nó rất linh hoạt.

Và nó thực tế, bởi vì mọi trình duyệt nghiêm túc đều có nó.

(Tất nhiên nó cũng có một số điều kỳ quặc khó chịu. Rất ít ngôn ngữ thực tế không)


1
Liệu JS có các tính năng OO mà Java không có?
Mahmoud Hossam

3
@Phobia: JS thực hiện OO theo một cách hoàn toàn khác. Không có lớp học. Kế thừa được thực hiện thông qua các nguyên mẫu - về cơ bản một đối tượng có thể kế thừa từ bất kỳ đối tượng nào khác. Hàm là giá trị hạng nhất; bạn không chỉ có thể vượt qua chúng, bạn có thể dễ dàng gán các phương thức mới cho các đối tượng hiện có. Cách JS thực hiện việc ẩn dữ liệu cũng khá khác so với Java: mọi thứ mà một đối tượng phơi bày đều công khai, do đó bạn ẩn dữ liệu và phương thức bằng cách sử dụng các bao đóng. Lưu ý rằng không có 'OO chính tắc'; JS gần hơn một chút với 'OO gốc' mà Smalltalk đã phát minh ra, ví dụ như C ++, nhưng OO của Java bây giờ cũng là 'kinh điển'.
9000

11

Clắp ráp cho cách thức hoạt động của một máy tính

HaskellLISP cho cả lập trình chức năng và siêu lập trình

APL cho lập trình vector và terse

bash hoặc tcsh để biết cách quản trị máy tính theo chương trình


4
Thay vì APL, bạn có thể sử dụng J bởi cùng một tác giả.
9000

+1 khi lắp ráp. Bạn không bao giờ hoàn toàn nhìn vào các ngôn ngữ cấp cao theo cùng một cách sau khi thực hiện bất kỳ sự phát triển đáng kể nào. Nếu bạn đang tìm kiếm thứ gì đó sẽ khiến bạn nghĩ về mã hóa theo một cách thực sự khác biệt, ASM sẽ làm điều đó.
Kurtis

9

Tôi muốn đề nghị Đề án.

Đó là một ngôn ngữ lập trình chức năng có nguồn gốc (hầu hết thực sự nghĩ rằng đó là một phương ngữ) từ Lisp. Sự khác biệt chính với Common Lisp là, cách tiếp cận của nó rất tối giản - cực kỳ như vậy. Chẳng hạn, trong một bản phân phối Scheme bình thường (mọi lược đồ <R5 hoặc Mit / GNU / Scheme), bạn sẽ không tìm thấy triển khai vòng lặp: bạn sẽ phải tự thực hiện bằng cách sử dụng đệ quy đuôi.

Nó thực sự biểu cảm và cú pháp của nó thật tuyệt khi học một cái gì đó mới về lập trình, như trong: chỉ cần nhìn vào mã, bạn sẽ biết được trình biên dịch / trình thông dịch sẽ hoạt động như thế nào.

Thêm vào đó, nó đi kèm với Sách lập trình tốt nhất từ ​​trước đến nay, Cấu trúc và diễn giải các chương trình máy tính , có thể tải xuống miễn phí trên trang web của MIT.

Dưới đây là một số bài học video mà tôi hy vọng sẽ ngay lập tức khiến bạn hứng thú với ngôn ngữ hấp dẫn này - các diễn giả là tác giả của SICP: http://groups.csail.mit.edu/mac/groupes/6.001/abelson-sussman- bài giảng /


Cảm ơn bạn. Tôi phải cảnh báo bạn, mặc dù, những bài học dễ khiến các lập trình viên đam mê rơi nước mắt.
cbrandolino

@cbrandolino - Đúng vậy, lớp lập trình chức năng của chúng tôi đã loại rất nhiều người ra khỏi chương trình khoa học máy tính.
jmort253

1
Lược đồ tối giản, nhưng trong R5, nó đã phát triển một số mụn cóc, và trên R6, nó quyết định rất lớn. Thật đáng tiếc, vì nó rất đẹp. Để có một ngôn ngữ thực sự tối giản nhưng vẫn thực tế, hãy kiểm tra Lua
Javier

@Javier, bạn nói đúng. Tôi sẽ chỉnh sửa câu trả lời để chỉ định việc triển khai.
cbrandolino

Tôi đang làm chương trình trong trường đại học và tôi ghét nó. Không phải vì nó là ngôn ngữ chức năng, tôi muốn sử dụng ngôn ngữ đó trong một thời gian dài. Tuy nhiên, cú pháp thực sự giết chết tôi. Có ba loại dấu ngoặc khác nhau trên bàn phím (bốn nếu bạn đếm dấu ngoặc góc) và bạn chỉ đang sử dụng dấu ngoặc đơn. Tại sao? Vấn đề với việc sử dụng những người khác là gì?
Femaref

4

LISP, tốt nhất là Lược đồ kết hợp với "Cấu trúc và diễn giải các chương trình máy tính" của Abelson & Sussman, sẽ dạy bạn suy nghĩ theo các thuật ngữ khác với các thuật ngữ được áp đặt bởi C / C ++.

FORTH, cụ thể là một FORTH hướng khối, không phải là định hướng tệp (chẳng hạn như D85) sẽ dạy bạn kiềm chế sự ngu ngốc của bạn. Khi bạn không thể trong bất kỳ trường hợp nào viết một thói quen dài hơn 16 dòng 64 ký tự, bạn buộc phải trừu tượng và yếu tố.


4

Java là một trong những ngôn ngữ được giảng dạy nhiều nhất tại các trường đại học trên toàn thế giới và có lý do cho nó. Mặc dù nó thường giống như Khủng long, nhưng nó cung cấp cho mọi người một cái nhìn tổng quan rất tốt về các Khái niệm về lập trình hiện đại. Nó KHÔNG chỉ cho bạn cách máy tính hoạt động như Trình biên dịch hoặc thậm chí là ngôn ngữ trừu tượng hơn nhiều C. Nhưng Phi công phải có khả năng bay và không thể tự chế tạo Máy bay - hãy học JAVA như một cơ sở tốt cho bất kỳ Mã nào bạn sẽ viết bằng ngôn ngữ phổ biến nhất (cho tiếng vang) hiện nay: Java, c ++, php, c #, ruby ​​(trên đường ray), v.v.

tối đa


3

C # 3 với LINQ.

Đó là một giới thiệu tuyệt vời để lập trình chức năng.

Hãy thử viết một chương trình (hoặc giải Project Euler) và thay thế càng nhiều vòng lặp càng tốt bằng các cuộc gọi LINQ.
Nó giúp người ta nắm vững các khái niệm về lập trình chức năng và đánh giá lười biếng.

Từ đó, người ta có thể chuyển sang F #


3

Chống tay xuống, tôi sẽ nói Haskell. Và vì hai lý do:

  • Đó đơn giản là cách tốt nhất để học lập trình chức năng. Mọi ngôn ngữ khác đều cho phép các tác dụng phụ theo mặc định, nhưng có thể thực hiện mọi thứ theo chức năng (và vâng, điều này bao gồm ML và Erlang: xem bài nói chuyện này để biết thêm thông tin ). Haskell là chức năng theo mặc định, nhưng có thể được thực hiện để sử dụng các tác dụng phụ khi bạn cần chúng.
  • Đó chắc chắn là một ngôn ngữ khuyến khích bạn suy nghĩ trước khi viết mã. Thành thật mà nói, điều này chưa bao giờ thực sự là một vấn đề đối với tôi (nếu có bất cứ điều gì, nó hoàn toàn ngược lại). Điều đó nói rằng có vẻ như tôi là thiểu số. Hầu hết các lập trình viên mà tôi gặp phải dường như có nhiều suy nghĩ về "mã trước, đặt câu hỏi sau" hơn là "suy nghĩ vấn đề của bạn trong nhiều ngày trước khi mã hóa giải pháp trong 5 phút" (có xu hướng là suy nghĩ của tôi) . Do đó, loại ngôn ngữ này có thể cung cấp kinh nghiệm quý giá cho hầu hết các lập trình viên.

3

Tôi sẽ đề nghị Scala nếu một người đến từ thế giới C / Java.

Nó không hoàn toàn là ngôn ngữ lập trình chức năng, nhưng nó sử dụng OO để mô phỏng một số tính năng lập trình chức năng (ví dụ: Sử dụng đối tượng để mô phỏng chức năng hạng nhất và chức năng bậc cao).

Vì vậy, nếu bạn quen thuộc với OO, Scala sử dụng các thuật ngữ bạn đã biết để giải thích thế giới chức năng.

Tôi thấy việc hiểu lập trình chức năng trong Scala dễ dàng hơn thay vì đi sâu vào lập trình chức năng hơn như Haskell, List ... vv.


2

Các ngôn ngữ chức năng là những ngôn ngữ mà tôi cảm thấy đã giúp đưa tôi đến nơi tôi đang có ngày hôm nay. Mặc dù tôi đang phát triển ứng dụng web, các khái niệm học được từ các ngôn ngữ chức năng giúp tôi thấy các giải pháp cho các vấn đề mà nếu không tôi sẽ không thấy. Đây là những ngôn ngữ tôi đã làm việc trong trường đại học của tôi:

  • C ++ (Không hoạt động, nhưng các khái niệm như con trỏ và quản lý bộ nhớ là vô giá)
  • Đề án tiến sĩ
  • ML / Ocaml (Chúng tôi đã viết một ngôn ngữ khác bằng ML / Ocaml!)
  • JavaScript (Ngôn ngữ chức năng đang đạt được lực kéo trong ngành, cả phía máy khách và phía máy chủ)

Học các ngôn ngữ này sẽ giúp bạn hiểu được thế giới trừu tượng và cách xây dựng các khối mã đóng gói các chức năng khác, ẩn các chi tiết cấp thấp để bạn có thể tập trung vào các mục tiêu kinh doanh cấp cao.


1

Ruby có một trong những khung thử nghiệm trực quan và mạnh mẽ nhất mà tôi đã sử dụng. Tôi không chắc chắn tôi thực sự hiểu làm thế nào để sử dụng đúng cách chế giễu và sơ khai cho đến khi tôi bắt đầu viết bài kiểm tra bằng ruby. rSpec và Cucumber là những công cụ tuyệt vời.


1

Có một số ngôn ngữ lập trình sẽ yêu cầu bạn suy nghĩ về một vấn đề theo một cách mới (liên quan đến những gì bạn đã sử dụng tất nhiên.) Các ngôn ngữ phổ biến nhất để học đã được dạy một ngôn ngữ bắt buộc, là một chức năng và một ngôn ngữ logic, ví dụ prologlisp .

Một số ngôn ngữ bị ảnh hưởng nặng nề bởi lý thuyết thể loại, như ocamlHaskell và một số ngôn ngữ là giống ngôn ngữ chéo như Curry (chức năng và logic). Curry có lẽ là ngôn ngữ gây chú ý nhất mà tôi biết, không chỉ bởi vì nó khiến Haskell say mê với lập trình logic, mà còn vì sự tích hợp với lập trình dựa trên ràng buộc.

Một ngôn ngữ thú vị khác là Occam-pi vì nó quá nặng về đồng thời, nhưng cũng vì cổng arduino gần đây .


1

Một lập trình viên tròn trịa có một số túi để 'xỏ tay áo' và bao gồm:

  • Hội, để tìm hiểu làm thế nào ruột của một máy tính hoạt động.
  • Một ngôn ngữ thủ tục như C hoặc Pascal.
  • Một ngôn ngữ chức năng như Scheme.
  • Một ngôn ngữ OOP như Squeak.

Tất cả đều dạy cho bạn những cách hơi khác nhau để suy nghĩtiếp cận vấn đề.


0

bạn sẽ không học chính xác bất kỳ ngôn ngữ lập trình nào mà không có mục tiêu rõ ràng. Biết những gì bạn muốn làm với nó, sau đó bạn có thể quyết định chương trình nào phù hợp với nhu cầu của bạn.

Ví dụ: hãy nói về c #.

C # có thể làm chương trình web, chương trình điều khiển, thực thi độc lập, chương trình chơi trò chơi, chương trình bạc và chương trình di động. Mặc dù cú pháp bằng nhau trong hầu hết mọi trường hợp nhưng nó hoạt động khác nhau trong mọi kịch bản. Ví dụ, một chương trình thực thi độc lập sẽ giữ thông tin của họ cho đến khi nó được tải hoặc chương trình kết thúc, trong khi một chương trình web, thông tin bị hủy mỗi khi bạn tải một trang và trong ánh sáng bạc, bạn sẽ dành phần lớn thời gian, vật lộn với một tệp xml.

Và thứ hai, đừng dành thời gian của bạn với các ngôn ngữ kỳ lạ (ví dụ như Haskel), nói chuyện với công ty, có rất ít chương trình đáng để bạn nỗ lực: java (vua của ngọn đồi), c # / vb.net, php và sql.


0

Có một chương trình rất đơn giản để viết Applet Java được gọi là Đang xử lý

Ngôn ngữ này sẽ cung cấp cho bạn một sự hiểu biết rất cơ bản về các biến, vòng lặp và loại điều đó, nếu bạn chỉ mới bắt đầu.


0

Một số gợi ý tuyệt vời ở đây. Tôi có thể đi với C hoặc C ++ cá nhân. Họ buộc bạn phải đối phó với rất nhiều khái niệm quan trọng trong việc hiểu cách thức mọi thứ hoạt động, nhưng điều đó có xu hướng bị xáo trộn trong các ngôn ngữ khác. Chỉ cần hiểu cách mọi thứ đang thực sự hoạt động sẽ giúp bạn trở thành một lập trình viên ngay cả khi ngôn ngữ bạn đang sử dụng sau đó che giấu một số chi tiết.

Hội là thú vị nếu bạn muốn đào sâu ở cấp độ thấp hơn một chút, nhưng đừng hy vọng sẽ làm được nhiều việc với nó. :)


0

Tôi muốn giới thiệu Ruby. Ruby không yêu cầu bạn thay đổi mô hình, nhưng nó khuyến khích bạn làm việc trong nhiều mô hình. Tôi nghĩ rằng lợi thế của điều này là thay vì thất vọng vì không thể làm việc theo cách bạn đã quen, bạn sử dụng một mô hình khác để thoát khỏi sự thất vọng với những hạn chế của việc làm theo cách bạn đã quen.

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.