Dockerize Development với Javascript MERN Stack

Mình đã làm cho bạn admin fanpage confessions sung sướng như thế nào

Tú viết

Tiêu đề xin phép mượn của anh CodeaHolicGuy. emoji-smiley

“Làm sinh viên SE, lúc rảnh rồi làm gì?” - “Tất nhiên là mở máy lên đánh lol rồi code rồi” - Nếu không biết code gì, hãy làm pet project. Pet project ở đây là một dự án ngắn ngắn, nho nhỏ do chúng ta tự nghĩ ra để giải quyết một khó khăn nhất định.

Pet project không cần phải là một app hầm hố, ra đời nhằm tạo nên một cuộc cách mạng. Pet Project tốt chỉ cần giúp giải quyết một công việc cụ thể cho một nhóm đối tượng xác định.

App giải quyết chuyện đăng duyệt confessions

Mình bắt đầu xây dựng pet project FUHCM.com vào khoảng 2 năm trước. Ý tưởng về pet project này chỉ đơn giản là giải quyết cái ức chế của các bạn admin khi xài Google Form mà các để xem và duyệt các tin nhắn confessions hằng ngày:

  • Không có tự động đánh ID (số hashtag), việc đánh và track lại ID khá mệt khi nó quá nhiều
  • Giao diện bảng tính của Google Form không trực quan cho việc duyệt confessions (quá nhiều cột)
  • Khó khăn để clean bảng tính Google Forms
  • Khi có nhiều confession (hàng), sẽ load rất lâu, khó xài trên di động
  • Người dùng không thể tìm và xem lại confessions cũ (search trên facebook cũng được nhưng tương đối khó khăn)
  • Không có thông báo tới admin khi có confession mới mà phải tự mở ra check hằng ngày
  • Không có thông báo tới cho người gửi khi được duyệt (có khi phải lót dép hóng cả ngày emoji-smirk)
  • Không thông báo lí do bị từ chối duyệt tới cho người dùng (méo biết vì sao bị reject, cay vl emoji-smirk)
  • Admin lúc duyệt xong phải copy rồi đánh số, tên ngày, ID rất mất thời gian

Để giải quyết những vấn đề trên, mình chỉ cần làm một cái app CRUD cực đơn giản mà bất cứ sinh viên nào của FPT, chắc là chỉ cần học xong kì 5, pass môn Java Web (PRJ321) của thầy KhánhKT là có thể làm được (lúc mình làm thì cũng chỉ vừa học xong kì 5 thôi emoji-sweat_smile).

admin

Pet Project dạy mình rất nhiều thứ

Thời gian mình làm pet project này là lúc mình đang đi OJT ở FPT Software, lúc đó mình được tham gia vào một dự án sử dụng các modern web stack thời đó là React và Node.js. Do vậy mình áp dụng vào pet project luôn, xài React và Firebase để làm, cực kì nhanh gọn lẹ bản MVP chỉ mất khoảng 2 ngày.

Nhờ làm thêm pet project mà mình đã hiểu hơn về JavaScript cũng như library React (lúc đi học trước đó chỉ được học Java nên không rành viết JS lắm): Học cách tự làm mọi thứ: từ viết code, xài build tool, xài UI theme, và deploy lên hosting, mua tên miền…

approve

Trải qua nhiều tuần sử dụng, những feedback và issue xảy ra cũng giúp mình nhận ra và học được nhiều thứ. Ví dụ như có đợt bị kẻ xấu flood confessions làm hỏng data, overload server, mình đã học cách dùng Recaptcha để anti-flood và validate user. Hay học cách xài service-worker và concept PWA để tạo app trên điện thoại mà không cần code thêm cái app. Hoặc có lúc xài hết dung lượng MySQL miễn phí trên Heroku, phải migrate qua MongoDB để được xài nhiều hơn. emoji-unamused

“Không nên đầu hàng nghịch cảnh, là một người software engineer chân chính chúng ta luôn phải đối diện với vấn đề để giải quyết nó.” - codeaholicguy.com

admincp

Sau này khi mình học thêm một vài ngôn ngữ, hay khái niệm cũng đều apply vào pet project này để thử nghiệm và luyện tập (như Go, Docker hay apply CI/CD bằng Jenkins/TravisCI…). Rảnh rỗi còn ngồi build thêm một số chức năng như cào bài từ feed của trang chủ fpt và một số trang khác, làm một cái real-time radio, trang CMS (ban đầu là dùng contentful, sau đó là tự code) cho các admin đăng/sửa bài viết, hay clone trang change.org cho sinh viên kiến nghị emoji-joy.

change

Một số thành tựu: Từ lúc launch tới giờ, fuhcm.com đã xử lí ~7000 confessions, tăng sự tương tác khi đăng confessions, giúp tăng năng suất và tiết kiệm thời gian lên 500% cho các admin. emoji-sunglasses

ga

Vì sao nên làm pet project

  • Học thứ gì đó mới và cải thiện kiến thức - Còn cơ hội nào tuyệt vời hơn để bạn thử nghiệm và học hỏi một công nghệ mới, một framework mới … bởi vì Side Project không liên quan tới thời gian hay deadline, bạn có thể thoải mái trải nghiệm (đừng try hard quá trước lúc thi final là được emoji-flushed).
  • Xây dựng một sản phẩm sẽ giúp bạn có thêm kinh nghiệm và kỹ năng đáng giá: từ việc lên ý tưởng, lập kế hoạch thực hiện và nhiều nhiều thứ phải làm nữa… Kết quả là bạn sẽ có một sản phẩm thiết thực và giải quyết được vấn đề, ít nhất là với bạn.
  • Tăng lương: Hồ sơ của bạn sẽ đẹp hơn phần nào đó trong mắt các nhà tuyển dụng sau này. emoji-sweat_smile (If you don’t have pet projects, I don’t think I want you)
  • Bạn có thể đem pet project đi khoe để kiếm fame.

Dù bạn đang làm pet project gì, bạn đều sẽ tạo ra giá trị cho bản thân (và người khác).

Thời gian là vàng bạc. Nếu bạn làm ra một thứ gì đó giúp mọi người tiết kiệm thời gian, họ sẽ cảm thấy thoải mái khi trả tiền.

nvim

Lượng người dùng lên xuống theo biến động của dramas

Nên bắt đầu như thế nào

Trích Rework và tư duy build sản phẩm @ The Full Snack

  • Ignore the real world: Chắc hẳn ai cũng từng gặp vấn đề khi trình bày một ý tưởng gì đó thì sẽ bị phán ngay một câu là “ý tưởng này không dùng được đâu”, mà như trong sách là “that would never work in the real world”, và lời khuyên được đưa ra ở đây rất đơn giản: “that world may be real for them, but it doesn’t mean you have to live in it”, dịch ra thì chắc là “thôi kệ mẹ nó, làm tới đi” :))
  • Scratch your own itch: tự gãi chỗ ngứa của chính bạn. Cái này thì rõ ràng rồi, chỉ khi bạn build một sản phẩm để giải quyết vấn đề do chính mình gặp phải, thì bạn mới biết mình cần cái gì và nên làm như thế nào. Nhiều startup hoặc side project được làm ra để giải quyết những vấn đề được đoán mò của người khác, tất nhiên nó sẽ fail sấp mặt ngay. Đơn giản vì bạn gãi mà người ta không đã ngứa, hoặc tệ hơn là càng ngứa thêm =))
  • Start making something và No time is no excuse: Không đủ thời gian nên không làm, thực ra 1 ngày 24 tiếng, thì việc có đủ thời gian hay ko là do cách chúng ta tận dụng thời gian của mình như thế nào thôi, thức đêm thêm 1, 2 tiếng hoặc bớt đi 1, 2 tiếng chơi game, xem phim thì sẽ thừa ra thời gian để viết lách hoặc code thêm project gì đó, học thêm được cái gì đó ngay. Và khi đã có thòi gian rồi thì nên làm ngay đi, đừng có chờ đợi.
  • Quick wins: hoàn tất những mục tiêu nhỏ, để “giữ lửa”. Một trong những yếu tố khiến cho các side project dễ bị drop nhất đó chính là nản. Cái này là bệnh chung, ai cũng rất dễ nản chí khi bị stuck với một vấn đề gì đó quá lâu.

Đọc thêm: RẢNH RỖI KHÔNG BIẾT CODE GÌ, SAO KHÔNG LÀM PET PROJECT? - TÔI ĐI CODE DẠO

Nhân tiện, để tiếp tục làm pet project, mình đang định rebuild toàn bộ app thành một super app tổng hợp để giải quyết các nhu cầu cho FU Student. Bạn sv nào muốn tham gia có thể xem ở đây, hoặc comment ở dưới.