Chọn một ngôn ngữ lập trình một cách có hệ thống [đóng]


24

Tôi đang tìm kiếm một phương pháp để chọn một ngôn ngữ. Tôi không hỏi ý kiến ​​về ngôn ngữ. Tôi đã được giao nhiệm vụ trong quá trình so sánh ngôn ngữ hiện tại của cửa hàng của chúng tôi với các ngôn ngữ khác có sẵn. Chúng tôi là một cửa hàng phát triển web btw.

Giám đốc điều hành của chúng tôi muốn có một tờ giấy trắng đầy đủ về tất cả các ngôn ngữ dựa trên web có sẵn, Ngôn ngữ gốc mà chúng là dẫn xuất của (ví dụ jsp là từ java, từ c / c ++). Tôi cần tạo ra một ma trận với tất cả các yếu tố chính của một ngôn ngữ cụ thể cũng như những lần đến ngắn của ngôn ngữ đó. Là ngôn ngữ bị giới hạn bởi nền tảng, nó được thiết kế cho lập trình chức năng, thủ tục hoặc OO hay nó có thể được sử dụng với bất kỳ mô hình lập trình nào không?

Tôi cũng cần phải có thông tin ít kỹ thuật hơn, như quy mô của nhóm tài năng cho một ngôn ngữ nhất định và mức lương trung bình trong nhóm đó. Làm thế nào thị trường sẽ xem sự lựa chọn của chúng tôi?

Chúng tôi bắt đầu tìm kiếm một chuyên gia tư vấn để giúp chúng tôi hiểu tất cả những điều này nhưng những gì chúng tôi nhận thấy rằng hầu hết các chuyên gia tư vấn đều đến từ nền tảng phát triển và thường thì câu trả lời là " xxx là ngôn ngữ tốt nhất bởi vì đó là ngôn ngữ mà tôi đã sử dụng nhiều nhất trong n năm qua và nó chưa bao giờ làm tôi thất vọng. Bạn có thể bổ sung nó với yyy cho giao diện người dùng và sử dụng thư viện zzz "

Tôi cảm thấy choáng ngợp với nhiệm vụ này và tôi cảm thấy đó là cách hành động tốt nhất, đưa ra điều mà CEO của chúng tôi đang tìm kiếm, là tìm kiếm trong thế giới của giới hàn lâm và thuê một giáo sư không có kinh nghiệm phát triển thực tế để đến và "dạy" chúng tôi về tất cả các ngôn ngữ có thể.

Có ai khác đã phải trải qua bài tập này? Nếu bạn có thể chia sẻ các bước và / hoặc phương pháp bạn đã sử dụng để trải qua quá trình này?


21
CEO có thực sự có kế hoạch sử dụng ma trận này để quyết định những thứ như "Chúng tôi sẽ sử dụng $ {ngôn ngữ} để xây dựng $ {nextBigProject}!" Để xây dựng một cái gì đó thực sự hữu ích cho việc này (mặc dù tôi không chắc nó sẽ hữu ích nghiêm trọng ) có lẽ sẽ mất một khoảng thời gian đáng kể và cũng sẽ có bảo trì liên tục.
Thất vọngWithFormsDesigner

3
Tôi nghĩ rằng một hướng dẫn chung để chọn ngôn ngữ / môi trường cho dự án có thể là trước tiên hãy cố gắng hiểu sâu hơn về vấn đề cụ thể mà dự án đang cố gắng giải quyết (theo cách không biết ngôn ngữ), hãy tìm các công cụ / thư viện mà tốt nhất giúp giải quyết nó tại thời điểm đó , sau đó xem xét những ngôn ngữ bạn cần biết để làm việc với các công cụ / thư viện đó. Điều đó có thể sẽ cung cấp cho bạn danh sách ngắn các ngôn ngữ và từ đó bạn có thể biết được nó dựa trên sự quen thuộc với chúng, hỗ trợ nhà cung cấp, ngân sách, v.v ...
FrustratedWithFormsDesigner

9
Câu hỏi đầu tiên cần trả lời là "chúng ta có cần thay đổi gì không?" Những vấn đề không được giải quyết bởi sự lựa chọn ngôn ngữ hiện tại của bạn?
John Bode

4
Làm thế nào Stack Overflow có thể giúp các nhà phát triển đánh giá các công nghệ? "Sáng nay tôi có khoảng 8 khung hình trước mặt, cố gắng quyết định cái nào tôi sẽ sử dụng ..."
gnat

7
Trong thực tế, bạn cũng có thể ném phi tiêu. Trong lĩnh vực web (đặc biệt là JavaScript, et al), có hàng tá (nếu không phải hàng trăm) tùy chọn, với các điểm mạnh, điểm yếu, mối quan hệ và sự không tương thích. Bạn có thể phân tích nó cho đến chết, hoặc chỉ đưa ra một phỏng đoán có giáo dục, đi tiếp và thực hiện một sự điều chỉnh giữa khóa học nếu cần.
Daniel R Hicks

Câu trả lời:


53

@FrustratedWithFormsDesigner gợi ý về điều này ở trên, tôi sẽ thẳng thừng hơn: bạn đã bị buộc tội với một nhiệm vụ đắt tiền nhưng vô dụng.

Tôi nghi ngờ CEO đang tìm kiếm bằng chứng khách quan, không thể bác bỏ, điều này sẽ hỗ trợ cho sự lựa chọn ngôn ngữ của anh ấy. Vấn đề là sở thích của ngôn ngữ được tải với quá nhiều yếu tố chủ quan và bên ngoài để giấy trắng trở nên có ý nghĩa chứ đừng nói là hữu ích.

Nói cách khác, nếu có một ngôn ngữ lý tưởng, mọi người sẽ sử dụng nó thay vì những ngôn ngữ khiếm khuyết "khách quan" đó. Nó cũng tạo ra một mức độ quản lý vi mô phải là tỉnh của các kỹ sư sẽ phải làm cho nó hoạt động. Erlang có thể là "khách quan nhất" nhưng nếu không ai biết điều đó, hãy thêm chi phí khởi động 6 tháng / kỹ sư và thêm 6 tháng / kỹ sư để có được năng lực.

Vì tôi không có công việc của bạn, tôi không lo lắng về việc mất nó, mặc dù bạn có thể. Tôi sẽ đưa cho CEO một bài báo về Luận án Giáo hội Vật lý. Sau đó, tôi đã kết hợp với các kỹ sư cao cấp và có được ý kiến ​​không khách quan, không khách quan của họ về những gì nên được sử dụng và nói với CEO rằng đó là những gì bạn sẽ sử dụng. Đổi lại, bạn sẽ hứa các kỹ sư sẽ không tham gia các cuộc họp hội đồng quản trị, CFO, Phương pháp kế toán, lựa chọn VP, v.v. Có một lý do chúng tôi chuyên môn hóa, và anh ta không có nhiều vị trí trong các ưu tiên kỹ thuật hơn bạn trong lĩnh vực của anh ta.


6
Ha, tôi yêu sự nhiệt tình liều lĩnh của đoạn cuối. Tôi muốn nói rằng đó là tên miền của các CEO vì 6 tháng phiền phức mà bạn đã đề cập, đó là tất cả những gì bạn cần nói với anh ấy / cô ấy.
Nathan Cooper

1
"Luận án Giáo hội Vật lý" Chúng ta đừng đến đó. Rất ít ngôn ngữ lập trình có một ngữ nghĩa chính thức, khá nhiều điều kiện tiên quyết để nó được hoàn thành. (Không có ai, nó thậm chí không phải là một mô hình tính toán.)
Rhymoid

4
Chỉ cần chọn Lisp và được thực hiện với nó.
Eric

1
Theo Lisp, bạn có nghĩa là ClojureScript tất nhiên. :-)
Brian Knoblauch

1
+1. Đó là công việc của bạn như một kỹ sư để truyền đạt cho CEO tại sao đây không phải là một cách tiếp cận tốt. Điều này có thể khó khăn vì nó có vẻ như là một cách tiếp cận tốt, nhưng nó là cần thiết.
djechlin

25

Một số nét cọ rộng để xem xét:

Ngôn ngữ phổ biến

Điều này thực sự không quan trọng, bởi vì sự phổ biến không nhất thiết tương đương với năng suất, tính biểu cảm hoặc bất kỳ phẩm chất ngôn ngữ nào khác quan trọng hơn, nhưng sự cân nhắc này thường vượt qua tất cả các cân nhắc khác bởi vì:

  1. Tìm nhà phát triển phần mềm bằng ngôn ngữ phổ biến dễ dàng hơn.
  2. Tìm các công cụ và thư viện bằng ngôn ngữ phổ biến dễ dàng hơn.
  3. Những người ra quyết định không hiểu sự đánh đổi ngôn ngữ, vì vậy họ sẽ đưa ra quyết định an toàn ("nhiều công ty sử dụng ngôn ngữ này, vì vậy nó phải tốt").

Khả năng áp dụng cho miền vấn đề

Bất kỳ chương trình nào cũng có thể được viết bằng bất kỳ ngôn ngữ lập trình hoàn chỉnh Turing nào, nhưng một số ngôn ngữ phù hợp hơn với các miền có vấn đề nhất định so với các ngôn ngữ khác. Nếu bạn đang viết các ứng dụng web, có lẽ bạn sẽ bị thu hút bởi các ngôn ngữ và công cụ phù hợp với điều đó và rất có thể chúng sẽ là các ngôn ngữ hướng đối tượng.

Mặt khác, nếu bạn định viết phần mềm chủ yếu dựa trên nghiên cứu hoặc dựa trên toán học, có lẽ bạn sẽ bị hút về các ngôn ngữ chứa đựng các mô hình chức năng .

Và, tất nhiên, có tất cả mọi thứ ở giữa. Nhiều ngôn ngữ hỗ trợ nhiều mô hình và một số mẫu phần mềm tồn tại chỉ để khắc phục các hạn chế trong các ngôn ngữ thiếu các tính năng hoặc mô hình nhất định.

Tính biểu cảm và năng suất

Một số ngôn ngữ có nhiều biểu cảm hơn những ngôn ngữ khác. Những gì có thể được viết bằng một ngôn ngữ sử dụng một nghìn dòng mã có thể được viết bằng một ngôn ngữ biểu cảm hơn bằng cách sử dụng hàng trăm dòng mã. Sự đánh đổi là hàng trăm dòng mã có thể được viết bằng một ngôn ngữ ít phổ biến hơn, bởi những người có chuyên môn cao hơn.

Rất nhiều dòng mã có trong các ngôn ngữ hướng đối tượng được sử dụng để viết các ứng dụng kinh doanh theo dòng là lễ. Buổi lễ này, trong khi tốn thời gian và công sức để phát triển, cũng cung cấp một cấu trúc hữu hình mà mặt khác sẽ không dễ thấy bằng một ngôn ngữ biểu cảm hơn. Nó cho phép những người có ít chuyên môn hơn họ cần phải làm việc với mã với mức độ rủi ro giảm.

Thời đại của nhiều ngôn ngữ

Tôi sẽ kết luận bằng cách khẳng định rằng mong muốn quyết định một ngôn ngữ có thể là một vấn đề nan giải. Các ứng dụng ngày nay thường được viết, không phải bằng một, mà bằng nhiều ngôn ngữ. Mỗi ngôn ngữ có những điểm mạnh riêng và (về lý thuyết) được thiết kế riêng cho nhiệm vụ mà nó đang được sử dụng. Một số miền có vấn đề (như logic trình duyệt web hoặc truy cập cơ sở dữ liệu) yêu cầu ngôn ngữ cụ thể.


7
Tôi sẽ thêm vào điểm cuối cùng rằng nếu bạn muốn sử dụng nhiều ngôn ngữ, có thể hữu ích khi xem xét một nền tảng hỗ trợ khả năng tương tác dễ dàng giữa chúng (.Net CLR hoặc JVM).
Svick

9
@NathanCooper: Bạn có nghĩa là bạn chưa bao giờ viết một ứng dụng web? Ngay cả một cái nhỏ? Hoặc phải chuyển một ứng dụng di động sang nhiều nền tảng? Hoặc làm việc trong nhúng? Hoặc lấy dữ liệu từ cơ sở dữ liệu SQL?
Robert Harvey

10
@ NPSF3000: Đương nhiên, bạn không buồn tiết lộ phương pháp phù thủy của mình. Tôi gọi shenanigans.
Robert Harvey

9
@ NPSF3000 Mặc dù C # có thể là một lựa chọn tốt cho những gì bạn làm (mặc dù sử dụng Unity chắc chắn sẽ kéo dài mọi thứ một chút vì nó được thiết kế rõ ràng để chúng thực hiện tất cả các công việc nặng về đa ngôn ngữ cho bạn), nhưng giai thoại của bạn không phản bác lại quan điểm đó. Chắc chắn hầu hết các dự án không tầm thường là đa ngôn ngữ theo nghĩa là chúng sử dụng SQL và công nghệ khác, nhưng thậm chí còn hơn thế, nhiều người sử dụng song song các ngôn ngữ lập trình khác nhau hoặc viết ứng dụng của họ bằng một ngôn ngữ và các công cụ của họ bằng ngôn ngữ khác, v.v. không tìm thấy sự khẳng định nào cả.
Chris Hayes

7
@ NPSF3000 Nếu đó là vấn đề của bạn với nó, thì hãy nói điều đó . Đừng bắt chúng tôi vượt qua sự nghiêm khắc này để cố gắng tìm hiểu ý của bạn. Tôi chắc chắn Robert sẽ rất vui khi thực hiện chỉnh sửa nếu bạn đã tuyên bố hoàn toàn "Tôi không đồng ý rằng một số miền có vấn đề yêu cầu ngôn ngữ cụ thể". Điều đó nói rằng, tôi thấy không có hàm ý nào ở đây rằng làm việc bằng nhiều ngôn ngữ là "có lợi theo mặc định".
Chris Hayes

5

Có những lý do kinh doanh để chọn ngôn ngữ, và có những lý do kỹ thuật để chọn ngôn ngữ, và không phải lúc nào cũng có thể gặp nhau. Ném vào lý do học tập có khả năng làm cho mọi thứ tồi tệ hơn. Tôi nghi ngờ một giáo sư sẽ có thể giúp bạn theo cách bạn cần.

Các sự thật về tổ tiên và các tính năng của ngôn ngữ khá dễ tìm. Bạn có thể có thể dành một ngày trên wikipedia để điền vào phần lớn. Quy mô và mức lương của tài năng khó khăn hơn, bởi vì hầu hết mọi người không coi mình là lập trình viên ngôn ngữ đơn. Các công ty sử dụng các ngôn ngữ ít phổ biến như Scala rất mong đợi sẽ thuê các lập trình viên giỏi nói chung, những người không có kinh nghiệm về ngôn ngữ cụ thể. Đánh giá từ một số bài thuyết trình tôi đã thấy, chiến lược đó dường như đã có kết quả tốt.

Ngay cả khi biết sự thật vẫn để lại cho bạn một sự lựa chọn khá chủ quan. Giám đốc điều hành của bạn sẽ muốn nó được đun sôi theo một số liệu sơ bộ giống như đô la cho mỗi tính năng. Để có được một bức tranh chính xác, bạn sẽ phải thực hiện một số nguyên mẫu, sau đó nói về việc học nó dễ như thế nào, viết nhanh như thế nào một khi bạn đã học những điều cơ bản, bạn sẽ dễ dàng duy trì nó như thế nào và mức độ áp dụng rộng rãi mà bạn nghĩ nó sẽ phù hợp với loại công việc bạn thường làm.

Thay vì cố gắng bao quát tất cả các ngôn ngữ, tôi sẽ tìm cách có được các đại diện từ các mô hình lập trình và các loại khung khác nhau và triển khai một nguyên mẫu trong mỗi ngôn ngữ.

Dưới đây là danh sách sơ bộ các danh mục cuối:

  • Microsoft. (Có thể có các danh mục con. Tôi không biết gì về chúng.)
  • OOP nặng, như Drupal.
  • OOP nhẹ, giống như chai trăn.
  • Chơi / nâng / scalatra bằng Scala.
  • Chơi / nâng bằng Java.
  • Mùa xuân như.
  • Struts-like.
  • Rails-like.
  • Dựa trên Haskell.
  • Node.js

Ở mặt trước:

  • JavaScript kiểu OOP
  • JavaScript kiểu chức năng, như với Underscore
  • JavaScript kiểu phản ứng, giống như với Bacon
  • Bộ công cụ web của Google
  • Cây du

Dành một hoặc hai ngày cho mỗi danh mục, thực hiện một nguyên mẫu đơn giản, sẽ mất vài tháng, sau đó bạn sẽ có ý tưởng tốt hơn nhiều về điểm mạnh và điểm yếu của từng loại. Có lẽ bạn có thể loại trừ một số nhanh hơn dựa trên văn hóa hoặc kinh nghiệm của công ty bạn.

Vì đây là một báo cáo kinh doanh, tôi cũng sẽ mất một thời gian để tìm hiểu những thứ như "Công ty> sử dụng ngôn ngữ nào", thay thế các công ty khác nhau mà bạn ngưỡng mộ. Nhiều người trong số họ đã viết các trang trắng của riêng họ về lý do tại sao họ đưa ra các lựa chọn ngôn ngữ cụ thể, điều này sẽ làm cho các tài liệu tham khảo tuyệt vời để bạn đưa vào.


4

Xác định và chi phí những thiếu sót vốn có cho quá trình phát triển hiện tại của bạn là $ A. Xác định chi phí chuyển đổi sang bất kỳ quy trình phát triển nào khác là $ B.

Nếu $ A nhỏ hơn $ B, hãy dừng lại.

Nếu những thiếu sót đã biết của bạn lớn hơn chi phí thay đổi (và đó là một vấn đề lớn!) Thì hãy phân tích chi tiết những thiếu sót đó và bắt đầu tìm kiếm một thay đổi ngôn ngữ / môi trường phát triển / quá trình phát triển nhằm giải quyết chúng, một vấn đề sẽ không gây ra những vấn đề đắt đỏ khác.

Thành thật mà nói, trừ khi bạn hiện đang cố gắng phát triển ứng dụng web trong Fortran, thì tác động duy nhất mà ngôn ngữ bạn sử dụng sẽ là chi phí cho các nhà thầu bạn sử dụng để lấp đầy các khoảng trống. Luồng chính và languges / công cụ / quy trình phát triển trưởng thành đã giải quyết được hầu hết các vấn đề mà bạn có thể gặp phải khi các công cụ nóng nhất, mới nhất và quyến rũ nhất đi kèm với các nhà đào tạo và nhà thầu đắt tiền nhất, nhưng là giải pháp ít trưởng thành nhất. Và nếu bạn có những thiếu sót để đảm bảo một sự thay đổi như vậy, không chắc rằng sự lựa chọn ngôn ngữ của bạn sẽ giải quyết đầy đủ chúng.

Tuy nhiên, nếu lợi nhuận không phải là mục tiêu chính ở đây thì bạn cần phải tính đến sự kỳ thị của việc bị coi là lỗi thời trước những kudos bị chặt chém. Yêu cầu sếp của bạn cho các giá trị đô la để sử dụng cho phần này của phương trình.

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.