Lí thuyết và thực hành

Phần lớn sinh viên học về lí thuyết ở trường. Lí thuyết là những thứ như khái niệm hướng đối tượng, trừu tượng dữ liệu, thiết kế cơ sở dữ liệu, và các thuộc tính chất lượng của kiến trúc phần mềm. Lí thuyết là dễ thảo luận, dễ học nhưng khó kinh nghiệm. Phần lớn sinh viên học lí thuyết nhưng chỉ có ý niệm mơ hồ về nó. Họ thường không biết cách nó làm việc hay cách áp dụng nó. Đó là lí do tại sao họ cần thực hành. Đó là lí do tại sao các trường có bài tập, bài về nhà và phân công nhiệm vụ cho họ để áp dụng điều họ học vào thực hành.

Khi sinh viên biết lí thuyết nhưng không có thực hành, họ nghĩ rằng họ biết cái gì đó. Tâm trí của họ có thể đầy ý tưởng về cách phần mềm được giả định làm việc. Chừng nào họ còn chưa áp dụng nó, họ không có kinh nghiệm. Chẳng hạn dễ nói về lỗi và khiếm khuyết những làm sao giải quyết được lỗi là vấn đề khác. Cho tới khi bạn viết mã, khám phá lỗi và biết rằng một ứng dụng thiếu cách giải quyết lỗi mang tính định mệnh thì bạn mới đánh giá được lí thuyết về giải quyết lỗi. Chỉ bằng thực hành bạn mới biết rằng có "chức năng giải quyết lỗi" này là quan trọng. Đó là chỗ kinh nghiệm bước vào.

Kinh nghiệm là về việc phạm sai lầm. Khi bạn học lí thuyết không có sai lầm: mọi mã đều không có lỗi, mọi giao diện đều dễ làm, và không hệ thống phần mềm nào đã bao giờ bị hỏng. Nó là logic thế và hiển nhiên thế. Trong thực tế, mọi mã đều có khiếm khuyết yêu cầu nhiều nỗ lực để sửa. Phần lớn các giao diện bao giờ cũng yêu cầu nhiều thời gian để thực hiện. Việc hỏng phần mềm thường xảy ra trong kiểm thử v.v.. Đó là lí do tại sao trong đào tạo phần mềm, sinh viên không thể học được từ sách vở hay bài giảng mà phải làm bài tập về nhà, bài luyện v.v. Khi sinh viên học môn ngôn ngữ lập trình, họ phải viết mã. Không có ngoại lệ.

Với sinh viên phần mềm, bạn càng phạm nhiều sai lầm, bạn càng khá hơn. Sinh viên phần mềm phạm sai lầm nhưng mỗi sai lầm đều thêm một bài học nữa cho kinh nghiệm của họ. Kinh nghiệm chỉ có thể thu được bằng việc làm thực tại. Để giỏi hơn trong lập trình, bạn phải viết mã và phạm sai lầm. Không có cách khác. Bạn càng có nhiều kinh nghiệm, bạn càng làm công việc tốt hơn và bạn càng trở nên giỏi hơn. Sinh viên phải hiểu rằng lí thuyết và kinh nghiệm là kĩ năng. Lí thuyết là nền tảng nơi bạn xây dựng kĩ năng của bạn. Bạn không thể phát triển kĩ năng mà không có tri thức. Đó là lí do tại sao giáo dục và đào tạo là cần cho mọi người phát triển phần mềm.

Có những người chỉ học "lối tắt" và "thủ thuật". Họ không muốn dành thời gian để thu nhận tri thức. Họ chỉ muốn học làm vài điều. Họ có thể học lập trình mà không có lí thuyết hay nền tảng. Họ có thể viết mã chạy tốt nhưng khó bảo trì. Mục đích của họ chỉ là làm cho mã chạy nhưng họ không chăm nom tới việc thay đổi hay bảo trì. Họ có thể phát triển phần mềm trong dự án nhỏ nơi viết mã là hoạt động chính. Họ không có kĩ năng làm việc trong các dự án lớn hơn hay phức tạp hơn. Dự án lớn yêu cầu kiến trúc và thiết kế. Vì mục đích của thiết kế dựa nhiều vào lí thuyết để xây dựng hệ thống phức tạp, mở rộng được, dễ hiểu, dễ bảo trì với mọi thuộc tính chất lượng được bao hàm. Hệ thống phần mềm tuỳ thuộc vào nền tảng và tri thức của kĩ sư phần mềm. Tri thức càng tốt, thiết kế càng tốt và kĩ năng càng tốt, nó càng thanh thoát hơn.

Người lập trình với kĩ năng giới hạn không thể xây dựng được hệ thống như vậy. Họ bị giới hạn vào viết mã và kiểm thử. Họ là công nhân nhưng chưa bao giờ là kiến trúc sư, người thiết kế hay người quản lí dự án. Hệ thống thiếu thiết kế sẽ thường xuyên bị hỏng, nó sẽ khó bảo trì. Hệ thống càng lớn, vấn đề càng trở nên tồi tệ. Có nhiều hệ thống như vậy ngày nay, mã của chúng tệ tới mức không ai muốn bảo trì. Không ai hiểu nó được thực hiện ra sao. Khi kiểm điểm những hệ thống này, bạn có thể thấy rằng nó bao gồm hàng nghìn dòng mã nhảy lung tung qua lại mà không có chức năng logic. Rất dễ biết rằng nó được công nhân thiết kế ra chứ không phải kiến trúc sư.

Khi hệ thống trở nên ngày càng lớn hơn và phức tạp hơn, công nghiệp phần mềm cần nhiều người phần mềm có giáo dục và đào tạo tốt. Công nghiệp cần nhiều người với cả nền tảng về lí thuyết và kĩ năng thực hành. Công nghiệp phần mềm cần những người này bởi vì phần mềm kiểm soát nhiều thứ thế, và lỗi có thể có hậu quả tồi tệ và có thể làm mất mạng người. Đó là lí do tại sao các công ty sẵn lòng trả lương nhiều hơn cho những người này.

Tác phẩm, tác giả, nguồn

  • Tác phẩm: Lời khuyên cho sinh viên
  • Nguồn: Blog của giáo sư John Vu, Carnegie Mellon University.
  • Wiki hóa: https://kipkis.com

Có thể bạn muốn xem