Khi nào bạn bắt đầu có thể học về thiết kế?


Có một số bạn nhắn tin hỏi về công việc thiết kế, cũng như cần chuẩn bị gì để học, trong bài này tôi sẽ gom chung một số câu hỏi thường gặp nhất dành cho các bạn quan tâm.

👉 Khi nào tôi có thể bắt đầu học về phân tích thiết kế: Để bắt đầu học, bạn cần tương đối thành thạo về lập trình, đặc biệt lập trình hướng đối tượng (OOP). Hãy nhớ OOP là một cách tư duy về tổ chức chương trình, chứ không chỉ là một phương thức lập trình. Bạn thậm chí có thể bắt đầu học về phân tích thiết kế từ năm 1, năm 2 đại học, tùy vào khả năng của bạn lúc đó đến đâu.

👉 Công việc của nhà thiết kế phần mềm là gì? Một nhà thiết kế thông thường vẫn là một developer, hàng ngày anh ta vẫn phải code, test, debug… Có lẽ hiếm có nhà thiết kế nào chỉ làm mỗi công việc thiết kế, vì 2 lẽ:- Công việc thiết kế thường không chiếm nhiều thời gian so với các phần việc khác, vẽ ra một component, cùng các class bên trong nhanh hơn nhiều so với code/test/debug/release/doc nó.- Các phần việc còn lại (code/test/debug/release/doc) cũng thực sự phức tạp, thiếu hiểu biết về chúng sẽ dẫn đến việc thiết kế ra các mô hình không thực tế, cũng như không thấy được những khó khăn có thể gặp phải. Vậy nên bạn vẫn phải làm công việc của một developer để cập nhật các kỹ năng trên. Thật sự muốn trở thành một nhà thiết kế giỏi, bạn cũng phải là một nhà phát triển giỏi, nhưng không nhất thiết phải chờ đến khi lập trình giỏi thì mới bắt đầu học thiết kế – bạn hoàn toàn có thể học song song cả hai.

👉 Thế nào là một thiết kế tốt? Một thiết kế tốt là một thiết kế cho phép duy trì (maintaining, bao gồm các hoạt động như sửa lỗi, thêm chức năng mới, thay đổi mô hình triển khai…) một cách dễ dàng nhất, dẫn tới chi phí duy trì thấp nhất.Đó là yêu cầu quan trọng nhất, và tất cả những gì bạn làm đều hướng đến mục tiêu đó, một thiết kế tốt phải là một thiết kế hướng tới tương lai, những gì bạn thấy vô dụng có thể lúc nào đó sẽ trở nên cần thiết.

👉 Vậy kiến trúc sư phần mềm là gì? Thực chất kiến trúc sư phần mềm cũng là một nhà thiết kế, bởi công việc của họ hoàn toàn giống nhau. Công việc thiết kế có thể chia ra làm nhiều mức: lớp, module, framework… một KTS sẽ tập trung vào các thiết kế ở mức cao. Có lẽ chức danh này chỉ áp dụng vào các dự án rất lớn, với nhiều designer, còn hầu hết mọi người sẽ cũng tham gia từ trên xuống dưới xuyên suốt quá trình xây dựng thiết kế.

👉 Là một developer, tôi có cần biết về thiết kế? Có, đơn giản vì lúc nào đó bạn sẽ cần thiết kế ra các lớp ngay trong dự án đang làm.Ngay cả nếu đang là một coder thực sự, tức chỉ code theo những thứ đã được thiết kế sẵn, thì một lúc nào đó, bạn cũng sẽ nhảy việc, và chuẩn bị sẵn những kỹ năng cần thiết cho tương lại thì không bao giờ thừa cả.

👉 Làm thế nào để học thiết kế?

– Hãy học code cho thật thành thạo.

– Dùng giấy và bút: tắt máy tính đi, sử dụng bút chì và giấy để vẽ các sơ đồ, bạn sẽ không bị mất tập trung vào việc tìm xem tool nào để vẽ cái gì, và có thể thoải mái phân tích, chỉnh sửa các sơ đồ.

– Đọc sách: có rất nhiều sách và tài liệu về chủ đề này: Object-Oriented Analysis and Design with Applications, https://docs.oracle.com/cd/E19263-01/817-5764/architecture.html, https://dotnet.microsoft.com/en-us/learn/dotnet/architecture-guides, Clean Architecture (uncle Bob – cuốn này nên đọc sau để hệ thống lại kiến thức), Design Patterns: Elements of Reusable Object-Oriented Software

– Tham khảo các framework, ứng dụng nguồn mở, đây là nguồn kiến thức vô tận và cực kỳ hữu ích.

– Tập thói quen đánh giá thiết kế các mã nguồn mà bạn tiếp cận được, đặc biệt là các phần mềm mà bạn đang phát triển, hãy tìm hiểu xem chúng có những nhược điểm gì, có những vấn đề gì có thể gặp.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s