Pet project (hay side project), một từ mà dân code chúng ta ít nhiều cũng đã nghe qua hoặc đã từng làm dăm ba cái để rèn luyện kỹ năng hay tiếp cận những công nghệ mới. Chủ đề này có lẽ đã được anh Hoàng (chủ blog toidicodedao nổi tiếng) khai thác và hướng dẫn triệt để, từ những lợi ích mà pet project mang lại, đến việc chọn ý tưởng để thực hiện, cũng như những cách triển khai để đưa đứa con tinh thần của mình đến với bạn bè, người dùng (các bạn có thể tìm đọc bài blog của anh Hoàng tại đây), nên trong bài viết này, mình sẽ chỉ chia sẻ thêm về những lợi ích mà pet project đã mang lại cho cá nhân mình, những trải nghiệm của bản thân từ việc làm ra chúng, đồng thời cũng để (shamelessly) khoe mẽ vài cái project linh tinh nhưng cũng có thể xem là niềm tự hào của mình trên chặng đường đến với lập trình của mình tới nay.
Vài dòng tự sự và cái pet project đầu tiên
Có lẽ cũng như khá nhiều bạn, cơ duyên mình đến với lập trình không phải là chủ đích ngay từ đầu khi chọn ngành nghề để thi Đại học. Còn nhớ cái thời học phổ thông, lập trình, tin học, Pascal bla bla… là những thứ gì đó xa xỉ và không mấy gì hứng thú đối với mình, mặc dù cũng mê game, cũng từng có thời trốn học đi net 😂. Mình thì có tí khả năng vẽ vời nên lúc đó đã bồng bột lựa chọn khối V để thi ĐH, mặc dù Toán với Lý dốt không tả nổi, cộng với sự ảo tưởng của tuổi trẻ khi chọn thi vào một trong những trường ĐH danh giá của cả nước là ĐH Bách Khoa TP.HCM. Kết quả cho sai lầm này là mình đã tạch với một số điểm thảm hại. Hụt hẫng là cảm giác lúc đó khi đón nhận một trong những thất bại lớn nhất trong đời. Nhưng may mắn của mình là có gia đình bên cạnh để động viên và định hướng lại cho mình. Ba mình đã nhận thấy một số thế mạnh của mình mà ngay cả mình khi đó cũng chả rõ, sau đó ông đã đăng ký cho mình tham gia khóa học lập trình .NET tại một trường ĐH với thời lượng tương đương với hệ trung cấp nghề là 2 – 2.5 năm.
Khoảng thời gian từ lúc được gia đình định hướng lại đến khi hoàn tất khóa học 2.5 năm, mình vẫn chưa hề cảm thấy yêu thích ngành lập trình mà mình theo học. Nào là nhị phân, bát phân, cú pháp if else, vòng lặp, cấu trúc dữ liệu, giải thuật, các tính chất hướng đối tượng… ôi, những nỗi ám ảnh khi nhập môn lập trình, nhưng bằng một cách thần kì nào đó mà mình đã vượt qua được. Sau đó, mình xin vào được bộ phận IT của một công ty bảo hiểm để làm, 2 tháng thử việc ngắn ngủi nhưng có thể nói là những chuỗi ngày kinh hoàng khi ngày nào cũng phải làm việc dưới áp lực, làm với những thứ mình không hiểu, không nắm rõ và hoàn toàn không thích. Sau 2 tháng thử việc, mình đã tham gia nghĩa vụ quân sự tại địa phương, để thay đổi và trải nghiệm một môi trường sống hoàn toàn khác, một môi trường sinh hoạt và lao động theo tập thể, kỷ cương, với hi vọng mình sẽ chín chắn và có những quyết định đúng đắn hơn. Thật vậy, 2 năm nghĩa vụ đã ít nhiều thay đổi bản thân mình. Sau khi hoàn thành, mình quay lại với cuộc sống và dành ra vài tháng để ôn lại những kiến thức về lập trình, lúc này mình đã tự mò mẫm sâu hơn về lập trình web qua một nền tảng trực tuyến miễn phí là Sololearn, đồng thời cũng được biết lập trình web được chia làm nhiều ngã rẽ, trong đó có front-end là một mảng lập trình thiên về sự thẫm mỹ và sáng tạo, và hiển nhiên, là một người không mấy thích thú với toán học lại có tí hơi hướng yêu mỹ thuật thì đây có lẽ là một tín hiệu không thể nào vui hơn. Mình đã tìm được niềm đam mê với lập trình và quyết tâm theo đuổi nó trên con đường front-end này.
Vậy đó, mình không bắt đầu học lập trình từ sớm, không phải là một người quá giỏi với những con số hay tư duy logic, và cái pet project đầu tiên của mình cũng chỉ xuất hiện sau khi mình xin vào được một công ty khác là Bosch, sau một thời gian 2 năm dài đứt quãng và hoàn toàn không đụng đến code. Ý tưởng cho cái pet project đầu tiên của mình chỉ đơn giản là clone lại giao diện của một thứ gì đó để luyện kỹ năng dựng UI, thường thì mọi người hay chọn những trang mạng xã hội như FB, Twitter, hay những trang web e-commerce, rạp phim, để khi có thực tập hay làm việc tại một công ty nào đó thì họ cũng sẽ không bị bỡ ngỡ bởi các dạng sản phẩm phổ biến này và nhanh chóng bắt kịp công việc, nhưng mình thì không, mình đã “tâm bất biến giữa dòng đời vạn biến” 😑 và đi chọn một thứ có lẽ chả ai thèm nghĩ tới, đó là hệ điều hành Windows 7, bởi một lẽ Windows 7 là một trong những hệ điều hành phổ biến nhất và gắn liền với tuổi học sinh của mình (đến nay chắc có lẽ cũng còn nhiều cơ quan, xí nghiệp vẫn dùng thôi 😂). Và thế là, với tên gọi Windows 7 Simulation, cái pet project đầu tiên của mình, một bản clone giao diện Windows 7 trên nền web ra đời (các bạn có thể truy cập tại https://khang-nd.github.io/win7).
Từ đam mê đến thành công
Như các bạn đã biết thì làm pet project mang đến vô vàn lợi ích, có thể tóm lại vài lợi ích thực tiễn đáng chú ý sau:
- Thỏa niềm đam mê khi tự xây dựng được một sản phẩm từ chính ý tưởng của mình, không bị bất kì ràng buộc nào về tài chính hay thời gian.
- Nâng cao trình độ, các kỹ năng như áp dụng kiến thức vào dự án thực, viết code, search google, stackoverflow, giải quyết vấn đề…
- Tự do mò mẫm, khám phá và áp dụng mọi loại công nghệ, từ ngôn ngữ, framework, đến các tooling, infras hiện đại
- Có cái để thêm vào CV, hồ sơ cá nhân, dễ được nhà tuyển dụng để mắt hơn, cơ hội nghề nghiệp rộng hơn
- Niềm vui thích khi đưa sản phẩm đến tay người dùng, có thể chỉ là người thân, bạn bè, nhưng đứa con của bạn được đón nhận và giải quyết vấn đề của họ
- Hoặc nếu may mắn hơn nữa, sản phẩm của bạn có thể kiếm thêm được ít thu nhập cho bản thân ngoài khoản lương ba cọc ba đồng từ công ty.
Hầu hết những lợi ích kể trên pet project đều mang đến cho mình. Khi biết đến front-end, mình thực sự đã tìm thấy niềm đam mê với lập trình. Việc làm ra những cái pet project đó đã tạo cho mình cảm giác thích thú những lúc rảnh rỗi (có khi còn nghiện hơn cả chơi game, thức đến tận khuya khi được làm những tính năng thú vị). Những kiến thức lý thuyết mà mình khó có thể tiếp thu khi chỉ học và đọc tài liệu, mình đã có thể nắm vững hơn khi thực hành, áp dụng vào pet project. Đối với bé pet “Windows 7 Simulation” của mình, mặc dù ý tưởng có vẻ như không mấy hay ho, nếu không muốn gọi là “xàm xí” (trích lời của thằng bạn thân chết tiệt 😔), mình vẫn nghĩ nó có điểm gì đó độc đáo và riêng biệt, mà quan trọng là, nó có rất nhiều thứ hay ho để khai thác, là một đối tượng cực kỳ thích hợp để luyện skill và vọc vạch nhiều loại công nghệ, thế là mình vẫn tiếp tục nuôi bé pet này.
Sau bản prototype đơn giản được xây dựng chủ yếu bằng jQuery mà mình đã chia sẻ ở trên, mình đã viết lại toàn bộ codebase bằng Vue, dùng realtime database của firebase để lưu trữ một số cài đặt, tùy chọn cá nhân của người dùng, bổ sung thêm nhiều tính năng hơn giống với Windows, bao gồm cả đa ngữ, tất cả những thứ đó hoàn toàn đều được tự mình học và khám phá. Hơn thế nữa, mình còn được học thêm về cách chuyển từ một ứng dụng web sang Android theo dạng hybrid app sử dụng WebView, cũng như cách deploy một ứng dụng Android và đưa đến tay người dùng qua chợ ứng dụng Google Play. Kết quả là mình đã có thêm được một nguồn thu nhập phụ nhờ vào ít quảng cáo mình đặt trong app, tuy không nhiều nhưng còn gì vui hơn khi thấy chính đứa con của mình được nhiều người đón nhận và sử dụng, mà trước đó nó đã đem lại cho mình bao nhiêu kiến thức và những kinh nghiệm vô giá trong quá trình tự xây dựng một sản phẩm.
Và thành công này dẫn lối cho thành công kế, sau khoảng thời gian 2 năm làm việc tại Bosch, bản prototype Win7 của mình tình cờ được một anh Principal Engineer người Úc chú ý đến khi anh này “dạo chơi” trên Github. Anh đã chủ động liên hệ với mình, 2 anh em đã có một buổi casual chat bằng tiếng Anh, mặc dù tiếng Anh giao tiếp của mình chỉ ở mức tạm ổn, nhưng sau buổi này, anh này có lẽ đã cảm thấy ở mình có những điểm gì đó phù hợp với công việc và văn hóa của công ty, nên anh đã hẹn mình trong những buổi phỏng vấn tiếp theo với các thành viên còn lại trong team. Trải qua 3 vòng phỏng vấn theo đúng quy trình tuyển dụng như đa số công ty, mình được offer với mức lương hấp dẫn và nhiều benefit khác, như một lẽ tự nhiên, mình đã sắp xếp công việc ở Bosch, tạm biệt những người bạn, những người đồng nghiệp tại đây để bước sang một môi trường mới với nhiều cơ hội và thử thách. Giờ đây, mình đang làm remote tại nhà, tiết kiệm được bao nhiêu thời gian khi không phải đi sớm về muộn bởi quãng đường đi làm dài đăng đẳng, không phải thưởng thức “món ăn tinh thần” là kẹt xe hàng ngày, nhưng vẫn được chào đón và tự do đến văn phòng bất cứ khi nào mình muốn, được làm việc với những người tài năng và cơ hội đi onsite Úc đang chờ trước mắt. Đối với mình thì đây là một thành công lớn, một niềm tự hào, bởi có lẽ không biết bao nhiêu người, không chỉ riêng dev, vẫn luôn ao ước khi đi làm 😊
Động lực và sự kiên trì nuôi pet
Hi vọng những thành công mà pet project đã mang lại cho mình được chia sẻ ở trên đã phần nào truyền lửa cảm hứng và động lực cho các bạn đang có ý định làm pet project, hay những bạn đã làm nhưng đang bỏ dang dở đứa con thân yêu của mình. Để giúp các bạn có thêm động lực và sự kiên trì nuôi pet, tránh cái cảm giác chơi vơi khi không nhìn thấy mục đích cuối cùng sau khi đã làm ra được sản phẩm, thì dưới đây là một vài cách để chia sẻ, đưa sản phẩm đến tay người dùng mà có thể sẽ phù hợp với bạn:
1. Chia sẻ đến các nhóm/cộng đồng trên Facebook
Là một trong những trang mạng xã hội phổ biến nhất ở Việt Nam ta, Facebook có vô vàn nhóm công khai lẫn riêng tư được lập ra để quy tụ những thành viên có cùng điểm chung, từ sở thích, đam mê đến đời sống, công việc. Lập trình cũng không ngoại lệ, các bạn có thể tìm và chọn tham gia vào một hoặc nhiều nhóm lập trình ở mảng mình đang học, đang làm việc. Ngoài lợi ích được học hỏi, chia sẻ kiến thức hay nhờ tìm bug hộ 🤣, các bạn cũng có thể chia sẻ những cái pet project mà mình tự hào đến với những thành viên khác trong nhóm, để nhận được những lời nhận xét, góp ý, khen, chê, hay thậm chí là gạch đá, nhưng tất cả đều sẽ có ích cho kinh nghiệm và kỹ năng của bạn. Nhưng nhớ đọc kỹ và chấp hành nội quy của nhóm để tránh bị bay màu mà không rõ lý do.
2. Viết blog, đăng bài chia sẻ
Như cách mình đang làm đây, mượn danh nghĩa là chia sẻ về bản thân, kinh nghiệm để PR cho mấy con pet linh ta linh tinh của mình 😜, các bạn có thể viết blog, đăng bài lên các nền tảng chia sẻ kiến thức như Viblo, Kipalog, giới thiệu về cái pet project của mình, từ việc lên ý tưởng, lựa chọn công nghệ đến quá trình thực hiện và thành quả cuối cùng, những kiến thức và kinh nghiệm mà bạn có được sau toàn bộ quá trình được bạn chia sẻ chắc chắn sẽ có ích cho một người nào đó. Ví dụ như bạn làm ra được một trang xem phim giống Netflix, hay một trang mạng xã hội tương tự Facebook (thậm chí có phần xịn xò hơn khi giải quyết được một số vấn đề của họ 🐧) còn chần chờ gì mà không đăng ngay một bài để khoe với thiên hạ? Nếu như cảm thấy tự tin vào vốn tiếng Anh của mình, các bạn thậm chí có thể viết bằng tiếng Anh, đăng trên Medium, Dev.to hay Hashnode… để pet project của mình vươn xa hơn, được bạn bè, cộng đồng quốc tế biết đến, đồng thời xem như là một cách để mình rèn luyện kỹ năng viết và trình bày bằng tiếng Anh, mở ra thêm nhiều cơ hội ngoài sức tưởng tượng của mình.
3. Hacker News hoặc Reddit
Nếu bạn là một người hiếu kỳ và thích tìm hiểu văn hóa Mỹ, chắc hẳn bạn sẽ biết đến hai nền tảng là Hacker News và Reddit, đây là hai trang mạng xã hội rất phổ biến ở US cũng như các nước phương Tây đã phát triển. Ngoài giải trí, chia sẻ tin tức, bàn luận, đánh giá mọi khía cạnh, ngóc ngách trong xã hội, các bạn có thể dùng 2 phương tiện này để chia sẻ, quảng bá pet project của mình đến cộng đồng. Cách thức đơn giản nhưng hiệu quả cực kỳ cao, bởi có lẽ đây là 2 trang mạng xã hội phổ biến và uy tín, đươc nhiều trang tin tức, công nghệ khác săn đón và theo dõi. Chỉ cần một thread nói về pet project của bạn được trending trên một trong hai hoặc cả hai nền tảng này, thì cái pet project mà bạn tưởng chừng như vớ vẩn, made-for-fun, sẽ lên như diều gặp gió một cách bất ngờ. Dĩ nhiên, cần có thêm một chút (hoặc nhiều chút) may mắn nữa. Một ví dụ thực tế từ chính bản thân mình là, cách đây vài tháng mình có đăng một thread trên HN về cái CSS framework để dựng UI giống Windows 7, thật bất ngờ khi thread này được lên trending với hơn 200 upvote và nhờ đó, cái repo của mình trên Github hiện tại đã đạt 800⭐. Mind-blowing! Từ đó có thể thấy sức ảnh hưởng của HN/Reddit nói riêng và của US nói chung đến với nền công nghiệp phần mềm trên thế giới như thế nào.
4. Chạy quảng cáo
Một trong những cách để quảng bá, đưa pet project đến tay người dùng hiệu quả nhất, nhanh chóng nhất chính là chạy quảng cáo. Không phải chịu sự ràng buộc bởi bất kì quy định nào, không phải nhìn sắc mặt của ông mod, bà admin nào, mình hoàn toàn tự do quyết định “what, when, where” đối với việc quảng bá con pet yêu dấu của mình. Bằng cách sử dụng các dịch vụ quảng cáo như Google Ads, Facebook Ads, Bing Ads… các bạn sẽ làm chủ được hình thức quảng cáo (what), khi nào cho phép quảng cáo (when), và quảng cáo ở những nơi nào (where). Và hiển nhiên, để đổi lấy sự tự do, thoải mái đó thì bạn sẽ phải bỏ ra từ vài chục đến vài trăm $$$ để thanh toán chi phí cho những dịch vụ đó. Nghe có vẻ đây là một cách quá xa xỉ và tốn kém đối với một con pet vô dụng của mình. Hẳn là vậy, tuy nhiên, đôi khi bạn tin vào những tiềm năng đang ẩn náu đâu đó trong cái pet project của mình mà ngay cả chính bản thân mình cũng không nhận ra, muốn được thử vận may, hoặc đơn giản chỉ để vọc vạch cách thức hoạt động của các dịch vụ quảng cáo thì hãy mạnh dạn mà “đầu tư” một ít vào đó, biết đâu… 🤭
Biết điểm dừng
Như lời thông thái truyền dạy lại từ ông bà xưa: Cái gì quá cũng không tốt. Việc làm pet project mang lại nhiều lợi ích to lớn thật, nhiều kết quả hấp dẫn thật, nhưng việc quá say mê, tiêu tốn quá nhiều thời gian, tâm trí vào nó là hoàn toàn không tốt, thậm chí các mặt hại còn đè bẹp những mặt lợi. Dựa theo trải nghiệm và đánh giá của bản thân mình thì:
- Không nên dành quá nhiều thời gian cho pet project nếu bạn đã có một ngày dài làm việc cũng như đừng tiêu luôn cả những ngày cuối tuần quý báu để tiếp tục ngồi bên cái máy tính của mình. Thay vào đó hãy dành ít thời gian ra cho bản thân: tập thể dục, chạy bộ, rèn luyện sức khoẻ…, cho gia đình và bạn bè: họp mặt, trò chuyện, tán dóc, cafe, nhậu nhẹt 🍻… tìm kiếm những sở thích khác như chơi game, đọc sách, xem phim, đi du lịch…
- Không để ảnh hưởng đến công việc chính. Đôi khi được làm những điều mình thích, không chịu bất kì sức ép, ràng buộc nào dễ lôi kéo con người ta sa ngã. Nếu bạn không nghĩ cái pet project của mình có tương lai, có tiềm năng trở thành startup, mang đến cho mình mức thu nhập khủng hơn so với việc bán sức lao động thì đừng nên dại dột mà để nó ảnh hưởng đến công việc ổn định hiện tại.
- Không nên vì đồng tiền mà đầu tư thời gian, trí óc vào những project mang thiên hướng suy đồi đạo đức như ứng dụng cá cược, cờ bạc, các sản phẩm vi phạm bản quyền, sở hữu trí tuệ có chủ đích, chúng ta sẽ dính đến các vấn đề về pháp luật rắc rối và phức tạp.
Không chỉ riêng việc ham mê pet project quá mức, mà việc quá cuồng bất cứ một thứ gì đó nói chung đều có thể đem lại những tác hại tiêu cực cho bản thân, nên các bạn hãy luôn cân nhắc, tập cho mình cái nhìn đa chiều về mọi mặt trong cuộc sống và quan trọng nhất là sự cân bằng.
Kết
Bài chia sẻ cũng đã khá dài, hi vọng qua những chia sẻ trên, từ chính kinh nghiệm của bản thân mình đã phần nào giúp cho các bạn thấy được những lợi ích thực tế từ pet project, có thêm động lực để bắt tay vào làm một cái gì đó, cho ra đời một phát minh vĩ đại nào đó, hoặc đơn giản chỉ để học được một điều gì đó. Và hiển nhiên, mọi chia sẻ trên đều đến từ một phía, như đã nhắc nhiều lần là hoàn toàn dựa trên kinh nghiệm của cá nhân mình, có thể nhiều bạn thấy chẳng có gì to tát, có những điểm chưa đúng hoặc có phần vớ va vớ vẩn, mình rất hoan nghênh mọi ý kiến đóng góp, chia sẻ hay gạch đá mà các bạn để lại, những cái đó sẽ giúp mình mở mang và hoàn thiện hơn 🙂 Cảm ơn các bạn đã đón đọc.
Bonus vài pet project khác mà mình đã làm được cho tới thời điểm này (ngoài 2 cái Windows 7 Simulation và 7.css mình có nhắc đến trong bài), dành này cho các bạn có hứng thú:
- Winport – trang portfolio cá nhân được mình tự thiết kế và xây dựng dựa trên giao diện Windows (fan cứng Windows là đây 🥇). Stack: ReactJS + Router + Sass (v1), TS + NextJS + Theme UI + Framer Motion (v2).
- DEV-stats – một REST service giúp tạo và hiển thị dữ liệu thống kê cá nhân từ trang DEV.to dưới dạng ảnh SVG. Stack: ExpressJS + QuickChart.
- SPC – một browser extension be bé giúp chèn các ký tự đặc biệt. Stack: Rollup + Svelte + Material UI + webextension-polyfill.
- express-code – Carbon version cùi bắp, giúp chụp và share code dưới dạng ảnh. Stack: Svelte + Bulma + CodeMirror + DOM-to-Image.
- Fandom Utils – một browser extension giúp tổng hợp và vận hành các tool tiện ích hoạt động trên Fandom. Stack: Rollup + Svelte + webextension-polyfill.
Nguồn: viblo.asia