Top-Down và Bottom-Up hướng tiếp cận nào tốt cho dân lập trình

Gần đây, mình đọc một bài viết về những hướng tiếp cận để học lập trình, mình đã hiểu được nguyên nhân và điều mà những lập trình viên giỏi học một công nghệ mới hay một ngôn ngữ mới như thế nào là đúng.

Về cơ bản có 2 phương pháp tiếp cận chung để học lập trình là Top-DownBottom-Up, và cả 2 đều có những ưu và nhược điểm riêng.

Hướng tiếp cận Top-Down

Với hướng tiếp cận này, mục tiêu chính sẽ là học bằng cách tạo ra những (phần nhỏ của) phần mềm thực sự. Hầu hết những người tự học sẽ hướng mình theo cách tiếp cận này lúc mới bắt đầu học code. Vì đơn giản họ mong muốn mình làm được những thứ hấp dẫn ngay lập tức như một trang web hay một game 2D, 3D…

Và cách nhanh nhất để làm điều đó là học làm theo một bài tutorial hay một khoá học tạo một ra phần mềm hoặc game hoàn chỉnh, một tutorial được hướng dẫn rất chi tiết. Nếu bạn thực hiện theo các bước chính xác, bạn được đảm bảo sẽ tạo ra một cái gì đó (thú vị với bạn).

Ưu điểm

Điều tốt đẹp mà cách tiếp cận này mang lại là bạn tạo ra một cái gì đó rất nhanh chóng. Cảm giác thật sung sướng khi tạo ra một phần mềm thực sự bằng chính tay bạn trong thời gian ngắn. Bạn có thể bị nghiện cảm giác đó :) , và nó có thể giúp bạn có động lực vượt qua trong quá trình học tập.

Nhược điểm

Vấn đề của cách tiếp cận này đó là nó không dạy bạn những định nghĩa, nguyên tắc cơ bản.

Cuối mỗi tutorial, bạn có thể sẽ không hiểu được là sản phẩm (phần mềm) của bạn hoạt động như thế nào. Thậm chí nếu một tutorial không đủ chi tiết, bạn có thể phải vật lộn để giải quyết vấn đề của nó, khi bạn đi chệch hướng, dù là nhỏ nhất, bạn có thể sẽ không thể hoàn thành nó và không thể chẩn đoán được vấn đề mắc phải. Nó giống như bạn bị ném thẳng ra khúc sông sâu nhất trước khi bạn biết bơi.

Hướng tiếp cận Bottom-Up

Với cách tiếp cận này, mục tiêu sẽ là tìm hiểu tất cả các khái niệm cơ bản về lập trình.

Hướng tiếp cận này phổ biến hơn trong các khóa học lập trình chính thức, giống như trong các trường đại học hoặc cao đẳng. Nó bao gồm việc bắt đầu từ con số không và học một khái niệm tại thời điểm đó. Ý tưởng là để xây dựng một nền tảng vững chắc các kỹ năng lập trình chung, mà có thể được sử dụng để làm bất kỳ loại phần mềm nào.

Ưu điểm

Điều tốt đẹp mà hướng tiếp cận này mang lại là bạn sẽ được học các kỹ năng lập trình tổng quát thực sự. Không quan trọng nếu bạn tạo một game 2D 3D hoặc trang web tương tác - khái niệm cơ bản về lập trình có thể áp dụng cho mọi thứ.

Mỗi khái niệm riêng lẻ thì dễ học hơn, vì bạn có thể học nó một cách độc lập. Nếu khóa học bottom-up mà bạn đang thực hiện được cấu trúc tốt, bạn sẽ không bị bắn phá với 1000 khái niệm khác nhau cùng một lúc. Bạn nên làm quen với một khái niệm mới tại một thời điểm, theo thứ tự thì dễ hiểu hơn. Các khái niệm cơ bản được nắm vững (như giá trị và biến), trước khi các khái niệm phức tạp hơn (như các hàm) được xây dựng bên trên.

Nhược điểm

Vấn đề của hướng tiếp cận này đó là nó khá chậm. Phải mất một thời gian dài để học tất cả các kỹ năng cần thiết để làm được một cái (phần mềm, chương trình…) gì đó đáng kể. Bạn phải học những khái niệm cơ bản nhất như biến, lớp, hoặc hàm … Có thể mất vài tháng, thậm chí vài năm để hoàn thành lịch trình này , và nó có thể vẫn sẽ không đem lại cho bạn tất cả những skill cần thiết để có thể viết một game 2D, 3D hay một trang web ấn tượng.

Và khi nó kéo dài mãi mãi, bạn không tạo ra bất cứ điều gì thú vị, nó có thể trở nên nhàm chán. Và hãy thừa nhận rằng, rất nhiều người thấy rằng việc học control flow trong một tuần không hề thú vị như hoàn thành một trang web trong một ngày. Thứ cảm giác hoàn thành mà nếu bạn không cảm nhận được trong thời gian dài, bạn sẽ ít có khả năng tiếp tục học.

Lựa chọn nào là tốt?

Rõ ràng, không có hướng tiếp cận nào là tốt hơn hoàn toàn so với cái còn lại. Để trở thành một developer lành nghề, bạn phải cần cả 2 hướng Top-DownBottom-Up.

Bạn cần trải nghiệm việc tạo ra phần mềm, ngay cả khi bạn không hiểu nó một cách đầy đủ. Bạn cần động lực để tiếp tục học tập, và cảm giác hoàn thành đó có thể giúp ích. Chỉ nghiên cứu về khái niệm và lý thuyết là không đủ để chuẩn bị cho bạn để làm việc về các dự án phần mềm thực sự.

Bạn cũng cần những kỹ năng lập trình cơ bản. Sự cần thiết để có thể hiểu và fix bug code - cả code của bạn, và code được viết bởi các developer khác. Bạn cần phải có khả năng code trong các tình huống mà bạn chưa bao giờ gặp phải trước đây, bởi lẽ sẽ không có tutorial hay sample cho mọi vấn đề mà bạn cần phải giải quyết.

Cách tiếp cận tốt nhất là luân phiên giữa hai hướng tiếp cận.

Cảm thấy quá tải, giống như bạn không biết code của bạn đang làm gì? Hãy chuyển sang cách tiếp cận Bottom-Up. Trở lại với những vấn đề cơ bản và tìm hiểu chính xác cách mà code của bạn hoạt động. Hãy thử lấp đầy các lỗ hổng trong kiến thức của bạn.

Bắt đầu cảm thấy chán học các khái niệm lập trình trừu tượng? Chuyển ngay sang cách tiếp cận Top-Down. Hãy tạo một cái gì đó nhỏ, giống như một trang web hoặc game đơn giản. Cố gắng thực hiện tất cả các khái niệm mà bạn đã học được, và có được cảm giác hoàn thành sản phẩm.

Cuối cùng hai phương pháp tiếp cận gặp nhau ở giữa. Bạn học được rất nhiều về cách mà code của bạn hoạt động sâu bên dưới, điều này mang lại cho bạn sự tự tin để giải quyết bất kỳ vấn đề nào. Và bạn học cách khái niệm và lý thuyết lập trình áp dụng cho các dự án trong thế giới thực - nơi nào để sử dụng chúng, nơi không sử dụng chúng và cách sử dụng chúng tốt nhất.

Quá trình học tập này không bao giờ kết thúc. Phát triển phần mềm quá phức tạp đến nỗi không một ai hiểu được mọi thứ, có nghĩa là luôn có cái mới để học. Vì vậy, đừng lo lắng quá nhiều về những gì bạn không biết - nó chỉ cần thời gian. Hãy thư giãn và enjoy nó.

Gửi lời cảm ơn chân thành đến bài viết.


comments powered by Disqus