(Tại sao) Tôi có nên học một ngôn ngữ lập trình mới? [đóng cửa]


97

Tôi khá thành thạo với Java, C / C ++, JavaScript / jQuery và giỏi về Objective-C. Tôi khá hiệu quả với các ngôn ngữ và các khung tương ứng của chúng và cũng tạo ra các hệ thống cấp doanh nghiệp (và cả các quy mô nhỏ) một cách dễ dàng trong khi vẫn giữ mã 'sạch' và có thể duy trì (vâng, tôi có thể đọc mã của riêng mình sau sáu tháng :)

Trừ khi được ủy quyền bởi nền tảng (iPhone, iPad, v.v.) hoặc bởi khách hàng / tổ chức triển khai, chỉ cần "tại sao" tôi nên học một ngôn ngữ lập trình mới? Chỉ để "vui"? Và làm gì với niềm vui đó nếu tôi sẽ không làm điều gì đáng giá với nó?

Rất nhiều đồng nghiệp của tôi đã sẵn sàng lao vào để học "ngôn ngữ / ngôn ngữ mới tiếp theo" và thường là Python, Ruby hoặc PHP (chỉ cần đặt tên cho một vài từ phổ biến). Bây giờ, chỉ cần biết ngôn ngữ của chính nó là IMHO vô ích. Bạn cũng cần biết các khung, tìm hiểu cách sử dụng / API của họ cũng như 'thực hành triển khai tốt', v.v.

Vậy theo nghĩa 'kinh tế', liệu có lợi ích gì trong việc học một ngôn ngữ lập trình mới? Nếu ngôn ngữ được học một cách nhanh chóng và bẩn thỉu, có lẽ nó cũng sẽ được sử dụng để tạo mẫu / triển khai nhanh và bẩn - nhưng tôi không thấy RATNG là một sự đầu tư chính đáng về thời gian / công sức.

Vì vậy, TẠI SAO tôi (hoặc bất kỳ ai cho vấn đề đó) học một ngôn ngữ lập trình mới khác ngoài "thật vui vì vậy hãy thử xem" - nếu đầu tư thời gian có thể không có giá trị lâu dài?


6
lập trình viên.stackexchange.com/questions/118338 / Google Có lẽ bạn sẽ quan tâm đến câu trả lời mà tôi đã đưa ra.
deadalnix

3
Nếu bạn có thể thấy một ngôn ngữ mới với các khái niệm mới và không muốn hiểu chúng, nhiều nơi sẽ không thuê bạn (thực tế, nhiều câu hỏi phỏng vấn được thực hiện để xác định cụ thể những điều như thế này)
Bill K

3
Tôi sẽ hỏi tại sao tôi không nên học một ngôn ngữ mới?
người dùng

2
@ZacharyK ngay cả khi công việc dành cho nhà phát triển java và ứng viên là siêu nhân tại java. Âm thanh như bạn có thể tự bắn vào chân mình.
NimChimpsky

2
Có rất nhiều kẻ Super Java ngoài kia. Tôi quan tâm đến những gì bạn sẽ biết trong 6 tháng như những gì bạn biết bây giờ. (Tất nhiên tôi dường như dành toàn bộ thời gian của mình cho Erlang, CoffeeScript và PHP)
Zachary K

Câu trả lời:


178

Từ Lập trình viên thực dụng , Mẹo số 8 "Đầu tư thường xuyên vào danh mục kiến ​​thức của bạn":

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ị mắc kẹt trong lối mòn. Ngoài ra, học nhiều ngôn ngữ giờ đây dễ dàng hơn nhiều, nhờ vào sự phong phú của phần mềm có sẵn miễn phí trên Internet

Đây không phải là "điều mới" tiếp theo. Đó là về suy nghĩ theo những cách khác nhau bên ngoài những kiểu suy nghĩ bình thường của bạn.

Có một câu nói, "Khi bạn là một cái búa, mọi thứ trông giống như một cái đinh". Có lẽ có một cách tốt hơn để giải quyết vấn đề bằng cách sử dụng một số công nghệ khác. Nếu bạn không khám phá, bạn có thể không biết rằng nó đã có sẵn.


Điểm tuyệt vời. Suy nghĩ này là điều khiến tôi thử RavenDB trong một dự án và tôi đã học được rất nhiều sau nhiều năm bị mắc kẹt trong đường ray SQL Server.
Bob Horn

52
Tôi nghĩ đó là khi tất cả những gì bạn có là một cái búa, mọi thứ trông giống như ngón tay cái của bạn
Zachary K

2
Tôi hoàn toàn đồng ý. Tôi cũng nói thêm rằng việc học một ngôn ngữ khác giúp bạn hiểu rõ hơn về các khía cạnh của ngôn ngữ mà trước đây bạn nghĩ rằng bạn biết. Nó cũng giúp phân biệt các khái niệm / mẫu / giới hạn cơ bản của chương trình "thực" và đâu là các tạo tác của bộ công cụ cụ thể của bạn. Ví dụ, nếu tất cả các ngôn ngữ bạn biết được gõ yếu, bạn có thể không bao giờ biết rằng gõ mạnh tồn tại và không bao giờ tự hỏi tại sao! Do đó, các sản phẩm của bạn có thể bị ảnh hưởng về hiệu suất hoặc an toàn, mặc dù chúng có thể vượt trội trong thời gian tiếp thị ;-).
JJC

3
Lập trình viên thực dụng là một trong những cuốn sách lập trình hay nhất tôi từng đọc. Thật sự tốt!
Soner Gönül

Tôi thực sự đồng ý về "Đó là suy nghĩ theo những cách khác nhau bên ngoài những suy nghĩ bình thường của bạn". Khi tôi học Python, tôi có một thế giới suy nghĩ mới.
Yoo Matsuo

80

Tại sao mọi người leo lên Mt. Núi Everest? Hoặc chạy 100 Miles trong 24 giờ ? Tại sao chúng tôi thực hiện bất kỳ thách thức? Bởi vì nó ở đó. Tôi thấy không có gì sai với "Ars gratia artis". Có một điểm mà việc học vì lợi ích trở thành phần thưởng của riêng nó. Nhưng nếu bạn muốn những lý do mạnh mẽ hơn để học một ngôn ngữ mới thì đây là một số:

Những cách mới để giải quyết vấn đề Học một ngôn ngữ mới, thực sự dành thời gian để đi sâu vào, cho bạn cơ hội lập trình lại như một người mới. Quan điểm mới đó có thể dạy cho bạn các kỹ thuật có thể chuyển sang ngôn ngữ cũ. Hãy nghĩ về tầm ảnh hưởng của Ruby on Rails đối với ASP.NET MVC hoặc cách Java Hibernate được chuyển sang C # (cùng với vô số các khung công tác khác ảnh hưởng đến sự phát triển .NET). Tiếp xúc với các ngôn ngữ khác nhau có thể dạy cho bạn những cách mới để giải quyết vấn đề.

Công cụ phù hợp cho công việc phù hợp Tất cả các ngôn ngữ bạn đã đề cập là các phép lai OO / thủ tục (hoặc hoàn toàn là thủ tục trong trường hợp C). Hãy thử một hoặc hai ngôn ngữ chức năng. Hãy thử thực hiện giai thừa ở Erlang bằng cách sử dụng đệ quy và xem hàm của bạn chạm sàn khi 20000! trả về trong 5 giây (không tràn ngăn xếp trong trang web). Sau đó, xem xét sức mạnh của việc mở rộng ứng dụng của bạn để xử lý các giao thức số và phân tích cú pháp với ít mã hơn và mất ít thời gian hơn để có được hai phiên bản của một JVM nói chuyện qua RMI hoặc SOAP. Học các ngôn ngữ / khung khác được nhắm mục tiêu để giải quyết các vấn đề cụ thể sẽ cung cấp cho bạn nhiều công cụ hơn.

Gặp gỡ những người mới / mở rộng mạng lưới của bạn Lặn sang một ngôn ngữ mới đưa bạn đến một cộng đồng mới. Gặp gỡ những người mới là một điều tốt cho sự nghiệp và cá nhân của bạn.

Cơ hội mới Biết một ngôn ngữ mới chỉ có thể tăng cơ hội nhận được công việc đó với khởi nghiệp nóng bỏng đó. "Người đàn ông công việc này sẽ hoàn hảo nếu tôi biết Ruby." Ngoài ra, bạn có thể tận hưởng ngôn ngữ đủ để bạn quyết định chuyển đổi đường dẫn.

Giữ cho nó tươi Làm việc với cùng một điều ngày này qua ngày khác trở nên tẻ nhạt. Sử dụng một ngôn ngữ khác nhau có thể giúp bạn nghỉ ngơi hàng ngày và cho phép bạn đến vào ngày hôm sau được làm mới.

Bởi vì nó ở đó Học một ngôn ngữ mới bởi vì bạn muốn.


3
+1 Javascript có thể hoạt động, nhưng có vẻ như OP có thể thiếu một vài mô hình từ hộp công cụ của họ. Và nhiều kinh nghiệm hơn với các ngôn ngữ chức năng sẽ cung cấp cái nhìn sâu sắc hơn với các ngôn ngữ hiện có của họ, ví dụ như với các mẫu C ++
jk.

+1 cho Giữ cho nó tươi mới, nó thực sự cảm thấy tốt khi làm việc với một cái gì đó khác biệt
Mona

Tôi muốn chỉ ra rằng tối ưu hóa cuộc gọi đuôi không liên quan gì đến việc ngôn ngữ có chức năng (thuần túy) hay không, các ngôn ngữ bắt buộc được biên dịch để chạy trong thời gian chạy .NET 64 bit được tối ưu hóa miễn phí cuộc gọi đuôi .
Bịt mắt

1
LOL, vâng, đó không phải là điều khiến Erlang trở thành ngôn ngữ chức năng thuần túy mà là sự thay đổi hoàn toàn về quan điểm. Trong các ngôn ngữ bắt buộc, chúng tôi được khuyến khích để tránh đệ quy cho tất cả nhưng các trường hợp tầm thường nhất và đệ quy ngôn ngữ chức năng là một cách sống. Khớp mẫu trái ngược với if / other hoặc switch / case cũng khá tuyệt.
Michael Brown

2
Hãy thử thực hiện giai thừa ở Erlang bằng cách sử dụng đệ quy và xem hàm của bạn chạm sàn khi 20000! trả về trong 5 giây (không tràn ngăn xếp trong trang web). Đây là một trong những lập luận mạnh mẽ nhất để học một ngôn ngữ chức năng mà tôi từng thấy. Không bao giờ nghĩ rằng nó có thể hiệu quả như vậy.
Olegs Jeremejevs

37

Chúng tôi nghĩ bằng lời nói. Ngôn ngữ chúng ta sử dụng ảnh hưởng đến cách chúng ta làm điều đó. Có một trường hợp thú vị về ngôn ngữ Pirahã - mọi người nói rằng ngôn ngữ không thể xử lý như một thứ gì đó dường như "đơn giản" hoặc "trực quan" như những con số bởi vì ngôn ngữ mà họ đã đưa vào không có từ nào cho "số lượng cụ thể" (thậm chí không phải là "một số lượng cụ thể" " và nhiều").

Với ngôn ngữ lập trình là như nhau. Một ngôn ngữ lập trình mới, có thể "mở ra" tâm trí của bạn cho một số khía cạnh của lập trình.

Với nền tảng lập trình hiện tại của bạn, tôi khuyên bạn nên học một số ngôn ngữ chức năng, như Erlang hoặc Scala. Cuối cùng, Clojure cũng là một ngôn ngữ rất vững chắc.

Nếu bạn muốn cảm thấy thoải mái hơn ở nhà trước, hãy thử một ngôn ngữ kịch bản mạnh mẽ như Python hoặc Ruby.


22
+1. "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
ruakh

2
Tôi từ chối tiền đề mà chúng tôi nghĩ với những từ ngữ vì nó phủ nhận khả năng bất cứ ai (hoặc bất cứ điều gì) mà không có từ ngữ có thể nghĩ. Nhưng lời nói cực kỳ hữu ích để ghi nhãn các khái niệm (và do đó giúp phân biệt chúng). Chúng tôi chủ yếu thực hiện suy nghĩ cao hơn với (nhiều sự tham gia từ) vì nó hiệu quả. Đó là một tuyên bố công bằng hơn, nhưng tôi nghĩ gần hơn với sự thật. Vui thay, tôi không thể từ chối việc sử dụng từ ngữ mà không sử dụng từ ngữ
Donal Fellows

@DonalFellows: Tôi nghĩ rằng chúng ta có một số "quy trình tinh thần" không thể diễn tả qua lời nói. Nhưng tôi không gọi những "suy nghĩ" đó, mà là "cảm giác", "phản xạ", "trực giác", v.v ... Tôi nghĩ rằng một suy nghĩ đúng đắn phải được diễn đạt theo một loại ngôn ngữ nào đó. Vì vậy, với tôi thứ gì đó không có ngôn ngữ có thể sống, xử lý, phản ứng, cảm nhận ... nhưng không suy nghĩ. Nhưng đây là một niềm tin, dựa trên trực giác, không phải bất kỳ bằng chứng thực tế nào. Và cũng hơi lạc đề, thật đấy :)
egarcia

Hoàn toàn đồng ý, học ngôn ngữ chỉ vì chúng là ngôn ngữ lập trình mới tuyệt vời không có ý nghĩa. Bạn nên bám vào những cái rất khác nhau, và cố gắng không che quá nhiều trong số chúng. Để giỏi một thứ gì đó sẽ mất rất nhiều thời gian (có thể hơn 10 năm), không thành vấn đề nếu nó chơi một nhạc cụ, nấu ăn hoặc lập trình.
Smith

2
@evilcandybag: Khi nó xảy ra, tôi thực sự có thể chứng minh một nguồn: sciencemag.org/content/306/5695/496 , sciencemag.org/content/suppl/2004/10/15/1094492.DC1/ tựa (PDF).
ruakh

26

Bạn không chỉ muốn học các ngôn ngữ mới mà bạn muốn học các ngôn ngữ khác với các ngôn ngữ bạn đã biết Nếu bạn biết việc học Java C # sẽ không thực sự thách thức bạn, chúng cũng khá giống nhau. Tốt nhất bạn nên chọn một ngôn ngữ rất khác với những gì bạn biết. Nếu bạn biết java, JavaScript và Objective-C, bạn muốn một cái gì đó rất khác biệt

Nhu la:

Ruby một ngôn ngữ OO đánh máy yếu

Prolog Một ngôn ngữ lập trình logic rất khác nhau

Erlang Đồng thời và dung sai lỗi được thực hiện rất tốt

Đề án Đi đọc SICP và đạt giác ngộ

Haskell Một trong những hệ thống loại mạnh nhất trên thế giới nếu nó biên dịch nó có thể sẽ hoạt động, cũng sẽ giúp bạn không mắc phải tất cả các loại lỗi lạ và nhiều hơn nữa.

Hoặc chỉ cần chọn Bảy ngôn ngữ trong bảy tuần sẽ làm về những gì tiêu đề nói.


2
+1! Một bài tập tôi đang làm ngay bây giờ là thực hiện cùng một thuật toán (sắp xếp hợp nhất) bằng các ngôn ngữ khác nhau: điều này thực sự mang lại cho tôi cảm giác có bao nhiêu cách để thể hiện cùng một tính toán. Tôi đã chạy các phiên bản C, C ++, Pascal, Java, Scala và Haskell. Python, Ruby, Modula2, Scheme đang trên đường đến. Tôi thấy bạn có thể học được rất nhiều bằng cách nhìn vào các ngôn ngữ lập trình khác nhau! Và bằng cách thực hiện một điều trong một ngôn ngữ, tôi có thể có được nhiều ý tưởng về cách triển khai nó theo cách tốt hơn bằng ngôn ngữ khác.
Giorgio

3
Tôi thích điều này ngoại trừ cách bạn mô tả Haskell. Bạn vẫn có thể viết sai mã biên dịch. (Tính chính xác của loại không phải là yêu cầu duy nhất cho tính chính xác tổng thể.) Lý do để học Haskell là nó rất gần với toán học, và nó có một mô hình đánh giá lười biếng; điều đó sẽ làm lung lay hầu hết các quan niệm của các lập trình viên về việc lập trình là gì.
Donal Fellows

Tôi nghĩ nên thử Prolog. Khi tôi mới biết nó, tôi đã rất ngạc nhiên. Làm thế nào bạn có thể làm những điều chỉ viết vài ký tự.
người dùng

3
@DonalFellows theo kinh nghiệm của tôi nếu bạn nhận được các loại ngay trong Haskell, phần còn lại của chương trình có xu hướng tự viết.
tobyodavies

1
"Ruby một niềm vui gõ yếu ngôn ngữ OO": Ruby có thực sự được gõ yếu hay được gõ động?
Giorgio

15

Câu hỏi của bạn là một câu hỏi hàng đầu đến nỗi nó cầu xin tôi hỏi câu hỏi sau:

Nếu bạn là lập trình viên chuyên nghiệp, tại sao trên thế giới bạn không muốn học một cái gì đó mới để thêm vào kinh nghiệm chuyên môn của mình?

Câu hỏi của bạn nghe rất giống với thái độ của một sinh viên tôi từng có. Một hoặc hai năm trước Y2K, tôi đã dạy một lớp Cobol (với tư cách là một môn tự chọn), theo yêu cầu của Giám đốc Dịch vụ Nghề nghiệp tại trường đại học nơi tôi đang giảng dạy vào thời điểm đó. Anh ấy đã có rất nhiều công ty tiếp cận anh ấy với cơ hội việc làm cho các lập trình viên Cobol đến nỗi anh ấy nghĩ rằng chúng tôi sẽ làm cho sinh viên của chúng tôi bất mãn bằng cách không cho họ cơ hội học kỹ năng và thêm vào bộ kỹ năng của họ.

Tôi đã có một sinh viên lấy lớp học làm lớp tự chọn cuối cùng của mình để tốt nghiệp . Lúc đó anh ta cũng đang làm Lập trình viên C. Anh ta học lớp Cobol vì anh ta không có lựa chọn nào khác và anh ta muốn có bằng cấp. Vì vậy, anh đến lớp với một con chip trên vai.

Tôi đã biết C và tôi đang sử dụng nó một cách chuyên nghiệp vì vậy tôi không biết tại sao trên thế giới mà bất cứ ai cũng muốn hoặc thậm chí cần phải học Cobol.

Vì vậy, tôi đã thách thức anh ta với nhiệm vụ viết chương trình đọc dữ liệu từ một tệp có định dạng cụ thể cho từng bản ghi đầu vào (tức là có bao nhiêu ký tự cho mỗi trường trên một dòng, trường nào đến trước, thứ hai, thứ ba, v.v. .)

Anh ấy đã viết chương trình của mình bằng C, điều mà anh ấy đã làm, và anh ấy đã khoe chương trình của anh ấy với tôi. Đồng thời, tôi cho anh ấy xem phiên bản Cobol của chương trình.

Sau đó, tôi ném cho anh ta một quả bóng cong:

Giả sử rằng người dùng cuối đang nhận dữ liệu từ một nơi khác. Đó là cùng một trường trong mỗi bản ghi, nhưng thứ tự và số lượng ký tự cho mỗi trường là khác nhau. Chỉ cho tôi những gì bạn sẽ phải thay đổi trong chương trình của mình để làm cho nó hoạt động với định dạng dữ liệu mới.

Ông mất một ngày để tạo ra một phiên bản mới của chương trình hoạt động với định dạng dữ liệu mới. Nó liên quan đến việc thay đổi ít nhất 20 hoặc 30 dòng mã và sửa đổi một số chức năng và mô-đun.

Sau đó, tôi cho anh ấy thấy những thay đổi tôi cần để thực hiện cho chương trình Cobol của mình. Tôi đã sửa đổi mệnh đề hình ảnh để phản ánh định dạng dữ liệu mới.

Tôi không chắc anh ấy hoàn toàn hiểu bài học của bài tập đó, nhưng ít nhất anh ấy đã bỏ khiếu nại trong phần còn lại của học kỳ.

Vì vậy - để trả lời câu hỏi của bạn: Bạn nên học các ngôn ngữ mới vì bạn muốn HỌC. Và nếu bạn không muốn học hỏi - tiếp thêm sức mạnh cho bạn ... (Tôi chỉ không chắc là tôi sẽ thuê bạn với thái độ đó)


6
Mặc dù ý định của bạn là tốt, nhưng nếu tôi là sinh viên đó, tôi chỉ nghĩ đơn giản rằng lý do duy nhất khiến ứng dụng của bạn dễ dàng thay đổi là vì bạn biết về sự thay đổi yêu cầu cuối cùng. Nếu chương trình được viết bằng C với cùng kiến ​​thức, thì những thay đổi tối thiểu cũng cần phải được thực hiện ở đó.
hspain

Tôi đã có một đồng nghiệp với thái độ tương tự: "C và PHP kiếm tiền cho tôi. Tại sao tôi phải lãng phí thời gian để học một ngôn ngữ khác?" Anh ấy không làm việc ở đó nữa.
greyfade

3
tất cả các yêu cầu thay đổi sớm hay muộn! Đó là loại điểm.
Zachary K

@hspain - thực ra vì toàn bộ vấn đề của bài tập là Cobol coi các thông số I / O là phần thứ nhất của chương trình, chứ không phải là thứ xảy ra theo cách thức thông thường dựa trên cách bạn viết và đặt hàng Các câu lệnh I / O trong C. Và để lặp lại nhận xét của Zachary K, thực tế là các yêu cầu thay đổi. - Có, bạn có thể cấu trúc chương trình trong C theo cách ít dễ vỡ hơn khi những điều như yêu cầu I / O thay đổi, nhưng điều đó liên quan đến việc suy nghĩ về chương trình theo cách hoàn toàn khác so với bạn thường làm khi viết chương trình C.
Zeke Hansell

Tôi thực sự không biết rằng về cobol. Một ngày nào đó tôi có thể phải đi xem
Zachary K

12

Có một số lý do tại sao việc học một ngôn ngữ mới có thể đáng để đầu tư đúng lúc:

  1. Tăng kích thước hộp công cụ của một người - học một ngôn ngữ mới có thể cung cấp các đường dẫn bổ sung để giải quyết các vấn đề kỹ thuật. Khả năng của các công cụ mới có thể cung cấp sự lựa chọn tốt hơn về ngôn ngữ / nền tảng để giải quyết các vấn đề nhất định so với các công cụ / ngôn ngữ mà trước đây chúng ta đã biết. Một ví dụ đơn giản có thể là của một lập trình viên chỉ biết C. Học một ngôn ngữ kịch bản mở ra những khả năng khác cho anh ấy / cô ấy - về mặt triển khai, thiết lập môi trường, v.v.
  2. Có được quyền truy cập vào một nền tảng mới - một ví dụ tuyệt vời có thể là Mục tiêu C - nếu một người muốn phát triển cho iOS, việc học ngôn ngữ này gần như là bắt buộc.
  3. Tìm hiểu các mô hình mới - một số ngôn ngữ có thể có quyền truy cập tốt hơn vào các mô hình mới hơn. Lấy C làm ví dụ, có thể khó phát triển dịch vụ web theo tiêu chuẩn ANSI C. Tuy nhiên, học cách phát triển bằng .NET, Java, PHP hoặc các ngôn ngữ mới khác có thể tăng tốc độ phát triển dịch vụ web.

Học ngôn ngữ mới có thể mang lại lợi ích ngay lập tức, như bạn đã lưu ý, trong các giải pháp "nhanh và bẩn". Tuy nhiên, những giải pháp tức thời này có thể khiến một lập trình viên nghiên cứu và tìm hiểu sâu hơn về kiến ​​trúc liên quan đến ngôn ngữ mới để "học" đúng cách. Người ta có thể xem các bài tập học nhanh này như một khoản đầu tư vào cuộc điều tra xem liệu một ngôn ngữ mới có đáng để bổ sung thời gian đào tạo hay không.


11

Trong một từ: khả năng tiếp thị .

Bạn mở ra triển vọng việc làm của mình khi bạn có thể hiển thị rằng bạn có khả năng thích nghi và học hỏi những điều mới. Chắc chắn, bạn có thể tiếp tục viết các ứng dụng bằng một ngôn ngữ mà bạn đã thực sự thành thạo, nhưng điều gì xảy ra khi bạn biết rằng ngôn ngữ yêu thích của bạn trở nên không liên quan đến ngành mà bạn đang làm việc. Tôi thực sự nhớ một thời gian chúng tôi sử dụng. để viết các dịch vụ web của riêng chúng tôi từ đầu bằng C hoặc C ++, ngày nay chúng tôi sử dụng các công cụ thực hiện tất cả "webbiness" cơ bản cho chúng tôi (Think Rails, v.v ...).

Vấn đề là, bạn kết thúc giống như những diễn viên làm phim truyền hình, và sau đó không thể dễ dàng chuyển sang bất cứ điều gì khác vì họ mãi mãi được xem là nhân vật gốc của họ. "Ai trên trái đất muốn thuyền trưởng Kirk là Indiana Jones? !!". Điều tương tự với các lập trình viên chỉ từng sử dụng một sản phẩm. Chắc chắn, bạn sẽ biết nó giống như bất kỳ ai khác, nhưng điều đó sẽ không giúp ích cho bạn khi bạn được đối xử như bạn đã được đóng hộp như một Fortran, người không thể chuyển sang làm việc với C #.

Nếu bạn muốn có thể di chuyển công việc dễ dàng và giữ cho các tùy chọn của bạn mở, bạn cần mở rộng kinh nghiệm của mình. Làm việc trên nhiều dự án khác nhau bằng nhiều ngôn ngữ khác nhau và tốt nhất là trên ít nhất 2 nền tảng trở lên và giữ cho bản thân bạn có thể tiếp thị nhiều hơn là chỉ là những gì bạn đang có ngày hôm nay.

Tất nhiên, có rất nhiều lý do khác để học một ngôn ngữ mới, đôi khi thậm chí chỉ vì địa ngục của nó. Nó mở ra cho bạn những khả năng khác, vì vậy khi sếp đến gặp bạn và nói "chúng ta có thể làm gì không", bạn có thể nói Có với sự lựa chọn các công cụ có sẵn cho bạn.


8

Tại thời điểm này trong sự nghiệp của bạn, bạn nên học các ngôn ngữ mới nếu bạn nghĩ rằng chúng sẽ giúp bạn trở thành một lập trình viên tốt hơn.

Hầu hết các ngôn ngữ được liệt kê của bạn (Java / C / C ++ / Javascript / Objective-C) là OO / mệnh lệnh thông thường. Học thêm một ngôn ngữ OO / mệnh lệnh khác có thể sẽ không dạy bạn nhiều hơn về loại lập trình đó. Trừ khi bạn có một sở thích đặc biệt, không có lý do gì để tìm hiểu hương vị của tháng trên spec.

Tôi cũng có xu hướng hoài nghi về tuyên bố tăng năng suất theo thứ tự. Tuy nhiên, có thể đáng để kiểm tra ngôn ngữ năng suất cao thường xuyên có uy tín, để xem bạn có thích nó không.

Lý do tốt nhất để học một ngôn ngữ mới là học các kỹ năng về khả năng ứng dụng chung. Vì thế, tôi sẽ khuyên bạn nên đi sâu vào một ngôn ngữ chức năng (Haskell, hoặc một trong các Lisps), mặt khác, mã lắp ráp và kiến ​​trúc hệ thống (x86 hoặc ARM).

Lập trình chức năng sẽ phá vỡ bộ não của bạn và cải thiện tâm trí của bạn, trong khi học kiến ​​trúc máy sẽ cải thiện khả năng gỡ lỗi và tối ưu hóa của bạn, ngay cả khi bạn không bao giờ viết một dòng lắp ráp khác.


6

Mỗi người trong chúng ta quyết định những gì chúng ta muốn làm việc để ...

  1. bạn học nó bởi vì bạn muốn
  2. bạn học nó bởi vì bạn cần nó cho công việc mà bạn muốn

Nếu bạn không muốn học PHP, không ai tạo ra bạn và có rất nhiều lĩnh vực mà bạn có thể lập trình mà không bao giờ biết cách đánh vần PHP.

Rất nhiều người nhìn vào thị trường việc làm để xem khu vực nóng ở đâu và nhảy vào những công nghệ đó. Rất nhiều người học một ngôn ngữ và gắn bó với nó và 20 năm sau họ trở thành kỹ sư bảo trì di sản. Và sau đó bạn có rất nhiều người ở bất cứ đâu giữa hai thái cực này.

Cuối cùng, tất cả là về nơi bạn muốn trở thành.


Trong mô tả của bạn, nó có vẻ hơi đen trắng. "Phễu công nghệ" và các kỹ sư bảo trì di sản là hai thái cực IMHO, với hầu hết chúng ta ngồi ở đâu đó ở giữa. Ngoài ra, một số "phễu công nghệ" quá điên rồ về những thứ sáng bóng mới nhất để thực sự học bất kỳ công nghệ nào đúng cách (sẽ mất nhiều thời gian hơn những gì họ sẵn sàng đầu tư vào bất kỳ công nghệ đơn lẻ nào), vì vậy họ có thể không bao giờ tạo ra các giải pháp lâu dài, vững chắc vấn đề.
Péter Török

1
@ PéterTörök: Đã chỉnh sửa câu trả lời của tôi. Tôi đã chỉ ra quy mô, nhưng quá lười để đánh vần tất cả. Bạn nói đúng, nó là một quang phổ liên tục.
DXM

5

Lập luận tốt nhất mà tôi biết là nó mở rộng quan điểm của bạn về việc có thể giải quyết được bao nhiêu cách khác nhau, hoặc một số logic có thể được thể hiện. Biết rõ Java và C ++ mang đến cho bạn cái nhìn tốt về cả hai lĩnh vực bản địa & VM, nhưng có nhiều "mức độ tự do" hơn để khám phá.

Tôi có khoảng 15 năm kinh nghiệm về C ++, 5 về Java. Có nhiều ngôn ngữ tôi đã học và bỏ lại (PHP, Pascal, tập hợp cho một loạt các bộ xử lý khác nhau, trong số các ngôn ngữ khác) và có thể nói chắc chắn rằng ngay cả những ngôn ngữ tôi không sử dụng nữa cũng để lại dấu ấn đáng kể về cách tôi nghĩ về một vấn đề . Ngoài ra: ngay cả khi bạn muốn gắn bó với Java, đối với một dự án nhất định, bạn sẽ phải biết phương án thay thế để trình bày các phản biện tốt cho những người đề xuất.

Tuy nhiên, tôi đã học Python chỉ trong năm nay và rất vui vì cách làm một số thứ có thể được thực hiện một cách tao nhã. Nhiều đến nỗi tôi quyết định chuyển đổi một số ít các dịch vụ REST mà tôi đã viết, từ Java sang Python. Những lợi thế trong khả năng duy trì mã là khá đáng kể. Chắc chắn nó cũng để lại dấu ấn trong cách làm việc của tôi, không chỉ bởi vì bây giờ tôi sẽ chọn Python cho một số nhiệm vụ, mà còn bởi vì tôi có thể áp dụng các nguyên tắc thiết kế tương tự khi mã hóa trong C ++ và Java.

Điều đó nói rằng, tôi không nghĩ rằng bạn nên học nhiều ngôn ngữ khác nhau mọi lúc, chỉ vì lợi ích của nó. Phải mất một khoảng thời gian đáng kể và "chỗ ở" bạn sẽ phải ghi nhớ để chúng cùng tồn tại với những người khác mà bạn đã biết cũng mất thời gian và công sức. Tôi chỉ quyết định học một ngôn ngữ khi nó đủ trưởng thành, có nền tảng nhà phát triển tốt và cung cấp kết quả khác biệt đáng kể so với những ngôn ngữ khác mà tôi biết hoặc dự định học. Ví dụ, khi tôi quyết định học Python, tôi cũng đã xem xét Ruby và Perl, và sau đó đã loại bỏ chúng - ít nhất là trong tương lai gần.


5

Mọi người học ngôn ngữ mới để ...

  • mở rộng kiến ​​thức của họ. Nếu bạn biết nhiều hơn bạn cảm thấy tốt hơn và bạn tự tin hơn.
    Tự tin = Mã tuyệt vời!
  • có một hộp công cụ lớn hơn. Giả sử bạn phải tạo một ứng dụng. Nếu bạn chỉ biết Java, bạn sẽ tạo chương trình bằng Java. Nhưng nếu bạn biết Java, Python, Scheme và Lisp, rất có thể bạn sẽ chọn công cụ tốt nhất cho công việc.
  • có một công việc. Đối mặt với nó. Nếu bạn biết nhiều ngôn ngữ hơn, bạn có nhiều cơ hội việc làm hơn. Điều đó khá tự giải thích.
  • trở thành một lập trình viên toàn diện tốt hơn. Nếu bạn biết cú pháp của Perl, bạn biết nó có thể hơi điên. Khi viết các chương trình dài bằng Perl, về cơ bản, bạn buộc phải tuân theo các thực tiễn tốt nhất hoặc bạn sẽ không phải là một người cắm trại hạnh phúc. Vì bạn biết các thực tiễn tốt nhất của Perl, điều này có thể giúp bạn viết mã PHP tốt hơn (bằng cách này hay cách khác).

Vì vậy, như bạn có thể thấy có nhiều lý do để học một ngôn ngữ mới. Lời khuyên của tôi cho bạn (và trích dẫn ban đầu duy nhất của tôi mà tôi nghĩ là tốt):

Viết mã thường xuyên; Viết mã tốt; Viết mã bằng Scheme, PHP, Java, Python, Lisp, Perl, C, C ++, C #, Visual Basic, Ruby ...


1
@Nupul: Hoặc ít nhất tôi nghĩ rằng trích dẫn như vậy ...
Dynamic

5

Tôi đồng ý với hầu hết các câu trả lời được đăng. Để thêm vào những điều này, hãy xem các số liệu thống kê của Khảo sát người dùng chồng chéo năm 2011. Có mối tương quan rất cao giữa số lượng ngôn ngữ được biết và tiền kiếm được. Họ có thể không được gắn trực tiếp với nhau, nhưng đó là điều cần suy nghĩ.

Những người có xu hướng học nhiều ngôn ngữ có xu hướng kiếm nhiều tiền hơn.

http://blog.stackoverflow.com/2012/02/survey-results/


4

Alfred North Whitehead đã viết một bài luận tuyệt vời gọi là " Tầm quan trọng của ký hiệu tốt "

Thật thú vị khi lưu ý tầm quan trọng đối với sự phát triển của khoa học một biểu tượng trông khiêm tốn có thể như thế nào. Nó có thể đại diện cho sự trình bày rõ ràng của một ý tưởng, thường là một ý tưởng rất tinh tế, và bằng sự tồn tại của nó làm cho nó dễ dàng thể hiện mối quan hệ của ý tưởng này với tất cả các đoàn ý tưởng phức tạp mà nó xuất hiện.

Một ngôn ngữ lập trình là một dạng ký hiệu. Tôi có thể mã OO bằng C; thực tế đó là cách Stroustrup bắt đầu với C ++ - như một loạt các macro tiền biên dịch C. Tuy nhiên, việc viết mã OO bằng Java, C ++ hoặc C # sẽ dễ dàng và nhanh chóng hơn rất nhiều vì chúng có các nguyên hàm ngôn ngữ hỗ trợ OO dễ dàng hơn.

Tất cả các lý do để học ngôn ngữ mới được đưa ra cho đến nay là hợp lệ nhưng tôi nghĩ lý do tốt nhất để học một ngôn ngữ mới là một ký hiệu mới có thể cho phép bạn suy nghĩ theo một cách mới có thể giúp bạn giải quyết các vấn đề mới.


2

Hầu hết hoặc tất cả các câu trả lời ở trên đều liên quan đến nghề nghiệp. Lập trình. Tôi muốn nhắc nhở rằng trước khi chúng ta là lập trình viên - chúng ta là con người.

Một lý do tốt tại sao không học một ngôn ngữ lập trình mới, trong trường hợp của bạn, là để cho bản thân bạn nghỉ ngơi hoặc làm những việc khác bên cạnh lập trình.

Từ kinh nghiệm của tôi, làm việc trong nông nghiệp và làm việc với gỗ, tôi đã nghĩ rất nhiều về lập trình - hơn nữa là học một ngôn ngữ mới. tức là để trở thành một lập trình viên giỏi, trước tiên bạn nên là một con người tốt. Nếu bạn không có nhiều kinh nghiệm trong cuộc sống, bên cạnh lập trình, ý tưởng của bạn về lập trình có thể hoàn toàn sai - ngay cả khi bạn là một chuyên gia.

Nhiều khái niệm trong lập trình đang đến trực tiếp từ cuộc sống hàng ngày: đơn giản, dễ bảo trì, thiết thực, hữu ích, nhanh chóng - và đôi khi chậm , mô đun hóa, v.v; là tất cả các khái niệm được sử dụng bởi một thợ mộc, ví dụ.

Tin hay không: cá nhân tôi đã học được nhiều về các khái niệm lập trình, bằng cách đi nghỉ dài ngày để hái cam. Khái niệm chính tôi học được từ nó là - sự đơn giản. Từ làm việc như một người xây dựng, tôi đã học được một khái niệm khác: xây dựng cơ sở tốt nhất có thể - nếu bạn muốn các bức tường đứng thẳng.

Cuối cùng, câu trả lời cho câu hỏi của bạn có thể là: đi nghỉ mát, tham gia lớp học taekwondo hoặc chăm sóc khu vườn - sau đó câu hỏi của bạn có thể không làm phiền bạn nữa.


Mặc dù tôi có thể đồng ý với bạn, tôi sẽ nói thêm rằng sau khi có tất cả những ý tưởng hay về lập trình trong khi thực hiện các hoạt động khác, tôi muốn học một ngôn ngữ lập trình trong đó những ý tưởng này được thực hiện. Vì vậy, IMO hai khía cạnh (tạm dừng lập trình và học ngôn ngữ lập trình mới) không (không nên) loại trừ nhau.
Giorgio

Đúng là việc nghỉ lập trình và học các ngôn ngữ lập trình mới không (không nên) loại trừ nhau. Tuy nhiên, trong thế giới rất nhanh mà chúng ta đang sống, điều quan trọng cần nhớ là nghỉ ngơi - có thể có năng suất cao hơn sau đó chuyển động. Nó có thể là một tách cà phê - hoặc thậm chí nghỉ 1 năm.
Shian

-2

Giá trị của việc học một ngôn ngữ lập trình mới, đại khái là sự đối ứng của số lượng ngôn ngữ lập trình mà bạn đã biết.

Điều này là do có một số lượng các mô hình hữu hạn và việc học một ngôn ngữ mới thường sẽ giới thiệu cho bạn ít nhất một hoặc hai, khiến bạn có nhiều kinh nghiệm hơn và có khả năng làm lập trình viên. Một số có thể biến thế giới lập trình của bạn đảo lộn. Nhưng khi bạn học một ngôn ngữ mới có các mô hình mà bạn đã biết, bạn đã biết chúng và bạn đã quen với chúng.


-3

Như hầu hết trong số họ đã viết, tôi có kiến ​​thức làm việc tốt về C. Gần đây, tôi đang làm việc về một số vấn đề mà tôi cần phải kiểm tra chéo kết quả; nó là toán học Vì vậy, cách nhanh nhất để có được câu trả lời đã cho tôi một cú đá để kiểm tra xung quanh ngôn ngữ lập trình nhanh hơn để học.

Và tôi phát hiện ra rằng bc , một ngôn ngữ máy tính chính xác tùy ý, tiện ích gần như có sẵn trên mọi nền tảng Unix.

Tôi đã không nghĩ về Python, Perl hay bất cứ điều gì, nhưng tôi phát hiện ra điều này đã giải quyết vấn đề của tôi chỉ trong tích tắc. Tôi đã kiểm tra trên giai thừa (20000) mà một trong những người bạn đề nghị, và nó đã cho kết quả trong tích tắc mà không gặp sự cố nào.

Điều quan trọng chỉ đến một điểm nhất định là bạn cần biết một ngôn ngữ mới sẽ giúp giảm bớt công việc / vấn đề của bạn hiện tại.

Chắc chắn, nếu tôi viết điều này trong sơ yếu lý lịch của tôi, tôi đoán không ai quan tâm, nhưng theo quan điểm của tôi, nó giải quyết vấn đề của tôi trước khi tôi tấn công nó bằng ngôn ngữ yêu thích của tôi, 'C'.

Và nếu có nhu cầu học một ngôn ngữ mới, bạn sẽ có cơ hội với các vấn đề khác nhau và n số giải pháp.


-8

Bất cứ ai cũng có thể tạo ra một ngôn ngữ mới; nhưng dường như không ai hiểu rằng "tốt hơn" hiếm khi giống như "tốt hơn nhiều đến mức chi phí nhận con nuôi thực sự hợp lý". Kết quả cuối cùng là hàng trăm ngôn ngữ khác nhau, trong đó không ai có thể hiểu tất cả mã nguồn và nơi các lập trình viên cần lãng phí khoảng một phần tư thời gian của họ là không hiệu quả do sự khác biệt về ngôn ngữ / khung / thư viện.

Trong một thế giới lý tưởng, sẽ có một ngôn ngữ lập trình cấp thấp (ví dụ C), một ngôn ngữ lập trình "an toàn" cấp cao (ví dụ Java) và một ngôn ngữ kịch bản. Cũng có một cây búa tạ lớn để phá hủy "Tháp ngôn ngữ lập trình của Babel" được tạo ra bởi những người không hiểu được những ưu điểm của tiêu chuẩn hóa và chi phí "khuấy đảo" và liên tục đào tạo lại ngành CNTT.

Từ ý nghĩa 'kinh tế vĩ mô', không có gì sai khi học ngôn ngữ lập trình mới như một sở thích, nhưng sử dụng ngôn ngữ lập trình mới đó cho bất cứ điều gì khiến bạn trở thành một phần của vấn đề.


4
Âm thanh như một lý tưởng khá không thực tế. Ai sẽ quyết định những ngôn ngữ tiêu chuẩn này và làm thế nào để bạn quyết định rằng một ngôn ngữ mới có giá trị thay đổi thành? Điều gì về nguy cơ bị mắc kẹt trong một ngôn ngữ nhảm nhí chỉ vì không ai sẵn sàng thử bất cứ điều gì mới? Hãy tưởng tượng nếu chúng ta đã làm điều này 10 năm trước - Mọi người đều được sử dụng C ++ và Java (hoặc có thể là VB)!
Brendan Long

3
Khái niệm "thế giới lý tưởng" của bạn nghe có vẻ đáng ngờ giống như của Nineteen Eighty-Four . Trong cuốn sách của bạn, những ý tưởng mang tính cách mạng như "lập trình chức năng" và "suy luận kiểu" và "đa hình hạng nhất" và "đa hình thức" thậm chí không thể được nghĩ ra, bởi vì không có cách nào để diễn đạt chúng. Phải thừa nhận rằng, Orwell dường như không nghĩ đến ý tưởng búa tạ của bạn, nhưng nếu anh ta có, tôi chắc chắn rằng nó đã tìm được đường vào.
ruakh

2
Ngoài những điểm trên, rất ít "câu trả lời" của bạn có liên quan đến câu hỏi thực tế. Downvote.
dùng16764

3
Trong một thế giới lý tưởng, sẽ chỉ có một câu trả lời cho câu hỏi của Nupal. Có tất cả những câu trả lời bổ sung sau câu trả lời đầu tiên bởi những người không hiểu những ưu điểm của tiêu chuẩn hóa chỉ gây ra nhầm lẫn. Không có gì sai khi không đồng ý với câu trả lời trong đầu của bạn, nhưng đăng một câu trả lời bổ sung khiến bạn trở thành một phần của vấn đề.
benzado

1
Hạn chế đối với những ngôn ngữ đó sẽ không ngăn chặn bất kỳ vấn đề nào bạn đề cập. Tôi đã phải viết lại ứng dụng nhiều lần do thay đổi khung hơn là thay đổi ngôn ngữ.
Fabio Ceconello
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.