Sự cần thiết phải lập trình máy móc đã có từ trước khi máy tính phát triển. Ví dụ nổi tiếng nhất về điều này là trong sản xuất dệt may. Nếu bạn chỉ muốn dệt một chiếc khăn trải bàn lớn màu đỏ, bạn có thể chỉ cần cho sợi chỉ đỏ vào khung dệt và để nó chạy. Nhưng nếu bạn muốn miếng vải có họa tiết như sọc hoặc kẻ sọc thì sao? Công nhân sẽ phải định hình lại khung dệt theo quy định của mẫu, nhưng việc này tốn nhiều công sức khiến các loại vải có hoa văn trở nên đắt đỏ.
Vào năm 1801, Joseph Marie Jaccquard đã phát triển một máy dệt có thể lập trình được, mà ông đã trình diễn lần đầu. Mẫu cho mỗi hàng của vải được xác định bằng một thẻ bấm lỗ (punch card). Sự hiện diện hay không tồn tại của thẻ được xác định nếu một mối đe dọa cụ thể được giữ ở mức cao hay thấp trong khung dệt sao cho sợi ngang được gọi là sợi ngang đi qua bên trên hoặc bên dưới sợi. Để thay đổi mô hình trên các hàng, các thẻ đục lỗ này được sắp xếp thành các chuỗi dài, tạo thành một chuỗi lệnh cho khung dệt. Nhiều người coi khung cửi của Jaccquard là hình thức lập trình sớm nhất.
Jaccquard  loom
Jaccquard loom
Thẻ bấm lỗ (punch card) , hóa ra là một cách lưu trữ dữ liệu rẻ, đáng tin cậy, dễ đọc. Gần một thế kỷ sau, thẻ bấm lỗ được sử dụng để lập bảng điều tra dân số mới nhất năm 1890. Mỗi thẻ giúp dữ liệu của một cá nhân. Những thứ như chủng tộc, tình trạng hôn nhân, số con, quốc gia nơi sinh, v.v. Đối với mỗi câu hỏi về nhân khẩu học, một nhân viên điều tra dân số sẽ đưa ra một vị trí thích hợp. Khi một thẻ được đưa vào máy lập bảng, một lệnh giữ sẽ làm cho tổng số đang chạy cho câu trả lời cụ thể đó tăng lên một. Bằng cách này, bạn có thể cung cấp cho toàn bộ quốc gia của mọi người và cuối cùng, bạn sẽ có tổng số chạy cho tất cả các câu hỏi mà bạn đã hỏi. Điều quan trọng cần lưu ý ở đây là các máy lập bảng ban đầu không thực sự là máy tính vì chúng chỉ có thể thực hiện một việc là lập bảng, hoạt động của chúng là cố định và không thể lập trình được. Thẻ bấm lỗ được lưu trữ dữ liệu, nhưng không phải là một chương trình.
Trong 60 năm tiếp theo, những cỗ máy kinh doanh này đã phát triển về khả năng, bổ sung các tính năng để cộng trừ, nhân, chia và thậm chí đưa ra các quyết định đơn giản về thời điểm thực hiện các hoạt động nhất định. Để kích hoạt các chức năng này một cách chính xác, để có thể thực hiện các phép tính khác nhau, lập trình viên đã truy cập vào một bảng điều khiển (control pannel) . Pannel này có đầy đủ các ổ cắm nhỏ, trong đó lập trình viên sẽ đi cáp để truyền các giá trị và tín hiệu giữa các bộ phận khác nhau của máy. Vì lý do này, chúng còn được gọi là bảng cắm (Plugboard). Thật không may, điều này có nghĩa là phải rewire máy mỗi khi cần chạy một chương trình khác nhau. Vì vậy, vào những năm 1920, những bảng cắm này đã được tạo ra có thể thay thế được. Điều này không chỉ làm cho việc lập trình trở nên thoải mái hơn rất nhiều mà còn cho phép các chương trình khác nhau được cắm vào máy. Ví dụ: một bảng có thể được tính thuế bán hàng, trong khi bảng khác giúp tính lương. Nhưng các bảng cắm rất phức tạp để lập trình. Những sợi dây rối rắm này là một chương trình tính toán tổng hợp lỗ lãi bằng máy kế toán IBM 402, rất phổ biến vào những năm 1940. Và phong cách lập trình bảng cắm này không phải là duy nhất đối với máy tính cơ điện.
Plugboard
Plugboard
Máy tính điện đa năng đầu tiên trên thế giới, The Eniac, được hoàn thành vào năm 1946, đã sử dụng rất nhiều trong số chúng. Ngay cả sau khi một chương trình đã được hình dung hoàn toàn trên giấy, việc đấu dây vật lý cho Eniac và để chương trình chạy có thể mất tới ba tuần. Với chi phí khổng lồ của những chiếc máy tính đầu tiên này. thời gian chết hàng tuần chỉ đơn giản là để chuyển đổi chương trình là không thể chấp nhận được và cách thức mới nhanh hơn, linh hoạt hơn để lập trình máy là rất cần thiết. May mắn thay vào cuối những năm 1940 và những năm 50, electornic memory nên khả thi. Khi chi phí giảm, kích thước bộ nhớ tăng lên. Thay vì lưu trữ một chương trình dưới dạng một bảng dây cắm vật lý, có thể lưu trữ một chương trình hoàn toàn trong bộ nhớ của máy tính. Nơi mà lập trình viên có thể dễ dàng thay đổi và truy cập nhanh chóng bởi CPU. Những máy tính này được gọi là máy tính chương trình lưu trữ. Với đủ bộ nhớ máy tính, bạn không chỉ có thể lưu trữ chương trình bạn muốn chạy mà còn có thể lưu trữ bất kỳ dữ liệu nào mà chương trình của bạn cần. Bao gồm các giá trị mới mà nó tạo ra trên đường đi, Việc thống nhất dữ liệu lập trình vào một bộ nhớ dùng chung duy nhất được gọi là Kiến trúc von Neumann.
The Eniac
The Eniac
Được đặt theo tên của John von Neumann, một nhà toán học và vật lý học nổi tiếng, người đã làm việc trong dự án Manhattan và một số máy tính điện tử thời kỳ đầu và từng nói, "Tôi đang nghĩ về một thứ quan trọng hơn nhiều so với bom, tôi đang nghĩ về máy tính". Đặc điểm nổi bật của máy tính von Neumann là một đơn vị xử lý có chứa một đơn vị logic số học, các thanh ghi dữ liệu, một thanh ghi lệnh và một thanh ghi địa chỉ lệnh. Và cuối cùng là bộ nhớ để lưu cả dữ liệu và hướng dẫn. Máy tính chương trình kiến ​​trúc von Neumann đầu tiên được xây dựng vào năm 1948 bởi Đại học Manchester, có biệt danh là "Baby" và ngay cả máy tính mà bạn đang sử dụng hiện nay cũng sử dụng cùng một kiến ​​trúc.
Bấy giờ bộ nhớ máy tính điện tử là rất tốt ,nhưng bạn vẫn phải tải dữ liệu lập trình vào máy tính trước khi nó có thể chạy. Và vì lý do này, thẻ bấm lỗ đã được sử dụng. Những năm 1980, hầu hết tất cả các máy tính đều có đầu đọc thẻ bấm lỗ, có thể hút một thẻ bấm lỗ duy nhất tại một thời điểm và ghi nội dung của thẻ vào bộ nhớ của máy tính. Nếu bạn nạp một chồng thẻ bấm lỗ, người đọc sẽ tải tất cả chúng vào bộ nhớ một cách tuần tự, như một khối lớn. Khi dữ liệu lập trình đã ở trong bộ nhớ, máy tính sẽ được yêu cầu thực thi nó. Tất nhiên, ngay cả các chương trình máy tính đơn giản, cũng có thể có hàng trăm hướng dẫn, điều đó có nghĩa là chương trình đó được lưu trữ dưới dạng chồng thẻ bấm lỗ. Vì vậy, nếu chẳng may bạn vô tình đánh rơi chương trình của mình trên sàn, bạn có thể mất hàng giờ, hàng ngày hoặc thậm chí hàng tuần để đặt mã trở lại đúng thứ tự. Một thủ thuật phổ biến là vẽ một đường chéo ở mặt bên của ngăn xếp thẻ được gọi là sọc, vì vậy bạn sẽ có ít nhất một số cách để làm cho nó trở lại đúng thứ tự. Chương trình lớn nhất từng được xếp vào danh sách các hệ thống phòng không SAGE của Lực lượng Phòng không Hoa Kỳ được hoàn thành vào năm 1955. Vào thời kỳ đỉnh cao, dự án được cho là đã sử dụng 20% ​​lập trình viên trên thế giới! Chương trình điều khiển chính của nó được lưu trữ trên 62.500 thẻ bấm lỗ khổng lồ, tương đương với khoảng 5 megabyte dữ liệu. Khá ấn tượng theo tiêu chuẩn ngày nay. Và thẻ bấm lỗ không chỉ hữu ích để lấy dữ liệu vào máy tính mà còn lấy dữ liệu ra khỏi chúng. Vào cuối một chương trình, kết quả có thể được ghi ra khỏi bộ nhớ máy tính và thẻ bấm lỗ bằng punching. Sau đó, dữ liệu này có thể được con người phân tích hoặc tải vào chương trình thứ hai để tính toán bổ sung.
cách để ghi nhớ punch card
cách để ghi nhớ punch card
Họ hàng xa của thể bấm lỗ là Băng bấm lỗ (punched paper tape) về cơ bản giống nhau, nhưng Băng bấm lỗ là liên tục thay vì nằm trên những card riêng lẻ. Và tất nhiên, lúc đó chúng ta chưa có ổ cứng, CD-Rom, DVD, ổ USB và các tiện ích tương tự khác. Cuối cùng, ngoài bảng cắm và băng bấm lỗ, có một cách nữa phổ biến khác để lập trình và điều khiển máy tính trước năm 1980: lập trình bảng điều khiển ( panel programming) . Thay vì phải cắm cáp vật lý để kích hoạt một số chức năng nhất định, điều này cũng có thể được thực hiện với các bảng điều khiển khổng lồ đầy công tắc và nút. Và có đèn báo để hiển thị trạng thái của các chức năng và giá trị khác nhau trong bộ nhớ. Máy tính của những năm 50 và 60 thường có bảng điều khiển khổng lồ trông như thế này.
Mặc dù hiếm khi nhập toàn bộ chương trình chỉ bằng cách sử dụng switches, nhưng điều đó là hoàn toàn có thể. Và những chiếc máy tính gia đình ban đầu dành cho thị trường sở thích đã sử dụng switches rộng rãi vì hầu hết người dùng gia đình không thể mua được các thiết bị ngoại vi đắt tiền như đầu đọc thẻ bấm lỗi. Máy tính gia đình thành công về mặt thương mại đầu tiên là Altair 8800, được bán với hai phiên bản: lắp ráp sẵn và như một bộ phụ kiện. Bộ Kit, rất phổ biến với những người đam mê máy tính nghiệp dư, được bán với giá thấp chưa từng có khi đó là khoảng 400 đô la vào năm 1975 hoặc khoảng 2.000 đô la vào năm 2017. Để lập trình 8800, bạn thực sự bật các công tắc trên pannel phía trước để nhập mã Op nhị phân cho hướng dẫn bạn muốn. Sau đó, bạn nhấn nút gửi tiền để ghi giá trị đó vào bộ nhớ. Sau đó, ở vị trí tiếp theo trong bộ nhớ, bạn chuyển đổi lại switches cho hướng dẫn tiếp theo của bạn, ký gửi nó, v.v. Cuối cùng khi bạn đã nhập toàn bộ chương trình của mình vào bộ nhớ. bạn sẽ chuyển đổi các switches, quay trở lại địa chỉ bộ nhớ bằng không, nhấn nút chạy và xem các đèn nhỏ nhấp nháy. Đó là máy tính gia đình vào năm 1975.
Cho dù là bảng cắm(plug board) hoặc giấy đục lỗ(punched paper). Lập trình những chiếc máy tính ban đầu này là lĩnh vực của các chuyên gia. Có thể là những kẻ chuyên làm việc này để kiếm sống, hoặc những người đam mê công nghệ. Bạn cần có kiến ​​thức sâu sắc về phần cứng cơ bản, những thứ như mã Op của bộ xử lý và register wits để viết chương trình. Điều này có nghĩa là lập trình rất khó và tẻ nhạt. Và ngay cả các kỹ sư và nhà khoa học chuyên nghiệp cũng phải vật lộn để tận dụng hết những gì mà máy tính mang lại. Điều cần thiết là một cách đơn giản hơn để cho máy tính biết phải làm gì; một cách đơn giản hơn để viết chương trình.
____________________________________
Source: Early Programming: Crash Course Computer Science