Nếu một người học một ngôn ngữ lập trình mới mỗi năm, danh sách nên là gì? [đóng cửa]


19

Trong chương một của "Lập trình viên thực dụng" , mục tiêu học tập đầu tiên là:

Học ít nhất một ngôn ngữ mới mỗi năm. Các ngôn ngữ khác nhau giải quyết cùng một vấn đề theo những cách khác nhau. Bằng cách học một số cách tiếp cận khác nhau, bạn có thể giúp mở rộng suy nghĩ của mình và tránh bị getter tấn công. [...]

Để đạt được điều này trong sự nghiệp, danh sách các ngôn ngữ có thể sẽ khá dài (đặc biệt nếu bạn không muốn "tiến bộ" trong quản lý). Rõ ràng việc giáo dục một lập trình viên (hoặc bất kỳ hình thức nào) sẽ giúp bạn bắt đầu với cốt lõi của các ngôn ngữ có ích về mặt thương mại (danh sách thông thường từ việc đăng công việc: C, C ++, Ruby, Python, JavaScript, C #, Java, VB, .. .). Ngoài ra, một chương trình học chính thức hoặc không chính thức có thể có các phương pháp tiếp cận chức năng (thông qua một cái gì đó như Haskell, LISP hoặc một ngôn ngữ có nguồn gốc ML)

Nhưng một khi một tập hợp con hợp lý của danh sách đó được học - tiếp theo là gì và tại sao ?


3
Trong câu trả lời này, tôi liệt kê một số mô hình ngôn ngữ có thể được nghiên cứu để mở rộng khả năng của bạn. Tôi sẽ bắt đầu bằng cách cố gắng học tất cả các mô hình này (thay vì tập trung vào ngôn ngữ), vì vậy hãy bỏ qua tất cả những ngôn ngữ mà ngôn ngữ hiện tại của bạn sử dụng, sau đó chọn một ngôn ngữ có nhiều ngôn ngữ khác với những gì bạn đã quen. Không có nhiều điểm khi bắt đầu bằng C # rồi Java, hãy cố gắng đa dạng hóa hơn ban đầu. Khi bạn đã bao gồm tất cả các loại cơ bản, sau đó bạn có thể chọn các ngôn ngữ phổ biến khác.
Simon P Stevens

@Simon: Tại sao không làm cho câu trả lời này ở đây?
Richard

1
Bạn sẽ học được rất nhiều từ Java đến C #, nhưng không đi theo hướng khác
Casebash

@Richard. Tôi thực sự không nghĩ rằng nó là một câu trả lời đầy đủ, tôi chỉ giới thiệu cho bạn một cái gì đó có liên quan tôi đã viết ở nơi khác.
Simon P Stevens

1
Hầu hết mọi người học một ngôn ngữ một năm sẽ là một "người giỏi trong tất cả các ngành nghề nhưng không thành thạo" cho đến khi bạn tập trung vào một vài trong vài năm. Tôi tin rằng, dựa trên nhiều kinh nghiệm rằng khái niệm lập trình viên 'full-stack' là sai ngoại trừ 1% - 5% các nhà phát triển. Hầu hết những người phụ trợ cốt lõi mà tôi biết không có kỹ năng tuyệt vời và ngược lại.
Junky

Câu trả lời:


19

Làm cho nó thú vị và dành mỗi năm để viết một trình thông dịch hoặc trình biên dịch cho ngôn ngữ lập trình của riêng bạn, lấp đầy một ngách mà bạn chưa từng sử dụng ngôn ngữ lập trình. Mỗi năm, hãy viết trình biên dịch / trình thông dịch tiếp theo của bạn bằng ngôn ngữ bạn đã viết năm trước.


7
Tôi có thể xin chữ ký của bạn được không? :-)
Christian Davén

1
+1 Câu trả lời tuyệt vời, ngay cả khi nó có thể có nghĩa một cách hài hước.
Joe D

1
@Joe D Không có nghĩa là một cách hoàn toàn hài hước. Nếu bạn có thể làm điều này, bạn đã thành thạo tất cả các ngóc ngách.
thay thế

-1 vì không có nghĩa nó theo một cách hoàn toàn hài hước. (giống như chúng ta không có đủ ngôn ngữ / triển khai bị bỏ rơi)
ZJR

2
@ZJR Vậy 99% Hài hước, 1% Không hài hước là xấu? Cá hồi. Ngoài ra, tại sao bạn lại hạ thấp câu trả lời dựa trên một nhận xét?
thay thế

13

Bạn nên tối đa hóa "mức độ phù hợp cận biên", tức là luôn dấn thân vào những lĩnh vực mới mà bạn chưa mạnh. Thay đổi cả ngôn ngữ lập trình và các khái niệm . Nếu bạn không biết bất kỳ ngôn ngữ hướng đối tượng nào, hãy thử Java và một số khung trừu tượng cao như Hibernate. Sau đó viết một số nội dung quản trị hệ thống bằng ngôn ngữ script như Python hoặc Perl. Sau đó chọn một số kỹ năng cấp thấp trong C hoặc C ++, viết mã máy chủ đa luồng hiệu suất cao. Nếu bạn không biết lập trình chức năng, hãy thử Haskell với một số vấn đề về lý thuyết đồ thị, chẳng hạn như giải quyết trò chơi Solitaire , v.v. như bảo mật khả năng đối tượng ,Prolog hoặc VHDL .

Nhân tiện tập thể dục tốt! Điều này sẽ dạy bạn suy nghĩ theo chiều ngang và hình dung các vấn đề theo thuật ngữ bất khả tri, thay vì dựa vào quá ít kỹ thuật dành riêng cho nền tảng. Chẳng hạn, một khi bạn nắm vững những điểm tương đồng và khác biệt trong việc gửi phương thức ảo giữa C ++ và Python, bạn sẽ "hiểu được" ngay lập tức đối với bất kỳ ngôn ngữ nào khác.


9

Một ngôn ngữ không ảnh hưởng đến cách bạn nghĩ về lập trình, không đáng để biết. - Alan Perlis

Như một số câu trả lời khác đã chạm vào, nếu bạn đang học một ngôn ngữ mới mỗi năm, thì tại sao? là để mở rộng khả năng của bạn như là một lập trình viên. Làm thế nào? là bằng cách học các ngôn ngữ với các mô hình khác biệt với các ngôn ngữ bạn đã biết và việc nắm bắt các mô hình mà bạn đã biết sẽ xác định ngôn ngữ nào sẽ học tiếp theo.

Những mô thức này là gì? Cuốn sách nâng cao Khái niệm, Kỹ thuật và Mô hình lập trình máy tính cung cấp một cái nhìn tổng quan tuyệt vời với bản đồ đồ họa .

Do đó, nếu bạn chỉ biết các ngôn ngữ bắt buộc giống như C, thì việc học Scheme / Lisp là vô cùng hữu ích. Nếu bạn đã biết các ngôn ngữ bắt buộc và chức năng, thì việc học Prolog sẽ hữu ích, v.v.

Một cuốn sách gần đây cố gắng dạy nhiều ngôn ngữ và mô thức là Bảy ngôn ngữ trong bảy tuần . Tất nhiên, bạn sẽ không thông thạo từng ngôn ngữ sau một tuần học, nhưng dường như nó cung cấp một viễn cảnh đa mô hình hướng tới người thực hành.

Khi bạn thực hiện một mô hình khác, đó thực sự là một khoảnh khắc Zen; đi từ cấp bách đến lập trình chức năng khiến tôi thấy thế giới điện toán ở một khía cạnh hoàn toàn mới. Chúc bạn học tập vui vẻ!


Và một ngôn ngữ ảnh hưởng đến suy nghĩ của bạn không nhiều bằng những gì nó cho phép bạn thể hiện, nhưng nhiều hơn bởi những gì nó buộc bạn phải thể hiện.
Florian F

9

C - là điều cốt yếu, "làm nền tảng cho mọi thứ", ngôn ngữ lập trình hệ thống

Lisp (Scheme) - ngôn ngữ ur kỳ lạ nhưng vô cùng mạnh mẽ mà các tin tặc vĩ đại nghĩ là tuyệt vời

Smalltalk - bởi vì đây là ý nghĩa của OO

Erlang (hoặc ngôn ngữ diễn viên khác) để hiểu diễn viên

Haskell - để hiểu Monads

Javascript - bởi vì nó ở khắp mọi nơi và cần thiết cho kịch bản trình duyệt

Một trong Python / Ruby / Perl (nhưng thực sự không thành vấn đề) - vì vậy bạn biết một ngôn ngữ kịch bản cấp cao, hiện đại, phổ biến với sự hỗ trợ thư viện tốt sẽ như thế nào

SQL - vì vậy bạn có thể nói chuyện với cơ sở dữ liệu quan hệ

Prolog - bởi vì bạn vẫn cần phải thổi bay tâm trí của bạn


2
Lý do tôi học Haskell là vì tôi muốn học một ngôn ngữ chức năng (trái ngược với tất cả các ngôn ngữ thủ tục mà tôi biết trước đây), và Haskell dường như đối với tôi như đứa trẻ áp phích cho các ngôn ngữ chức năng. Lý do tôi thích Haskell bây giờ là vì nó là ngôn ngữ cấp cao, có hỗ trợ thư viện tốt và nhanh (khoảng 50% nhanh như C, nhưng nó phụ thuộc vào những gì bạn đang làm). Ngoài ra, tôi thích có thể viết một loạt mã và tất cả đều hoạt động lần đầu tiên hoặc lần thứ hai (sau khi biên dịch nó).
Joey Adams

Nó chắc chắn quan trọng cho dù bạn học Perl, Python hay Ruby. Ví dụ, Python có danh sách hiểu, không tồn tại trong Ruby và Ruby có các mô-đun, không tồn tại trong Python. Bạn có thể nhân đôi kết quả của cả hai thứ bằng một trong hai ngôn ngữ, nhưng học một trong hai thứ sẽ ảnh hưởng đến suy nghĩ của bạn theo những cách rất khác nhau.
philosodad

1
Prolog - bởi vì bạn vẫn cần phải thổi bay tâm trí của mình - Nhận xét tốt nhất từng có +1
Zachary K

1
Tôi nghĩ rằng lợi ích chính của việc học haskell không nhất thiết phải nắm bắt được sự trừu tượng của đơn nguyên, mà là để tìm hiểu những lợi ích của một hệ thống loại mạnh mẽ và mạnh mẽ THỰC SỰ. Nếu ý tưởng của một "hệ thống kiểu tĩnh" là một cái gì đó giống như Java, thì haskell sẽ lấy đi hơi thở của bạn.
sara

4
  • Go (ngôn ngữ lập trình cấp hệ thống mới với sự hỗ trợ tốt cho đồng thời và các khái niệm không quá truyền thống)
  • Lua (ngôn ngữ kịch bản đơn giản, biểu cảm, mô hình cực kỳ linh hoạt và cân bằng bắt buộc, lập trình chức năng và meta, cho phép OOP)
  • D (C / C ++ được thực hiện đúng)
  • Groovy (Tính biểu cảm và lập trình meta trong thế giới Java)
  • Eiffel (Thiết kế theo hợp đồng và cách tiếp cận khác với OOP)
  • Prolog (Ngôn ngữ lập trình logic)

1
Tại sao ai đó nên học những thứ này? ( Tại sao có một chút thú vị ở đây, có một vài ngôn ngữ lập trình thực sự độc đáo: mọi mô hình đã được thực hiện hơn một lần.)
Richard

Thật thú vị khi thấy rằng bạn nghĩ DC được thực hiện đúng. Cá nhân khi tôi sử dụng C, tôi chủ yếu sử dụng nó cho một số nội dung cấp thấp mà tôi không muốn bất kỳ sự trừu tượng OOP nào cả.
Jonas

@Jonas: Chúng ta vẫn cần một ngôn ngữ đơn giản được thực hiện đúng, trong khi ngôn ngữ này không đến D có thể được sử dụng độc đáo theo cách bắt buộc. Đối với bạn, D2 có nhiều chức năng hơn, khi hoàn thành có thể sẽ là triển khai tốt nhất của mô hình đối với một ngôn ngữ chủ yếu bắt buộc.
Maniero

làm đúng là chủ quan. Đối với tôi Erlang là một ngôn ngữ rất nhỏ và đơn giản được thực hiện đúng. Phần còn thiếu là một khung GUI tuyệt vời và nếu bạn làm các hệ thống phức tạp, có thể bạn sẽ muốn một ngôn ngữ gõ tĩnh hơn.
Jonas

@Jonas: Erlang là một ngôn ngữ tốt nhưng không phải C / C ++ được thực hiện đúng, nó hoàn toàn khác.
Maniero

2

1) Prolog: Nó hoàn toàn khác với tất cả các ngôn ngữ bắt buộc bạn đã sử dụng cho đến nay và nó sẽ thay đổi cách bạn nghĩ về các vấn đề

2) Lisp: không có nó, bạn cũng có thể sử dụng Vi

3) Erlang: Một lần nữa, nó hoàn toàn khác biệt, cũng có vẻ khá thời trang.

4) Một cái gì đó từ Turing Tarpit (ví dụ Brainfuck), và có thể viết một trình biên dịch hoặc trình thông dịch cho nó: Tôi không thể nghĩ ra lý do để làm điều này, nhưng cảm giác đó là một ý tưởng tốt.


1
"Không có nó, bạn cũng có thể sử dụng Vi". Tôi ngạc nhiên không ai nhặt được thứ đó :)
Gauthier

Tôi dùng vi! (Vâng gvim)
Zachary K

1

Bên cạnh những người bạn đã liệt kê,

Haskell, F #, Clojure, OCaml, Lua, Go, D, Erlang, Mục tiêu C.


1

Mặc dù tôi đồng ý rằng việc học các ngôn ngữ mới là điều tốt (và thậm chí bắt buộc thông qua một sự nghiệp lâu dài), tôi nghĩ rằng một năm là quá nhiều trong năm mười năm đầu tiên. Những gì tôi muốn thấy là một người có trình độ kinh nghiệm này học những điều mới về ngôn ngữ họ đã biết. Đến một lúc nào đó bạn cần chiều sâu cũng như bề rộng kiến ​​thức. Vì vậy, bạn có thể viết một cấu trúc If bằng 12 ngôn ngữ, rất lớn. Tôi thà thấy một người thực sự đào sâu và trở thành chuyên gia trong ít nhất một điều. Và sau đó vài năm trở thành chuyên gia về một thứ khác. Trải qua hơn 30 năm sự nghiệp, tôi muốn ai đó có kiến ​​thức chuyên sâu không chỉ là những điều cơ bản trong rất nhiều thứ.

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.