
Phần mềm máy tính là tập hợp các lệnh thực hiện một nhiệm vụ cụ thể khi máy tính thực thi. Đa số thiết bị máy tính cần các chương trình để hoạt động chính xác.
Một phần mềm máy tính thường được tạo ra bởi lập trình viên qua ngôn ngữ lập trình. Từ mã nguồn có thể đọc được, trình biên dịch hoặc lắp ráp sẽ chuyển đổi thành mã máy mà máy tính có thể thực hiện. Hơn nữa, phần mềm có thể được chạy với sự hỗ trợ của trình thông dịch.
Một tập hợp các phần mềm máy tính, thư viện và dữ liệu liên quan được gọi là phần mềm. Các phần mềm máy tính có thể được phân loại theo các chức năng như phần mềm ứng dụng và phần mềm hệ thống. Phương pháp cơ bản để thực hiện một số tính toán hoặc thao tác được gọi là thuật toán.
Lịch sử
Máy lập trình nguyên thủy
Các máy lập trình đầu tiên xuất hiện trước khi máy tính kỹ thuật số được phát minh. Vào thế kỷ thứ 9, một thiết bị phát nhạc có thể lập trình được đã được chế tạo bởi anh em Musu người Ba Tư, với mô tả về một người thổi sáo cơ khí trong Sách thiết bị khéo léo. Vào năm 1206, kỹ sư Ả Rập Al-Jazari đã phát minh ra một máy đánh trống có thể lập trình, tự động tạo ra âm nhạc cơ học để chơi các nhịp điệu và mẫu trống khác nhau. Năm 1801, Joseph-Marie Jacquard đã sáng chế ra một khung dệt có khả năng dệt mẫu vải theo các thẻ đục lỗ, cho phép lặp lại các mẫu vải.
Công cụ phân tích

Vào năm 1837, Charles Babbage, được ảnh hưởng bởi máy dệt của Jacquard, đã cố gắng chế tạo Công cụ phân tích. Các thành phần của thiết bị tính toán được đặt tên dựa trên ngành dệt may. Trong ngành dệt, sợi được lấy từ kho để quay. Thiết bị này có một 'cửa hàng' - bộ nhớ chứa 1.000 số, mỗi số có 40 chữ số thập phân. Các số từ 'cửa hàng' sau đó được chuyển đến 'máy nghiền' (giống như CPU hiện đại) để xử lý. Một 'luồng' thực hiện các lệnh được lập trình. Nó được lập trình bằng cách sử dụng hai bộ thẻ đục lỗ - một bộ cho thao tác và bộ còn lại cho các biến đầu vào. Tuy nhiên, sau khi tiêu tốn hơn 17.000 bảng tiền tài trợ của chính phủ Anh, hàng nghìn bánh xe và bánh răng của máy bị kẹt và động cơ không bao giờ hoạt động đồng bộ.
Trong khoảng thời gian chín tháng từ năm 1842 đến 1843, Ada Lovelace đã dịch cuốn hồi ký của nhà toán học Ý Luigi Menabrea, bao gồm Công cụ phân tích. Bản dịch chứa Note G, chi tiết một phương pháp tính toán số Bernoulli bằng Công cụ phân tích. Ghi chú này được một số nhà sử học công nhận là chương trình máy tính đầu tiên được viết.
Máy Turing toàn năng
Năm 1936, Alan Turing giới thiệu mô hình lý thuyết của Máy Turing toàn năng, có khả năng mô phỏng mọi phép toán có thể thực hiện trên máy tính hoàn chỉnh Turing. Đây là một máy trạng thái hữu hạn với băng đọc/ghi dài vô hạn. Máy có thể di chuyển băng qua lại và thay đổi nội dung của nó khi thực hiện thuật toán. Máy bắt đầu ở trạng thái ban đầu, thực hiện một chuỗi các bước và dừng khi đạt đến trạng thái dừng. Máy này được một số người coi là nguồn gốc của kiến trúc máy tính được lưu trữ của John von Neumann (1946) cho 'Công cụ điện toán điện tử', hiện được gọi là kiến trúc von Neumann.
Máy tính lập trình nguyên thủy
Máy tính Z3, phát minh của Konrad Zuse vào năm 1941 tại Đức, là một máy tính kỹ thuật số có khả năng lập trình. Máy tính kỹ thuật số sử dụng điện để thực hiện các phép toán. Z3 được trang bị 2.400 rơle để tạo ra các mạch. Các mạch này cung cấp khả năng tính toán nhị phân với dấu phẩy động và bao gồm chín lệnh. Lập trình Z3 được thực hiện qua một bàn phím đặc biệt và băng đục lỗ.
ENIAC - Máy tính và tích hợp số điện tử (cuối năm 1945) là một máy tính đa năng, đầy đủ chức năng Turing, sử dụng 17.468 ống chân không để tạo ra các mạch. Nó bao gồm một loạt các Pascaline được kết nối với nhau. Với 40 bộ phận nặng 30 tấn, chiếm diện tích 1.800 foot vuông (167 m), và tiêu tốn $650 mỗi giờ (theo giá năm 1940) khi không hoạt động. ENIAC có 20 máy cộng số cơ sở 10 và lập trình mất tới hai tháng. Các bảng chức năng được lắp trên các bánh xe và phải được cuộn vào các bảng cố định. Kết nối giữa các bảng được thực hiện qua cáp đen nặng, mỗi bảng có 728 núm xoay. Lập trình cũng liên quan đến việc cấu hình khoảng 3.000 thiết bị chuyển mạch. Sửa lỗi một chương trình có thể mất đến một tuần. Các lập trình viên là nhóm phụ nữ được gọi là 'những cô gái ENIAC'. ENIAC có khả năng thực hiện các phép toán song song với nhiều bộ tích lũy hoạt động đồng thời trên các thuật toán khác nhau. Nó sử dụng máy đục lỗ cho đầu vào và đầu ra, được điều khiển bằng tín hiệu đồng hồ. ENIAC hoạt động trong 8 năm, thực hiện tính toán cho bom hydro, dự đoán thời tiết và tạo các bảng bắn cho súng cao xạ.
Manchester Baby (tháng 6 năm 1948) là máy tính đầu tiên sử dụng lưu trữ chương trình. Lập trình không còn dựa vào cáp di chuyển và quay số; thay vào đó, chương trình được lưu trữ dưới dạng số trong bộ nhớ. Chỉ có ba bit bộ nhớ có sẵn cho mỗi lệnh, nên máy bị hạn chế với tám lệnh. Có 32 thiết bị chuyển mạch để phục vụ lập trình.
Máy tính hiện đại

Các máy tính sản xuất trước những năm 1970 thường có các công tắc phía trước để lập trình. Chương trình được viết ra giấy để tham khảo. Một hướng dẫn được thể hiện qua cấu hình bật/tắt. Sau khi cấu hình hoàn tất, nút thực thi sẽ được nhấn và quá trình lặp lại. Chương trình cũng có thể được nhập thủ công bằng băng giấy hoặc thẻ đục lỗ. Sau khi phương tiện được nạp, địa chỉ khởi đầu được đặt qua các công tắc và nhấn nút thực thi.
Năm 1961, Burroughs B5000 được thiết kế đặc biệt để lập trình bằng ngôn ngữ ALGOL 60, với phần cứng hỗ trợ giai đoạn biên dịch trở nên đơn giản hơn.
Năm 1964, IBM System/360 ra đời, bao gồm sáu máy tính với kiến trúc lệnh đồng nhất. Model 30 là phiên bản nhỏ nhất và tiết kiệm nhất. Khách hàng có thể nâng cấp và duy trì phần mềm ứng dụng tương tự. Mỗi mô hình của System/360 hỗ trợ đa nhiệm, cho phép nhiều chương trình cùng tồn tại trong bộ nhớ. Khi một chương trình chờ đầu vào/đầu ra, chương trình khác có thể tiếp tục tính toán. Các mô hình cũng có khả năng giả lập các máy tính khác. Khách hàng có thể nâng cấp lên System/360 mà không cần thay đổi phần mềm từ IBM 7094 hoặc IBM 1401.
Lập trình máy tính
Lập trình máy tính là quá trình viết hoặc chỉnh sửa mã nguồn. Việc chỉnh sửa mã nguồn bao gồm kiểm tra, phân tích, tinh chỉnh và đôi khi phối hợp với các lập trình viên khác trong một dự án chung. Người thực hành kỹ năng này được gọi là lập trình viên, nhà phát triển phần mềm hoặc đôi khi là coder.
Quá trình kéo dài của lập trình máy tính thường được gọi là phát triển phần mềm. Thuật ngữ công nghệ phần mềm đang ngày càng trở nên phổ biến vì đây được xem là một lĩnh vực kỹ thuật chuyên sâu.
Ngôn ngữ lập trình

Các chương trình máy tính có thể được phân loại dựa trên mô hình ngôn ngữ lập trình được sử dụng. Hai mô hình chính là lập trình mệnh lệnh và lập trình khai báo.
Ngôn ngữ mệnh lệnh
Các ngôn ngữ lập trình mệnh lệnh xác định các thuật toán tuần tự thông qua việc sử dụng các khai báo, biểu thức và câu lệnh như sau:
- Một khai báo kết hợp tên biến với kiểu dữ liệu - ví dụ:
var x: integer; - Một biểu thức cho ra một giá trị - ví dụ:
2 + 2cho kết quả là 4 - Một câu lệnh có thể gán giá trị của biểu thức cho biến hoặc thay đổi luồng điều khiển của chương trình - ví dụ:
x:= 2 + 2; if x = 4 then do_something();
Một nhược điểm của ngôn ngữ mệnh lệnh là sự ảnh hưởng phụ của câu lệnh gán đối với các biến không cục bộ.
Ngôn ngữ khai báo
Các ngôn ngữ lập trình khai báo chỉ định những gì cần được tính toán mà không chỉ rõ cách thực hiện nó. Các chương trình khai báo bỏ qua luồng điều khiển và coi như là tập hợp các lệnh. Có hai loại ngôn ngữ khai báo chính: ngôn ngữ chức năng và ngôn ngữ logic. Nguyên tắc của ngôn ngữ chức năng (như Haskell) là không cho phép các hiệu ứng phụ, giúp dễ dàng lý luận về các chương trình như các hàm toán học. Nguyên tắc của ngôn ngữ logic (như Prolog) là xác định vấn đề cần giải quyết - mục tiêu - và để lại giải pháp chi tiết cho hệ thống Prolog. Mục tiêu được xác định bằng cách cung cấp một danh sách các điểm phụ. Sau đó, mỗi subgoal được xác định tiếp tục bằng cách cung cấp một danh sách các subgoals của nó, vv Nếu một con đường subgoals không tìm được giải pháp, thì subgoal sẽ bị quay lui và một con đường khác được thử nghiệm một cách hệ thống.
Biên dịch và thông dịch
Mã nguồn là chương trình máy tính được viết bằng ngôn ngữ lập trình mà con người có thể đọc được. Để chuyển mã nguồn thành dạng thực thi, có thể dùng trình biên dịch hoặc trình lắp ráp hợp ngữ, hoặc thực hiện trực tiếp bằng trình thông dịch.
Trình biên dịch chuyển mã nguồn từ ngôn ngữ lập trình sang mã đối tượng hoặc mã máy. Mã đối tượng cần được xử lý thêm để chuyển thành mã máy, bao gồm các lệnh của bộ xử lý trung tâm và sẵn sàng để thực thi. Các chương trình biên dịch thường được gọi là tệp thực thi, hình ảnh nhị phân, hoặc đơn giản là tệp nhị phân, đề cập đến định dạng lưu trữ mã thực thi.
Một số chương trình đối tượng được biên dịch và lắp ráp cần kết hợp với các mô-đun bằng tiện ích liên kết (linker) để tạo thành một chương trình thực thi hoàn chỉnh.
Trình thông dịch thực thi mã nguồn dòng-by-dòng từ ngôn ngữ lập trình. Nó giải mã từng câu lệnh và thực hiện hành động tương ứng. Lợi ích của trình thông dịch là có thể mở rộng thành phiên làm việc tương tác, nơi lập trình viên nhập và thực thi từng dòng mã ngay lập tức.
Một nhược điểm lớn của trình thông dịch là tốc độ thực thi chương trình thường chậm hơn so với chương trình biên dịch. Điều này là do trình thông dịch cần giải mã từng câu lệnh và thực thi chúng. Dù vậy, phát triển phần mềm có thể nhanh hơn nhờ vào khả năng kiểm tra ngay lập tức mà không cần bước biên dịch. Một hạn chế khác là trình thông dịch cần có mặt trên máy tính khi thực thi, trong khi các chương trình biên dịch không yêu cầu trình biên dịch trong quá trình chạy.
- Trí tuệ nhân tạo
- Lập trình tự động
- Firmware
- Phần mềm
- Lỗi phần mềm
| Tiêu đề chuẩn |
|
|---|
