Có đáng để học ngôn ngữ thực nghiệm không? [đóng cửa]


25

Tôi là một lập trình viên trẻ, mong muốn làm việc trong lĩnh vực này một ngày nào đó với tư cách là một lập trình viên. Tôi biết Java, VB.NET và C #. Tôi muốn học một ngôn ngữ mới (với tư cách là lập trình viên, tôi biết rằng việc mở rộng những gì tôi biết là rất có giá trị - để học các ngôn ngữ khiến bạn nghĩ khác đi). Tôi đã xem trực tuyến để xem những ngôn ngữ phổ biến. Mọi người đều biết C và C ++ (ngay cả những người buôn lậu biết rất ít về máy tính nói chung), vì vậy tôi nghĩ, có lẽ tôi nên thúc đẩy C.

C và C ++ là tốt đẹp nhưng họ đã cũ. Những thứ như Haskell và Forth (v.v., v.v.) đã cũ và mất dần sự nổi tiếng. Tôi sợ học C (hoặc thậm chí C ++) vì lý do tương tự. Java cũng khá cũ và chậm vì nó được chạy bởi JVM và không được biên dịch thành mã gốc.

Tôi đã là một nhà phát triển Windows trong một thời gian dài. Gần đây tôi đã bắt đầu sử dụng Java - nhưng chỉ vì nó linh hoạt hơn và có thể lan rộng đến những nơi khác. Vấn đề là nó không giống một ngôn ngữ có thể sử dụng được vì những lý do sau:

  • Mục đích được sử dụng nhiều nhất là dành cho ứng dụng web và ứng dụng điện thoại di động (cụ thể là Android)
  • Theo như các sản phẩm thực tế được tạo ra từ nó, điều duy nhất nảy ra trong đầu là Netbeans, Eclipse (được tạo ra và IDE với ngôn ngữ mà IDE dành cho - nó giống như tạo một trang web để viết HTML / CSS / Javascript) và Minecraft Điều này xảy ra là vui vẻ nhưng chậm trễ và lưỡng cực như xa máy tính. ủng hộ.
  • Ngoài ra, nó được sử dụng cho các máy chủ nhưng quái - tôi không chỉ muốn tạo / cấu hình máy chủ .

Các ngôn ngữ .NET là tốt, tuy nhiên:

  • Mọi người cười nếu tôi thậm chí đề cập đến VB.NET hoặc C # trong một cuộc trò chuyện nghiêm túc.
  • Nó không phải là đa nền tảng trừ khi bạn sử dụng MONO (vẫn đang trong quá trình phát triển và có một số cải tiến cần thực hiện).
  • Thiếu công cụ cấp thấp bởi vì, giống như Java với JVM, nó được CLR chạy / quản lý.

Suy nghĩ đầu tiên của tôi là học một cái gì đó như C và sau đó sử dụng nó để chuyển sang C ++ (chỉ để đảm bảo rằng tôi sẽ có một sự hiểu biết / cơ sở mạnh mẽ), nhưng như tôi đã nói trước đó, nó ngày càng già đi theo từng phút.


Những gì tôi đã nhìn vào

Fantom trông đẹp. Nó giống như một người trung gian tốt bụng giữa hai ngôn ngữ yêu thích của tôi và thậm chí cho phép tôi xuất bản giữa hai ngôn ngữ này với nhau, nhưng, không giống như những gì tôi muốn, nó biên dịch sang CLR hoặc JVM (tùy thuộc vào những gì bạn xuất bản nó) thay vì nó là một trình biên dịch hoàn chỉnh .

D cũng có vẻ tốt. Nó có vẻ như một ngôn ngữ rất có ích và từmultiplenguồn nó xuất hiện để thực sự được tốt hơn so với C / C ++. Tôi sẽ nhảy ngay với nó, nhưng tôi vẫn không chắc về thành công của nó bởi vì rõ ràng nó không phải là chủ đạo ở thời điểm này.

Có một vài người khác trông khá đẹp, tập trung vào những thứ khác như Opa với phát triển web và Go by GOOGLE.


Câu hỏi của tôi

Có đáng để học những ngôn ngữ "thử nghiệm" này không? Tôi đã đọc những câu hỏi khác nói rằng nếu bạn không liên tục học ngôn ngữ và mở cho tất cả các ngôn ngữ mà bạn không có tư duy đúng để lập trình. Tôi hiểu điều này và tôi vẫn có thể không hoàn toàn hiểu được nó, nhưng sự thật, nếu một ngôn ngữ sẽ không trở thành xu hướng, tôi có nên dành thời gian để học thứ khác không? Tôi không muốn học ngôn ngữ lập trình cũ (hoặc sắp có cũ). Tôi biết rằng nhiều người coi đây là một điều quan trọng, * nhưng liệu có ai trong số các bạn thực sự cân nhắc (giả sử bạn chưa biết) FORTRAN? Mục tiêu của tôi là duy trì hiện tại để đảm bảo rằng tôi sẽ thành công trong tương lai.


Khước từ

Vâng, tôi là một lập trình viên trẻ, vì vậy tôi có thể đưa ra nhiều tuyên bố ngây thơ trong câu hỏi của mình. Hãy sửa cho tôi bất cứ điều gì! Tôi phải bắt đầu học ở đâu đó vì vậy tôi chắc chắn rất nhiều kiến ​​thức của tôi đủ sơ sài để gây ra những phát biểu không chính xác hoặc sai sót trong suy nghĩ của tôi. Hãy để lại bất kỳ cảm xúc bạn có trong các ý kiến.


Kết quả...

Tôi thực sự ngạc nhiên bởi những phản hồi tuyệt vời, hầu hết trong số họ đều chỉ ra những hiểu lầm và đánh giá sai của tôi. Tôi đã học được khá nhiều từ điều này và tôi rất vui khi hy vọng sử dụng mọi thứ tôi đã học! Có lẽ tôi sẽ bắt đầu học Haskell tiếp theo ( ngôn ngữ không quá cũ, mặc dù đã hơn 20 tuổi - hahaha ) và sau đó bắt đầu xem xét một số lựa chọn khác xung quanh tôi.

Cảm ơn


10
"tìm hiểu tất cả năm Python, C / C ++, Java, Perl và LISP" (Eric Raymond, Làm thế nào để trở thành một hacker -> Kỹ năng hack cơ bản -> 1. Tìm hiểu cách lập trình. )
gnat

7
Lưu ý rằng chỉ đơn giản là "cũ" không có nghĩa là "xấu" theo mặc định. Một số chương trình tuyệt vời nhất cho đến nay đã được thực hiện trên C64 30 năm trước.

8
FWIW hầu như mọi ngôn ngữ đều sử dụng - nếu ai đó cười nhạo bạn vì đã sử dụng hầu hết mọi ngôn ngữ (Java chậm, .Net dành cho chó M $, Haskell không thực tế, C ++ quá cũ, v.v.) cười lại với họ và nói với họ về việc sử dụng công cụ phù hợp cho công việc;)
Martin

6
Bạn đã nhận được "Haskell và ... đã mất sự nổi tiếng" từ đâu?
leftaroundabout

13
Đối với một lập trình viên trẻ, bạn có quá nhiều giả định. Loại bỏ chúng, chúng đang làm phiền tâm trí bạn.
Matthieu M.

Câu trả lời:


29

Điều quan trọng với việc học các ngôn ngữ khác nhau không phải là học ngôn ngữ, mà là tiếp xúc với các cách tiếp cận khác nhau đối với các vấn đề. Các công cụ cho hộp công cụ như nó đã được.

Một điều cần lưu ý là Haskell không đặc biệt cũ và nó thực sự là một ứng cử viên rất tốt cho một người chỉ quen với các ngôn ngữ chính. Ngay cả một ngôn ngữ rất cũ như Lisp cũng rất hữu ích để học do ảnh hưởng của nó đối với mọi thứ.

Ngoài ra, Java và .Net không được diễn giải và tôi hy vọng bạn đang đưa ra một số giả định không chính xác dựa trên việc gắn nhãn sai đó.


Rất tiếc, xin lỗi về vấn đề được giải thích. Tôi đã trộn hai tuyên bố oxymoronic khác nhau ở đó. Tôi đã sửa nó trong câu hỏi.
Freesnöw

19
Vâng, Haskell lớn hơn, ví dụ, Java, mặc dù. Nhưng, vâng, điều đó không có nghĩa là nó đã lỗi thời. Trên thực tế, hệ thống kiểu của nó vẫn còn hơn Java khoảng 2 thập kỷ.
Jörg W Mittag

5
@ JörgWMittag: Tôi nghĩ rằng điều đó nói nhiều về Java hơn là về Haskell.
Tikhon Jelvis

1
Tôi chương trình trong chỉ Haskell và Java ... nhưng phải công bằng, không có ngôn ngữ chủ đạo có một hệ thống kiểu bất cứ nơi nào gần tốt như Haskell. (Và tôi phải nói rằng, OP ..._ lot_ nhiều thứ hơn những gì bạn đề cập chạy trên Java.)
Louis Wasserman

1
Haskell đã hơn 20 tuổi và Haskell tiêu chuẩn cũng cũ như C ++ tiêu chuẩn (cả hai đều từ năm 1998).
fredoverflow

23

Giữ dáng: Tập luyện thường xuyên

Tập luyện giúp hoàn hảo hơn.

Bạn viếtđọc càng nhiều mã , bạn càng tiến gần đến sự giác ngộ / thành thạo như một lập trình viên / nhà phát triển / kỹ sư phần mềm / guru / ninja / thợ thủ công / hacker / buzzword-of-sự lựa chọn. Bằng cách không chỉ mã hóa và đọc nhiều hơn, mà còn thử các cách viết mã mới của chúng tôi, bạn vẫn còn cởi mở hơn (hy vọng).

Đề nghị đọc:

Tìm hiểu về mô hình mới và các tính năng ngôn ngữ

Có thể bạn sẽ không thể dịch những gì bạn sử dụng trong Super-Language-X hoàn toàn mới sang Ngôn ngữ doanh nghiệp của bạn, nhưng có lẽ bạn sẽ có thể nhận ra khi nào nó có thể phù hợp. Có lẽ bạn sẽ có thể biết khi nào nên tích hợp một công nghệ hoặc ngăn xếp khác nhau trong dự án của bạn để phù hợp với một mục đích cụ thể. Hoặc có thể bạn sẽ biết cách sử dụng các tính năng của ngôn ngữ Y để mô phỏng tính năng thú vị của ngôn ngữ X và cấu trúc lại mã của bạn để hưởng lợi từ nó (và có khả năng khai sáng các đồng nghiệp khác trên đường đi).

Chẳng hạn, bạn có thể đã phát hiện ra các nguyên tắc FP thú vị và muốn điều chỉnh chúng theo Java, được cho là không phải là thiết kế của FP .

Đề nghị đọc:

Hãy là một Jack của tất cả các giao dịch ... Master of some?

Bạn không biết ngôn ngữ nào sẽ trở thành chủ đạo khi ở giai đoạn "thử nghiệm" đó, vì vậy bạn không nên lo lắng quá nhiều về việc đặt cược vào một trong số chúng. Rất có thể, những người khác sẽ đặt cược tương tự và sẽ bị thu hút khi họ nhìn thấy những thứ này hiển thị trong hồ sơ của bạn. Thêm một công cụ vào vành đai của bạn. Trong trường hợp của chúng tôi, cuối cùng không có vấn đề gì với việc nó nặng bao nhiêu.

Chắc chắn, bạn không thể trở thành bậc thầy của tất cả các giao dịch. Nhưng bạn có thể là một bậc thầy của một người, và khá giỏi trong phần còn lại. Bạn đang học một nghề thủ công, và chúng ta là nhiều mặt. Tập thể dục thường xuyên, tham dự hội thảo, lấy một cuốn sách, viết một dự án thú cưng mới và những thứ tương tự khác là cách của chúng tôi để theo kịp tốc độ thay đổi ngày càng tăng trong lĩnh vực của chúng tôi.

Đề nghị đọc:

Luôn thích nghi

Nếu bạn không học cách thích nghi, thật khó để làm điều đó khi bạn cần. Bằng cách không ngừng học hỏi những điều mới, bạn sẽ ngày càng tốt hơn mỗi lần chọn đồ mới (miễn là bạn không gò bó bản thân trước những thử thách rất giống nhau).

Nó giống như bài hát Oasis "Vẫn trẻ trung" : Vẫn trẻ trung và bất khả chiến bại .

Nếu bạn có thể thích nghi, bạn có thể sống sót.

Đề nghị đọc:

Luôn nhìn thấy: Hiểu Radar của Cơ quan tuyển dụng

Họ sử dụng các từ khóa và công nghệ làm hộp kiểm. Chúng tôi sử dụng chúng như những chậu mật ong cho những nhà tuyển dụng thiếu suy nghĩ.

Nó hoạt động cả hai cách. Miễn là bạn thực sự biết công cụ của mình, thì có rất nhiều thứ trong hồ sơ của bạn là tốt. Nó cho thấy khả năng thích ứng và bề rộng của kiến ​​thức. Thêm vào đó, nếu bạn thực sự thành thạo một vài trong số này, và khá tốt trong một vài người khác, nó cho phép bạn điều chỉnh các phiên bản khác nhau của sơ yếu lý lịch cho các vị trí và công việc khác nhau.


Các chủ đề SE hữu ích khác


Nếu bạn sẽ đọc Paul Graham's Beating the Average, (hoặc bất cứ điều gì khác mà anh ấy viết về chủ đề lập trình, cho vấn đề đó,) hãy lấy nó bằng một hạt muối. Rất nhiều điều ông nói về thực hành lập trình là 50% đúng và 50% sai một cách nguy hiểm.
Mason Wheeler

@MasonWheeler: Nó gây tranh cãi, giống như nhiều điều bạn có thể tìm thấy ở đó từ những "đại gia" nổi tiếng trong ngành, tự tung hô hay không. Nhiều người cũng không đồng ý với các tác phẩm của Zed Shaw, giống như những người khác của Norvig. Tất cả mọi thứ là để được tiếp cận với một tâm trí phê phán: tôi coi nó như một sự cho trước cho bất cứ điều gì, và giả định (hy vọng) những người ở cấp độ này cũng vậy. Rất nhiều nhà văn sẽ trình bày các chủ đề theo tình huống cụ thể, không phù hợp với mọi người. Trên thực tế, bạn cũng thấy điều này ở đây hàng ngày trong các câu trả lời, nhưng bằng lực lượng "phổ biến", họ sẽ được tôn sùng là câu trả lời "tốt nhất". Tuy nhiên, đó là thông tin.
haylem

8

Để mở rộng câu trả lời của Telastyn, thực sự là về việc tiếp xúc với các mô hình lập trình khác nhau . Ví dụ, nó không thực sự là về học lập trình logic, mà là:

  • học để học (thực hành học các kỹ năng mới)
  • rèn luyện trí não của bạn để suy nghĩ theo những cách mới lạ
  • có thể nhận được một số kiến ​​thức ít phổ biến (hoặc thậm chí bí truyền) mà ít người có và có thể có ích
    • hoặc ít nhất là gây ấn tượng với họ bằng kiến ​​thức kỹ thuật của bạn :)
  • và tất nhiên, nó cung cấp cái nhìn sâu sắc kỹ thuật có giá trị. Tại sao C # phổ biến hơn D? C ++ có thể làm mọi thứ mà D có thể làm không? D có thể làm nhiều hơn, hoặc nó giống như cú pháp hơn?

http://skilldrick.co.uk/2011/02/why-you-should-learn-brainfuck-or-learn-you-a-brainfuck-for-great-good/

Một lý do tốt khác để học brainf * ck là để hiểu ngôn ngữ lập trình Turing-Complete cơ bản có thể như thế nào. Một cuộc tranh luận phổ biến khi các lập trình viên so sánh các ngôn ngữ là, tất cả đều là Turing-Complete, nghĩa là bất cứ điều gì bạn có thể làm bằng một ngôn ngữ bạn có thể làm bằng ngôn ngữ khác. Khi bạn đã học được Brainf * ck, bạn sẽ hiểu việc sử dụng ngôn ngữ hoàn chỉnh Turing khó như thế nào và cách tranh luận đó không có nước.

http://norvig.com/21-days.html (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ợ các đặc tả khai báo (như các mẫu Prolog hoặc C ++), một ngôn ngữ có hỗ trợ coroutines (như Icon hoặc Scheme) và một hỗ trợ song song (như Salu).


7

Suy nghĩ đầu tiên của tôi là học một cái gì đó như C và sau đó sử dụng nó để chuyển sang C ++ (chỉ để đảm bảo rằng tôi sẽ có một sự hiểu biết / cơ sở mạnh mẽ), nhưng như tôi đã nói trước đó, nó ngày càng già đi theo từng phút.

Chà, đây là một đống ngụy biện khổng lồ. Những người biết C gặp khó khăn hơn khi học C ++, bởi vì hầu hết mọi thứ họ nghĩ rằng họ biết về cách sử dụng ngôn ngữ là một đống sai lầm khổng lồ. Hầu như không có C thành ngữ nào thậm chí là C ++ tốt từ xa. Bạn tốt hơn hết chỉ đơn giản là học C ++ từ đầu. Những người như tôi, những người tình nguyện dành thời gian của họ để giúp đỡ những người khác học C ++, họ dành phần lớn thời gian để cố gắng dạy mọi người bỏ thói quen C.

Đối với sự nổi tiếng, tốt, C ++ đang trải qua một chút tái xuất gần đây. Mọi người nhận thấy rằng trên thực tế, hiệu năng rất quan trọng và bạn không thể chạy mọi thành phần dưới dạng được quản lý và Modern C ++ (đặc biệt là với C ++ 11) hoàn toàn không giống như rác C mà họ nghĩ đó là Và nó thực sự không tệ chút nào. Nó không thực sự già đi. Nó đang trở nên mới hơn. Tiêu chuẩn mới là một bản nâng cấp lớn - và không có ngôn ngữ thay thế phù hợp, hiện tại hoặc trong đường ống, cho nhiều lĩnh vực C ++ được sử dụng hiện nay. Điều này không phải là ít nhất vì không có ngôn ngữ nào có khả năng tương tác C ++ tốt (ngay cả chính C ++), khiến việc di chuyển khỏi các cơ sở mã C ++ hiện tại trở nên khó khăn.

Mọi người cười nếu tôi thậm chí đề cập đến VB.NET hoặc C # trong một cuộc trò chuyện nghiêm túc.

Nhận người mới. AFAIK, VB.NET không thực sự tồn tại vì bất kỳ lý do nào ngoại trừ việc giúp di chuyển khỏi VB6 và không thực sự là mục tiêu xứng đáng theo đúng nghĩa của nó, nhưng C # là ngôn ngữ thực sự. Nó giống như Java, ngoại trừ sau đó họ đã thêm các tính năng ngôn ngữ thực tế và một số thư viện đẹp. C # là một rất phổ biến, hỗ trợ tốt ngôn ngữ với các công cụ rất tốt trong VS, mà không hút nặng, và là một chất rắn, nếu không nói là vượt trội, điều để học hỏi.

Nó không phải là đa nền tảng trừ khi bạn sử dụng MONO (vẫn đang trong quá trình phát triển và có một số cải tiến cần thực hiện).

MONO khá ổn định. Thêm vào đó, cuối cùng, 90% người tiêu dùng máy tính để bàn (hoặc là 80%?) Chạy Windows ngay bây giờ. Nếu bạn sẽ phát triển một ứng dụng máy tính để bàn, đó là một câu hỏi mở về việc liệu những người không phải là người dùng Windows có đáng để dành thời gian hỗ trợ hay không, ngay cả khi bạn sử dụng ngôn ngữ đa ngôn ngữ.

Cuối cùng, bạn có thể nhận được rất nhiều từ việc học một ngôn ngữ như C ++ hoặc Haskell, tập trung vào công nghệ trình biên dịch mạnh hơn là thời gian chạy lớn.

Đừng chọn PHP. Điều duy nhất bạn có thể học được từ đó là làm thế nào để không xây dựng một ngôn ngữ.


1
Một tỷ lệ đáng kể của các bổ sung gần đây cho tiêu chuẩn C ++ chỉ tồn tại - giống như một tỷ lệ bổ sung đáng kể trong thời gian qua - để vá các lỗ hổng C ++ hiện có. Ví dụ, các tham chiếu Rvalue thêm một loạt các độ phức tạp cực cao để giải quyết một loạt các vấn đề về hiệu năng và độ phức tạp liên quan đến các hàm tạo sao chép, chỉ tồn tại vì C ++ cho phép các đối tượng được sử dụng làm các loại giá trị, hoàn toàn sai 100% và có một lý do chính đáng tại sao không có ngôn ngữ OO khác làm điều đó.
Mason Wheeler

@MasonWheeler Ít nhất C #, D và Eiffel cho phép các đối tượng dưới dạng các loại giá trị. Và RAII rất tốt cho lập trình hệ thống!
fredoverflow

@MasonWheeler: Tham chiếu Rvalue cũng cho phép chuyển tiếp hoàn hảo và các loại chỉ di chuyển. Hiệu suất chỉ là một trong ba nguyên nhân chính cho sự giới thiệu của họ. Đối tượng gõ giá trị là tốt. Thêm vào đó, tất nhiên, bạn có thể viết các đối tượng gõ tham chiếu của riêng bạn trong C ++ tất cả những gì bạn thích.
DeadMG

Ngoài ra, thật buồn cười là ngay cả với tất cả những vấn đề về hiệu năng đó, C ++ vẫn là ngôn ngữ nhanh nhất.
DeadMG

1
@FredOverflow: Trong C #, tất cả các đối tượng là loại tham chiếu. Các cấu trúc có thể là các loại giá trị, nhưng các đối tượng thì không, và đây là một lý do rất chính đáng: nếu các đối tượng được sử dụng làm các loại giá trị, bạn ném một chiếc mỏ lết khỉ lớn vào sự kế thừa và đa hình và cuối cùng phải sử dụng tất cả các loại hack xấu xí giống như các hàm tạo sao chép, trong đó việc gán (hoặc truyền) một đối tượng con cháu cho một biến kiểu cha không thực sự gán đối tượng đó. Nó hoàn toàn thay thế Liskov, đó là toàn bộ điểm sử dụng OOP ở nơi đầu tiên. Đó là một ý tưởng khủng khiếp, và tôi rất vui vì nó không bao giờ bắt kịp.
Mason Wheeler

6

Một vài bình luận về những gì bạn đã nói ...

1) Mọi lập trình viên nên học C, ngay cả khi nó đã cũ. Đó là một ngôn ngữ tuyệt vời để đến gần máy. Từ lời khuyên của Joel cho sinh viên CS ....

Học C trước khi tốt nghiệp

Phần hai: C. Lưu ý tôi không nói C ++. Mặc dù C ngày càng trở nên hiếm, nhưng nó vẫn là ngôn ngữ chung của các lập trình viên làm việc. Đó là ngôn ngữ họ sử dụng để giao tiếp với nhau và quan trọng hơn, nó gần với máy hơn các ngôn ngữ "hiện đại" mà bạn sẽ được dạy ở trường đại học như ML, Java, Python, bất cứ thứ gì hợp thời trang mà họ dạy ngày Bạn cần dành ít nhất một học kỳ để đến gần máy hoặc bạn sẽ không bao giờ có thể tạo mã hiệu quả bằng các ngôn ngữ cấp cao hơn. Bạn sẽ không bao giờ có thể làm việc trên các trình biên dịch và hệ điều hành, đó là một số công việc lập trình tốt nhất xung quanh. Bạn sẽ không bao giờ được tin tưởng để tạo ra kiến ​​trúc cho các dự án quy mô lớn. Tôi không quan tâm bạn biết bao nhiêu về việc tiếp tục và đóng cửa và xử lý ngoại lệ: nếu bạn không thể giải thích tại sao while (* s ++ = * t ++); sao chép một chuỗi, hoặc nếu đó không phải là điều tự nhiên nhất trên thế giới đối với bạn, thì, bạn đang lập trình dựa trên sự mê tín, theo như tôi quan tâm: một bác sĩ y khoa không biết giải phẫu cơ bản, đã qua kê đơn dựa trên những gì các bé bán hàng dược phẩm nói sẽ làm việc.

2) Ngôn ngữ có thể tốt cho việc học tập tư duy, ngay cả khi chúng không được sử dụng phổ biến. Tìm hiểu Đề án (hoặc LISP) để hiểu lập trình chức năng, ngay cả khi nó không hợp thời trang. Từ một bài viết khác trên diễn đàn này .

Xin chúc mừng, có vẻ như (với tôi) như bạn có thể sẽ đến một trong số ít các trường còn lại thực sự cố gắng dạy khoa học máy tính. Học tập như một ngôn ngữ đầu tiên là (IMO) là một điều rất tốt. Không, nó không mang tính thương mại như nhiều người khác, nhưng đó là một ngôn ngữ tuyệt vời để tìm hiểu bản chất thực sự của khoa học máy tính. - Jerry Coffin ngày 20 tháng 10 năm 11 lúc 3:32

C, C ++ và Java là sản phẩm phụ của ngành khoa học máy tính. Toàn bộ gốc rễ của khoa học là trong khoa học máy tính. Các ngôn ngữ trong sử dụng thương mại có liên quan nhiều đến khoa học máy tính như McDonalds phải làm với ẩm thực. - JasonTrue ngày 20 tháng 10 'lúc 5:30

Những kẻ này là chính xác; bạn đang nhầm lẫn lập trình máy tính với khoa học máy tính - như Dijkstra đã nói, điều đó giống như việc xây dựng kính viễn vọng khó hiểu với thiên văn học. Đề án là về ngôn ngữ tốt nhất dành cho việc học các khái niệm cơ bản trong khoa học máy tính. Nếu bạn đang mong đợi rằng lấy bằng khoa học máy tính là học cách viết các ứng dụng kinh doanh trực tuyến bằng Java, thì bạn có thể đã đăng ký vào chương trình sai. - Eric Lippert ngày 20 tháng 10 năm 11 lúc 7:40

Hầu như tất cả các nhà phát triển mà tôi biết đều đã học C / C ++. Bạn không cần trường đại học cho điều đó. - mouviciel ngày 20 tháng 10 năm 11 lúc 7:48

Vì lý do tương tự mà các khóa học động vật học dạy sinh học tiến hóa, giải phẫu và hành vi động vật hơn là làm thế nào để nhét chuồng voi - jk. 20 tháng 10 '11 lúc 7:58

Bây giờ mặc dù tấn công tiền đề ban đầu của bạn, tôi nghĩ bạn nên được khen ngợi vì sự tò mò của bạn. Quá nhiều người trở nên lỗi thời do thiếu tò mò. Tận dụng sự phát triển cá nhân của bạn là một dấu hiệu tuyệt vời cho thấy bạn sẽ phát triển tốt. Những người học hỏi nhiều nhất là những người sẵn sàng tiếp tục hỏi mọi thứ hoạt động như thế nào.


1
"Hầu như tất cả các nhà phát triển mà tôi biết đều đã học C / C ++. Bạn không cần học đại học cho điều đó.": Tương tự ở đây. Tại trường đại học của tôi, họ đã giao cho chúng tôi các bài tập về C, nhưng không cho chúng tôi khóa học C. Họ chỉ mong chúng tôi sinh viên Khoa học Máy tính đi lấy một cuốn sách và học nó.
Giorgio

1
Phải học C thì khá là cực hình. Sự đồng cảm của tôi.
DeadMG

2
Thật ra việc học C là phần dễ dàng, sự tra tấn thực sự bắt đầu khi chúng tôi phải chuyển sang C ++. ;-)
Giorgio

3

MỌI ngôn ngữ bạn học sẽ thay đổi trong 5 năm tới. Đó không phải là về việc học một ngôn ngữ mà bạn nghĩ có thể xuất hiện trong một thời gian, mà là học CÁCH để học. Càng tiếp xúc nhiều hơn với việc học ngôn ngữ và quá trình học ngôn ngữ đó sẽ giúp bạn rất nhiều về lâu dài!

Công ty cuối cùng tôi làm việc đã sử dụng ngôn ngữ riêng của họ. Nó tương tự như hình ảnh cơ bản nhưng không giống nhau. Chỉ cần thực tế là tôi biết các ngôn ngữ khác, tôi đã có thể chọn ngôn ngữ của họ nhanh hơn rất nhiều so với các nhân viên khác.

Tôi đã học tiếng Nhật sau khi tôi học C ++, BASIC, Pascal và tôi có thể nói rằng học ngôn ngữ máy tính và ngoại ngữ cũng có những kỹ năng tương tự. Những kỹ năng có thể bị mất hoặc mài giũa. Nếu bạn có ổ đĩa, hãy tiếp tục và học các ngôn ngữ mới!

(ps. đối với việc học FORTRAN hoặc lắp ráp, tôi nghĩ rằng ít nhất là có giá trị trong một học kỳ của các ngôn ngữ cũ. Nó khiến bạn suy nghĩ về những thứ bạn chỉ cần sử dụng trong các ngôn ngữ mới hơn, những thứ như cờ, cấp phát bộ nhớ và như vậy .)


3

Bạn nên học càng nhiều ngôn ngữ "cũ" càng tốt, nếu bạn muốn trở thành một lập trình viên. Bắt đầu với Lisp, hiểu rõ về Forth, chú ý đến sự phát triển của tất cả các ngôn ngữ Wirth, tiến hóa của Fortran, trỗi dậy và sụp đổ của Prolog, lẻn vào hệ sinh thái Ada bí mật, lấy vũ khí bí mật của bạn từ việc học Occam. Theo đuổi "dòng chính" là điều ngu ngốc nhất mà một lập trình viên khao khát có thể làm.


+1: Tôi hoàn toàn đồng ý. Nhiều ý tưởng thú vị tôi có được khi thử nghiệm các ngôn ngữ ít chính thống hơn như Haskell, Scheme, Scala, SML, v.v.
Giorgio

2

Tôi đồng ý với bạn về phần tiếp xúc của mọi thứ. Mặc dù tôi biết Java, C, C ++, Javascript, Python, Ruby và một chút .NET (chủ yếu vì tôi ghét bất cứ điều gì M $ <- ý kiến ​​cá nhân) tôi sẽ phải nói rằng tôi thực sự thích lập trình trong D.

D có một bộ tính năng thực sự tốt (hầu hết chúng được triển khai bằng C ++ / Java (ngôn ngữ có sự trừu tượng của lớp), v.v.) nhưng một điều tôi hoàn toàn yêu thích nhất là khái quát và đại biểu (giúp dễ dàng thực hiện các cuộc gọi lại). Ngoài ra, bạn có một cú pháp đơn giản hơn nhiều để đối phó với C ++. D có một trình thu gom rác thực sự hiệu quả, mặc dù bạn có thể chọn tự xử lý bộ nhớ (đặc biệt là khi giao tiếp với các mô-đun C / C ++). Mặc dù D không có vô số mô-đun do người dùng đóng góp nên không phải là rào cản cho mục nhập. Bạn có thể dễ dàng giao tiếp với các thư viện C / C ++ hiện có (rất trung thành), do đó làm cho nó trở nên dư thừa cho nhu cầu của các mô-đun.

D có thư viện tiêu chuẩn riêng (Phobos) phục vụ nhu cầu cho tất cả các vấn đề lập trình phổ biến. Ngoài ra còn có một thư viện thay thế ( Tango-D2 ) mà bạn có thể sử dụng với Phobos hoặc chính nó. Nếu bạn là nhà phát triển web và cần viết một máy chủ dựa trên sự kiện, Tango có một bản tóm tắt Selector đẹp (tango.io.Selector chỉ để chọn (), poll (), epoll ()). Tôi đã tìm thấy nó để thực hiện thậm chí còn tốt hơn libev.


Không phải là tôi sẽ không chấp nhận việc học D, nhưng với một người đã biết đánh máy tĩnh, OO và các ngôn ngữ cấp thấp, thủ tục, chắc chắn sẽ đáng để học một ngôn ngữ nhấn mạnh một mô hình khác hoặc gần với kim loại hơn một chút. Cũng không có nhiều thử nghiệm về D.
leftaroundabout

1
Đã đồng ý. Tôi nghĩ rằng câu hỏi của OP tập trung vào "thử nghiệm" là một điều chưa ổn định / ủng hộ hỗ trợ doanh nghiệp / không phải là vấn đề chính. Và ngay cả khi bạn đi "thực nghiệm" việc thực hiện các mô hình khác nhau, tôi đoán chỉ có vài mô hình ngoài kia. Và hầu hết các ngôn ngữ thực hiện cái này hay cái kia. Sau đó, chúng ta đến với ngôn ngữ nào tốt hơn / nhanh hơn / dễ sử dụng hơn / tốt nhất cho công việc trong tay. Những yếu tố này khác nhau từ lập trình viên đến lập trình viên.
Shripad Krishna

1

Ngôn ngữ được phát triển để giải quyết các vấn đề trong một số loại miền (ít nhất là lúc đầu). Nếu bạn chưa gặp phải vấn đề nào mà các công cụ của bạn không thể giải quyết theo cách mà bạn cảm thấy thoải mái, bạn sẽ đập một tấm ván gỗ để mong trở thành thợ mộc. Cố gắng hiểu các loại vấn đề mà các ngôn ngữ đang cố gắng giải quyết. Sự khác biệt duy nhất giữa ngôn ngữ "thử nghiệm" và ngôn ngữ anh chàng mới mẻ / mạnh mẽ là tiền thay thế nó, ví dụ: Đi từ google và Dart. Nếu chúng được phát triển ở sân sau của tôi, có lẽ chúng sẽ chết trong một số diễn đàn và đó là điều đó. Họ chỉ sống sót nếu họ giỏi giải thích những vấn đề họ đang cố gắng giải quyết. Hoặc theo cách khác, như Perl và C ++, rất giỏi trong việc tiếp thu các cách giải quyết vấn đề để tiếp tục sống. Và tôi có thể đề nghị học Lua, nó ' Đây là ngôn ngữ được tạo ra để nhúng vào các chương trình, nó rất nhanh và nhẹ, sẽ cung cấp cho bạn các công cụ để giải quyết các vấn đề lớn hay nhỏ mà một số ngôn ngữ như Java không thể giải quyết một cách đơn giản. Lấy ví dụ về tiếng Nhật, nếu bạn chỉ học cú pháp, ngữ pháp và bảng chữ cái, bỏ qua văn hóa, bạn sẽ không bao giờ hiểu tại sao nó quá phức tạp và cuối cùng quên đi tất cả về nó. Nó không giải quyết được gì cho bạn.


1

Học nhiều ngôn ngữ khác nhau sẽ giúp bạn có cái nhìn rộng hơn về lập trình. Nhấn mạnh vào "khác biệt" - ví dụ: học C # và Java sẽ không dạy bạn nhiều hơn là chỉ học một trong số chúng. Nhưng học C # hoặc Java và một ngôn ngữ chức năng (ví dụ) sẽ.

Phải nói rằng, là một lập trình viên trẻ, tôi nghĩ bạn sẽ nhận được nhiều giá trị hơn từ việc làm quen với một ngôn ngữ thực sự vững chắc, trước khi nảy ra nhìn vào các loại ngôn ngữ khác nhau. Nó không hoàn toàn rõ ràng từ câu hỏi của bạn như thế nào bạn biết Java, VB.NET và C #. Bạn có tự tin rằng nếu bạn tấn công một dự án bằng một trong những ngôn ngữ trên, nút cổ chai của bạn sẽ là chính dự án chứ không phải kiến ​​thức về ngôn ngữ của bạn? Nếu bạn dành nhiều thời gian hơn để tự hỏi mình "làm thế nào để tôi làm điều này bằng ngôn ngữ ?" hơn là bạn dành thời gian suy nghĩ về vấn đề thực tế, thì có lẽ bạn cần tập trung nhiều hơn vào một trong những ngôn ngữ hiện tại của bạn.

Và cá nhân tôi nghĩ bạn nên có một cách tiếp cận thực tế để quyết định đó là cái nào. Java được sử dụng cho các ứng dụng Android? Tuyệt vời, nếu tạo ứng dụng Android là điều bạn quan tâm. Không liên quan nếu không. C # không phù hợp với sự phát triển không phải của Windows? Tin xấu nếu bạn quan tâm đến việc phát triển cho Linux. Không liên quan nếu bạn không. Và như vậy.

Và các ngôn ngữ "thử nghiệm" mà bạn đề cập? Về mặt thực tế, họ sẽ trở nên kém cỏi khi làm việc với người khác - có lẽ bạn sẽ tìm thấy hàng ngàn người biết C # hoặc Java cho mọi người biết Fantom. Đối với các dự án cá nhân, điều này không nhất thiết là một vấn đề. Nếu mục tiêu của bạn là tăng khả năng tuyển dụng, thì đúng là như vậy.


1

Bạn có thể nói rằng học lập trình bằng một ngôn ngữ như Postcript hoặc APL được cho là lãng phí thời gian chủ yếu vì cơ hội bạn từng sử dụng kiến ​​thức đó gần như bằng không. Nhưng cũng như vậy, bạn có thể lập luận rằng Ruby và Python là một sự lãng phí thời gian nếu bạn không bao giờ có ý định sử dụng chúng cho bất cứ điều gì.

Nhưng ít người nói rằng học Lisp là một sự lãng phí, mặc dù bạn có khả năng phải viết Lisp như Postcript; nhưng học Lisp dạy bạn nghĩ khác về vấn đề của bạn (hy vọng), đó là lý do tại sao hầu hết các lập trình viên sẽ nói với bạn rằng nó đáng để bạn dành thời gian.

Tuy nhiên, tôi không bao giờ ngại học một ngôn ngữ mới vì đầu tư thời gian cần thiết thực sự chỉ là một hoặc bốn giờ. Và sử dụng cho một ngôn ngữ như Lua bật lên ở những nơi khác thường nhất , và bạn sẽ không bao giờ nhận ra chúng nếu bạn đã dành vài giờ để chạy qua các ví dụ.

Khi bạn thấy một ngôn ngữ mới, hãy đọc một chút về những gì nó hữu ích cho. Nếu đó là một ngôn ngữ thích hợp, ngôn ngữ yêu thích của bạn không thể hiện quá tốt, thì hãy dành một ngày để tìm hiểu những điều cơ bản. Đó chắc chắn là thời gian tốt hơn dành cho việc xem phần 17 của The Bachelor hoặc nếu không bạn có thể lãng phí thời gian. Bằng cách đó, nếu bạn có một công dụng cho nó, nó có thể xuất hiện trong tâm trí và bạn biết nơi để tìm hiểu thêm.

Cá nhân tôi thực sự khuyên bạn nên tìm đến Go. Tôi đã sử dụng nó để viết các chương trình một trang hoạt động tốt hơn so với những gì sẽ mất ba ngày và 13 thư viện của bên thứ ba trong C hoặc C ++, và thậm chí sẽ không thể thực hiện được trong Python, C #, Ruby, v.v. bởi những người thực sự, thực sự, thực sự biết công cụ của họ.


-1

Chọn những loại có nhiều loại khác nhau. Nhóm chúng theo tính năng và chọn một trong mỗi nhóm. Nếu bạn muốn thực hiện việc này một cách chuyên nghiệp, hãy chọn một ngôn ngữ được sử dụng (vì vậy C ++ trên D cho ngôn ngữ được biên dịch được nhập tĩnh với siêu lập trình mẫu).

Kém, đó là một ngôn ngữ tốt, nhưng nó thiếu ứng dụng sát thủ mà C ++ có: khả năng tương thích ngược gần như hoàn toàn với ngôn ngữ số 1 thời đó (trường hợp của C đối với C ++). Thật tuyệt, nhưng thực tế nhỏ quan trọng đó có lẽ sẽ khiến D trở thành tình trạng trình diễn trong sách lịch sử.


-2

C có thể cũ, nhưng nó vẫn rất mạnh mẽ và thú vị, học C sẽ giúp bạn rất nhiều trong tương lai "lập trình" của bạn.

Java không chậm, bất cứ ai nói với bạn rằng không biết anh ta đang nói về điều gì, Java sẽ học cho bạn rất nhiều về OOP

Tại sao bạn không bắt đầu với Python và sau đó tìm C hoặc một cái gì đó khác,


C cũng là ngôn ngữ chung của vi điều khiển (khi bạn chỉ có 4K, bạn không thể có thời gian chạy 8K). Chỉ riêng trong không gian đó, C đã có một thập kỷ sử dụng tích cực trước nó.
TMN

Java từng chậm chạp - tôi nhớ nó ít hơn một con quỷ tốc độ trong vài năm đầu tiên. Một số người nghĩ rằng hiệu suất không bao giờ được cải thiện.
MetalMikester
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.