Please or Register to create posts and topics.

Ngôn ngữ lập trình C đã được phát minh ra như thế nào?

Ngôn ngữ lập trình C đã được phát minh ra như thế nào?

Câu chuyện về những chiếc máy tính siêu chậm chạp, ba người đàn ông tên David, và di sản trường tồn của C.

Nếu bạn cho rằng C là thứ ngôn ngữ chỉ mấy cụ ông 60 tuổi mới biết dùng, hãy nghĩ lại. Là một con khủng long giữa hằng hà sa số ngôn ngữ lập trình ngày nay, nhưng nó vẫn sống tốt và phát huy thế mạnh trên nhiều lĩnh vực mà bạn không hề nghĩ đến.

Ví dụ, Unix được viết trên C. Ban đầu được viết bằng ngôn ngữ Assembly, nhân Unix được viết lại trên nền C vào năm 1973. Nhờ đó, Unix tinh gọn hơn rất nhiều trên nhiều loại máy khác nhau và giúp nó trở nên phổ biến hơn. Ngoài ra, nếu không có C, chúng ta cũng sẽ không có những hệ điều hành tuyệt đẹp ngày nay - Linux, macOS, Android, iOS, Chrome OS, và bất kỳ thứ gì đang vận hành router của bạn.

Nếu bạn từng làm việc với cơ sở dữ liệu, bạn chắc chắn đã dùng đến C, kể cả khi bạn không biết điều đó. Các hệ thống quản lý cơ sở dữ liệu như Oracle Database, MySQL... đều được viết trên C. Hầu hết sau đó đã được viết lại trên C++, nhưng C++ cũng là một hậu duệ trực tiếp của C.

Và kể cả nếu bạn chỉ dùng Python, thì bạn có lẽ cũng đang dùng C đấy. Trừ khi bạn chọn Jython, IronPython, hay PyPy, thì thứ bạn đang dùng là CPython, hay Python nguyên bản: bạn viết mã Python, nhưng trình biên dịch - thứ chịu trách nhiệm dịch mã người viết thành mã máy hiểu được - lại là C.

Nói ngắn gọn, C ở khắp mọi nơi. Nó không phải là một con khủng long mập may mắn sống sót ở thời hiện đại. Nó cực kỳ thành công bởi tính hữu dụng vô cùng lớn.

Đó là lý do tại sao nhiều người ngạc nhiên khi biết rằng ban đầu, C được xem là một thất bại. Trên thực tế, nó đã thất bại trong cả một thập kỷ dài, và có lẽ sẽ không thể sống tiếp nếu không có một vị thầy giáo thích lập trình trong những ngày nghỉ.

Bạn của Alan Turing

Chúng ta đang nói về Christopher Stratchey. Sinh năm 1916 trong một gia đình người Anh, ông học tại Đại học Cambridge và quen biết được khá nhiều nhà khoa học nổi tiếng ở đây. Tuy nhiên, đã có lúc ông chểnh mảng học hành cả năm trời, và kết quả của kỳ thi tốt nghiệp cũng không như kỳ vọng.

Đó có lẽ là lý do ông không theo đuổi sự nghiệp học thuật như nhiều người cùng trang lứa. Thay vào đó, ông dành những năm chiến tranh để nghiên cứu radar công nghiệp. Sau đó, ông trở thành một thầy giáo và làm công việc này cho đến năm 1951.

Đó là lúc mọi thứ thay đổi. Một người bạn giới thiệu ông đến Phòng Thí nghiệm Vật lý Quốc gia Anh, và mỗi khi rảnh rỗi, Stratchey lại tìm đến chiếc máy tính Pilot ACE ở đây để mò mẫm. Pilot ACE chính là chiếc máy tính đầu tiên được trang bị Automatic Computing Engine của Alan Turing.

Mục tiêu của Stratchey là dạy máy tính cách chơi cờ ca-ro. Giải quyết một tác vụ logic như trò cờ ca-ro vào thời đó là cả một tham vọng, khi mà máy tính lúc bấy giờ chủ yếu được sử dụng để giải nhanh các phương trình toán học.

Nỗ lực đầu tiên của Stratchey không thành công bởi Pilot ACE không có đủ bộ nhớ lưu trữ cho việc này.

Stratchey may mắn tìm được một chiếc máy tính mạnh hơn, Ferranti Mark I, thông qua người bạn cũ Alan Turing. Với sự trợ giúp từ người bạn này, ông cuối cùng cũng thành công.

Thông tin về thành quả chưa từng có này nhanh chóng lan truyền, và không lâu sau đó, Stratchey nhận được cuộc gọi đề nghị ông tham gia phát triển lĩnh vực khoa học máy tính cho chính phủ Anh.

Ba vị David muốn một ngôn ngữ lập trình

Trong khi đó, Đại học Cambridge muốn mua một chiếc máy tính mới. Nghe có vẻ đơn giản, nhưng vào những năm 1950, đó là cả một vấn đề. Và bởi chiếc máy tính này hoàn toàn mới mẻ, họ bắt đầu nghĩ đến việc phát minh ra một ngôn ngữ lập trình mới cho nó.

Một chiếc máy tính mới rõ ràng cần một hệ điều hành mới hơn là một ngôn ngữ lập trình mới. Dẫu vậy, ba nhà nghiên cứu, David Hartley, David Wheeler, và David Barron, muốn có chút thử thách và quyết tâm tạo ra một ngôn ngữ mới.

Họ không hề hỏi những người dùng tương lai về ưu và nhược điểm của các ngôn ngữ đã có trước đó. Ví dụ, Fortran IV vào thời điểm đó được sử dụng khá phổ biến và có lẽ hoàn toàn đáp ứng được nhu cầu của họ.

Tuy nhiên ba vị David cho rằng họ có thể dễ dàng tạo ra một thứ gì đó tốt hơn.

Họ đặt tên cho nó là CPL, viết tắt của Cambridge Programming Language. Sau đó, nó được đổi thành Combined Programming Language khi một vài nhà nghiên cứu khác đến từ Đại học London cùng tham gia phát triển.

Theo David Hartley, tìm cách tạo ra loại ngôn ngữ mới này là "một việc làm ngớ ngẩn không tưởng".

Ngôn ngữ mới quá phức tạp

Có lẽ một điều "ngớ ngẩn không tưởng" nữa là giao cho Christoppher Stratchey làm quản lý dự án. Không thể nghi ngờ năng lực máy tính của ông, nhưng dường như ông quá say mê với dự án này đến nỗi không thể sắp xếp được việc gì ưu tiên, việc gì không. Nhóm phát triển do đó bị cuốn vào những vấn đề nhỏ nhặt thay vì xử lý các vấn đề lớn trước.

Và chẳng mất bao lâu để CPL bị gán cho cái tên Christopher's Progamming Languague (ngôn ngữ lập trình của Christopher).

Bởi tất cả những tiểu tiết mà nhóm đưa vào theo đề xuất của Stratchey, ngôn ngữ mới trở nên quá phức tạp. Khi họ muốn viết một trình biên dịch, nó đa phần không thể chạy được bởi mã máy được tạo ra không hiệu quả.

Ngôn ngữ trở nên quá... đơn giản

Khi Stratchey chuyển đến MIT một vài tháng, Martin Richards gia nhập nhóm CPL và quyết tâm đơn giản hoá nó. Tất nhiên, mục tiêu ông đặt ra là ngôn ngữ phải có một trình biên dịch tốt và cho ra mã máy có tính hiệu quả cao.

Đó là cách Richards tạo ra BCPL (Basic CPL) từ CPL. Dưới một góc độ nào đó, BCPL có thể được xem là một ngôn ngữ lập trình mới, và nó cũng là lời thừa nhận rằng CPL năm xưa đã thất bại không thể cứu vãn.

Khi Richards gặp Stratchey tại MIT không lâu sau đó, một đồng nghiệp từ Phòng thí nghiệm Bell đã ghé qua để xem hai người đang làm gì. Người này, Ken Thompson, đang phát triển Multics, một hệ điều hành khác sắp sửa bị...xếp xó (cuối cùng nó đã sống sót, nhưng đó là câu chuyện khác mà chúng ta không bàn đến ở đây).

Thompson đề xuất phát triển Unix, một trong những hệ điều hành được sử dụng nhiều nhất đến tận ngày nay. Ông đã cài đặt được Unix lên một chiếc máy tính nhỏ, PDP-7, nhưng BCPL vẫn quá đồ sộ không thể đưa vào chiếc máy đó được. Thompson quyết định "cắt gọt" bớt BCPL, chỉ để lại những tính năng mà ông cho là quan trọng nhất, và gọi ngôn ngữ mới là B.

C ra đời

Năm 1971, Dennis Ritchie thử sử dụng B và tìm cách thêm vào các tính năng mới để giúp nó trở nên hữu dụng trên các máy tính mạnh mẽ hơn. Ông gọi ngôn ngữ này là NB - New B.

Trong khi đó, Thompson đang nghiên cứu viết lại Unix bằng một ngôn ngữ bậc cao. Lúc này, hầu hết các hệ điều hành vẫn đang được viết bằng ngôn ngữ máy, nhưng vì điều đó, người ta phải phát triển một hệ điều hành mới mỗi khi mua máy tính mới. Ngược lai, một hệ điều hành Unix bậc cao có thể hoạt động trên bất kỳ máy tính nào.

Thompson tìm cách sử dụng NB để viết lại Unix nhưng thất bại. Ritchie và ông phải liên tục thêm các tính năng vào NB cho đến khi viết được Unix. Đáng kể nhất là việc họ thêm vào các cấu trúc, vốn chưa từng xuất hiện trên bất kỳ ngôn ngữ lập trình nào vào thời điểm đó.

Cấu trúc rõ ràng là một thay đổi lớn, đủ để cả hai quyết định gọi nó là một ngôn ngữ mới. Năm 1973, C ra đời!

Đám cháy âm thầm lan rộng

Các tác giả của C không ngờ rằng ngôn ngữ này "càn quét" nhiều lĩnh vực đến vậy.

Một nguyên nhân khiến C thành công có lẽ là vì chiếc máy tính mini PDP-11 cực kỳ phổ biến. Nó có giá quá rẻ, rất phù hợp để cài Unix, và C thì đi cùng với Unix.

Bởi hầu hết máy tính vào thời điểm này chủ yếu được dùng ở các trường đại học, rất nhiều sinh viên sau khi ra trường đã nắm trong tay ít nhiều kiến thức về C. Điều đó giúp nó len lỏi vào nhiều ngành công nghiệp, và cả những ngóc ngách của thế giới học thuật nữa.

Cuối cùng, cuốn sách The C Programming Language của Brian Kernighan và Dennis Ritchie vừa ngắn gọn, vừa súc tích càng giúp người mới bắt đầu dễ dàng tiếp cận và nâng cao kỹ năng lập trình bằng ngôn ngữ này.

Dù lớn tuổi, C vẫn tràn đầy sinh lực

Bằng cách nào đó, C đã đạt được thành công to lớn trên con đường không mấy thẳng tắp của nó. Nhưng nhìn lại, đó là kết quả của việc CPL quá phức tạp, BCPL quá đơn giản, B đơn giản hơn nữa, và NB phức tạp hơn một chút nhưng vẫn đơn giản! Chưa hết, nếu không có tham vọng viết lại Unix của Thompson, C có lẽ chẳng tìm được thành công đó.

Và đừng quên Christopher Stratchey, cựu giáo viên, người tìm cách phức tạp hoá rất nhiều thứ và dẫn đến chuỗi thất bại của C. Nhưng nếu không có ông, C có lẽ không bao giờ được phát minh ra.

Bạn có thể thấy những tính năng của C ở khắp mọi nơi. Những khái niệm lớn như cấu trúc, và cả những thứ nhỏ nhặt như các toán tử ++ và --, đều hiện diện trong nhiều ngôn ngữ lập trình ngày nay. Chúng sẽ không xuất hiện nếu không có C. Các hậu bối của C - C++, C#... - cũng sẽ không tồn tại.

Và đó chính là di sản của C. Nó còn là một ngôn ngữ cực nhanh và an toàn, biến nó thành công cụ được tin dùng trong các lĩnh vực phức tạp như robot, thị giác máy tính, IoT... Điều đó không có nghĩa các ngôn ngữ như Python bị ngó lơ, đặc biệt trong giai đoạn hình thành ban đầu. Nhưng những viên gạch cuối cùng - lớp hoàn thiện bóng bẩy - thường được viết bằng C hoặc C++.

Nếu tính theo tuổi đời, C quả thực là một con khủng long. Nhưng nó chắc chắn vẫn sống tốt và toả sáng.

(theo TheNextWeb)