+21

Hai hướng tiếp cận để học lập trình: Top-Down và Bottom-Up

Trước đây hơn 1 năm, tôi may mắn được sếp dẫn đi để cùng phỏng vấn một vài bạn có kinh nghiệm 1, 2 năm. Lần đầu được tham gia với vai trò là người phỏng vấn, tôi khá hứng thú và cũng tự mình chuẩn bị một vài câu hỏi chuyên sâu một tý, nhưng lúc trao đổi với sếp (trước khi vào phỏng vấn) thì sếp lại bảo chưa cần. Tôi cũng có chút thất vọng, nhưng chỉ nghĩ là chắc mình còn chưa có kinh nghiệm nên thôi cứ vào nghe thôi cũng được. Và bất ngờ là trong lúc phỏng vấn, sếp toàn đưa ra những câu hỏi tưởng chừng rất đơn giản của lập trình hướng đối tượng (basic Java), cứ ngỡ sẽ không thể làm khó được những chàng sinh viên IT, nhưng sự thật nó lại làm khó, ấp úng những người đã đi làm 1 vài năm, thậm chí trãi qua 3, 4 dự án. Chợt nhận ra lẽ nào họ đã quên hết những điều cơ bản nhất? hay làm sao họ có thể hoàn thành những dự án mà không cần nắm vững những kiến thức cơ bản đó sao?

Gần đây, đọc một bài viết về những hướng tiếp cận để học lập trình, tôi đã hiểu được nguyên nhân và hiểu được điều mà những người lập trình viên giàu kinh nghiệm như sếp mong muốn ở một beginer hay junior developer. Xin được chia sẻ dưới đây.

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.

1. The Top-Down Approach

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 - dài và cụ thể, 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).

1.1 Top-Down: The Good

Đ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 quá trình học tập.

1.2 Top-Down: The Bad

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 vào chỗ sâu nhất của bể bơi trước khi bạn biết bơi.

Arne Brasseur phản ánh cách giảng dạy theo hướng top-down:

I have taught many people Ruby on Rails. Rails is tremendously complex (but) in a few sessions you can teach a person to create an interactive website backed by a database. It’s frustrating to teach because you’re walking a tight rope. Just follow the steps. Don’t peek under the covers. Don’t stare into the abyss. But that feeling of instantly being productive is what draws people in, what makes them think, “hey, maybe I can do this”.

Tạm dịch

Tôi đã dạy nhiều người học Ruby on Rails. Rails rất phức tạp (nhưng) trong một vài sessions bạn có thể dạy một người tạo ra một trang web tương tác được hỗ trợ bởi cơ sở dữ liệu. Thật bực bội khi dạy vì bạn như đang đi trên một sợi dây thừng eo hẹp. Chỉ cần làm theo các bước. Đừng nhìn trộm bên dưới. Đừng nhìn chằm chằm vào vực thẳm. Nhưng cảm giác ngay tức khắc có hiệu quả là những gì thu hút mọi người, điều làm họ nghĩ, "hey, có lẽ tôi có thể làm điều này".

2 The Bottom-Up Approach

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.

2.1 Bottom-Up: The Good

Đ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.

2.2 Bottom-Up: The Bad

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ể. Một bản kế hoạch điển hình của hướng tiếp cận này:

  • Đầu tiên bạn sẽ học về Strings, integers, variables...
  • Sau đó bạn học về booleans, branchinglooping
  • Sau đó bạn học về arraysstructs
  • Sau đó bạn học về functionscontrol flow
  • Sau đó giáo viên sẽ nói với bạn rằng những người chuyên nghiệp sẽ không code kiểu này nữa
  • Vậy nên bạn bắt đầu học về classes, instances, methods, inheritance và một đống thứ khái niệm về OOP (hướng đối tượng).
  • Sau đó bạn cố quên đi cách viết code cũ, và học cách viết code mới theo những khái niệm bạn vừa tiếp thu được OOP ...

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.

3 Which is the best?

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à gỡ lỗi 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ó.

HAPPY CODING !


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.