Lịch sử phần mềm
Trước khi máy tính kỹ thuật số với chương trình được lưu trữ > Nguồn gốc của khoa học máy tính

Tính toán đã có từ thời cổ đại, với các thiết bị như bàn tính, cơ chế Antikythera và đồng hồ lâu đài lập trình của Al-Jazari. Tuy nhiên, các thiết bị này là phần cứng thuần túy và không có phần mềm - sức mạnh tính toán của chúng được gắn trực tiếp với hình thức và kỹ thuật cụ thể của chúng.
Phần mềm yêu cầu khái niệm về bộ xử lý đa năng - hiện được mô tả là máy Turing - cũng như bộ nhớ máy tính trong đó các bộ thói quen và chức năng toán học có thể sử dụng bao gồm các chương trình có thể được lưu trữ, khởi động và dừng riêng lẻ và chỉ xuất hiện gần đây trong lịch sử loài người.
Thuật toán máy tính được biết đến đầu tiên được Charles Babbage viết vào thế kỷ 19 cho Công cụ phân tích theo kế hoạch của ông, để dịch tác phẩm của Luigi Menabrea về các số Bernoulli thành các lệnh máy.  Tuy nhiên, điều này vẫn chỉ là lý thuyết - tình trạng kỹ thuật thô sơ thời đó trong cả cuộc của hai nhà toán học này tỏ ra không đủ để xây dựng Công cụ phân tích.
Lý thuyết hiện đại đầu tiên về phần mềm được Alan Turing đề xuất trong bài luận năm 1935 Các số có thể tính toán với một ứng dụng cho Entscheidungsproblem (bài toán quyết định).
Điều này cuối cùng đã dẫn đến việc tạo ra hai lĩnh vực học thuật là khoa học máy tính và kỹ thuật phần mềm, cả hai đều nghiên cứu phần mềm và việc tạo ra nó. Khoa học máy tính thiên về lý thuyết (bài 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 tập trung vào các mối quan tâm thực tế hơn.
Tuy nhiên, trước năm 1946, khái niệm phần mềm  – chương trình được lưu trữ trong bộ nhớ của máy tính kỹ thuật số chương trình được lưu trữ – vẫn chưa tồn tại. Thay vào đó, các thiết bị máy tính điện tử đầu tiên đã được tua lại để "lập trình lại" chúng. ENIAC, một trong những máy tính điện tử đầu tiên, được lập trình phần lớn bởi những phụ nữ đã từng làm việc như máy tính của con người.  kỹ sư sẽ cung cấp cho các lập trình viên bản thiết kế hệ thống dây điện ENIAC và mong họ tìm ra cách lập trình máy. Những phụ nữ làm công việc lập trình đã chuẩn bị cho ENIAC lần đầu tiên công khai, kết nối các bảng vá với nhau cho các cuộc biểu tình.   Kathleen Booth đã phát triển hợp ngữ vào năm 1950 để giúp việc lập trình các máy tính mà cô đang làm việc với tại Birkbeck College trở nên dễ dàng hơn.
Grace Hopper là một trong những lập trình viên đầu tiên của Harvard Mark I.  Sau đó, cô ấy đã tạo ra một hướng dẫn sử dụng 500 trang cho máy tính. Hopper thường bị cho là sai khi đặt ra các thuật ngữ "lỗi" và " gỡ lỗi ", khi cô tìm thấy một con bướm đêm trong Mark II, gây ra sự cố;  tuy nhiên, thuật ngữ này trên thực tế đã được sử dụng khi cô tìm thấy con bướm đêm. Hopper đã phát triển trình biên dịch đầu tiên và đưa ý tưởng của cô ấy từ việc làm việc trên máy tính Mark sang làm việc trên UNIVAC vào những năm 1950. Hopper cũng phát triển ngôn ngữ lập trình FLOW-MATIC để lập trình UNIVAC. Frances E. Holberton, cũng làm việc tại UNIVAC, đã phát triển một mã, C-10, cho phép các lập trình viên sử dụng đầu vào bàn phím và tạo ra Trình tạo Sắp xếp-Hợp nhất vào năm 1951.  Adele Mildred Koss và Hopper cũng tạo ra tiền thân của trình tạo báo cáo.