Trong một bài dịch của bạn Hồ Sỹ Hùng trang Vinacode dịch lại bài “All Programming is Web Programming” của tác giả Jeff Atwood viết ngày 14 tháng 8 2009. Jeff Atwood là một lập trình kỳ cực thông minh, sáng lập nên StackOverflow, một trang web hỏi đáp hàng đầu của dân tin học. StackOverflow viết bằng ASP.net, csdl: SQL Server. Nếu một ngày bạn không lượn vào StackOverflow quá 2 lần, chứng tỏ bạn chưa thực sự lập trình.
Tôi xin góp vài ý sau đây:
Tại thời điểm mà Jeff viết đang có một cuộc chiến giữa Microsoft ASP.net IIS Window Server và LAMP (Linux Apache MySQL PHP). Microsoft rất lo lắng trước sự gia tăng của mã nguồn mở. Tải về rồi cài, thích thì sửa, không thì cấu hình, mua theme giao diện về là có web site. chi phí thuê share hosting server Linux chỉ khoảng 5 USD/tháng. Trong khi xài Microsoft rất lằng nhằng về license, vậy là Microsoft nghĩ ra là phải làm cho việc lập trình web trên nền tảng Microsoft dễ đến mức không thể dễ hơn. Sự đơn giản này cũng như cách dùng CPanel cài một web site bằng WordPress step by step đã giết chết nhu cầu học lập trình một cách nghiêm túc. Ai cũng có thể tạo một web site. Hướng đối tượng là gì? Cấu trúc dữ liệu giải thuật là gì? Bộ nhớ heap, stack, con trỏ là gì? Mức độ phức tạp O là gì? Generic Programming, Machine Learning là gì? là những câu hỏi quá xa xỉ bởi giờ đây, chỉ cần xem video hướng dẫn, bạn có thể kéo thả ra một web site mà không mất một dòng code.
Tôi đã từ dùng Visual Studio 2012 beta, lúc đó Microsoft có một công cụ rất dị, LightSwitch. Chỉ cần vẽ giao diện các trường nhập liệu, thêm chút validation, Microsoft tự sinh ra cơ sở dữ liệu rồi cấu hình tự động lên tài khoản Azure. Ấn một nút run, là có luôn web site, thậm chí có lựa chọn tạo ra Desktop app. Tất cả mất tầm 10 phút. Kỹ sư trưởng của Visual Studio gọi lập trình đơn giản như bật công tác đèn ~ Light switch.
.png)
Tôi bắt đầu lo cho nghề nghiệp của tôi. Tôi sắp 37 tuổi. Cứ đà này, dăm năm nữa, con người chắc khỏi kéo thả mà cứ nói chậm chậm, máy tính sẽ hiểu rồi tự đưa ra các giải pháp có sẵn, người dùng lựa, xác nhận là có một web site. Thất nghiệp đến nơi rồi !
Điều trở thành sự thật là Apple có Siri, Microsoft có Cotana, nhận dạng tiếng người rất chuẩn. Còn ứng dụng web kiểu kéo thả của Microsoft không nhận được ủng hộ của lập trình viên. Bạn thử tìm kiếm “Light Switch Job” mà xem. LightSwitch tự động, kéo thả ở nhiều khâu quá, khiến cho việc chỉnh sửa chi tiết sau này vào code trở nên khó khăn. Lập trình viên trở nên thụ động hoặc là họ cảm thấy sự sáng tạo của họ đã bị thay thế với một công cụ máy móc tạo ra sản phẩm hàng loạt giá cực rẻ. Có lẽ Microsoft đã định làm một cuộc cách mạng kéo thả WYSIWYG đối với ứng dụng web. Nhưng vì trào lưu Responsive ra đời, khiến việc kéo thả WYSIWYG trở nên không khả thi nữa. Mình nghĩ vậy…
Tóm lại ngày hôm nay (2014), làm một ứng dụng web nghiêm túc không thể kéo thả bừa được. Chính vì vậy Adobe DreamWeaver không còn là công cụ số 1 để làm web nữa, WebFusion cũng chết từ lâu.

Đúng là công việc lập trình web trở nên rất phổ biến nhưng nó sẽ không phải là tất cả. 2009 đến 2014 chứng kiến chu kỳ bùng nổ của ứng dụng di động trên IOS, Android và Windows Phone. Rất nhiều lập trình viên web chỉ có kỹ năng kéo thả, cấu hình đã cảm thấy bất an khi công việc ngày càng trở nên bèo bọt và việc lập trình di động ngày càng nhiều, thành công cũng lớn và mức độ khó, cạnh trạnh cũng tăng. Thế là người ta nghĩ ra PhoneGap, Cordova, jQuery Mobile, Kendo UI…để web dev nhanh chóng trở thành mobile dev.
Nhưng rồi đến năm nay 2014, người ta bắt đầu phàn nàn sự đi xuống trông thấy của các ứng dụng hybrid app so với native app. Tham khảo bài này The State of Native vs. Web vs. Hybrid. Người dùng di động trở nên khó tính hơn, đòi hỏi app phải mượt, đẹp, trải nghiệm không được giật, tối ưu cho từng hệ điều hành di động một.
Như vậy là lập trình web không phải là tất cả, lập trình di động đã tăng, và yêu cầu phải học bài bản hơn, kỹ càng hơn.
Có những video, tuts dạy tạo ra một web site (dạng To Do List, lịch sử từ demo của Ruby On Rails, hay PetShop của Java) hoàn thành trong 15 phút là cách để lôi cuốn lập trình viên dùng những framework này. Nó tiện, MVC ngon, code ít, convention over configuration… đó chỉ là chương nhập môn thôi. Vấn đề phức tạp vẫn còn đó rất nhiều: trải nghiệm người dùng (UX), phù hợp với nhiều màn hình (responsive), tăng hạng khi được tìm kiếm (SEO), tốc độ – khả năng chịu tải (performance -load), cách thức cập nhật thông tin chủ động hơn (reactive programming thay vì thụ động kiểu request – response), lưu-truy vấn dữ liệu phi cấu trúc (noSQL), phân tích dữ liệu lớn ra sao (big data)
Lập trình web mà giỏi hết những thứ trên chắc cần học – thực hành liên tục trong 7-10 năm rồi đó.
Nếu bạn muốn thực sự trở thành lập trình viên Web bài bản Full Stack, không chỉ sửa vặt code trên framework có sẵn, hãy học khóa học "Node.js xây dựng web site tốc độ cao". Đào tạo từ cơ bản, qua các ví dụ thực hành và dự án mẫu.
Kết luận là các bạn trẻ, bạn lập trình già hãy học CNTT nghiêm túc, liên tục. Đọc nhiều, code nhiều, đừng ngừng lại.
A- “Tất cả lập trình không phải là lập trình web”
B- “Lập trình web không đơn giản”.
——-Bài dịch của bạn Hồ Sỹ Hùng. Cảm ơn tác giả đã có bài dịch rất hay ———–
Michael Braude đã công khai chỉ trích về sự phổ biến của lập trình web:
“Lý do mà hầu hết mọi người đều muốn lập trình web là bởi vì họ không đủ thông minh để làm bất cứ việc gì khác. Họ không hiểu về trình biên dịch, concurrency, 3D hay lớp kế thừa. Họ không có một manh mối gì về việc tại sao tôi lại sử dụng một interface hay một lớp abstract. Họ không hiểu về: các phương thức ảo, con trỏ, tham chiếu, bộ dọn rác, finalizers, truyền tham chiếu hay tham trị, các hàm hủy ảo trong C++, hay sự khác nhau giữa struct và class trong C#. Họ cũng không biết về các quy trình phát triển phần mềm như: Waterfall (thác nước), Spiral (xoắn ốc), Agile? Hãy quên tất cả những thứ đó. Họ cũng chưa bao giờ nhìn thấy một tài liệu phân tích yêu cầu (requirements document), họ cũng chưa bao giờ viết ra một tài liệu thiết kế (design document), họ chưa bao giờ vẽ ra được một lược đồ UML, và họ thậm chí còn chưa bao giờ nghe nói tới sequence diagram.
Nhưng họ biết làm một vài thứ: họ biết làm thế nào để ném ra một trang web ASP.NET, viết một số câu lệnh SQL (với cú pháp rất dở) để truy lục cơ sở dữ liệu, rồi đổ vào một dataset, và hiển thị kết quả lên lưới (grid control). Họ chỉ biết có bấy nhiêu đó. Và chắc chắn là trình độ cũng chẳng phát triển được gì hơn.
Xin thứ lỗi cho tôi vì việc đã xúc phạm, nhưng nói thực tôi không có một chút hứng thú nào để trở thành một ‘gã phát triển web’. Vì có hai lý do cho điều này. Thứ nhất, nó không đủ độ thách thức đối với tôi. Và thứ hai, bởi vì phần lớn các công ty Internet thì chứa đầy những kỹ sư tồi – đúng là như vậy bởi vì bạn không cần phải biết những thứ phức tạp để trở thành một tay phát triển web. Và tôi cũng đang lo xa rằng, Internet sẽ phải chịu trách nhiệm cho việc tập hợp của những thứ vớ vẩn và làm giảm giá trị trí tuệ của chúng ta. Bạn không cần phải thông minh để làm ra một trang web.
Tôi thực sự hy vọng rằng mọi người đã sai và mọi thứ không “chuyển hết sang môi trường web”. Bởi vì nếu điều đó xảy ra, một ngày nào đó hoặc là tôi sẽ phải miễn cưỡng gia nhập phong trào tẻ nhạt này, hoặc là tôi sẽ phải chuyển sang một ngành khác.”
Hãy để qua một bên, trong chốc lát, sự tranh cãi ngớ ngẩn về việc cho rằng phát triển web thì không thách thức, và rằng nó chỉ thu hút những lập trình viên kém chất lượng. Thậm chí nếu điều đó có đúng đi chăng nữa, thì nó cũng không thích hợp chút nào.
Tôi ghét việc phải nói một tin xấu tới Michael, nhưng bởi tỷ lệ phần trăm người dùng web đang tăng lên, thì có thể nói rằng các ứng dụng trên desktop đã chết. Hầu hết các ứng dụng desktop điển hình đã bị thay thế bởi các ứng dụng web trong mấy năm vừa qua. Và rất nhiều trong số chúng bị thay thế mỗi ngày, khi mà các trình duyệt web ngày càng trở nên mạnh mẽ, nhiều khả năng và sức mạnh hơn xưa.
Bạn hy vọng rằng mọi thứ không “chuyển hết sang môi trường web” ư? Tỉnh lại đi anh bạn! Điều đó đã xảy ra rồi!
Bất kỳ sinh viên của ngành lịch sử máy tính nào cũng sẽ nói với bạn rằng sự thống trị của các ứng dụng web là chính xác như cái mà nguyên tắc về sức mạnh tối thiểu đã dự đoán:
“Ngành Khoa học Máy tính đã mất 40 năm để làm cho các ngôn ngữ lập trình trở nên mạnh mẽ nhất có thể. Ngày nay chúng ta phải đánh giá cao những lý do cho việc chọn những giải pháp không phải là mạnh nhất mà là giải pháp ít sức mạnh nhất. Ngôn ngữ lập trình càng ít sức mạnh, thì bạn sẽ càng làm được nhiều thao tác dữ liệu trong ngôn ngữ đó. Nếu bạn viết nó bằng một hình thức đơn giản, thì bất kỳ ai cũng có thể viết một chương trình để phân tích kết quả từ nó. Ví dụ, một trang web cung cấp thông tin về dự báo thời tiết sử dụng RDF (một kiểu lưu giữ liệu đơn giản theo chuẩn XML) để mô tả dữ liệu của nó, thì một người dùng có thể truy lục nó như là một table, có thể tính toán trên nó, vẽ đồ thị, suy luận mọi thứ về nó trong sự kết hợp với những thông tin khác. Còn nếu theo một hướng khác là trang thông tin thời tiết này được viết bằng một Java applet tinh xảo. Trong khi điều này có thể mang lại một giao diện người dùng rất ấn tượng, nhưng nó lại không thể phân tích được chút nào cả. Những bộ máy tìm kiếm khi tìm thấy những trang web này sẽ không biết dạng dữ liệu của nó ra sao và nội dung của nó đang nói về cái gì. Chỉ có một cách duy nhất để biết cái Java applet đó đang nói về cái gì là chạy nó hiển thị trước mặt một con người bằng xương bằng thịt.”
Môi trường web là tiêu biểu cho việc làm ra những thứ đơn giản nhất mà có thể vẫn hoạt động tốt. Nếu điều đó làm bạn kinh hãi — hoặc làm bạn bối rối — thì tôi xin khiêm tốn để nói với bạn rằng bạn không có tố chất để trở thành một lập trình viên.
Có phải tất cả các ứng dụng đều nên trở thành ứng dụng web không? Dĩ nhiên là không. Sẽ vẫn tiếp tục có những trường hợp ngoại lệ quan trọng và những loại phần mềm mà không có gì để làm đối với web. Nhưng chúng chỉ là những ứng dụng thiểu số và quá đặc thù. Đó là những ứng dụng ngách quan trọng mà thôi.
Nếu bạn muốn phần mềm của mình được trải nghiệm bởi nhiều người dùng nhất có thể, thì không có cách nào tốt hơn là nên phát triển nó dưới dạng một ứng dụng web. Dạng web là cách hiệu quả nhất, lan tỏa nhất và hầu như có thể phân tán ngay lập tức. Bất kỳ người dùng nào chỉ cần một đường truyền Internet và một trình duyệt, bất kỳ họ ở đâu trên thế giới, thì với chỉ vài cú click chuột là đã có thể tương tác với phần mềm mà bạn viết ra. Người dùng tiếp cận đến thậm chí cả những ứng dụng web dở nhất . Đó là lý do tại sao tôi lại đúc kết ra một điều luật cho chính mình, tôi tạm gọi nó là Atwood’ Law:
“Atwood’s Law: bất kỳ một ứng dụng nào mà có thể viết bằng JavaScript, thì cuối cùng nó sẽ được viết bằng JavaScript.”
Viết ứng dụng giống Photoshop, Word, hoặc Excel bằng JavaScript thì mới nghe tưởng chừng như là hoang tưởng, nhưng điều đó là không thể tránh khỏi. Nó sẽ xảy ra. Thực tế, nó đã và đang xảy ra. Bạn hãy nhìn xung quanh mà xem.
Là một lập trình viên phần mềm, tôi hạnh phúc nhất khi sản phẩm mình viết ra được người dùng đón nhận. Điều gì là đáng nói nếu phần mềm của bạn thường đi theo một lộ trình cố định là đầu tiên nó được đóng gói trong các file nhị phân, sau đó nó được mua và cấp license và tải về và cài đặt và bảo trì rồi cập nhật? Cùng với tất cả những công đoạn cũ kỹ này, đó là những rào cản truyền thống giữa lập trình viên và người dùng, tôi lấy làm ngạc nhiên khi ngành công nghiệp phần mềm vẫn còn được tổ chức theo cách này. Nhưng trong thế giới mới của lập trình ứng dụng web, những hạn chế này đã không còn nữa. Không có ranh giới nào nữa. Phần mềm của bạn có thể sử dụng ở bất cứ đâu.
Lĩnh vực lập trình web thì còn lâu mới đạt đến mức độ hoàn hảo. Nó thực ra còn nhiều thứ cần phải cải tiến. Bất kỳ một tay Coder nào cũng có thể đẻ ra một ứng dụng web tồi, và có đến 99% các ứng dụng web là hoàn toàn dở ẹc. Nhưng điều này cũng đồng nghĩa có những lập trình viên tài năng đang giới thiệu những sản phẩm của họ đến hàng trăm, hàng ngàn, có thể thậm chí hàng triệu người dùng, điều mà họ chưa bao giờ có thể mơ tới ở thời trước khi có web. Không có gì buồn và lãng phí tiền bạc hơn khi sản phẩm của mình chết ẻo và không được ai biết đến mà sử dụng. Việc viết phần mềm dưới dạng ứng dụng web cho phép các lập trình viên đưa sản phẩm của họ đến trước mặt một ai đó, ở một nơi nào đó. Thậm chí nếu sản phẩm đó rất tồi.
Nếu những tranh luận về người dùng và nghề phần mềm vẫn chưa đủ để thuyết phục bạn, thì chúng ta hãy quan tâm đến góc độ kinh doanh:
“Bạn đang làm một ứng dụng web, phải không? Giờ không phải là thời điểm của những năm 80 nữa. Ứng dụng web của bạn dù đang lộn xộn và dở dang thì vẫn nhiều thành công hơn những phần mềm hoành tráng của đối thủ được viết dạng ứng dụng desktop.”
Không lâu nữa, tất cả lập trình sẽ là lập trình web. Nếu bạn không nghĩ rằng đó là một lý do để chúc mừng những lập trình viên bình thường, thì có thể bạn nên tìm một nghề khác.
Bình luận