Tìm một ngôn ngữ lập trình mới để phát triển web? [đóng cửa]


14

Tôi tự hỏi liệu có bất kỳ tài nguyên ít thiên vị nào cung cấp tổng quan tốt, cụ thể về ngôn ngữ lập trình và mục tiêu dự định của chúng không. Tôi muốn học một ngôn ngữ mới, nhưng truy cập vào các trang web của mỗi ngôn ngữ không hoạt động. Mỗi người nói về sự tuyệt vời của nó mà không đề cập nhiều đến điểm yếu hoặc mục tiêu cụ thể của nó .

Ruby là một ngôn ngữ lập trình nguồn mở, năng động, tập trung vào sự đơn giản và năng suất.

Python là ngôn ngữ lập trình cho phép bạn làm việc nhanh hơn và tích hợp hệ thống của bạn hiệu quả hơn.

Đã là một nhà phát triển PHP trong nhiều năm, Vic Cherubini tóm tắt hoàn cảnh của tôi:

Tôi biết rõ về PHP, có khung làm việc của riêng tôi và có thể làm việc nhanh chóng để có được thứ gì đó và chạy.

Tôi đã lập trình như thế này trong suốt cuộc cách mạng MVC. Tôi đã có công việc tốt hơn và tốt hơn (đọc: trả tiền tốt hơn, tiêu đề tốt hơn) với tư cách là một nhà phát triển PHP, nhưng trong suốt quá trình nhận ra rằng mã tôi viết vào thời gian của tôi là tuyệt vời và mã tôi làm việc với công việc thật kinh khủng. Thích, tệ hơn kinh khủng. Gớm ghiếc. Hệ điều hành thương mại cấp xấu. Có các dự án phụ giữ cho tôi lành mạnh, bởi vì mã tôi làm việc với công việc làm cho tôi đau khổ.

Đây là lý do tại sao tôi nghỉ hưu từ PHP cho các dự án phụ của tôi và các dự án lập trình mới. Tôi đã dành cho PHP. Kiệt sức, nếu bạn muốn. Tôi đã đạt đến một cấp độ mà tôi nghĩ rằng tôi đứng đầu với ngôn ngữ đó và nếu tôi không sớm chuyển sang ngôn ngữ mới, tôi sẽ hoàn thành việc lập trình và tôi không muốn điều đó.

Các ngôn ngữ tôi đã xem bao gồm JavaScript (đối với node.js), Ruby, Python và Erlang. Tôi thậm chí đã nghĩ về Scala hoặc C ++.

Vấn đề là tìm ra cái nào được chế tạo để đáp ứng nhu cầu của tôi tốt nhất.

Vì vậy, tôi có thể đi đâu để bỏ qua sự cường điệu và có được thông tin thực sự về sự trưởng thành của một nền tảng, quy mô của cộng đồng và điểm mạnh và điểm yếu của ngôn ngữ đó. Nếu tôi biết những điều này thì việc chọn một ngôn ngữ để tiếp tục phát triển web của tôi sẽ trở nên dễ dàng.

Cập nhật

Tôi chỉ không muốn có 4 tháng với một số ngôn ngữ và thấy nó thật tệ vì mỗi luồng có 4 MB trên không, hoặc các kết nối đồng thời tối đa là 999, không có gói nào để thực hiện tính năng "X" hoặc hỗ trợ là được loại bỏ cho một nhánh ngôn ngữ mới.


14
Thật khó để nói điều nào sẽ giải quyết nhu cầu của bạn tốt nhất nếu bạn không chỉ định những nhu cầu này.
vartec

3
Đó là lý do tại sao tôi không xác định nhu cầu của mình - Nhu cầu cá nhân của tôi nằm bên cạnh vấn đề . Tôi muốn biết nơi tôi có thể tìm để phù hợp với nhu cầu của tôi với một ngôn ngữ lập trình nhất định. Bởi vì nhu cầu của tôi có thể thay đổi và tôi sẽ cần quay lại lần nữa.
Xeoncross

Đáng để chỉ ra rằng còn có nhiều chương trình hơn tốc độ thực thi . Tốc độ phát triển và cách bạn phải xây dựng ứng dụng của mình (do ngôn ngữ) đóng một vai trò quan trọng.
Xeoncross

4
đây là ít về ngôn ngữ và nhiều hơn về sự trưởng thành và tính phong phú của các khung có sẵn cho chúng.

1
Tôi đề nghị bạn hãy xem bài viết tuyệt vời này của Alex Martelli.
phant0m

Câu trả lời:


3

Tôi sẽ không đăng bài này như một câu trả lời, nhưng Xeoncross đã yêu cầu tôi, vì vậy chúng tôi đi đây:

(Sidenote: nếu ai đó có thể khắc phục sự cố đánh dấu trong ví dụ mã nhỏ, tôi sẽ đánh giá cao nó.)

Được đăng bởi Alex Martelli trên comp.lang.python : Ruby nào tốt hơn Python? vào ngày 18 tháng 8 năm 2003, 5:50 chiều

Erik Max Francis đã viết:

"Brandon J. Van Every" đã viết:

Ruby có gì hay hơn Python? Tôi chắc chắn có một cái gì đó. Nó là gì? Sẽ không có ý nghĩa hơn khi hỏi người Ruby điều này, thay vì người Python?

Có thể, hoặc có thể không, tùy thuộc vào mục đích của một người - ví dụ: nếu mục đích của một người bao gồm "nghiên cứu xã hội học" về cộng đồng Python, thì việc đặt câu hỏi cho cộng đồng đó có khả năng chứng minh nhiều thông tin hơn về nó, hơn là đưa họ ra nơi khác :-). Cá nhân, tôi sẵn sàng nắm lấy cơ hội để theo dõi hướng dẫn Ruby một ngày của Dave Thomas tại OSCON cuối cùng. Bên dưới lớp veneer mỏng về sự khác biệt về cú pháp, tôi thấy Ruby và Python giống nhau một cách đáng kinh ngạc - nếu tôi tính toán cây bao trùm tối thiểu trong số bất kỳ tập hợp ngôn ngữ nào, tôi khá chắc chắn Python và Ruby sẽ là hai lá đầu tiên hợp lại một nút trung gian :-).

Chắc chắn, tôi nhận được mệt mỏi, trong Ruby, gõ ngớ ngẩn "kết thúc" vào cuối mỗi khối (thay vì chỉ unindenting) - nhưng sau đó tôi nhận được để tránh gõ bình đẳng-ngớ ngẩn : mà Python đòi hỏi ở sự khởi đầu của mỗi khối, vì vậy đó gần như là một rửa :-). Các khác biệt cú pháp khác như @fooso với self.foo, hoặc tầm quan trọng cao hơn của trường hợp trong Ruby vs Python, thực sự không liên quan đến tôi.

Những người khác không nghi ngờ gì về việc họ lựa chọn ngôn ngữ lập trình cho những vấn đề như vậy và họ tạo ra những cuộc tranh luận sôi nổi nhất - nhưng với tôi đó chỉ là một ví dụ về Luật của Parkinson trong hành động (số tiền tranh luận về một vấn đề tỷ lệ nghịch với vấn đề tầm quan trọng thực tế). Một sự khác biệt về cú pháp mà tôi thấy rất quan trọng và có lợi cho Python - nhưng những người khác chắc chắn sẽ nghĩ ngược lại - là "làm thế nào để bạn gọi một hàm không có tham số". Trong Python (như trong C), để gọi một hàm, bạn luôn áp dụng "toán tử cuộc gọi" - dấu ngoặc đơn ngay sau khi đối tượng bạn đang gọi (bên trong các dấu ngoặc đơn đó đi đến các đối số bạn đang chuyển trong cuộc gọi - nếu bạn đang vượt qua không có đối số, sau đó dấu ngoặc đơn trống). Điều này chỉ đề cập đến bất kỳ đối tượng nào, không có toán tử tham gia, vì nó chỉ là một tham chiếu đến đối tượng - trong bất kỳ bối cảnh nào, không có trường hợp đặc biệt, ngoại lệ, quy tắc đặc biệt và tương tự. Trong Ruby (như trong Pascal), để gọi một hàm VỚI các đối số bạn truyền các đối số (thông thường trong ngoặc đơn, mặc dù đó không phải là trường hợp thường gặp) - NHƯNG nếu hàm không có đối số thì chỉ cần đề cập đến hàm gọi nó. Điều này có thể đáp ứng sự mong đợi của nhiều người (ít nhất, không còn nghi ngờ gì nữa, những người chỉ có kinh nghiệm lập trình trước đó là với Pascal hoặc các ngôn ngữ khác có "gọi điện thoại" tương tự, như Visual Basic) - nhưng đối với tôi, nó có nghĩa là chỉ đề cập đến một đối tượng có thể EITHER có nghĩa là một tham chiếu đến đối tượng, HOẶC một cuộc gọi đến đối tượng, tùy thuộc vào loại đối tượng - và trong những trường hợp tôi không thể tham chiếu đến đối tượng bằng cách chỉ đề cập đến nó, tôi sẽ cần sử dụng rõ ràng "hãy cho tôi một tham chiếu đến điều này, ĐỪNG gọi nó!" toán tử không cần thiết khác. Tôi cảm thấy điều này tác động đến "hạng nhất" của các chức năng (hoặc phương thức hoặc các đối tượng có thể gọi khác) và khả năng trao đổi các đối tượng một cách trơn tru. Do đó, với tôi, sự khác biệt cú pháp cụ thể này là một dấu đen nghiêm trọng đối với Ruby - nhưng tôi hiểu tại sao những người khác lại làm điều khác, mặc dù tôi khó có thể không đồng ý kịch liệt hơn với họ :-). Bên dưới cú pháp, chúng ta có một số khác biệt quan trọng về ngữ nghĩa cơ bản - ví dụ: các chuỗi trong Ruby là các đối tượng có thể thay đổi (như trong C ++), trong khi trong Python chúng không thể thay đổi (như trong Java hoặc tôi tin C #). Một lần nữa, những người đánh giá chủ yếu bởi những gì họ đã quen thuộc có thể nghĩ rằng đây là điểm cộng cho Ruby (trừ khi họ quen thuộc với Java hoặc C #, tất nhiên :-). Tôi, tôi nghĩ rằng các chuỗi bất biến là một ý tưởng tuyệt vời (và tôi không ngạc nhiên khi Java, tôi nghĩ độc lập, đã phát minh lại ý tưởng đã có trong Python), mặc dù tôi cũng không phiền khi có loại "bộ đệm chuỗi có thể thay đổi" (và lý tưởng nhất là dễ sử dụng hơn "bộ đệm chuỗi" của Java); và tôi không đưa ra phán xét này vì sự quen thuộc - trước khi nghiên cứu Java, ngoài các ngôn ngữ lập trình chức năng nơi những người đánh giá chủ yếu bởi những gì họ đã quen thuộc có thể nghĩ rằng đây là điểm cộng cho Ruby (trừ khi họ quen thuộc với Java hoặc C #, tất nhiên :-). Tôi, tôi nghĩ rằng các chuỗi bất biến là một ý tưởng tuyệt vời (và tôi không ngạc nhiên khi Java, tôi nghĩ độc lập, đã phát minh lại ý tưởng đã có trong Python), mặc dù tôi cũng không phiền khi có loại "bộ đệm chuỗi có thể thay đổi" (và lý tưởng nhất là dễ sử dụng hơn "bộ đệm chuỗi" của Java); và tôi không đưa ra phán xét này vì sự quen thuộc - trước khi nghiên cứu Java, ngoài các ngôn ngữ lập trình chức năng nơi những người đánh giá chủ yếu bởi những gì họ đã quen thuộc có thể nghĩ rằng đây là điểm cộng cho Ruby (trừ khi họ quen thuộc với Java hoặc C #, tất nhiên :-). Tôi, tôi nghĩ rằng các chuỗi bất biến là một ý tưởng tuyệt vời (và tôi không ngạc nhiên khi Java, tôi nghĩ độc lập, đã phát minh lại ý tưởng đã có trong Python), mặc dù tôi cũng không phiền khi có loại "bộ đệm chuỗi có thể thay đổi" (và lý tưởng nhất là dễ sử dụng hơn "bộ đệm chuỗi" của Java); và tôi không đưa ra phán xét này vì sự quen thuộc - trước khi nghiên cứu Java, ngoài các ngôn ngữ lập trình chức năng nơi Tôi nghĩ rằng các chuỗi bất biến là một ý tưởng tuyệt vời (và tôi không ngạc nhiên khi Java, tôi nghĩ độc lập, đã phát minh lại ý tưởng đã có trong Python), mặc dù tôi cũng không phiền khi có loại "bộ đệm chuỗi có thể thay đổi" (và lý tưởng với tính dễ sử dụng tốt hơn "bộ đệm chuỗi" của Java); và tôi không đưa ra phán xét này vì sự quen thuộc - trước khi nghiên cứu Java, ngoài các ngôn ngữ lập trình chức năng nơi Tôi nghĩ rằng các chuỗi bất biến là một ý tưởng tuyệt vời (và tôi không ngạc nhiên khi Java, tôi nghĩ độc lập, đã phát minh lại ý tưởng đã có trong Python), mặc dù tôi cũng không phiền khi có loại "bộ đệm chuỗi có thể thay đổi" (và lý tưởng với tính dễ sử dụng tốt hơn "bộ đệm chuỗi" của Java); và tôi không đưa ra phán xét này vì sự quen thuộc - trước khi nghiên cứu Java, ngoài các ngôn ngữ lập trình chức năng nơitất cả dữ liệu là bất biến, tất cả các ngôn ngữ tôi biết đều có chuỗi có thể thay đổi - nhưng khi tôi lần đầu tiên nhìn thấy ý tưởng chuỗi bất biến trong Java (mà tôi đã học tốt trước khi tôi học Python), nó ngay lập tức rất tuyệt vời, phù hợp với tôi ngữ nghĩa tham chiếu của ngôn ngữ lập trình cấp cao hơn (trái ngược với ngữ nghĩa giá trị phù hợp nhất với các ngôn ngữ gần với máy hơn và xa hơn các ứng dụng, như C) với các chuỗi như lớp thứ nhất, tích hợp (và đẹp quan trọng) kiểu dữ liệu.

Ruby có một số lợi thế trong ngữ nghĩa cơ bản - ví dụ, việc loại bỏ "danh sách so với tuples" của Python là sự phân biệt cực kỳ tinh tế. Nhưng chủ yếu là điểm số (như tôi giữ nó, với sự đơn giản là một điểm cộng lớn và sự tinh tế, khéo léo, một điểm trừ đáng chú ý) là chống lại Ruby (ví dụ, có cả hai khoảng thời gian đóng và nửa mở, với các ký hiệu a..b và a .. .b [bất kỳ ai cũng muốn khẳng định rằng đó là điều hiển nhiên đó là gì? -)], thật ngớ ngẩn - IMHO, tất nhiên!). Một lần nữa, những người coi việc có nhiều thứ tương tự nhưng khác biệt một cách tinh tế ở cốt lõi của ngôn ngữ là PLUS, chứ không phải là MINUS, tất nhiên sẽ tính những "cách khác" từ cách tôi đếm chúng :-).

Đừng lầm tưởng bởi những so sánh này khi nghĩ rằng hai ngôn ngữ rấtkhác nhau, nhớ bạn Họ không. Nhưng nếu tôi được yêu cầu so sánh "capelli d'angelo" với "spaghettini", sau khi chỉ ra rằng hai loại mì ống này không thể phân biệt được với bất kỳ ai và có thể hoán đổi cho nhau trong bất kỳ món ăn nào bạn muốn chuẩn bị, thì tôi chắc chắn sẽ có để chuyển sang kiểm tra bằng kính hiển vi về độ dài và đường kính khác nhau rõ rệt như thế nào, làm thế nào các đầu của sợi được làm thon trong một trường hợp chứ không phải trong trường hợp khác, v.v. - để thử và giải thích tại sao tôi, cá nhân, lại thích có capelli d 'angelo là mì ống trong bất kỳ loại nước dùng nào, nhưng sẽ thích spaghettini hơn là pastasciutta đi kèm với nước sốt thích hợp cho các dạng pasta mỏng dài như vậy (dầu ô liu, tỏi băm, ớt đỏ băm nhỏ, và cá cơm nghiền mịn, ví dụ - nhưng nếu bạn cắt lát tỏi và ớt thay vì băm nhỏ, thì bạn nên chọn phần thân của mì spaghetti chứ không phải là spaghettini mỏng hơn, và sẽ được khuyên nên bỏ qua món achoview và thay vào đó là húng quế tươi [ hoặc thậm chí - Tôi là một kẻ dị giáo ...! - bạc hà nhẹ ...] lá - vào giây phút cuối cùng trước khi phục vụ món ăn). Ooops, xin lỗi, nó cho thấy rằng tôi đang đi du lịch nước ngoài và đã không có mì ống trong một thời gian, tôi đoán. Nhưng sự tương tự vẫn còn khá tốt! -) và sẽ được khuyên nên từ bỏ achoview và thay vào đó là một ít húng quế tươi [hoặc thậm chí - Tôi là một kẻ dị giáo ...! - bạc hà nhẹ ...] lá - vào giây phút cuối cùng trước khi phục vụ món ăn). Ooops, xin lỗi, nó cho thấy rằng tôi đang đi du lịch nước ngoài và đã không có mì ống trong một thời gian, tôi đoán. Nhưng sự tương tự vẫn còn khá tốt! -) và sẽ được khuyên nên từ bỏ achoview và thay vào đó là một ít húng quế tươi [hoặc thậm chí - Tôi là một kẻ dị giáo ...! - bạc hà nhẹ ...] lá - vào giây phút cuối cùng trước khi phục vụ món ăn). Ooops, xin lỗi, nó cho thấy rằng tôi đang đi du lịch nước ngoài và đã không có mì ống trong một thời gian, tôi đoán. Nhưng sự tương tự vẫn còn khá tốt! -)

Vì vậy, trở lại với Python và Ruby, chúng tôi đến với hai ông lớn (về ngôn ngữ phù hợp - rời khỏi thư viện và các công cụ phụ trợ quan trọng khác như công cụ và môi trường, cách nhúng / mở rộng từng ngôn ngữ, v.v. bây giờ - họ sẽ không áp dụng cho tất cả THỰC HIỆN của từng ngôn ngữ, ví dụ: Jython vs Classic Python là hai triển khai của ngôn ngữ Python!):

  1. Trình lặp và bộ mã của Ruby so với trình lặp và trình tạo của Python;

  2. TOTAL của Ruby, "tính năng động" không bị kiểm soát, bao gồm khả năng "mở lại" bất kỳ lớp hiện có nào, bao gồm tất cả các lớp tích hợp sẵn và thay đổi hành vi của nó trong thời gian chạy - so với tính năng động rộng lớn nhưng bị ràng buộc của Python     , không bao giờ thay đổi hành vi của hiện tại các lớp tích hợp và các thể hiện của chúng.

Cá nhân, tôi coi 1 lần rửa (sự khác biệt sâu sắc đến mức tôi có thể dễ dàng thấy mọi người ghét cách tiếp cận và tôn trọng người khác, nhưng trên thang điểm cá nhân của tôi, điểm cộng và điểm trừ thậm chí còn tăng lên); và [2] một vấn đề quan trọng - một vấn đề khiến Ruby phù hợp hơn nhiều cho việc "mày mò", NHƯNG Python phù hợp hơn không kém để sử dụng trong các ứng dụng sản xuất lớn. Theo một cách nào đó, điều đó thật buồn cười, bởi vì cả hai ngôn ngữ đều RẤT năng động hơn hầu hết các ngôn ngữ khác, rằng cuối cùng, sự khác biệt chính giữa chúng từ POV của tôi nên xoay quanh vấn đề đó - rằng Ruby "đi đến mười một" về vấn đề này (tài liệu tham khảo tất nhiên ở đây là "Spinal Tap". Trong Ruby,TÔI CÓ THỂ LÀM ĐIỀU NÀY ! Tức là, tôi có thể tự động thay đổi lớp chuỗi tích hợp để

a = "Xin chào thế giới" 
b = "chào thế giới" 
nếu a == b 
    in "bằng! \ n" 
khác 
    in "khác nhau! \ n" 
kết thúc
 

S print in "bằng". Trong python, KHÔNG có cách nào tôi có thể làm điều đó. Với mục đích lập trình siêu dữ liệu, triển khai các khung thử nghiệm và tương tự, khả năng năng động tuyệt vời này của Ruby là vô cùng hấp dẫn. NHƯNG - nếu chúng ta đang nói về các ứng dụng lớn, được phát triển bởi nhiều người và thậm chí còn được duy trì nhiều hơn, bao gồm tất cả các loại thư viện từ nhiều nguồn khác nhau và cần phải đi vào sản xuất trong các trang web của khách hàng ... tốt, tôi không MUỐN một ngôn ngữ rất QUITE rất năng động, cảm ơn bạn rất nhiều. Tôi ghê tởm ý tưởng về một số thư viện vô tình phá vỡ những cái không liên quan khác dựa vào các chuỗi đó là khác nhau - đó là loại "kênh" ẩn sâu và sâu, giữa các đoạn mã mà TÌM tách ra và NÊN tách ra, nói lên cái chết lập trình quy mô lớn. Bằng cách để bất kỳ mô-đun nào ảnh hưởng đến hành vi của bất kỳ "bí mật" nào khác,

Nếu tôi phải sử dụng Ruby cho một ứng dụng lớn như vậy, tôi sẽ cố gắng dựa vào các hạn chế theo kiểu mã hóa, rất nhiều thử nghiệm (để chạy lại bất cứ khi nào BẤT CỨ thay đổi - ngay cả những gì hoàn toàn không liên quan ...), và tương tự, cấm sử dụng tính năng ngôn ngữ này. Nhưng theo tôi, KHÔNG có tính năng này ngay từ đầu thậm chí còn tốt hơn - giống như bản thân Python sẽ là ngôn ngữ tốt hơn để lập trình ứng dụng nếu một số lượng tích hợp nhất định có thể bị "đóng đinh", vì vậy tôi BIẾT rằng , ví dụ, len("ciao")là 4 (thay vì phải lo lắng một cách cao siêu về việc liệu ai đó đã thay đổi ràng buộc tên lentrong __builtins__ mô-đun ...). Tôi hy vọng rằng cuối cùng Python cũng "đóng đinh" các phần mềm dựng sẵn của nó.

Nhưng vấn đề nhỏ, vì việc dựng lại các phần dựng sẵn khá không được chấp nhận cũng như một cách thực hành hiếm gặp trong Python. Trong Ruby, nó gây ấn tượng mạnh với tôi - giống như các cơ sở vĩ mô quá mạnh của các ngôn ngữ khác (như, nói, Dylan) đưa ra những rủi ro tương tự theo quan điểm của riêng tôi (tôi hy vọng rằng Python không bao giờ có được một hệ thống vĩ mô mạnh như vậy, không vấn đề hấp dẫn là "cho phép mọi người xác định ngôn ngữ nhỏ của riêng họ được nhúng trong chính ngôn ngữ đó" - IMHO, sẽ làm giảm tính hữu dụng tuyệt vời của Python đối với lập trình ứng dụng, bằng cách đưa ra một "phiền toái hấp dẫn" cho người tin học ẩn giấu trong trái tim của mỗi lập trình viên ...).

Alex


Tôi đã trao giải này như là câu trả lời vì đây là một tổng quan tuyệt vời, tương đối không thiên vị về toàn bộ Ruby và Python. Giải thích cách các ngôn ngữ hoạt động và không hoạt động .
Xeoncross

27

Chúc may mắn

Không có mô tả ví dụ nào được đưa ra là khách quan hoặc có thể kiểm tra được. Tất cả đều cường điệu và ý kiến.

... đơn giản và năng suất ... nhanh hơn ... hiệu quả hơn.

Thử nó

Lấy một dự án mẫu nhỏ thuộc loại bạn có thể đang thực hiện và thử nó với tất cả các ngôn ngữ mà bạn quan tâm. Sau đó đăng đánh giá khách quan của bạn, và tất cả chúng ta sẽ biết.


2
Không phải là một ý tưởng tồi, tuy nhiên nó sẽ không hoạt động trong thế giới thực. Không dành thời gian để hiểu đầy đủ từng ngôn ngữ - tôi không bao giờ có thể thấy trước vấn đề mẫu thiết kế đầy đủ và lợi ích mà mỗi hệ thống có thể cung cấp. Tôi chắc rằng sẽ mất nhiều tháng làm việc trong từng ngôn ngữ để đạt được sự hiểu biết cao về ngôn ngữ đó. Tôi thà nghe từ các chuyên gia lốp xe hơn là dành nhiều tháng để điều chỉnh từng bánh xe để tìm ra lý do tại sao họ chế tạo nó như vậy. Tuy nhiên, sau khi tôi có một số ứng cử viên tốt, tôi chắc chắn sẽ làm điều này.
Xeoncross

1
@Xeoncross: với mỗi ngôn ngữ bạn thử, bạn sẽ tăng trải nghiệm của mình và bạn sẽ có thể tận dụng ngôn ngữ đó bằng các ngôn ngữ khác. 4 tháng để đi sâu vào một ngôn ngữ không bao giờ bị mất; và nếu ngôn ngữ thực sự tào lao, bạn cần ít hơn hai tuần để tìm hiểu.
tdammers

Điều đó đúng, chỉ mất vài tuần để xây dựng một cái gì đó và tôi sẽ được hưởng lợi từ trải nghiệm vì các ngôn ngữ thường theo các ngôn ngữ khác.
Xeoncross

3
Vâng, có lẽ bạn nên thử tất cả các ngôn ngữ này để tìm một sự phù hợp tốt. Nhưng vấn đề là khi bạn sử dụng một ngôn ngữ mới, bạn không sử dụng nó theo cách bạn được yêu cầu ban đầu. Cuối cùng, bạn sẽ làm điều tương tự mà bạn đang làm với ngôn ngữ mà bạn đã biết cách sử dụng chỉ với các cú pháp khác nhau. Mất khá nhiều thời gian để tìm ra những điểm tốt hơn của mỗi ngôn ngữ và lợi ích thực sự là gì.
radix07

3
Tôi sẽ ngạc nhiên nếu có bất kỳ sự khác biệt đáng kể giữa các ngôn ngữ hiện đại cho các mục đích chung. Ở đó, tôi nói to. Và in nghiêng . Hãy để ngọn lửa bắt đầu!
Steven A. Lowe

8

Tôi nghĩ một phần của vấn đề là bất cứ ai biết đủ để bình luận có ý nghĩa về một hoặc nhiều ngôn ngữ sẽ có thành kiến. Trong gần 4 thập kỷ lập trình tôi đã làm việc với nhiều ngôn ngữ hơn tôi có thể đếm được. Tôi có thể đưa ra ý kiến ​​của bạn (một số trong số chúng có niên đại) về khá nhiều ngôn ngữ đó, nhưng không có ý kiến ​​nào trong số đó sẽ không thiên vị.

Tôi sử dụng phương pháp sử dụng ngôn ngữ phù hợp cho công việc. Bạn đặc biệt hỏi về phát triển web , nhưng đó vẫn là một phạm trù khá rộng - giống như nói rằng bạn thích chụp ảnh. Vi mô? Astro? v.v. Mặc dù tôi đồng ý rằng PHP không phải là ngôn ngữ thỏa mãn cảm xúc để làm việc, nhưng đối với nhiều khách hàng, đó là ngôn ngữ phù hợp dựa trên bất kỳ yếu tố nào, không phải là khả năng lâu dài để tìm lập trình viên sửa lỗi trang web sau khi bạn rời khỏi và / hoặc bị xe buýt đâm.

Vì vậy, có lẽ bạn nên xem xét các loại khách hàng quan tâm đến các dự án cho vay một thứ gì đó khác biệt, và sau đó làm việc để khiến bản thân trở nên thú vị với họ.


Chà, vì tôi rất giỏi về PHP - tôi sẽ tiếp tục làm việc với nó vì tôi vẫn có thể kiếm sống tốt. Tôi đã chủ yếu nghĩ về một ngôn ngữ mới cho các dự án của riêng tôi . Một cái gì đó để giúp thêm một số hương vị trở lại cuộc sống của tôi. Tôi làm việc trong chỉ là về mọi là phát triển web mà bạn có thể nghĩ đến, NLP, Text phân tích cú pháp, CMS, API, lưu trữ, vv Ngoài ra, người có kinh nghiệm trong nhiều ngôn ngữ có nhiều ít của một thiên vị hơn những người chỉ với một quá trình thiết kế.
Xeoncross

Ah. Sau đó, tôi sẽ đưa ra câu trả lời chuẩn cho câu hỏi "ngôn ngữ tốt nhất": Python. Bỏ qua "khoảng trắng đáng kể" (điều này có thể làm được), nó gần với một ngôn ngữ hoàn hảo đối với tôi. Ngoài ra, có rất nhiều thư viện chất lượng rất cao ngoài kia với API Python. Ví dụ: NLTK, Bộ công cụ ngôn ngữ tự nhiên ( nltk.org ).
Peter Rowell

Ah, nhưng điều gì về Python làm cho nó tốt hơn? Hầu hết các ngôn ngữ đều có chung một bộ công cụ - đó là thiết kế ngôn ngữ giới thiệu những thứ như phân luồng, đồng thời, yêu cầu VM, biên dịch / phiên dịch, kiên trì, v.v.
Xeoncross

Python chỉ đơn giản là thú vị để lập trình. Đó là điều làm cho nó "tốt hơn" với tôi. Nó đủ đơn giản để bạn không cần một IDE lớn chỉ để viết mã trong đó. Nhưng cũng có nhiều tính năng thú vị như các đối tượng, khả năng lập trình chức năng, nhiều thư viện / khung / công cụ hiện có và một cộng đồng thịnh vượng và nhiệt tình với nhiều tài liệu mở / miễn phí để đưa bạn đi.
John Gaines Jr.

2
Thật. Giải thích đơn giản nhất là Python hoạt động giống như bộ não của tôi và điều đó giúp tôi làm việc hiệu quả hơn; Tôi hầu như không bao giờ thấy mình hỏi, "Bây giờ tôi sẽ làm điều này bằng Python như thế nào?" Mặc dù GIL (Khóa phiên dịch toàn cầu) có một chút vấn đề, nhưng nó không có xu hướng ảnh hưởng đến tôi nhiều vì tôi thường xuyên xử lý các tình huống đa xử lý (đáng chú ý là các đường ống xử lý NL nhiều giai đoạn) so với đa nhiệm . Tôi cũng thích nhiều tùy chọn giao thoa để truy cập các thư viện bên ngoài mới: ctypes, Boost, v.v.
Peter Rowell

7

Con trăn

Hầu hết các mục đích chung và chung của tất cả chúng, nhưng trong trường hợp lập trình web cung cấp nhiều lựa chọn sản phẩm hơn. Có giao diện WSGI được tiêu chuẩn hóa đảm bảo khả năng tương tác tuyệt vời giữa khung và máy chủ. Một số sản phẩm web Python đáng chú ý:

  • Django - khuôn khổ cấp cao hoàn chỉnh, trưởng thành với ORM tiên tiến, hệ thống tạo khuôn mẫu, xử lý biểu mẫu, v.v.
  • Twisted - khuôn khổ cho lập trình mạng hướng sự kiện (không đồng bộ), nó có thể được sử dụng cho các cuộc trò chuyện, máy chủ ổ cắm, dịch vụ web, bạn đặt tên cho nó.
  • Tornado - cũng là khung hướng sự kiện, nhưng khung này được thiết kế cho các dịch vụ web không đồng bộ.

Hồng ngọc

Ruby cũng là ngôn ngữ khá phổ quát. Nhưng cho đến nay, sản phẩm đáng chú ý nhất là Ruby on Rails. Đó là thiết kế đã được truyền cảm hứng cho nhiều người (bao gồm cả Django đã đề cập ở trên).

JavaScript

Hiện tại, lựa chọn phía máy chủ duy nhất cho JS là node.js. Nó rất giống với Tornado và Twisted (nhờ đó nó được truyền cảm hứng). Tuy nhiên, nó vẫn thiếu khung hoàn toàn tương tự như Django hoặc RoR được xây dựng trên nó.

Scala

Là ngôn ngữ chức năng, thật tuyệt vời cho tính toán song song ồ ạt, theo như lập trình web có mục đích chung có thang máy - khung web lấy cảm hứng từ RoR, được sử dụng ví dụ bởi FourSapes.


Thật đáng để chỉ ra rằng những thứ như phản hồi không chặn, sử dụng bộ nhớ, đồng thời và các yếu tố khác là rất lớn trên thị trường cho một ngôn ngữ mới sẽ cung cấp năng lượng cho ứng dụng web.
Xeoncross

+1 cho Django. Nó làm tôi suy nghĩ khi tôi học nó ... hoặc tôi đang trong trạng thái choáng váng vì tôi đã học được nó và Python đồng thời. Dù bằng cách nào, một công nghệ tuyệt vời mà tôi muốn xem lại đó là "thời gian rảnh" khó nắm bắt của tôi.
zourtney

1
"... nó vẫn thiếu khung hoàn chỉnh" Hãy xem Express cho Node - expressjs.com
T. Stone

@T: yeah, tôi đã xem Express. Một trong những điểm mạnh của Django và RoR là ORM. Express dường như không có nó.
vartec

3

Trong dự án web mới nhất của tôi, tôi đã bắt đầu với PHP vì tôi đã sử dụng nó cho dự án web trước đó (bắt đầu nhanh), nhưng tôi gặp nhiều vấn đề với ngôn ngữ, ví dụ như hỗ trợ UTF-8 kém và gõ động. Tôi cũng có một số nền tảng Java và tôi thực sự thích kiểu gõ tĩnh và các công cụ tái cấu trúc tốt. Java cũng có hiệu năng tốt so với PHP. Nhưng tôi cũng thích sự biểu cảm của lập trình chức năng.

Scala và Play Framework

Với kinh nghiệm trên, tôi thực sự thích ngôn ngữ lập trình Scala, được gõ tĩnh, hỗ trợ cả lập trình hướng đối tượng và lập trình chức năng và nó có hiệu suất tốt so với các ngôn ngữ khác được sử dụng để phát triển web. Nhưng tôi không thích các khung web cho Java và các tiện ích con và tôi thấy Play Framework hỗ trợ cả Scala và Java và nó có chu kỳ phát triển rất nhanh - lưu tệp và cập nhật trang web của bạn. Tôi đã rất hài lòng với Scala & Play Framework vào tháng trước. Nhưng hỗ trợ Scala trong Play Framework vẫn chưa hoàn thiện và cũng không hỗ trợ công cụ.

Nói tóm lại, tôi khuyên dùng Scala làm ngôn ngữ lập trình và Play Framework làm khung web.


Chơi có vẻ hay, chưa có cơ hội để thực sự ( thực sự ) thử nghiệm nó. Đến từ một nền tảng php tương tự, tôi thấy Nâng khá dễ dàng để nắm bắt. Nó dường như cũng trưởng thành hơn một chút so với Play, nhưng tôi quá mới mẻ với Scala, để có thể kết luận.
yannis

3

Trên thực tế, bạn đang xem xét ba loại tài nguyên:

  • Một trong đó giải thích những điều cơ bản của ngôn ngữ và tại sao bạn muốn sử dụng nó,
  • Một trong đó so sánh một số ngôn ngữ.
  • Một trong đó chỉ trích một số khía cạnh của một ngôn ngữ.

Cả hai tài nguyên đó sẽ được thiên vị.

  • Khi bạn giải thích điều gì đó về một ngôn ngữ, bạn đang cố gắng hầu hết thời gian để thuyết phục người đọc sử dụng nó. Vì vậy, bạn sẽ hiếm khi nói rằng ngôn ngữ hút.
  • Khi bạn so sánh một số ngôn ngữ, bạn luôn có một sở thích cá nhân cho một trong số chúng.
  • Khi bạn chỉ trích một cái gì đó, tốt, khó có thể trung lập.

Bạn có thể có cơ hội tìm thấy một số so sánh trung lập, nhưng rất khó để viết một so sánh. Cá nhân, tôi sẽ không bao giờ có thể viết một so sánh giữa một ngôn ngữ thực và PHP mà không chỉ trích PHP mọi lúc. Và tôi khá chắc chắn rằng tôi không cô đơn khi không thể trung lập.


Nếu bạn muốn có một cái nhìn tổng quan về các ngôn ngữ khác nhau, bạn phải tự học chúngđọc rất nhiều . Bằng cách học, tôi có nghĩa là biết những điều cơ bản của ngôn ngữ, nhưng có thể có ý kiến ​​của riêng bạn . Không phải vì bạn đã đọc hướng dẫn sử dụng Ruby hơn là bạn có thể giải thích điều gì là tốt và điều gì là xấu trong ngôn ngữ này.

Điều này có nghĩa là bạn phải dành thời gian (tháng hoặc thậm chí nhiều năm) để thực hành. Hoặc, bạn có thể đọc rất nhiều. Nhưng cố gắng đọc những điều mâu thuẫn . Nếu một người nào đó viết rằng anh ta ghét PHP và PHP là một trong những ngôn ngữ tồi tệ nhất, đặc biệt là so với các ngôn ngữ thực như Ruby, C # hoặc Java, hãy thử tìm một người nói rằng PHP thật tuyệt vời và nó dễ sử dụng hơn C #, nhanh hơn nhiều so với Java và nhiều ... (tôi thực sự không biết gì) so với Ruby.

Hãy nhớ một điều: nếu bạn đã biết rõ một ngôn ngữ, bạn sẽ rất phê bình ngay từ đầu khi học một ngôn ngữ khác , tin rằng ngôn ngữ bạn đã biết là tốt hơn và dễ sử dụng hơn nhiều. Giống như người dùng Linux ghét Windows và người dùng Windows ghét Linux: thực tế, không phải hệ điều hành nào tốt hơn; chỉ là người dùng Linux không biết cách sử dụng Windows và ngược lại. Chỉ sau khi bạn có đủ kinh nghiệm trong cả hai thì bạn mới có thể quyết định chính xác cái nào tốt hơn cho mình.


Điều cuối cùng, thường bị lãng quên: cũng rất quan trọng để có thể đánh giá "môi trường xung quanh" của ngôn ngữ:

  • Làm thế nào tốt là khung (hoặc các khung được sử dụng nhiều nhất)?
  • Có dễ dàng để tìm thấy một dịch vụ lưu trữ? Bạn có đánh giá cao IDE?
  • Có rất nhiều thư viện bên thứ ba được viết tốt?
  • Là cộng đồng bao gồm các nhà phát triển chuyên nghiệp cao, hoặc chủ yếu là bởi những người mới bắt đầu, những người không biết gì về lập trình nói chung, cũng như về ngôn ngữ?
  • Là tài liệu dài dòng đủ và dễ dàng để tìm kiếm và hiểu?
  • Là ngôn ngữ và các khung được cập nhật thường xuyên?
  • Vân vân.

Tôi hoàn toàn đồng ý. Đó là những câu hỏi tôi đang tìm kiếm một câu trả lời cho. Bạn đề cập đến việc đọc rất nhiều - và đó là những gì tôi đang cố gắng thực hiện - tôi cần rất nhiều tài nguyên để đọc về các ngôn ngữ mà tôi muốn tìm hiểu. Mặc dù không thể có một đánh giá không thiên vị, một số thậm chí còn cân bằng hơn nhiều và đó là tất cả những gì tôi muốn.
Xeoncross

2

Chà, vì một trong những tiêu chí của bạn có vẻ là "rất vui khi làm việc", tôi nghĩ bạn muốn tìm thông tin thiên vị. Nếu tác giả của một cái gì đó đam mê ngôn ngữ của họ, có một cơ hội khá tốt họ sẽ đưa ra một đánh giá thiên vị.

Có lẽ bạn nên tiếp cận nó từ hướng khác. Vì bạn có vẻ như bạn đang nói về việc làm cho sự nghiệp thoát khỏi nó chứ không phải là một sở thích, có lẽ bạn nên khảo sát một số quảng cáo việc làm, tìm một số công nghệ / ngôn ngữ thú vị và xem xét những thứ đó.

Đối với các ngôn ngữ có mục tiêu cụ thể, nhiều ngôn ngữ không có chúng. Hầu hết các ngôn ngữ bạn liệt kê là mục đích chung chung. Ví dụ, ngôn ngữ Ruby là một ngôn ngữ có mục đích chung khá phù hợp cho nhiều nhiệm vụ. Khi bạn thêm một khung cho nó, như Rails , điều đó có một mục tiêu khá cụ thể.


1

Đây không phải là chính xác những gì bạn đang hỏi, nhưng nếu tôi đang tìm kiếm thứ gì đó giúp tôi thoát khỏi lối mòn chuyên nghiệp phát triển web, trong khi vẫn tận dụng trải nghiệm và danh bạ đó, tôi sẽ viết các ứng dụng Android và iPhone. Việc có thể bán một ứng dụng bổ sung cho trang web của khách hàng thực sự có thể khiến bạn nổi bật khi phát triển một mạng internet ngày càng được truy cập thông qua các thiết bị di động.


Đó thực sự không phải là một ý tưởng tồi. Tôi cũng đã suy nghĩ về việc dành nhiều thời gian hơn cho họa sĩ minh họa và Photoshop làm việc trên các thiết kế của tôi. Tuy nhiên, tôi muốn tìm hiểu thêm về các tùy chọn ứng dụng web ngoài kia.
Xeoncross

0

Bạn đã thực sự đạt đến giới hạn của PHP hay chỉ là giới hạn của PHP như bạn biết?

Bạn đã nhìn vào Drupal ? Đó là một CMS và khung lập trình dựa trên PHP, khuyến khích mạnh mẽ các tiêu chuẩn và thực hành mã hóa tốt. (Phải làm việc với OSC Commerce trong các công việc trước đây, tôi cảm thấy nỗi đau của bạn ở đó.) Mặc dù dựa trên PHP, nhưng nó đủ khác biệt để thường làm "điều gì đó" trong PHP thuần túy không phải là cách đúng đắn để làm điều đó trong Drupal, và bạn sẽ có một lộ trình học tập tốt để leo lên để thực sự làm chủ nó. Tuy nhiên, nó có thể thay đổi quan điểm của bạn về các khả năng của PHP như là một sự phát triển ngôn ngữ và web nói chung.


Lần cuối cùng tôi nhìn vào Drupal (4 & 5) nó khá tệ. Có lẽ các phiên bản mới hơn của họ sử dụng các tiêu chuẩn thích hợp bây giờ. Tuy nhiên, chậm như tôi sẽ thích hơn với các khung tuyệt vời ngoài kia.
Xeoncross
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.