Tư duy C# – một số mẹo

Trở về Mục lục cuốn sách

Để tiến bộ trong bất kì lĩnh vực khó nào, đôi khi bạn cần không chỉ nghĩ tới nội dung hay chủ đề, mà còn cả tới phong cách học tập nữa.

Bởi vậy, hãy dành ra ít nhất một phần thời gian để nghĩ xem bạn nên học tốt nhất thế nào, và làm sao để duy trì năng lượng tích cực trong lĩnh vực nghiên cứu. Sau đây là một số tài liệu và ý tưởng.

Trí nhớ ngắn hạn và dài hạn, cùng với Thực hành!

Bạn có thể dành cả buổi chiều yên ả để đọc về vấn đề này. Lý thuyết đã chỉ ra rằng, ta chỉ có dung lượng rất hữu hạn dành cho bộ nhớ ngắn hạn, và ta thường quên rất nhanh. Việc chuyển qua trí nhớ dài hạn đòi hỏi thực hành, và thường xuyên cập nhật làm mới.

Một lý thuyết là thời gian thích hợp nhất để ôn lại một điều chính là lúc ngay trước khi ta sắp quên điều đó! Thoạt nghe có vẻ vô ích! Nhưng khi rà soát vấn đề càng nhiều thì nó sẽ càng gắn chắc vào bộ nhớ dài hạn.

Vì vậy cách hiệu nghiệm nhất có lẽ là ban đầu ta cần thường xuyên điểm lại — có thể là đọc thông tin ngày hôm nay, rồi tối nay lại giở ra xem lại, và xem lại lần nữa sau đó hai ngày, rồi sau đó một tuần, v.v. có vẻ như đây là chiến thuật hay.

Và nếu không thực hành thì bạn sẽ không thể trở thành lập trình viên giỏi được!

Điểm then chốt chính là mô hình tư duy của bạn!

“Các chuyên gia đã lập một cấu trúc tổ chức tư duy nhằm đơn giản hoá khâu truy hồi thông tin và áp dụng hiệu quả kiến thức…”http://www.farnamstreetblog.com/2013/01/how-people-learn_images/mind_map.png

Có lẽ chúng ta đều là chuyên gia trong lĩnh vực của mình — lái thuyền buồm, nuôi thỏ, phim ảnh, chính trị, bóng đá, khoa học máy tính, âm nhạc, lướt ván, hoá học, chèo thuyền, sinh học, thi ca… Tại sao lại có thể dễ dàng học tập và sử dụng tất cả những thông tin chi tiết này?

Hoá ra là có một yếu tố then chốt trong sự thuần thục, đó là cách mà chúng ta xây dựng và tổ chức các cấu trúc tư duy. Bằng cách này ta có được một bộ khung để từ đó bố trí và gắn lên đó tất cả những dữ kiện có dính líu tới nhau.

Trong lớp học và suốt các khoá học, phần lớn thời gian của bạn dồn vào việc xây dựng bộ khung cho bạn, chính xác và toàn diện. Một khi đã có cách tổ chức dữ kiện bài bản, sẽ dễ dàng theo dõi chúng.

Sử dụng bản đồ tư duy (https://vi.wikipedia.org/wiki/Bản_đồ_tư_duy) là một ý tưởng đơn giản mà chắc không ít người trong số chúng ta thấy hiệu nghiệm.

Mạch tư duy là quan trọng

Bởi vì lập trình là một nhiệm vụ phức tạp, khi ta phải cố gắng tung hứng một số dữ kiện trong bộ nhớ ngắn hạn (và chúng nhanh chóng phai nhoà), mỗi khi bị gián đoạn hoặc khi ta chững lại và không biết điều gì đó thì tất cả những gì ta cố lưu lại trong đầu sẽ đồng loạt bốc hơi hết. Như vậy làm cho chúng ta chậm lại rõ rệt.

Cũng như các vận động viên giỏi, các lập trình viên giỏi thường báo cáo rằng họ đã “vào guồng” khi họ có thể tập trung cao độ, quên cả thời gian, thì mạch sáng tạo sẽ dào dạt với năng suất cao. Dĩ nhiên, nếu ta không biết cú pháp hoặc công cụ phần mềm và phải tạm dừng để hỏi người bạn xem liệu họ có nhớ tên phương thức nào đó không, thì chắc hẳn ta sẽ bị ngắt mạch. (Và mạch của người bạn cũng bị ngắt quãng, và họ cuối cùng sẽ lánh đi chỗ khác để bạn không làm phiền họ nữa.)

Hãy tìm kiếm cụm từ “Programming in the Zone” hay “Psychology of Flow” và hiểu rõ hơn về mục tiêu tối thượng ta muốn đạt tới trong vai trò lập trình viên. Những gì ứng nghiệm với người khác thì chưa chắc đã đúng với bạn, song khi biết được bạn hướng tới điều gì có thể sẽ giúp nhận diện dễ dàng hơn những gì phù hợp nhất với bạn!

Năm sợi chỉ thuần thục

Đây là một nghiên cứu quan trọng được Tổng thống Hoa Kỳ yêu cầu tiến hành. Nghiên cứu này nhằm làm sáng tỏ những yếu tố cần cho học sinh thông thạo làm toán.

Nhưng kết quả nghiên cứu còn đặc biệt ứng nghiệm với những gì ta cần để thông thạo Khoa học Máy tính, hoặc thậm chí cả thông thạo chơi nhạc Jazz! Họ đã phát hiện năm “sợi chỉ” bện thành sự thông thạo của mỗi cá nhân:

_images/strands.jpg

  1. Thành thạo thủ tục (Procedural Fluency): Học cú pháp. Học cách gõ mã lệnh. Học cách thao tác công cụ phần mềm. Tìm hiểu và thực hành thang đo của bạn. Học cách biến đổi công thức toán.
  2. Hiểu biết khái niệm (Conceptual Understanding): Hiểu lý do tại sao các dữ liệu gắn bó với nhau như chúng hiện đang cho thấy.
  3. Thông thạo chiến thuật (Strategic Competence): Bạn có nhận thấy mình cần làm gì tiếp theo không? Bạn có thể lập công thức cho vấn đề hiện đang gặp phải không?
  4. Lập luận thích ứng (Adaptive Reasoning): Bạn có thể thấy cách chuyển đổi từ những gì đã học để áp dụng cho vấn đề mới này không?
  5. Tư chất năng suất cao (Productive Disposition): Ta cần thái độ Làm được! đó!
    1. Bạn hình thành thói quen suy nghĩ rằng việc học kiến thức này là xứng đáng.
    2. Bạn đủ cần cù và kỉ luật để bước qua chông gai, và kiên trì đủ giờ luyện tập.
    3. Bạn phát triển cảm quan về tính hiệu quả và sự trao quyền — để bạn có thể sử dụng những gì đã học được và làm mọi thứ diễn ra!

Bạn có thể làm gì? Hãy nhận thức được những phương hướng khác nhau cùng sở trường, sở đoản của mình. Nếu bạn tổn phí quá nhiều thời gian vì trước đây chưa luyện tập gõ phím thành thạo, hay vì chưa từng thông thuộc cách sử dụng Visual Studio, hay chưa từng biết cú pháp viết vòng lặp while, thì hãy dành thêm thời gian vào đó. Và suy nghĩ thật nhiều vào. Suy nghĩ tránh xa máy tính. Nghĩ về vấn đề, và xem những thành phần của ngôn ngữ gắn với nhau thế nào.

Hãy xem http://mason.gmu.edu/~jsuh4/teaching/strands.htm, hay cuốn sách Kilpatrick đã viết, ở http://www.nap.edu/openbook.php?isbn=0309069955

Khái niệm ngưỡng và kĩ năng ngưỡng

Khái niệm ngưỡng (Threshold Concepts) (còn gọi là troublesome concepts) những khái niệm làm thay đổi cách chúng ta nghĩ về điều nào đó. Ý tưởng về các biến thay đổi giá trị theo thời gian, hay ý tưởng tư duy hệ thống về các trạng thái của chúng, ý tưởng rằng tất cả giá trị đều có kiểu tương ứng, ý tưởng đệ quy, rồi ý tưởng giao diện, … là một số những khái niệm ngưỡng mà ta gặp trong Khoa học Máy tính.

Để hiểu những ý tưởng này thường sẽ mất thời gian — có thể sẽ không đơn thuần là một trải nghiệm khoảnh khắc “aha” đâu — mà thường chặng đường dẫn tới hiểu biết mới sẽ đầy chông gai: sẽ thường có sự phá vỡ những lối tư duy trước đây mà ta nhìn nhận mọi vật, bỏ lại ta giữa tâm trạng ngổn ngang và hoài nghi về bản thân.

Tìm kiếm trên Google và đọc vài bài báo giới thiệu về khái niệm ngưỡng Threshold Concepts, cũng như cái gọi là trạng thái trung gian (liminal state) — mà ta trải nghiệm khi bước qua ngưỡng này, và buộc phải vứt bỏ, sửa đổi ý tưởng cũ để có thể nắm bắt được và thấy được vấn đề từ góc nhìn mới.

Song cao hơn nữa, trên cả khái niệm ngưỡng, Khoa học Máy tính còn yêu cầu cả Kỹ năng ngưỡng (Threshold Skills). Cái này có lẽ không đòi hỏi quá nhiều về mặt nhận thức nhưng vẫn cần phải thành thạo: luyện tập âm giai trong thanh nhạc, luyện tập gỡ lỗi, luyện tập cách viết một phương thức, hay cách dùng các vòng lặp và mảng cũng như chỉ số một cách trôi chảy. Đây là một nguồn tài liệu tới điểm khởi đầu sẽ trình bày thêm về điều này: http://www.nairtl.ie/documents/EPub_2012Proceedings.pdf#page=164

Các loại trí thông minh khác nhau!

Có người lại cho rằng chúng ta sở hữu những kiểu trí thông minh khác nhau, khiến cho có những người đặc biệt thích hợp với một số kiểu hoạt động nhất định. Không phải ai cũng tán đồng ý kiến này! Những người khác còn nghĩ rằng có một trí thông minh tổng quát chung bao lấy toàn bộ tất cả những dạng trí thông minh đặc thù kia. Hãy xem bài Tiếng Anh này:  http://psychology.about.com/od/educationalpsychology/ss/multiple-intell.htm

Với những người nghiên cứu lĩnh vực giải quyết vấn đề và thiết kế bài toán, điều khá thú vị là sự khác biệt giữa trí thông minh lưu động (fluid) và thông minh kết tinh (crystallized). Hãy tìm cụm từ tiếng Anh “Fluid versus Crystallized intelligence” và xem bạn nhận thấy việc xây dựng phần mềm theo từng kĩ năng nêu trên thì khác nhau ra sao.

1 bình luận

Filed under C#, Lập trình, Tin học

1 responses to “Tư duy C# – một số mẹo

  1. Pingback: Tư duy sắc bén bằng C# | Blog của Chiến

Bình luận về bài viết này