Đầu tiên, tôi nhận ra câu hỏi này có thể hơi dài và mơ hồ và tôi xin lỗi vì điều này. Đây có lẽ là một vấn đề cơ bản với một tên ngắn cho bất kỳ ai "hiểu", nhưng vì tôi thấy mình thiếu về vấn đề này, xin hãy cùng tôi mô tả vấn đề.
Tôi đã làm lập trình theo cách này hay cách khác từ khi tôi khoảng 11 tuổi. Điều này có nghĩa là tôi đã chủ yếu dạy bản thân mình mọi thứ ngay từ đầu. Tôi đã nhận được một nền giáo dục kỹ thuật, nhưng không nghiêm túc về Khoa học Máy tính (tôi đã tốt nghiệp với bằng Kỹ sư Quang tử). Tất nhiên chúng tôi đã có các khóa học lập trình, nhưng đây chủ yếu là những thứ cơ bản đối với tôi và tôi đã không học được nhiều điều mới. Tôi đã tiếp tục giáo dục bản thân trên đường đi vì niềm vui của nó và luôn biết rằng tôi sẽ theo đuổi sự nghiệp lập trình, nhưng tất cả các dự án của tôi đều khá nhỏ vào thời điểm đó. Tôi không gặp khó khăn gì trong việc giữ chúng trong tâm trí và duy trì chúng.
Bây giờ, tôi thấy mình là người dẫn đầu trong một nhóm, nhưng không phải trong môi trường doanh nghiệp - tôi làm việc cho trường đại học phát triển phần mềm khoa học (trong C ++) cho các ứng dụng kỹ thuật. Đột nhiên dự án đang phát triển (tương đối) lớn và tôi gặp khó khăn trong tâm trí của mình xung quanh nó hầu hết thời gian. Tôi đang mất rất nhiều thời gian và công sức cho hai điều chủ yếu là:
- Khi tôi phải quay lại một phần mã mà tôi đã không làm việc trong một thời gian, tôi gặp khó khăn trong việc ghi nhớ cách thức hoạt động của nó. Tôi dành nhiều thời gian để xem xét các tệp tiêu đề cho các lớp có liên quan và đọc các bình luận tôi đặt dọc đường trong các tệp nguồn. Tôi ước có một số dạng "sơ đồ" tôi có thể nhìn thoáng qua và lấy lại hình ảnh dễ dàng hơn;
- Khi tôi giới thiệu các thay đổi, đôi khi tôi nhận ra một nửa rằng những gì tôi đang cố gắng sẽ phá vỡ mọi thứ ở một nơi khác (hoặc tệ hơn, nó chỉ xuất hiện trong thời gian chạy như một sự bất ngờ). Tôi hoàn nguyên và bắt đầu làm nó khác đi, chỉ để phát hiện ra tôi đã bỏ qua ảnh hưởng đối với một số thành phần khác. Tôi ước có một "sơ đồ kiến trúc" nơi tôi có thể thấy mọi thứ được thực hiện như thế nào, những gì tôi đang cố gắng sẽ ảnh hưởng đến các thành phần khác và cách để tôi lên kế hoạch chi tiết trước khi tôi bắt đầu thực hiện các thay đổi.
Hầu hết những người tôi làm việc cùng có những câu chuyện tương tự như của riêng tôi - định hướng kỹ thuật mạnh mẽ và đôi khi là những kỹ năng tuyệt vời, nhưng không có cách nào để tổ chức công việc của họ. Tuy nhiên, các dự án của họ thường nhỏ hơn tôi rất nhiều nên họ đối phó bằng cách nào đó. Dù sao, điều đó có nghĩa với tôi là tôi chỉ có một mình và tôi không có ai để học những thực hành tốt từ đó.
Tôi đã tham gia một khóa học sau đại học về quản lý CNTT và trong khi tôi thấy nó khá thỏa mãn, nó chủ yếu nhắm vào những người không lập trình, giảng dạy về phương pháp quản lý dự án, dự toán ngân sách / lịch trình, kiến trúc doanh nghiệp, v.v. - không phải là thiết kế và lập kế hoạch phần mềm. Không sao, tôi cũng đang cố gắng học những thứ đó. Tất nhiên, một số công cụ (như UML) và các loại quy trình phát triển phần mềm (xếp tầng, lặp lại, nhanh nhẹn ...) đã được giới thiệu, nhưng rõ ràng là không chi tiết lắm và tôi rất khó quyết định nên chọn và sử dụng cái gì ( và ở mức độ nào).
Tôi đã đọc nhiều câu hỏi và câu trả lời về thiết kế phần mềm trên SO - có nhiều cách thực hiện bằng cách sử dụng công cụ hoặc phương pháp cụ thể này và nếu tôi tin rằng tài liệu UML sẽ giải quyết vấn đề của mình - tôi sẽ chọn nó và bắt đầu sử dụng nó Nhưng một số người thề với nó, những người khác nói rằng nó vô dụng. Tôi đang tìm kiếm một câu trả lời ở mức độ trừu tượng cao hơn - có cách nào để giải quyết hai vấn đề tôi đang gặp phải không, và cá nhân bạn làm điều đó như thế nào? Tôi nên học gì để có thể làm điều đó, có thể mà không bị ràng buộc với một công cụ cụ thể nào? Đôi khi chúng đến và đi ra khỏi phong cách, và tôi hy vọng khả năng ứng dụng của chúng thay đổi tùy thuộc vào loại dự án.
Cảm ơn rất nhiều vì đã đọc, tôi không thể nói những gì tôi muốn nói ngắn gọn hơn (thiếu kinh nghiệm thiết kế phần mềm và từ vựng).