Làm thế nào tôi có thể dạy một người thông minh, không có kinh nghiệm lập trình, làm thế nào để lập trình? [đóng cửa]


100

Tôi đã được yêu cầu đưa một người trong bộ phận CNTT của chúng tôi không có kinh nghiệm lập trình nhưng là một người thông minh và có khả năng và giúp anh ta chuyển sang lập trình khi cho phép một nhà phát triển cấp nhập cảnh hỗ trợ các ứng dụng .Net hiện có. Tôi chắc chắn tin rằng người này có thể làm điều đó nhưng tôi đang tìm cách nhanh nhất để khiến anh ta tăng tốc. Tôi có một loạt các ý tưởng nhưng muốn xem những gì người khác nghĩ. Tôi biết điều này cũng sẽ phụ thuộc rất nhiều vào cách anh ấy học, nhưng tôi đang nói chung.

Vì vậy, câu hỏi: Bạn nghĩ đâu là cách tốt nhất để khiến một người không phải là nhà phát triển tăng tốc nhanh chóng trong quá trình phát triển (.Net trong trường hợp này)?


1
Có lẽ có liên quan câu hỏi: programmers.stackexchange.com/questions/10930/... : D
jmservera

Tôi đã nghe nói rằng Học Python Cách tốt là tốt cho những người không lập trình.
john2x

Hãy xem cơ bản nhỏ . Nó là đơn giản, nhưng hữu ích cho người mới bắt đầu.

3
Tôi nghĩ rằng việc giải thích lập trình cho một người không có mô hình tinh thần về bất cứ điều gì bạn nói là vô ích. Tìm hiểu ngôn ngữ nào bạn sẽ nói về và yêu cầu họ thực hiện các hướng dẫn và làm bẩn tay sau đó giải thích. Họ sẽ vật lộn và bạn sẽ tham gia và tăng tốc quá trình học tập.
Người đàn ông Muffin

1
Tôi sẽ yêu cầu anh ấy đọc Edgieer Dijkstra | Về sự tàn khốc của việc dạy khoa học máy tính |, hãy để anh ấy tìm hiểu về lý do của bài báo đó, vì vậy anh ấy có thể cảnh giác về những tổn thương não có thể xảy ra với anh ấy bởi sự chấp nhận chung cách dạy lập trình
vfclists

Câu trả lời:


125

Tôi thường quy định trình tự tương tự cho bất cứ ai muốn học lập trình. Nó rất lý thuyết, nhưng nó có một nền tảng tốt. Sẽ mất ba hoặc bốn tháng học toàn thời gian, nhưng lập trình không phải là thứ bạn học qua đêm.

Nếu bạn không thể vượt qua trình tự này, bạn sẽ không thể lập trình, vì vậy bạn cũng có thể từ bỏ ngay bây giờ.

  1. Mã, bởi Charles Petzold.
  2. Ngôn ngữ lập trình C, K & R
  3. Cấu trúc và giải thích các chương trình máy tính, Abelson và Sussman.

Quy tắc của tôi là: làm việc theo cách của bạn thông qua ba cuốn sách đó bằng sức mạnh tuyệt đối, nếu cần thiết. Hỏi bất kỳ câu hỏi nào bạn có, nhưng chỉ sau khi đấu tranh để tự mình tìm ra nó. Nếu bạn có thể đọc hết ba cuốn sách đó, xin chúc mừng, bạn là một lập trình viên, bây giờ tôi có thể ném cho bạn PERL IN 15 PHÚT hoặc bất cứ thứ rác nào có tại cửa hàng sách trong Tủ sách lớn của Java và bạn sẽ quản lý tốt. Nếu bạn không thể đọc hết ba cuốn sách đó, hãy từ bỏ, về nhà, bạn sẽ không bao giờ có được nó.

Tôi không nghĩ rằng bạn cần phải học C và Scheme, thành thật mà nói. Chúng chỉ là nền tảng cho việc học tập trong tương lai. Hai cuốn sách khá đơn giản này đều rất đơn giản trên bề mặt (C và Scheme là những ngôn ngữ siêu dễ) nhưng chúng rất sâu sắc về nghệ thuật lập trình thực sự mà không lãng phí thời gian vào cú pháp khó hiểu, vì vậy chúng rất tuyệt vời để bắt đầu nối lại bộ não của bạn để trở thành một lập trình viên tốt.

Nỗ lực đi một lối tắt và đi thẳng vào việc học chính xác điều bạn muốn học ngay bây giờ (như bắt đầu với C # và ASP.NET) sẽ bị tiêu diệt.


25
Là một người phải đập đầu vào bàn "lập trình viên", người rất được khuyến khích về khả năng C # của họ, nhưng không thể làm những việc đơn giản như thực hiện một lớp cơ sở được ghi chép rất tốt, tìm rò rỉ bộ nhớ trong các chương trình c và c ++, hoặc đơn giản là tự mình tìm ra một vấn đề hoặc học một ý tưởng mới với tốc độ vừa phải, tôi đồng ý. Đây không phải là tinh hoa; đó là lẽ thường. Nếu bạn không thể thành thạo con trỏ và đệ quy, bạn sẽ không bao giờ hữu ích cho bất kỳ ai cần nhà phát triển có thể tự giải quyết vấn đề.
Jonathan Henson

53
Không, đó không phải là cách duy nhất để trở thành một lập trình viên giỏi. Nhưng nếu ba cuốn sách là một "danh sách đáng ngại" hơn bạn có thể đánh giá thấp những gì các lập trình viên làm.
Joel Spolsky

32
Đôi khi bạn mất liên lạc, Joel.
Robert S.

46
Xin lỗi, các tờ báo mất một vài ngày để đến câu lạc bộ tư nhân của tôi bởi vì họ cần được một người phục vụ ủi trước khi chúng tôi có thể nhìn thấy họ.
Joel Spolsky

19
Thật không may, câu trả lời này không thành công up to speed quickly.
rlb.usa

30

Cách tốt nhất để khiến một người không phải là nhà phát triển tăng tốc nhanh chóng là truyền cảm hứng cho họ !

Để có bất kỳ thành công nào, ứng viên ít nhất phải tò mò, nếu không đam mê , về lập trình (bất kể nền tảng).

Mặc dù tôi đồng ý với Joel trong trường hợp ứng cử viên lý tưởng, tôi sẽ cẩn thận không nhồi nhét quá nhiều lý thuyết vào một tâm trí yếu đuối - nó sẽ chỉ khiến họ bỏ cuộc. Nếu họ được truyền cảm hứng, tò mò và hy vọng đam mê, họ sẽ muốn hiểu lý thuyết sau khi họ nhìn thấy điều kỳ diệu.

Tôi hoàn toàn đồng ý với @karudzo - tự hoàn thành và đánh giá mang tính xây dựng có thể rất truyền cảm.


29
"Nếu bạn muốn đóng một con tàu, đừng đánh trống người để thu gom gỗ và đừng giao cho họ nhiệm vụ và công việc, mà hãy dạy họ khao khát sự bao la vô tận của biển cả." - Antoine de Saint-Exupery
Julien Chastang

Julien - tốt đẹp! Chính xác!
jkoreska

Tôi hoàn toàn đồng ý với bạn về điều này! Tôi đã cố vấn / dạy kèm cho nhiều nhà phát triển không có kinh nghiệm và đôi khi không biết họ sẽ kết thúc các lập trình viên. Tôi đã làm điều này đơn giản bằng cách hướng dẫn họ trên đường đi ... sự tò mò và niềm đam mê của chính họ dẫn họ đến kết quả cuối cùng. Nếu họ không có bất kỳ thuộc tính nào trong hai thuộc tính đó, tôi không tin rằng họ có thể đạt được những gì họ đạt được. Tôi làm việc với quá nhiều lập trình viên thiếu một hoặc cả hai thuộc tính đó và ở trong đó chỉ vì có rất nhiều công việc có sẵn ... thật kinh khủng!
Jeach

Tôi đồng ý. Tôi cảm thấy câu hỏi về lập trình học được trả lời theo đúng nghĩa đen. Mọi người học mọi thứ vì một lý do. Mọi người học cách lập trình để giải quyết vấn đề, giúp đỡ mọi người và biến ý tưởng thành một cái gì đó thực sự. Tôi đã gặp những người quên điều này trên đường đi và khi họ khám phá lại, họ đã khám phá lại tình yêu của họ đối với lập trình. Khi bạn thực sự thích một cái gì đó bạn sẽ học, bạn sẽ tìm cách học, và bạn sẽ trở nên tốt hơn.
Luis Perez

12

Tôi đang tìm cách nhanh nhất để khiến anh ấy tăng tốc.

Cách nhanh nhất có thể là cho anh ta thời gian , mặc dù điều đó có thể dễ dàng là một hoặc hai năm.

Chắc chắn, có thể dễ dàng dạy cho anh ta một ngôn ngữ đơn giản (C #, nếu anh ta làm công cụ .NET), nhưng học một ngôn ngữ không phải là học lập trình.

Nếu anh ta chưa bao giờ lập trình, thì ngoài cú pháp và thư viện của ít nhất một ngôn ngữ, anh ta sẽ phải học về mảng, danh sách liên kết, mô hình biên dịch của bất kỳ ngôn ngữ nào anh ta học, mô đun hóa, quản lý tài nguyên, mô hình, mô hình, Big- Ký hiệu O ... - toàn bộ enchilada. Đó là rất nhiều thứ để cày xới, và hầu hết chúng ta mất vài năm chỉ để học những điều cơ bản này, và thậm chí nhiều hơn để trở thành một lập trình viên chuyên nghiệp thực sự.

Có tài liệu ngoài đó bao gồm rất nhiều điều này (như cuốn sách mới nhất của Stroustrup dạy lập trình bằng C ++, thay vì dạy ngôn ngữ C ++), nhưng không có gì nhiều và không có gì bao gồm tất cả. Vì vậy, anh chàng phải sẵn sàng học hỏi, và đọc rất nhiều sách và bài báo.

Làm thế nào để làm điều này: Tôi không có một chương trình giảng dạy đầy đủ để dán ở đây. (Xin lỗi.)
Tuy nhiên, điều tôi muốn giới thiệu là bắt đầu với việc dạy cho anh ta một ngôn ngữ lập trình, để anh ta có cơ hội đạt được tiến bộ ban đầu nhanh chóng và nhận được một số kết quả đáng khích lệ. Có khá nhiều cuốn sách ngoài kia để dạy những ngôn ngữ như vậy, hãy chọn một cuốn sách mà bạn quen thuộc. Nếu cuốn sách có nhiều bài tập, và anh ấy sẵn sàng thực hiện chúng, hãy chuẩn bị dành nhiều thời gian để giúp anh ấy với những bài tập đó. Nếu cuốn sách không có (m) bất kỳ, hãy bắt đầu nghĩ ra những cuốn sách của riêng bạn trước, nhưng hãy chuẩn bị để thích nghi với mức độ / tốc độ hiểu biết của mình.
Nếu ngôn ngữ đầu tiên đó không phải là C hoặc C ++, IMO anh ta nên học một trong những ngôn ngữ tiếp theo. K & R rất tốt cho điều đó, cũng như TCPL của Stroustrup hoặc, nếu anh ta có thể (với sự giúp đỡ của bạn) đối phó với một đường cong học tập dốc, Koenig / Moo. Lý do tôi khuyên bạn nên làm điều này là, khi bạn biết C hoặc (tốt nhất là IMO) C ++, việc chọn bất kỳ một trong những dẫn xuất C như C #, Java, ObjC ... tương đối dễ dàng.

Đối với phần còn lại, cung cấp cho anh ta một dòng liên tục các cuốn sách và bài viết tốt. Tôi không nghĩ sẽ rất hữu ích nếu chúng tôi đề xuất quá nhiều trong số đó, vì 1) nó phải phù hợp với văn hóa của công ty bạn và 2) bạn phải cảm thấy thoải mái khi bảo anh ấy học những thứ đó.


1
"nhà phát triển cấp mục nhập hỗ trợ các ứng dụng .Net hiện có" ... "anh ta sẽ phải tìm hiểu về mảng, danh sách được liên kết, mô hình biên dịch của bất kỳ ngôn ngữ nào anh ta học, mô đun hóa, quản lý tài nguyên, mô hình, mô hình, ký hiệu bit" tất cả đều 'tốt đẹp cho những người có tiếng', nhưng tôi cá rằng một phần lớn các nhà phát triển đã viết mã không có những kỹ năng đó.
Kirk Broadhurst

1
@KirkBroadhurst: Nếu vậy, thì có gì đó không ổn ở công ty bạn.
sbi

@sbi Tôi nghĩ bạn sẽ thấy có gì đó không ổn ở rất nhiều công ty. Công ty của OP đang đề xuất rằng một người không phải là lập trình viên (nhưng anh ta là một 'người thông minh'!) Sẽ được chuyển sang vai trò hỗ trợ ứng dụng. Tôi không biết bạn làm việc ở đâu ... nhưng theo kinh nghiệm của tôi đó là 'thế giới thực'. Các lập trình viên thực sự giỏi, có năng lực là ngoại lệ - giống như trong hầu hết các ngành, hầu hết mọi người đều làm đủ tốt để có được.
Kirk Broadhurst

1
@KirkBroadhurst: Nơi tôi làm việc là quyết định của tôi. Tôi đã trốn khỏi các công ty vì không đủ năng lực và tôi sẽ chạy trốn nếu không có nhà phát triển nào biết về ít nhất những điều này.
sbi

7

Tôi sẽ không bắt đầu chúng trên .NET. Tôi đã phạm sai lầm này quá nhiều lần. Đừng để nhà tuyển dụng gây áp lực cho bạn trong việc tạo ra một lập trình viên bất tài vì thời gian. .NET có thể là một nền tảng phát triển nhanh, nhưng nó không bắt buộc các nhà phát triển phải học lập trình. Chỉ riêng trong C #, bạn sẽ thấy một nhà phát triển bị mắc kẹt về các loại tham chiếu, thời gian tồn tại của đối tượng, họ sẽ để lại rò rỉ bộ nhớ lớn (vâng, có thể có trong .NET) và sẽ có thiết kế kém. Sẽ tốt hơn nhiều nếu bắt đầu chúng trên C hoặc C ++ (có thể là c ++ vì chúng sẽ cần sử dụng các khái niệm OOP) và sau đó nói điều gì đó như: "Bây giờ sẽ không tốt nếu bộ nhớ của bạn được quản lý cho bạn, mọi thứ đều là đối tượng - định hướng, và bạn không phải đối phó với tất cả những gợi ý khó chịu này sao? " Đây là C # và JAVA. Nếu họ đã thành thạo c ++, họ sẽ chinh phục cả hai trong một hoặc hai tuần. Tôi đề nghị trung đoàn của Joel. Đó là danh sách mà giáo viên CS 101 của tôi đưa cho tôi, và tôi đã tốt hơn rất nhiều khi tôi nhấn phân tích số vì nó. Điều này cũng sẽ cho phép bạn tìm hiểu sớm hơn nếu ứng viên sẽ cắt mù tạt hay không. Ngoài ra, khi bạn nhận được c và c ++, bạn sẽ tự động hiểu c # và java sau khi đọc phần giới thiệu về sách. Bạn không chỉ hiểu họ mà còn hiểu họ hơn cả những người không biết về c và c ++.


4
"" Bây giờ sẽ không tốt nếu bộ nhớ của bạn được quản lý cho bạn, mọi thứ đều hướng đối tượng và bạn không phải đối phó với tất cả những gợi ý khó chịu này? "Ý bạn là đây là STL. Tại sao bạn không dạy tôi sử dụng STL trong C ++ ngay từ đầu?!
Raynos

Chà, STL thật ngọt ngào. Tôi đang đề cập nhiều hơn đến API Windows cho đến khi lập trình Windows đi. API windows không được thiết kế với OOP trong tâm trí. Tôi thấy đó là một bài tập tuyệt vời để làm cho một số chap nghèo viết một ứng dụng bằng API trong c ++. Sau đó tôi nhờ anh ấy / cô ấy viết một lớp Window và gói gọn vòng lặp sự kiện để ... bạn biết đấy, làm cho nó hướng đối tượng. Sau đó, sau khi họ cuối cùng đã làm việc, tôi cho họ xem Windows Forms. Nó thực sự buộc họ phải đối phó với một số khái niệm cơ bản - tức là cách ứng dụng Windows hoạt động - mà ai đó sẽ không bao giờ có được nếu họ nhảy vào .NET.
Jonathan Henson

4
tại sao mọi người sẽ chạm vào API windows bằng một cây gậy. Ý tôi là nói về hWNDnhững năm 80 phải không? Rõ ràng bạn sử dụng một số trừu tượng tốt đẹp thay thế (mà trừu tượng hóa là một cuộc tranh luận hoàn toàn khác nhau). Chắc chắn biết cách hoạt động của nó dưới mui xe là tốt nhưng bạn không cần C # .NET cho sự trừu tượng
Raynos

2
API Windows thật tuyệt vời. Dù sao, tôi chỉ sử dụng nó cho một công cụ giảng dạy. Chẳng hạn, mọi người thường không hiểu làm thế nào các sự kiện được kích hoạt một cách kỳ diệu trong các chương trình windows. Nó rất hữu ích cho họ để đánh lừa vòng lặp sự kiện. Ngoài ra, các lập trình viên ít nhất cũng phải làm quen với hWND, đặc biệt nếu họ sẽ xử lý bất kỳ lỗi nào với đồ họa - giống như bạn sẽ gặp khó khăn khi làm bất cứ điều gì trong Unix mà không biết cách sử dụng XID. Dù sao, nó buộc họ phải học cách một chương trình windows hoạt động. Ngoài ra, một khi họ hoàn thành, họ biết Windows.Forms hoạt động như thế nào.
Jonathan Henson

Nó không phải là một sự chuyển đổi sang C # btw, chỉ nói chung với .NET. Tôi nghĩ rằng @Joel có một bài viết hay về Luật trừu tượng về lý do tại sao nó thường tốt cho các lập trình viên nhìn dưới mui xe trước khi sử dụng khung.
Jonathan Henson

6

Cung cấp cho họ một cái gì đó đơn giản, nhưng hữu ích để giải quyết. Hãy để họ dò dẫm một chút và giúp họ đánh bóng nó. Không có gì giống như một thành tựu nhỏ để giúp thúc đẩy họ (mặc dù ai đó không quan tâm đến lập trình


6

Lập trình cặp. Hãy để họ theo dõi bạn trong khi bạn viết mã của riêng bạn - bất kỳ mã nào. Trong vài giờ, sau đó yêu cầu họ nhập mã của bạn cho bạn, trong khi bạn nói cho họ biết phải làm gì, nhấn phím bằng cách nhấn phím ngay cả khi cần thiết. Trả lời một số câu hỏi của họ, nhưng không nhiều đến mức bạn bị chậm lại nhiều - chỉ cần để họ ngâm tất cả. Họ cũng sẽ tìm thấy lỗi chính tả của bạn và nhiều lỗi của bạn hơn bạn nghĩ. Trong vài ngày, họ sẽ có thể bắt đầu 'điều hướng' cho bạn biết nên nhập mã nào cho các nhiệm vụ tương tự như các nhiệm vụ họ đã thấy trước đây.

Tôi đã học được nhiều điều tôi biết với tư cách là nhà phát triển theo cách này trong vòng một tháng và đã dạy cho một số nhà phát triển mới khác theo cách này, một trong số họ đã có thể đảm nhận cho tôi với tư cách là nhà phát triển chính tại một công ty khởi nghiệp sau vài tháng. Khi chúng tôi mới bắt đầu làm việc cùng nhau, anh ấy chưa bao giờ viết một dòng mã nào.


1
Tôi nghĩ lập trình cặp là một cách thực sự tuyệt vời để dạy các lập trình viên mới làm quen, nhưng tôi nghĩ lập trình cặp mọi lúc có thể có vấn đề. Tôi nghĩ rằng các lập trình viên mới làm việc cần một chút thời gian làm việc một mình để học cách giải quyết vấn đề và xây dựng sự tự tin về khả năng của họ.
Helephant

Đúng, hãy để họ tiếp tục với lập trình cặp và đưa ra các nhiệm vụ đơn giản - nhiệm vụ thực sự, trên phần mềm mà họ dự định sẽ làm việc, theo ngôn ngữ mà họ dự định sẽ làm việc, với thành tựu thực sự. Xem xét & cố vấn tất cả công việc của họ và họ sẽ tiến bộ.
Thomas W

2

Cung cấp cho anh ấy một ide tốt (studio hình ảnh, thể hiện vẫn còn tốt). Dạy cho anh ta 60% cú pháp chung (bỏ đi năng suất, linq, enums, thuộc tính, v.v., dạy các lớp, ảo và ghi đè). Dành thời gian cho trình gỡ lỗi (đặc biệt là callstack). Sau đó nói với anh ấy để google "msdn functionanme" bất cứ khi nào anh ấy cần giúp đỡ và điều đó sẽ giúp anh ấy bắt đầu nhanh chóng.

Cũng dạy anh ta không bao giờ bắt và nuốt một ngoại lệ. Nói với anh ta anh ta phải suy nghĩ lại hoặc đăng nhập nó!

Phần thưởng: dạy anh ta cách tuần tự hóa dữ liệu json để anh ta có thể dễ dàng đọc / ghi vào một tập tin. Một db quá mức cần thiết và quá nhiều thứ để tìm hiểu và bạn không muốn anh ta viết các định dạng tệp tùy chỉnh mặc dù tôi có thể cho phép một mục nhập trên mỗi loại dòng của tệp để lưu / tải một chuỗi chuỗi là chấp nhận được.


1

Tôi biết rất nhiều người đã nói về ngôn ngữ và sách cho những ngôn ngữ đó. Tôi khác

Lập trình là học cách suy nghĩ phân tích. Đầu tiên và quan trọng nhất là người đó có thể suy nghĩ và đưa ra thuật toán trên một tờ giấy cho vấn đề là gì. Bạn phải hướng dẫn họ để họ có được kỹ thuật tư duy đúng đắn.

Tiếp đến là các nguyên tắc cơ bản của ngôn ngữ. Để họ bắt đầu với ngôn ngữ của sự lựa chọn. Đưa ra một vấn đề cho chương trình.

Sau lần cắt đầu tiên này, họ sẽ thực hiện các nguyên tắc cơ bản về CS và Mẫu thiết kế.

Bây giờ hãy để họ lập trình lại vấn đề trước đó với các khái niệm mới này.


1

Bắt đầu với anh ta về những điều cơ bản: biến, vòng lặp, trong khi vòng lặp, cho vòng lặp, mảng, dạy anh ta những điều cơ bản, in ra màn hình, làm một số phép toán đơn giản. Chuyển sang các phương thức và OOP cơ bản, những thứ như đây là cách tạo một lớp, cho anh ta thấy lý do tại sao không chỉ là cách làm.

Ngôn ngữ không thành vấn đề, nhưng hãy chọn thứ gì đó bạn biết và nó rất trừu tượng (java, python, v.v.) theo cách đó anh ta không cần phải lo lắng về những thứ như quản lý bộ nhớ, con trỏ, v.v ... Dạy những điều cơ bản về đệ quy, tháp của hanio hoặc thư mục tìm kiếm đệ quy.

Học lập trình là một tài nguyên miễn phí tốt về lập trình Ruby. Làm cho nó vui vẻ, dễ dàng và giải trí.


1

Cung cấp cho anh ta một số thách thức và để anh ta học cách tìm tài nguyên để tự giải quyết vấn đề.

Nếu bạn có thể dạy anh ấy cách tìm câu trả lời và tự túc, anh ấy sẽ tự nhiên học cách lập trình tốt. Tư duy phản biện và tháo vát là hai kỹ năng chính của một lập trình viên.

Vào cuối ngày, niềm đam mê / sở thích chắc chắn sẽ là một yếu tố quan trọng trong việc họ sẽ thành công như thế nào khi học nó một cách nhanh chóng. Nếu anh ta không có hoặc bắt được "lỗi", đó có thể là một quá trình chậm và / hoặc đau đớn. Nếu anh ta bắt được lỗi, anh ta sẽ thức dậy muộn, hết giờ làm việc, có thời gian của cuộc đời.

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.