Làm thế nào tôi có thể giải thích cho cha mẹ tôi rằng tôi học ngôn ngữ lập trình?


64

Tôi hiện đang hoàn thành bằng thạc sĩ khoa học máy tính. Tôi quan tâm đến các ngôn ngữ lập trình, đặc biệt là trong các hệ thống loại. Tôi đã quan tâm đến nghiên cứu trong lĩnh vực này và học kỳ tiếp theo tôi sẽ bắt đầu bằng tiến sĩ về chủ đề này.

Bây giờ đây là câu hỏi thực sự: làm thế nào tôi có thể giải thích những gì tôi (muốn) làm cho những người không có kiến ​​thức trước đây trong ngành khoa học máy tính hoặc các lĩnh vực liên quan?

Tiêu đề xuất phát từ sự thật rằng tôi thậm chí không thể giải thích những gì tôi làm với cha mẹ, bạn bè của tôi và vân vân. Vâng, tôi có thể nói "toàn bộ vấn đề là giúp các nhà phát triển phần mềm viết phần mềm tốt hơn" , nhưng tôi không nghĩ nó thực sự hữu ích: họ không nhận thức được "lập trình", họ không hiểu ý nghĩa của nó. Có cảm giác như tôi đang nói tôi là thợ sửa xe cho một người từ thời trung cổ: họ chỉ đơn giản là không biết tôi đang nói về cái gì, chứ đừng nói đến cách cải thiện nó.

Có ai có sự tương đồng tốt với thế giới thực? Ví dụ khai sáng gây ra khoảnh khắc "a-ha"? Tôi có nên thực sự hiển thị một đoạn mã ngắn và đơn giản cho người trên 60 tuổi không có kinh nghiệm về khoa học máy tính (cũng không phải học thuật) không? Nếu vậy, tôi nên sử dụng ngôn ngữ nào? Có ai ở đây phải đối mặt với vấn đề tương tự?


Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
DW

3
Câu hỏi này có một downvote và một hoặc nhiều cờ đóng, nếu tôi hiểu chính xác bảng điều khiển. Hãy xem xét để lại một bình luận để tôi có thể cải thiện nó. Mặc dù tôi đã ẩn nấp ở đây một thời gian, nhưng đây là lần đầu tiên tôi tích cực tham gia vào trang web và có lẽ tôi không quen thuộc với một số chính sách.
effeffe


1
Tôi chỉ đơn giản là không thể hiểu tại sao câu hỏi này được bình chọn nhiều hơn một câu hỏi liên quan đến một vấn đề cụ thể, hữu ích hơn. Câu hỏi này thật lố bịch và được bình chọn một cách lố bịch. Đáng kinh ngạc!
nbro

2
@nbro Tôi không hiểu những gì lố bịch về câu hỏi này và tôi không chắc làm thế nào bạn quyết định rằng một câu hỏi cụ thể là "hữu ích" hơn câu hỏi khác.
effeffe

Câu trả lời:


59

Nếu bạn có một vài phút, hầu hết mọi người đều biết cách thêm và nhân hai số có ba chữ số trên giấy. Yêu cầu họ làm điều đó, (hoặc thừa nhận rằng họ có thể, nếu họ phải) và yêu cầu họ thừa nhận rằng họ thực hiện nhiệm vụ này một cách có phương pháp: nếu con số này lớn hơn 9, sau đó thêm một lượt mang, v.v. Mô tả này họ chỉ đưa ra những gì cần làm đó là một ví dụ về thuật toán .

Đây là cách tôi dạy mọi người thuật toán từ và theo kinh nghiệm của tôi, đây là ví dụ tốt nhất. Sau đó, bạn có thể giải thích rằng người ta có thể tưởng tượng có những nhiệm vụ phức tạp hơn mà máy tính phải thực hiện, và do đó cần có một ngôn ngữ rõ ràng để cung cấp cho máy tính những thuật toán này. Vì vậy, đã có sự phổ biến của các ngôn ngữ lập trình bởi vì mọi người thể hiện suy nghĩ của họ khác nhau và bạn đang nghiên cứu các cách để thiết kế các ngôn ngữ này để khó mắc lỗi hơn.

Đây là một tình huống rất dễ nhận ra. Hầu hết mọi người không có khái niệm rằng các máy tính họ sử dụng chạy chương trình hoặc các chương trình đó là mã nguồn do con người viết hoặc máy tính có thể 'đọc' mã nguồn hoặc tính toán mà họ liên kết với số học là máy tính duy nhất làm (và di chuyển dữ liệu, và mạng, có thể).

Nghiên cứu của tôi là về điện toán lượng tử, vì vậy khi mọi người hỏi tôi làm gì, tôi không cố gắng giải thích điều đó. Thay vào đó, tôi cố gắng giải thích rằng vật lý lượng tử tồn tại (họ thường nghe nói về con mèo Schrödinger và những thứ ở hai nơi cùng một lúc), và vì vật lý kỳ lạ này, có thể tính toán nhanh hơn.

Mục tiêu của tôi là để cho người đó cảm thấy hiểu biết hơn một chút so với họ đã đi vào, cảm thấy phấn khích về một thế giới mà họ không biết đã tồn tại, nhưng giờ bạn đã làm quen với họ. Tôi thấy rằng điều đó có giá trị hơn nhiều so với việc giải thích các câu hỏi nghiên cứu cụ thể của tôi.


27
Sắp xếp một cỗ bài cũng là một cách dễ dàng để đưa ra khái niệm về thuật toán.
Morwenn

2
@Morwenn Đúng vậy! Có rất nhiều thuật toán mà chúng ta thực hiện trong cuộc sống hàng ngày! Thẻ xử lý là thuật toán, lưu lượng truy cập có nhiều khía cạnh thuật toán, mặc dù chúng dựa trên sự kiện và không bắt buộc, nấu ăn là thuật toán khi bạn thực hiện trên tự động điều khiển. Lý do tôi thích thêm là mọi người đều học cùng một thuật toán ở trường tiểu học, trong khi để sắp xếp danh sách các số, chiến lược của mọi người khác nhau và họ không có phương pháp: họ cố gắng tìm các mẫu gần, số liền kề và không phải ai cũng biết đặt một bộ bài được cho là dù sao đi nữa (có phải là trái tim trước khi thuổng không?)
Liêuwe Vinkhuijzen

Cá nhân khi được hỏi về điện toán lượng tử, tôi có xu hướng tránh vật lý hoàn toàn nhưng cố gắng đưa ra một ý tưởng chung (rằng một máy tính lượng tử không hoạt động tốt hơn hoặc nhanh hơn mà chỉ có thể thực hiện các phép tính theo cách ngoài phạm vi cho các máy tính thông thường). Nếu họ hỏi theo cách đó thì họ có xu hướng hài lòng với chế độ xem đơn giản hóa, về cơ bản là xử lý SIMD (với tài nguyên tuyến tính đủ để truy cập kích thước theo cấp số nhân của dữ liệu đầu vào song song), mà hầu hết các thuật toán đều là.
Vee

Bạn có thể đi xa hơn chỉ là thẻ; Gần đây tôi thấy mình sử dụng một biến thể của Quicksort để sắp xếp một chồng giấy tờ mà tôi phải sắp xếp mà không hề nghĩ đến nó vì có quá nhiều loại sắp xếp chèn cơ bản.
JAB

@JAB Thật tuyệt vời! Nhưng có lẽ bạn đã biết Quicksort trong tâm trí bạn. Ưu điểm của việc giải thích bổ sung so với sắp xếp là mọi người đều có cùng thuật toán bổ sung, nhưng không có giáo dân nào có bất kỳ thuật toán sắp xếp phương pháp nào. Mặt khác, đó có thể là một lợi thế! Bạn có thể giải thích các thuật toán khác nhau. Đây là con đường tôi đi khi tôi nói chuyện với ai đó có đầu óc toán học bên ngoài cs, và nó đi qua khái niệm các thuật toán khác nhau cho cùng một nhiệm vụ với các giới hạn thời gian khác nhau và tại sao giới hạn thấp lại khó khăn.
Liêuwe Vinkhuijzen

18

Tôi sẽ thử một cái gì đó như thế này:

Lập trình viên có thể nói cho máy tính biết phải làm gì. Để làm điều đó, họ cần sử dụng ngôn ngữ lập trình. Đó là một ngôn ngữ được cả máy tính và con người hiểu. Ví dụ: nếu bạn chỉnh sửa tài liệu Word và bấm phím, máy tính sẽ hiển thị chữ bạn đã nhấn. Đó là bởi vì một lập trình viên đã viết một chương trình nói rằng: Nếu người dùng nhấn "A", hãy đặt "A" vào tài liệu. Nếu người dùng nhấn "B", đặt "B" vào tài liệu, v.v. Máy tính chỉ tuân theo các quy tắc trong chương trình mà lập trình viên đã viết.

Bây giờ đôi khi các lập trình viên viết một quy tắc ngu ngốc do nhầm lẫn. Máy tính sẽ cố gắng tuân theo quy tắc ngu ngốc, nhưng nếu bạn tuân theo một quy tắc xấu, điều gì đó xấu sẽ xảy ra. Ví dụ, đôi khi, khi bạn đang chỉnh sửa tài liệu Word, đột nhiên mọi thứ đóng băng và máy tính không phản ứng nữa. Đó có thể là do một số lập trình viên tại Microsoft đã viết một chương trình kém hoàn hảo.

Công việc của tôi là về việc phát minh ra các phương pháp để kiểm tra các chương trình cho những lỗi như vậy và các lỗi khác, sử dụng các chương trình khác và một số toán học. Ý tưởng cơ bản là tìm ra cách dự đoán những gì sẽ xảy ra khi một chương trình được thực thi mà không thực sự thực hiện nó.

Tất nhiên, vì đó là nghiên cứu, tôi chỉ làm việc trên một khía cạnh nhỏ của vấn đề này, không phải mọi thứ cùng một lúc, nhưng đó là bức tranh lớn về những gì chúng tôi đang cố gắng đạt được.

Tôi đang sử dụng một lời giải thích theo phong cách tương tự cho lĩnh vực của mình (ngôn ngữ cụ thể theo tên miền) và tôi có thể báo cáo rằng nó thường giúp tôi vượt qua "oh bạn là một nhà khoa học máy tính, tôi không bao giờ có thể làm điều đó khiến tôi bỏ đi và ngừng nói cho bạn "vấn đề. Chìa khóa dường như là lấy ra một vài câu đầu tiên cho đến khi đạt được một ví dụ mà người khác có thể liên quan đến, như các tài liệu Word trong trường hợp này. Điểm thưởng cho ví dụ đặc biệt cho người khác, chẳng hạn như Excel cho kế toán viên hoặc Powerpoint cho ông chủ hoặc trò chơi máy tính cho các game thủ hoặc trình duyệt web hoặc bất cứ điều gì.

Lưu ý rằng bạn không cần phải ở mức hời hợt này. Nếu bạn (và người khác!) Muốn, bạn có thể đi sâu vào chi tiết về những gì bạn đang làm chính xác từ đó. Ví dụ: "Trong dự án hiện tại của tôi, tôi đang cố gắng chứng minh một cách toán học rằng những gì tôi đã phát minh năm ngoái thực sự hoạt động. Điều đó có nghĩa là tôi phải xác định rất cẩn thận ý nghĩa của một chương trình và phát minh của tôi dự đoán một chương trình có nghĩa là gì, và sau đó Tôi có thể chỉ ra rằng dự đoán là thực sự đúng ".


12

Hầu hết mọi người hiểu công thức nấu ăn. Nếu bạn làm theo hướng dẫn, bạn sẽ có được một bữa ăn ngon. Đôi khi, mặc dù, các hướng dẫn có thể khó theo dõi. Ví dụ: khi bạn tạo ra những kẻ lừa đảo, bạn sẽ tìm thấy những hướng dẫn như thế này, từng chữ từng chữ từ Perogies Ba Lan của Grandma :

Để nấu perogies: Mang một nồi nước muối nhẹ để đun sôi. Thả perogies trong một tại một thời điểm. Chúng được thực hiện khi chúng nổi lên trên cùng. Đừng đun sôi quá lâu, nếu không chúng sẽ sũng nước! Tẩy bằng thìa rãnh.

Rất tiếc. Hãy xem lại lời khuyên tử tế của bà cho chúng tôi. Thả chúng vào từng cái một ... vì vậy tất cả chúng đều có thời gian khác nhau khi ở trong chậu. Hiểu rồi. Chúng được thực hiện khi chúng nổi lên trên cùng . Có bao nhiêu là 'họ'? Tôi có bắt được từng con khi nó xuất hiện không? Tôi có đợi 80% để nổi lên đầu và sau đó lấy tất cả không? Điều này là điên không chính xác. Đừng đun sôi quá lâu, nếu không chúng sẽ sũng nước! Làm thế nào để tôi đo lường khi họ sắp bị sũng nước để họ không ở quá lâu? Nếu năm cửa sổ bật lên cùng một lúc, tôi sẽ có thời gian để có được tất cả?

Và hãy tin tôi, tôi đã phá hỏng rất nhiều trò hề trong ngày của tôi. Đây là một vấn đề nghiêm trọng mà bất kỳ đầu bếp perogie nào cũng gặp phải trước đây. Nhưng mặc dù những vấn đề này xuất hiện ngay cả khi phân tích cơ bản nhất, mọi người vẫn có thể tạo ra những lời nói dối bằng cách sử dụng chính xác phương pháp này. Nhưng có điều gì chúng ta có thể làm để làm cho nhiều lô perogies thành công hơn và ít lô perogies thất bại hơn không?

Sẽ không tuyệt vời nếu ai đó chuyên làm cho công thức nấu ăn đáng tin cậy hơn? Một người nào đó đã nói rằng "chúng ta có thể dẫn đường cho những kẻ hư hỏng để chúng bật lên và ra khỏi nước!" hoặc "tất nhiên chúng ta có thể thêm một loại thuốc nhuộm đặc biệt vào perogie, an toàn để ăn, điều đó mang lại cho chúng những sắc thái khác nhau và chúng ta biết loại bỏ những màu tối nhất trước, vì chúng có nguy cơ trở nên sũng nước". Chúng tôi muốn một chuyên gia có thể lấy công thức này và khắc phục các vấn đề tiềm ẩn với nó. Cuộc sống của những đầu bếp perogie trên khắp thế giới sẽ trở nên dễ dàng hơn, và những cục mì ống nhỏ hơn sẽ được cho một con chó ăn.

Các lập trình viên cũng làm theo công thức nấu ăn mọi lúc. Nhưng đôi khi, thiết bị họ sử dụng, hướng dẫn họ sử dụng và cách hiểu họ sử dụng không kết hợp với nhau để tạo ra bữa ăn xa hoa mà họ muốn. Rất may, có những người cống hiến sự nghiệp của họ để làm cho cuộc sống của một lập trình viên hiệu quả hơn. Trong trường hợp của bạn, bạn đã chuyên về một trong những công cụ mà lập trình viên sử dụng, ngôn ngữ, để cố gắng làm cho chúng tốt hơn.


7

Đây là cách tôi sẽ (cố gắng) để giải thích điều này với mẹ tôi:

Ngôn ngữ lập trình được mọi người sử dụng để cung cấp hướng dẫn cho máy tính. Mọi thứ mà máy tính làm được thực hiện thông qua một số mã máy tính được viết bởi ngôn ngữ lập trình bởi một lập trình viên.

Vì vậy, nếu, ví dụ, chúng tôi muốn kênh TV thay đổi khi nhấn nút, thì chúng tôi sẽ cần phải viết một số mã bằng ngôn ngữ lập trình để thực hiện việc này. Điều tương tự cũng xảy ra với mọi thứ xảy ra với máy tính xách tay, điện thoại thông minh và bất kỳ thứ gì khác có hoạt động liên quan đến máy tính.

Dường như có thể có một ngôn ngữ lập trình duy nhất mà các lập trình viên có thể sử dụng để viết tất cả các chương trình. Nhưng đây không phải là trường hợp. Ngôn ngữ lập trình khác nhau tồn tại cho tất cả các loại ứng dụng khác nhau.

Một số được sử dụng để xây dựng trang web, số khác để xây dựng các ứng dụng máy tính xách tay (như Microsoft Word).

Một trong những lý do có nhiều ngôn ngữ lập trình khác nhau là vì một số ngôn ngữ phù hợp hơn với một số nhiệm vụ so với các ngôn ngữ khác. Một lý do khác là một số ngôn ngữ được thiết kế để sử dụng với các máy tính khác nhau. Vì vậy, bạn không thể luôn lấy mã được viết cho điện thoại thông minh và chạy nó trên máy tính xách tay. Và trong khi một số lập trình viên có thể lập trình bằng nhiều ngôn ngữ, và nhiều người có khả năng hoặc học ngôn ngữ mới một cách nhanh chóng, thì bất kỳ lập trình viên nào cũng sẽ biết một số ngôn ngữ tốt hơn những ngôn ngữ khác, và một số thì không.

Vì vậy, ngôn ngữ lập trình là một trong những công nghệ chính giúp máy tính hoạt động. Ngôn ngữ lập trình được thiết kế tốt có thể tăng năng suất của các lập trình viên rất nhiều. Họ cũng có thể cải thiện bảo mật và giảm lỗi lập trình, lỗi và lỗi.

Và về cơ bản, đây là điều tôi nghiên cứu: Làm thế nào để các phần khác nhau của ngôn ngữ lập trình ảnh hưởng đến năng suất lập trình? Những phần nào của một ngôn ngữ cụ thể làm cho nó tốt hơn để viết mã cho một trang web? Tại sao một số ngôn ngữ phổ biến hơn những ngôn ngữ khác?

Mặc dù có vẻ như những câu hỏi này là bí truyền và khác xa với cuộc sống hàng ngày của người bình thường, nhưng điều ngược lại là đúng. Việc nghiên cứu ngôn ngữ lập trình rất quan trọng đối với bất kỳ sản phẩm hoặc dịch vụ nào sử dụng máy tính. Và ngày nay điều đó có nghĩa là về mọi thứ;)


7

Đặt cược tốt nhất của bạn có thể là hình thành tương tự với ngôn ngữ của con người.

Ngôn ngữ lập trình được sử dụng để cung cấp hướng dẫn cho máy tính. Ngôn ngữ của con người được sử dụng để truyền đạt ý tưởng cho người khác và giúp hình thành suy nghĩ của chúng ta. Các giả thuyết Sapir-Whorf nói rằng ngôn ngữ mà bạn sử dụng ảnh hưởng đến suy nghĩ của bạn. (Mức độ mà giả thuyết Sapir-Whorf là ​​đúng được tranh luận, nhưng chúng ta chỉ có thể chấp nhận nó là đúng khi thảo luận về ngôn ngữ lập trình. Nếu không, bạn cũng có thể từ bỏ bằng tiến sĩ. 😜)

Có rất nhiều ngôn ngữ của con người, một số có tính năng mà chúng ta coi là kỳ lạ. Ví dụ:

  • Một số ngôn ngữ yêu cầu bạn thể hiện tính minh bạch với mọi tuyên bố: liệu tuyên bố đó có phải do kinh nghiệm của chính bạn, suy luận của chính bạn, tin đồn, suy đoán, v.v.
  • Một số ngôn ngữ hình thành từ lớn bằng cách kết tụ; mỗi từ có thể được sửa đổi cao để mã hóa nhiều thông tin về vai trò ngữ pháp của nó. Các ngôn ngữ khác hầu như không bao giờ sửa đổi các từ, và dựa vào thứ tự từ hoặc các hạt để diễn đạt thông tin đó.
  • Ngôn ngữ khác nhau về kích thước từ vựng . Một số ngôn ngữ có từ ngữ mà chỉ có thể được dịch với một lời nói dài dòng (ví dụ 엄친아 ). Một số ngôn ngữ có cách diễn đạt xuất sắc đến mức các ngôn ngữ khác mượn chúng (ví dụ Schadenfreude).
  • Một số ngôn ngữ không có khái niệm trái / phải; bạn phải thể hiện mọi thứ theo hướng bắc / nam / đông / tây.
  • Một số ngôn ngữ không có số. Ngôn ngữ cũng khác nhau về số lượng tên màu phổ biến .
  • Ngôn ngữ khác nhau trong âm vị học của họ. Ví dụ, tỷ lệ âm tiết khác nhau, với tiếng Nhật có xu hướng sử dụng nhiều âm tiết đơn giản, trong khi tiếng Trung chậm hơn, nhưng mã hóa thông tin bằng âm.
  • Ngôn ngữ khác nhau về mật độ thông tin . Nếu bạn nhìn vào một bản dịch tiếng Trung-Anh-Pháp, bạn sẽ thấy rằng phiên bản tiếng Trung rất nhỏ gọn trên giấy và tiếng Pháp sẽ chiếm nhiều không gian nhất.
  • Một số ngôn ngữ, như tiếng Anh, là lăng nhăng: bất kỳ ai cũng có thể tự do mượn một từ từ ngôn ngữ khác và tiếng Anh hóa nó. Các ngôn ngữ khác, như tiếng Pháp, có một cơ thể tiêu chuẩn chống lại sự thay đổi. Ví dụ, tiếng Iceland là bảo thủ quyết liệt.

Có một ngôn ngữ tốt nhất , nói một cách khách quan? Câu trả lời có thể phụ thuộc vào những gì bạn đang cố gắng làm.

  • Nếu bạn đang cố gắng liên lạc bí mật qua radio, Navajo sẽ là một lựa chọn tốt. (Đề cập đến ngôn ngữ "chỉ viết" yêu thích của bạn.)
  • Nếu bạn đang cố gắng viết một cảnh báo cho các thế hệ tương lai và dòng chữ phải có thể hiểu được vài nghìn năm kể từ bây giờ, bạn có thể muốn sử dụng tiếng Trung (do số lượng người nói và sự ổn định của hệ thống chữ viết của nó) hoặc có thể Tiếng Anh (đã thay đổi đáng kể trong thiên niên kỷ qua, nhưng được biết đến rất rộng rãi). (C và JavaScript có thể sẽ tồn tại "mãi mãi".)
  • Trung Quốc, có rất nhiều từ đồng âm, là tuyệt vời cho picky . (Thơ Perl)
  • Có lẽ tính trung lập rất quan trọng, trong trường hợp đó bạn có thể chọn Esperanto. (Java được thiết kế để có thể mang theo; C thì ít hơn.)
  • Có lẽ bạn cần thể hiện một ý nghĩ với độ chính xác hoàn toàn, và không có ngôn ngữ tự nhiên nào đủ. Bạn phải đến Ithkuil !
  • Có thể rất khó dịch giữa một số cặp ngôn ngữ (ví dụ tiếng Ả Rập-Anh ) vì sự khác biệt lớn về văn hóa và ý nghĩa văn hóa với một số từ nhất định. Tương tự, một số ý tưởng không dễ dàng được thể hiện bằng một số ngôn ngữ máy tính nhất định vì khái niệm này không tồn tại (ví dụ: đệ quy đuôi).

Cuối cùng, mọi thứ trên máy tính đều được dịch sang ngôn ngữ máy, nhưng chọn ngôn ngữ phù hợp cho công việc có thể ảnh hưởng lớn đến năng suất, độ tin cậy, hiệu suất và sự linh hoạt của phần mềm của bạn. Chúng tôi lựa chọn ngôn ngữ bó như Ada hoặc Java cho các dự án "nghiêm trọng", và Ruby hay Perl cho tối đa whipuptitude . Để truy vấn cơ sở dữ liệu, SQL là ngôn ngữ thông thường; viết mã C của riêng bạn sẽ là ngu ngốc.

Dựa trên những sự tương tự này, tôi chắc chắn rằng bạn có thể giải thích các ý tưởng như lập trình chức năng, an toàn kiểu, suy luận kiểu, v.v. trong vài giờ.


1
Một khó khăn với điều này là một số người chưa bao giờ thực sự phản ánh về ngôn ngữ tự nhiên của họ. Vì vậy, các ví dụ ngôn ngữ có thể khó nắm bắt đối với một số người, như khái niệm về ngôn ngữ lập trình. Nếu bạn biết người đó (ít nhất là) song ngữ, triển vọng có thể tốt hơn ....
TextGeek

@TextGeek Ngay cả trong tiếng Anh, có phương ngữ. Mọi người tranh luận về các quy tắc ngôn ngữ như phủ định kép và kết thúc câu với giới từ. Ngôn ngữ phát triển mọi lúc, đôi khi theo những cách gây tranh cãi. Sự phổ biến của nhắn tin đã dẫn đến chữ viết tắt mới. Trong tiếng Anh Mỹ, bạn có thể biến bất kỳ danh từ nào thành scandal bằng cách thêm hậu tố "-gate". Tôi không nghĩ bạn phải biết song ngữ để đánh giá cao sự đổi mới và đa dạng ngôn ngữ.
200_success

3
  • ngôn ngữ máy tính liên quan phần nào đến ngôn ngữ của con người. họ sử dụng các từ tiêu chuẩn / phổ biến / chia sẻ. xem xét rằng có hàng ngàn ngôn ngữ của con người, một số ngôn ngữ không hoạt động, những ngôn ngữ khác hoạt động và từ vựng và cách sử dụng của chúng liên tục phát triển theo thời gian. một số người tạo ra các từ hữu ích mới để diễn đạt các khái niệm mà trước đây không thể diễn tả được. một khía cạnh chồng chéo khác của ngôn ngữ máy tính và ngôn ngữ của con người là ngữ pháp . một số ngôn ngữ, ví dụ tiếng Anh có ngữ pháp rất phức tạp. xem xét tất cả các thì khác nhau và các quy tắc phức tạp chi phối chúng. các ngôn ngữ khác không có cùng một thì . mối tương quan khác là với các phần của lời nóicác danh mục, ví dụ như danh từ, động từ, trạng từ, tính từ, v.v., các chức năng này hơi giống các loại trong ngôn ngữ máy tính. hãy tưởng tượng việc tạo ra các ngôn ngữ mới với các phần khác nhau của các loại lời nói chưa được xem xét trước đây hoặc với các kết hợp mới của các phần của lời nói đến từ các ngôn ngữ khác nhau, v.v.; vì vậy lưu ý rằng ngôn ngữ học có mối liên hệ với khoa học máy tính, ví dụ như trong lý thuyết ngôn ngữ Chomskian.

  • phần mềm và phần cứng thường liên quan đến động cơmáy móc và thậm chí được đặt tên theo cái này. có một sự tương tự phần mềm cũ rằng cố gắng sửa đổi một hệ thống sản xuất 24/7 phức tạp giống như thay đổi động cơ của máy bay khi nó đang bay . cũng lưu ý rằng động cơ phản lực rất phức tạp và liên quan đến thông số kỹ thuật chính xác lớn của các bộ phận hoán đổi cho nhauvà ở đây có một số tương tự với ngôn ngữ máy tính điều khiển phần cứng. tưởng tượng tất cả sự phức tạp của các tài liệu mô tả chính xác cách chế tạo động cơ phản lực: tất cả các bộ phận, cách chúng được chế tạo, cách chúng khớp với nhau, cách chúng được lắp ráp, v.v. chúng được tạo / biên dịch bởi các kỹ sư sử dụng một định dạng / cấu trúc / quy tắc thông thường chính xác; phần mềm có phần giống với điều này.

  • tái máy, bất cứ ai mà không cần giáo dục khoa học hay toán học hoặc thậm chí là một đứa trẻ có thể hiểu được những khái niệm cơ bản và nhiều khía cạnh của một máy Turing! một sáng tạo tuyệt vời một nghi phạm Turing được truyền cảm hứng từ máy chữ và / hoặc máy teletype. người ta có thể mô tả bảng trạng thái và hiển thị cho họ một bảng trạng thái mẫu tính toán phép nhân và ai đó có thể xem hoạt hình youtube của máy Turing tính toán một phép tính cơ bản như phép nhân. nói với họ rằng bảng trạng thái có thể tính toán hoặc quyết định một ngôn ngữ theo nghĩa đen và các đầu vào được gọi là các từ theo nghĩa đen . Trên thực tế, máy Turing chấp nhận các từ trong ngôn ngữv.v. sau đó nói với họ rằng có hai bảng trạng thái vừa tính toán nhân, nhưng một bảng nhanh hơn hoặc hiệu quả hơn bảng kia, và nghiên cứu của bạn liên quan đến việc tìm các khái niệm bảng trạng thái tốt hơn. tìm ra cách xây dựng các bảng trạng thái có hiệu quả liên quan đến các ngôn ngữ lập trình tóm tắt nội dung của các bảng trạng thái lớn! một trình biên dịch chuyển đổi mã được viết bằng ngôn ngữ lập trình thành một bảng trạng thái lớn.

  • thuật toán sắp xếp là một phép ẩn dụ cấp nhập cảnh tuyệt vời vào khoa học máy tính. người ta có thể nhìn vào các danh sách khác nhau của thuật toán aka thuật toán cho từng loại. người ta có thể tìm hiểu sắp xếp bong bóng là gì so với sắp xếp chèn, người ta có thể sử dụng một cỗ bài. bây giờ tập trung vào các nhóm hướng dẫn khác nhau và xem xét rằng chúng phải được viết bằng một ngôn ngữ rất chính xác, chính xác như các câu lệnh toán học,cú pháp chặt chẽ , v.v. và có các điểm chung / cấu trúc cơ bản: logic điều kiện, vòng lặp, biến vv và giải thích rằng nghệ thuật của đặc tả chính xác này là về ngôn ngữ máy tínhvà rằng một số ngôn ngữ khác nhau có thể mang lại cùng một thuật toán, nhưng có một số biến thể phong cách tinh tế trong các ngôn ngữ này được nghiên cứu ở độ sâu lớn, v.v.


1
Tại sao downvote cái này? Tôi nghĩ rằng có nhiều hiểu biết. Người ta có thể không đồng ý về tất cả các điểm, nhưng có rất nhiều khả năng ở đây. +1
ứng

3

Bạn chỉ cần nói "Tôi đang giúp những người dạy máy tính làm việc"

Ý tưởng là các lập trình viên dạy máy tính làm công cụ bằng các chương trình và bạn đang giúp họ. Tôi nghĩ rằng nó sẽ hoạt động khi giả sử họ đã biết một chút về máy tính.


"Tôi nghĩ rằng nó sẽ hoạt động khi giả sử họ đã biết một chút về máy tính" đó là toàn bộ vấn đề: nếu bạn đọc kỹ câu trả lời của tôi, bạn sẽ thấy vấn đề chính là giải thích những gì tôi làm với những người không biết về cách thức máy tính thực sự hoạt động. .
effeffe

@effeffe: nhưng họ biết rằng máy tính tồn tại? Và họ có thể có một số ý tưởng rằng có những thứ gọi là "chương trình", "ứng dụng" hoặc "ứng dụng", ngay cả khi họ chưa bao giờ cố ý sử dụng máy tính. Vì vậy, để đơn giản, lập trình (trong số những thứ khác) tạo ra một ứng dụng bằng cách viết ra các hướng dẫn mà máy tính có thể làm theo. Đương nhiên, sẽ mất rất nhiều thời gian và hướng dẫn để họ đánh giá cao bất kỳ chi tiết nào về lập trình hoặc về cách cải thiện nó, nhưng nếu họ biết rằng máy tính và chương trình trở nên tốt hơn theo thời gian, họ sẽ biết "một chút" về máy tính.
Steve Jessop

3

Nếu bạn không muốn sử dụng phép so sánh, mặc dù tôi nghĩ rằng "thuật toán" mà thuật toán mà Liễu đưa ra là rất hay để truyền đạt ý tưởng, bạn có thể nói rằng bạn muốn giảm hiểu lầm giữa con người và máy tính. Rốt cuộc, bạn đang đối phó với các ngôn ngữ, và đó là điều gì đó rất cơ bản đối với con người, tôi đoán vậy. Vậy tại sao không giả vờ máy tính chỉ là một tâm trí khác mà bạn muốn nói chuyện?

Con người tạo ra máy tính, vì vậy chúng ta biết tâm trí của máy tính hoạt động như thế nào. Nhưng máy tính thường không "biết" tâm trí của chúng ta hoạt động như thế nào. (Hoặc ý định thực sự của chúng tôi là khi chúng tôi viết một lỗi phức tạp và được chế tạo tinh xảo, sống hạnh phúc trong các mã của chúng tôi trong nhiều chu kỳ;)) Vì vậy, chúng tôi phải tinh chỉnh ngôn ngữ mà chúng tôi sử dụng để giao tiếp với chúng và giảm khả năng hiểu lầm. Và đó là những gì bạn làm. Sự tương tự như kiểm tra chính tả hoặc ngữ pháp, tất nhiên, rất được hoan nghênh trong bối cảnh này.


3

Đây là hai tương tự mà bạn có thể thấy hữu ích:

  • Công việc của tôi có phần giống như khám phá những cách tiếp cận mới đối với ký hiệu âm nhạc. ( ví dụ ) Mặc dù các hệ thống ký hiệu chiếm ưu thế khá phức tạp, nhưng rất có giá trị để khám phá các lựa chọn thay thế giúp giảm thời gian / công sức / lỗi cho người soạn nhạc, cho người biểu diễn hoặc cho phép những thứ khó hiểu hoặc không thể diễn đạt trong hệ thống chiếm ưu thế, hoặc thậm chí chỉ thúc đẩy các kiểu tư duy khác nhau và do đó dẫn đến các tác phẩm mới. (Điều này giúp dễ hiểu rằng một trong những thách thức là thuyết phục mọi người chấp nhận công cụ mới.)

  • Tôi đang giúp thiết kế các công cụ tốt hơn cho những người trong ngành của tôi. Giống như những người trong ngành sản xuất được hỗ trợ bởi những đổi mới như máy khoan không dây, máy cắt laser và máy in 3D (không tồn tại 60 năm trước), những người trong ngành phát triển phần mềm được hỗ trợ bởi sự mạnh mẽ hơn, chính xác hơn, mạnh mẽ hơn, hoặc ngôn ngữ lập trình dễ sử dụng hơn và các tính năng của chúng.


2

Chà, rất có thể, bạn có một số lý do để học ngôn ngữ - sử dụng lý do đó. Ví dụ:

Tôi đang cố gắng làm cho máy tính và các ứng dụng của chúng rẻ hơn, dễ sử dụng hơn và an toàn hơn.

Nếu đó là thứ gì đó thu hút sự chú ý của họ, hãy thoải mái đi sâu hơn một chút, nhưng đừng quên khoảng cách suy luận - hầu hết mọi người đều gặp khó khăn khi giải thích điều gì đó quá xa so với kinh nghiệm và kiến ​​thức hiện có của học sinh.

Ngôn ngữ là cách xuống thang máy tính. Những người bạn đang cố gắng giải thích có khả năng không biết thuật toán là gì , ít hơn là có nhiều cách khác nhau để biểu thị thuật toán đã nói ít nhiều hữu ích. Bạn có thể giải thích bất cứ điều gì nếu bạn đi đủ nhẹ nhàng, nhưng hãy chuẩn bị đi qua nhiều lớp nếu bạn muốn giải thích một cái gì đó "sâu sắc" như "ngôn ngữ lập trình RnD". Nó giúp nếu những người bạn giải thích đã xử lý tốt toán học, nhưng điều đó hiếm như kiến ​​thức máy tính :)

Đi dễ dàng trên tương tự. Họ có vẻ như họ đang giúp đỡ, nhưng từ kinh nghiệm của tôi, họ thường thêm vào sự nhầm lẫn ngay cả khi bạn nghĩ rằng họ là một trợ giúp tuyệt vời. Ngôn ngữ lập trình là loại giống như luật sư nói chuyện ... nhưng đó không phải là rất hữu ích cho những người không đã hiểu cả lập trình và bào chữa, thực sự. Nếu bạn thực sự cần một số trợ giúp thêm, các ví dụ hoạt động đủ tốt - nhưng bạn cần phải cung cấp chúng cho người bạn đang giải thích (và chính xác những gì bạn đang nghiên cứu)

Bạn biết làm thế nào bạn không thể chia cho số không? Tôi đang cố gắng đảm bảo rằng các máy tính thậm chí không bao giờ cố gắng chia cho số 0, vì vậy chúng không gặp sự cố khi ai đó mắc lỗi.


Để đề xuất một cách tiếp cận theo giai đoạn và nhẹ nhàng.
PJTraill

1

Tôi tìm thấy sự tương tự tốt nhất được điều chỉnh cho người bạn đang nói chuyện. Họ có phải là họa sĩ không? Thảo luận về cách bạn đang làm tương đương với việc khám phá lý thuyết về cách tạo ra bàn chải tốt hơn, chỉ có lĩnh vực này chỉ 60 tuổi thay vì 600! Người cưỡi ngựa? So sánh nó với sự phát triển của nhiệm vụ cụ thể giày ngựa trong những năm qua.

Nếu họ thực sự muốn hiểu rõ hơn, cách yêu thích của tôi để giải thích đó là nói về việc điền vào biểu mẫu Thuế và hướng dẫn trên mỗi dòng. Tôi thấy hầu hết những người trên 20 tuổi có một số kinh nghiệm với Biểu mẫu 1040 của IRS và những hộp bạn điền tương ứng khá độc đáo để nói về việc gán biến. Sau đó, tôi chỉ ra rằng phần mềm thực hiện tương đương với khoảng 2 tỷ trong số này một phút (một con số đã được tạo ra, nhưng nó được ghi điểm). Nếu bạn đang học ngôn ngữ máy tính, mọi người sẽ dễ dàng hiểu tại sao hướng dẫn tốt hơn sẽ thực sự quan trọng =)

Nếu họ vẫn có vẻ quan tâm, đây là điểm mà tôi bắt đầu cố gắng giải thích kiểm soát dòng chảy. Thông thường, khi tôi thảo luận xong về kiểm soát dòng chảy trên Mẫu 1040, họ bắt đầu phấn khích và bắt đầu hỏi liệu tôi đã bán bất kỳ ý tưởng nào của mình cho chính phủ chưa!

Tôi thường nói về các hệ thống nhúng, vì vậy đôi khi tôi sẽ hợp nhất mẫu tương tự Mẫu 1040 với robot nấu một ổ bánh mì (hoặc 500). Thông thường nó hoạt động tốt, mặc dù vì một số lý do từ các biểu mẫu thuế IRS để tạo ra thứ gì đó để lại hương vị tốt trong miệng của bạn là một điều thực sự khó khăn đối với một số người.


1

Cha mẹ của bạn có một số loại máy tính. Có lẽ không phải một, mà là nhiều. Họ có thể có một máy tính để bàn hoặc máy tính xách tay, hoặc điện thoại hoặc iPad. Nếu không, sau đó họ có một máy giặt hoặc một bản ghi video hoặc đầu DVD hoặc một cái gì đó có máy tính bên trong.

Nếu họ không, bạn nói: "Xin lỗi, nhưng bạn đã có một cuộc sống hoàn toàn không có máy tính. Vì vậy, tôi không thể giải thích cho bạn những gì tôi đang làm. Nhưng thế giới đang thay đổi. Bạn chỉ cần tin tôi rằng Tôi biết tôi đang làm gì. "

Nếu họ có bất kỳ loại máy tính nào, bạn nói: "Đây là máy tính và nó không hoạt động bằng phép thuật. Nó hoạt động vì một người đàn ông hay phụ nữ thông minh đã viết một chương trình cho máy tính của bạn biết cách làm việc. Và công việc của những người đàn ông và phụ nữ thông minh này thực sự rất khó, và những gì tôi đang làm là giúp họ làm cho công việc dễ dàng hơn ".


-1

Một thời gian trước tôi đã quyết định rằng một sự tương tự tốt cho lập trình có thể dễ hiểu đối với những người có ít hoặc không có kinh nghiệm về máy tính, sẽ viết các công thức đan .

Một công thức đan tốt có chứa một số kích cỡ trong cùng một danh sách hướng dẫn, cung cấp cho bạn các vòng lặp và câu lệnh if. Nó không thể đọc được đối với những người không đan và nếu nó có lỗi, bạn sẽ có các mẫu bị sai lệch hoặc tay áo phụ. Sau đó, tùy thuộc vào bạn - với tư cách là người viết công thức - để tìm ra công thức sai ở đâu dựa trên áo len không chính xác và sửa nó.

Sau đó, bạn có thể sử dụng ví dụ về "Tôi đang xem cách các công thức nấu ăn khác nhau để đan, đan móc, Nålebinding và tương tự" và học với X (nơi bạn cần tìm một sự tương tự cho những gì bạn thực sự làm ).


Người hỏi không học lập trình. Họ đang nghiên cứu thiết kế ngôn ngữ lập trình.
David Richerby

@DavidR Richby Đây là lý do tại sao tôi đề nghị sử dụng ví dụ của OP để xem cách các công thức tìm kiếm các loại công cụ khác nhau. Rõ ràng những điều này cũng rất khác nhau.
Thorbjørn Ravn Andersen

-1

Đó là phép thuật!

Khi những người không có nền tảng kỹ thuật nào hỏi ý nghĩa của việc viết phần mềm / chương trình / làm kỹ thuật phần mềm, tôi chỉ nói cho họ biết nó thực sự là gì: ma thuật. Các pháp sư bùa chú bằng một ngôn ngữ bí truyền để thực hiện một số nhiệm vụ nhất định, họ vẫy đũa phép và điều gì đó kỳ diệu xảy ra. Tôi sử dụng một số phép thuật trong một ngôn ngữ bí truyền, tôi ngọ nguậy con chuột của tôi, và một cái gì đó kỳ diệu xảy ra (theo như chúng có liên quan).

Nếu họ không bị thuyết phục, tôi yêu cầu họ bật điện thoại thông minh của họ và cho tôi biết mọi thứ trên đó thực sự hoạt động như thế nào. Họ thường nói: "Tôi không biết, nó chỉ có thế. Tôi nhấn nút và những thứ xảy ra." Sau đó, tôi nói với họ: "Vâng, chính xác, nhưng tôi biết chuyện gì đang thực sự xảy ra, và về cơ bản giống như Harry Potter vẫy đũa phép và nói: 'Tập trung vào mục đích', đối với tất cả ý định và mục đích, đối với giáo dân, tôi nghĩ rằng đây là một lời giải thích hoàn toàn chính đáng.

Hầu như mọi người đều biết Harry Potter là ai, anh ta làm gì và điều gì khiến anh ta trở nên đặc biệt (ít nhất là anh ta là một pháp sư và có thể làm những việc mạnh mẽ bằng ma thuật). Bạn có thể giải thích một cách đơn giản rằng đôi khi các pháp sư cần viết phép thuật của họ bằng một ngôn ngữ mới để làm cho phép thuật của họ trở nên mạnh mẽ hơn, điều đó không thực sự xa sự thật. Bạn chỉ có thể nói với họ rằng bạn đang nghiên cứu quá trình tạo ra những quyển sách phép thuật mạnh mẽ hơn để hỗ trợ một thế hệ phù thủy thậm chí còn mạnh hơn, những người có thể tạo ra phép thuật thậm chí còn lớn hơn trên các thiết bị tiêu dùng yêu thích của họ. Mọi người đều đánh giá cao điều đó.

Sử thi thất bại

Nếu thất bại, tôi quay lại ví dụ về công thức, bởi vì tính không đồng nhất của các giải pháp ít nhất dạy cho mọi người rằng có nhiều hơn một cách để lột da mèo (hoặc nướng bánh), và đây là một phần của việc lập trình như vậy khó khăn. Nó cũng giúp đặt người vào vị trí là CPU và đôi khi làm theo hướng dẫn mà họ có thể không hiểu (hầu hết mọi người có thể không biết sự khác biệt giữa baking soda và bột nở, và tại sao một công thức lại có cái này hay cái khác).

Đường cùng

Tôi không thích sử dụng toán học làm ví dụ, vì để làm toán, bạn phải hiểu các bước để làm gì. Bạn không thể làm toán nhiều bằng cách làm theo các hướng dẫn một cách mù quáng (tốt, bạn có thể, nhưng đó không phải là cách con người thường học nó). Tôi không thích sắp xếp làm ví dụ vì nó quá kỹ thuật để giáo dân đánh giá cao. Nếu tôi đang nói chuyện với một người có thể đánh giá cao ví dụ sắp xếp, thì có lẽ họ đã có một số ý tưởng về lập trình là gì và có khả năng đã tự thử nó.


1
Tôi không thấy điều này có liên quan đến câu hỏi. Cụ thể, câu hỏi là hỏi làm thế nào để giải thích lý thuyết loại cho giáo dân, và lý thuyết loại toán học.
David Richerby

Có lẽ đáng buồn, có lẽ là không, nhưng nói chung lập trình là một cuốn sách đóng tới 99 +% dân số thế giới. Tôi đã dành một khoảng thời gian hợp lý trong nhiều năm để cố gắng khiến những người không phải lập trình viên hiểu được lập trình mà không thành công. Giải thích sự phức tạp và sự tinh tế của các hệ thống loại khác nhau giống như giải thích vật lý hạt hạ nguyên tử cho những người đó - đôi mắt của họ sẽ sáng lên và họ có thể sẽ lịch sự nhưng họ sẽ không hiểu. Và điều đó ổn - họ KHÔNG CẦN hiểu nó, và trong tất cả khả năng họ không CHĂM SÓC rằng họ không hiểu điều đó. Đó là đủ mà chúng tôi làm. :-)
Bob Jarvis
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.