Phần mềm
Lịch sử

Bài chi tiết: Lịch sử phần mềm
Một phác thảo (thuật toán) cho những gì sẽ là phần mềm đầu tiên đã được Ada Lovelace viết vào thế kỷ 19, cho Công cụ phân tích theo kế hoạch. Bà đã chứng minh cho thấy động cơ sẽ tính toán số Bernoulli như thế nào. Vì các chứng minh và thuật toán này, Ada Lovelace được coi là lập trình viên máy tính đầu tiên mặc dù bà chưa chạy chương trình bao giờ do công cụ mà bà viết chương trình không được tạo ra lúc đó.
Lý thuyết đầu tiên về phần mềm, trước khi tạo ra máy tính như chúng ta biết ngày nay, đã được Alan Turing đề xuất trong bài tiểu luận năm 1935, On Computable Numbers, with an Application to the Entscheidungsproblem (vấn đề quyết định).  Ông đã tạo ra cái gọi là máy Turing, một mô hình toán học của một cỗ máy trừu tượng có khả năng thực hiện chuỗi các phép toán thô sơ để di chuyển một cỗ máy từ trạng thái cố định này sang trạng thái cố định khác. Ý tưởng chính là để chứng minh về mặt toán học thực tế rằng bất kỳ trạng thái xác định trước của hệ thống luôn có thể đạt được bằng cách thực hiện tuần tự một tập hợp hữu hạn các lệnh cơ bản (chương trình) từ một tập hợp lệnh cố định.
Điều này cuối cùng đã dẫn đến việc tạo ra các lĩnh vực học thuật về khoa học máy tính và công nghệ phần mềm; Cả hai lĩnh vực nghiên cứu phần mềm và sáng tạo của nó. Khoa học máy tính là nghiên cứu lý thuyết về máy tính và phần mềm (tiểu luận của Turing là một ví dụ về khoa học máy tính), trong khi kỹ thuật phần mềm là ứng dụng của kỹ thuật và phát triển phần mềm.
Tuy nhiên, trước năm 1946, phần mềm chưa phải là chương trình được lưu trữ trong bộ nhớ của các máy tính kỹ thuật số chương trình được lưu trữ, như chúng ta đã hiểu. Thay vào đó, các thiết bị máy tính điện tử đầu tiên được thay thế để "lập trình lại" chúng sau mỗi lần máy tính hoạt động.  Máy tính điện tử đầu tiên của những năm 1940 và 1950 được lập trình lại bằng cách chuyển đổi công tắc bật tắt và kết nối lại dây cáp, đòi hỏi sự hiểu biết sâu sắc về cấu trúc bên trong của chúng. Đặc biệt, những chiếc máy như vậy thuộc về ENIAC (tuy nhiên, sau đó đã được sửa đổi để nó có thể, ít nhất một phần, được lập trình bằng cách sử dụng các thẻ đục lỗ).
Một bước quan trọng trong định hướng của máy tính hiện đại là sự chuyển đổi sang kiến trúc của John von Neumann, lần đầu tiên được thực hiện ở Vương quốc Anh, được phát triển dưới sự lãnh đạo của John R. Womersley và với sự tham gia của máy tính của Alan Turing, được gọi là Mark I. Chương trình đầu tiên được lưu trữ trong bộ nhớ của máy tính được đưa ra vào ngày 21 tháng 6 năm 1941. Để tạo điều kiện thuận lợi cho việc lập trình chiếc máy này, Turing đã phát minh ra một hệ thống mã hóa viết tắt, trong đó một chuỗi các ký tự teletype in trên băng đục lỗ được sử dụng để biểu diễn mã máy nhị phân.
Một trong những đồng nghiệp của Turing, John Mauchly, người sau này trở thành (cùng với John Presper Eckert) người đứng đầu và là người sáng lập của Eckert - Mauchly Computer Corporation, công ty phát triển các máy tính như BINAC và UNIVAC, đã giao cho nhân viên của mình tạo ra một trình dịch các công thức đại số. Mặc dù mục tiêu đầy tham vọng này đã không đạt được vào những năm 1940, nhưng dưới sự lãnh đạo của Mauchly, cái gọi là Mã ngắn đã được phát triển, trong đó các phép toán và biến được mã hóa bằng tổ hợp hai ký tự. Mã ngắn được thực hiện bằng trình thông dịch . Grace Hopper, làm việc từ đầu những năm 1950 về một tập hợp các quy trình toán học cho UNIVAC I, đã phát minh ra chương trình liên kết " A-0", được cung cấp một số nhận dạng, tìm nạp quy trình mong muốn từ một thư viện được lưu trữ trên băng từ và viết nó ra. trong không gian bộ nhớ được phân bổ.