Cách giới thiệu máy tính không biết chữ 50 tuổi để lập trình [đã đóng]


10

Hôm nọ bố tôi hỏi tôi một câu mà tôi sẽ không bao giờ mong đợi ở ông.

"Làm thế nào tôi có thể học C ++?"

Bố tôi sắp bước sang tuổi 56 và máy tính là một khái niệm xa vời đối với ông. Anh ta không biết sử dụng điện thoại rất tốt bên cạnh các số điện thoại (không có quay số nhanh hoặc liên lạc); mặc dù anh ấy đã bắt đầu học máy tính tốt hơn một chút - đến mức anh ấy biết cách mở internet (trong Windows) và duyệt xung quanh (và đã hoàn thành thành công một số ứng dụng công việc hoàn toàn trên mạng của mình, trong đó anh ấy cũng được cung cấp các vị trí ). Tuy nhiên, đây là những kinh nghiệm cửa sổ quá hẹp có nghĩa là nhiều, thực sự.

Trong khi ông có thể không có nền tảng, bố tôi biết đọc. Và tôi có nghĩa là đọc như một kỹ năng, không chỉ là một khả năng. Anh ta có ít hoặc không học đại học (vấn đề tài chính, gia đình, v.v.) và may mắn học xong trung học, nhưng vẫn tự học để trở thành một thợ điện chính và đã là một trong gần 30 năm nay. Anh ấy cũng làm như vậy với guitar, học chơi ở cấp độ rất chuyên nghiệp và đã được khen ngợi về kỹ năng của anh ấy. Ở trường trung học, anh ấy đã chọn một cuốn sách nâng tạ - và là người duy nhất trong trường trung học của anh ấy vào thời điểm đó đủ điều kiện chính thức là một "vận động viên" theo tiêu chuẩn quốc gia.

Trong mọi trường hợp, anh ta chỉ cần một cái gì đó để đọc. Một cái gì đó để dạy anh ta. Anh ta hấp thụ thông tin như một miếng bọt biển.

Tôi không nghi ngờ gì về động lực hoặc khả năng làm việc này của cha tôi, vì vậy mục tiêu chung của tôi chỉ đơn giản là:

Đưa cha tôi vào thế giới của máy tính, và đưa ông lên con đường lập trình.

Tôi tin tưởng mạnh mẽ rằng một khi tôi đưa anh ta vượt qua các nguyên tắc cơ bản, kỹ năng đọc và lái xe của anh ta sẽ giúp anh ta tiếp tục điều này.

Vì vậy, tôi đang hỏi tất cả các bạn: tôi nên bắt đầu từ đâu với tất cả những điều này? Và các nguồn lực tốt nhất hiện có là gì? Tôi có nên bắt anh ta khởi động Linux thay vì Windows không? C ++ có phải là một ý tưởng tồi?

Hãy nhớ rằng, anh ta cần (IMO) học máy tính trước, và sau đó có được sự hiểu biết đầu tiên (trải nghiệm "Hello world") về lập trình.

Vì lợi ích và ưu tiên hàng đầu, tôi muốn các tài nguyên trực tuyến miễn phí mà anh ấy có thể đọc, nhưng bằng mọi cách, mọi đề xuất tốt trong in ấn hoặc trả tiền trực tuyến đều được chào đón (mà tôi có thể xem xét sau này để mua hàng).

Ngoài ra, tôi dự định bắt đầu với anh ấy bằng C ++ (không có Python, Java, v.v.), vì tôi biết điều đó là tốt nhất và sẽ có thể giúp anh ấy tiếp tục với mã. (Tôi có kiến ​​thức tối thiểu ngay bây giờ trong các ngôn ngữ khác).

Chỉnh sửa: Tôi đang nhận được rất nhiều đề xuất liên tục để sử dụng Python. Lý do duy nhất tôi muốn làm C ++ là tôi BIẾT nó và có thể THÌ khi bố tôi cần giúp đỡ. Tiếp xúc RẤT LỚN của tôi đối với lập trình từng là Java. Tôi đã học Java và tôi đã giỏi về nó. Tôi mở các đề xuất khác, nhưng vui lòng cung cấp một ứng dụng hiệu quả cho các đề xuất của bạn.

EDIT # 2: Tôi hiểu cách tiếp cận / suy nghĩ / kiến ​​thức của tôi có thể thiếu ở đây. Tôi là sinh viên năm thứ hai chuyên ngành CS. Nếu bạn không đồng ý với bất cứ điều gì trong bài viết của tôi, hãy cho tôi biết lý do - hãy cho tôi ý tưởng, thông tin - đó là lý do tại sao tôi hỏi ngay từ đầu. Để thu hẹp mục tiêu chung của tôi vào các mục tiêu cụ thể có thể tiếp cận.


1
Câu hỏi này không liên quan đến phát triển phần mềm chuyên nghiệp. Mặc dù trong quá trình của chúng ta, chúng ta phải tương tác với những người khác, kỹ thuật và phi kỹ thuật, và đôi khi dạy họ, chúng ta không phải là giáo viên hoặc người hướng dẫn chuyên nghiệp và không thể cung cấp lời khuyên tốt về cách dạy tốt nhất cho ai đó. Nếu bạn muốn thảo luận thêm về vấn đề này, bạn có thể đặt câu hỏi trên trang Meta của chúng tôi .
Thomas Owens

@ThomasOwens làm thế nào để bạn biết không có giáo viên hoặc người hướng dẫn chuyên nghiệp tồn tại trong cộng đồng? Meta có được xem ít hơn thực sự là nơi tôi phải đến không? Tôi đoán tôi có thể nhượng bộ điều đó (mặc dù tôi thực sự muốn nó ở lại đây), xin vui lòng di chuyển nó cho tôi. NẾU có điều gì đó tôi có thể làm để làm cho câu hỏi này phù hợp với tiêu chí để được cộng đồng SO / Lập trình viên xem tốt hơn, vui lòng giúp tôi làm như vậy.
bỏ qua

1
Theo hiểu biết tốt nhất của tôi, không có một trang web nào chấp nhận câu hỏi này. Tôi chỉ xem qua danh sách và không thấy cái nào cả. Nếu bạn muốn thảo luận thêm về vấn đề này, vui lòng đặt câu hỏi trên Meta .
Thomas Owens

@ThomasOwens Chà, tôi không ở đây để than vãn hay troll, vì vậy tôi sẽ làm hết sức mình với nó. Cảm ơn
Skippr

Lén lút câu trả lời của tôi trong các bình luận ... Trái với câu trả lời dưới đây tôi nghĩ C ++ thực sự là một ngôn ngữ đầu tiên tuyệt vời. Đặc biệt là cho người mới bắt đầu. Bạn bắt đầu với bảng điều khiển tầm thường IO và C ++ thân thiện với người mới bắt đầu hơn nhiều so với Java hoặc C # về vấn đề này. Ít mã nồi hơi để nhầm lẫn anh quá. Chắc chắn có những tính năng nâng cao sẽ gây nhầm lẫn nhưng bạn có thể đi rất xa giới hạn bản thân trong một vài tính năng cơ bản.
Lord Tydus

Câu trả lời:


13

Trước hết, ngay cả khi cá nhân bạn biết rõ về C ++, đó là ngôn ngữ đầu tiên khủng khiếp , khủng khiếp cho người mới bắt đầu và tôi không thể khuyên bạn đủ mạnh để giữ anh ta càng xa nó càng tốt nếu anh ta muốn học viết mã thành công. Học lập trình không phải là về ngôn ngữ, mà là học cách diễn đạt các yêu cầu trừu tượng trong logic hình thức. C ++ khiến việc tập trung vào đó trở nên khó khăn vì bạn thường xuyên vấp phải các vấn đề liên quan đến ngôn ngữ.

Nếu anh ấy muốn học cách thể hiện ý tưởng theo logic hình thức, hãy tìm một thứ gì đó đơn giản. Các lựa chọn của tôi sẽ là Pascal (để phát triển cấp ứng dụng) hoặc Python (cho công việc ở cấp độ kịch bản) vì cả hai đều được thiết kế với tính trực quan và dễ học như các ưu tiên cốt lõi. Một khi anh ấy thực sự biết các nguyên tắc về cách viết mã, thì nếu anh ấy thực sự quan tâm đến C ++, anh ấy có thể chọn nó.

Vì lý do tương tự, đừng khởi động anh ta trên Linux thay vì Windows, vì sau đó anh ta có hai vấn đề cần tập trung vào: học Linux và học mã hóa cùng một lúc! Giữ các phiền nhiễu đến mức tối thiểu.

Đối với tài nguyên lập trình thực tế, thật dễ dàng để tìm hướng dẫn trực tuyến, nhưng tôi đã thấy rằng cách tốt nhất để học lập trình là lập trình. Tìm thứ gì đó bạn muốn làm, và sau đó bắt đầu tìm ra cách để làm nó.

Vài năm trước, tôi đã thấy một trò chơi và tôi nghĩ, "Tôi có thể làm điều này, và tôi có thể làm nó tốt hơn." Vì vậy, tôi đã kích hoạt Delphi và bắt đầu tìm ra các nguyên tắc liên quan. Tôi vẫn đang học những thứ mới từ dự án cá nhân đó và trên đường đi, tôi đã trở thành một lập trình viên thực sự giỏi! Vì vậy, hãy thử điều đó; hỏi cha của bạn những gì anh ấy muốn làm nếu anh ấy có thể lập trình - và chắc chắn rằng nó có thể, và phạm vi khá nhỏ vì anh ấy chưa có kinh nghiệm - và sau đó ngồi xuống với anh ấy và bắt đầu tìm hiểu anh ấy làm thế nào nó

Và nếu anh ta có bất kỳ câu hỏi nào, hãy lấy cho anh ta một tài khoản StackOverflow. :)


4

Tôi nghĩ rằng sự quan tâm của cha bạn đối với C ++ chắc chắn rất gọn gàng nhưng đó không phải là lựa chọn của tôi cho ngôn ngữ lập trình đầu tiên - trừ khi ông có một yêu cầu rất cụ thể mà ông quan tâm khi gặp. (Ngay cả khi đó, học C ++ sau khi học ngôn ngữ khác, đơn giản hơn, vẫn có thể dễ dàng hơn nhiều.)

Có một số điều quan trọng để lập trình:

  • Khả năng giải quyết các vấn đề trừu tượng
  • Khả năng phân tách các vấn đề thành các mảnh nhỏ đủ để giải quyết vấn đề
  • Khả năng xây dựng các giải pháp lặp đi lặp lại và trong các phần nhỏ đủ để tiến triển là có thể
  • Cú pháp và ngữ nghĩa của các ngôn ngữ cụ thể.

Theo nhiều cách, cú pháp và ngữ nghĩa của các ngôn ngữ cụ thể ở gần cuối các kỹ năng cần thiết cho lập trình. Xét cho cùng, nếu bạn ở gần bên phải, hầu hết các trình biên dịch sẽ cho bạn biết bạn đã mắc lỗi gì - mặc dù cần có kinh nghiệm để giải mã những gì trình biên dịch cụ thể đang nói.

Vì vậy, tôi đề nghị cha bạn giải quyết một ngôn ngữ lập trình đơn giản hơn rất nhiều trong lần đầu tiên: Ruby, Python, C, C #, Haskell, v.v. d tò mò muốn biết liệu những người mới hoàn thành có cùng cảm giác "cá ra khỏi nước" không.)

Gắn bó với một ngôn ngữ đơn giản hơn có nghĩa là cha của bạn sẽ có nhiều thành công sớm hơn và sẽ dễ dàng "chơi" hơn. Vòng lặp REPL tương tác của nhiều ngôn ngữ là một nơi tuyệt vời để học.

Khi cha bạn đã quen thuộc với các hàm, lớp, đối tượng, phương thức, thì các chi tiết vụn vặt và sắc thái của C ++ sẽ không cảm thấy quá sức. Heck, thậm chí bắt đầu với C sẽ dễ dàng hơn: nó không tha thứ , nhưng có ít tính năng khó hiểu hơn để lo lắng.

Bạn tò mò về Linux vs Windows; Tôi không chắc sự khác biệt quan trọng lắm. Nếu anh ấy đã quen thuộc với một hoặc môi trường khác, chuyển đổi chỉ là một trở ngại khác. Nếu anh ta không biết, tôi sẽ đề xuất Linux, nhưng chủ yếu là vì cài đặt các công cụ tốt rất dễ dàng: apt-get install <foo>hoạt động trên hầu hết các bản phân phối và các bản phân phối không hỗ trợ aptthường cung cấp một cái gì đó tương tự. Một phút sau, gói mới gọn gàng của bạn đã được cài đặt, thường nhanh hơn tôi sẽ tìm được nguồn tải xuống đáng tin cậy cho các tệp nhị phân được biên dịch sẵn của Windows mà không phải là ngựa của Trojan.


Cha tôi chắc chắn có "khả năng suy nghĩ" rất quan trọng đối với các lập trình viên. Tôi thấy sự thông minh và trí thông minh của anh ấy trong những việc anh ấy làm bây giờ, và tôi biết nó có thể được áp dụng trong lập trình. Giả sử chúng ta có một ứng cử viên tối ưu cho việc học. Câu hỏi của tôi là: Làm thế nào để chúng ta có được chúng ở đó?
bỏ qua

Hrm, tôi đã chia các kỹ năng thành các loại khác nhau để đưa ra quan điểm rằng việc bị sa lầy vào cú pháp và ngữ nghĩa có thể che mờ sự phát triển của các kỹ năng khác - một ngôn ngữ có ít quy tắc cảm giác phức tạp sẽ giúp việc trừu tượng hóa dễ dàng hơn - nhưng tôi dường như đã không nêu rõ điểm đó.
sarnold

1
Trong số các ngôn ngữ được đề xuất, tôi chắc chắn sẽ ủng hộ Python. Nhưng, nếu bố của bạn có khuynh hướng trực quan, Xử lý (xem www. Processing.org) có thể là một phần giới thiệu thú vị (mặc dù có nhiều loại vấn đề không phù hợp).
James Youngman

@James: heh, tôi không nghĩ rằng tôi đã từng thấy cụm từ, các chương trình tương tác sử dụng ... đầu ra PDF trước đây. :)
đăng
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.