Vì sao viết code lại khó đến như vậy? (Phần 1)

Vì sao viết code lại khó đến như vậy? (Phần 1)

Bài viết này liên quan đến một một chủ đề: viết code bằng C# framework.  Nhưng lại không dành cho các bạn xuất thân từ ngành công nghệ thông tin. Nó dành cho dân tay ngang muốn chuyển ngành hay cho các bạn muốn học thêm về code để phục vụ xử lý các công việc hiện tại nhanh hơn. Không có kiến thức nền, chắc chắn bạn sẽ thấy việc học code vừa khó vừa nản.

Tuy là khó, nhưng không phải là không thể. Khi bạn tự học, bạn sẽ học dần dần từng chút một. Có những thứ sẽ dễ hiểu ngay từ ban đầu, có những thứ phải mất vài năm chiêm nghiệm.

Trước khi chúng ta bắt đầu, có hai điều bạn cần biết:

  1. Tôi làm được, và bạn cũng làm được.
  2. Bạn không hề đơn độc đâu.

Từ vựng mới, concept mới, cái gì cũng…mới

Một trong những khó khăn lớn nhất khi học viết code chính là rào cản ngôn ngữ. Đôi khi, những thuật ngữ được sử dụng trong “ngôn ngữ code” lại có nghĩa hoàn toàn khác so với tiếng Anh thông thường. Một ví dụ điển hình là từ “Class”.

Khác với những ý nghĩa học thuật (lớp) hay về xã hội học (tầng lớp, giai cấp) mà ta thường sử dụng, Class trong lĩnh vực viết phần mềm có nhiều nghĩa khác nhau tùy vào ngôn ngữ lập trình mà bạn đang sử dụng. Lại càng khó hiểu hơn là trong những ngôn ngữ lập trình khác nhau, từ Class có ý nghĩa khá tương đồng, tuy nhiên cách sử dụng của chúng hoàn toàn khác nhau. (Ví dụ như CSS Class và Object Oriented Class).

Ngôn ngữ code cũng giống như tiếng lóng vậy, rất dễ làm bạn nản khi phải học. Mới đầu sẽ rất khó để bạn phân biệt đâu là từ tiếng Anh bình thường và đâu là thuật ngữ code.

Thêm vào đó, thường bạn sẽ nghe những thuật ngữ này nối tiếp nhau, nêu một câu nói toàn thuật ngữ code vẫn sẽ đúng về mặt ngữ pháp và bạn sẽ hiểu từng thuật ngữ riêng lẻ, nhưng sẽ không nắm được ý nghĩa của toàn bộ câu nói.

Làm lại từ đầu, nhưng từ đầu là từ đâu?

Thêm vào những khó khăn đã đề cập, bạn cũng sẽ đau đầu với những concept mới lạ.

Một ví dụ mà tôi hay đặt ra cho học trò là hãy thiết lập phần mềm máy tính để pha cà phê. Nghe có vẻ dễ dàng nhỉ?

Bạn: Này máy tính, hãy pha cho tôi ly cà phê.

Máy tính: BÍP BÍP: OK ANH. CÀ PHÊ LÀ GÌ VÀ PHA LÀ GÌ?

Hãy thử hình dung tất cả những cách pha cà phê… rồi thử hình dung quá trình từ việc thu hoạch hạt cà phê từ cây đến các công đoạn rang xay để cho ra sản phẩm dùng để pha cà phê… khá là phức tạp đấy.

Ngay cả những việc đơn giản đối với chúng ta lại rất phức tạp và khó khăn trong thế giới code.

Bạn không những phải lập trình mà còn phải định nghĩa từng thứ một, rồi lại phải củng cố các code để đối phó với những rủi ro có thể xảy ra.

“Tra Google đi”

Đây có lẽ là lời khuyên vô dụng nhất dành cho những lập trình viên mới vào nghề, bởi vì:

  1. Bạn không biết mình sai gì nên chẳng biết bắt đầu từ đâu. (Nếu đã biết thì bạn sẽ chẳng hỏi làm gì).
  2. Nếu bạn biết bạn sai gì, có thể bạn sẽ không biết những thuật ngữ liên quan đến lỗi sai đó.
  3. Và nếu bạn có biết đi chăng nữa, kết quả tìm kiếm trên Google cũng chỉ làm bạn hoang mang hơn thôi.

Ngôn ngữ lập trình cũng giống như Ngoại ngữ

Việc học viết code cũng ít nhiều giống với việc học ngoại ngữ. Trong quá trình giảng dạy, tôi nhận thấy rằng đa phần những học viên học ngoại ngữ (tiếng Anh hay những ngoại ngữ khác) đều học những cú pháp lập trình nhanh hơn những học viên khác.

Lập trình và ngoại ngữ giống nhau ở những điểm sau:

  1. Hệ thống ngôn ngữ nào cũng có logic và theo những định dạng nhất định.
  2. Sẽ có một số thuật ngữ có đặc tính riêng và không thể diễn tả đầy đủ được trong tiếng Anh.

Và sẽ có một số ngoại lệ không thuộc vào 2 điểm trên và bạn không còn cách nào khác ngoài ghi nhớ chúng.

Chọn con tim hay là nghe lý trí?

Mâu thuẫn lớn nhất, điên rồ nhất mà mọi lập trình viên đều gặp phải chính là bạn vừa biết cách mọi thứ hoạt động, nhưng cũng vừa phải có chút niềm tin.

Khi lập trình, bạn phải sử dụng lý lẽ và suy luận. Quá trình debugging (gỡ lỗi) đòi hỏi bạn phải suy luận. Và một đoạn code tốt phải có cấu trúc chặt chẽ và hợp logic.

Mặt khác, chúng ta đều viết code dựa trên những khuôn mẫu và những đoạn code của nhiều lập trình viên khác mà có lẽ ta không thể hiểu hết. Mỗi dòng code đều bao gồm vô vàn những tính năng mà nếu ta cứ dừng lại và suy nghĩ về chúng, ta sẽ không bao giờ lập trình xong một function (hàm).

Kết luận

Việc học lập trình tuy khó khăn thật, nhưng cũng giống như chúng ta học ăn học nói khi vừa chào đời thôi: rồi ta cũng sẽ làm được.

Trong phần tiếp theo, tôi sẽ chia sẻ một số chiến lược giúp việc học lập trình trở nên suôn sẻ hơn với bạn.