19/08/2018, 18:00

Lập trình viên cần phải thành thạo bao nhiêu ngôn ngữ lập trình?

Tại sự kiện Worldwide Developer Conference (WDC) vào năm 2014, Apple công bố ngôn ngữ lập trình Swift của họ. Đó là thành viên mới nhất trong một loạt các ngôn ngữ lập trình được phát triển bởi các công ty công nghệ lớn, để sử dụng với các nền tảng xác định của riêng họ. Apple có ...

Tại sự kiện Worldwide Developer Conference (WDC) vào năm 2014, Apple công bố ngôn ngữ lập trình Swift của họ. Đó là thành viên mới nhất trong một loạt các ngôn ngữ lập trình được phát triển bởi các công ty công nghệ lớn, để sử dụng với các nền tảng xác định của riêng họ.

Apple có Swift cho các nhà phát triển iOS; Facebook có Hack, một ngôn ngữ để phát triển back-end. Trong khi đó, Google cũng có ngôn ngữ Dart được cho là để thay thế Javascript và một ngôn ngữ lập trình mới có tên là Go.

Việc ra đời của hàng loạt các ngôn ngữ lập trình mới đã làm nảy sinh một số vấn đề cho các nhà phát triển. Có lẽ vấn đề quan trọng nhất chính là câu hỏi mà một đồng nghiệp của tôi, Adriana Lee, đã đăng lên mạng xã hội Twitter sau khi Apple công bố ngôn ngữ Swift:

Học lập trình online bao nhiêu ngôn ngữ để kiếm việc làm?Lập trình viên cần phải thành thạo bao nhiêu ngôn ngữ lập trình?

Sự phong phú của ngôn ngữ lập trình

Hiện nay chúng ta đã có hàng trăm ngôn ngữ lập trình khác nhau, và vẫn tiếp tục có thêm thành viên mới. Nhiều ngôn ngữ được thiết kế để sử dụng trong một phạm vi tương đối hẹp, và rất nhiều trong số chúng chưa bao giờ vượt ra ngoài phạm vi các nhóm nhỏ lập trình viên.

Trước đây, các tổ chức và công ty công nghệ lớn cũng đã phát triển ngôn ngữ mới của riêng họ. Ngôn ngữ lập trình đa mục đích C có nguồn gốc từ AT&T Bell Labs vào đầu những năm 1970. Java, hiện nay là ngôn ngữ chính cho việc phát triển các ứng dụng Android, được sinh ra tại công ty Sun Microsystems vào những năm 1990.

Điểm khác nhau hiện nay là mức độ mà các công ty lớn kiểm soát những ngôn ngữ mới để đạt được những mục tiêu kinh doanh của họ – một quy trình được tạo ra để khiến các lập trình viên phải “gắn chặt” vào nền tảng xác định của công ty đó. Đó là loại chiến lược kép mà trước đây Sun đã áp dụng khi giới thiệu ngôn ngữ Java, lúc đó công ty này quảng cáo Java là một cách để thách thức vị trí thống trị của Microsoft trong lĩnh vực máy tính để bàn PC. (Mọi thứ đã không diễn ra như kế hoạch của Sun, mặc dù Java cuối cùng cũng là ngôn ngữ được sử dụng phổ biến trong các hệ thống middleware trước khi Google sử dụng nó trong việc phát triển Android.)

Chúng ta cũng thấy rõ mục tiêu của Apple với ngôn ngữ Swift. Nó có khả năng đơn giản hóa quá trình phát triển ứng dụng iOS bằng cách loại bỏ những khó khăn như khi viết bằng Objective-C, ngôn ngữ lúc đó đang dùng chung cho các nhà phát triển iOS và Mac OS X. Nhưng nó cũng đòi hỏi những nhà phát triển phải tìm hiểu về một ngôn ngữ mới mà họ khó có thể sử dụng ở bất cứ một nơi nào khác.

Tại sao các công ty lớn lại tạo ra ngôn ngữ lập trình của riêng họ

Học lập trình trực tuyến bằng ngôn ngữ gì là tốt nhất?Apple giới thiệu ngôn ngữ lập trình Swift do họ tạo ra.

Việc tạo ra các ngôn ngữ lập trình mới là đi ngược với triết lý “không phát minh lại bánh xe” đã ăn sâu vào tiềm thức của các nhà phát triển. Vậy thì tại sao các công ty lớn không sử dụng các ngôn ngữ hiện có mà lại đi tạo ra ngôn ngữ mới?

Một câu trả lời đơn giản đó là các công ty xây dựng ngôn ngữ riêng của họ bởi vì họ có thể. Việc thiết kế một ngôn ngữ mới có thể phức tạp, nhưng nó không đặc biệt tốn nhiều nguồn lực. Điều khó ở đây là phải xây dựng sự hỗ trợ cho nó, cả trong việc cung cấp các nguồn tài nguyên phần mềm (các thư viện code chia sẻ, các API, các trình biên dịch, tài liệu, v.v…), đồng thời phải chiếm được con tim và khối óc của các nhà phát triển. Các công ty lớn có được điều kiện thuận lợi để làm cả hai việc đó.

Ngoài ra còn có một thực tế rằng các ngôn ngữ hiện có thường rất khó sử dụng vào những framework phức tạp ngày nay. Lấy ví dụ, quyết định của Facebook trong việc tạo ra ngôn ngữ lập trình Hack là do những hạn chế trong việc sử dụng PHP trước đó.

Mục tiêu chính của Facebook với ngôn ngữ Hack là để cải thiện độ tin cậy của code, trong trường hợp này là bằng cách buộc phải kiểm tra kiểu trước khi một chương trình được thực thi. Chẳng hạn kiểm tra để đảm bảo rằng một chương trình sẽ không cố gắng thông dịch một số nguyên (integer) thành một chuỗi (string), một lỗi có thể sẽ xuất hiện không đoán trước được nếu không kiểm tra phần này. Trong ngôn ngữ Hack, việc kiểm tra trước giúp các lập trình viên có thể xác định ra các lỗi trước khi code của họ chạy trên môi trường thực tế.

ThamCơ hội tham gia ngày hội lập trình lớn nhất Việt Nam: Vietnamwebsummit.com

Theo Julien Verlaguet, một nhà phát triển cốt lõi trong nhóm tạo ra ngôn ngữ Hack ở Facebook, đầu tiên công ty cũng tìm kiếm một ngôn ngữ hiện có mà có thể cho phép lập trình hiệu quả hơn. Nhưng rất nhiều phần của Facebook đã được xây dựng trên PHP, và công ty cũng đã xây dựng được một hạ tầng phần mềm đáng kể để hỗ trợ PHP và các nhánh của nó. Trong khi có thể làm cho PHP làm việc được với code viết bằng một ngôn ngữ khác, nhưng điều này không phải là dễ và cũng không được nhanh.

“Trước đây tôi đã thử viết lại codebase PHP của chúng tôi bằng ngôn ngữ Scala,” Verlaguet nói. “Đó là một ngôn ngữ đẹp và được thiết kế tốt, nhưng nó không tương thích một chút nào với PHP cả. Mỗi khi tôi cần phải gọi đến PHP từ phần Scala của code base, tôi sẽ đánh mất tốc độ thực thi chương trình. Chúng tôi cũng muốn sử dụng một ngôn ngữ hiện có lắm chứ, nhưng đối với chúng tôi, đó không là một lựa chọn phù hợp.”

Thay vào đó, Facebook đã tạo ra ngôn ngữ Hack, nó có đủ những điểm chung với PHP để có thể chia sẻ cơ sở hạ tầng hiện có của công ty. Phần lớn codebase của Facebook đã được chuyển từ PHP sang Hack, Verlaguet nói, nhưng công ty đã mở mã nguồn ngôn ngữ này với hy vọng rằng các nhà phát triển độc lập sẽ tìm và sử dụng nó bên ngoài Facebook.

“Bạn có thể vẫn sử dụng PHP,” ông nói. “Nhưng chúng tôi hy vọng bạn sẽ muốn sử dụng Hack.”

Ai là người nắm giữ quyền lực

Có một sự cân bằng quyền lực giữa các công ty và các nhà phát triển. Các công ty có thể tạo ra các ngôn ngữ của họ theo cách mà họ thích. Nhưng nếu các nhà phát triển không muốn sử dụng chúng thì những ngôn ngữ đó cũng khó lòng mà phát triển được.

Nó cũng không phải bất thường khi công ty làm cho việc phát triển trong một ngôn ngữ này dễ dàng hơn ngôn ngữ khác. Ví dụ, bạn sẽ sử dụng Objective-C để phát triển các ứng dụng iOS, nhưng Java để phát triển các ứng dụng Android. Điều này chưa bao giờ là một vấn đề lớn đối với các nhà phát triển vì cả Objective-C và Java là ngôn ngữ hướng đối tượng đa mục đích. Chúng rất hữu ích cho một số mục đích khác nhau.

Tuy nhiên Hack, Dart, Go, và Swift cho đến nay chỉ chứng tỏ được sự hữu ích trong các giải pháp lập trình cụ thể liên quan đến công ty tạo ra nó, thường là song song với môi trường lập trình của công ty đó lựa chọn. Điều này có thể là quá sớm để đưa ra phán xét. Ví dụ, ngôn ngữ Hack có thể được sử dụng trong một số thực thi ở phần back-end; và Facebook vẫn chưa đưa ra bất kỳ dữ liệu nào cho những người muốn sử dụng nó theo cách đó.

Không phải là các nhà phát triển không có khả năng học nhiều ngôn ngữ. Hầu hết họ đều thông thạo nhiều hơn một ngôn ngữ. Nó cũng tương tự như các ngôn ngữ Latin – nếu bạn biết tiếng Tây Ban Nha, thì sẽ dễ dàng hơn để học tiếng Pháp so với người chưa biết gì. Tương tự như vậy, nếu bạn đã biết Java thì sẽ dễ dàng hơn để tìm hiểu Ruby hay Perl. Và nếu bạn biết PHP thì về cơ bản bạn đã biết ngôn ngữ Hack.

Ngược lại, nếu Java đã giúp giải quyết các vấn đề cụ thể của bạn, thì bạn không cần phải học thêm Ruby. Và nếu bạn đang hạnh phúc trong việc lập trình các ứng dụng iOS trong Objective-C, thì bạn sẽ chẳng cảm thấy bị cám dỗ nhiều để học thêm Swift.

Tuy nhiên, đối với một số nhà phát triển, các ngôn ngữ có hệ sinh thái đặc thù chỉ làm cho cuộc sống của mọi người trở nên khó khăn hơn. Ví dụ, designer Jack Watson – Hamblin, nói với tôi rằng những sáng kiến kiểu như Swift của Apple có nguy cơ gây quá tải cho các lập trình viên và làm chia rẽ cộng đồng các nhà phát triển:

Điều quan trọng đối với các lập trình viên là biết nhiều ngôn ngữ, nhưng việc buộc họ luôn phải theo kịp với tất cả các ngôn ngữ mới là không có ý nghĩa. Nếu tôi đang làm một ứng dụng đa nền tảng đơn giản, tôi không muốn phải biết tới 4 ngôn ngữ lập trình để làm điều đó. Tôi chỉ muốn sử dụng một ngôn ngữ đơn mục đích nếu tôi thực sự cần.

Watson – Hamblin lập luận rằng khi các công ty xây dựng ngôn ngữ riêng cho nhu cầu của riêng họ, thì điều này sẽ làm chậm quá trình phát triển nói chung và chia rẽ mối quan tâm của các lập trình viên bằng cách ép buộc một quan điểm duy nhất khi phát triển trong ngôn ngữ đó. “Khi các công ty phụ trách một ngôn ngữ vs. một cộng đồng mã nguồn mở, nó giống như sự khác biệt giữa một công ty và một startup vậy,” anh nói. Các cộng đồng linh hoạt hơn và thích ứng theo hoàn cảnh.

Tất nhiên, Apple có rất nhiều lý do rất tốt để bắt đầu lại từ đầu với Swift, cũng giống như Facebook đã làm khi họ tạo ra Hack. Điều này cũng đồng nghĩa với việc các nhà phát triển cũng phải thay đổi theo.

“Khi các ngôn ngữ mới được phát minh, các công ty cũng sẽ có thêm nhiều quyền lợi hơn,” Verlaguet nói. “Các nhà phát triển cũng phải rất vất vả để bắt kịp. Nhưng mặt khác, bạn sẽ có thêm một ngôn ngữ mới để giải quyết vấn đề của mình. Hãy tưởng tượng ngược lại – một thế giới mà các lập trình viên sử dụng chỉ một ngôn ngữ duy nhất cho tất cả mọi thứ; đó là một ngôn ngữ đa năng nhưng nó không làm được sản phẩm nào tuyệt vời cả.”

Techtalk via Techmaster

0