Lịch sử phần mềm

Phần mềm là các lệnh được lập trình mà được lưu trữ trong bộ nhớ được lưu trữ của các máy tính kỹ thuật số để bộ xử lý thực hiện. Phần mềm là một sự phát triển gần đây trong lịch sử loài người và nó là nền tảng của Thời đại Thông tin.

Các chương trình của Charles Babbage cho Công cụ phân tích của ông vào thế kỷ 19 thường được coi là người sáng lập ra ngành này, mặc dù những nỗ lực của cả hai nhà toán học vẫn chỉ là lý thuyết, vì công nghệ của thời đại Babbage sống là không đủ để chế tạo máy tính. Alan Turing được ghi nhận là người đầu tiên đưa ra lý thuyết cho phần mềm vào năm 1935, dẫn đến hai lĩnh vực học thuật về khoa học máy tính và công nghệ phần mềm.

Thế hệ phần mềm đầu tiên cho các máy tính kỹ thuật số được lưu trữ sớm vào cuối những năm 1940 có các hướng dẫn được viết trực tiếp bằng mã nhị phân, thường được viết cho các máy tính lớn. Sau đó, sự phát triển của các ngôn ngữ lập trình hiện đại cùng với sự tiến bộ của máy tính gia đình sẽ giúp mở rộng đáng kể phạm vi và chiều rộng của phần mềm có sẵn, bắt đầu với ngôn ngữ lắp ráp và tiếp tục thông qua lập trình chức năng và mô hình lập trình hướng đối tượng.

== 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.

== Những ngày đầu của phần mềm máy tính (1948–1979) ==
Trong bản thảo của mình "Lý thuyết toán học về giao tiếp", Claude Shannon (1916–2001) đã đưa ra một phác thảo về cách logic nhị phân có thể được triển khai để lập trình máy tính. Sau đó, các lập trình viên máy tính đầu tiên sử dụng mã nhị phân để hướng dẫn máy tính thực hiện các tác vụ khác nhau. Tuy nhiên, quá trình này rất gian khổ. Các nhà lập trình máy tính phải cung cấp các chuỗi mã nhị phân dài để cho máy tính biết dữ liệu nào cần lưu trữ. Mã và dữ liệu phải được tải vào máy tính bằng nhiều cơ chế tẻ nhạt khác nhau, bao gồm thao tác vặn công tắc hoặc đục lỗ tại các vị trí xác định trước trong thẻ và tải những thẻ đục lỗ này vào máy tính. Với những phương pháp như vậy, nếu sai sót, toàn bộ chương trình có thể phải được tải lại từ đầu.

Lần đầu tiên một máy tính chương trình lưu trữ giữ một phần mềm trong bộ nhớ điện tử và thực thi nó thành công, là 11 giờ sáng ngày 21 tháng 6 năm 1948, tại Đại học Manchester, trên máy tính Manchester Baby. Nó được viết bởi Tom Kilburn và tính hệ số cao nhất của số nguyên 2^18 = 262,144. Bắt đầu với một số chia thử lớn, nó thực hiện phép chia với số bị chia 262,144 bằng phép trừ lặp đi lặp lại, sau đó kiểm tra xem phần dư có bằng không hay không. Nếu không, nó giảm ước số thử nghiệm đi một và lặp lại quá trình. Google đã tôn vinh Manchester Baby, kỷ niệm nó là "sự ra đời của phần mềm". Vào cuối những năm 1950 và đầu những năm 1960, một sự đổi mới phổ biến là sự phát triển của các ngôn ngữ máy tính như Fortran, COBOL và BASIC. Những ngôn ngữ này cho phép các chương trình được chỉ định một cách trừu tượng, không phụ thuộc vào các chi tiết chính xác của kiến trúc phần cứng của máy tính. Các ngôn ngữ này chủ yếu chỉ nhằm mục đích xác định các phép tính số.

COBOL được hình thành lần đầu tiên khi Mary K. Hawes triệu tập một cuộc họp (bao gồm cả Grace Hopper) vào năm 1959 để thảo luận về cách tạo ra một ngôn ngữ máy tính để chia sẻ giữa các doanh nghiệp. Sự đổi mới của Hopper với COBOL đang phát triển một cách biểu tượng mới để viết chương trình. Chương trình của cô là tài liệu tự ghi lại. Betty Holberton đã giúp chỉnh sửa ngôn ngữ được nộp cho Văn phòng In ấn Chính phủ vào năm 1960. FORMAC được phát triển bởi Jean E. Sammet vào những năm 1960. Cuốn sách của cô, "Programming Languages: History and Fundamentals" (1969), đã trở thành một văn bản gây ảnh hưởng lớn. 

=== Chương trình Apollo ===
Chương trình Apollo lên Mặt Trăng phụ thuộc vào phần mềm để lập trình máy tính trong các mô-đun hạ cánh. Các máy tính được lập trình bằng một ngôn ngữ gọi là "Basic" (không có quan hệ gì với ngôn ngữ lập trình BASIC được phát triển tại Dartmouth cùng thời điểm). Phần mềm cũng có một trình thông dịch được tạo thành từ một loạt các quy trình và một trình điều hành (giống như một hệ điều hành hiện đại), chỉ định chương trình nào sẽ chạy và khi nào. Cả hai đều được thiết kế bởi Hal Laning. Margaret Hamilton, người trước đây đã liên quan đến các vấn đề về độ tin cậy của phần mềm khi làm việc trên hệ thống phòng không SAGE của Hoa Kỳ, cũng là một phần của nhóm phần mềm Apollo. Hamilton phụ trách phần mềm bay trên máy bay cho các máy tính Apollo. Hamilton cảm thấy rằng các hoạt động phần mềm không chỉ là một phần của cỗ máy mà còn có sự tham gia phức tạp của những người vận hành phần mềm. Hamilton cũng là người đặt ra thuật ngữ " kỹ thuật phần mềm " khi cô đang làm việc tại NASA.

"Phần mềm" thực tế cho các máy tính trong chương trình Apollo được tạo thành từ các sợi dây được luồn qua các lõi từ tính. Việc dây đi qua lõi từ, đại diện cho "1" và việc dây đi quanh lõi, đại diện cho "0." Mỗi lõi lưu trữ 64 bit thông tin. Hamilton và những người khác sẽ tạo ra phần mềm này bằng cách đục lỗ trên thẻ đục lỗ, sau đó được xử lý trên máy tính lớn Honeywell nơi phần mềm có thể được mô phỏng. Khi mã "rắn", sau đó nó được gửi để dệt vào các lõi từ tính tại Raytheon, nơi những người phụ nữ được gọi là "Little Old Ladies" làm việc trên dây. Bản thân chương trình là "không thể phá hủy" và thậm chí có thể chịu được các tia sét, điều đã xảy ra với Apollo 12. Việc nối dây các máy tính mất vài tuần để thực hiện, việc phát triển phần mềm bị đóng băng trong thời gian đó.

Trong khi sử dụng trình mô phỏng để kiểm tra chương trình, Hamilton đã phát hiện ra những cách mà mã nguồn có thể tạo ra các lỗi nguy hiểm khi con người mắc lỗi trong khi sử dụng nó. NASA tin rằng các phi hành gia sẽ không mắc sai lầm do quá trình đào tạo của họ. Hamilton không được phép lập trình mã nguồn để ngăn các lỗi dẫn đến sự cố hệ thống, vì vậy cô đã chú thích mã trong tài liệu chương trình. Ý tưởng của cô ấy để thêm mã kiểm tra lỗi đã bị từ chối vì lý do "quá mức". Tuy nhiên, những gì Hamilton dự đoán đã xảy ra trên chuyến bay Apollo 8, khi lỗi của con người khiến máy tính xóa sạch toàn bộ dữ liệu điều hướng.

=== Đóng gói phần mềm với phần cứng và các vấn đề pháp lý của nó ===
Sau đó, phần mềm được bán cho nhiều khách hàng bằng cách "đóng gói kèm" với phần cứng bởi các nhà sản xuất thiết bị gốc (OEM) như Data General, Digital Equipment và IBM. Khi một khách hàng mua một máy tính mini, lúc đó là máy tính nhỏ nhất trên thị trường, máy tính này không được cài đặt sẵn phần mềm mà cần phải được cài đặt bởi các kỹ sư do OEM thuê.

Việc đóng gói này thu hút sự chú ý của các cơ quan quản lý chống độc quyền của Hoa Kỳ, những người đã kiện IBM về việc "buộc" không đúng cách vào năm 1969, cáo buộc rằng đó là vi phạm chống độc quyền mà khách hàng muốn có được phần mềm của họ cũng phải mua hoặc thuê phần cứng của họ để làm như vậy. Tuy nhiên, vụ kiện đã bị Bộ Tư pháp Hoa Kỳ loại bỏ, sau nhiều năm, với kết luận là "không có cơ sở".

Data General cũng gặp phải các vấn đề pháp lý liên quan đến việc đóng góimặc dù trong trường hợp này, đó là do một vụ kiện dân sự từ một đối thủ sẽ là đối thủ. Khi Data General giới thiệu Data General Nova, một công ty tên là Digidyne muốn sử dụng hệ điều hành RDOS trên bản sao phần cứng của riêng mình. Data General từ chối cấp phép phần mềm của họ và yêu cầu "quyền đóng gói" của họ. Tòa án Tối cao Hoa Kỳ đặt ra một tiền lệ có tên là "Digidyne v." "Data General" vào năm 1985 bằng cách để phán quyết của tòa án kháng cáo vòng 9 về vụ kiện, và Data General cuối cùng đã bị buộc phải cấp phép cho hệ điều hành vì người ta phán quyết rằng việc hạn chế giấy phép chỉ cho phần cứng DG là một "thỏa thuận ràng buộc" bất hợp pháp. Mặc dù Tòa án quận lưu ý rằng "không có hội thẩm hợp lý nào có thể nhận thấy rằng trong thị trường rộng lớn và năng động với nhiều đối thủ cạnh tranh lớn hơn", Data General "có sức mạnh thị trường để hạn chế thương mại thông qua một thỏa thuận ràng buộc bất hợp pháp", ràng buộc hoạt động hệ thống phần cứng được cai trị như là bất hợp pháp sau khi kháng cáo.

Vào năm 2008, Psystar Corporation đã bị Apple Inc. kiện vì đã phân phối các bản sao Macintosh trái phép có cài sẵn OS X và bị phản đối. Một trong những lập luận trong bộ phản đối - trích dẫn trường hợp Data General - là Apple thống trị thị trường máy tính tương thích OS X bằng cách gắn hệ điều hành này vào máy tính Apple một cách bất hợp pháp. Thẩm phán Tòa án quận William Alsup đã bác bỏ lập luận này, nói rằng, như Tòa án quận đã phán quyết trong vụ Data General hơn 20 năm trước, rằng thị trường liên quan không chỉ đơn giản là một hệ điều hành (Mac OS) mà là "tất cả các" hệ điều hành PC, "bao gồm cả" Mac OS và lưu ý rằng Mac OS không có vị trí thống trị trong thị trường rộng lớn hơn đó. Phán quyết của Alsup cũng lưu ý rằng tiền lệ Data General đáng ngạc nhiên rằng việc buộc các sản phẩm có bản quyền luôn là bất hợp pháp kể từ đó đã bị phán quyết trong vụ kiện Illinois Tool Works Inc. v. Independent Ink, Inc. 

=== Phần mềm đóng gói (Cuối những năm 1960 đến nay) ===
Một ngành công nghiệp sản xuất phần mềm đóng gói độc lập - phần mềm không được sản xuất "dùng một lần" cho một khách hàng cá nhân, cũng không "đi kèm" với phần cứng máy tính - bắt đầu phát triển vào cuối những năm 1960.

=== Unix (những năm 1970 – nay) ===
Unix là một hệ điều hành ban đầu đã trở nên phổ biến và có ảnh hưởng rất lớn, và vẫn tồn tại cho đến ngày nay. Biến thể phổ biến nhất của Unix ngày nay là macOS (trước đây được gọi là OS X và Mac OS X), trong khi Linux có liên quan chặt chẽ với Unix.

=== Sự phát triển của máy vi tính ===
Vào tháng 1 năm 1975, Micro Instrumentation and Telemetry Systems bắt đầu bán bộ vi máy tính Altair 8800 của mình theo đơn đặt hàng qua thư. Microsoft đã phát hành sản phẩm đầu tiên của mình là Altair BASIC vào cuối năm đó và những người có sở thích bắt đầu phát triển các chương trình để chạy trên những bộ dụng cụ này. Tiny BASIC đã được xuất bản dưới dạng một chương trình nhập liệu trên "Tạp chí của Tiến sĩ Dobb", và được hợp tác phát triển.

Ví dụ, vào năm 1976, Peter R. Jennings đã tạo ra chương trình "Microchess" của mình cho bộ công cụ KIM-1 của MOS Technology, nhưng vì nó không đi kèm với ổ băng, ông sẽ gửi mã nguồn trong một tập sách nhỏ cho khách hàng đặt hàng qua thư của mình., và họ sẽ phải gõ toàn bộ chương trình bằng tay. Năm 1978, Kathe và Dan Spracklen phát hành nguồn chương trình "Sargon (cờ vua)" của họ trên một tạp chí máy tính. Jennings sau đó chuyển sang bán băng giấy, và cuối cùng là băng cassette nhỏ gọn với chương trình trên đó.

Việc nhập mã nguồn từ tạp chí máy tính là một quá trình bất tiện và chậm chạp, và một lần gõ saihoặc tệ hơn, in saiký tự có thể làm cho chương trình không hoạt động được, nhưng mọi người vẫn làm như vậy. (Công nghệ nhận dạng ký tự quang học, về mặt lý thuyết có thể được sử dụng để quét trong danh sách thay vì sao chép chúng bằng tay, vẫn chưa được sử dụng rộng rãi.)

Ngay cả với sự phổ biến của catridge và băng cassette trong những năm 1980 để phân phối phần mềm thương mại, các chương trình miễn phí (chẳng hạn như các chương trình giáo dục đơn giản nhằm mục đích dạy kỹ thuật lập trình) vẫn thường được in ra, vì nó rẻ hơn việc làm và gắn băng cassette vào tạp chí thời sự.

Tuy nhiên, cuối cùng sự kết hợp của bốn yếu tố đã đưa việc in danh sách mã nguồn hoàn chỉnh của toàn bộ các chương trình trên tạp chí máy tính đến hồi kết thúc:

- các chương trình bắt đầu trở nên rất lớn
- đĩa mềm bắt đầu được sử dụng để phân phối phần mềm, và sau đó đã giảm giá
- những người bình thường bắt đầu sử dụng máy tínhvà muốn một cách đơn giản để chạy một chương trình
- tạp chí máy tính bắt đầu bao gồm băng cassette hoặc đĩa mềm với các phiên bản phần mềm miễn phí hoặc dùng thử trên đó

Rất nhanh chóng, phần mềm thương mại bắt đầu bị vi phạm bản quyền, và các nhà sản xuất phần mềm thương mại rất không hài lòng về điều này. Bill Gates, người đồng sáng lập Microsoft, là người sớm có đạo đức chống vi phạm bản quyền phần mềm với Thư ngỏ gửi những người dùng máy tính nghiệp du, nổi tiếng vào năm 1976.

== Những năm 1980 – nay ==
Trước khi có máy vi tính, một chương trình phần mềm thành công thường bán được tới 1.000 bản với giá 50.000–60.000 USD mỗi bản. Vào giữa những năm 1980, phần mềm máy tính cá nhân đã bán được hàng nghìn bản với giá 50–700 đô la mỗi bản. Các công ty như Microsoft, MicroPro và Lotus Development có doanh thu hàng năm hàng chục triệu đô la. Tương tự, họ thống trị thị trường châu Âu với các phiên bản nội địa hóa của các sản phẩm đã thành công ở quốc gia khác.

Một thời điểm quan trọng trong lịch sử máy tính là việc công bố các thông số kỹ thuật của máy tính cá nhân IBM vào những năm 1980 do Philip Don Estridge, nhân viên của IBM thực hiện, đã nhanh chóng dẫn đến sự thống trị của PC trên thị trường máy tính để bàn và máy tính xách tay sau này trên toàn thế giới, một sự thống trị vẫn tiếp tục cho đến ngày nay. Microsoft, bằng cách đàm phán thành công với IBM để phát triển hệ điều hành đầu tiên cho PC (MS-DOS), được hưởng lợi rất nhiều từ thành công của PC trong những thập kỷ tiếp theo, nhờ sự thành công của MS-DOS và phần mềm hỗ trợ kiêm sản phẩm kế nhiệm của nó, Microsoft Windows. Chiến thắng trong cuộc đàm phán này là một thời điểm quan trọng trong lịch sử của Microsoft.

=== Những phát triển gần đây ===
==== Cửa hàng ứng dụng ====
Các ứng dụng dành cho thiết bị di động (điện thoại di động và máy tính bảng) đã được gọi là "ứng dụng" trong những năm gần đây. Apple đã chọn bán ứng dụng iPhone và iPad thông qua App Store của họ, và do đó, cả hai ứng dụng bác sĩ thú y và cắt giảm mọi ứng dụng trả phí được bán. Apple không cho phép các ứng dụng có thể được sử dụng để đi vào kho ứng dụng của họ (ví dụ: các máy ảo như máy ảo Java hoặc Flash).

Ngược lại, nền tảng Android có nhiều cửa hàng ứng dụng có sẵn và người dùng thường có thể chọn cái nào để sử dụng (mặc dù Google Play yêu cầu thiết bị tương thích hoặc đã được root).

Động thái này đã được nhân rộng cho các hệ điều hành máy tính để bàn với Phần mềm GNOME (dành cho Linux), Mac App Store (dành cho macOS) và Windows Store (dành cho Windows). Tất cả các nền tảng này vẫn như mọi khi, không độc quyền: chúng cho phép các ứng dụng được cài đặt từ bên ngoài cửa hàng ứng dụng và thực sự từ các cửa hàng ứng dụng khác.

Sự gia tăng bùng nổ về mức độ phổ biến của các ứng dụng, đối với iPhone nói riêng mà còn đối với Android, đã dẫn đến một loại "cơn sốt vàng", với một số lập trình viên hy vọng dành một lượng thời gian đáng kể để tạo ra các ứng dụng với hy vọng làm cho nó trở nên phổ biến và kiếm được nhiều tiền từ đó. Giống như trong những cuộc đổ xô đi tìm vàng thật, không phải tất cả những doanh nhân đầy hy vọng này đều thành công.

== Chuẩn hóa phát triển phần mềm ==
Sự phát triển của các chương trình giảng dạy trong khoa học máy tính đã dẫn đến những cải tiến trong phát triển phần mềm. Các thành phần của các chương trình giảng dạy này bao gồm:

1. Lập trình cấu trúc và hướng đối tượng
2. Cấu trúc dữ liệu
3. Phân tích các thuật toán
4. Ngôn ngữ hình thức và cấu trúc trình biên dịch
5. Thuật toán đồ họa máy tính
6. Sắp xếp và Tìm kiếm
7. Phương pháp số, Tối ưu hóa và thống kê
8. Trí tuệ nhân tạo và Máy học

== Cách thức phần mềm đã ảnh hưởng đến phần cứng ==
Khi ngày càng có nhiều chương trình đi vào lĩnh vực phần sụn, và bản thân phần cứng trở nên nhỏ hơn, rẻ hơn và nhanh hơn theo dự đoán của định luật Moore, thì ngày càng nhiều loại chức năng của máy tính được thực hiện bởi phần mềm, đã gia nhập hàng ngũ phần cứng, như ví dụ với các đơn vị xử lý đồ họa. (Tuy nhiên, thay đổi đôi khi đi theo hướng khác vì chi phí hoặc các lý do khác, chẳng hạn như với softmodem và microcode.)

Hầu hết các công ty phần cứng ngày nay có nhiều lập trình viên phần mềm trong biên chế hơn các nhà thiết kế phần cứng, vì các công cụ phần mềm đã tự động hóa nhiều nhiệm vụ của các kỹ sư bảng mạch in (PCB).