Phần mềm - mục tiêu di động

Bài viết được dịch từ software, the moving target của tác giả dejimata.

Yukihiro “Matz” Matsumoto, tác giả ngôn ngữ lập trình Ruby, đã có một bài nói chuyện lôi cuốn tại hội nghị RubyWorld năm nay (2013 - ND) khiến tôi phải suy nghĩ. Bài nói chuyện nói về Ruby, về lịch sử gần đây của phần mềm, nhưng cũng chứa đựng nhiều thứ hơn thế.

Trong phong cách đã trở thành thương hiệu của mình, Matz thuật lại quá khứ thông qua câu chuyện của chính cuộc đời mình. Câu chuyện bắt đầu ngay trước khi ông ấy tạo ra Ruby, 20 năm trước, trong thời kỳ mà phần cứng đắt đỏ, phần mềm mất hàng năm trời để viết và tài liệu không được tính bằng số trang mà bằng độ dày.

Yukihiro "Matz" Matsumoto at RubyWorld 2013

"20 năm trước, chúng ta phải thừa nhận sự dốt nát của mình."

Phần mềm không giống với bất cứ thứ gì loài người từng tạo trước đó, một sự hiện thực hóa của suy nghĩ con người dưới dạng số. Nhưng quá nhiều tiền đã được đầu tư vào phần cứng và cơ sở hạ tầng cho các công ty để rồi thừa nhận với khách hàng rằng họ chẳng biết gì về việc xây dựng chúng. Thất bại quá tốn kém.

Giờ đây, nhìn lại thời kỳ mà phần cứng rẻ, phần mềm thường được phát triển trong vài tuần hay vài tháng, không phải vài năm và tài liệu được đo lường bằng số commit, không phải số trang, có thứ gì đó đã trở nên rõ ràng hơn.

Đầu tiên là các giả định cơ bản của chúng ta đã sai, trước hết là giả định rằng "chúng ta biết chúng ta nên làm gì". Điều đó đúng, phát triển phần mềm chỉ đơn giản là xác định yêu cầu, lập kế hoạch dựa trên các yêu cầu đó và thực hiện kế hoạch.

Ngoại trừ là nó không hoạt động. Hay ít nhất là nó không hoạt động tốt.

Moody skies at RubyWorld 2013

Trước khi tạo ra Ruby, Matz làm việc cho một công ty phát triển phần mềm doanh nghiệp theo cách thức này, với những dự án lớn làm trong rất nhiều năm, mã nguồn viết theo đặc tả, kiểu thác nước. Khách hàng nói ra điều họ muốn, đặc tả được vẽ ra và lập trình viên viết mã nguồn thỏa mãn các đặc tả đó.

Và cuối cùng, một thứ gì đó được tạo ra. Thứ đó có thể không đạt yêu cầu cho lắm, hoặc chẳng đạt yêu cầu gì cả, nhưng rốt cuộc cũng có thứ gì đó để trình ra sau ngần ấy thời gian và tài nguyên tiêu tốn, thứ gì đó hoàn thành đúng hạn. Đó là yêu cầu tối thiểu.

Nhưng 20 năm trước, Matz đã cảm thấy có gì đó không đúng. Những dự án lớn của công ty ông ấy đối xử với phần mềm như với ô tô, tủ, lò nướng, thứ gì đó được thiết kế, chế tạo và chuyển giao. Nhưng mã nguồn không phải vật chất, nó là dạng số và nó tuân theo tập những quy tắc khác.

Sự phản đối việc tuân theo những quy tắc này đã vô cùng bị xem nhẹ cho tới tận ngày nay. Bản thân từ "phần mềm", đặt ra để mô tả những thứ xây dựng từ mã nguồn, làm dậy lên những quan niệm sai lầm: phần mềm không "mềm mại" chút nào mà nó thô cứng. Vô cùng thô cứng (nguyên văn: 'software was not "soft” at all, but hard. Very hard.')

"Phần mềm có lẽ là thứ phức tạp nhất mà con người từng tạo ra."

Tôi thấy thú vị khi nghĩ rằng phần mềm là thứ phức tạp nhất mà chúng ta từng tạo ra, và cũng là thứ không tuân theo những bản năng cơ bản của chúng ta về những thứ được tạo. Hàng ngàn năm chứa đựng máu và mồ hôi được dành để học cách xây dựng những thứ trong thế giới vật chất, vì vậy không hoàn toàn ngạc nhiên khi chúng ta muốn áp dụng những bài học đó vào thế giới số.

Once upon a time, computing was expensive

Nhưng chúng đã làm chúng ta thất bại, Matz nói, và không theo kết cục tốt - trả một cái giá khá đắt, mà không dạy chúng ta điều gì. Chúng khiến chúng ta thất bại vì chúng ta không phát triển phần mềm trong một thế giới ba chiều dự đoán được như thế giới mà chúng ta sống mà trong một thế giới trừu tượng, không quen thuộc và thường xuyên thay đổi.

Trong thế giới này, nơi mà những bản năng trong thế giới thực của chúng ta thường sai lầm, chúng ta cần phải thường xuyên thử và sai, theo một cách lặp đi lặp lại và rẻ. Những dự án lớn kiểu như Matz từng làm 20 năm trước làm hoàn toàn ngược lại.

Thông điệp hoàn toàn không mới, nhưng Matz bày tỏ nó với một sự đơn giản đến nỗi nó như một sự thật hiển nhiên. Ông ấy không tuyên bố rằng mình có cách giải quyết, hay thậm chí gợi ý rằng có cách giải quyết cho vấn đề này mà chỉ đưa ra một số gợi ý rút ra từ kinh nghiệm bản thân.

"Tiếp tục tiến lên", ông nói, đưa ra lời khuyên đối với kiểu "con đà điểu" bảo thủ chúi đầu vào cát và hi vọng mọi thứ sẽ trở lại bình thường. (Chúng sẽ không trở lại bình thường.)

"Cố gắng viết ít mã nguồn hơn", ông nói. Hợp tác, thúc đẩy công việc của người khác, sử dụng các công cụ có sẵn. Nói cách khác, đứng trên vai người khổng lồ. Điều này có rất nhiều ý nghĩa với tôi.

"Viết mã nguồn tuyệt vời. Thay đổi thế giới."

Cuối cùng, đây là thông điệp mạnh mẽ nhất. Ruby được thiết kế để làm được điều này bằng cách tối đa sự hạnh phúc của lập trình viên. Nhưng Matz hiếm khi đề cập đến Ruby. Ông ấy suy nghĩ rộng hơn.

Write great code, change the world

Và khi suy nghĩ rộng hơn, thứ gì đó khiến tôi tò mò về cuộc tụ họp tại RubyWorld.

Chúng tôi ở đây, được đem đến với nhau bằng một ngôn ngữ lập trình tên là Ruby. Ruby được thiết kế bởi một lập trình viên trong thời gian rảnh của ông ấy tại một tập đoàn lớn sản xuất những phần mềm doanh nghiệp theo đặc tả. 20 năm sau, ngôn ngữ lập trình này được sử dụng khắp thế giới, tạo nên nền tảng cho một trong những framework làm web phổ biến nhất thế giới và được cho là nâng cao vị thế và tầm nhìn của Nhật Bản trong lĩnh vực công nghệ thế giới.

Sự thật là việc lập trình viên này có thời gian rảnh để phát triển Ruby hoàn toàn là may mắn. Chắc chắn không ai trong công ty của ông ấy dành thời gian để phát triển một ngôn ngữ để xây dựng phần mềm tốt hơn bằng cách tăng sự hạnh phúc của lập trình viên.

Tình trạng ngày nay cũng không khác mấy: ngành công nghiệp và chính phủ đầu tư những lượng tiền khổng lồ vào những dự án lớn, đắt đỏ để rồi chôn vùi vào quá khứ, trong khi bỏ qua phần lớn những sản phẩm cây nhà lá vườn thành công ngay trước mắt.

Giờ đây tác giả của Ruby cho chúng ta biết rằng cách thức xây dựng phần mềm hiện có là sai lầm. Mà Matz không phải là người có khiếu kể chuyện, thông điệp này có thể trở nên kiêu ngạo hay gia trưởng. Nhưng nó đã không như vậy.

Và còn nữa.

Tôi thấy mọi người gật đầu đồng ý. Nhưng có có đang thực sự nghe không?

Với một nhóm các hacker và doanh nhân nòng cốt chủ yếu ở Tokyo, tiếp cận sớm với những công nghệ mới, điều mà ông ấy nói đã là tin cũ. Họ đã nghe thông điệp đó trước đây - và giờ, nhiều người đã nằm lòng điều đó. Họ đang nhìn vào màn hình laptop của mình trong khi ông ấy nói, phản ứng theo những lời khuyên của ông ấy mà chẳng hề nghe.

Matz không thực sự nói cho họ nghe. Ông ấy nói cho những người khác. Và ông ấy đang cố gắng, trong phong cách nhã nhặn, khiêm tốn của mình, đưa thông điệp đến họ.

"Nếu bạn muốn đến một nơi nào khác, bạn phải chạy nhanh gấp hai lần như thế."

Phần mềm không phải là thứ gì đó ảnh hưởng đến những nhà phát triển phần mềm. Không còn ảnh hưởng nữa. Nó không còn chỉ ở trong máy tính, nó ở trong cả ô tô và lò nướng. Sẽ không còn lâu nữa trước khi nó ở trong tất cả mọi thứ.

The Red Queen from Alice in Wonderland

Và vì rất khó khăn cho lập trình viên để có thể xây dựng phần mềm, cũng rất khó khăn cho những người khác để hiểu được phần mềm và tiềm năng của phần mềm. Mọi người nhìn lại những bài học trong quá khứ. Khi những bài học đó không cung cấp những gợi ý hữu ích, họ chúi đầu vào cát, hi vọng mọi thứ sẽ trở lại bình thường.

Nhưng không.

Phần mềm cơ bản khác như vậy. Nó là một mục tiêu di động. Chỉ đơn giản để theo kịp cũng tiêu tốn một nỗ lực rất lớn - để thực sự vượt qua ranh giới, bạn cần chạy nhanh gấp hai lần, cố gắng suy nghĩ gấp hai lần, tưởng tượng sâu rộng gấp đôi, vì vậy hầu hết mọi người chỉ bám vào làm cùng một thứ, hay yêu cầu thêm cùng một thứ.

Chúng ta cần thay đổi nhiều thứ ngoài cách chúng ta tạo ra phần mềm. Chúng ta cần thay đổi cách mọi người hiểu về phần mềm.

Và với ý nghĩa đó, theo dõi bài nói chuyện của ông, tôi cảm thấy rằng người kể chuyện Matz ít nhất đã ảnh hưởng đến thế giới ngày nay như lập trình viên Matz 20 năm trước. Ruby là ngôn ngữ đã thay đổi cách các lập trình viên viết mã nguồn. Bài học về Ruby là một câu chuyện có thể thay đổi cách mọi người hiểu mã nguồn.

Đó là một câu chuyện mà tôi muốn đọc.