Có đau không khi học bit của nhiều ngôn ngữ lập trình?


37

Tôi bắt đầu sự nghiệp lập trình với BASIC, khi đang học lớp 9. Tôi đã học được một chút BASIC bằng cách viết các chương trình đơn giản để thêm, bớt và in. Sau đó tôi đến trường đại học và học ngành Thông tin máy tính và Kỹ thuật hệ thống. Trong năm đầu tiên tôi được dạy C, và tôi có khả năng điều khiển tốt nó.

Tiếp theo tôi học C ++ vào năm thứ hai. Nó chỉ dạy tôi một số kiến ​​thức về OOP. Bây giờ tôi đang làm PHP (cùng với HTML). Tôi chưa thành thạo C ++, BASIC hoặc PHP. Tôi hiện đang có kế hoạch chuyển sang phát triển di động. Nhưng tôi cảm thấy rằng tôi đã không bao gồm tất cả mọi thứ trong các ngôn ngữ tôi đã học.

Thật sự nó có ảnh hưởng sao?

Câu trả lời:


50

Tất cả chúng ta chỉ đang học các ngôn ngữ lập trình. Tôi chỉ coi những người thực hiện ngôn ngữ là những người có điểm 10 trên 10 về kiến ​​thức ngôn ngữ.

Học nhiều ngôn ngữ và mô hình, là cách duy nhất để phát triển "khẩu vị" cho những gì bạn thích và không thích. Nếu bạn chỉ học một ngôn ngữ, bạn thậm chí sẽ không thể thực sự quyết định liệu bạn có thích nó hay không.

Bạn đang thực sự làm điều đó một cách chính xác. Bạn sẽ có thể sử dụng lại các nguyên tắc cơ bản quan trọng nhất mà bạn học được trong khi tiếp xúc với các cú pháp, thư viện và khung khác nhau.


16
Tôi thích câu trả lời này, ngoại trừ nó ít hơn "những gì bạn thích" và đó là "công cụ phù hợp hơn cho công việc". Không ai nên sử dụng cùng một ngôn ngữ để giải quyết mọi vấn đề. Điều đó sẽ làm cho một nhà phát triển phần mềm xấu. Mỗi ngôn ngữ và mô hình có ưu và nhược điểm.
dùng606723

1
Cho rằng trình biên dịch và trình thông dịch có lỗi, tôi không nghĩ rằng con người có thể đạt tới 10 cho hầu hết các ngôn ngữ.
jmoreno

6
Tôi không nghĩ ngay cả những người viết trình biên dịch C ++ cũng hiểu C ++. Cá nhân, ý tôi là. Rõ ràng là tập thể, họ phải bằng cách nào đó hiểu toàn bộ ngôn ngữ, nhưng tôi không nghĩ rằng có một người duy nhất trên hành tinh này hiểu tất cả ngôn ngữ. Trên thực tế, các thành viên của ủy ban thường khá rõ ràng về thực tế rằng tất cả họ chỉ hiểu lĩnh vực chuyên môn của riêng họ. Tương tự như vậy trong Java: Martin Oderky gần đây nói rằng ông tin rằng chỉ có 3 người trên thế giới hiểu được các ký tự đại diện. Và từ giai điệu của e-mail, tôi có ấn tượng rằng anh ta không bao gồm chính mình
Jörg W Mittag

2
trong nhóm đó, mặc dù ông thực sự đã thiết kế Java Generics (cùng với Phil Wadler, tất nhiên). Mặc dù, công bằng mà nói, các ký tự đại diện đã được thêm vào thiết kế của anh ta mà không có sự đồng ý của anh ta, trên thực tế, chống lại sự bất đồng quan điểm của anh ta.
Jörg W Mittag

1
@brian, tin tôi đi, bạn không cần phải biết ngôn ngữ để có thể thực hiện trình biên dịch của nó. Bạn chỉ có thể dịch thông số kỹ thuật thành một mã một cách mù quáng. Nhưng do kết quả của việc đó, bạn sẽ học được ít nhất một số điều cơ bản về ngôn ngữ - đó là lý do tại sao đó là cách học ngôn ngữ mới ưa thích của tôi.
SK-logic

21

Nếu bạn vẫn còn ở trường đại học, điều quan trọng là bạn không cảm thấy mình bao quát mọi thứ bằng bất kỳ ngôn ngữ nào bạn biết. Hiểu các lý thuyết cơ bản phổ biến đằng sau các ngôn ngữ này là quan trọng hơn nhiều. Khi bạn hiểu những điều cơ bản, bạn có thể tìm hiểu chi tiết về các ngôn ngữ khác khi bạn cần chúng.


5
Trong hai năm đầu tiên của tôi, tôi nghĩ rằng chúng tôi đã chọn một ngôn ngữ mới cứ sau 3 - 4 tuần để sử dụng Pascal, đó là nền tảng của hầu hết các công việc dự án của chúng tôi (1982-85) - một số trong số đó là ngôn ngữ chức năng. Một phần của vấn đề là cố gắng và đảm bảo rằng chúng tôi đã tách "lập trình" khỏi "mã hóa"
Murph

12

Tôi tin rằng điều quan trọng nhất trong lập trình là hiểu được các mô hình khác nhau .

Trong câu hỏi của bạn, bạn đã đề cập đến Lập trình hướng đối tượng (OOP) . Nếu bạn thành thạo chủ đề này, bạn sẽ có thể giải thích nó chỉ bằng mã giả và về cơ bản là một số biểu diễn mô hình đồ họa (như sơ đồ lớp UML).

Cho dù bạn quyết định sử dụng Java, C ++ hay C # (...) là tùy thuộc vào bạn hoặc công ty bạn làm việc, nhưng điều thực sự quan trọng là hiểu / nhận ra các vấn đề khác nhau và quyết định mô hình tốt nhất để giải quyết chúng. Một cách rất quan trọng để giải quyết các vấn đề trong lập trình là sử dụng các mẫu thiết kế mà bạn có thể khám phá trong cuốn sách tham khảo này .

Đối với các ngôn ngữ nhúng, tôi tin rằng điều quan trọng là phải hiểu các vấn đề khác nhau liên quan đến các công nghệ như vậy.

Nói một cách ẩn dụ, tôi sẽ so sánh điều này với việc viết một cuốn sách khoa học hay; Điều quan trọng là lý thuyết bạn đưa ra, những vấn đề bạn quản lý để giải quyết, v.v. Cho dù bạn viết cuốn sách bằng tiếng Anh, tiếng Pháp hay tiếng Nhật cuối cùng cũng không quan trọng.

Điều đó nói rằng, điều quan trọng là phải biết các chi tiết cụ thể của một ngôn ngữ cụ thể nếu bạn muốn chuyên về công nghệ đó để khai thác nó rất hiệu quả.


2
+1 cho các mô hình. Việc tập trung vào đường cú pháp của ngôn ngữ X hoặc Y không quan trọng (tất nhiên bạn cần điều đó nếu bạn sử dụng ngôn ngữ X mỗi ngày tại nơi làm việc); Điều hữu ích là nghiên cứu các mô hình khác nhau vì IMHO chúng giúp bạn cởi mở và sáng tạo hơn trong việc giải quyết vấn đề.
sakisk

5

Theo tôi, có rất ít điểm trong việc thay đổi ngôn ngữ rất thường xuyên. Bạn sẽ không bao giờ thực sự nắm bắt bất kỳ trong số họ. Đặc biệt là một số người như C ++, nơi một số người dành cả thập kỷ để viết ngôn ngữ và vẫn có mã của họ trông giống như C.

Nếu bạn không thể viết các thực tiễn tốt nhất bằng ngôn ngữ, thì đừng tiếp tục, IMO. Điều đó có nghĩa là bao trùm hơn một cặp vợ chồng sẽ mất nhiều năm, nếu không nói là nhiều thập kỷ.


5

Tôi nghĩ sẽ không hại gì khi học một chút nhiều ngôn ngữ khác nhau, nhưng đồng thời bạn nên học ít nhất một hoặc hai chuyên sâu.


3

Tôi đã sử dụng nhiều ngôn ngữ trong sự nghiệp của mình, như AMOS Basic, Java, C ++, PHP, VB6, Delphi, v.v. Hôm nay tôi sử dụng C #, JavaScript, Ruby và một số Clojure tại nơi làm việc và tôi cũng đã chơi với Pyhton, Erlang, Sơ đồ và sơ đồ chung.

Nhưng mùa thu này tôi muốn tạo một lịch x-mas đặc biệt cho blog của mình và quyết định làm quen và giải quyết một vấn đề cụ thể bằng 24 ngôn ngữ khác. Đây là một trải nghiệm tuyệt vời, tôi đã học được rất nhiều và tôi khuyên bạn nên làm điều này một khi bạn có một số kinh nghiệm lập trình.

Câu trả lời của tôi cho bạn là thế này: Học một vài ngôn ngữ thực sự tốt (chúng nên khá khác nhau), nhưng hãy chắc chắn rằng bạn lấy mẫu và làm quen với nhiều ngôn ngữ.

Ngày nay, điều quan trọng là phải biết rõ cả OOP và FP (lập trình chức năng), và bạn cũng nên thoải mái với cả ngôn ngữ rất tĩnh và rất năng động.

Tái bút: Blog của tôi bằng tiếng Na Uy, nhưng nếu bạn muốn xem danh sách các ngôn ngữ tôi trình bày, bạn có thể xem tại đây .


2

Tôi học những gì tôi cần học bằng một ngôn ngữ cụ thể khi tôi cần học một cái gì đó mới. "Trình kích hoạt" cho tôi biết tôi cần tìm hiểu sâu hơn về ngôn ngữ là một đoạn mã cụ thể trông xấu xí hoặc vụng về, có vẻ không thể nhận ra hoặc khó kiểm tra hoặc nhận xét. Thông thường những yếu tố kích hoạt này chỉ ra sự thiếu hiểu biết của tôi về một thành ngữ lập trình cụ thể, phong cách, cấu trúc dữ liệu, v.v.


2

Học nhiều ngôn ngữ lập trình là thực hành tốt và hiện nay là cần thiết; nhiều lần bạn không thể luôn sử dụng ngôn ngữ của mình cho mọi thứ.

Những lợi ích của việc xem các ngôn ngữ khác làm mọi thứ sẽ giúp bạn như một lập trình viên như thế nào; ngay cả khi thỉnh thoảng khi bạn nhảy xung quanh bạn cũng mắc lỗi cú pháp (ví dụ: đang kiểm tra sự bất bình đẳng !=, ~=hoặc <>). Mặc dù vậy, bạn nên cẩn thận để học nhiều hơn chỉ cú pháp của một ngôn ngữ, nhưng thực hành tốt nhất trong một ngôn ngữ cũng như các kỹ năng kỹ thuật phần mềm tốt nói chung. Thứ nếu bạn học C và sau đó học C ++, bạn nên đảm bảo khi bạn viết mã C ++ theo kiểu mã C ++ (thay vì chỉ C với một vài từ khóa mới. Đó là bạn có nhiều lớp / đối tượng, thích tham khảo hơn / con trỏ thông minh trên con trỏ thô, vv


1
Đừng bắt tôi bắt đầu vào Nếu x <b> = </ b> 5 Sau đó. Tôi phải kiểm tra lại tất cả mã C của mình trong vòng một tuần sau khi duy trì mọi thứ liên quan đến BASIC.
dùng606723

2

tốt nhất là học ngôn ngữ từ các mô hình lập trình khác nhau ít nhất! Ngôn ngữ thủ tục, khai báo, chức năng, hướng đối tượng, nguyên mẫu và ngôn ngữ động - mỗi lớp lập trình cung cấp một cái nhìn sâu sắc riêng về cách tổ chức và giải quyết vấn đề. Cuối cùng, bạn phát hiện ra một hoặc nhiều mô hình mà bạn cảm thấy hiệu quả và hài lòng nhất, và sử dụng nó.


2

Chắc chắn không phải. Tất nhiên bạn cũng muốn chắc chắn rằng bạn đang học các phong cách ngôn ngữ khác nhau. Học cả C # và Java sẽ không mở rộng tâm trí của bạn theo bất kỳ cách chính nào, nhưng học Java và Haskell sẽ.

Hãy xem cuốn sách Bảy ngôn ngữ trong bảy tuần , sẽ đưa bạn qua phần giới thiệu về Ruby, IO, Scala, Erlang, Prolog, Clojure và Haskell. NẾU bạn thích ngôn ngữ, bạn sẽ thích cuốn sách đó.


1
Học C # sau Java có thể mở rộng tâm trí của bạn nhờ vào lập trình chức năng của nó (và các tính năng khác mà Java còn thiếu). Nhưng nếu chỉ để học, Haskell có lẽ sẽ tốt hơn nhiều, bởi vì nó hoàn toàn có chức năng.
Svick

1

Chà, C và C ++ sẽ không làm hại bạn trong lập trình di động. Bạn có thể sử dụng cả với Cốc Cốc hoặc Android NDK và đôi khi bạn cần để thực hiện. Ngoài ra, đôi khi bạn muốn bởi vì bạn muốn viết mã chạy trên một số nền tảng. Trong trường hợp đó, giả sử bạn không chỉ sử dụng khung của bên thứ ba, bạn có thể viết ứng dụng của mình bằng C / C ++ và biên dịch trong các trình bao bọc dành riêng cho nền tảng cho các yếu tố gốc được yêu cầu (ví dụ: cách duy nhất để có bối cảnh OpenGL trên iPhone bằng cách sử dụng lớp CAEAGLLayer gốc).

Vì vậy, nó giống như bạn có càng nhiều công cụ trong ngăn kéo, bạn càng có nhiều lựa chọn để hoàn thành công việc. Bạn sẽ thấy bạn có một sở thích cho những người nhất định vì bạn chuyên về các loại nhiệm vụ khác nhau. Nếu bạn chỉ làm công cụ UI, C có thể không phải là mục yêu thích mọi thời đại của bạn. Tôi sẽ lo lắng nhiều hơn về các loại điều tôi muốn hoàn thành, và sau đó học bất kỳ công cụ nào tôi cần để thực hiện chúng.


1

Nó thực sự hữu ích như học một ít tiếng Pháp, tiếng Tây Ban Nha, tiếng Anh, tiếng Ả Rập, tiếng Hindi và tiếng Trung trong khi không bao giờ biết rõ về bất kỳ ai trong số họ.


6
Tôi không biết bạn đang cố nói gì về điều đó.
Svick

Bạn có nhận ra rằng hầu hết chúng ta không biết "tốt" ngay cả ngôn ngữ mẹ đẻ của mình, phải không?
Spidey

1

Ngược lại, tôi nghĩ thật đau lòng khi tôi không / không thể học một ngôn ngữ lập trình mới. Có thể là do thiếu thời gian hoặc một số lý do khác. Theo như tôi thấy, các lập trình viên / nhà phát triển phần mềm rất thích thử thách ngôn ngữ, đặt những thứ / sản phẩm tốt hơn và khi bạn thấy rằng bạn luôn làm điều tương tự, bạn sẽ không cảm thấy tốt. Vì vậy, bạn muốn có một thách thức mới, một ngôn ngữ mới, một cái gì đó mới để học và đặt nhiều sản phẩm hơn bởi nó.

Vì vậy, tôi nghĩ rằng nó mang lại cho tôi sự phấn khích để theo dõi các ngôn ngữ mới, thư viện mới, cách tiếp cận mới, công nghệ mới. Nhưng tôi không có thời gian để lấy tất cả chúng, và mọi người có thể không thể đi đủ sâu luôn. Vì vậy, đau đớn để không tìm hiểu thêm; nhưng không đau để tìm hiểu thêm.


0

Tôi đồng ý với brian, FrustratedWithFormsDesign và SRKX, nhưng tôi muốn nói thêm rằng trong trường đại học này, mở rộng kiến ​​thức của bạn với nhiều ngôn ngữ lập trình và mô hình, là cách mong muốn để trở thành một chuyên gia giỏi.

Thật sự không thể tin được là bạn sắp ra trường đại học với tư cách là một lập trình viên thành lập. Lập trình là một nghề khó và bạn sẽ cần nhiều năm trong ngành làm việc cùng với các lập trình viên giỏi, tham dự các chương trình đào tạo tốt và các cuộc họp cộng đồng, và hầu hết, bạn sẽ phải đối mặt với các vấn đề thủ công và thất bại rất nhiều, cho đến khi bạn học được cách làm chủ nó

Học nhiều mô hình, nhiều ngôn ngữ, giải quyết nhiều vấn đề trong khu vực của chúng tôi, sẽ giúp bạn có cơ sở hỗ trợ tốt để tự học thủ công, hàng ngày trong khi hoạt động như một chuyên gia trong ngành.

Bạn có thể tham dự lớp Trình biên dịch, nhưng bạn sẽ không tham gia với tư cách là nhà thiết kế ngôn ngữ, người tạo hoặc thậm chí là nhà phát triển trình biên dịch. Bạn sẽ có được các bước, quy trình, và các vấn đề và các giải pháp cơ bản, và điều đó sẽ cho bạn lợi thế để thích ứng kiến ​​thức này với một loạt các vấn đề.


0

Câu trả lời ngắn gọn: Không.

Câu trả lời dài: Rất nhiều công việc của một lập trình viên hoặc kỹ sư phần mềm hoặc nhà thiết kế độc lập với một ngôn ngữ cụ thể nhưng rất phụ thuộc vào một phương pháp nhất định. Ví dụ, Lập trình hướng đối tượng rất nhiều về nơi mọi thứ tồn tại trong bộ nhớ và trong thời gian chạy, mức độ truy cập của chúng và mức độ sẵn có để sử dụng sau này (kế thừa và đóng gói). Việc triển khai khác nhau, chẳng hạn như Java có Đối tượng lớp kế thừa cấp cao nhất cho dù bạn có thích hay không và C ++ không có bất kỳ thứ gì bạn không chỉ định.

Nhiều ngôn ngữ chia sẻ các tính năng (và nhiều phân kỳ). Tất nhiên, cú pháp khác nhau và sẽ khó hơn khi bạn so sánh các mô hình hoàn toàn khác nhau như mệnh lệnh và chức năng. Nhưng xử lý chuỗi phần lớn giống nhau ở mọi nơi bạn đến, một khi bạn nhận được ít câu hỏi về cú pháp, chỉ mục và khả năng biến đổi. Bất kỳ ngôn ngữ nào với kiểu gõ tĩnh thường có một số phương pháp truyền và ép buộc, nhưng làm thế nào và khi nào bạn có thể làm điều đó tùy thuộc vào người thiết kế ngôn ngữ.

Ngôn ngữ là công cụ. Bạn chỉ cần đặt nhiều công cụ hơn trong vành đai của bạn. Nhưng công cụ này chỉ tốt như người thợ sử dụng nó.

Bây giờ, có bao nhiêu bạn học là một lựa chọn cá nhân. Tôi sẽ không bao giờ học một ngôn ngữ vì lợi ích của việc học một ngôn ngữ mới. Bất kỳ lựa chọn nào để học một ngôn ngữ mới đều được yêu cầu bởi một yêu cầu khóa học (phải chọn js, php và R cho một lớp duy nhất vào năm ngoái), một yêu cầu dự án hiện có (nếu 90% công việc được thực hiện trong perl 6 trước đó bạn được thuê, 10% còn lại sau đó) hoặc lợi ích dành riêng cho ứng dụng (R nói rằng Java kết hợp với một số thư viện có đường để phân tích thống kê).

Điều đó nói rằng, bạn muốn tìm hiểu những gì hiện có và có sẵn. Trường đại học của tôi đã dạy một khóa học về chủ đề này, Khái niệm ngôn ngữ lập trình . Đó là một khóa học tổng quan rộng, không phải là một toán học nghiêm ngặt hay liên quan đến mã hóa, bao gồm những điều cơ bản về những gì có thể được coi là thực tế hơn là khoa học máy tính lý thuyết. Đó là một khóa học tuyệt vời và tôi ước nó là thứ gì đó được cung cấp trong năm thứ 1-thứ 2 chứ không phải thứ 3-thứ 4. Các văn bản là khái niệm về ngôn ngữ lập trình . Không nói rằng bạn phải ra ngoài và đọc cuốn sách này, nhưng điều đó chắc chắn sẽ mở rộng tầm nhìn của bạn.


0

Vâng, theo cách tôi thấy, bạn không cần phải học từng ngôn ngữ. Nhưng hãy thử học các tính năng rất cơ bản sẽ được yêu cầu trong các ngôn ngữ khác.
Ví dụ, các khái niệm OOPS được yêu cầu trong tất cả các ngôn ngữ có thể là Java , PHP hoặc bất kỳ ngôn ngữ nào khác.
Các khái niệm cấp phát bộ nhớ khá giống nhau trong nhiều ngôn ngữ lập trình. Những loại chủ đề bạn không bao giờ nên bỏ lỡ.
Mỗi và mọi ngôn ngữ đều có ngữ pháp và quy tắc, áp dụng tương tự cho các ngôn ngữ lập trình; Chính Dennis Ritchie đã chấp nhận sự thật đó. Vì vậy, người ta nên học ngữ pháp của ngôn ngữ đó.
Nhưng theo cách tôi thấy thì bạn phải học các yếu tố không phổ biến giữa hai ngôn ngữ lập trình. Họ sẽ cho phép bạn xác định ngôn ngữ nào đại diện cho những gì. C ++ là tất cả OOP cơ bản (Lập trình hướng đối tượng), vì vậy một khi bạn học OOP khái niệm , bạn cũng học ngữ pháp mà bạn sẽ thấy trong PHP và Java.
Dòng học tập của tôi là:
Visual Basic 5 (một phần) -> HTML 2.0 (một phần) -> C (một phần) -> CPP (một phần) -> Java (một phần)
và sau đó tôi đã học C Ngôn ngữ một lần nữa tiếp theo C ++ tiếp theo JAVA ( hoàn thành lần này) sau đó tôi chuyển sang Android vì tôi đã quen với JavaXML(một phần) và học nó trong thời gian trung bình. Nỗ lực đầu tiên đã dạy tôi ít hơn nhưng trong lần thử thứ hai, hãy chắc chắn học mọi thứ sẽ giúp bạn trong lần tới.


bài này khá khó đọc (tường văn bản). Bạn có phiền chỉnh sửa ing nó thành một hình dạng tốt hơn?
gnat
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.