8 điều cần vượt qua để đến với lập trình

Đăng bởi: Admin | Lượt xem: 1135 | Chuyên mục: Chia Sẻ

Chia sẻ của Andrei Soare – một lập trình viên “lão làng” từng làm việc tại các tập đoàn lớn như Google và Nokia về 8 rào cản cần vượt qua khi học lập trình Khi còn là giảng viên bộ môn lập trình web trên nền tảng JavaScript, tôi đã chứng kiến rất nhiều học viên xông xáo bước vào quá trình học lập trình và ngay sau đó lập tức “vỡ mộng”.


Hầu hết mọi học viên đều trải qua các rào cản khi bước vào con đường lập trình. Tuy nhiên, nếu có thể vượt qua được, họ sẽ có được những lợi ích như sau đây:

  • Họ yêu thích và tận hưởng những gì có được sau khi học.
  • Họ lập trình một cách nhanh nhạy và thuần thục hơn hẳn.
  • Họ trở nên bền bỉ và kiên trì hơn khi gặp phải những vấn đề khó khăn
  • Họ trở nên độc lập hơn khi viết những đoạn code

Sau đây là những rào cản cần phải vượt qua khi học lập trình

 

1. Bạn học lập trình không phải vì cái lợi trước mắt

[​IMG]

Trước khi nói về các rào cản học lập trình có thể gặp phải, tôi muốn khẳng định lại một lần nữa về tầm quan trọng của “động lực học” trong suốt quá trình học tập. Đừng bao giờ học lập trình vì những lợi ích trước mắt hoặc chỉ vì bạn thấy cái nghề lập trình viên “sang chảnh” và được trả lương cao.

Hãy học lập trình khi bạn muốn giải quyết các vấn đề của riêng bạn, cải thiện cuộc sống của bạn và để tạo ra những ứng dụng nhằm giúp đỡ mọi người.

Nếu bạn học lập trình chỉ đơn giản là vì muốn có một công việc “trong mơ”, bạn có thể sẽ gặp khá nhiều thứ thôi thúc bạn bỏ cuộc trong suốt quá trình học. Điều này thường xảy ra khi mọi thứ trở nên quá khó nhằn và việc học trở thành một cơn ác mộng đau thương. Và tin tôi đi, bạn sẽ tự nhủ với bản thân mình hàng tá lý do để bỏ cuộc như: mình chẳng hề thích lập trình, mình sinh ra không phải là để trở thành một lập trình viên…

Đó chính là lý do mà bạn nên cân nhắc đặt ra cho mình một mục tiêu trước một dự án tương lai của mình. Nếu bạn đã ấp ủ sẵn một dự án nào đó hoặc một vấn đề lớn hơn để giải quyết, hãy tự nói với bản thân mình như sau:

Rất có thể khi bắt đầu, tôi sẽ phải trải qua những thứ chẳng hề thích thú, dễ chịu gì nhưng tôi thật sự muốn giải quyết các vấn đề đó. Và tôi sẽ tự thúc đẩy bản thân mình cho đến khi nào chinh phục được những gì đã đặt ra,

2. Bạn không biết bắt đầu từ đâu

[​IMG]
Rất nhiều người đã từng hỏi một câu hỏi sau: “Ngôn ngữ lập trình nào tôi nên học đầu tiên?” Vấn đề này được hình thành bởi vì họ không rõ lí do tại sao họ lại muốn học lập trình.

Một khi bạn đã xác định rõ mục đích của mình thì rất dễ để tìm ra ngôn ngữ lập trình nào bạn nên bắt đầu với:

  • Nếu bạn muốn lập trình ứng dụng trên nền tảng HDH iOS, hãy bắt đầu với Objective C hoặc Swift
  • Nếu bạn muốn lập trình ứng dụng trên nền tảng HDH Android, hãy bắt đầu với Java
  • Nếu bạn muốn lập trình ứng dụng trên nền tảng web, hãy bắt đầu với JavaScript

Thực tế ngày nay bạn có thể sử dụng JavaScript để lập trình hầu hết mọi dự án từ những trang web đơn giản, những ứng dụng di động cho đến những project liên quan đến phần cứng cao cấp. Có thể nói, bộ ngôn ngữ lập trình này được dùng trong gần như tất cả các lĩnh vực như: âm nhạc, y dược, game, thời trang…

Nếu bạn vẫn chưa rõ nên bắt đầu từ đâu, hãy đi xin lời khuyên từ các lập trình viên có kinh nghiệm. Khi bạn biết rõ mình sẽ làm gì, người lập trình viên đó có thể dễ dàng đề xuất một bộ ngôn ngữ thích hợp cho bạn.

 
 

Một lưu ý nhỏ rằng những kiến thức mà bạn có được với một loại ngôn ngữ lập trình vẫn có thể được chuyển đổi qua một loại ngôn ngữ khác. Vì thế vẫn có một chút rủi ro ở giai đoạn này.

 

3. Bạn không thể áp dụng những gì đã học và bắt đầu “sỉ vả” bản thân mình

Một khi đã lựa chọn một được bộ môn nào đó để học, bạn sẽ bắt đầu một cách khá dễ dàng với những lí thuyết cơ bản. Có hàng trăm, hàng ngàn khóa học lập trình miễn phí và tính phí ngay trên Internet.

Hầu hết mọi học viên của tôi đều nắm rất rõ lý thuyết đã học và có thể giải thích được cách thức vận hành của những đoạn mã code. Có thể nói, lý thuyết là một khái niệm mang tính chất hữu hạn, ai cũng có thể học thuộc trong vài ngày (nếu thật sự muốn). Vậy nên vấn đề nằm ở đâu?

Vấn đề lớn nhất mà học viên gặp phải là áp dụng những lý thuyết đó để giải quyết các vấn đề và viết nên một bộ code mới. Đó chính là vấn đề liên quan đến lỗ hổng những kỹ năng.

Hãy tưởng tượng việc lập trình như bộ môn bơi lội. Bạn có thể thuộc nằm lòng các kỹ thuật cao cấp và thậm chí giảng giải cho người khác nghe như một huấn luận viên thực thụ. Tuy nhiên, để áp dụng những lý thuyết đó vào thực tiễn đòi hỏi một quá trình luyện tập và cả những khó khăn, sai lầm… Nói đơn giản hơn, bạn sẽ phải “uống nước” khá nhiêu đấy.

[​IMG]

Điều tệ hại hơn là việc tự hành hạ, sỉ vả chính bản thân mình. Hoặc nhẹ nhàng hơn là có những ý nghĩ tiêu cực như bạn bất tài, không đủ thông minh để lập trình. Những điều này hoàn toàn vô nghĩa, bạn còn cả một quá trình học tập phía trước cần đến sự kiên trì, bền bỉ để vượt qua. Vậy nên, bạn trau dồi kỹ năng của mình bằng cách nào?

3.1. Lựa chọn một dự án phức tạp để thực hiện. Trên lý thuyết, điều này sẽ mang lại nhiều thú vị bất ngờ cho bạn.

3.2. Nếu bạn không thể giải quyết trọn vẹn một vấn đề, thì hãy tìm ra cách chia nhỏ nó ra thành những phần nhỏ hơn.

  • Một dự án không đòi hỏi bạn phải sử dụng quá nhiều các mô hình lý thuyết cùng một lúc.Chia nhỏ và gói gọn những dự án lớn và phức tạp.
  • Một ví dụ điển hình là việc “tích hợp trang đăng nhập vào website”. Công việc này đòi hỏi hơn 20 dòng mã để giải quyết. Vi thế sau đây là những mẹo nhỏ có thể giúp được bạn.

3.3. Tập trung vào một công đoạn tại một thời điểm hơn là giải quyết nhiều công đoạn song song cùng một lúc với nhau. Đừng tiến đến công đoạn tiếp theo khi bạn vẫn chưa kiểm tra kĩ càng phần hiện tại. Nếu bạn không làm như thế và ứng dụng của bạn “dở chứng”, thì vấn đề của bạn có thể nằm trong bất cứ công đoạn nào mà bạn đang giải quyết song song với nhau. Và bạn sẽ gặp khá nhiều khó khăn để tìm ra lỗi và sửa chúng.​

3.4. Cần phải nắm rõ các lý thuyết cần thiết trước khi bắt tay vào giải quyết các vấn đề. Đôi khi bạn sẽ không biết những gì bạn cần. Điều này là bình thường và việc bạn cần làm là đi hỏi 1 một lập trình viên nào đó hoặc lên một trang diễn đàn về lập trình để tham khảo như: StackOverflow

3.5. Cuối cùng, khi bạn giải quyết các tác vụ, sẽ có nhiều rào cản khác được trình bày như bên dưới:

4. Bạn viết code nhưng không hề suy nghĩ về những hệ quả, vấn đề sâu xa hơn của chúng

[​IMG]Giả định trường hợp tốt nhất mà bạn đạt được là bạn giải quyết các tác vụ thành công và hoạt động tốt. Sau đó, nếu bạn chỉ dừng lại ở đó và tiếp tục qua một công việc khác thì bạn đã bỏ lỡ một cơ hội để học được những điều mới rồi đấy.

Tôi khuyến khích các bạn tự thử thách chính mình các câu hỏi sau đây:

[​IMG]
  • Có còn một trường hợp ngoại lệ nào đó khiến bộ code của tôi bị lỗi hay không? Cho dù hiện tại bộ code vẫn hoạt động tốt nhưng liệu có 1 trạng thái ứng dụng nào khiến nó bị hư không?
  • Bộ code của tôi có đủ “sạch” không? Tức nó có dễ hiểu và dễ sửa chửa sau này bởi những nhà lập trình viên khác và kể cả tôi hay không? Trong tương lai bạn có thể sẽ cần sửa các lỗi ẩn trong bộ code của bạn hoặc thay đổi nó để phù hợp với những thống số sản phẩm khác.
  • Liệu cách làm của tôi có phải là tốt nhất chưa? Liệu còn phương cách thay thế nào khác không? Những điểm mạnh và điểm yếu của những cách làm khác nhau? Và cuối cùng nó có đáng để xử lý tác vụ này bằng một phương cách khác không?
  • Liệu mô-đun hiện hành có tương tác được với các mô-đun khác không? Và liệu nó có tác động xấu đến các mô-đun còn lại không? Cuối cùng, mô-đun này có thể dễ dàng sử dụng bởi các mô-đun khác không?

5. Bạn không biết cách để giải quyết các tác vụ

[​IMG]Khi bạn không biết bắt đầu từ đâu, bạn có thể thử một vài thứ ngẫu nhiên hoặc sao chép đoạn code từ một nơi nào đó mà bạn không hề hiểu. Nhưng đó không phải là một cách làm đúng đắn. Bởi vì bạn sẽ gặp lại những tác vụ tương tự vậy trong tươi lai và tiếp tục mắc kẹt với chúng.

Nếu bạn muốn xử lý các tác vụ một cách triệt để, trước tiên phải tìm ra nguyên nhân tại sao bạn lại bị mắc kẹt. Sau đây là một vài lý do:

5.1. Bạn chưa nắm rõ lý thuyết
  • Cú pháp ngôn ngữ (language syntax)
  • Cách thức hoạt động của thư viện lập trình, của một API…
  • Lập trình hệ biến hóa (Programming paradigms) – ví dụ: lập trình không đồng bộ (asynchronous programming)
  • Cách thức hệ thống hoạt động (ví dụ: những yêu cầu HTTP là một trong những thứ khó hiểu nhất trong lập trình web)

Trong trường hợp này, hãy đọc kĩ lý thuyết lại một lần nữa hoặc tìm một ai để giải thích cho bạn nếu như vẫn chưa nắm rõ được vấn đề.

5.2. Một tác vụ quá lớn và cần phải được chia nhỏ ra để giải quyết

5.3. Bạn không hiểu được những gì công việc đang yêu cầu bởi bạn đọc nó quá nhanh và chấp nhận những mẫu có sẵn quen thuộc mặc dù thực tế không phải như vậy.

5.6. Bạn biết cách để giải quyết vấn đề nhưng phương cách mà bạn đưa lại không hoạt động

[​IMG]Đây là một việc thường gặp trong lập trình, thậm chí đối với cả những lập trình viên lâu năm. Nguyên nhân vì sao mà phương cách của bạn không hoạt động hầu hết là do lỗi trong bộ code.

Vậy làm cách nào để sửa chửa? Đơn giản thôi, gỡ rối (debugging) bộ code của bạn. Đây là một trong những kĩ năng quan trọng nhất của một người lập trình viên. Đây là một công việc bạn không làm một cách ngẫu nhiên hoặc hên xui mảy rủi. Bạn cần những bước làm cụ thể để tìm ra lỗi trong bộ code. Hiện nay đang có rất nhiều loại sách hướng dẫn kĩ năng gỡ rối này.

[​IMG]
Thật không may, có rất nhiều lập trình viên non trẻ đã mất đi động lực và ý chí ở giai đoạn này. Rất ít khóa học giải thích tầm quan trọng của việc gỡ rối bộ code. Và nếu bạn không thể thực hiện công đoạn này một cách thành thục, bạn có thể sẽ bị quá tải và tress đấy.
Rất nhiều người lo lắng việc gỡ rối code sẽ tiêu tốn rất nhiều thời gian. Điều này là bình thường và bạn cần phải chuẩn bị tinh thần cho việc này ở những năm đầu làm lập trình.
Một khi đã có trình độ khá hơn, bạn cũng cần trau dồi khả năng gỡ rối code. Hãy nghĩ công việc này như một cơ hội để sửa chửa những quan niệm sai lầm và nâng cao trình độ lập trình của bạn. Mỗi khi bạn sửa chữa xong một lỗi, hãy tự đặt cho mình một câu hỏi:
Tại sao tôi lại mắc lỗi này trong lần đầu thực hiện? Làm cách nào để tôi tránh được những lỗi tương tự trong tương lai.

Viết nhật ký lập trình mỗi khi bạn tìm ra một lỗi nào đó là một ý kiến hay. Điều này sẽ giúp bạn nhanh chóng thấy những kiểu mẫu và học hỏi từ chúng.

 

7. Bạn không biết cách nhận các sự giúp đỡ

[​IMG]

Không biết cách nhận các sự giúp đỡ là như thế nào? Đó là khi học lập trình, bạn sẽ nhận được rất nhiều sự giúp đỡ khác nhau đến từ: sách, khóa học, giảng viên, cộng đồng lập trình…

Vấn đề thường gặp nhất là việc bạn đã nắm rõ những sự giúp đỡ từ những nguồn được liệt kê ở trên nhưng lại không thúc ép bản thân để hiểu được hoàn toàn những gì đang diễn ra cũng như cách để suy luận ra những trường hợp lớn hơn.

Một ví dụ: Sau 10 tiếng đồng hồ giải quyết những lỗi, đã có một người đưa ra cho bạn những giải pháp cho điều này. Sau đó, bạn sửa lỗi một cách dễ dàng, ăn mừng vì điều đó và tiến đến công đoạn tiếp theo. Đừng làm như vậy, hãy làm những bước sau đây:

  • Nghĩ về những gì mình đã thực hiện trong suốt quá trình vừa qua. Tự hỏi bản thân mình đã làm sai những gì và ngược lại, mình đã có thể làm gì để tìm ra cách giải quyết.
  • Hỏi người đã giúp mình về cách thức họ đã làm. Làm cách nào mà anh ta/ cô ta có thể tìm được cách giải quyết? Hãy học hỏi từ họ và áp dụng vào những trường hợp trong tương lai.

Đây là một trong những hạn chế nếu bạn đọc những câu trả lời ở các cộng đồng như StackOverflow hoặc hỏi Google. Bạn sẽ không thể nào biết được quá trình một người nào đó tìm ra được cách giải quyết một vấn đề gặp phải.

 

8. Bạn không thể áp dụng những gì đã học

[​IMG]

Hình như điều này đã nói ở trên rồi thì phải? Vâng, tôi chỉ muốn nhắn nhủ các bạn rằng những gì bạn đang đọc nãy giờ cũng chỉ là những lý thuyết mà thôi.

Những lý thuyết không thể giúp được bạn trừ khi bạn áp dụng chúng, không chỉ một lần mà là cơ số lần cho đến khi nó trở thành một thói quen. Lập trình có thể xem như là một công việc tập hợp những thói quen tốt nhằm giúp bạn thoát khỏi những vấn đề của bản thân mình.
vncoder logo

Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!