Java Đang Dần Đánh Mất Vị Trí Dẫn Đầu?
Bài đăng này đã không được cập nhật trong 6 năm
"Java Đang Dần Đánh Mất Vị Trí Dẫn Đầu?"
Vấn đề không có ngôn ngữ nào dẫn đầu hay là trào lưu mà vấn đề ở nhà phát triển họ thấy gì của ngôn ngữ đó, nền tảng bên dưới hỗ trợ làm ra được cái gì lâu dài và ổn định ? mỗi ngôn ngữ đều có thị trường và thế mạnh riêng của nó . Mình thấy ở VN các công ty gia công chỉ biết chăm chăm đến .Net và Java và các trường học cao đẳng , nghề và đại học cũng chỉ biết dạy 2 nền tảng này chủ yếu trong khi thực tế vẫn có nhiều nền tảng tốt hơn đã và đang chạy rất tốt . Tôi lấy 1 ví dụ ở các nhà bank đa số đều dùng Oracle và hệ sinh thái của Oracle nhưng mấy ai dám dùng opensource MariaDB hay Postgres ? thực tế vẫn có những ngân hàng và các hãng lớn ở nước ngoài mạnh dạn triển khai và chạy rất tốt với chi phí giảm đáng kể , opensource nhưng các bản có phí cho enterprise đều ngang ngửa với oracle cũng như được support rất tốt từ nhà cung cấp . Ai nói 2 DBMS này không hỗ trợ transaction tốt và xử lý rollback kém trong các tình huống critical ? ấy là họ bị Oracle hay Microsoft hù dọa hay đơn giản những kẻ chỉ biết có Oracle và MS lớn tiếng vì đơn giản họ muốn kiếm tiền khủng , thực vậy nền tảng của 2 đại gia này lúc nào mà chẳng đắt đỏ trong khi thử hỏi các ngân hàng VN trung bình nhỏ lẻ có bao nhiêu khách hàng ??? Đồng ý là Oracle thì chuyên nghiệp nhưng với qui mô của mình mà dùng đại bác bắn ruồi thì liệu có nên ? Ở VN những ngày đầu IT cũng thế cứ nói đến ngôn ngữ lập trình Web người ta chỉ đề cập duy nhất đến cái gọi là hiện đại, cao cấp sang chảnh như Java, C#/.Net nhưng rất ít người biết đến Php, Perl thậm chí nói không với CGI viết hoàn toàn bằng C/C++ mà thực chất các đại công ty lớn như Amazon hay Paypal của Ebay các cổng xử lý online transaction phải viết hoàn toàn bằng C/C++ ngoại trừ các cổng tương tác bình thường thì họ dùng các công nghệ phổ biến như đã nói !!!
Java hay ngôn ngữ nào cũng vậy có lúc lên và xuống khi người ta nhận ra rằng à còn nhiều công nghệ khác thay thế và chạy tốt hơn hoặc chi phí bảo trì đầu tư ít hơn vậy thôi .
Về mặt syntax và những triết lý kỹ thuật cũng như các loại design pattern, Java bắt đầu hụt hơi khi các bản cải tiến Java 8 gần đây mới đề cập đến bao đóng lamda hay functional programing ( lập trình hàm bất biến dữ liệu immutable ) trong xử lý song song trong khi các ngôn ngữ khác đã hiện thực từ lâu , về sự linh hoạt, mã Java viết rườm rà tốn nhiều công đoạn hơn so với các ngôn ngữ khác tinh giản như Go hay Kotlin dẫn xuất từ Java nếu cùng làm 1 công việc. Nếu nói về nhanh và những triết lý khủng thì python version 3 phải nói là ngôn ngử này dễ sợ nhất , có những xử lý tốn chục dòng với Java nhưng con trăn python chỉ quất trong vài vài dòng nốt nhạc nhất là những ai làm về data science cần xử lý hàng đống bảng biểu dữ liệu phức tạp số và số và machine learning mới thấy Java không là gì so với Python nhưng chính xác là Java dù đa năng thật nhưng không phù hợp với Data Science như Python hay Scala ( một dẫn xuất khác nữa của Java ) !!! không tin bạn cứ thử viết thuần bằng Java rồi chuyển sang Scala hay Python trong nghiệp big data thì sẽ thấy sự hụt hơi của ly café bốc khói này . Một số người cho rằng Java chạy nhanh hơn Python vì bản chất bytecode JIT biên dịch tức thì so với thông dịch chạy từng dòng của Python, vấn đề là Python không phục vụ cho cai sự nhanh mà phục vụ cho việc tính toán dài hơi , dễ dàng mà giới thống kê, khoa học dữ liệu cần cái mà Java quá rườm rà khó dùng trong ngữ cảnh đó . Tuy nhiên tương lai cũng chưa biết mèo nào cắn mỉu nào khi cộng đồng python sẽ hứa hẹn cải tiến theo hướng bytecode cũng như PHP cũng có manh nha ý định cho các phiên bản 8+ sau này
Tuy vậy Java vẫn có chỗ đứng vững chắc của nó trong các ứng dụng mang tính sống còn hệ thống ( critical ) được xếp ở mức phải code bằng C/C++ để đảm bảo sự quản lý chính xác tài nguyên thì Java đã có cải tiến để thay thế với performance cũng rất tốt và chi phí bảo trì cũng dễ hơn so với viết thuần bằng C/C++ . Với những ứng dụng này đa số là xử lý nghiệp vụ lõi thì tôi công nhận Java phù hợp vì mọi khai báo biến khai báo đói tượng người lập trình sẽ kiểm soát được và bộ thu gom rác Java hoạt động rất tốt để tránh tràn bộ nhớ cũng như tốn quá nhiều tài nguyên vô ích trong khi PHP và Python do đặc thù kiểu dữ liệu lỏng lẻo tức không biết trước cấp phát chính xác bao nhiêu và coder hoàn toàn không kiểm soát được thì rõ ràng Java phù hợp còn nếu bạn muốn chính xác tuyệt đối lượng bộ nhớ thì dùng C/C++ đi tuy nhiên mã viết mệt mỏi lắm vì cứ phải kiểm soát dữ liệu bộ nhớ , cả 1 mớ con trỏ ... trong khi Java cứ để mặc đấy cho gabarge collector ( bộ gom rác ) . Tuy vật trong các ứng dụng nhúng mang tính rất rất critical ảnh hưởng đến an ninh, tính mạng, tiền của thì Java không được dùng trừ các ứng dụng xử lý GUI cho user !!! cụ thể các chương trình core xử lý tương tác và điều khiển động cơ hệ thống trong xe hơi đều viết thuần bằng C ( chứ không phải C++ vẫn được cho là thừa mã khó kiểm soát hơn C chuẩn ) . Các chương trình điều khiển phi thuyền, tên lửa cũng thế đều phải viết thuần bằng C chuẩn để kiểm soát tối đa tính chính xác lượng mã và bộ nhớ sử dụng bao nhiêu và có thừa không ...
Đối với các ứng dụng web , back-end tôi nói thẳng là không cần thiết phải dùng đến nền tảng java với đủ thứ hầm bà lằng như spring, hibernate, ejb ... có vẻ giống như lấy đại bác bắn ruồi vậy , có những dự án web chỉ cần làm rất đơn giản với vài trăm dòng lệnh PHP/MySQL hoặc gần đây có nodejs là đủ để chạy thậm chí scaling còn tốt hơn những thứ lằng nhằng của java ( cả đống class để import từ cả đống framework mà vẫn chưa đủ giải quyết ) trong khi vẫn đáp ứng được xử lý các vấn đề nghiệp vụ phức tạp . Người ta nói đến java là nhằm sự chuyên nghiệp ổn định và lỳ lợm bền bỉ nhưng nói vậy là hơi định kiến , các hệ thống PHP và nodejs hay python viết tốt vẫn lì lợm bền bỉ khó hack như thường vấn đề là ở coder mà thôi, một kẻ code tồi thì có mần cái gì cũng vậy !
Độ nóng của Java giảm đi khi gần đây khi Oracle một lần nữa lại tỏ ra ích kỷ hiếu chiến khi đòi bản quyền các đoạn mã trong JVM mà google sử dụng trong kiến trúc Dalvik cho android của mình , thiếu điều có lúc cộng đồng android tưởng chừng google sẽ phải thay java bằng 1 ngôn ngữ dẫn xuất tinh giản khác như go hay kotlin chẳng hạn . Tôi không biết cuộc chiến này đã ngã ngũ chưa vì Oracle đòi phí bản quyền quá cao trong khi Google cũng đắn đo vì sợ cộng đồng lại dậy sóng vì phải từ bỏ 1 ngôn ngữ quen thuộc trong viết app cho android nhưng tôi thấy thì cứ việc bỏ chẳng sao cả, coder tốt là coder phải thích nghi ngôn ngữ mới miễn là nó có sự tương đồng về syntax cũng như triết lý kỹ thuật ví như apple đã mạnh dạn thay thế Object-C một thứ syntax không ra người cũng chẳng ra ngợm , bắt chước C và đặc biệt cách truyền thông điệp hướng đối tượng kiểu smalltalk nhưng tôi thì vô cùng rất ghét cái cách gọi hàm đối tượng phải dùng tới [ ... ] cực kỳ dị hơm có lẽ vậy mà họ đã kịp thời phát minh ra swift rồi cải tiến swift 3 cho opensource đó là 1 bước đi tốt được cả cộng đồng ủng hộ ? thế còn android của google ? thiết nghĩ google cũng nên học theo khi cũng với kiến trúc Dalvik nên hỗ trợ nhiều ngôn ngữ dẫn xuất tinh giản khác thì ok hơn vì trước sau cũng dịch sang bytecode ! cái này thì .Net đã làm từ lâu cái gọi là common code cho dù dùng c# hay vb cũng cùng 1 dạng mã trung gian
về Java hiện có thể ngôn ngữ này sẽ bớt nổi đi lý do nền tảng máy ảo JVM đã được mở và hàng loạt ngôn ngữ dẫn xuất từ Java sẽ dần thay thế cho Java trong khi vẫn chạy trên JVM ví dụ Go của google, Scala ( cho các hệ big data ) , Kotlin hoặc các ngôn ngữ chẳng giống gì java hết như Closure, Groovy, Jython dẫn xuất của Python hay JRuby của Ruby ... cuộc chơi đã thay đổi và không còn ngôn ngữ nào được gọi là thống trị vấn đề chỉ còn là thói quen và tư duy linh hoạt của nhà phát triển cũng như tầm nhìn của các leader cái mà ở VN tôi thấy vẫn thiếu sự linh hoạt, đa phần bảo thủ cũng như ngại sự thay đổi hay chấp nhận thất bại khi thử nghiệm cái mới như các leader ở nước ngoài , lấy ví dụ đơn giản có những doanh nghiệp nói đến quản trị mạng và triển khai chỉ nói đến đồ của microsoft tức windows server 2008, 2012 mà khi ai đó đề cập sao không dùng linux như ubuntu, centos, debian ... có chết ai đâu thì lắc đầu nguầy nguậy sợ sệt và nói thôi cứ stick với microsoft cho chắc ăn mà đâu biết các nền tảng mạng của bác Bill rất dễ bị tấn công đấy !
Túm lại một phát là tùy cơm gắp mắm tùy bài toán mà dùng , coder giỏi là coder phải biết sơ sơ 5-10 ngôn ngữ cũng như vài ba nền tảng đi kèm @@ đừng vội hoa mắt và phản đối , yên tâm đa số các ngôn ngữ đều mang tính dẫn xuất (derived hoặc based ) và kế thừa từ các ngôn ngữ trước đó mà thôi nên việc học rất nhanh, cái hơi ngán là lượng thư viện hàm và utils phải nhớ cho từng ngôn ngữ may thay các họ C-liked về các kiểu dữ liệu chuẩn thì hàm xử lý cũng na ná cái tên , nhưng không sao cứ tra reference hoặc search google là đụng cả tá đồng chí cùng tình trạng trên stackoverflow rồi vào đó mà copy paste là xong dĩ nhiên bạn phải có trình english đọc hiểu kha khá tý nên coder mà kém english thì e là thua rồi đó !!!
còn về các team leader trong các startup và các công ty IT phải có tầm nhìn, đàng rằng họ có thể không đụng tới code và rất ít khi tuy nhiên phải cập nhật kiến thức kỹ thuật thường xuyên để biết ra cái khung cho anh em làm việc chứ không phải bó hẹp phạm vi những gì mình biết rồi bắt người khác cày cục trên các phạm vi hoặc để anh em hên xui tự chọn nền tảng mà lẽ ra phải đập bỏ vì lỗi thời hoặc bất ổn thì đó là tư duy cực kỳ sai lầm vậy nên chất lượng mã tồi hay tốt cũng từ đây mà ra ! theo tôi leader tốt là leader phải có quá khứ code rất tốt có tầm nhìn về nền tảng kỹ thuật có sự tính toán hệ thống mở rộng chứ không phải không biết cái gì hết mà chỉ biết kỹ năng quản lý và coordinating không thì tôi đảm bảo các sản phẩm từ các cty đó rất ẹ , chắp vá không scale và đầy bug ! leader phải biết khi nào thì dùng ngôn ngữ nào nền tảng nào để anh em triển khai chứ không phải cứ thấy giang hồ quất .net java hay php hay python gì gì đi nữa thì bảo anh em nhào vô mà không có sự cân nhắc và tầm nhìn ! như đã phân tích chẳng có ngôn ngữ hay nền tảng nào là số 1 cả mà tất cả do cách vận dụng cho một phạm vi vấn đề business nào đó mà thôi ! không tin cứ trải nghiệm đi !
PS: nói vậy không có nghĩa là dìm hàng Java kỳ thực tôi vẫn code java đấy thôi trong ngữ cảnh viết các tool xử lý chuyên dụng gì đó trên desktop mà chạy mọi OS thì java rất tốt ! kể cả các chương trình demo thuật toán hàn lâm java cũng được khuyên dùng và nhất là android không dùng java thì dùng cái chi bây giờ ? tôi thì không dùng hybrid kiểu html+css+javascript cho mobile rồi .
Nguồn : https://www.linkedin.com/
All rights reserved