Sơ lược lịch sử ngành lập trình

Sơ lược lịch sử ngành lập trình
Photo by Fotis Fotopoulos from Unsplash

Trong bài viết này, tôi sẽ tóm tắt các giai đoạn khác nhau của ngành lập trình.

Một nhà toán học người Anh (đồng thời cũng là nhà văn), nữ bá tước Ada Lovelace được coi là lập trình viên đầu tiên. Bà đã đưa ra một chương trình máy tính để tính số Bernoulli cho máy Analytical Engine (phát minh bởi Charles Babbage, cũng là một nhà bác học).

Tuy nhiên chương trình của bà có thể coi là thuật toán thì đúng hơn, vì máy Analytical Engine vẫn chưa hoàn thiện và bà không có cơ hội được nhìn thấy chương trình của mình được thực thi. Tuy nhiên tư tưởng của bà về việc “dạy” một cỗ máy thực hiện các tính toán phức tạp thì đã đi trước thời đại cả trăm năm.

Năm 1945, cùng với sự phát minh máy tính cơ điện có thể lập trình đầu tiên (máy ENIAC) thì những lập trình viên đầu tiên đúng nghĩa, làm việc full time, được trả lương cũng xuất hiện. Đó là 6 người phụ nữ (ENIAC girls): Betty Snyder Holberton, Jean Jennings Barik, Kay McNulty Mauchly Antonelli, Marlyn Wescoff Meltzer, Ruth Lichterman Teitelbaum và Frances Bilas Spence. Lúc này vẫn đang là chiến tranh thế giới, và những người đàn ông một là đang bận chiến đấu, hai là tập trung vào việc chế tạo phần cứng nên việc lên chương trình cho máy tính do phụ nữ đảm nhiệm.

Vào thời điểm đó, hoàn toàn chưa có khái niệm phần mềm, chương trình máy tính cũng rất khác với những gì chúng ta hiểu bây giờ. Việc máy tính có thể chạy một chương trình được lưu trữ sẵn chưa được phát minh và việc lên chương trình được thực hiện bằng cách thay đổi phần cứng (chuyển đổi công tắc, dây dẫn, v.v…).

Những lập trình viên được trả lương đầu tiên này phải tự học cơ chế hoạt động của máy tính để có thể lên chương trình cho nó. Từ những ngày sơ khai của nghề lập trình, kỹ năng tự học đã cực kỳ cần thiết rồi 😂.

Phải mất rất nhiều năm, máy tính hoạt động theo chương trình lưu trữ sẵn mới được hoàn thiện. Lúc này, bìa đục lỗ vốn chỉ được dùng để lưu trữ dữ liệu thống kê trước đó lại được sử dụng để lưu trữ chương trình máy tính. Một số phương thức lưu trữ khác cũng được thử nghiệm nhưng do nhiều yếu tố, bìa đục lỗ vẫn được sử dụng phổ biến đến tận những năm 70.

Việc lập trình vào thời kỳ bìa đục lỗ là lập trình trên giấy theo đúng nghĩa đen (có khi còn đen hơn cả đen 😆). Các lập trình viên sẽ viết chương trình ra giấy gọi là coding sheet. Sau đó chương trình sẽ được chuyển lên bìa đục lỗ. Lúc này, để phân biệt những ký tự nhìn rất giống nhau, ví dụ chữ O và số 0 thì một số kỹ thuật được sử dụng như số 0 có thêm gạch chéo. Kỹ thuật này vẫn còn được dùng cho đến tận bây giờ.

Ở những tổ chức vừa và nhỏ, lập trình viên thường sẽ tự đục lỗ cho chương trình của mình. Ở những tổ chức lớn hơn, việc đục lỗ và vận hành máy tính thường do những bộ phận chuyên biệt thực hiện. Thời kỳ này, bìa đục lỗ của IBM và máy đục lỗ IBM 029 là những thiết bị được sử dụng nhiều nhất. Với một số thay đổi nhỏ, thì việc sửa chữa có thể thực hiện bằng tay.

Và vì các máy tính là máy tính xử lý loạt, chương trình sẽ được nạp lần lượt vào máy tính, chương trình này chạy xong mới đến chương trình tiếp theo. Đầu ra của chương trình sẽ được chuyển sang các tấm bìa đục lỗ mới. Và những dữ liệu này có thể được đưa vào các máy thống kê hoặc máy in để đưa thông tin đến người dùng. Do công nghệ thời điểm đó, các lập trình viên thường phải chờ rất lâu mới đến lượt chương trình của mình được chạy và tiếp tục phải chờ để máy tính hoàn thành nó.

Những chương trình máy tính đầu tiên được viết bằng ngôn ngữ máy, sau đó là hợp ngữ. Một số ngôn ngữ lập trình bậc cao cũng được thử nghiệm nhưng lập trình viên vẫn ưa chuộng hợp ngữ hơn. Nguyên nhân là do máy tính là một thiết bị đắt đỏ, việc sở hữu một chiếc máy tính đã tốn kém, vận hành nó càng tốn kém hơn (chi phí tính theo giây luôn 😢). Vì vậy, chương trình cần phải được tối ưu để không lãng phí hiệu suất của máy tính.

Phải mất nhiều năm, trình dịch (compiler) mới cho ra đời các chương trình được tối ưu hơn. Lúc đó ngôn ngữ lập trình mới được sử dụng rộng rãi. Vì máy tính không thể thực thi một chương trình được viết bằng ngôn ngữ lập trình bậc cao, để chạy được chương trình cần thêm một số bước trung gian nữa.

Lập trình viên vẫn viết chương trình ra coding sheet và nó sẽ được chuyển vào bìa đục lỗ. Mỗi tấm bìa đục lỗ của IBM có 80 cột 10 dòng sẽ mã hóa được 1 dòng code (nên không lạ gì khi ngày nay quy tắc 80 ký tự mỗi dòng vẫn được áp dụng 😆). Ví dụ một chương trình 1000 dòng code sẽ dùng 1000 tấm bìa đục lỗ, cũng tương đối dày.

Sau đó mã nguồn được viết trên bìa đục lỗ này sẽ được đưa vào máy tính (thường là mainframe) và compiler (cũng được nạp từ bìa đục lỗ) sẽ được thực thi và dịch chương trình ra ngôn ngữ máy. Kết quả sẽ được đục vào các tấm bìa đục lỗ ở đầu ra để lưu trữ và sử dụng về sau. Quy trình tiếp theo để thực thi chương trình vẫn như trước đây.

Chương trình máy tính thời đó thường được thiết kế để đọc dữ liệu theo một định dạng nhất định. Và kết quả đầu ra cũng có định dạng riêng. Những chương trình này có rất nhiều điểm tương đồng với những bài thi code ngày nay. Nguyên nhân đơn giản là vì máy tính không thể tương tác trực tiếp với người dùng, toàn bộ chương trình và dữ liệu đầu vào phải được nạp hết vào máy tính để thực thi.

Trong thời gian này, một số ngôn ngữ lập trình được tạo ra và sử dụng. FORTRAN (FORmula TRANslator) được sáng tạo bởi John Backus, một kỹ sư của IBM. Đây là ngôn ngữ lập trình đầu tiên được thương mại hóa và sử dụng rộng rãi, thường được dùng trong các tính toán khoa học.

Một số ngôn ngữ khác cũng được tạo ra trong những năm 50 mà đến nay vẫn tiếp tục được sử dụng bao gồm LISP (LISt Processing) và COBOL (COmmon Business Oriented Language). FORTRAN và COBOL được phát triển cùng với sự phát triển của công nghệ transistor. COBOL từng là ngôn ngữ phổ biến nhất thế giới trong hơn 20 năm.

Một ngôn ngữ khác cũng có vai trò rất quan trọng là ALGOL (ALgorithmic Oriented Language). Tuy ngày nay không còn được sử dụng nữa, nhưng ALGOL có thể coi là cha đẻ của những ngôn ngữ hiện đại hơn như C++, Python, và JavaScript. ALGOL là ngôn ngữ lập trình đầu tiên cho phép áp dụng thuật toán vào việc giải quyết các vấn đề bằng máy tính.

Một vấn đề hơi giống con gà và quả trứng một chút, là trình dịch một ngôn ngữ lập trình được tạo ra như thế nào. Nhất là khi mọi thứ vẫn còn rất sơ khai như vậy.

Những trình dịch đầu tiên thường được viết bằng hợp ngữ. Đến tận những năm 70, trình dịch của ngôn ngữ lập trình C vẫn được viết bằng hợp ngữ. Theo một số nguồn tin, IBM mất 18 man-year (216 man-month) để tạo ra trình dịch FORTRAN đầu tiên. Sau đó, những trình dịch này lại có thể được sử dụng để dịch trình dịch tiếp theo được viết bằng đúng ngôn ngữ lập trình mới được tạo ra đó. Kỹ thuật này gọi là bootstrap 👍.

Từ những năm 60, khi mà máy tính được sản xuất công nghiệp và bán ra rộng rãi với giá thấp hơn hơn thì những tổ chức sở hữu máy tính cũng nhiều lên. Lúc này, các tổ chức đó bắt đầu có những yêu cầu khác nhau về phần mềm máy tính. Ban đầu, họ phải thuê lập trình viên để viết các chương trình theo nhu cầu của mình.

Vào thời gian này, người ta cũng bắt đầu trao đổi với nhau chương trình mình viết được, có cả miễn phí và trả phí. Một vài công ty phần mềm cũng được thành lập. Đồng thời, các nhà sản xuất phần cứng với mong muốn xây dựng những cỗ máy dễ sử dụng hơn, bán được nhiều hơn cũng bắt tay vào xây dựng các phần mềm đi kèm với máy tính mình bán ra. Cần phải nhắc lại rằng, lúc này thì máy tính vẫn chưa phổ biến, cả lập trình viên và người sử dụng máy tính đều phải là những “chuyên gia” mới có thể sử dụng được.

Ngành công nghiệp phần mềm phát triển hơn vào giữa những năm 70, khi giá máy tính đã giảm, máy tính tương tác (dùng thiết bị đầu cuối như teletype hay video terminal) dễ tiếp cận hơn và đặc biệt là sự xuất hiện của dòng máy tính gia đình. Việc tiếp cận máy tính trở nên dễ dàng hơn, người dùng gia đình, văn phòng vừa và nhỏ cũng có thể sở hữu máy tính. Việc giao tiếp với máy tính cũng đơn giản hơn bìa đục lỗ rất nhiều. Do đó, nhu cầu về các phần mềm hệ thống, phần mềm nghiệp vụ, tiện ích và giải trí cũng tăng lên.

Các máy vi tính dùng trong gia đình thường được cài ngôn ngữ lập trình BASIC để người dùng tự lập trình (người dùng cũng là lập trình viên luôn 👍). Lập trình bằng ngôn ngữ BASIC rất đơn giản và người dùng thấy lập trình là một trải nghiệm thú vị và bổ ích. Đây là một lực lượng lập trình viên không chuyên rất đông, chủ yếu là thanh thiếu niên.

Ngôn ngữ lập trình C được tạo ra trong khoảng thời gian này. Lúc đầu ngôn ngữ hướng hệ thống này được tạo ra để viết lại hệ điều hành UNIX và sau hơn 50 năm, nó vẫn là một trong số những ngôn ngữ được sử dụng nhiều nhất.

Pascal cũng xuất hiện vào năm 1970 tiếp nối ngôn ngữ ALGOL. Nó được dùng để lập trình hệ điều hành Macintosh, các hệ điều hành dùng trong chương trình Apollo và những phiên bản đầu tiên của Adobe Photoshop.

SQL (Structured Query Language) cũng được công bố năm 1974. Ngày nay nó là ngôn ngữ thông dụng nhất khi làm việc với database.

Ngành phần mềm thực sự bùng nổ sau khi sức mạnh phần cứng được nâng lên, đặc biệt là sự ra đời của máy tính cá nhân IBM PC. Máy tính dần dễ dàng sử dụng hơn với người dùng phổ thông. Người dùng không còn phải tự lập trình để sử dụng máy tính nữa. Những năm tiếp theo, nhu cầu sử dụng máy tính để làm việc và giải trí ngày càng tăng. Đó là lúc thị trường game, phần mềm ứng dụng và tiện ích được mở rộng không ngừng tới tận bây giờ.

Những năm 80 được gọi là thời kỳ vàng của công nghệ máy tính.

Objective-C được tạo ra bởi Brad Cox. Đây là ngôn ngữ lập trình hướng đối tượng đầu tiên có tính năng reflection. Nó được dùng để lập trình hệ điều hành NeXTSTEP, và sau đó được dùng để lập trình rất nhiều phần mềm của Apple như hệ điều hành Mac, iOS, v.v… Objective-C cũng là ngôn ngữ tiêu chuẩn để lập trình phần mềm cho macOS và iOS trước khi bị thay thế bởi Swift.

Những ngôn ngữ như Dbase, C++, Eiffel, Mathematica, Perl, Tcl/Tk cũng được tạo ra và sử dụng rộng rãi vào những năm 80. Vào cuối những năm 80, không ai có thể tưởng tượng những gì công nghệ máy tính sẽ làm được vào những năm sau đó.

Những năm 90 là thời kỳ Internet. Lúc này, những ngôn ngữ dạng script cũng xuất hiện nhiều. Đây là những ngôn ngữ lý tưởng để viết các chương trình nho nhỏ và thực thi nhanh. Một số ngôn ngữ được sáng tạo thời kỳ này và vẫn được sử dụng đến ngày nay có thể kể đến như Python, PHP, JavaScript, Ruby. Java cũng được công bố trong thời kỳ này, trong khi một vài ngôn ngữ không còn phù hợp với thời đại dần bị đào thải.

Đến thế kỷ 21, hầu hết những ngôn ngữ lập trình đều đã được sáng tạo từ những năm 90. Tuy nhiên, thế giới Internet đã thay đổi nhiều thứ và chỉ còn một số ít ngôn ngữ lập trình vẫn tiếp tục được sử dụng.

Công nghệ thông tin ngày càng đóng vai trò quan trọng hơn vào việc sản xuất hàng hóa, dịch vụ và mọi thứ trong cuộc sống của chúng ta. Máy tính và Internet giúp thông tin dễ tiếp cận hơn với hầu hết mọi người. Thật khó để tưởng tượng về tương lai của công nghệ sẽ như thế nào.

Gần đây, cùng với sự phát triển của các kỹ thuật lập trình kinh điển, một số khái niệm lập trình low code và no code cũng xuất hiện. Tuy nhiên tôi không cho rằng đây là lập trình đúng nghĩa nên không tìm hiểu nhiều về những thứ đó.

Tôi xin lỗi nếu bài viết có bất kỳ typo nào. Nếu bạn nhận thấy điều gì bất thường, xin hãy cho tôi biết.

Nếu có bất điều gì muốn nói, bạn có thể liên hệ với tôi qua các mạng xã hội, tạo discussion hoặc report issue trên Github.