Nói một cách khác, các nhà khoa học dữ liệu không thay thế các bạn, họ tham gia cùng bạn.
Bạn có nhớ lúc phần mềm gặm nhấm cả thế giới? Trào lưu ngày nay là trí tuệ nhân tạo đang gặm nhấm phần mềm. Đến cả CEO Google Sundar Pichai cũng đã nói về “phần mềm tự viết chính nó”. Và một cách tất lẽ nếu bạn coi phát triển phần mềm chẳng khác gì hơn là “chuyên gia cắt và dán”, thì sẽ rất sớm thôi trí tuệ nhân tạo sẽ tiễn các kỹ sư phần mềm về vườn hết.
Cách làm truyền thống là các nhà phát triển viết phần mềm dưới dạng một loạt các quy tắc mã cứng: Nếu X thì Y. Con người chỉ dẫn cho chiếc máy, từng chữ dòng một. Đó là Phần mềm 1.0. Nhưng Phần mềm 2.0 nhận thức được rằng – với những tiến bộ trong học sâu – chúng ta có thể xây dựng những mạng nơ-rol có khả năng học được rằng những chỉ dẫn nào hay quy tắc nào là cần thiết để có được kết quả mong muốn.
“Phần lớn các lập trình viên ngày mai sẽ không duy trì những kho phần mềm phức tạp, viết những chương trình lộn xộn, hay làm những phép đo thời gian thực thi,” Karpathy đã viết như thế. Thay vào đó, họ thu thập, làm sạch, thao tác, đính nhãn, phân tích, và trực quan hoá dữ liệu được sử dụng cho những mạng nơ-ron.”
Phản hồi bài đăng của Karpathy, Carlos E. Perez, tác giả của The Deep Learning AI Playbook, viết rằng trong khi “Tôi đồng ý với Kaparthy rằng các cỗ máy có thể dạy được thực sự là ‘Phần mềm 2.0′, điều rõ ràng gây tranh cãi ở đây là có hay không sự khác nhau giữa các loại hệ thống mới này và những máy tính phổ thông.”
Cá nhân, tôi không cho rằng kỹ nghệ phần mềm sẽ biến mất vào bất kỳ thời điểm sớm nào. Kể kả nếu có một vai trò mới xuất hiện – hãy gọi nó là kỹ sư Phần mềm 2.0 hay nhà khoa học dữ liệu 2.0 hay đại loại thế – luôn luôn có những cách mà sự dịch chuyển công nghệ này sẽ trao sức mạnh cho người hành dụng Phần mềm 1.0.
Trên thực tế, tôi còn không chắc được là kỹ thuật phần mềm, ít nhất là trong tương lai gần, lại có thể là cái gì đó hoàn toàn khác với thứ chúng ta đang làm hiện tại. Vâng, chúng ta sẽ có sự trợ giúp từ các hệ thống nơ-ron học sâu, nhưng chúng sẽ giúp chúng ta thực hiện công việc hiện tại tốt hơn thay vì gạt chúng ta ra triệt để.
Đó là một thế giới mới mẻ và chắc chắn sẽ đến, nhưng chúng ta đang không lên kế hoạch để sống trong những mùa phim Black Mirror. Trong thực tế, các trợ lý ảo đã và đang lên lịch cho ngày của bạn và sắp đặt những cuộc gọi hội nghị của bạn. Thậm chí đang có những hệ thống web được hỗ trợ bởi trí tuệ nhân tạo có khả năng tạo cho bussiness của bạn một logo và tinh chỉnh nó theo những phản hồi của bạn.

Ở đây có một ví dụ tuyệt vời: bản demo này cho thấy cách một mạng học sâu có thể chuyển đổi một hình ảnh mô phỏng thiết kế thành mã HTML. Nó được đào tạo bằng cách cho nhìn vào các trang web hiện có và xem cách các điểm ảnh trên màn hình được kết nối với các thẻ HTML (ví dụ: <h1>, <div>), học cách mà trình duyệt dựng trang HTML thành hình ảnh bạn nhìn thấy. Sau đó thì bạn có thể cung cấp cho nó một hình ảnh khác và nó sẽ chuyển đổi nó thành mã HTML dùng được. Một trong những ứng dụng của việc này là rút ngắn đáng kể chu trình tạo bản mẫu để một nhà thiết kế có thể vẽ giao diện và một máy tính sẽ tạo ra một trang web dùng được được từ đó.

Trong nhiều năm, chúng ta đã sử dụng các trình hỗ trợ tự động để tái cấu trúc cũng như giảm thiểu thời gian viết những khối mã gần như lặp lại vô vị không tránh khỏi.

Trọng điểm ở đây là kỹ nghệ phần mềm truyền thống sẽ được định hình lại bởi máy học chứ không đi đến kết thúc. Nhưng định thành hình gì?
Ngày nay, điện thoại của bạn tự động kiểm lỗi chính tả của bạn cũng như gợi ý từ ngữ. Khi bạn viết mã, những công cụ tương tự như thế giúp bạn làm nổi bật những nơi có khả năng là lỗi. Là một người thực hành lập trình cặp tại Pivotal, tôi bị lôi cuốn một cách tự nhiên đến suy nghĩ về những ảnh hưởng của Phần mềm 2.0 lên cách mà tôi làm việc. Xem xét những tiến bộ trong học máy và bộ giảo diện tương tác, khả năng cao là một ngày nào đó cỗ máy có thể trở thành nửa kia của tôi.
Nhiều năm qua, chúng ta đã sử dụng các trình hỗ trợ tự động để tái cấu trúc cũng như giảm thiểu thời gian viết những khối mã gần như lặp lại vô vị không tránh khỏi. Và tương tự như thế, hiện chúng ta đang chào đón sự xuất hiện của các trợ lý AI trong những khía cạnh phức tạp hơn của phát triển phần mềm. Gần đây, chúng đã xuất hiện dưới dạng những bộ siêu nạp giúp cho các IDE có thể đề xuất toàn thành mã tốt hơn.
Hãy tưởng tượng một trợ lý AI tiên tiến hơn thế rất nhiều trong tương lai. Khi bạn viết mã, đối tác máy của bạn có thể xác định loại hàm bạn đang viết và điền phần còn lại cho bạn, dựa trên phong cách của bạn, sử dụng phân tích dự đoán cấp cao. Về cơ bản, máy viết phần lớn mã, bạn phê duyệt.
Một lĩnh vực khác mà trợ lý AI có thể giúp đỡ là phát triển hướng kiểm thử. Một con người có thể viết các bài kiểm thử trong khi đối tác máy lặp hàng triệu lần để tìm đúng đoạn mã vượt qua các bài kiểm thử đó. Thay vì thực hiện cả hai công việc – viết kiểm thử và rồi vượt qua chúng – bạn có thể để một đối tác máy thực hiện công việc thứ hai. Điều đó sẽ hữu ích. Bạn dành ít thời gian hơn cho mã triển khai và nhiều thời gian hơn để hiểu và giải quyết các vấn đề nghiệp vụ.
Cuối cùng, Phần mềm 2.0 thậm chí có thể giúp lái các kiểm thử, đề xuất kiểm thử tiếp theo, và cho bạn biết lý do tại sao. Tưởng tượng nhóm marketing tới gặp nhóm phát triển và nói rằng họ muốn chức năng như thế này và như thế kia. Nếu họ có thể diễn đạt những gì họ muốn theo cách mà máy có thể hiểu – điều này đang ngày càng dễ dàng hơn – máy có thể giúp bạn lựa chọn các kiểm thử cần thiết và đề xuất các bước tiếp theo.
Chuyện này gợi ra mối quan tâm tối thượng: máy móc có thay thế hoàn toàn các kỹ sư phần mềm hoàn toàn không? Sự thật là trong điều kiện tốt nhất trợ lý máy giúp chúng ta hơn 90% công việc cần thiết. Nhưng chúng vẫn có 1% gặp sai lầm, thứ không thể đoán trước. Và điều đó có nghĩa là bạn cần một hệ thống giám sát để đảm bảo rằng mã được đề xuất thực sự hoạt động. Có lẽ đây là một vai trò mới cho các kỹ sư phần mềm, tương tự như những gì Andrej ám chỉ trong bài đăng của mình: giám sát mã và đưa độ chính xác của hệ thống máy học đạt gần hơn tới tỉ lệ 100%.
Giờ chúng ta đã phác thảo những lợi ích có thể nhìn nhận được, câu hỏi tiếp theo được đặt ra: những phần nào của lập trình phần mềm có thể dịch chuyển sang khung máy học 2.0 và những gì nên giữ lại trong khung 1.0 truyền thống? Rõ ràng rằng hiện tại các mạng nơ-ron học sâu đang làm rất tốt trong các cài đặt học có giám sát nếu chúng được đào tạo bởi dữ liệu đủ tốt với các ví dụ tốt và ví dụ xấu để họ có thể học những gì cần xuất ra chính xác. Google, là một trường hợp, đang sử dụng học sâu trên toàn bộ bộ sản phẩm của mình.
Nhưng những hệ thống đó chỉ tốt bằng với dữ liệu đào tạo. Và, như một trong những đồng nghiệp của tôi đã chỉ ra, việc cải thiện hiệu suất mô hình thường liên quan đến việc cải thiện mã bên dưới và môi trường triển khai, cũng như cải thiện dữ liệu đào tạo. Trên thực tế, một vài hệ thống máy học đang trở nên quá tốt đến mức chúng thực sự xung đột với các lỗi mà con người để lại trong dữ liệu đào tạo.
Mạng lưới thần kinh không phải là viên đạn bạc. Thay vào đó, chúng ta cần thiết kế các mạng thần kinh để phối hợp với các giải pháp khác. Có một số phần nhất định của phát triển phần mềm sẽ khớp thực sự tốt với học sâu và có những phần khác thì không.
Trong khi lập trình cặp, tôi đã trải nghiệm là có nhiều cách khác nhau để hoàn thành cùng một vấn đề với ai đó. Phát triển phần mềm là một quá trình hợp tác liên tục với các đồng nghiệp khác. Mỗi khi một cặp với một người mới, họ mang đến những trải nghiệm khác và cách tiếp cận khác để giải quyết vấn đề. Đi cùng càng nhiều cặp, bạn càng nhận được nhiều giải pháp.
Với Phần mềm 2.0, chúng ta có thêm một đối tác mới để giúp thực hiện công việc tốt hơn. Chúng ta có thể hình dung một môi trường hợp tác mạnh mẽ hơn dẫn đến các giải pháp ngày càng hiệu quả hơn bao giờ hết. Và điều đó tốt cho tất cả mọi người.

Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.