Bài viết được dịch và có tinh chỉnh dựa theo tựa “A Gentler Introduction to Programming”.

.    .    .

Bài viết này ghi lại những gì tôi đi huấn luyện người khác. Tôi sẽ không nhảy vào việc viết mã ngay hoặc phân loại bất kì điều gì. Tôi sẽ ưu tiên các khái niệm trước.
Nếu bạn làm việc trong một công ty phát triển phần mềm nhưng không phải là lập trình viên, bạn có thể tự thắc mắc mấy thằng lập trình viên đang làm cái quái gì ? Và bạn thấy những mô tả mới hàng ngày. Cho dù bạn là nhân viên bán hàng, bác sĩ, luật sư, lãnh đạo doanh nghiệp hay một kế toán viên, nếu bạn đã từng nghĩ đến việc tìm hiểu về lập trình thì bài viết này dành cho bạn.

Các ý chính trong bài viết này

Bài viết này được chia thành 4 phần. Sau khi đọc qua từng phần, bạn sẽ tìm thấy phần câu hỏi để giúp bạn nhớ lại những gì mình đã đọc. Sau đó, bạn sẽ tìm thấy phần “tiếp theo” chính là câu trả lời cho phần đã hỏi.
Lưu ý: mỗi thuật ngữ được giới thiệu trong loạt bài này đều được in đậm, chẳng hạn như từ Thuật toán.

Phần 1: Lập trình là cái khỉ gì ?

Câu trả lời đơn giản nhất ấy là “hướng dẫn máy tính thực thi nhiệm vụ cần xử lý”. Nó thường được gọi là công việc viết mã — coding.
Vậy, chương trình máy tính — computer program là gì ? Một chương trình máy tính là một chuỗi các các hướng dẫn giúp máy tính thực thi các tác vụ.
Máy tính trong định nghĩa ở đây là bất kì thiết bị nào có khả năng xử lý mã nguồn. Có thể hiểu là một chiếc điện thoại thông minh, máy ATM, máy vi tính mini Raspberry Pi hay một vài dạng máy chủ.

Sự tương đồng trong lập trình với cuộc sống

Đầu tiên, có những mô hình cơ bản cho cuộc sống hàng ngày của chúng ta. Vũ trụ vận động theo một chu kì nào đó; Ví dụ: ngày — đêm, các mùa, bình minh — hoàng hôn. Con người trải qua hàng ngày với việc sáng thức dạy, đi học hoặc đi làm. Chúng ta nhận việc từ cấp trên tại nơi làm việc. Cách chúng ta nấu ăn theo công thức mà đó lại là một tập hợp các bước hữu hạn để nấu thành món ăn.
Thứ hai, mỗi khi chúng ta sử dụng thiết bị thông minh, một vài dòng mã đang được thực thi ẩn. Khi di chuột từ màn hình thứ nhất qua màn hình thứ hai, nghe thì tưởng chừng đơn giản, nhưng thực tế thì phải thực thi qua một loạt các mã nguồn mới có thể đạt được điều đó. Một thao tác đơn giản như gõ văn bản trên Google Docs thì ẩn đằng sau đó là một loạt các dòng mã đang được thực thi. Mã nguồn xuất hiện ở khắp nơi trong những sản phẩm dạng đó.
Các chương trình máy tính cũng được gọi là code — mã nguồn (code nên được coi như một danh từ không đếm được). Được rồi, đây không phải là lớp dạy tiếng anh, chúng ta cần quay lại câu chuyện chính.

Ngôn ngữ tự nhiên của máy tính

Máy móc cũng có ngôn ngữ tự nhiên giống như con người. Máy tính không hiểu ngôn ngữ của con người. Ngôn ngữ tự nhiên của máy tính là mã nhị phân 0 và 1. Nó biểu diễn cho trạng thái bật — on (1)tắt — off (0).
Đó cũng là ngôn ngữ tự nhiên của các thiết bị điện tử. Nó tương đối phức tạp khi con người muốn giao tiếp với máy tính khi sử dụng mã nhị phân.

Ngôn ngữ lập trình

Để giao tiếp với máy móc, con người bắt buộc phải sử dụng mã nhị phân, vậy làm thế nào để sử dụng ngôn ngữ lập trình gần với ngôn ngữ tự nhiên của con người chúng ta mà vẫn đạt được mục đích là cho máy móc có thể hiểu được. Giống như tiếng Anh, tiếng Pháp vân vân…. Ngôn ngữ lập trình cần phải gần với ngôn ngữ tự nhiên của con người. Nhưng chúng cần có cấu trúc rõ ràng và phải dễ dàng trong việc học chúng.
Chúng có thể là ngôn ngữ cấp cao hoặc thấp. Các ngôn ngữ lập trình bậc cao khác biệt và cách xa ngôn ngữ máy hơn là các ngôn ngữ lập trình bậc thấp. Điều này tương đối trừu tượng — abstraction nên người mới học không nên đi quá sâu vào vấn đề này tránh bị phân tâm.
Vậy chúng ta muốn có một ngôn ngữ lập trình sử dụng ngôn ngữ tự nhiên của con người trong khi máy tính lại có ngôn ngữ tự nhiên riêng biệt không giống chúng ta. Đây là lúc cần phải có thông dịch viên.

Bộ thông dịch là gì ?

Bộ thông dịch có trách nhiệm chuyển đổi mã nguồn bạn viết (ở đây có thể hiểu mã nguồn này là sử dụng ngôn ngữ tự nhiên của con người) ra mã máy. Hay còn được biết tới là mã nhị phân — Binary Code. Quay lại phần ở trên đã mô tả về mã nhị phân chúng được biểu diễn bằng hai số 0 và 1. Chúng ta có thể hiểu mã nhị phân ở dạng như *mã đối tượng — Object Code*, các chương trình máy tính hay từ phổ biến được biết đến hiện nay là App.
Translators
Bộ thông dịch có thể được biết đến dưới bất kì cái tên nào dưới đây:
  • Interpreters
  • Compilers
  • Bộ thông dịch kết hợp (Hybrid — Kết hợp giữa Interpreters với compilers.)
  • Assemblers

Trình thông dịch — Interpreters

Một số ngôn ngữ sử dụng trình thông dịch. Trình thông dịch xử lý mã nguồn theo từng dòng và chạy mọi dòng mã trong chương trình hoặc ứng dụng cuối. Điều này có nghĩa trình biên dịch sẽ xử lý mã nguồn ngay cho đến khi nó gặp lỗi. Sau đó nó sẽ dừng lại và đưa ra thông báo về lỗi đang gặp phải. Sẽ mô tả chi tiết trong Phần 3. 
Ngôn ngữ Python là một ví dụ điển hình cho việc sử dụng trình thông dịch.

Trình biên dịch — Compiler

Trình biên dịch thì ngược lại hoàn toàn. Chúng chuyển đổi toàn bộ mã nguồn sang mã máy hay còn hiểu là mã nhị phân. Sau đó mới thực thi mã nguồn được chuyển đổi. Nếu có lỗi trong mã nguồn, trình biên dịch sẽ chỉ ra chúng trong thời gian biên dịch và đánh dấu nó. Sau đó quá trình biên dịch bị gián đoạn, và không có tập tin dạng nhị phân nào được sinh ra để thực thi.
Trình thông dịch sẽ dịch từng dòng mã và thực thi chúng trước khi đến dòng tiếp theo. Trình biên dịch sẽ dịch toàn bộ mã nguồn của một chương trình qua một file thực thi ở dạng nhị phân và thực thi cả file đó.
Hãy nhớ lại định nghĩa của chương trình máy tính ? Đó chính là một tập hợp các lệnh được thực hiện bởi máy tính.
Một chương trình đang thực thi được gọi là một xử lý — process. Các chương trình sử dụng các nguồn lực — tài nguyên trên hệ thống máy tính hoặc di động thông minh như là bộ nhớ tạm thời — memory, ổ cứng — hard disk và các tập tin hệ thống. Việc thực thi một chương trình còn có thể được gọi là khởi chạy — running.
Chúng ta sử dụng từ ‘run’ khi thực thi một chương trình trong máy tính. Thời gian khởi chạy các chương trình được hiểu là thời gian thực thi — run-time của chương trình đó.
Các chương trình thường được hiểu là các ứng dụng. Chúng ta có thể dễ thấy các chương trình có môi trường hoặc nền tảng chạy của riêng chúng, hoặc được thiết kế riêng cho mục đích đó. Như các ứng dụng web, chúng chạy trên các trình duyệt, điển hình như Google Spreadsheet. Hay ứng dụng di động, chúng chạy trên các điện thoại thông minh như ứng dụng trò chơi CandyCrush. Và cuối cùng là ứng dụng cho máy tính như là Evernote…
Một lần nữa, trình thông dịch sẽ ngay lập tức thực thi mã nguồn ngay trên tập tin gốc. Còn trình biên dịch sẽ chuyển đổi mã nguồn gốc qua mã máy rồi lưu ra một tập tin. Sau đó sẽ thực thi tập tin ở định dạng nhị phân đó. Việc mã nguồn được thực thi dạng thông dịch sẽ gặp sự cố trong thời gian chạy ngay sau khi thông dịch thành công. Xem thêm ở Phần 3. 

Bộ thông dịch kết hợp

Một bộ thông dịch kết hợp chính là sự kết hợp của hai cách thức thông dịch và biên dịch. Một ngôn ngữ lập trình như Java có sử dụng loại bộ thông dịch này. Đầu tiên Java sẽ biên dịch mã nguồn sang dạng Bytecode.
Mã Bytecode sẽ được thông dịch và thực thi bởi một engine là Máy Ảo — Virtual Machine. Điều này cho phép các bộ thông dịch này có thể chạy mã Bytecode trên các hệ điều hành khác nhau.

Hợp ngữ — Assembler

Trình hợp ngữ dùng cho việc chuyển đổi ngôn ngữ Assembly thành mã nhị phân.
Trong những phần này, chúng ta sẽ chỉ tập trung vào ngôn ngữ bậc cao thay vì ngôn ngữ bậc thấp.
Cách tốt nhất để hiểu về bộ thông dịch là xem chúng như là một chương trình trong chính chúng. Bạn cần tải về chúng về, và cài đặt chúng trên hệ thống máy tính của bạn và cố gắng hiểu cách làm việc cơ bản của chúng.

Một số câu hỏi thường gặp:

Câu hỏi chúng ta thường gặp nhất:
Tôi nên học ngôn ngữ lập trình nào đầu tiên ?
Có đến hàm trăm ngôn ngữ lập trình. Chúng được xếp hạng theo các tiêu chí như:
  • Tính phổ biến.
  • Cộng đồng.
  • Việc hỗ trợ có lâu dài hay không
  • Nó có dễ học.
  • Tính thương mại hoá.
Chúng cũng có thể được xếp hạng theo tiêu chí kĩ thuật:
  • Lập trình hàm.
  • Lập trình mệnh lệnh.
  • Tính tĩnh.
  • Định kiểu dữ liệu tường minh.
  • Định kiểu dữ liệu lỏng lẻo.
Một số ngôn ngữ có tính sư phạm nhiều hơn những ngôn ngữ khác. Một số ngôn ngữ danh cho mục đích dạy học và không dành cho mục đích thương mại. Có những ngôn ngữ được viết để dạy trẻ em học lập trình.
Có rất nhiều ngôn ngữ mạnh mẽ dễ cài đặt và học hỏi. Python và Golang là một trong những ngôn ngữ lập trình như vậy. Tôi thường giới thiệu nó cho người mới bắt đầu.

Nếu bạn quan tâm đến việc khám phá thêm về các lựa chọn cho cá nhân về ngôn ngữ “đầu tiên” nên chọn thì bảng nghiên cứu trên sẽ là một gợi ý tốt.
Khi bạn muốn học một ngôn ngữ mới, bạn nên biết mình cần một ngôn ngữ sử dụng trình biên dịch hay thông dịch. Và chọn bộ cài đặt trình thông dịch hay biên dịch đó lên máy tính của bạn để tiến hành viết mã.
Tôi khuyên bạn nên bắt đầu học sử dụng giao diện dòng lệnh CLI — Command Line Interface. Giao diện dòng lệnh là một cổng giao tiếp đầu cuối, nó chính là phần vỏ của hệ điều hành. Bạn hãy hiểu là giao diện dòng lệnh là một dạng thay thế cho giao diện đồ hoạ GUI — Graphical User Interface.
Trong giao diện đồ hoạ, bạn tương tác với máy tính thông qua con trỏ chuột. Bạn cũng phụ thuộc vào tính trực quan về thư mục, tập tin… và mọi thứ bạn đang tương tác đã thành thói quen.
Tuy nhiên, khi sử dụng giao diện dòng lệnh bạn tương tác với máy tính bằng cách sử dụng các lệnh mà bạn gõ vào thông qua dấu nhắc lệnh.
`$_`
Trong hệ điều hành Windows, giao diện dòng lệnh chúng ta sử dụng thông qua ứng dụng Command Prompt. Trên Mac và Linux thì chúng ta có cổng giao tiếp Terminal. Muốn có cổng giao tiếp giống với Terminal trên Windows chúng ta có thể sử dụng GIT Bash hoặc PowerShell.

Tiếp tục tìm hiểu

Bây giờ bạn đã hiểu được sơ lược qua lập trình là gì. Bạn cần chuẩn bị cho những dòng mã đầu tiên.
Để bắt đầu, bạn cần đến những điều sau:

Trắc nghiệm

1. Các công cụ bạn cần cho việc bắt đầu lập trình là gì ?
2. Câu lệnh nào bạn có thể sử dụng trong bash (giao diện dòng lệnh)?
  • Kiểm tra đường dẫn trong thư mục hiện hành.
  • Thay đổi đường dẫn truy cập vào thư mục có tên ‘bin’ (thư mục ‘bin’ nằm trong thư mục hiện tại bạn đang làm việc).
  • Tạo ra một thư mục mới có tên là ‘lib’.
  • Tạo ra một file mới có tên ‘book.py’
  • Hiển thị toàn bộ danh sách tập tin và thư mục có trong thư mục hiện hành.

Tổng kết

Chúng ta đã đi qua một loạt các vấn đề cơ bản về lập trình, với phần giới thiệu về Bộ thông dịch — Translators. Từ “mã nguồn — source code” đã không còn lạ lẫm với bạn. Chúng ta sẽ xem xét kĩ hơn về mã nguồn trong phần tiêp theo.

Đáp án cho phần trắc nghiệm

1. Đáp án:
  • Máy tính.
  • Trình soạn thảo mã nguồn.
  • Trình tương tác giao diện dòng lệnh — terminal.
  • Bộ thông dịch hoặc biên dịch.
2. Đáp án:
  • `pwd`
  • `cd bin`
  • `mkdir lib`
  • `touch book.py`
  • `ls`
Programming books

Đọc thêm:
.    .    .

Hãy tiếp tục ủng hộ và giữ kết nối với Vnknowledge các bạn nhé:
Xin cảm ơn các bạn!