Bài viết dành cho những ai chưa từng phải tiếp xúc với việc lập trình (coding) và chẳng biết nó là gì, bắt đầu từ đâu, ý tưởng của nó như thế nào.

Ngôn ngữ máy tính

Lập trình thực chất là cách bạn dạy máy tính thực hiện một chuỗi các lệnh nào đó. Nó cũng tương tự như việc bạn bảo một đứa trẻ nấu món trứng chiên:
  1. Đầu tiên là chuẩn bị các nguyên liệu.
  1. Kế đến là đập trứng cho vào chén hoặc tô.
  1. Rồi thêm gia vị, khuấy đều.
  1. Tìm một cái chảo sạch bắt lên bếp.
  1. Cho dầu ăn vào chảo và bật cho bếp nóng lên.
  1. Sau khi dầu nóng thì chế trứng trong chén vào.
  1. Khi nào chín thì tắt bếp.
Dạy cho máy tính cũng y như vậy nhưng “đứa trẻ máy tính” hoàn toàn không thể tự nó tư duy. Ví dụ ở bước 2 bạn kêu đứa trẻ “đập trứng”. Bạn dùng câu tương tự với máy tính thì nó sẽ không hiểu phải làm gì. Đứa trẻ biết tư duy nên nó sẽ hiểu là phải lấy tay cầm trứng, rồi đập nhẹ vào một vật cứng hoặc dùng vật cứng đập vào trứng,… Máy tính hoàn toàn không thể tự nghĩ ra những điều đó.
Ngôn ngữ máy tính hoàn toàn khác ngôn ngữ tự nhiên của con người
Cũng như con người, muốn giao tiếp được với máy tính, bạn phải biết được ngôn ngữ của nó. Có nhiều ngôn ngữ máy tính khác nhau (cũng như con người có nhiều ngôn ngữ khác nhau vậy), đa phần các ngôn ngữ đều đảm bảo có những thứ cơ bản giống nhau, cũng giống ngôn ngữ con người phải đảm bảo có đủ chủ ngữ, đại từ nhân xưng, đại từ quan hệ, ngữ pháp ra sao,…
Lập trình thực chất là bạn chuyển tải từ ngôn ngữ con người sang ngôn ngữ máy tính. Việc học lập trình là bạn đang học cách chuyển tải ngôn ngữ con người sang ngôn ngữ máy để máy tính hiểu, đồng thời học luôn cách sai khiến máy tính làm theo nhu cầu của mình.

Các loại ngôn ngữ máy (ngôn ngữ lập trình)

Có thể nói thế giới máy tính giống y như thế giới con người vậy. Chúng ta giao tiếp bởi nhiều ngôn ngữ khác nhau, có ngôn ngữ khó học như tiếng Trung Quốc, tiếng Nhật thì cũng có những ngôn ngữ dễ học như tiếng Anh. Máy tính cũng như thế. Có những ngôn ngữ máy rất gần gũi với ngôn ngữ con người của chúng ta nên chúng ta rất dễ học, ngược lại có những ngôn ngữ khác xa hoàn toàn.
Tổng hợp những ngồn ngữ lập trình phổ biến nhất năm 2015
Những ngôn ngữ khó học có ưu điểm là dễ giao tiếp với máy. Ta có thể diễn đạt hầu như tất cả mọi ý của ta, máy đều hiểu, nói một lần trực tiếp là nó hiểu. Ngược lại những ngôn ngữ càng giống ngôn ngữ con người thì phải đi một đường vòng lớn mới có thể làm cho máy tính hiểu được ý chúng ta, khiến thời gian xử lý các tác vụ cũng chậm đi đôi chút. Cái gì cũng có cái hại và cái lợi riêng của nó.
Thường chúng ta tiếp xúc với thế giới ngôn ngữ máy là các ngôn ngữ gần gũi với con người. Các bài viết trên Math2IT cũng sẽ chọn các loại ngôn ngữ này.

Nên học ngôn ngữ lập trình nào đầu tiên?

Với tôi thì tôi tiếp xúc với ngôn ngữ lập trình Pascal đầu tiên năm lớp 10 (2005). Tuy nhiên có vẻ nó đã quá lỗi thời. Một số bạn thì lại tiếp xúc với C/C++ đầu tiên và gần như ai học lập trình đều phải học ngôn ngữ này, có thể học trước hoặc học sau.
☝️
Mỗi ngôn ngữ có một lợi thế và “đất sống” riêng. Do đó trong thế giới lập trình, có rất nhiều ngôn ngữ cùng tồn tại!
Một lựa chọn nữa sau khi tôi tham khảo trên mạng thì người ta khuyên nên học Python vì cấu trúc nó đơn giản, ngôn ngữ gần giống ngôn ngữ tự nhiên của chúng ta.

Những thứ cơ bản của các ngôn ngữ lập trình và cách nó hoạt động

Có 5 thứ cơ bản của một ngôn ngữ lập trình (tham khảo thêm tại đây). Hầu như ngôn ngữ nào cũng phải đảm bảo đủ 5 cái sau đây và khi lập trình, bạn sẽ sử dụng chúng để “nói” với máy tính điều bạn muốn nó làm.
  1. Biến (Variable)
  1. Cấu trúc điều khiển (Control structure)
  1. Cấu trúc dữ liệu (Data structure)
  1. Cú pháp (Syntax)
  1. Công cụ (Tools)
Cụ thể hơn, những cái trên là gì? Trang web mà tôi tham khảo ở trên nó dành hẳn một bài viết riêng cho từng loại, rất dài. Ở đây tôi không muốn bạn phải tốn nhiều thời gian như thế trong khi chỉ muốn biết lập trình là gì!

Một ví dụ cụ thể

Tôi sẽ xét một ví dụ đơn giản. Ở đây tôi không dùng ngôn ngữ cụ thể nào mà chỉ xét một cách chung nhất bằng cách sử dụng những thứ cơ bản của một ngôn ngữ lập trình.
☝️
Kiểm tra tính chẵn lẻ của một số
Bạn hãy viết một chương trình (hoặc một đoạn mã) để kiểm tra xem số mà người dùng nhập vào là số chẵn hay số lẻ? Cụ thể hơn, bạn sẽ yêu cầu người dùng nhập một số. Sau khi người ấy nhập xong, bạn phải xuất ra màn hình kết quả số đó là số chẵn hay số lẻ.

Những thứ có sẵn trong ngôn ngữ lập trình

Đầu tiên là những câu lệnh có sẵn bạn có thể dùng:
  • xuất-ra-màn-hình: giúp bạn xuất ra màn hình những gì bạn ghi trong dấu ngoặc kép (“”)
  • đọc-kết-quả-từ-bàn-phím-và-gán-vào-biến: giúp bạn đọc thứ mà người dùng gõ từ bàn phím.
  • nếu A thì B ngược-lại-thì C: nếu điều kiện A thỏa thì sẽ thực hiện lệnh B, ngược lại sẽ thực hiện lệnh C.
  • Các phép toán cộng, trừ, nhân, chia, chia hết,…

Giải thuật (thuật toán)

Giải thuật (algorithm) là phương pháp/ý tưởng bạn vận dụng những thứ có sẵn của một ngôn ngữ lập trình để giải quyết yêu cầu bài toán. Các lập trình viên hơn nhau ở điểm này. Giải thuật tốt sẽ giúp máy tính hiểu nhanh hơn, làm nhanh hơn. Ngược lại thì sẽ rất chậm hoặc sai.
Đối với bài toán kiểm tra tính chẵn lẻ của một số, tôi gợi ý một giải thuật thế này. Ta sẽ lấy số mà người dùng nhập vào chia cho 2, nếu nó chia hết thì kết luận là số chẵn, ngược lại là số lẻ.
Ví dụ người dùng nhập vào số 4. Áp dụng cách trên, tôi lấy 4 chia cho 2, hết nên kết luận 4 là số chẵn.
Để có thể minh họa giải thuật một cách trực quan, dân lập trình sử dụng một biểu đồ thể hiện ý tưởng, cái này người ta gọi là lưu đồ (flow chart). Bên dưới là một lưu đồ minh họa giải thuật ở trên.

Đoạn code

1xuất-ra-màn-hình "Vui lòng nhập vào một số"
2đọc-kết-quả-từ-bàn-phím--gán-vào-biến x
3nếu x chia hết 2 thì
4  xuất-ra-màn-hình "x là số chẵn"
5ngược-lại-thì
6  xuất-ra-màn-hình "x là số lẻ"

Cách máy tính “chạy đoạn code”

Cần nhớ rằng, sau khi bạn nhấn nút “chạy” thì máy tính sẽ bắt đầu đi từ trên xuống dưới trong đoạn code của bạn, đến chỗ nào mà nó có thể nhận dạng được ngôn ngữ của nó thì nó sẽ hiểu và thực thi y như vậy.
  • Đầu tiên nó sẽ gặp xuất ra màn hình, nó hiểu và liền hiển thị lên màn hình câu “Vui lòng nhập vào một số”.
  • Kế đến người dùng gõ lách cách gì đó, nó mặc kệ vì nó không quan tâm nhưng nó sẽ chạy đến dòng thứ hai trong đoạn code trên và gặp câu nó hiểu là đọc kết quả từ bàn phím và gán vào biến. Ah há, thằng người nó kêu mình đọc và gán kết quả vào, ok thôi. Thế là máy tính dành cho biến x đúng giá trị mà bạn vừa nhập.
  • Xong, nó đọc tiếp dòng tiếp theo và gặp nếu,….
  • ….
Đó là cách máy tính hoạt động.

Cách học?

Hai cách học một ngôn ngữ lập trình MỚI

Giả sử bạn đã biết thế nào là lập trình, cũng đã từng lập trình được với một ngôn ngữ nào đó rồi. Bây giờ bạn cần học một ngôn ngữ lập trình mới thì làm sao? Thường có hai cách
  1. Làm theo hướng dẫn để tạo một sản phẩm cụ thể.
  1. Học từ bước đầu tiên tới cuối cùng.
Cách 1 cho bạn cảm giác làm được một cái gì đó ngay lập tức, nhanh và khiến bạn cảm giác mình đã học được ngôn ngữ ấy. Nhược điểm là bạn học nửa vời và khó sáng tạo thêm cái mới.
Cách 2 ngốn rất nhiều thời gian của bạn, thường được áp dụng trong hầu hết các giáo trình dạy code. Tuy nhiên sẽ cho quả ngọt sau khi hoàn thành vì bạn đã nắm vững hầu như tất cả và sẵn sàng ứng dụng vào thực tế.
Thường người ta kết hợp cả hai cách trên cùng một lúc với nhau. Đó là bởi vì các ngôn ngữ lập trình thường có cấu trúc tương tự, chỉ khác cách khai báo, dòng lệnh. Thêm nữa là quỹ thời gian bạn có không cho phép bạn đi từ đầu đến cuối. Tôi cũng thường học theo cách 1 trong quá trình làm việc của mình, tuy nhiên tôi khuyên bạn như thế này
  • Nên học theo cách 2 một ngôn ngữ mới và cơ bản khi bạn mới chập chững vào con đường lập trình.
  • Sau đó tùy theo nhu cầu và tính chất quan trọng hay không của dự án, công việc mà bạn áp dụng cách 1 để học ngôn ngữ mới. Nhớ là phải ghi chú trong quá trình sử dụng cách này để học. Cách này có lợi thế là các nhu cầu của bạn sẽ dễ dàng tìm kiếm câu trả lời trên internet.
  • Biết mình sẽ gắn bó với ngôn ngữ nào, ngôn ngữ là sẽ đi theo sự nghiệp của bạn. Từ đó hãy học ngôn ngữ đó theo cách 2.

Bắt tay vào học một ngôn ngữ mới?

Khi bắt tay vào học một ngôn ngữ mới, bạn cần làm gì?
  1. Mục đích. Thường bạn phải biết vì sao bạn lại chọn ngôn ngữ đó hoặc phải biết ngôn ngữ đó có thể đáp ứng như cầu gì, dùng vào đâu.
  1. Tài liệu tham khảo. Tìm một nguồn thật đáng tin cậy và dễ hiểu nhất để “bám theo” đấy mà học. Ví dụ, ngày xưa khi tôi tự học về lập trình thiết kế web, tôi đã bám theo trang web w3schools. Nếu một ngôn ngữ có bộ tham khảo riêng của nó quá tốt, ví dụ như matlab thì bạn hoàn toàn không cần dùng gì khác.
  1. Phải biết chỗ hỏi. Khi học lập trình có rất nhiều thứ bạn không biết hoặc không thể dựa vào tài liệu tham khảo đang đọc để tự giải quyết. Hãy Google cái mà bạn không biết (tốt nhất bằng tiếng Anh). Nếu không tìm được, hay hỏi trực tiếp trong các group facebook hoặc lên trang stackoverflows về ngôn ngữ mà bạn đang học (có rất nhiều!).
  1. Học đi đôi với hành. Đừng bao giờ có cái tâm lý “học lý thuyết trước rồi thực hành sau”. Hãy tìm một ứng dụng (từ nhỏ đến lớn) để làm trong quá trình học code. Nó sẽ giúp hình thành tư duy và thói quen sử dụng ngôn ngữ ấy trong thực hành cho bạn, đồng thời sẽ giúp bạn nhớ lâu hơn.
  1. Ghi chú. Bạn phải luôn có một quyển/note ghi chú riêng cho mình và phải làm sao để dễ dàng tìm kiếm nhất khi cần. Nếu sử dụng MacOS, tôi gợi ý bạn dùng trình ghi chú Quiver (có phí). Nếu dùng các hệ điều hành khác hoặc không muốn trả phí, tôi khuyên bạn nên viết blog Jekyll/dùng Markdown (ví dụ như blog này) vì nó dễ dàng soạn thảo, hỗ trợ tìm kiếm nhanh khi cần. Trong trường hợp bạn ngại công khai nó, hãy cấm Google và các trình tìm kiếm khác tìm đến trang web của bạn.