Mười mấy năm trước
Mười mấy năm trước, các phần mềm được phát hành chậm hơn rất nhiều, và khối lượng của các đợt phát hành cũng lớn hơn rất nhiều so với bây giờ.
Chẳng hạn, thời của những hệ điều hành như Windows XP, Windows Vista thì phải mất đến một vài năm chúng ta mới nhận được một phiên bản cập nhật. Và mỗi bản cập nhật đó cũng chứa đựng rất nhiều thay đổi, kể cả về tính năng lẫn giao diện và bảo mật.
Hoặc, các phần mềm phổ thông khác như trình duyệt IE, Firefox, các phần mềm nghe nhạc cũng rất lâu mới được cập nhật, thông thường là tính bằng đơn vị nửa năm hoặc một năm.
Năm Số lần phát hành
2001 2 phiên bản
2002 1 phiên bản
2003 1 phiên bản
2004 1 phiên bản
2005 1 phiên bản
Bảng 1: Số lần phát hành rất thưa thớt của trình duyệt IE trước đây.
Có nhiều nguyên nhân để việc phát hành phần mềm ở giai đoạn này diễn ra chậm như vậy, một phần là do tư duy về phát triển sản phẩm truyền thống, một phần khác là do các kỹ thuật và công cụ phát triển phần mềm chưa cho phép các nhóm có thể phát hành sản phẩm một cách thường xuyên, và tất nhiên cũng không thể không kể đến nguyên nhân do trình độ của lập trình viên chưa đáp ứng được.
Ở trong quá khứ, để phát triển mới hoặc nâng cấp một phần mềm, các nhóm phát triển thường dành nhiều thời gian để lập kế hoạch rất chi tiết, sau đó lập trình và rồi kiểm thử lần lượt cẩn thận trước khi tung ra cho người dùng cuối. Với tư duy phát triển sản phẩm như vậy cho nên vòng đời của việc phát triển sản phẩm thường kéo dài.
Các kênh để phát hành sản phẩm trước đây cũng rất khác so với bây giờ, khi mà hầu hết các phần mềm đều được tải về và cài đặt thủ công lên máy của người dùng, khó khăn và bất tiện hơn rất nhiều so với việc phân phối phần mềm dưới dạng dịch vụ như ngày nay.
Mười mấy năm trước, hãy thử tưởng tượng tình huống một phần mềm mới được cập nhật, hằng trăm nghìn, thậm chí là hằng triệu người dùng cần lên website của nhà sản xuất, tải về và tự cài đặt thủ công. Mất rất nhiều thời gian và nỗ lực, sai sót và rủi ro. Chẳng thế mà trong giai đoạn đó, vai trò của những người hỗ trợ kỹ thuật là rất quan trọng, họ là các anh hùng trong mắt những người dùng bình thường, bởi vì họ có khả năng cài đặt và cấu hình các sản phẩm rất bình dân.
Mười mấy năm trước, các kỹ thuật lập trình như kiểm thử tự động, tích hợp liên tục vẫn chưa được sử dụng phổ biến và chưa hiệu quả như bây giờ, do đó rất nhiều thao tác cần phải thực hiện thủ công, mất rất nhiều thời gian và công sức. Do đó thời gian phát triển bị kéo dài cũng là chuyện dễ hiểu.
Dăm năm trước
Dăm năm trước, các phần mềm bắt đầu được phát triển và cập nhật thường xuyên hơn, các bản phát hành cũng thường là nhỏ hơn, đôi khi chỉ là để sửa một vài lỗi nhỏ, hoặc là cải thiện một chút về trải nghiệm người dùng. Việc phát hành sản phẩm theo từng tháng, từng tuần hoặc thậm chí là từng ngày là chuyện không còn xa lạ gì.
Dẫn đầu cho xu hướng phát hành thường xuyên thì phải kể đến trình duyệt Chrome, mặc dù ra muộn hơn so với các trình duyệt như IE, Firefox hay Opera, nhưng cách phát hành liên tục của Chrome đã khiến cho các trình duyệt khác không theo kịp, và chẳng mấy chốc bị biến thành các gã đối thủ chậm chạp, lỗi thời. Chẳng hạn, trong năm 2010, Chrome có 6 phiên bản phát hành, trong năm 2011 có 8 phiên bản, năm 2012 có 12 phiên bản, năm 2013 có 23 phiên bản… và cứ như vậy.
Năm Số lần phát hành
Năm 2010 6 phiên bản
Năm 2011 8 phiên bản
Năm 2012 12 phiên bản
Năm 2013 23 phiên bản
Năm 2014 24 phiên bản
Năm 2015 24 phiên bản
Bảng 2: Số lần phát hành thường xuyên của trình duyệt Chrome
Đặc biệt, với sự thịnh hành của các thiết bị điện thoại thông minh thì tần suất phát hành của các phần mềm trên đó còn trở nên thường xuyên hơn bao giờ hết. Các phần mềm trên điện thoại di động, bao gồm cả ứng dụng lẫn trò chơi, đều được cập nhật rất thường xuyên, có thể theo cả đơn vị ngày hoặc giờ.
Đạt được trình độ phát hành thường xuyên như vậy thì phải kể đến sự dịch chuyển trong tư duy phát triển sản phẩm, sự hỗ trợ về mặt kỹ thuật và trình độ của các nhóm phát triển phần mềm ngày càng tốt lên.
Tư duy phát triển phần mềm ngày càng linh hoạt hơn, hướng đến việc phục vụ người dùng hơn, lắng nghe người dùng hơn, do đó các nhóm đều cố gắng nhanh chóng tung ra sản phẩm và thử nghiệm các tính năng để thu thập được phản hồi của người dùng. Do đó, việc rút ngắn thời gian phát triển và phát hành là yêu cầu bắt buộc đối với các sản phẩm.
Sự phát triển của các công nghệ, công cụ và nền tảng cũng là một yếu tốt rất quan trọng giúp cho các nhóm có thể tăng tốc trong việc phát triển và phát hành sản phẩm. Chẳng hạn, với sự hỗ trợ của các công cụ kiểm thử tự động, giờ đây thay vì mất hằng tuần, hằng tháng để kiểm thử các sản phẩm thì chúng ta chỉ mất vài phút để có thể chạy một loạt các kiểm thử.
Các công cụ tích hợp liên tục và chuyển giao liên tục cũng giúp cho quá trình ổn định sản phẩm nhanh hơn, quá trình cài đặt và cập nhật sản phẩm hoàn toàn được tự động hoá, giúp giảm thiểu sai sót và tiết kiệm được rất nhiều thời gian. Chẳng hạn, với việc sử dụng các công cụ như Docker kết hợp với quy trình chuyển giao liên tục mà một phần mềm có thể được phát
hành và cập nhật trên hằng trăm, thậm chí là hằng nghìn máy một cách rất dễ dàng trong khoảng thời gian tính bằng phút.
Bây giờ
Bây giờ, xu hướng phát hành phần mềm dưới dạng dịch vụ (SaaS – Software As A Service) vẫn tiếp tục thể hiện các lợi ích của mình và đang rất phổ biến. Các công cụ và kỹ thuật tự động hoá cho gần như tất cả các công đoạn trong phát triển sản phẩm ngày càng trở nên thông minh hơn, hoàn thiện hơn, giúp cho lập trình viên tập trung sức lực vào xây dựng nghiệp vụ cho
phần mềm, thay vì phải mất công sức vào những thao tác kỹ thuật lặp đi lặp lại.
Các hệ thống phần mềm ngày càng trở nên khổng lồ hơn, phức tạp hơn nhưng đồng thời lại yêu cầu sự linh hoạt, dễ thay đổi, dễ mở rộng hơn, do đó quy trình phát triển phần mềm và trình độ của các lập trình viên cũng phải phát triển hơn để đáp ứng được nhu cầu này.
Trước đây, lập trình viên cố gắng để phần mềm “chạy được” là đã coi như hoàn thành nhiệm vụ rồi, nhưng bây giờ thì yêu cầu phải “chạy tốt”, rồi thì “dễ mở rộng”, “dễ thay đổi”, “dễ kết nối”. Trước đây, các nhóm phần mềm thường có quy mô nhỏ, việc cộng tác diễn ra đơn giản giữa các thành viên gần gũi nhau, giờ đây, các nhóm phần mềm có thể lên đến vài trăm thậm
chí vài nghìn thành viên, phân bố ở rất nhiều nơi trên thế giới, việc cộng tác diễn ra rất chặt chẽ và khắt khe với các tiêu chuẩn cao về mặt chất lượng, do đó trình độ của lập trình viên cũng phải đáp ứng tương xứng.
Lập trình viên hiện đại có rất nhiều công cụ để dùng
Có thể nói, ở hầu hết tất cả các công đoạn của việc phát triển và vận hành phần mềm bây giờ thì các lập trình viên đều được hỗ trợ “đến tận răng”, có thể kể đến:
– Các IDE với tính năng thông minh giúp gõ code nhanh hơn
– Các công cụ giúp phân tích độ “sạch” của mã nguồn
– Các công cụ giúp phát hiện các lỗi thường gặp
– Các công cụ giúp kiểm thử tự động ở hầu hết các mức độ như đơn vị, tích hợp, hệ thống, người dùng…
– Các công cụ giúp quản lí mã nguồn một cách tiện lợi
– Các công cụ giúp tích hợp tự động
– Các công cụ giúp cài đặt tự động
– Các công cụ giúp giám sát quá trình hoạt động tự động
– Các công cụ giúp giao tiếp tiện lợi
– …
Bởi vậy, một lập trình viên hiện đại không chỉ cần biết code thuần tuý, mà còn phải am hiểu tư duy phát triển sản phẩm mới, phương pháp tiếp cận mới trong lập trình và thành thạo sử dụng các công cụ cần thiết trong chuỗi các công cụ ở trên để nhằm mục đích nhanh chóng phát hành sản phẩm và mang đến giá trị cho người dùng sớm hơn.
Nguyễn Khắc Nhật.