Một người bạn của tôi ngày trước đã hỏi tôi rằng liệu tôi chỉ xem danh sách các con số khi lập trình hay cách nó hoạt động. Tôi đã cố gắng giải thích rằng nó thường giống các công thức toán học hơn, với một từ tiếng Anh kỳ quặc được đưa vào, và nó thường có thể đọc được. Nhưng đó là một lời giải thích rất mơ hồ và nó không thực sự giải thích nhiều cho một người không phải lập trình viên.
Nhưng nó khiến tôi phải suy nghĩ về điều gì sẽ là một ví dụ điển hình. Không phải vì tôi muốn dạy cô ấy lập trình hay bất cứ điều gì, mà chỉ đơn giản là để cho cô ấy biết mã chương trình "trông như thế nào".
Và điều đó khiến tôi tự hỏi về điều gì thực sự sẽ hoạt động như một ví dụ điển hình. Và điều đó trở nên khó khăn một cách đáng ngạc nhiên.
Suy nghĩ đầu tiên của tôi rõ ràng là một chương trình "Hello World" đơn giản. Nhưng nó thực sự không hiển thị bất cứ điều gì hữu ích. Nó không thực sự chỉ ra cách chúng ta sử dụng các hàm, hoặc biến, hoặc cấu trúc luồng điều khiển như if
hoặc while
để tạo một chương trình thực sự làm một việc gì đó . Không có logic nào cho nó. Chương trình không phản ứng với bất cứ điều gì.
Vì vậy, có lẽ một cái gì đó như tính toán các số nguyên tố sẽ là một ví dụ tốt hơn. Nhưng một lần nữa, điều đó có thể quá lý thuyết và không thực tế ... (Điều đó có ích lợi gì? Nó liên quan gì đến việc viết các chương trình "thực"?) Và một lần nữa, không có logic luồng điều khiển đáng kể nào trong đó. Nó chỉ là một chuỗi toán học thẳng.
Và ngoài ra, ngôn ngữ nào nên được sử dụng?
Lý tưởng nhất, tôi không nghĩ nó phải là một ngôn ngữ quá "sạch". Nhưng đúng hơn, nó có lẽ nên làm cho cấu trúc rõ ràng. Nếu nó làm được điều đó, thì một lượng tiếng ồn và sự lộn xộn nhất định có thể ổn. Có lẽ một cái gì đó như C ++ thực sự sẽ là một ví dụ tốt hơn Python vì lý do đó. Dấu ngoặc nhọn rõ ràng và bộ chỉ định kiểu là những "móc nối" rõ ràng để giúp giải thích cách chương trình được cấu trúc hoặc để làm nổi bật rằng nó không chỉ là những câu lệnh đơn giản mà hầu như có thể đọc thành tiếng Anh.
Nhưng với C ++, chúng ta cũng gặp phải một số cú pháp hết sức kỳ lạ. Tại sao được std::cout << x
sử dụng để in ra x? Tại sao không phải là cú pháp gọi hàm "bình thường"? Và printf
cũng không tốt hơn nhiều, với chuỗi định dạng phức tạp và thiếu khả năng mở rộng (tôi có muốn làm phức tạp chương trình bằng cách sử dụng char*
cho các chuỗi không? Hay tôi sử dụng std::string
và giải quyết việc gọi những thứ dường như không cần thiết s.c_str()
để có được một chuỗi có thể được in bằng printf
?
Có lẽ một ngôn ngữ cấp cao hơn sẽ tốt hơn sau tất cả. Nhưng cái nào? Và tại sao?
Tôi biết có rất nhiều câu hỏi tương tự ở đây về việc sử dụng ngôn ngữ / chương trình ví dụ nào để dạy lập trình. Nhưng tôi nghĩ rằng các yêu cầu ở đây là khác nhau. Khi dạy lập trình, chúng tôi muốn sự đơn giản hơn bất cứ điều gì. Chúng tôi muốn tránh bất cứ điều gì chưa được dạy. Chúng tôi muốn đảm bảo rằng học sinh có thể hiểu mọi thứ trên màn hình.
Tôi không quan tâm đến sự đơn giản. Nhưng đúng hơn là đưa ra một ý tưởng cho "người ngoài cuộc" về "chương trình trông như thế nào". Và các chương trình không đơn giản. Nhưng họ làm thường thể hiện một cấu trúc nhất định và phương pháp để sự điên rồ. Ngôn ngữ / chương trình nào sẽ làm nổi bật điều đó tốt nhất?
Chỉnh sửa
Cảm ơn cho tất cả các đề xuất cho đến nay. Một số bạn đã có một góc nhìn hơi khác với tôi dự định.
Có lẽ một ví dụ là theo thứ tự. Tôi không thể lái máy bay, nhưng tôi đã hiểu cơ bản về buồng lái trông như thế nào và phi công "làm gì" khi bay.
Và tôi không phải là một thợ mộc được đào tạo, nhưng tôi biết một cái cưa hoặc một cái búa khi tôi nhìn thấy một cái.
Nhưng khi bạn thấy bất cứ điều gì liên quan đến lập trình trong phim, chẳng hạn, đó thường chỉ là những màn hình chứa đầy rác (như trong văn bản màu xanh lá cây trong Ma trận). Nó không giống như điều mà một con người bình thường thực sự có thể làm . Không có gì có thể nhận ra trong đó. Ai đó không phải là lập trình viên chỉ đơn giản nghĩ rằng đó là ma thuật đen.
Tôi không muốn dạy cô ấy bay, hay lập trình phần mềm. Nhưng tôi muốn cung cấp cho cô ấy một hệ quy chiếu cơ bản. Chỉ là một ý tưởng về "à, đó là những gì bạn đang làm việc. Vì vậy, nó không chỉ là các ký hiệu và số ngẫu nhiên trên màn hình". Ngay cả khi chỉ hiển thị một câu lệnh đơn giản if
cũng sẽ là một sự tiết lộ so với các ký hiệu và số ngẫu nhiên kiểu Ma trận.
Một số bạn đã đề xuất giải thích một thuật toán hoặc sử dụng mã giả, nhưng đó là điều tôi muốn tránh. Tôi muốn thứ gì đó đơn giản chỉ ra mã thực tế trông như thế nào, giống như cách mà bạn không cần phải là một thợ mộc để nhìn vào một cái cưa và có được ý tưởng cơ bản về nó là gì và nó hoạt động như thế nào.
Khi tôi còn nhỏ, chúng tôi đã từng đi nghỉ ở Ý. Trên đường xuống, phi công cho tôi vào buồng lái của máy bay. Tất nhiên, tôi không học cách lái máy bay. Nhưng tôi đã nhìn thấy thế giới của phi công. Tôi có ý tưởng về cách họ điều khiển máy bay, những gì phi công thực sự làm.
Đó thực sự là tất cả những gì tôi muốn làm. Bạn tôi không có hứng thú với việc học lập trình, và tôi không muốn ép cô ấy hiểu mã nguồn. Nhưng cô ấy tò mò về loại công cụ hoặc thực thể mà tôi làm việc. Đó có phải là các biểu tượng kiểu Ma trận cuộn trên màn hình không? Toán học thuần túy? Tiếng Anh ở dạng văn xuôi?
Tất cả những gì tôi muốn truyền đạt là sự hiểu biết rất cao về "Tôi trông như thế nào khi làm việc".