Bạn không thể làm bất cứ điều gì thực sự tốt trừ khi bạn yêu nó, và nếu bạn thích làm tin tặc, chắc chắn bạn phải thực hiện các dự án riêng.

-Paul Graham, Hacker & Painters

Tất cả chúng ta đều có thể hưởng lợi bằng việc thi thoảng thực hiện các chương trình “trò chơi”, khi các giới hạn nhân tạo được thiết lập, chúng ta buộc phải đẩy khả năng của mình đến giới hạn.

-Donald Knuth, The Art of Computer Programming

Bối cảnh

Kinh nghiệm được xây dựng dựa trên cả thất bại lẫn thành công.

Vấn đề

Bạn làm việc trong một môi trường không cho phép bất kì thất bại nào. Tuy nhiên, thất bại thường lại là cách tốt nhất để học bất cứ điều gì. Chỉ có cách cố gắng làm những việc táo bạo, rồi thất bại, và học hỏi từ thất bại đó, và lại cố gắng thành người có thể thành công khi phải đối mặt với những khó khăn.

Giải pháp

Lập ngân sách cho thất bại bằng cách thiết kế và xây dựng các hệ thống trò chơi tương tự như bộ công cụ, nhưng không nằm trong phạm vi của các hệ thống bạn xây dựng tại nơi làm việc.

Nếu kinh nghiệm được xây dựng dựa trên thất bại nhiều như thành công, thì ít nhiều bạn cần tìm một không gian riêng tư, nơi bạn có thể chủ động tìm kiếm sự thất bại.Trong trò chơi tung hứng, người tung ba quả bóng không bao giờ cố gắng tung năm quả bóng là người không bao giờ tiến lên và nắm bắt cơ hội. Tuy nhiên, người bị đau lưng do phải nhặt bóng bị rơi liên tục trong nhiều giờ cuối cùng sẽ biết cách làm thế nào cho đúng. Bài học tương tự được áp dụng cho phần mềm. Cũng giống như người chơi tung hứng với ba quả bóng không cố gắng tung hứng năm quả bóng trong một buổi trình diễn, các nhà phát triển phần mềm cần một nơi an toàn để mắc sai lầm.

Là một thiếu niên làm việc tại Nova Scotia, Steve Baker được xem như một nhà lãnh đạo và một chuyên gia trong tổ chức phát triển nhỏ của mình. Steve mô tả những kỳ vọng này đã ảnh hưởng như thế nào đến anh: “Mọi người đều mong đợi tôi đã biết sẵn cách để làm đúng việc nào đó. Vì tôi không thể sử dụng những dự án như một kinh nghiệm để học tập, tôi đã phải ngừng học tập.” Điều này cũng tương tự như những trải nghiệm tư vấn của Ade, khi mà anh ta không thể phạm sai lầm và anh ta không thể từ bỏ những người phụ thuộc vào việc việc anh ta luôn luôn đúng. Ade biết rằng để học hỏi, anh cần sự tự do để thả một quả bóng. Giống như biết bao các nhà phát triển phần mềm trước đây, Ade đã sử dụng Trò Chơi Lắp Ghép để giúp mình học hỏi.

Khi triển khai mô hình Trò Chơi Lắp Ghép, làm cho hệ thống của bạn có liên quan và hữu ích cho cuộc sống của bạn với vai trò là một người học việc. Ví dụ: tự xây dựng wiki, lịch hoặc sổ địa chỉ của riêng bạn. Giải pháp của bạn có thể có kỹ thuật quá cao siêu cho vấn đề họ đang giải quyết, và có lẽ là có thể dễ dàng được thay thế bằng điều đã có sẵn. Tuy nhiên, những dự án này là nơi bạn được phép thất bại. Đó là những dự án mà bạn có thể thử những ý tưởng và kỹ thuật có thể dẫn đến thất bại thảm khốc. Nhưng người duy nhất có thể bị tổn thương bởi sự thất bại là bạn.

Một ví dụ cổ điển về việc sử dụng mô hình này là có vô số người đã xây dựng wiki của riêng mình. Một wiki cá nhân là một công cụ tuyệt vời cho người học việc vì bạn có thể sử dụng nó để ghi lại những gì bạn đã học. Wiki tạo các Trò Chơi Lắp Ghép tốt vì chúng có thể vô cùng đơn giản[1] và bạn có thể Sử Dụng Nguồn để tìm vô số ví dụ để xem. Theo thời gian, việc duy trì một wiki có thể dạy cho bạn về HTTP, REST, phân tích cú pháp, thiết kế web, bộ nhớ đệm, tìm kiếm toàn văn, cơ sở dữ liệu và tính toán đồng thời. Nếu bạn gắn bó đủ lâu với nó, nó cũng sẽ dạy cho bạn về di chuyển dữ liệu khi bạn thêm một tính năng yêu cầu định dạng lưu trữ khác và bạn không muốn vứt bỏ tất cả dữ liệu của mình.

Các ví dụ khác về Trò Chơi Lắp Ghép bao gồm các trò chơi như Tetris và Tic-Tac-Toe (một trong số các tác giả của cuốn sách thói quen viết một trò chơi bằng mọi ngôn ngữ mới mà mình học được), phần mềm viết blog và khách hàng của IRC. Điểm thiết yếu là việc xây dựng trò chơi liên quan đến việc học những thứ mới, tạo cho bạn một cơ hội để hiểu sâu hơn về các công cụ của bạn trong một môi trường vừa an toàn (bởi bạn là người sử dụng duy nhất và quan trọng nhất) và vừa là nơi vẫn còn chỗ cho bạn để phục vụ tốt hơn nhu cầu của riêng mình với vai trò là một người sử dụng, thậm chí còn hơn là slickest của lựa chọn thương mại.

Đây là những Trò Chơi Lắp Ghép của bạn. Khi bạn mang theo chúng từ công việc này sang công việc khác, một trong số những trò chơi đó sẽ trở thành hiện thực sống cho của nghề thủ công của bạn. Mặc dù vậy, hãy nhớ rằng chúng là đồ chơi và vì vậy chúng nên có yếu tố vui vẻ. Nếu không, sau khi sự nhiệt tình ban đầu qua đi, chúng sẽ thu lại tro bụi trong khi bạn tập trung năng lượng vào những điều bạn thực sự thích xây dựng.

Thường thì những trò chơi này là những công cụ tiêu chuẩn đơn giản để giúp bạn hiểu sâu hơn về các yếu tố đã dẫn tới thiết kế hiện tại của công cụ đó. Thậm chí có khả năng rằng một trong những trò chơi của bạn sẽ có được cuộc sống của riêng mình và có được những người dùng khác. Trong những trường hợp đó, bạn có thể thấy mình phải tìm kiếm một món Trò Chơi Lắp Ghép mới.

Linus xây dựng một hệ thống trò chơi OS[2]

Từ: torvalds @ klaava.Helsinki.FI (Linus Benedict Torvalds)

Nhóm tin: comp.os.minix

Chủ đề: Bạn muốn xem gì nhất trong minix?

Tóm tắt: cuộc thăm dò nhỏ cho hệ điều hành mới của tôi

ID thư:<1991.Aug.25205708.9541@klaava.Helsinki.FI>

Ngày: 25 Tháng Tám 91 20:57:08 GMT Tổ chức: Đại học Helsinki Xin chào mọi người đang sử dụng minix

Tôi đang làm một hệ điều hành miễn phí (chỉ là sở thích, không lớn và chuyên nghiệp như gnu) cho 386 (486) dòng hóa AT. Điều này đã được nung nấu từ tháng Tư, và đang bắt đầu để sẵn sàng. Tôi muốn bất kỳ thông tin phản hồi về những điều mọi người thích/ không thích trongminix, như hệ điều hành OS của tôi giống nó một chút (cùng một bố cục vật lý của hệ thống tập tin (vì các lý do thiết thực) trong các điều giống nhau khác).

Tôi hiện đang port bash (1.08) và gcc (1.40), và mọi thứ dường như ổng cả. Điều này ngụ ý rằng tôi sẽ có được một điều đó thực tế trong vòng một vài tháng, và tôi muốn biết những tính năng mà hầu hết mọi người đều muốn. Hoan nghênh bất kì đề xuất nào, nhưng tôi không hứa sẽ thực hiện chúng 🙂

Linus (torvalds@kruuna.helsinki.fi)

PS.Phải – nó không có mã minix nào, và nó có một hệ thống tập tin đa luồng.Nó không phải là portable (sử dụng 386 nhiệm vụ chuyển đổi…), và nó có lẽ sẽ không bao giờ hỗ trợ bất cứ điều gì khác hơn là các ổ cứng AT, bởi đó là tất cả những gì tôi có :-(.

Mẫu Trò Chơi Lắp Ghép tương tự với mẫu Hãy Là Người Kém Nhất, nhưng mẫu đó là về việc tìm kiếm một nhóm mà bạn có thể phát triển cùng. Trò Chơi Lắp Ghép thật ra là tính toán thận trọng để tạo ra cơ hội học bằng cách vượt qua ranh giới của bạn và xây dựng một phần các dự án phần mềm hoàn chỉnh. Nó cũng liên quan đến Đai Trắng và Đối Đầu Với Sự Thiếu Hiểu Biết Của Bạn, nhưng ít tập trung vào việc bỏ qua những kiến ​​thức trước đây của bạn. 

Hành động

Sử dụng các công cụ yêu thích của bạn để xây dựng wiki đơn giản nhất trên thế giới trong khi vẫn duy trì các tiêu chuẩn với chất lượng cao nhất. Phiên bản ban đầu không cần phải có gì ngoài giao diện người dùng đơn giản cho phép bạn xem và chỉnh sửa các tập tin văn bản thuần túy. Theo thời gian, bạn có thể thêm nhiều tính năng hơn và tìm ra những cách thú vị để phân biệt wiki của bạn với hàng ngàn những wiki khác. Không được hạn chế bởi hệ thống xử lý có sẵn; thay vào đó, hãy để cho những sở thích nghề nghiệp của bạn hướng dẫn bạn. Ví dụ: bạn có thể quan tâm đến công cụ tìm kiếm; trong trường hợp này wiki của bạn có thể thử nghiệm với các thuật toán xếp hạng hoặc là gắn thẻ. Nó thực sự không quan trọng việc bạn quyết định làm gì, miễn là bạn thử nghiệm và học hỏi.

[1] Cuộc thi Wiki ngắn nhất: http://c2.com/cgi/wiki?ShortestWikiContest

[2] Thông báo công khai đầu tiên của Linux: http://groups.google.com/group/comp.os.minix/browse_thread/thread/ 76536d1fb451ac60/b813d52cbc5a044b

Bài tiếp: [Học nghề] Sử dụng nguồn

Bài trước: [Học nghề] Thực hành, Thực hành, Thực hành