Thuật toán, lập trình và đời sống
Trong bài viết này, những suy nghĩ của tôi về việc tư duy thuật toán và học lập trình được nêu ra. Tôi phải thú nhận rằng, việc học...
Bài viết nêu lên quan điểm của tác giả trong sự tương đồng cũng như cần thiết của tư duy lập trình.
Dẫn nhập
Trong bài viết này, những suy nghĩ của tôi về việc tư duy thuật toán và học lập trình được nêu ra. Tôi phải thú nhận rằng, việc học thuật toán là 1 điều khó, để hiểu nó lại càng là điều khó hơn. Tuy nhiên, khi đã thẩm thấu ý tưởng của nó rồi, ta sẽ bắt gặp được bóng hình của nó trong hầu hết các công việc mà ta gặp hằng ngày.

Để 1 thuật toán, hoặc một ứng dụng, được phát triển rộng rãi, thường thì nó sẽ nghiên cứu và phát triển sao cho khi triển khai, nó phải tối ưu được hiệu suất của nó, đồng thời, tiết kiệm được nguồn lực (thời gian, chi phí tính toán, tiền bạc, …). Trong bài toán thường ngày, ta cũng có xu hướng như vậy. Ví dụ, khi ta đi từ nhà đến những nơi vui chơi, ta sẽ chọn những tuyến đường sao cho phù hợp với 1 vài chỉ tiêu của ta, như là, đường đi ngắn nhất, ít tốn xăng nhất, ít kẹt xe nhất, … Khi này, theo cách nghĩ của 1 người phát triển thuật toán, trong đầu của ta đang giải quyết 1 câu vấn đề rằng “Tìm đường đi sao cho [phù hợp với nhu cầu của tôi]“.
Tôi tin rằng, dù là 1 người thiên về tự nhiên hay về xã hội, thuật toán mang trong mình sự giao thoa của cả 2 trường phái ấy, đều nên mang trong mình tia len lỏi của những điều đã nêu trên.
Định nghĩa
Để bắt đầu cho chuyến hành trình của ta, tôi sẽ nêu ra định nghĩa của thuật toán và lập trình, từ đó, ta sẽ có bước đà để nhảy xa ra khỏi tầm nhìn thông thường.
Thuật toán là gì?

Theo định nghĩa từ Wiki, “Trong toán học và khoa học máy tính, một thuật toán, còn gọi là giải thuật, là một tập hợp hữu hạn các hướng dẫn được xác định rõ ràng, có thể thực hiện được bằng máy tính, thường để giải quyết một lớp vấn đề hoặc để thực hiện một phép tính.”. Ta sử dụng thuật toán để tạo ra giải pháp cho bất kỳ vấn đề nào dưới dạng các bước. Khi ta sử dụng máy tính để giải quyết bất kỳ vấn đề nào (theo nhiều bước được xác định rõ ràng), chúng ta cần truyền đạt các bước này để đưa ra giải pháp một cách chính xác cho máy tính.
Thông thường, thuật toán cũng sẽ được xây dựng bởi những thuật toán nhỏ hơn, điều này sẽ giúp ích rất nhiều cho việc triển khai, đồng thời, cũng giúp cho thuật toán nhìn sạch sẽ hơn.
Lập trình là gì?

Lại theo Wiki, “Lập trình máy tính hay lập chương trình máy tính, thường gọi tắt là lập trình (tiếng Anh: computer programming, hay programming), là việc lập ra chương trình làm việc cho máy có bộ xử lý, nói riêng là máy tính, để thực thi nhiệm vụ xử lý thông tin nào đó. Chương trình này gồm dãy các chỉ thị (hay lệnh) hợp lý để máy thực hiện theo trình tự thời gian”. Nó đề cập đến một tập hợp các hướng dẫn khác nhau mà máy tính tuân theo. Thực tế không có máy nào có khả năng đọc chương trình một cách trực tiếp. Đó là vì nó chỉ hiểu được mã máy có sẵn.

Nói cách khác, lập trình là cách một người (được gọi là lập trình viên) sử dụng các ngôn ngữ lập trình và các đoạn mã cùng những tiện ích (extension) có sẵn để tạo ra những trang web, các ứng dụng, phần mềm, trò chơi.
Sản phẩm của nghề lập trình được ứng dụng vô cùng rộng rãi. Ví dụ như những thiết bị gia dụng thông minh đều có thể hoạt động và điều khiển dễ dàng nhờ sự đóng góp rất lớn từ lập trình. Không chỉ ứng dụng trong lĩnh vực thiết bị gia dụng thông minh mà lập trình còn được ứng dụng rất nhiều trong các lĩnh vực khác của đời sống.
Bàn luận

Lập trình và cách nhìn nhận thế giới quan
Với các định nghĩa vừa nên trên, dường như ta không thấy được 1 chút sự tương đồng gì giữa đời sống và việc lập trình, triển khai thuật toán để có thể nêu lên sự giao thoa như mong muốn ban đầu. Hơn thế nữa, với điều vừa nêu ra, khó mà kêu gọi những người có thiên hướng xã hội có cùng 1 mức độ quan tâm với người có niềm hứng khởi với giới tự nhiên không trong lĩnh vực khoa học máy tính.
Thật vậy, nếu ta quan sát kĩ hơn về các việc làm hằng ngày, ta sẽ thấy ra ta thường lặp đi lặp lại các thao tác cố định, mà nếu mô tả nó theo 1 cách khác đi, ta sẽ thấy được nét tương đồng với việc lập trình. Lấy ví dụ, khi ta chuẩn bị một buổi sáng để đi làm, các điều ta thường làm là: thức dậy, đánh răng, tắm rửa, thay quần áo, đóng giày, ra khỏi nhà và đến nơi làm việc. Nhớ về định nghĩa trên về thuật toán 1 tí, ta nhận ra rằng: “Ồ, với những việc mình thường làm buổi sáng, đó là những việc được nêu ra rất rõ ràng, số lượng các thao tác thường là cố định, hơn thế nữa, nó lại còn là tuần tự nữa”.
Ta hãy thử mô tả việc chuẩn bị một buổi sáng theo cách nhìn của việc lập trình, triển khai thuật toán. Đầu tiên, ta có các hành động mà ta mà ta cần làm cho mỗi buổi sáng, chúng ta có các hàm sau:
1. thuc_day()
2. danh_rang()
3. tam_rua()
4. thay_quan_ao()
5. dong_giay()
6. ra_khoi_nha()
7. di_lam() // di den noi lam viec
Đấy là các hàm mà ta cần có để triển khai 1 thuật toán lớn hơn chuan_bi_bua_sang(). Đê triển khai thuật toán lớn hơn, ta có triển khai như sau:
chuan_bi_bua_sang(){
thuc_day()
danh_rang()
tam_rua() // tuy vao nguoi thich tam sang hay khong ma cai dat
thay_quan_ao()
dong_giay()
ra_khoi_nha()
di_lam() // di den noi lam viec
}
Khi thuật toán được triển khai, thứ tự của các hành động sẽ được thực thi từ trên xuống dưới, từ trái qua phải.
Ví dụ trên vừa nêu ra sự tương đồng giữa việc triển khai thuật toán với các hoạt động thường ngày. Một tư duy bình thường của việc lập trình là khi bài toán đó quá khó hoặc quá phức tạp, ta thường sẽ cắt nhỏ thành các bài toán nhỏ hơn. Sau khi giải quyết các bài toán nhỏ hơn thành công, ta sẽ kết hợp lại các phương án để tìm ra kết quả cho bài toàn ban đầu.

Bỗng nhiên, một suy nghĩ rất tự nhiên lóe lên trong đầu ta, “Ví dụ trên đúng là nói rằng có thể mô tả hành vi con người thông qua thuật toán, vậy còn suy nghĩ trong đầu thì sao?” Đôi khi, ta không cần phải điều chỉnh trực tiếp đến suy nghĩ để tác động trực tiếp đến nó. Một ví dụ điển hình cho việc “lập trình tư duy cho người khác” này là Tiktok (và các dạng app tương tự như Reels của Facebook hoặc Shorts của Youtube) tạo ra sự suy giảm tư duy sâu sắc và khả năng tập trung của người dùng, đồng thời, gây ra cảm giác tự ti và lo lắng về hình ảnh cá nhân khi so với hình ảnh của người nổi tiếng, KOL, …. Điều này có thể dẫn đến tăng cường áp lực xã hội và ảnh hưởng đến sức khỏe tinh thần của người dùng. Như phía trên đã đề cập, việc lập trình còn đòi hỏi “một tập hợp các hướng dẫn khác nhau mà máy tính tuân theo”. Nếu vậy, ta hãy xem trí nghĩ ta như một chiếc máy tính, và bản thân ta thì là người lập trình. Ta sẽ điều chỉnh các thói quen, hành vi thường nhật, sao cho những thay đổi nhỏ đấy ngấm ngầm ảnh hưởng đến ta, thế giới quan của ta, cách ta tương tác với thế giới. Khi này, ta còn được sắm vai ông chủ khi cho phép trí não tiêu thụ những thông tin, dữ liệu sao cho làm đẹp được mình.
Lập trình giữa người học tự nhiên và người học xã hội.

Khi tôi còn ngồi ở ghế nhà trường, tôi thần tượng những con người có tài năng xuất chúng về giới tự nhiên, như là, toán học, vật lý, sinh học. Trong quá trình “thành nhân” của mình, tôi tìm được nhiều điều kì thú trong các môn xã hội học, như là, tâm lý học, kí hiệu học. Những kiến thức ấy, có vẻ đẹp rất duyên dáng và nắm trọn linh hồn, tuy nhiên, khi càng tìm hiểu sâu hơn, tôi nhận thấy, một cách siêu vật lý (meta-physic) nhất, các cách lập luận nó có sự tương đồng trong cách lập luận, chứng minh (từ “tính hệ thống” là từ mà tôi ưa dùng trong ngữ cảnh này). Đôi khi, trong các giới khác nhau, 1 vài lĩnh vực thuộc giới này lại là niềm hứng khởi cho giới còn lại. 1 ví dụ điển hình là việc nghiên cứu các kí hiệu, ngôn ngữ dẫn đến sự phát triển vượt bậc của lĩnh vực xử lý ngôn ngữ tự nhiên trong lĩnh vực khoa học máy tính; hoặc nếu bạn đã xem qua cuốn “Định lý cuối cùng của Fermat” (đã 1 thời là cuốn sách đầu giường của tôi), có 1 ví dụ về việc sử dụng định lý Galois để giải quyết việc hệ thống lại cây phả hệ của một dân tộc.
Đến hiện tại, tôi luôn có niềm đam mê với cả 2 khối này. Tôi luôn muốn tìm một cách diễn đạt chung cho cả 2 khối. 1 công cụ mạnh mẽ nhất của việc lập trình là sử dụng đồ thị. Khi diễn tả vấn đề và giải pháp, dù là khối gì, cũng đều cần các dữ kiện, các điều kiện, môi trường, đồng thời các thước đo để đánh giá độ đáng tin cậy của giải pháp. Các giải pháp này sẽ bao gồm các chỉ thị rõ ràng với các bước giải hữu hạn, khi này, nó có thể được mô tả dưới dạng thuật toán, sẽ trực quan hơn nữa nếu biểu diễn ở dạng độ thị.

Hiện nay, với sự phát triển chóng mặt của AI, các vấn đề về nhận thức của con người lại được đặt lên bàn cân. Câu hỏi nảy sinh một cách rất tự nhiên rằng: “Nhận thức là gì?”. Nếu chỉ đánh giá nhận thức của con người thông qua việc giải quyết các nhu cầu đời sống thì dường như, các AI được coi là “nhận thức” hơn ta. Để có được những sự “tìm sâu” thì sự bắt tay giữa khối tự nhiên và khối xã hội là cần thiết.
Kết luận
Việc lập trình, tư duy thuật toán đã và đang mang lai dấu ấn son sắc trong cách mạnh công nghiệp. Ảnh hưởng của nó trong mọi khía cạnh của đời sống là không thể chối cãi. Tôi mong rằng, dù bạn là ai, hãy nên mang trong mình 1 chút quan tâm về đề tài này.
Tôi cảm ơn bạn đã đọc tới đây. Chúc bạn có 1 ngày tốt lành nhé!


Quan điểm - Tranh luận
/quan-diem-tranh-luan
Bài viết nổi bật khác
- Hot nhất
- Mới nhất
Ccc.ccc
Bài hay quá b, viết típ đi
- Báo cáo
Nhện con tập sự
Chủ post viết hay nhưng có vẻ không nhiều người viết nhỉ?
- Báo cáo