Giới thiệu
Là một kỹ sư phần mềm, có thể vào một thời điểm nào đó, bạn sẽ cảm thấy chán công việc vì những thứ nhàm chán lặp lại mỗi ngày. Bạn cảm thấy rằng mình không còn được học hỏi gì nhiều từ môi trường làm việc, từ sản phẩm đang xây dựng ở công ty, từ đồng nghiệp, từ sếp,.. Có thể, bạn đang thiếu đi không gian học hỏi cho chính mình.
Nếu vẫn còn khao khát học hỏi và nâng cao kỹ năng nghề nghiệp thì bạn có thể chọn giải pháp thực hiện một dự án thú vị nào đó bên cạnh công việc. Đó nên là một dự án thử thách so với năng lực hiện tại của bạn.
Hãy chọn một dự án mà bạn yêu thích. Như Paul Graham, một chuyên gia – nhà khởi nghiệp nổi tiếng từng viết “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 vọc vạch, chắc chắn bạn sẽ làm điều đó trên dự án của riêng mình”.
Hãy bắt tay vào thực hiện ngay nhé! Dưới đây là một số gợi ý mà bạn có thể tham khảo. Thoạt nhìn, những ý tưởng này có thể quen thuộc. Nhưng nếu bạn nghiêm túc tìm hiểu, chắc chắn bạn sẽ tìm thấy nhiều kiến thức thú vị ẩn sau những thứ “quen thuộc” như thế!
Dự án 1 – Xây dựng web framework
Web framework là gì?
Web framework là bộ khung cơ bản để chúng ta có thể xây dựng nên các ứng dụng web hiệu quả hơn. Một framework có thể chứa bên trong nhiều thư viện và những cơ chế cần thiết cho ứng dụng web. Ví dụ: xử lý dữ liệu được trích xuất từ HTTP request, cơ chế điều hướng từ đường dẫn đến mã xử lý cụ thể, cơ chế kết nối và làm việc với những cơ sở dữ liệu thông dụng, cách cấu trúc và bố trí mã nguồn sao cho dễ hiểu và dễ bổ sung tính năng mới, cơ chế logging phục vụ debug…
Các lập trình viên ứng dụng web thường dựa vào framework hiện đại nào đó để họ có thể tập trung nhiều hơn vào việc xây dựng tính năng người dùng, thay vì phải phát triển lại những tính năng kỹ thuật lặp đi lặp lại của các ứng dụng.
Việc xây dựng một web framework sẽ giúp bạn có cái nhìn tổng quan về kiến trúc của một ứng dụng web. Bạn sẽ học được nhiều kiến thức về xử lý các yêu cầu HTTP và phản hồi lại kết quả cho trình duyệt, thiết kế thư viện logging, xử lý lỗi, học các design pattern, kết nối cơ sở dữ liệu, chuyển đổi dữ liệu…
Làm thế nào để thực hiện dự án?
Hãy bắt đầu với việc liệt kê những tính năng được hỗ trợ của một framework bạn đang dùng hoặc phổ biến trong một ngôn ngữ lập trình nào đó. Từ đó, bạn sẽ có cái nhìn tổng quát về những gì cần có trong framework. Bạn có thể dựa vào trải nghiệm của mình về các framework trước đây để liệt kê ra được những gì quan trọng nhất. Đó sẽ là bản thiết kế cơ bản và thú vị cho framework của riêng bạn.
Rất nhiều lập trình viên trên thế giới thích tự tạo một framework cho riêng mình để học hỏi; nếu may mắn, framework đó có thể là công cụ hỗ trợ đắc lực cho công việc của họ và lan tỏa đến các cộng đồng xung quanh.
Chỉ với một vài từ khóa theo mẫu “how to build a web framework in {{ngôn ngữ lập trình bạn thích}}”, bạn sẽ tìm được hàng trăm bài viết về chủ đề này.
Dự án 2 – Xây dựng web server
Web server là gì?
Web Server là một thành phần cơ bản trong mọi hệ thống liên quan tới ứng dụng web. Chắc hẳn những cái tên như Apache, Nginx,.. không quá xa lạ với các bạn lập trình ứng dụng web. Có thể bạn đã làm việc qua hàng chục dự án web khác nhau nhưng sẽ rất hiếm có dịp để bạn nhúng tay vào mã nguồn của thành phần cốt lõi đó.
Đây chắc chắn là một dự án hay ho vì qua đó bạn có thể học được rất nhiều về lập trình. Bạn sẽ phải học về giao thức truyền tải, lập trình mạng, phân luồng và rất nhiều kỹ thuật khác để có thể tự phát triển được một web server. Bạn sẽ hiểu được các thức mà web server nhận request từ trình duyệt và chuyển hướng tới ứng dụng của bạn để thực hiện những nghiệp vụ phức tạp bên trong.
Làm thế nào để thực hiện dự án?
Hãy bắt đầu bằng việc tìm hiểu TCP – một giao thức cơ bản mà đa phần các ứng dụng giao tiếp qua mạng đều sử dụng. Tiếp theo là giao thức HTTP. Giao thức này dựa trên TCP, được tạo ra để phục vụ cho việc truyền tải nội dung web. Bạn có thể xây dựng một web server đơn giản chỉ xử lý các yêu cầu HTTP qua hướng dẫn trong bài viết này “HTTP Server: Everything you need to know to Build a simple HTTP server from scratch”.
Một ứng dụng web hiện đại thường được xây dựng dựa vào một ngôn ngữ lập trình hiện đại cùng với một framework “xịn sò” nào đó. Nếu bạn đang xây dựng các ứng dụng web bằng Java thì có thể đã từng nghe qua Spring, Struts,… Nếu bạn sử dụng Python thì có thể biết tới Django, Flask, Pyramid,…
Để web server của bạn có thể chuyển các yêu cầu HTTP này sang ứng dụng web dựa trên các framework hiện đại thì chúng ta cần tìm hiểu cơ chế giao tiếp trên các nền tảng cụ thể. Cụ thể hơn, nếu bạn muốn xây dựng web server cho các ứng dụng được viết bằng Java thì bạn cần tìm hiểu đặc tả Servlet (Servlet API). Nếu muốn làm việc với Python thì áp dụng một cơ chế khá phổ biến là Web Server Gateway Interface (WSGI).
Tài nguyên:
- https://medium.com/from-the-scratch/http-server-what-do-you-need-to-know-to-build-a-simple-http-server-from-scratch-d1ef8945e4fa
- https://javarevisited.blogspot.com/2015/06/how-to-create-http-server-in-java-serversocket-example.html
Dự án 3 – Xây dựng chương trình quản lý cơ sở dữ liệu đơn giản
Cơ sở dữ liệu là gì?
Cơ sở dữ liệu (CSDL) là một hình thức lưu trữ dữ liệu phổ biến trong thế giới lập trình ứng dụng. Trình quản trị CSDL là dạng phần mềm phía máy chủ, cho phép các ứng dụng hoặc người dùng kết nối và thực hiện các thao tác với dữ liệu.
Là một lập trình viên, chắc chắn bạn đã từng nghe qua những cái tên như MySQL, MS SQL Server, Oracle SQL Server,… Đây là những hệ quản trị cơ sở dữ liệu nổi tiếng và được sử dụng phổ biến trên thế giới.
Tuy nhiên, không nhiều lập trình viên thực sự hiểu cơ sở dữ liệu làm việc như thế nào. Ví dụ:
- Dữ liệu được lưu với định dạng gì?
- Vì sao chỉ có duy nhất một khóa chính cho mỗi bảng?
- Index được định dạng như thế nào?
- …và nhiều câu hỏi sâu về bản chất khác nữa.
Việc xây dựng một chương trình quản trị cơ sở dữ liệu đơn giản sẽ giúp bạn học được cách thức lưu trữ dữ liệu, cơ chế lưu trữ index và khoá chính trong bảng, phân tích cú pháp ngôn ngữ truy vấn (SQL) thành những thao tác xử lý dữ liệu cụ thể, và nhiều kiến thức nền tảng khác.
Làm thế nào để thực hiện dự án?
Nếu chưa thành thạo về SQL, bạn có thể tìm hiểu nhanh qua một khoá học ngắn trên Internet, hoặc trên trang web W3Schools SQL. Tại đây, bạn sẽ được ôn tập và tìm hiểu những câu lệnh SQL cơ bản để có thể thực hiện được dự án.
Sau khi nắm được SQL cơ bản, bạn có thể tham khảo tài liệu tại đây: Let’s Build a Simple Database để được hướng dẫn xây dựng những tính năng cơ bản cho trình quản lý cơ sở dữ liệu.
Dự án 4 – Xây dựng hệ thống Linux từ mã nguồn
Hệ điều hành nhân Linux là gì?
Linux là một nhân (kernel) hệ điều hành mã nguồn mở được phát triển từ những năm 1990. Khởi nguồn là một dự án “làm cho vui” của “Linus Torvald”. Sau đó, nó đã phát triển thành một thành phần không thể thiếu của dòng hệ điều hành nguồn mở tương-tự-Unix.
Đây là một trong số những dự án rất nhiều kỹ sư trên thế giới yêu thích. Việc tự xây dựng lại một hệ điều hành với nhân Linux sẽ giúp bạn hiểu rõ các thành phần cấu thành nên một hệ điều hành. Đây là là cơ hội để bạn tìm hiểu cách hệ thống Linux hoạt động từ trong ra ngoài, cách mọi thứ hoạt động cùng nhau và phụ thuộc vào nhau.
Hơn thế nữa, điều hay nhất mà trải nghiệm học tập này có thể mang lại là khả năng tùy chỉnh hệ thống Linux để phù hợp với nhu cầu riêng của bạn. Nó cho phép bạn có nhiều quyền kiểm soát hệ thống hơn mà không cần dựa vào các bản phân phối có sẵn. Bạn có thể tạo được các hệ thống Linux rất nhỏ gọn phục vụ những mục đích riêng.
Làm thế nào để thực hiện dự án?
Nếu bạn chưa từ sử dụng một hệ điều hành nhân Linux nào thì hãy cài một bản phân phối (hay còn gọi là phiên bản) phổ biến như Ubuntu, Fedora/Red Hat,… Sau khi hiểu về cấu trúc hệ thống của Linux, bạn có thể hoàn toàn tự xây dựng nên một bản hệ điều hành của riêng bạn. Có rất nhiều hướng dẫn trên Internet về chủ đề này. Một trong số đó là trang linuxfromscratch.org.
Dự án 5 – Xây dựng một công cụ kiểm thử tự động
Công cụ kiểm thử tự động là gì?
Công cụ kiểm thử tự động là những phần mềm giúp thực hiện các thao tác người dùng trên giao diện ứng dụng một cách tự động. Các nhóm xây dựng phần mềm thường áp dụng những công cụ này để nâng cao năng suất trong việc kiểm thử giao diện và tìm lỗi chức năng của ứng dụng.
Trên thực tế, có rất nhiều công nghệ xây dựng ứng dụng như web, di động, nhúng,… Mỗi loại công nghệ sẽ có những giải pháp khác nhau.
Đây là một dự án khá phức tạp. Bạn sẽ phải đọc khá nhiều tài liệu API về các nền tảng, tìm cách nhúng mã vào trình duyệt hoặc các ứng dụng đích để đọc thông tin về những thành phần đang được hiển thị trên giao diện. Thế nhưng, bạn sẽ học được nhiều về cách thức hệ điều hành xây dựng và quản lý giao diện ứng dụng, cách thức trình duyệt làm việc với mã HTML của trang web,…
Làm thế nào để thực hiện dự án?
Nếu bạn muốn xây dựng công cụ tự động cho ứng dụng web, bạn có thể tìm hiểu cơ chế thực thi của công cụ Selenium (một framework tự động hoá và mã nguồn mở cho web).
Nếu bạn xây dựng một ứng dụng desktop trên nền tảng .Net của Microsoft, bạn có thể tìm hiểu qua Microsoft UI Automation, một framework của Microsoft giúp xây dựng các hệ thống hỗ trợ tương tác với giao diện ứng dụng.
Tổng kết
Trên đây là 5 gợi ý những dự án mà các bạn có thể thực hiện để học thêm những điều thú vị, nâng cao kiến thức và kỹ năng cho sự nghiệp lập trình. Thế giới bên ngoài kia vẫn còn nhiều dự án thú vị khác nữa. Không bao giờ có giới hạn cho việc thử nghiệm và học hỏi. Miễn sao điều đó giúp xây dựng những kỹ năng có giá trị cho nghề nghiệp của bạn. Một khi đã chọn một ý tưởng, hãy thực hiện nó với lòng đam mê và sự nghiêm túc.
Việc duy trì thực hiện dự án liên tục trong một thời gian dài có thể là thử thách đối với nhiều người. Thông thường, chúng ta sẽ không thấy được thành quả ngay lập tức. Một thủ thuật để vượt qua được vấn đề này là hãy bắt đầu dự án với một thiết kế đơn giản. Dành một khung thời gian nhất định trong ngày để bổ sung tính năng. Bạn nên lên lịch tái cấu trúc sau một khoản thời gian nhất định. Và quan trọng là, đừng bao giờ ngại thử nghiệm những cái mới.
Chúc bạn sẽ luôn học được những điều mới mẻ!
Theo Đặng Huy Hòa