Dạo gần đây, sau khi thất bại ở vị trí CEO của 1 doanh nghiệp công nghệ nhỏ, tôi quyết định quay trở lại với chuyên môn - về với ngành nghề mà tôi đã mài đũng quần 4 năm tại trường Đại học, cũng như những năm tháng đầu tiên sau khi ra trường. Nhưng ở 1 vị trí cao hơn, chuyên môn hơn - đó là vị trí Solution Architect (Kiến trúc sư giải pháp phần mềm).
Vì đã nhiều năm xa rời chuyên môn (ít nhất 3 năm gần đây), nên tôi cũng đã phải học lại rất nhiều để có thể bắt đầu được công việc.
Ở bước chuẩn bị này, tôi nghĩ là cần ôn lại các kiến thức cơ bản nền tảng ngành phần mềm
Vậy nên tôi quyết định theo học Specialization này của Coursera - (Specialization là kiểu dạng 1 chuỗi nhiều khóa học trên Coursera phục vụ 1 kỹ năng cụ thể nào đó): Software Design and Architecture Specialization - chuỗi 4 khóa học của University of Alberta
Trong Specialization này:
- Khóa 1 là về Object-Oriented Design (Thiết kế hướng đối tượng)
- Khóa 2 là về Design Patterns (Các mẫu thiết kế)
- Khóa 3 là về Software Architecture (Kiến trúc phần mềm)
- Khóa 4 là về Service-Oriented Architecture (Kiến trúc hướng dịch vụ)
Object-Oriented Design (Thiết kế hướng đối tượng)
Khóa học này đưa những người mới bắt đầu học Java lên một cấp độ cao hơn bằng cách giới thiệu về phân tích và thiết kế hướng đối tượng.
Bạn sẽ khám phá cách tạo ra phần mềm mang tính mô-đun, linh hoạt và có thể tái sử dụng, thông qua việc áp dụng các nguyên tắc và hướng dẫn thiết kế hướng đối tượng.
Bên cạnh đó, bạn cũng sẽ học cách truyền đạt các thiết kế này bằng ký hiệu trực quan được gọi là Ngôn ngữ Mô hình hóa Thống nhất (UML).
Trong Dự án Capstone, bạn sẽ được thử thách vận dụng kiến thức về thiết kế hướng đối tượng bằng cách phát triển và ghi chép tài liệu cho mã nguồn Java của một ứng dụng Android, kèm theo tài liệu UML tương ứng.
Sau khi hoàn thành khóa học, bạn sẽ có khả năng:
- Áp dụng kỹ thuật Class Responsibility Collaborator (CRC) để phân tích và thiết kế mô hình hướng đối tượng cho một bài toán.
- Giải thích và áp dụng các nguyên tắc mô hình hóa hướng đối tượng và mục đích của chúng (ví dụ: trừu tượng hóa, đóng gói, phân rã, khái quát hóa).
- Giải thích và áp dụng các loại kế thừa khác nhau.
- Giải thích sự khác biệt giữa liên kết (association), kết tập (aggregation) và thành phần (composition).
- Biểu diễn các mô hình hướng đối tượng dưới dạng biểu đồ lớp UML (Unified Modeling Language).
- Chuyển đổi giữa biểu đồ lớp UML và mã Java tương đương.
- Áp dụng các hướng dẫn thiết kế về tính mô-đun, phân tách mối quan tâm, ẩn thông tin và tính toàn vẹn khái niệm để tạo ra một thiết kế linh hoạt, có thể tái sử dụng và dễ bảo trì.
- Giải thích sự đánh đổi giữa tính gắn kết (cohesion) và độ phụ thuộc (coupling).
Design Patterns (Các mẫu thiết kế)
Khóa học này mở rộng kiến thức về phân tích và thiết kế hướng đối tượng bằng cách kết hợp các mẫu thiết kế (design patterns) để xây dựng các ứng dụng có tính tương tác.
Thông qua việc tìm hiểu các mẫu thiết kế đã được công nhận và ứng dụng rộng rãi, bạn sẽ xây dựng được nền tảng vững chắc cho việc phát triển các ứng dụng phần mềm phức tạp hơn.
Cuối cùng, bạn sẽ học cách nhận diện các thiết kế phần mềm có vấn đề bằng cách tham chiếu đến danh mục các “mùi mã nguồn” (code smells) — những dấu hiệu cho thấy thiết kế hoặc mã của bạn đang gặp lỗi tiềm ẩn về cấu trúc.
Trong Dự án Capstone, bạn sẽ được thử thách thiết kế lại một ứng dụng Android dựa trên Java hiện có để triển khai kết hợp nhiều mẫu thiết kế khác nhau.
Bạn cũng sẽ phân tích và đánh giá một mã nguồn Java được cung cấp nhằm phát hiện và xử lý các “code smell”.
Sau khi hoàn thành khóa học, bạn sẽ có khả năng:
- Trình bày cách sử dụng các mẫu thiết kế (design patterns) để giải quyết các vấn đề trong thiết kế giao diện người dùng (UI).
- Xác định mẫu thiết kế phù hợp nhất để giải quyết một vấn đề thiết kế ứng dụng cụ thể.
- Áp dụng các nguyên tắc thiết kế như: Mở/Đóng (Open-Closed Principle), Đảo ngược phụ thuộc (Dependency Inversion), và Ít kiến thức nhất (Principle of Least Knowledge).
- Phân tích, nhận diện và tái cấu trúc (refactor) mã nguồn để loại bỏ các mẫu phản thiết kế (anti-patterns).
- Áp dụng mô hình kiến trúc Model-View-Controller (MVC) vào thiết kế phần mềm.
Software Architecture (Kiến trúc phần mềm)
Cách mà các thành phần phần mềm — như chương trình con (subroutine), lớp (class), hàm (function), v.v. — được sắp xếp và tương tác với nhau được gọi là kiến trúc (architecture).
Trong khóa học này, bạn sẽ nghiên cứu cách biểu diễn các kiến trúc phần mềm, cả trong UML và các công cụ trực quan khác.
Chúng tôi sẽ giới thiệu những kiểu kiến trúc phổ biến nhất, cùng với đặc điểm, ưu điểm, nhược điểm và các đánh đổi (tradeoffs) của chúng.
Bạn cũng sẽ tìm hiểu cách đánh giá kiến trúc phần mềm, điều gì tạo nên một kiến trúc tốt, và cách cải thiện kiến trúc hiện có.
Ngoài ra, khóa học còn thảo luận mối liên hệ giữa kiến trúc và quy trình phát triển phần mềm — cách mà các quyết định về kiến trúc ảnh hưởng đến tiến trình phát triển.
Trong Dự án Capstone, bạn sẽ tài liệu hóa một ứng dụng Android viết bằng Java bằng các sơ đồ UML, đồng thời phân tích và đánh giá kiến trúc của ứng dụng bằng Phương pháp Phân tích Đánh đổi Kiến trúc (Architecture Tradeoff Analysis Method – ATAM).
Sau khi hoàn thành khóa học này, bạn sẽ có thể:
- So sánh và đối chiếu các thành phần, kết nối, giao thức, cấu trúc, ràng buộc, đánh đổi và biến thể giữa các kiểu kiến trúc phần mềm khác nhau được sử dụng trong thiết kế ứng dụng và hệ thống (ví dụ: main program và subroutine, hướng đối tượng, interpreters, pipes and filters, database-centric, event-based).
- Mô tả các đặc tính của kiến trúc phân lớp (layered) và kiến trúc đa tầng (n-tier).
- Tạo các sơ đồ UML dạng package, component và deployment để biểu diễn cấu trúc kiến trúc của hệ thống.
- Giải thích hành vi của hệ thống bằng cách sử dụng sơ đồ hoạt động UML (UML activity diagrams).
- Tài liệu hóa một hệ thống đa ứng dụng sử dụng kiến trúc phân lớp (layered architecture).
Service-Oriented Architecture (Kiến trúc hướng dịch vụ)
Dựa trên kiến thức về các phong cách kiến trúc phần mềm (architectural styles), bạn sẽ xem xét và đánh giá các kiến trúc dành cho ứng dụng web, sau đó tìm hiểu những kiến thức cơ bản về Kiến trúc Hướng Dịch vụ (Service-Oriented Architecture – SOA) theo hai hướng tiếp cận chính:
- Web Services (WS*)
- Kiến trúc REST (Representational State Transfer).
Trong Dự án Capstone, bạn sẽ kết nối một ứng dụng Android viết bằng Java với Elasticsearch — một dịch vụ web sử dụng giao diện lập trình ứng dụng (API) theo kiến trúc REST.
Sau khi hoàn thành khóa học này, bạn sẽ có thể:
- Mô tả kiến trúc SOA (Service-Oriented Architecture) và cách cấu trúc các hệ thống web dựa trên mô hình dịch vụ.
- Giải thích các dịch vụ WS* (bao gồm SOAP over HTTP, WSDL, UDDI, BPEL).
- Áp dụng kiến trúc REST, sử dụng các khái niệm như JSON over HTTP và URI.
- Nhận diện các nguyên tắc thiết kế REST (REST design principles).
- Xây dựng một hệ thống sử dụng các giao diện REST (REST interfaces).
- Áp dụng kiến trúc microservice (microservice architecture) trong phát triển hệ thống.
Tôi đã hoàn thành cả 4 khóa trên rồi, phew.
Trên hành trình đến với vị trí SA - bước chuẩn bị