Sự ra đời của Full-stack

Vào buổi bình minh của thiên niên kỷ mới, các công cụ web đã đạt đến điểm mà mọi thứ cần thiết để xây dựng một trang web đều có thể được lắp ráp từ phần mềm nguồn mở. Theo mô hình mạng OSI một cách lỏng lẻo, chúng ta bắt đầu coi các phần riêng lẻ của tập hợp là các layer (lớp) và tập hợp là một stack (ngăn xếp).

LAMP stack là lớp đầu tiên trong số này, với bốn layer: L dành cho hệ điều hành Linux, A dành cho máy chủ Apache HTTP, M cho máy chủ cơ sở dữ liệu MySQL và P cho ngôn ngữ kịch bản PHP. Theo thời gian, khái niệm layer đã chứng tỏ bản thân nó cũng như nhiều biến thể stack xuất hiện: WAMP, MAMP, XAMPP, LEMP, LEPP, MEAN, JAMStack và các biến thể khác.

Với mỗi biến thể này, chìa khóa cho sự phục hưng trong phát triển phần mềm được cung cấp miễn phí, tạo ra rào cản thấp cho bất kỳ ai quan tâm đến việc tạo trang web. Tất cả những gì cần thiết là sự kiên trì và mong muốn tìm hiểu các công cụ, ngôn ngữ và giao thức mới. Không cần Microsoft hoặc Oracle hoặc IBM hoặc các nhà cung cấp thương mại khác. Một lĩnh vực bình đẳng, thu hút rất nhiều người chơi, dẫn đến kỷ nguyên dot-com đầu cơ vào cuối những năm 1990.

Chẳng bao lâu, sự ra đời của AJAX trong các trình duyệt (XMLHttpRequest) đã kích hoạt một loại trang web mới, dẫn đến kỷ nguyên Web 2.0 và các ứng dụng web. Nhưng khối lượng công việc liên quan đến việc phát triển các ứng dụng mới này khiến các nhà phát triển đơn lẻ rất khó đáp ứng các deadline mà doanh nghiệp đưa ra.

Kết quả chính là sự chuyên môn hóa. Các nhà phát triển Front-end (Front-end developer) lo việc xử lý HTML, CSS và JavaScript. Các nhà phát triển Back-end (Back-end developers) thì xử lý hệ điều hành máy chủ, máy chủ HTTP và cơ sở dữ liệu. Và các nhà phát triển thông thạo cả hai được gọi là nhà phát triển Full-stack (Full-stack developers).

Kỷ nguyên Full-stack 

Chuyên môn hóa đã là một điều tốt cho đến khi hết tốt. Một mặt, điều đó có nghĩa là các nhóm có thể làm việc song song để rút ngắn chu kỳ phát triển. Mặt khác, điều đó có nghĩa là chúng ta phải làm việc chăm chỉ hơn để truyền đạt các yêu cầu ban đầu và các thay đổi theo trình tự trong thông số kỹ thuật, nếu không chúng ta có nguy cơ mất đi lợi ích của nỗ lực làm việc song song đó.

Vì vậy, có vẻ là một ý tưởng hay khi có một nhóm các nhà phát triển Full-stack, không cần phân biệt front-end và back-end.

Lợi ích quan trọng nhất là mọi nhà phát triển trong nhóm đều biết rõ hậu quả mà mỗi thay đổi nhỏ sẽ gây ra. Mỗi bên đều có thể đánh giá đúng các tác động và rủi ro, giúp ban quản lý có một bức tranh rõ ràng về chi phí và sự chậm trễ. Và hơn nữa, khi có nhân viên rời đi thì vị trí đó có thể được thay thế ngay, và việc on-board cũng được thực hiện một cách hiệu quả.

Nhưng khi các công nghệ cơ bản được cải thiện, bức tranh màu hồng này trở nên kém hấp dẫn hơn. Stack không còn giới hạn trong bốn layer ban đầu của hệ điều hành, máy chủ HTTP, cơ sở dữ liệu và ngôn ngữ kịch bản.

  • Sự phức tạp nảy sinh khi chúng ta cần phát triển thêm các ứng dụng khiêm tốn ban đầu để xử lý số lượng người dùng đồng thời ngày càng lớn. Vì vậy, chúng ta đã thêm bộ cân bằng tải (load balancers).
  • Chúng ta cần các máy chủ mới được cung cấp nhanh hơn trước, với ít nguy cơ xảy ra lỗi nghiêm trọng hơn. Vì vậy, chúng ta chuyển sang điện toán đám mây.
  • Chúng ta bắt đầu xây dựng mọi thứ để tiếp cận khán giả toàn cầu. Vì vậy, chúng ta bắt đầu nhân rộng các triển khai của mình sang các trung tâm dữ liệu khu vực.
  • Chúng ta phát hiện ra rằng cơ sở dữ liệu có nhiều lược đồ và các phép nối phức tạp không phải lúc nào cũng là tốt nhất. Vì vậy, chúng ta đã bắt đầu sử dụng các kho lưu trữ giá trị key (key-value store).
  • Chúng ta cần kiểm soát chất lượng tốt hơn. Vì vậy, chúng ta đã thuê các kỹ sư kiểm tra chuyên dụng (test engineer) để xây dựng các bộ hồi quy (regression suite).
  • Chúng ta muốn đặt trình duyệt trong sự kiểm soát của kết xuất và biên soạn. Vì vậy, chúng ta đã chuyển từ kịch bản phía máy chủ (server-side scripting) sang REST API.
  • Chúng ta đã học được rằng quản lý code tốt rất quan trọng đối với hiệu quả của nhóm. Vì vậy, chúng ta đã tạo quy trình làm việc bằng Github, và không bao giờ mở ra nhìn lại.

Và khi khả năng của chúng ta phát triển, chúng ta bắt đầu lắng nghe nhu cầu người dùng nhiều hơn:

  • Người dùng mong muốn các ứng dụng có ít biểu mẫu gửi hơn, trôi chảy hơn, nhất quán hơn và dễ sử dụng hơn. Vì vậy, chúng ta đã thuê các chuyên gia giao diện người dùng (UI expert) có kỹ năng nghệ thuật và sự nhạy bén về công thái học.
  • Người dùng yêu cầu ít trở ngại hơn để hoàn thành công việc của họ. Vì vậy, chúng ta đã thuê các chuyên gia trải nghiệm người dùng (UX expert) để nghiên cứu những thiếu sót của chúng ta và thiết kế các cách tốt hơn cho sự tương tác của người dùng.
  • Người dùng thích sự tiện lợi của điện thoại di động, và chúng ta phải cung cấp cho họ phiên bản di động cho các ứng dụng SaaS lớn của chúng ta.

Và trong tất cả những điều này, các nguyên tắc cơ bản vẫn tiếp tục tiến về phía trước:

  • HTML5 đã hoàn thiện để bao gồm mạng ngữ nghĩa (semantic web), khả năng truy cập, service worker và các phần tử.
  • CSS đã phát triển, vượt ra ngoài các bộ chọn (selector) và tầng (cascade), để bao gồm các chuyển đổi, biến, mô hình bố cục mới và phương tiện được phân trang (paged media).
  • JavaScript đã bùng nổ, với mô-đun hóa, các lớp hướng đối tượng, các hàm không đồng bộ và khả năng thực thi ở mọi nơi - trong DOM của trình duyệt, trên máy chủ và trên máy tính để bàn - tất cả với cùng một ngôn ngữ biên dịch.
  • Và HTTP nâng cao với bộ nhớ đệm tốt hơn, chính sách bảo mật, phiên liên tục (persistent session), luồng ghép kênh (multiplexed stream), nén tiêu đề (header compression) và ưu tiên (prioritization).

Kỷ nguyên Full-stack không chết hoàn toàn do nó đã từng tràn ngập khắp các mặt trận. Nhưng các layer của stack tăng lên đến mức không ai có thể là chuyên gia về mọi thứ. Đa dạng hóa nhiệm vụ và chuyên môn hóa là kết quả tự nhiên phải xảy ra.

Và dần dà, vinh quang của kỹ sư full-stack làm việc như một Người đàn ông thời Phục hưng chỉ còn là huyền thoại. Trong thời đại mới này, không ai có thể hy vọng làm được tất cả.

Stack năm 2020

Điều này để lại cho chúng ta những câu hỏi mở. Liệu có còn vai trò nào dành cho những cá nhân tài năng với kiến thức và kỹ năng trải dài nhiều tầng không? Làm thế nào để chúng ta thích ứng với hỗn hợp trải nghiệm đa dạng mà các nhà phát triển full-stack truyền thống đã mang đến cho dự án? Làm thế nào để quản lý đáp ứng tất cả những nhu cầu này? Nhà tuyển dụng nên lọc những tuyển dụng tiềm năng như thế nào? Người xin việc nên khai báo bộ kỹ năng của họ như thế nào?

Đã đến lúc suy nghĩ lại về thuật ngữ full-stack.

full stack trend

Thật kỳ lạ, dường như ngày càng có nhiều sự tò mò về thuật ngữ full-stack. Ảnh chụp Google Xu hướng trong giai đoạn 2009–2019 cho thấy sự gia tăng mạnh mẽ trong 05 năm qua. Và nó đang đạt đến tầm cao mới mỗi năm.

Nhưng nếu tất cả các truy vấn đó đang tìm kiếm điều tiếp theo về full-stack, thì chính là đây. Tất nhiên, chúng ta phải đặt cho nó một cái tên để chúng ta có thể thảo luận một cách chính đáng.

Đó là Stack năm 2020. Một cái tên mới cho một thế hệ mới.

Đầu tiên, hãy cùng tôn vinh những cá nhân có kỹ năng chuyên sâu trong các lĩnh vực khác nhau. Họ là hy vọng tốt nhất của chúng ta để không rơi vào bẫy của sự chuyên môn hóa. Chúng ta muốn tránh xa những khuynh hướng xây dựng đế chế đó, những bậc thầy với những câu thần chú bí mật và những kho thông tin len lỏi vào chuyên môn hóa.

Thứ hai, chúng ta hãy hiểu thực tế rằng phát triển sự nghiệp có nghĩa là mọi người đến và đi. Các tổ chức phải mong đợi điều này như một phần của hoạt động thông thường của họ. Công việc kinh doanh không thể bị gián đoạn khi nhân viên cấp cao rời đi. "Không ai là không thể thiếu cả."

Thứ ba, giao tiếp giữa các chuyên gia bị suy yếu bởi biệt ngữ miền (domain jargon). Khi các chuyên gia sử dụng thuật ngữ, từ viết tắt và biểu thức thành ngữ dành riêng cho từng miền, họ sẽ tự đặt mình và đồng đội vào tình thế nguy hiểm. Giao thoa giữa các miền là rất quan trọng trong việc giữ cho các kênh liên lạc luôn rõ ràng.

Sau đây là một số đặc điểm của chuyên gia stack năm 2020 mới:

Vì không ai có thể xử lý tất cả, “Stack năm 2020” phải do một nhóm phụ trách. Không phải là một nhóm các cá nhân, mà là một đội thực sự. Điều đó có nghĩa là khi một người tụt lại phía sau, người khác sẽ nhận lấy sự chùng xuống. Khi một người có kỹ năng vượt trội, sẽ có một cơ chế để hướng dẫn những người khác. Khi có lỗ hổng trong nền tảng kiến ​​thức của nhóm, họ tìm kiếm và thuê một thành viên thông minh hơn tất cả những người trong nhóm hiện tại.

Mỗi thành viên của nhóm Stack 2020 phải là một chuyên gia trên nhiều miền (cross-domain expert). Bất kỳ cá nhân nào có bộ kỹ năng chỉ giới hạn ở một hoặc hai layer của stack đều không thực sự là thành viên của nhóm Stack 2020 này. 

Sự kết hợp các kỹ năng mà các thành viên nhóm Stack 2020 mang lại cho một dự án không được phân loại một cách cứng nhắc. Không giống như các danh mục front-end/back-end mà chúng ta đã áp dụng cho đến nay, các bộ phận trong nhóm Stack 2020 rất đa dạng. Một nhóm Stack 2020 có thể có một thành viên với các kỹ năng bao gồm NoSQL, cấu hình đám mây và tích hợp liên tục. Trong khi đó, một nhóm Stack 2020 khác có thể có một thành viên tương tự với các kỹ năng bao gồm cơ sở dữ liệu SQL, máy chủ Node.js, vùng chứa (container) và orchestration. 

Cuối cùng, thành phần quan trọng: Giao tiếp nên được thực hiện với mục đích chia sẻ để đưa ra quyết định tốt nhất cho vấn đề hiện tại. Điều này có nghĩa là các đồng nghiệp có bộ kỹ năng trùng nhau nên giao tiếp với một tâm hồn cởi mở. Thay vì chỉ thông báo cho đồng nghiệp về những phát triển mới, đồng nghiệp nên thảo luận về mọi thứ. Điều này làm cho mọi người thông minh hơn và nó ngăn cản sự chuyên môn hóa quay trở lại. Một sự phát triển cộng sinh.

Xin chào, “Stack 2020!”

Vì vậy, hãy thử xem chúng ta có thể ứng dụng điều này như thế nào để khiến yêu cầu công việc phù hợp hơn với các kỹ năng của ứng viên. Dưới đây là những gì mà người quản lý dự án có thể đăng với hy vọng tìm được ứng viên phù hợp với văn hóa công ty:

Rock City Brewing đang tìm kiếm thành viên cho đội “2020 stack” có kiến ​​thức nền tảng vững chắc về kiểm tra, tài liệu và quản lý mã. Các ứng viên cũng phải có kỹ năng miền chéo trong ít nhất hai trong số các lĩnh vực sau: cấu hình đám mây, vùng chứa (container), orchestration, CI/CD và kịch bản phía máy chủ.  

Định hình tương lai của chúng ta bằng cách giúp chúng ta chọn những công cụ tốt nhất cho công việc. Tại RCB, thăng tiến nghề nghiệp là một phần công việc của bạn. Chia sẻ kiến ​​thức của bạn với những người còn lại trong nhóm RCB 2020 mỗi tuần tại Thứ Ba Công Nghệ.

Nhà tuyển dụng cho cùng một bài đăng có thể chọn một bộ từ khóa cụ thể hơn để tìm ứng viên:

Khách hàng của chúng ta đang tìm kiếm thành viên nhóm “stack 2020” để trợ giúp kiểm tra hồi quy, API documentation, quản lý quy trình làm việc Github và DevOps.

Nếu bạn có sự kết hợp của các kỹ năng trong số này, liên lạc ngay nhé.

Và đây là những gì một ứng cử viên có thể đưa vào hồ sơ LinkedIn của họ (sử dụng cả thuật ngữ cũ và mới):

Antoní là thành viên của nhóm “2020 stack” với kinh nghiệm đáng kể về các công nghệ back-end cổ điển và các layer DevOps 2020 mới hơn, bao gồm Gitlab, Kubernetes và Digital Ocean.

Antoní là một người ủng hộ nhiệt tình của mã nguồn mở và DRY, và tin rằng chìa khóa để tái sử dụng thành công là ở những bộ tài liệu tuyệt vời.

Chúng ta thấy có sự kết nối rõ ràng giữa vai trò giữa miền quản lý code và miền DevOps. Và sự thừa nhận với “Stack 2020” gợi ra một vai trò phức tạp hơn so với khuôn sáo cũ dành cho “thành viên nhóm Agile”.

Layer, Layer, Layer

Vậy cách hợp lý nhất để tạo ra kỷ nguyên mới này là gì? Các thuật ngữ như front-end và back-end có cung cấp cho chúng ta tính cụ thể mà chúng ta cần không? Còn về server và web, cùng với design và ops thì sao? Chắc chắn, đây là những danh mục đủ rộng, đúng không nào?

Nhưng khoan đã, chúng ta không thể bỏ qua những người kiểm thử (tester), vì nếu không có kỹ thuật của họ, chúng ta sẽ cung cấp sản phẩm kém hơn so với đối thủ cạnh tranh của mình. Hay nhìn rộng hơn, nếu không có Marketing, chúng ta thậm chí sẽ không bao giờ có khách hàng.

Stack 2020” được đề cập trong bài có thể được áp dụng cho rộng khắp các bộ phận trong công ty. Nhưng cách bạn chạm khắc nên các layer của mình không quan trọng bằng cách mà chúng được xếp chồng lên nhau. Nói chung, mấu chốt của Stack năm 2020 này là việc giao tiếp chéo giữa nhiều miền. Đây sẽ là một thời kỳ Phục hưng mới.

Tìm hiểu chi tiết về Stack 2020 của tác giả. 

 

Tổng hợp việc làm IT - Software trên VietnamWorks
VietnamWorks InTECH
Theo Joe Honton