02/12/2021
𝑳𝒂̣̂𝒑 𝒕𝒓𝒊̀𝒏𝒉 𝒍𝒂̀ 𝒌𝒉𝒐𝒂 𝒉𝒐̣𝒄 𝒉𝒂𝒚 𝒏𝒈𝒉𝒆̣̂ 𝒕𝒉𝒖𝒂̣̂𝒕 ?
“Trong thế giới ngày càng phức tạp của những chương trình và thuật toán, tính đơn giản quả là một vẻ đẹp đáng trân trọng.”
Lập trình là viết chương trình để giải một bài toán cho trước trên máy tính điện tử. Chương trình là một dãy các lệnh những phép toán được viết bằng ngôn ngữ lập trình nào đó và do máy thực hiện. Về nguyên tắc, máy tính có khả năng thực hiện mọi chương trình viết bằng những ngôn ngữ mà máy ‘hiểu’ được, và nếu không có chương trình thì máy không làm được gì cả. Vì vậy, từ khi có máy tính thì cũng bắt đầu có nghề lập trình, và nghề lập trình đã phát triển mạnh mẽ cùng với sự phát triển cực kỳ mạnh mẽ của máy tính điện tử trong những thập niên vừa qua.
Các bài toán mà con người muốn dùng máy tính để giải thì thiên hình vạn trạng, có mặt trong mọi lĩnh vực, và vì vậy, lập trình cũng hết sức đa dạng và phức tạp, chẳng có chương trình nào giống chương trình nào, các lập trình viên (hay chuyên viên lập trình) phải tùy tài tùy trí của mình mà tìm cách xoay sở. Rồi từ đó, kinh nghiệm được tích lũy dần, dần dần hình thành những lý thuyết về lập trình, phát triển các ngôn ngữ lập trình… cho đến gần đây việc lập trình được tổ chức sản xuất theo kiểu công nghệ, xuất hiện công nghệ lập trình hay công nghệ phần mềm, v.v…
Tuy vậy, có những câu hỏi về bản chất của hoạt động lập trình được đặt ra từ thuở ban đầu của kỷ nguyên máy tính như: lập trình là khoa học hay là nghệ thuật? thì cho đến nay vẫn là một câu hỏi được sự quan tâm của không ít chuyên viên lập trình và giới Tin học nói chung. Tính khoa học của hoạt động lập trình thì chẳng còn gì để hoài nghi vì công thức chương trình = cấu trúc dữ liệu + thuật toán từ lâu đã được thừa nhận rộng rãi, và ai cũng biết cấu trúc dữ liệu và thuật toán là những đối tượng của các lý thuyết toán học, tức là của khoa học.
Vậy về thực chất, lập trình là khoa học hay là nghệ thuật? Cần có các hiểu biết về thuật toán, về các cấu trúc, cần có khả năng suy luận logic trên các cấu trúc và thuật toán, nghiên cứu các tính chất của thuật toán và lựa chọn thế nào là thuật toán tốt nhất, v.v… thì rõ ràng là khoa học rồi. Nhưng đa số các nhà lập trình có nhiều kinh nghiệm cho ta biết rằng trước một bài toán, trước khi có trong tay các thuật toán để mà phân tích, lập luận, để mà xuống tay viết các dòng lệnh, thì thường phải qua một giai đoạn suy nghĩ, vận dụng trí tưởng tượng để hình dung ra những bức tranh khác nhau của bài toán, những hình khối bộ phận, những mối quan hệ, thường khi rất rối rắm phức tạp, và cứ để mặc cho những rối rắm đó lởn vởn trong tư duy của mình, cho đến khi xuất hiện những ý tưởng bột phát gỡ cho mình những rối rắm và chỉ đường đi đến những giải pháp.
C.Simonyi – một chuyên gia lập trình người Hungari khẳng định: lập trình vừa là khoa học, vừa là nghệ thuật, hiểu biết về các thuật toán là khoa học, tưởng tượng về các kiến trúc là nghệ thuật. Có những địa hạt mà các lập luận logic của khoa học không tiếp cận được, trong khi một chương trình, một sản phẩm phần mềm mà ta mong muốn thì không chỉ cần cho được kết quả, giải được bài toán, mà còn cần phải hay, phải đẹp; cái hay, cái đẹp đó của một phần mềm, theo ý của một chuyên gia phần mềm khác – Bob Carr – chỉ có thể sinh ra từ thế giới của trí tưởng tượng và những trực cảm.
Jeb Raskin – người tham gia sáng tạo ra khái niệm menu của hệ điều hành cho máy Macintosh của hãng Apple, kể lại: “Tôi chẳng muốn phần cứng hay phần mềm, tôi chỉ muốn có một dụng cụ dễ dùng”. Và từ ý tưởng muốn biến máy vi tính thành một dụng cụ dễ sử dụng, ông ta đã cùng các đồng nghiệp sáng tạo ra phần mềm của hệ điều hành với những ‘thực đơn’ (menu), mà chỉ cần bấm nút trỏ đến các thực đơn đó ta có thể sai khiến máy làm những gì mà ta muốn. Ông muốn chứng tỏ với những người thích tạo nên các hệ thống phức tạp một điều giản dị: còn có những cách đơn giản hơn! Trong thế giới ngày càng phức tạp của những chương trình và thuật toán, tính đơn giản quả là một vẻ đẹp đáng trân trọng!