Miễn 100% phí hồ sơ du học Nhật + Tặng 5~9 triệu/bạn

Sunday, September 18, 2016

Ngôn ngữ lập trình

Ngôn ngữ lập trình (programming language) là gì?

Các máy tính không hiểu được văn bản, hay ngôn ngữ tự nhiên của con người mà chỉ hiểu một thứ: Ngôn ngữ máy (machine language hay machine code) gồm mã nhị phân 1 và 0.

"Không biết lập trình phí nửa cuộc đời."
- Ngạn ngữ nhân loại mới -

Khi bạn lập trình bằng ngôn ngữ Ruby chẳng hạn, thì đó chỉ là văn bản (text) và sẽ không chạy được. Để chạy được thì bạn phải dùng chương trình biên dịch (gọi là compiler) để dịch ra ngôn ngữ máy (dạng nhị phân) mà máy tính hiểu được, tham khảo sơ đồ dưới đây.

Để hiểu chính xác thì bạn sẽ phải học môn học gọi là Kiến trúc máy tính (Computer architecture).


Ví dụ khi bạn lập trình bằng ngôn ngữ Ruby và lưu thành myprogram.rb chẳng hạn thì đây chỉ là file văn bản. Bạn cần dùng Compiler (tích hợp trong phần mềm Ruby mà bạn tải và cài) để biên dịch thành file nhị phân có thể chạy được (thường là file EXE ví dụ myprogram.exe).

Ngôn ngữ lập trình cũng tiến hóa theo thời gian và ngày càng gần ngôn ngữ tự nhiên của con người hơn. Càng giống ngôn ngữ tự nhiên thì học lập trình càng dễ nhưng lại càng xa rời bản chất thật sự của máy tính.

Ngôn ngữ Asembly

Đây là ngôn ngữ gần ngôn ngữ máy nhất và đòi hỏi bạn phải hiểu rõ cấu trúc máy tính. Bạn có thể thao tác trực tiếp trên bộ nhớ.
Ví dụ lập trình ngôn ngữ Asembly sẽ như thế này:

MOV AL, 1h        ; Load AL with immediate value 1
MOV CL, 2h        ; Load CL with immediate value 2
MOV DL, 3h        ; Load DL with immediate value 3
MOV EAX, [EBX]  ; Move the 4 bytes in memory at the address contained in EBX into EAX
MOV [ESI+EAX], CL ; Move the contents of CL into the byte at address ESI+EAX
Vì thế, ngôn ngữ này chỉ rành cho chuyên gia cực kỳ am hiểu cấu trúc máy tính và rất khó học.

Ngôn ngữ BASIC

(Beginner's All-purpose Symbolic Instruction Code = BASIC)
Thời máy tính mới ra đời thì ngôn ngữ BASIC là ngôn ngữ rất phổ biến. Đây được coi là ngôn ngữ thông dịch (dịch từng dòng lệnh). Để có thể thực hiện đi thực hiên lại một tác vụ thì do không có vòng lặp (LOOP, ví dụ vòng lặp FOR) nên sẽ dùng lệnh GO TO để nhảy về dòng trước đó.

Mỗi dòng lệnh có một số hiệu riêng (để còn GO TO về đó) ví dụ (nguồn Wikipedia):

5 LET S = 0
10 MAT INPUT V
20 LET N = NUM
30 IF N = 0 THEN 99
40 FOR I = 1 TO N
45 LET S = S + V(I)
50 NEXT I
60 PRINT S/N
70 GO TO 5
99 END
Bạn có thể dùng lệnh GO TO để vẽ 100 đường thẳng, đường cong lên màn hình chẳng hạn.

Ngôn ngữ có xử lý vòng lặp

Sau này thì BASIC không phổ biến nữa (và tiến hóa thành Visual Basic để viết ứng dụng Windows, xem Khát vọng lập trình) mà người ta chuyển sang ngôn ngữ xử lý biên dịch (dùng compiler) cũng như xử lý vòng lặp tốt hơn đó là Pascal và ngôn ngữ C (C language).

Bây giờ thì ngay cả ngôn ngữ Pascal cũng đã thoái trào trừ một số ít nơi còn dạy để ví dụ lập trình mà chủ yếu là sử dụng ngôn ngữ C.

Ví dụ ngôn ngữ Pascal (vòng lặp FOR):

while a <> b do  WriteLn('Waiting');
if a > b then WriteLn('Condition met')   {no semicolon allowed!}
           else WriteLn('Condition not met');
for i := 1 to 10 do  {no semicolon for single statements allowed!}
  WriteLn('Iteration: ', i);
repeat
  a := a + 1
until a = 10;
case i of
  0 : Write('zero');
  1 : Write('one');
  2 : Write('two');
  3,4,5,6,7,8,9,10: Write('?')
end;

Ngày nay, nếu bạn bắt đầu học lập trình thì bạn nên học ngôn ngữ lập trình C. Đây được coi là ngôn ngữ lập trình có cấu trúc: Bạn có thể sử dụng vòng lặp FOR và gọi hàm đệ quy (tức là một hàm số lại gọi lại chính nó). Ví dụ hàm đệ quy tính giai thừa của n trong ngôn ngữ C:

int factorial(n)
 {
   if (n <= 1)
     return 1;
   else
     return n * factorial(n-1);
 }
Hàm giai thừa này sẽ gọi chính nó với tham số (n - 1) và chạy cho tới khi mà n nhỏ hơn hoặc bằng 1. Chú ý là nếu lập trình sai thì sẽ là hàm đệ quy vô hạn và chẳng bao giờ chạy xong chương trình, thường kết thúc là treo máy hoặc bạn tự tắt máy bật lại.

Ngôn ngữ lập trình hướng đối tượng (object-oriented programming language)

Dùng các lớp (CLASS) để định nghĩa đối tượng. Điển hình là ngôn ngữ C++ (giống ngôn ngữ C nhưng thêm phần hướng đối tượng và một số tính năng khác).

Ví dụ định nghĩa lớp "người":

class người {
int tài sản;
int địa vị;
bool giới tính;
real tài khoản ngân hàng;

function bỏ tiền vào ngân hàng (số tiền) {
tiền trong túi = tiền trong túi - số tiền
tài khoản ngân hàng.số tiền += số tiền;
}
.....
} //kết thúc định nghĩa class

Vì sao lại lập trình hướng đối tượng mà không lập trình kiểu cũ (ví dụ ngôn ngữ Pascal) cho nó lành? Tôi sẽ bàn trong một dịp khác. Trong bài này thì bạn hãy tìm hiểu và học cách lập trình một ngôn ngữ nào đó (bất kỳ một ngôn ngữ nào mà bạn thấy dễ dàng để làm quen là được). Hãy tham khảo Khát vọng lập trình để biết cách bắt đầu.

Bonus: Cấu trúc máy tính và mã nhị phân

Máy tính là gì và vì sao máy tính chỉ hiểu mã nhị phân? Trung tâm của cấu trúc máy tính là bộ xử lý thông tin (giống bộ não của con người), mọi thông tin sẽ xử lý chính tại đây và bộ xử lý này chỉ xử lý dữ liệu nhị phân tức là Có/Không hoặc Đúng/Sai hay Có điện áp (5V)/Không có điện áp (0V).

Máy tính dùng transistor (thiết bị 3 cực) mà đời đầu là bóng đèn điện tử chân không:

Ảnh: Wikipedia Public Domain.

Ngày xưa máy tính dùng đèn điện tử to bằng cả căn nhà và rất nóng do tia điện tử phóng liên tục. Dữ liệu đưa vào là bìa đục lỗ (đục hay không đục tương ứng với 1 hoặc 0 hoặc ngược lại).

Ngày nay, người ta dùng transistor bán dẫn rất nhỏ gọn và tích hợp được nhiều lên một diện tích nhỏ (vì thế tốc độ xử lý rất nhanh mà kích thước lại ngày càng thu nhỏ):

Transistor (トランジスタ). Ảnh: Ibaraki University.

Transistor có 3 chân là E (Emitter, cực phát), B (Base, lưới), C (Colletor, cực thu). Nguyên lý transistor thì bàn ở dịp khác hoặc bạn coi trên mạng. Nó giống như đèn điện tử bạn dùng một lưới, áp điện áp để lừa điện tử phóng ra, nhưng vì là lưới nên điện tử bị lỡ đà chạy thẳng tới cực thu. Tức là bạn điều khiển được đầu ra là có dòng điện hay không (có điện áp hay không) thông qua Lưới (base). Nghiên cứu kỹ thì phiền to đấy nên chỉ nói thế thôi ^^

Bảng mạch chính (mother board hay main board) của máy tính được tích hợp vô số linh kiện và sẽ trông thế này:


Sân vận động màu nâu là nơi bạn gắn CPU (tức "con chíp") vào. Thanh dài (trắng, xanh) là nơi bạn gắn RAM. Bạn phải gắn CPU và RAM thì mới chạy được, ngoài ra, còn phải gắn màn hình vào nữa. Nếu muốn gõ gì đó thì phải cắm cả bàn phím. Nếu muốn chạy được hệ điều hành thì phải gắn ổ cứng có chứa hệ điều hành vào.

Bạn có thể tự thực hành lắp ráp máy tính. Nếu ở Nhật thì bạn có thể mua linh kiện rời và lắp ráp máy tính để bàn (desktop) bằng cách tra cách lắp ráp máy tính trên mạng. Bằng cách này, bạn có thể lắp ráp theo ý thích bản thân và tiết kiệm tiền so với mua máy bộ. Sau khoảng 3 năm, máy tính sẽ trục trặc do không tương thích nên bạn sẽ mua máy mới.

Không thì kiếm các máy cũ và tháo rời ra rồi kết hợp chúng với nhau cũng là niềm vui khi đi du học.
- Mark -

No comments:

Post a Comment