56 điểm bởi kciter1 2023-08-16 | 10 bình luận | Chia sẻ qua WhatsApp

Phần mềm tồn tại để giải quyết một vấn đề nào đó. Vì vậy, lập trình viên cần hiểu vấn đề, thiết kế phù hợp với nó rồi triển khai. Trong quá trình hiểu vấn đề và thiết kế, tư duy trừu tượng và tư duy cấu trúc là những vũ khí rất mạnh đối với lập trình viên.

Thông thường, tư duy trừu tượng và tư duy cấu trúc hay được giải thích theo cách khó hiểu hoặc mơ hồ. Nhưng rõ ràng có những phương pháp luận cụ thể để thực hiện kiểu tư duy này. Bài trình bày này giới thiệu các cách cụ thể để lập trình viên tư duy một cách trừu tượng và có cấu trúc, cũng như cách dùng kiểu tư duy đó để thiết kế phần mềm như mô hình hóa domain, refactoring và kiến trúc.

  • Công việc của lập trình viên là tạo ra chương trình
  • Lý do tạo ra chương trình là để giải quyết một vấn đề cụ thể, và lý do giải quyết vấn đề là vì mục tiêu kinh doanh
  • Khi tạo chương trình, quá trình gồm bốn giai đoạn
    • Hiểu / phân tích -> thiết kế -> triển khai -> phản hồi
  • Lập trình viên càng trở thành senior thì càng không chỉ viết code mà còn tham gia vào toàn bộ các giai đoạn này
  • Senior giải quyết vấn đề nhanh dựa trên trực giác hình thành từ kinh nghiệm
  • Nhưng trực giác có thể nguy hiểm. Vì vậy, việc học phương pháp luận là quan trọng
  • Tư duy trừu tượng và tư duy cấu trúc là nền tảng của những phương pháp luận đó
  • Trừu tượng hóa là việc rút ra những điểm chung hoặc những gì mình quan tâm từ các yếu tố
  • Vì thế, có thể xem trừu tượng hóa là đơn giản hóa sự vật rồi diễn giải lại nó
  • Có thể đơn giản hóa và diễn giải lại thông qua tư duy quy giản theo thành tố
  • Không chỉ yếu tố mà cả hành vi cũng có thể được trừu tượng hóa
  • Trừu tượng hóa có các tầng bậc.
    • Cần xác định mức độ trừu tượng phù hợp.
    • Trừu tượng hóa quá mức là không tốt vì sẽ không còn biết thực thể là gì.
  • Tư duy cấu trúc là sắp xếp nội dung sao cho không chồng chéo và không bỏ sót
    • Tương tự framework MECE
  • Điều quan trọng không phải là lúc nào cũng phải sắp xếp hoàn toàn không chồng chéo và không bỏ sót
  • Cấu trúc hóa cũng có các cấp độ giống như trừu tượng hóa. Có thể nhìn từ xa hơn một bước
  • Có những phương pháp cụ thể để tư duy một cách trừu tượng và có cấu trúc
    • Top-down và bottom-up
    • Mô hình
      • Classification
      • Abstraction
      • Generalization
    • Tư duy theo framework
  • Có thể áp dụng tư duy trừu tượng và tư duy cấu trúc vào thiết kế phần mềm
  • Nếu chia lớn giai đoạn triển khai phần mềm thì có thể chia thành 3 phần: mô hình hóa domain, kiến trúc và viết code
  • Mô hình hóa domain có thể trích xuất yêu cầu ở mức trừu tượng và mở rộng dần dần
  • Kiến trúc thể hiện cách thực hiện công việc
    • Làm như thế nào, phân chia như thế nào
  • Kiến trúc tuân theo quy trình yêu cầu -> concept -> triển khai -> phản hồi
  • Có thể từng bước cụ thể hóa các concept kiến trúc trừu tượng
  • Paradigm lập trình là góc nhìn để quan sát các thành phần của phần mềm
  • Logic có thể được nhìn từ ba khía cạnh: Function, Usecase, Aspect
  • Cú pháp đường hóa là cú pháp lập trình đã được trừu tượng hóa
    • Nó cũng có thể trở thành con dao hai lưỡi
  • Có thể nhìn refactoring từ 6 góc độ: paradigm, kích thước code, quyền sở hữu, mức độ trùng lặp, khả năng chỉnh sửa và dependency
  • Refactoring có ba phương pháp: trừu tượng hóa, cấu trúc hóa, khái quát hóa
  • Để rèn luyện năng lực tư duy trừu tượng và cấu trúc, nên trải nghiệm đa dạng
  • Việc sơ đồ hóa sẽ giúp ích rất nhiều
  • Trực giác là tư duy mang tính kinh nghiệm chủ nghĩa. Nó có thể tiết kiệm thời gian nhưng cũng có thể nguy hiểm
  • Pattern giúp ích trong việc rèn luyện tư duy trừu tượng
  • Tư duy trừu tượng và cấu trúc không phải lúc nào cũng là chìa khóa vạn năng

10 bình luận

 
gguimoon 2023-08-18

Cảm ơn vì đã chia sẻ tài liệu thuyết trình và phần tóm tắt nội dung.

 
bbulbum 2023-08-17

Nhìn ID thì đúng là chính diễn giả rồi! Tôi đã không tham dự được vì trượt bốc thăm Infocon,, cảm ơn bạn đã chia sẻ tài liệu thuyết trình :)

 
kciter1 2023-08-17

Cảm ơn bạn. :D Mong rằng tài liệu của tôi sẽ hữu ích!

 
kuroneko 2023-08-17

Cảm ơn bạn vì phần tóm tắt chi tiết.

 
kciter1 2023-08-17

Việc tóm tắt mất nhiều thời gian hơn mình tưởng ^^;; Cảm ơn mọi người đã đọc!

 
rlwnd1104 2023-08-17

Cảm ơn vì bài viết hay và phần tóm tắt~

 
kciter1 2023-08-17

Cảm ơn bạn đã đánh giá tốt :D

 
holyachon 2023-08-17

Tôi đọc rất hay!

Cần xác định mức độ trừu tượng hóa phù hợp.
-> Ở đây có một lỗi chính tả :)

 
kciter1 2023-08-17

Cảm ơn bạn đã xác nhận. :) Nhưng có vẻ như sau khi đăng bài một lần thì không thể chỉnh sửa được nữa huhu

 
holyachon 2023-08-17

À, hóa ra là tôi đã không biết. Cảm ơn bạn đã xác nhận!