Chương 1: Cơ chế của chương trình máy tính

Trở về Mục lục cuốn sách

Mục đích của cuốn sách này là hướng dẫn bạn suy nghĩ như là một nhà khoa học máy tính. Cách tư duy này kết hợp những ưu điểm của khoa học tự nhiên, trong đó có toán học, với kĩ thuật. Cũng như những nhà toán học, những nhà khoa học máy tính dùng những ngôn ngữ có cấu trúc để diễn đạt ý tưởng (đặc biệt là tính toán). Giống như những kĩ sư, họ cũng làm công việc thiết kế, gắn kết các thành phần tạo nên một hệ thống và đánh giá những ưu khuyết giữa các phương án khác nhau. Giống như những nhà khoa học, họ khảo sát các động thái của hệ thống phức tạp, đề ra các giả thiết, và kiểm định những tính toán.

Kĩ năng quan trọng nhất của nhà khoa học máy tính là giải quyết vấn đề. Giải quyết vấn đề chính là cách tạo lập vấn đề, suy nghĩ giải pháp một cách sáng tạo, và trình bày giải pháp một cách rõ ràng và chính xác. Như bạn sẽ thấy, việc học lập trình chính là một cơ hội tuyệt vời để bạn luyện tập những kĩ năng giải quyết vấn đề. Đó là lí do tại sao chương này lại có tên là “Cơ chế của chương trình máy tính”.

Một mặt, bạn sẽ được học cách lập trình, vốn bản thân nó là một kĩ năng hữu dụng. Mặt khác, bạn sẽ dùng lập trình như một phương tiện để giải quyết vấn đề. Điều này bạn sẽ dần dần làm được trong quá trình học.

Ngôn ngữ lập trình Python

Ngôn ngữ lập trình mà bạn sẽ học là Python. Python là một ví dụ trong số các ngôn ngữ lập trình bậc cao; một số ngôn ngữ lập trình bậc cao khác mà bạn có thể biết đến gồm có C, C++, Perl, và Java.

Cũng có những ngôn ngữ lập trình bậc thấp, đôi khi mà ta gọi là “ngôn ngữ máy” hoặc “hợp ngữ”. Nói nôm na, máy tính chỉ có thể thực hiện các chương trình được viết bằng ngôn ngữ bậc thấp. Vì vậy những chương trình được viết bằng một ngôn ngữ bậc cao cần được xử lý trước khi chúng có thể chạy được. Bước phụ trợ này sẽ tốn thêm thời gian, đây là một nhược điểm của các ngôn ngữ bậc cao.

Tuy vậy, các ưu điểm là rất lớn. Thứ nhất, việc lập trình bằng ngôn ngữ bậc cao dễ hơn rất nhiều. Chương trình được viết bằng ngôn ngữ bậc cao được viết nhanh hơn, nội dung chương trình ngắn hơn, dễ đọc hơn, và nhiều khả năng là chúng chính xác. Thứ hai, các ngôn ngữ bậc cao có tính khả chuyển theo nghĩa chạy được trên nhiều hệ máy tính khác nhau mà ít hoặc không cần phải sửa đổi. Các chương trình bậc thấp chỉ có thể chạy trên một loại máy tính và phải được viết lại nếu muốn chạy trên các hệ máy khác.

Bởi các ưu điểm nêu trên, hầu hết các chương trình đều được lập trình bằng ngôn ngữ bậc cao. Các ngôn ngữ bậc thấp chỉ được dùng cho một số ít những ứng dụng đặc biệt.

Hai loại chương trình có nhiệm vụ chuyển đổi các ngôn ngữ bậc cao về dạng ngôn ngữ bậc thấp: trình thông dịchtrình biên dịch. Trình thông dịch đọc một chương trình bậc cao và thực hiện nó theo đúng những gì mà chương trình chỉ định. Nó xử lý chương trình một cách dần dần, nghĩa là đọc câu lệnh đến đâu thì thực hiện tính toán tới đó.

trình thông dịch

Mã nguồn – Trình thông dịch – Kết quả đầu ra

Còn trình biên dịch thì đọc chương trình và dịch nó hoàn toàn trước khi chương trình bắt đầu chạy. Theo nghĩa đó, chương trình bậc cao được gọi là mã nguồn, và chương trình được dịch gọi là mã đối tượng, hoặc chương trình chạy. Một khi chương trình được biên dịch rồi, bạn có thể thực hiện nó nhiều lần sau này mà không phải dịch nữa.

trình biên dịch

Mã nguồn – Trình biên dịch – Mã đối tượng – Trình thực thi – Kết quả đầu ra

Python được coi là ngôn ngữ thông dịch vì chương trình Python được thực hiện bởi trình thông dịch. Có hai cách sử dụng trình thông dịch: theo chế độ tương tácchế độ văn lệnh. Trong chế độ tương tác, bạn gõ vào các lệnh Python và trình thông dịch sẽ hiện kết quả lên màn hình:

>>> 1 + 1
2

Dấu >>> ở đây là dấu nhắc mà trình thông dịch dùng để thông báo rằng hiện giờ nó đang sẵn sàng đợi lệnh. Nếu bây giờ bạn gõ vào 1 + 1, thì trình thông dịch sẽ trả lời là 2.

Mặt khác, bạn cũng có thể lưu mã lệnh trong một file và sử dụng trình thông dịch để thực hiện nội dung của file, mà ta gọi là một văn lệnh. Theo quy ước, các văn lệnh Python đều có đuôi là .py.

Để thực hiện văn lệnh, bạn phải báo cho trình biên dịch biết tên file. Chẳng hạn, trong cửa sổ lệnh UNIX, bạn cần gõ vào python dinsdale.py. Trong các môi trường khác, cách thực hiện văn lệnh có thể khác đi. Bạn có thể tham khảo một số hướng dẫn trên trang Web của Python: python.org.

Làm việc trong chế độ tương tác rất thuận tiện nếu bạn cần kiểm tra các đoạn mã ngắn vì bạn có thể gõ trực tiếp và chúng được thực hiện ngay. Nhưng nếu mã lệnh gồm nhiều dòng thì bạn nên lưu chúng trong một file văn lệnh để sau này có thể chỉnh sửa và thực hiện chúng.

Chương trình là gì?

Chương trình là một danh sách các chỉ dẫn cách thực hiện tính toán. Việc tính toán có thể là thuần tuý toán học, chẳng hạn giải hệ phương trình hoặc tìm nghiệm đa thức, nhưng cũng có thể là những phép tính trên các kí hiệu, chẳng hạn tìm kiếm và thay thế chữ trong một văn bản, hoặc (kì lạ hơn) là biên dịch một chương trình.

Dù chi tiết có thể khác nhau tuỳ theo từng ngôn ngữ lập trình, nhưng một số chỉ dẫn luôn có trong mọi ngôn ngữ:

nhập số liệu:
Là việc lấy số liệu từ bàn phím, file, hoặc một thiết bị khác.
xuất kết quả:
Hiển thị kết quả trên màn hình hoặc gửi kết quả ra file hoặc một thiết bị khác.
tính toán:
Thực hiện các phép toán cơ bản như cộng và nhân.
thực hiện có điều kiện:
Kiểm tra một điều kiện cụ thể và thực hiện danh sách câu lệnh tương ứng với điều kiện đó.
tính lặp:
Thực hiện lặp lại công việc nhiều lần, thường là với một số thay đổi giữa các lần lặp.

Tin hay không thì tùy bạn, nhưng bất cứ một chương trình nào, dù phức tạp đến đâu, đều được cấu thánh từ những chỉ dẫn đơn giản ở trên. Vì vậy, có thể coi lập trình như việc chia một bài toán lớn, phức tạp thành nhiều bài toán nhỏ hơn cho đến khi từng bài toán nhỏ này đơn giản đến mức có thể được thực hiện theo một trong các chỉ dẫn trên đây.

Điều này có thể còn mơ hồ, nhưng ta sẽ quay lại khi bàn về thuật toán.

Gỡ lỗi là gì?

Việc lập trình rất hay mắc phải lỗi. Việc theo dõi, phân tích nguyên nhân gây ra lỗi được gọi là gỡ lỗi.

Có ba loại lỗi có thể xuất hiện trong chương trình: lỗi cú pháp, lỗi chạy và lỗi ngữ nghĩa. Để nhanh chóng tìm ra lỗi ta cần phân biệt được chúng.

Lỗi cú pháp

Python chỉ có thể thực hiện được một chương trình với những câu lệnh đúng theo cú pháp; nếu không, trình thông dịch sẽ đưa ra thông báo lỗi. Cú pháp nghĩa là cấu trúc của chương trình và các quy tắc về cấu trúc đó. Chẳng hạn, ngoặc đơn phải đi theo từng cặp, như vậy (1 + 2) là hợp lệ, nhưng 7) là một lỗi cú pháp.

Trong ngôn ngữ hàng ngày người ta có thể bỏ qua nhiều lỗi cú pháp, nhất là trong cách viết văn thơ. Python thì không như vậy. Nếu trong chương trình có bất cứ lỗi cú pháp nào, Python sẽ hiển thị thông báo lỗi và dừng chạy chương trình. Nếu bạn mới nhập môn lập trình được vài tuần, rất có thể bạn phải dành nhiều thời gian dò tìm lỗi. Khi kinh nghiệm tăng dần lên, bạn sẽ tránh được lỗi tốt hơn và nếu mắc thì cũng phát hiện ra lỗi nhanh hơn.

Lỗi thực thi

Loại lỗi thứ hai là lỗi thực thi; chúng có tên như vậy bởi vì chỉ xuất hiện khi chương trình đã bắt đầu chạy. Những lỗi kiểu này được gọi là biệt lệ bởi vì chúng thường chỉ những điều kiện (xấu) bất thường phát sinh.

Với những chương trình đơn giản trong một vài chương đầu tiên, ta ít gặp những lỗi chạy chương trình kiểu như vậy.

Lỗi ngữ nghĩa

Loại lỗi thứ ba là lỗi ngữ nghĩa. Trong trường hợp có lỗi kiểu này, chương trình vẫn chạy thông theo nghĩa máy sẽ không phát thông báo lỗi, nhưng sẽ không thực hiện đúng yêu cầu mong muốn, mà sẽ cho kết quả khác. Cụ thể là thực hiện theo đúng những hướng dẫn câu lệnh trong chương trình.

Vấn đề ở đây là chương trình bạn viết sẽ không đúng theo ý muốn của bạn. Ý nghĩa của chương trình bị sai lệch. Việc phát hiện các lỗi ngữ nghĩa đôi lúc rất khó vì bạn cần phải quay ngược lại và nhìn vào kết quả của chương trình để phán đoán xem bản thân chương trình đã thực hiện những gì.

Gỡ lỗi thử nghiệm

Một trong những kĩ năng quan trọng nhất mà bạn sẽ học được, đó là gỡ lỗi. Mặc dù đôi khi rất khó chịu, nhưng việc gỡ lỗi rất cần trí tuệ, chứa đầy thử thách và là một phần thú vị trong lập trình.

Theo một nghĩa nào đó, gỡ lỗi giống như việc điều tra tội phạm. Bạn có trong tay các manh mối, phải suy luận ra các quá trình và sự kiện dẫn đến những hậu quả đang chứng kiến.

Việc gỡ lỗi cũng giống như khoa học thực nghiệm. Mỗi khi có ý kiến về nguyên nhân dẫn đến lỗi sai, bạn sửa chữa chương trình và thực hiện lại. Nếu giả thiết của bạn là đúng thì bạn thu được kết quả của công việc sửa chữa, đồng thời tiến một bước gần hơn tới chương trình đúng. Còn nếu giả thiết là sai thì bạn cần đề ra một giả thiết mới. Sherlock Holmes đã chỉ ra, “Khi bạn đã loại trừ tất cả những điều không thể thì những gì còn lại, dù có mập mờ đến đâu, chính là sự thật”. (A. Conan Doyle, Dấu của bộ tứ)

Đối với một số người, việc lập trình và gỡ lỗi là giống nhau. Đó là vì lập trình chính là quá trình gỡ lỗi dần dần đến khi bạn có được chương trình mong muốn. Ý tưởng ở đây là bạn nên bắt đầu với một chương trình có một tính năng nhỏ nào đó và thực hiện các chỉnh sửa, gỡ lỗi trong suốt quá trình, đến khi bạn có được một chương trình hoàn thiện.

Chẳng hạn, Linux là một hệ điều hành bao gồm hàng nghìn dòng lệnh, nhưng nó chỉ bắt đầu từ một chương trình đơn giản do Linus Torvalds dùng để khám phá chip Intel 80386. Theo Larry Greenfield thì “Một trong những dự án trước đó của Linus là một chương trình có nhiệm vụ chuyển từ việc in AAAA thành BBBB. Sau đó nó dần trở thành Linux”. (The Linux Users’ Guide Beta Version 1 / Hướng dẫn sử dụng Linux, phiên bản Beta 1).

Các chương tiếp sau đây sẽ nói thêm về việc gỡ lỗi và các vấn đề thực tế trong lập trình.

Ngôn ngữ hình thức và ngôn ngữ tự nhiên

Ngôn ngữ tự nhiên được mọi người dùng để giao tiếp, ví dụ Tiếng Anh, Tiếng Tây Ban Nha, Tiếng Pháp. Chúng tự do phát triển mà không định theo khuôn mẫu với bất kì mục đích nào (mặc dù có một số trật tự chẳng hạn như ngữ pháp);

Ngôn ngữ hình thức được con người thiết kế để ứng dụng trong những lĩnh vực riêng. Chẳng hạn, kí hiệu toán học chính là một ngôn ngữ hình thức rất hữu dụng để biểu diễn mối quan hệ giữa những biến lượng và con số. Trong hoá học, một loại ngôn ngữ hình thức khác được dùng để biểu diễn cấu trúc hoá học của các phân tử. Và quan trọng nhất:

Ngôn ngữ lập trình là những ngôn ngữ hình thức được thiết kế phục vụ mục đích diễn tả quá trình tính toán.

Các ngôn ngữ hình thức thường có quy định rất chặt chẽ về cú pháp. Chẳng hạn, 3 + 3 = 6 là một biểu thức toán học đúng, nhưng 3 +  = 3\#6 thì không. H2O là một công thức hoá học đúng về cú pháp, còn 2Zz thì không. Các quy tắc cú pháp có hai biểu hiện, về các nguyên tố và cấu trúc. Nguyên tố là các thành phần cơ sở của ngôn ngữ, chẳng hạn, các từ, các con số, và các nguyên tố hoá học. Trong ví dụ nêu trên, 3 +  = 3\#6 có lỗi sai vì # không phải là một nguyên tố hợp lệ trong toán học. Tương tự như vậy, 2Zz không hợp lệ vì không có nguyên tố hoá học nào có kí hiệu là Zz.

Loại lỗi cú pháp thứ hai thuộc về dạng cấu trúc của một mệnh đề; nghĩa là cách sắp xếp các nguyên tố. Mệnh đề 3 +  = 3\#6 không hợp lệ là vì mặc dù  +  =  đều là các nguyên tố đúng, nhưng chúng không thể đứng liền kề nhau. Tương tự như vậy, trong một công thức hoá học thì chỉ số phải được đặt sau tên nguyên tố chứ không phải đặt trước.

Hãy viết một câu có cấu trúc đúng nhưng có chứa những từ (nguyên tố) không đúng. Viết một câu khác trong đó tất cả các từ (nguyên tố) đều đúng nhưng cấu trúc lại không đúng.

Mỗi khi đọc một câu trong ngôn ngữ tự nhiên, hoặc trong ngôn ngữ hình thức, bạn cần hình dung được cấu trúc của câu đó là gì (mặc dù với ngôn ngữ tự nhiên thì việc làm này được thực hiện một cách vô thức). Quá trình này được gọi là phân tách.

Chẳng hạn, khi nghe câu “Đồng xu rơi”, bạn cần hiểu được “đồng xu” là chủ ngữ còn “rơi” là vị ngữ. Một khi đã phân tích được, bạn hiểu được câu đó nói gì, tức là nắm được ý nghĩa của câu. Giải thiết rằng bạn biết được nghĩa của từng từ riêng biệt (đồng xu, và rơi), bạn sẽ hiểu được hàm ý chung của câu này.

Mặc dù ngôn ngữ hình thức và ngôn ngữ tự nhiên có nhiều đặc điểm chung—nguyên tố, cấu trúc, cú pháp, và ngữ nghĩa—nhưng chúng có một số khác biệt:

tính chính xác:
Ngôn ngữ tự nhiên chứa đựng sự mập mờ theo nghĩa con người muốn hiểu đúng phải có suy luận tuỳ từng ngữ cảnh. và có thêm các thông tin khác để bổ sung. Các ngôn ngữ hình thức được thiết kế gần như rõ ràng tuyệt đối, tức là mỗi mệnh để chỉ có đúng một nghĩa, bất kể ngữ cảnh như thế nào.
tính gọn gàng:
Để loại trừ sự mập mờ và tránh gây hiểu nhầm, ngôn ngữ tự nhiên cần dùng đến nhiều nội dung bổ trợ làm dài thêm nội dung. Trái lại, các ngôn ngữ hình thức có nội dung gọn gàng đến mức tối thiểu.
tính phi văn phong:
Các ngôn ngữ tự nhiên có chứa nhiều thành ngữ và ẩn dụ. Khi ai đó nói “Đồng xu rơi”, có thể tại đó không có đồng xu nào và cũng chẳng có gì vừa rơi.1 Còn các ngôn ngữ hình thức luôn luôn có nghĩa đúng theo những gì được viết ra.

Chúng ta dùng ngôn ngữ tự nhiên ngay từ thủa nhỏ, nên thường có một thời gian khó khăn ban đầu khi làm quen với ngôn ngữ hình thức. Về phương diện nào đó, sự khác biệt giữa ngôn ngữ hình thức và ngôn ngữ tự nhiên cung như khác biệt giữa thơ ca và văn xuôi, dù hơn thế nữa.

Thơ ca:
Các từ được dùng với cả chức năng âm điệu bên cạnh chức năng ý nghĩa, và toàn bộ bài thơ/ca tạo ra hiệu quả cảm xúc. Luôn mang tính không rõ ràng, thậm chí còn là chủ định của tác giả.
Văn xuôi:
Coi trọng ý nghĩa của câu chữ hơn, trong đó phải kể đến vai trò của cấu trúc đối với việc diễn đạt ý nghĩa. Văn xuôi dễ phân tích ngữ nghĩa hơn so với thơ ca nhưng vẫn còn yếu tố không rõ ràng.
Chương trình:
Ý nghĩa của một chương trình máy tính là rõ ràng và được diễn đạt hoàn toàn thông qua câu chữ, theo đó ta có thể hiểu được trọn ven bằng cách phân tích các từ ngữ (nguyên tố) và cấu trúc.

Khi đọc chương trình (hoặc một ngôn ngữ hình thức nào khác) bạn nên làm như sau. Trước hết, hãy nhớ rằng ngôn ngữ hình thức cô đọng hơn ngôn ngữ tự nhiên, nên phải mất nhiều thời gian để đọc hơn. Mặt khác, cấu trúc cũng rất quan trọng, do đó không nên chỉ đọc qua một lượt từ trên xuống dưới. Bạn cần phải học cách phân tách ngôn ngữ trong trí óc, nhận diện các nguyên tố và diễn giải cấu trúc. Cuối cùng, những chi tiết đóng vai trò quan trọng. Các lỗi dù là nhỏ nhất trong cách viết các từ hoặc dấu câu trong ngôn ngữ hình thức sẽ có thể gây ra khác biệt lớn về ý nghĩa.

Chương trình đầu tiên

Theo thông lệ, chương trình đầu tiên mà bạn viết theo một ngôn ngữ lập trình mới có tên gọi là “Hello, World!” vì tất cả những gì nó thực hiện chỉ là làm hiện ra dòng chữ “Hello, World!” Một chương trình như vậy trong Python được viết như sau:

print 'Hello, World!'

Đây là ví dụ về một lệnh print2, vốn chẳng in gì ra giấy. Nó chỉ hiển thị một giá trị trên màn hình. Trong trường hợp này, kết quả là dòng chữ

Hello, World!

Cặp dấu nháy đơn trong đoạn chương trình có nhiệm vụ đánh dấu các điểm đầu và cuối của đoạn chữ cần hiển thị; chúng sẽ không xuất hiện trong kết quả.

Người ta có thể đánh giá chất lượng của một ngôn ngữ lập trình bằng độ đơn giản của chương trình “Hello, World!”. Theo tiêu chuẩn này, Python xứng đáng đạt điểm cao nhất.

Gỡ lỗi

Nếu có thể đọc cuốn sách này trước máy tính thì rất tốt vì bạn sẽ thử được tất cả các ví dụ trong quá trình đọc. Bạn có thể chạy phần lớn các ví dụ ở chế độ tương tác, nhưng nếu viết mã lệnh trong một file văn lệnh thì sẽ dễ thực hiện các điều chỉnh về sau này.

Mỗi khi thử nghiệm một đặc tính mới cho chương trình, bạn nên phạm lỗi. Chẳng hạn, trong chương trình “Hello, world!”, điều gì sẽ xảy ra nếu bạn bỏ bớt một trong hai dấu nháy? Và nếu bỏ cả hai dấu nháy? Nếu bạn viết sai chữ print?

Kiểu thử nghiệm này sẽ giúp bạn nhớ những gì bạn đã đọc; nó cũng giúp cho công việc gỡ lỗi, vì lúc đó bạn sẽ biết rằng thông báo lỗi ngụ ý gì. Do đó tốt hơn là cố ý phạm lỗi ngay từ lúc này còn hơn là để sau này vô tình mắc lỗi.

Đôi khi việc lập trình, và đặc biệt là gỡ lỗi, đem đến những cảm xúc mạnh. Nếu bạn đang đánh vật với một lỗi rất khó, bạn có thể nổi xung, đầu hàng hoặc bối rối.

Đã có những chứng cứ cho thấy con người phản ứng tự nhiên lại với máy tính như thể chúng là những người thực.3. Khi chúng hoạt động trôi chảy, ta coi chúng như người bạn; và khi chúng rất cứng đầu hoặc thô lỗ, chúng ta phản ứng với chúng như thể với hạng người mang những tính đó.

Chuẩn bị tiếp nhận những phản ứng này có thể giúp bạn biết cách vượt qua chúng. Một cách làm là nghĩ về máy tính như một nhân viên với các ưu điểm năng lực nhất định, như tốc độ và độ chính xác, nhưng kèm theo những nhược điểm riêng, như thiếu sự đồng cảm và thiếu khả năng nắm bắt bức tranh tổng thể.

Còn bạn có vai trò là một người quản lý tốt: hãy tìm cách tận dụng ưu điểm và khắc phục những nhược điểm. Và tìm ra những cách điều khiển cảm xúc khi giải quyết vấn đề, không để cho những phản ứng của bản thân làm ảnh hưởng đến khả năng làm việc hiệu quả.

Học cách gỡ lỗi có thể dễ gây bực bội, nhưng đó lại là kỹ năng rất quý báu và cần thiết cho nhiều hoạt động khác ngoài lập trình. Ở cuối mỗi chương sách đều có một mục gỡ lỗi, như mục này, trong đó tôi muốn chia sẻ những ý kiến bản thân về việc gỡ lỗi. Hi vọng nó sẽ giúp bạn!

Thuật ngữ

giải quyết vấn đề:
Quá trình thiết lập bài toán, tìm lời giải, và biểu diễn lời giải.
ngôn ngữ bậc cao:
Ngôn ngữ lập trình như Python được thiết kế nhằm mục đích để con người dễ đọc và viết.
ngôn ngữ bậc thấp:
Ngôn ngữ lập trình được thiết kế nhằm mục đích để máy tính dễ thực hiện; còn gọi là “ngôn ngữ máy” hoặc “hợp ngữ”.
tính khả chuyển:
Đặc tính của chương trình mà có thể chạy trên nhiều loại máy tính khác nhau.
thông dịch:
Thực hiện chương trình được viết bằng ngôn ngữ bậc cao bằng cách dịch nó theo từng dòng một.
biên dịch:
Dịch một lượt toàn bộ chương trình viết bằng ngôn ngữ bậc cao sang ngôn ngữ bậc thấp, để chuẩn bị thực hiện sau này.
mã nguồn:
Chương trình ở dạng ngôn ngữ bậc cao trước khi được biên dịch.
mã đối tượng:
Sản phẩm đầu ra của trình biên dịch sau khi nó đã dịch chương trình.
chương trình chạy:
Tên khác đặt cho mã đối tượng đã sẵn sàng được thực hiện.
dấu nhắc:
Các kí tự được hiển thị bởi trình thông dịch nhằm thể hiện rằng nó đã sẵn sàng nhận đầu vào từ phía người dùng.
văn lệnh:
Chương trình được lưu trong file (thường chính là chương trình sẽ được thông dịch).
chế độ tương tác:
Cách dùng trình thông dịch Python thông qua việc gõ các câu lệnh và biểu thức vào chỗ dấu nhắc.
chế độ văn lệnh:
Cách dùng trình thông dịch Python để đọc và thực hiện các câu lệnh có trong một văn lệnh.
chương trình:
Danh sách những chỉ dẫn thực hiện tính toán.
thuật toán:
Quá trình tổng quát để giải một lớp các bài toán.
lỗi:
Lỗi trong chương trình.
gỡ lỗi:
Quá trình dò tìm và gỡ bỏ cả ba kiểu lỗi trong lập trình.
cú pháp:
Cấu trúc của một chương trình.
lỗi cú pháp:
Lỗi trong chương trình mà làm cho quá trình phân tách không thể thực hiện được (và hệ quả là không thể biên dịch được).
biệt lệ:
Lỗi được phát hiện khi chương trình đang chạy.
ngữ nghĩa:
Ý nghĩa của chương trình.
lỗi ngữ nghĩa:
Lỗi có trong chương trình mà khiến cho chương trình thực hiện công việc ngoài ý định của người viết.
ngôn ngữ tự nhiên:
Ngôn ngữ bất kì được con người dùng, được trải qua sự tiến hóa tự nhiên.
ngôn ngữ hình thức:
Ngôn ngữ bất kì được con người thiết kế nhằm mục đích cụ thể, như việc biểu diễn các ý tưởng toán học hoặc các chương trình máy tính; tất cả các ngôn ngữ lập trình đều là ngôn ngữ hình thức.
nguyên tố:
Một trong những thành phần cơ bản trong cấu trúc cú pháp của một chương trình, tương đương với một từ trong ngôn ngữ tự nhiên.
phân tách:
Việc kiểm tra một chương trình và phân tích cấu trúc cú pháp.
lệnh print:
Chỉ thị để khiến trình thông dịch Python hiển thị một giá trị lên màn hình.

Bài tập

Dùng một trình duyệt web để truy cập trang web của Python python.org. Trang này bao gồm thông tin về Python và các kết nối đến những trang khác có liên quan đến Python; nó cũng giúp bạn tìm kiếm trong tài liệu về Python.

Chẳng hạn, nếu bạn nhập vào print ở cửa sổ tìm kiếm thì đường kết nối thứ nhất sẽ xuất hiện như là tài liệu hướng dẫn câu lệnh print. Đến đây, có thể bạn không hiểu những gì trong đó viết, nhưng biết cách tìm ra nó là điều tốt nhất.

Khởi động trình thông dịch Python và gõ vào help() để khởi động ứng dụng hỗ trợ phần mềm. Hoặc bạn có thể gõ help('print') để biết thông tin về câu lệnh print.

Nếu như ví dụ này không thực hiện được, có thể bạn sẽ cần phải cài đặt riêng bộ tài liệu về Python hoặc thiết lập một biến môi trường; cụ thể điều này còn phụ thuộc vào hệ điều hành và phiên bản Python mà bạn đang dùng.

Hãy khởi động trình thông dịch Python và dùng nó như một máy tính tay. Cú pháp của Python về các phép tính cũng giống như các kí hiệu toán học thông dụng. Chẳng hạn các dấu +, -, và / để chỉ các phép tính cộng, trừ, và chia, như bạn trông đợi. Kí hiệu cho phép nhân là *.

Nếu bạn chạy thi 10 km trong vòng 43 phút 30 giây thì thời gian trung bình mà để bạn chạy được một dặm là bao nhiêu? Tốc độ trung bình của bạn là bao nhiêu dặm mỗi giờ? (Gợi ý: một dặm bằng 1.61 km).


  1. Thành ngữ tiếng Anh này nghĩa là ai đó đã nhận ra điều gì đó sau một thoáng bối rối.
  2. Trong Python 3.0, print là một hàm, không phải câu lệnh, và do đó cú pháp sẽ là print('Hello, World!'). Không lâu nữa chúng ta sẽ làm quen với các hàm!
  3. Xem Reeves and Nass, { The Media Equation: How People Treat Computers, Television, and New Media Like Real People and Places}.

3 bình luận

Filed under Think Python

3 responses to “Chương 1: Cơ chế của chương trình máy tính

  1. Cuốn sách này rất hay. Nó không chỉ dạy về các đặc điểm cú pháp của ngôn ngữ lập trình Python, mà chỉ cho bạn thấy máy tính *hiểu* chương trình Python bạn viết như thế nào. Nếu là người mới học lập trình thì dù định học ngôn ngữ nào chăng nữa, bạn cũng nên xem quyển này.

  2. Pingback: Think Python: Cách tư duy như nhà khoa học máy tính | Blog của Chiến

Bình luận về bài viết này