8 điều cần vượt qua để đến với lập trình
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
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.
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:
2. Bạn không biết bắt đầu từ đâu
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.
Đ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.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
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:
- 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ụ
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:
- 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
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.
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 đỡ
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
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.
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!