✨Lập trình máy tính

Lập trình máy tính

Lập trình máy tính hay lập chương trình máy tính, thường gọi tắt là lập trình (, hay programming), là việc lập ra chương trình làm việc cho máy có bộ xử lý, nói riêng là máy tính, để thực thi nhiệm vụ xử lý thông tin nào đó. Chương trình này gồm dãy các chỉ thị (hay lệnh) hợp lý để máy thực hiện theo trình tự thời gian.

Lập trình phải thực hiện cho tất cả các hệ thống xử lý thông tin, từ các dàn máy điện toán lớn, máy tính cá nhân (PC), đến các chip điều khiển lập trình được trong các khối điều khiển thiết bị các loại như trong máy đo đạc phân tích, vũ khí có điều khiển, máy giặt, lò vi sóng, v.v... và trong các thiết bị ngoại vi của máy tính như chip điều khiển ở card màn hình, cổng giao tiếp, v.v...

Dạng chương trình duy nhất mà máy tính có thể thực thi trực tiếp là ngôn ngữ máy hay mã máy, có dạng dãy các số nhị phân. Lập trình trực tiếp ở dạng mã máy là công việc tốn sức, khó kiểm tra và lệ thuộc phần cứng cụ thể. Vì thế giới lập trình phát triển ra các ngôn ngữ lập trình với hệ thống ký hiệu, từ khóa và cú pháp cụ thể để lập trình viên dễ viết mã nguồn ở dạng văn bản mà không quá lệ thuộc vào phần cứng, sau đó biên dịch (compile) ra mã máy.

Ngày nay lập trình ứng dụng trên các máy điện toán được hỗ trợ bằng các thư viện, các công cụ AI bot như chatgpt github codepilot cùng với nhiều AI bot khác, khả năng liên kết mã phát sinh từ các ngôn ngữ khác nhau cũng như viết mã lệnh tự động, và đặc biệt là sử dụng biểu tượng trực quan (visual) cho lập trình. Trong kỹ thuật điện toán việc lập ra bộ chương trình thường được gọi là phát triển phần mềm. Lập trình có các thành tố nghệ thuật, khoa học, toán học, và kỹ nghệ. Nội dung byte thường biểu diễn bằng đôi số hex. Để có được bộ mã này ngày nay người ta dùng ngôn ngữ lập trình để viết ra chương trình ở dạng văn bản và dùng trình dịch để chuyển sang mã máy.

Mã máy

Khi kỹ thuật điện toán ra đời chưa có ngôn ngữ lập trình dạng đại diện nào, thì phải lập trình trực tiếp bằng mã máy. Dãy byte viết ra được đục lỗ lên phiếu đục lỗ (punched card) và nhập qua máy đọc phiếu tới máy tính. Sau đó chương trình có thể được ghi vào băng/đĩa từ để sau này nhập nhanh vào máy tính. Ngôn ngữ máy được gọi là "ngôn ngữ lập trình thế hệ 1" (1GL, first-generation programming languages). Lúc đó có nhiều hãng sản xuất máy tính và mã máy chưa hoàn toàn thống nhất, nên lập trình gắn liền với máy của hãng.

Hợp ngữ

Sau đó các mã lệnh được thay thế bằng các tên gợi nhớ và trình được lập ở dạng văn bản (text) rồi dịch sang mã máy. Hợp ngữ (assembly languages) ra đời, là "ngôn ngữ lập trình thế hệ 2" (2GL, second-generation programming languages). Lập trình thuận lợi hơn, khi dịch có thể liên kết với thư viện chương trình con ở cả dạng macro (đoạn chưa dịch) và lẫn mã đã dịch.

Dẫu vậy người lập trình phải nắm chắc về hoạt động của hệ thống xử lý, về các thanh ghi (register), con trỏ (pointer) và vai trò của chúng thì mới tránh được lỗi. Lúc này bắt đầu có sự thống nhất quốc tế về các tập lệnh cần thiết trong kỹ thuật điện toán.

Trong kỹ thuật điện toán hợp ngữ hiện được dùng là ngôn ngữ bậc thấp (low-level programming languages) để tinh chỉnh ngôn ngữ bậc cao thực hiện truy nhập trực tiếp phần cứng cụ thể trong việc lập trình hệ thống, hoặc định tạo các hiệu ứng đặc biệt cho chương trình của mình.

Hợp ngữ hiện là phương tiện lập trình các vi điều khiển trong bảng/khối điều khiển thiết bị điện tử các loại, từ các máy đo, vũ khí, thiết bị dân sinh như máy giặt, lò vi sóng, v.v... Bảng lệnh của vi điều khiển này khác với của máy điện toán, nên hợp ngữ vi điều khiển cũng khác, và đơn giản hơn.

Lập trình mã máy và hợp ngữ cho ra chương trình chạy nhanh nhất trên cùng máy tính, vì nó chứa rất ít chỉ thị thừa hay chỉ thị rác, và giảm lượng mã nhờ việc đặt giá trị các thanh ghi được làm tắt. Các ngôn ngữ bậc cao khi dịch phải bố trí nhiều chỉ thị máy đảm bảo tính khái quát cao nhất, cùng với những câu lệnh thừa của người lập trình mà khi sửa chữa chưa kịp xóa đi.

Ngôn ngữ bậc cao

Ngôn ngữ bậc cao (high-level programming languages) hay "ngôn ngữ lập trình thế hệ 3" (3GL, third-generation programming languages) ra đời vào những năm 1950. Đây là các ngôn ngữ hình thức, dùng trong lập trình máy điện toán và không lệ thuộc vào hệ máy tính cụ thể nào. Nó giải phóng người lập trình ứng dụng làm việc trong hệ điều hành xác định mà không phải quan tâm đến phần cứng cụ thể. Các ngôn ngữ được phát triển liên tục với các dạng và biến thể mới, theo bước phát triển của kỹ thuật điện toán.

Những ngôn ngữ bậc cao thời kỳ đầu có FORTRAN lập ra năm 1954, COBOL năm 1959, BASIC năm 1963, Pascal năm 1970, C năm 1970, v.v... Chúng có sự khác nhau về từ khóa, ký hiệu, cú pháp, và cả về tổ chức các segment dữ liệu trong bộ nhớ. Sự phát triển lập trình dẫn đến ngôn ngữ C có những ưu việt trong lập trình và quản lý dữ liệu, nên được dùng nhiều, được phát triển tiếp và thành nền ý tưởng cho phát triển nhiều ngôn ngữ mới.

Những ngôn ngữ được dùng phổ biến hiện có ActionScript, C, C++, MATLAB, C#, Haskell, Java, JavaScript, Objective-C, Perl, PHP, Python, Ruby, Smalltalk, SQL, Visual Basic, và nhiều nữa.

Ngày nay các ngôn ngữ lập trình đều cung cấp môi trường soạn thảo mã nguồn, có yểm trợ cao về kiểm tra cú pháp. Một số ngôn ngữ lưu mã nguồn ở dạng văn bản. Song một số khác, thay vì được dịch ra mã máy, lại được lưu ở dạng mã gọi là Bytecode (hoặc Portable code), và có trình thông dịch tương ứng để thực thi dạng mã này. Bytecode được sử dụng trong ngôn ngữ lập trình Java của Sun Microsystems cũng như họ ngôn ngữ lập trình .NET gần đây của Microsoft và Visual Basic trước phiên bản .NET.

Các ngôn ngữ lập trình khác nhau hỗ trợ các phong cách lập trình khác nhau (còn gọi là các phương pháp lập trình). Một phần của công việc lập trình là việc lựa chọn một trong những ngôn ngữ phù hợp nhất với bài toán cần giải quyết. Các ngôn ngữ lập trình khác nhau đòi hỏi lập trình viên phải xử lý các chi tiết ở các mức độ khác nhau khi cài đặt các thuật toán. Thông thường, điều này dẫn tới thỏa hiệp giữa thuận lợi cho việc lập trình và hiệu quả của chương trình, hay thỏa hiệp giữa "thời gian lập trình" và "thời gian tính toán".

Phát triển phần mềm

Phần mềm là danh từ chỉ một gói gồm các chương trình máy tính và dữ liệu. Tài liệu đi kèm và bản quyền phần mềm cũng được coi là một phần quan trọng của phần mềm, mặc dù chúng không liên quan đến việc lập trình.

Quy trình xây dựng phần mềm bao gồm các công việc chính:

  • Phân tích yêu cầu (requirements analysis)
  • Đặc tả (specification)
  • Thiết kế (design and architecture)
  • Lập trình (coding)
  • Biên dịch (compilation)
  • Kiểm thử (testing)
  • Viết tài liệu (documentation)
  • Bảo trì (maintenance)

Chỉ dẫn

👁️ 4 | 🔗 | 💖 | ✨ | 🌍 | ⌚
**Lập trình máy tính** hay **lập chương trình máy tính,** thường gọi tắt là **lập trình** (, hay _programming_), là việc lập ra chương trình làm việc cho máy có bộ xử lý, nói riêng
nhỏ| Chương trình máy tính "Xin chào, thế giới" của [[Brian Kernighan (1978) ]] **Chương trình máy tính** là tập hợp các câu lệnh thực hiện một tác vụ cụ thể khi được máy tính
nhỏ|phải|A [[Graphical user interface|GUI Chương trình "Hello World", viết bằng ngôn ngữ Perl]] nhỏ|phải|Có thể thực thi dòng mã ở máy điện tử cầm tay [[PlayStation Portable homebrew|PlayStation Portable Sony.]] nhỏ|phải|Thử máy [[CNC ở Perspex]]
Trong lập trình hướng đối tượng, **lớp** (**class**) là một chương trình-mã-khuôn mẫu có thể mở rộng được để tạo các đối tượng, cung cấp giá trị khởi tạo cho trạng thái (biến thành viên)
Programming Paradigm hay **Phương thức lập trình** là một kiểu cơ bản của lập trình vi tính (Computer Programming). Paragigm với các khái niệm và sự trừu tượng dùng trong mô tả các thành phần
nhỏ Trong lập trình máy tính, **hằng số** (tiếng Anh: _constant_) là một giá trị mà không thể bị thay đổi bởi chương trình trong thời gian thực thi thông thường, ví dụ giá trị
Trong lập trình hướng đối tượng, **hàm hủy** (tiếng Anh: _destructor_, viết tắt: _dtor_) là một phương thức được gọi tự động để hủy bỏ một đối tượng. Điều này xảy ra khi thời gian
phải|nhỏ|402x402px|[[Mã nguồn của một chương trình máy tính đơn giản được viết bằng ngôn ngữ lập trình C. Khi được biên dịch và chạy, nó sẽ cho kết quả "Hello, world!".]] **Ngôn ngữ lập trình**
thumb|Minh họa mã nguồn [[Java (programming language)|Java với comment **mở đầu** được biểu thị bằng màu **đỏ** và comment **nội dòng** bằng màu **lục**. **Mã chương trình** là bằng màu **lam**.]]Trong lập
Trong lập trình máy tính, một **triển khai của ngôn ngữ lập trình** là một hệ thống để thực thi chương trình máy tính. Có hai cách tiếp cận chung để triển khai một ngôn
Trong lập trình hướng đối tượng, một **Đối tượng thượng đế** (tiếng Anh: God object) là một đối tượng _biết quá nhiều_ hoặc _làm quá nhiều_. Đối tượng thượng đế là một ví dụ về
Trong lập trình, **tham số** là biến được thu nhận bởi một chương trình con. Tại thời gian chạy, chương trình con sử dụng các giá trị được gán cho các tham số để thay
Trong khoa học máy tính, **bao đóng** (closure) là một hàm hay một tham chiếu tới một hàm cùng với môi trường tham chiếu - một bảng chứa tham chiếu đến mỗi biến không phải
**Đóng gói** (tiếng Anh: _encapsulation_) trong ngôn ngữ lập trình là thuật ngữ dùng để chỉ một trong hai khái niệm khác nhau nhưng có liên quan với nhau, đôi khi còn chỉ sự kết
Trong công nghệ phần mềm và lý thuyết ngôn ngữ lập trình, **nguyên tắc trừu tượng** (tiếng Anh: _abstraction principle_ hay _principle of abstraction_) là một phương châm cơ bản nhằm giảm sự trùng lặp
Các ngôn ngữ lập trình thường hỗ trợ một tập các **toán tử** (_operator_): nó có hành vi gần giống như hàm, nhưng có cú pháp và ngữ nghĩa khác với hàm thông thường. Các
[[Phần cứng|Phần cứng máy tính là nền tảng cho xử lý thông tin (sơ đồ khối). ]] **Lịch sử phần cứng máy tính** bao quát lịch sử của phần cứng máy tính, kiến trúc của
**Pascal** là một ngôn ngữ lập trình cho máy tính thuộc dạng mệnh lệnh và thủ tục, được Niklaus Wirth phát triển vào năm 1970. Pascal là ngôn ngữ lập trình đặc biệt thích hợp
Khoa học máy tính nghiên cứu các cơ sở lý thuyết của thông tin và tính toán, cùng với các kỹ thuật thực tiễn để thực hiện và
thumb|**[[Phép tính lambda** là một hệ thống hình thức để định nghĩa hàm, ứng dụng hàm và đệ quy được Alonzo Church đề xuất vào những năm 193x.]] **Lý thuyết ngôn ngữ lập trình** (thường
thumb|right|upright=1.2|Trẻ em được dạy cách sử dụng máy tính xách tay cá nhân; màn hình CRT, bàn phím và chuột máy tính để bàn cũ hơn (thời 1990) có thể nhìn thấy trong nền. **Máy
**Hacker** là người hiểu rõ hoạt động của hệ thống máy tính, mạng máy tính, có thể viết hay chỉnh sửa phần mềm, phần cứng máy tính để làm thay đổi, chỉnh sửa nó với
nhỏ|220x220px| Trẻ em chơi _[[Paperboy (trò chơi điện tử)|Paperboy_ trên CPC Amstrad 464 vào năm 1988 ]] nhỏ|220x220px| Hầu hết các máy tính gia đình, như Máy tính màu Tandy 3 này, bao gồm một
Đây là danh sách các thuật ngữ tìm thấy trong lập trình hướng đối tượng. Một số có liên quan đến lập trình hướng đối tượng và một số thì không. Lưu ý rằng, các
**Lập trình hệ thống** là công việc viết những phần mềm cho hệ thống (máy tính). Điểm khác biệt chủ yếu của lập trình hệ thống đối với lập trình ứng dụng là lập trình
Trong khoa học máy tính, một hàm hay biểu thức được cho là có **hiệu ứng lề** hay **tác dụng phụ** (_side effect_) nếu nó thay đổi một số trạng thái ngoài tầm vực của
Trong lập trình máy tính, **tầm vực** (tiếng Anh: _scope_) của một ràng buộc tên – liên kết tên với một thực thể, ví dụ như biến – là một vùng của chương trình máy
Trong lập trình máy tính, một **biến** (_variable_) hay **vô hướng** (_scalar_) là một vị trí lưu trữ gắn liền với một tên tượng trưng (_định danh_) liên quan, chứa một số lượng thông tin
Trong lập trình máy tính, **lập trình ký hiệu** (tiếng Anh: _symbolic programming_) là một Mẫu hình lập trình trong đó chương trình có thể sử dụng những công thức và thành phần của chương
Sách - Kỹ Thuật Lập Trình Python Nâng Cao- Bìa mềm Tặng sổ tay xương rồng Sổ tay ngẫu nhiên 1 trong 4 hình Chúc mừng các bạn, những lập trình viên Python tiềm nă
thumb|Con trỏ **'a**' chỉ đến địa chỉ bộ nhớ liên kết tới biến **'b**'. Trong sơ đồ này, kiến trúc điện toán sử dụng cùng [[không gian địa chỉ và dữ liệu nguyên thủy cho
Về cuốn sách này Đến bất kỳ hiệu sách lớn nào trực tiếp hoặc trực tuyến, bạn sẽ tìm thấy rất nhiều sách Python. Nếu đã quen với việc đọc sách bạn sẽ có một
Về cuốn sách này Đến bất kỳ hiệu sách lớn nào trực tiếp hoặc trực tuyến, bạn sẽ tìm thấy rất nhiều sách Python. Nếu đã quen với việc đọc sách bạn sẽ có một
nhỏ|Andersson tại Retro Gathering năm 2009 **Johan Andersson** (sinh ngày 28 tháng 8 năm 1974) là trưởng nhóm lập trình game và người quản lý studio Paradox Tinto, một chi nhánh của Paradox Interactive tại
Trong điện toán và truyền thông, **payload** là phần dữ liệu thực sự được truyền đi của một gói tin giữa hai phía, mà không chứa dữ liệu giao thức hay siêu dữ liệu -
Trong lập trình máy tính, **câu lệnh gán** (tiếng Anh: _assignment statement_) sẽ đặt và/hay thiết lập lại giá trị chứa trong vị trí lưu trữ vốn được biểu thị bởi một tên biến; nói
Trong lập trình máy tính, **lập trình hướng sự kiện**, hay chính xác là **lập trình dẫn động bằng sự kiện** (tiếng Anh: **Event-driven programming**), là một mẫu hình lập trình trong đó luồng của
Trong lập trình máy tính, một **khối** (tiếng Anh: _block_) hay **khối mã** (_code block_) là một cấu trúc từ vựng của mã nguồn được nhóm lại với nhau. Các khối bao gồm một hay
Mục đích của **danh sách các ngôn ngữ lập trình** này là bao gồm tất cả các ngôn ngữ lập trình hiện tại đáng chú ý, được sử dụng hiện tại và những ngôn ngữ
Trong lập trình máy tính, **kết dính** (tiếng Anh: _cohesion_) đề cập đến _mức độ mà các yếu tố bên trong một mô đun thuộc về nhau_. Do vậy, sự kết dính đo lường sức
**Lập trình tổng quát** (tiếng Anh: _generic programming_) là một dạng lập trình máy tính mà trong đó thuật toán được viết theo cách kiểu _được-xác-định-sau_ và sau đó được _khởi tạo_ (_instantiate_) nếu cần
Trong lập trình máy tính, **khai báo** (tiếng Anh: _declaration_) là một cấu trúc ngôn ngữ đặc tả các đặc tính của một định danh: nó công bố một từ (định danh) "có nghĩa là
**Bar** là một biến siêu cú pháp được sử dụng nhiều trong khoa học máy tính để đại diện cho những khái niệm trừu tượng và có thể dùng để đại diện cho bất kỳ
phải|nhỏ|277x277px| Minh họa của một ứng dụng sử dụng libvorbisfile để phát file Ogg Vorbis Trong khoa học máy tính, **thư viện** là tập hợp các tài nguyên không biến động được sử dụng bởi
Đây là danh sách nguồn gốc các thuật ngữ liên quan đến máy tính (hay **danh sách từ nguyên thuật ngữ máy tính**). Nó có liên quan đến cả phần cứng và phần mềm máy
**Lập trình hướng đối tượng** () là một mẫu hình lập trình dựa trên khái niệm "đối tượng", mà trong đó, đối tượng chứa đựng các dữ liệu trong các trường, thường được gọi là
Biểu trưng chính thức nhỏ|250x250px|Một biển báo điện tử hiển thị ngày 3 tháng 1 năm 1900 vào ngày 3 tháng 1 năm 2000 ở [[Pháp.]] **Sự cố máy tính năm 2000** (còn được gọi
nhỏ|300x300px| [[Petr Mitrichev (trái) và Gennady Korotkevich (phải), hai lập trình viên thi đấu nổi tiếng trong một cuộc thi.]] **Lập trình thi đấu** () là một môn thể thao trí tuệ trong đó những
phải|nhỏ|325x325px|[[Kết xuất hex của sâu Blaster, hiển thị một thông điệp lập trình viên sâu này để lại cho Giám đốc điều hành Microsoft Bill Gates]] nhỏ|325x325px|Sự lây lan của [[Conficker|sâu Conficker]] **Sâu máy tính**
**John McCarthy** (4 tháng 9 năm 1927 - 24 tháng 10 năm 2011) là một nhà khoa học máy tính và nhà khoa học nhận thức người Mỹ. McCarthy là một trong những người sáng