Bạn làm gì khi dường như bạn không thể hiểu một phần nào đó của lập trình? [đóng cửa]


11

Tôi đang học các ngôn ngữ mới khi tôi đi cùng, tôi viết mã cho các chương trình rất cơ bản bằng nhiều ngôn ngữ và tôi đến các lớp học. Tôi đã đọc sách, bài báo, bài học, video, bạn đặt tên cho nó, tuy nhiên tôi dường như không thể hiểu được những điều nhất định.

Ví dụ tôi không bao giờ hiểu con trỏ - những gì họ giỏi. (KHÔNG PHẢI LÀ MỘT PHẦN CÂU HỎI - không yêu cầu thử lại với "Con trỏ" ...)


Tuy nhiên, câu hỏi của tôi không phải là những gì con trỏ làm, mà thay vào đó làm thế nào tôi có thể hiểu những thứ như vậy? Nếu, sau khi đọc một cuốn sách hoặc một bài viết về một phần nào đó của lập trình và tôi không hiểu, tôi phải làm gì? Viết mã trong một tính năng nhất định của lập trình chắc chắn có ích, tuy nhiên nó không thực sự giúp hiểu được nhiều như vậy. Phần lý thuyết là quan trọng trong sự hiểu biết.


11
Tôi ước tôi có thể hiểu tại sao mọi người có quá nhiều khó khăn để hiểu con trỏ. Tên cho tất cả các làm rõ tôi cần.
ChaosPandion

1
Một số Computer Architecture 101khóa học sẽ giúp rất nhiều với sự hiểu biết con trỏ. ...và mọi thứ khác.
ZJR

6
Câu hỏi không chính xác về con trỏ, đó là một câu hỏi chung, nhưng cảm ơn.
Bugster

2
Tôi không nghĩ việc nhắc nhở anh chàng về một ví dụ mà anh ta thú nhận có vấn đề sẽ giúp anh ta một chút hướng tới sự giác ngộ ... Làm đủ thường xuyên, tuy nhiên điều đó sẽ ngăn anh ta yêu cầu giúp đỡ vì sợ bị đánh mua chuỗi dài các câu trả lời keo kiệt và ấu dâm và bình luận hạ cấp.
haylem

4
@FrustratedWithFormsDesigner: "Làm thế nào để tôi học cách học", tôi nghĩ vậy. Đó là một câu hỏi hợp lệ và có giá trị.
haylem

Câu trả lời:


22

Nếu bạn gặp khó khăn với việc hiểu một khái niệm trừu tượng, chỉ cần đi xuống một cấp. Nếu bạn không thể lấy con trỏ trong C - hãy chuyển xuống cấp độ lắp ráp. Vẫn có vấn đề? Tìm hiểu thêm về phần cứng, tất cả các cách xuống cổng logic.


2
+1: Làm việc cho tôi. Tôi gặp rắc rối với con trỏ trong ALGOL cho đến khi tôi bắt đầu viết ngôn ngữ lắp ráp PDP-10.
kevin cline

2
Ý tưởng thú vị. Mặc dù tôi sẽ chỉ ra rằng viết và chạy một chương trình lắp ráp đang đi quá xa. Theo tôi, vượt ra ngoài tầm hiểu biết cơ bản là không cần thiết ở cấp độ này. Nhưng này, nếu đó là những gì bạn muốn làm, thêm sức mạnh cho bạn!
Bryan Field

1
@George Bailey, vâng, nó có thể là một chút trên đầu cho bất kỳ lắp ráp thực sự và phần cứng thực sự. Đó là lý do tại sao có MIXvà các kiến ​​trúc đồ chơi tương tự khác xung quanh. Đối với một phần cứng, nó giống nhau - có rất nhiều lõi CPU đồ chơi đơn giản để nghiên cứu.
SK-logic

+1: Ý tưởng thú vị và chắc chắn có khả năng hoạt động, nhưng (để sử dụng lại trường hợp ví dụ của OP) đi xuống từ cấp nhập cảnh C đến cấp nhập cảnh ASM có thể là một con đường dài, khó khăn cho người mới bắt đầu, có khả năng đi nhiều thời gian hơn dự kiến ​​của khóa học / dự án / khác. Nó cũng có thể xa lánh những người có động lực kém (có lẽ không phải là trường hợp của OP, nhưng từ góc độ cấp cao hơn, điều này sẽ chặn rất nhiều sinh viên theo học các lớp CS và cần hiểu điều này nhưng không được nói về chính CS) . Nhưng chắc chắn là một ý tưởng tốt cho lâu dài.
haylem

Vâng, bằng CS của tôi bao gồm điều này trong Kiến trúc máy tính. Chúng tôi đã học về các cổng logic, kết hợp chúng trong một trình giả lập logic để xây dựng các bộ cộng, ALU và cuối cùng là CPU RISC rất đơn giản. Chúng tôi cũng đã viết các chương trình đơn giản trong lắp ráp MIPS. Đây là tất cả những gì cần thiết cho một BS trong khoa học máy tính và thực sự không được coi là một trong những khóa học "làm cỏ", vì vậy tôi không nghĩ rằng nó vượt quá đỉnh hoặc đi quá xa.
Adam Jaskiewicz

17

Vòng đời học tập tăng dần

  1. Hãy thửkhông hiểu khái niệm.
  2. Cố gắng thực hiện một cái gì đó minh họa khái niệm.
  3. Cố gắng vẽ sơ đồ khái niệm trên bảng trắng (nếu có)
  4. Cố gắng nói chuyện với một người hiểu khái niệm này.
  5. Cố gắng giải thích các bit bạn hiểu cho người này (đôi khi giúp nhìn thấy ánh sáng).
  6. Bắt đầu lại từ 1 cho đến khi cuối cùng bạn có thể giải thích nó cho người đang ở trạng thái 1 và khiến họ hiểu.

Các bước bổ sung

Để sử dụng một cách thận trọng.

  • Tìm kiếm thêm tài liệu đọc và nghiên cứu :
    • trực tuyến (công cụ tìm kiếm phổ biến và Wikipedia là những người bạn tuyệt vời),
    • tại thư viện (đừng đánh giá thấp sách và những người đến đó để đọc chúng),
    • trên hệ thống của bạn (tài liệu kèm và doc cụ thường xa lánh lúc đầu, nhưng goto-bạn thân nhất của mình sau một thời gian:. học cách tìm thấy những gì bạn đang tìm kiếm trong chúng, thí dụ man -k, apropos, vv ...)
  • Hãy thử đọc một số mã bằng cách sử dụng khái niệm ...
  • ... và bước qua mã với trình gỡ lỗi.

Đây là những lén lút hơn khi bạn cần đánh giá lại bản thân để đảm bảo bạn đã làm đúng. Tư vấn trực tiếp bởi một người có kiến ​​thức thường tốt hơn, tất nhiên sau đó là việc xác thực kiến ​​thức bạn có được bằng cách thực hiện lại những gì bạn vừa học (và sau đó cố gắng đẩy nó lên một bước và học một khái niệm cấp cao hơn được xây dựng trên đầu trong đó, ví dụ như danh sách được liên kết cho con trỏ của bạn).

Tín dụng: Nupul (để lập sơ đồ)


2
+1! Tôi có thể thêm - trước khi nói chuyện, hãy thử Bảng trắng để 'phác thảo ra' (hoặc chỉ giữ bảng trắng có ích khi nói chuyện với ai đó :)
Tiến sĩ

1
+1 cho "bước qua mã với trình gỡ lỗi". Tôi đã tìm hiểu về nhiều khái niệm với các công cụ gỡ lỗi đơn giản ...
funkymushroom

@Nupul: đề nghị tốt, thêm.
haylem

@funkymushroom: Thật vậy, mặc dù tôi muốn nói rằng thông thường bạn không thực sự học khái niệm theo cách này. Tuy nhiên, nó giúp "nâng sương mù" ngay khi nó ở ngay trước mặt bạn và bạn không thể thấy các mảnh ghép lại với nhau, bởi vì bạn quá tập trung vào thứ gì đó hoặc tâm trí của bạn bị xáo trộn. Tôi thấy hữu ích hơn để hiểu các vấn đề thuật toán chung hơn là cho các khái niệm chung.
haylem

Nói chuyện với bảng trắng đã làm điều đó cho tôi.
Peter

5

Theo kinh nghiệm của tôi, đó là tất cả về đầu vào và phản hồi. Bạn muốn nhận đầu vào dưới nhiều hình thức nhất có thể và phản hồi về những sai lầm của bạn càng nhanh càng tốt.

Theo kinh nghiệm của tôi, bằng cấp CS của tôi rất khô khan, rất trang trọng và hoàn toàn vô dụng trong việc giảng dạy bất kỳ chương trình nào. Tôi đã tham dự hai ba bài giảng một tuần và nếu bạn không hiểu thì đó là khá nhiều - giảng viên có một lớp khác để dạy và không thể ở bên cạnh để giúp bạn. Và, tỷ lệ cược là, một anh chàng hiểu điều đó theo một cách nhất định, và anh ta sẽ dạy nó theo một cách nhất định và đó là điều đó, vì vậy nếu bạn không nghĩ như anh ta, bạn sẽ không bao giờ có được nó. Điều tồi tệ hơn là vì anh ta có thể hiểu hàng tỷ khái niệm liên quan khác, anh ta có thể sẽ đóng khung nó theo các khái niệm khác, có thể vượt qua đầu bạn hoặc đơn giản là thậm chí không có trong tài liệu khóa học.

Tôi đã đến Stack Overflow và hỏi trong kênh trò chuyện C ++ và nhận được năm lời giải thích khác nhau trong năm phút. Tất cả đều được thiết kế riêng cho tôi và vấn đề chính xác mà tôi gặp phải, vì vậy không có gì ngạc nhiên khi một trong số họ tấn công tôi và tôi đã nhận được nó. Tốc độ mà bạn có thể học hỏi từ việc nhận phản hồi trực tiếp từ nhiều chuyên gia vượt quá nhiều so với những gì bạn có thể nhận được từ một nguồn giấy khô.

Vì vậy, lý tưởng, hãy nghỉ ngơi, và sau đó bạn sẽ tìm thấy một nhóm người có cùng tầm cỡ với những người có cùng chí hướng, không có gì tốt hơn để làm và trò chuyện với họ trực tiếp. Nhân tiện, Stack Overflow là một nơi tuyệt vời để có được loại phản hồi cá nhân tốc độ cao chất lượng cao này.


3

Không theo thứ tự, sách, bạn bè và đọc mã tài liệu tốt là nguồn tốt. Thực hành là cách duy nhất để học: cố gắng viết các bài kiểm tra đơn vị nhỏ. Ví dụ: đối với con trỏ viết mã xử lý chuỗi: đảo ngược chuỗi, đảo ngược từng từ trong chuỗi, kiểm tra palindrom, thay thế một chữ cái bằng một số ...

Đặt câu hỏi trên stackexchange ...;>


2

Tập luyện giúp hoàn hảo hơn! (dù sao cũng tốt hơn). Chỉ cần tiếp tục cố gắng và cố gắng sử dụng càng nhiều nguồn và giác quan khác nhau càng tốt:

Nguồn: Sách, Internet, Nhóm người dùng, bạn bè, Học video, sử dụng các trang web cho phép bạn kiểm tra một chút 'mã' như jsfiddle (chủ yếu là html),
Rubular (biểu thức Ruby),
SQlzoo để thử sql,
jslint cho javascript,
mã pad cho nhiều ngôn ngữ.

Để nhớ những điều trừu tượng hãy xem xét mneomics - Các bác sĩ sử dụng chúng!

Hãy coi mình là một người học suốt đời và luôn khiêm tốn và bạn có thể đi xa.


1
+1 cho tập thực hành. Nhưng ghi nhớ, ugh. Họ là một cái nạng rất không đủ, không bao giờ có thể thay thế, và không bao giờ nên thay thế, hiểu biết. Trong thực tế, họ đánh dấu sự thiếu hiểu biết. Các bác sĩ sử dụng chúng vì họ buộc phải học quá nhiều sự kiện bị ngắt kết nối trong quá ít thời gian. Chúng ta đang dần dần nhận ra rằng thực tế là giáo dục của chúng ta dành cho các bác sĩ y khoa, và Hoa Kỳ chẳng hạn đang trên đường hoàn thành việc sửa sang lại giáo dục. Mnemonics không phải là một giải pháp, chúng là một phần của vấn đề. Nếu bạn thấy mình sử dụng chúng, bạn đã không hiểu.
Konrad Rudolph

1

Bạn phải thay đổi trọng tâm của mình trong một thời gian, không phải 5 phút. hoặc 5 giờ ... Tôi có nghĩa là 1 ngày mà không cần nhìn vào mã đó .... chỉ cần thư giãn về nó ... hãy đọc một cái gì đó khác nhau ...

Nếu bạn phải hiểu nó bây giờ ... hãy yêu cầu sự giúp đỡ từ bạn bè hoặc ở đây =)


1

Những gì mọi người khác trong CNTT làm.

Tôi sử dụng một công cụ tìm kiếm để tìm kiếm các khái niệm liên quan mà tôi không hiểu cho đến khi tôi có thể xem lại chủ đề mà ban đầu tôi muốn hiểu.

Có thể bạn cũng không hiểu đầy đủ về stack, heap, biến tự động, quy trình biên dịch C ++, lắp ráp, bộ nhớ được quản lý so với bộ nhớ không được quản lý.

Rõ ràng hơn về những điều này và các khái niệm liên quan đến con trỏ khác có thể sẽ làm sáng tỏ mọi thứ.


1

Không có cách nhanh chóng chắc chắn để hiểu một vấn đề. Thành công của bạn phụ thuộc vào mức độ bối cảnh bạn mang theo trong học tập. Bạn sẽ rất may mắn khi tìm thấy một người sẽ giải thích mọi thứ với quan điểm của bạn trong tâm trí. Giống như máy Turing, bất kỳ ai cũng có thể tìm hiểu những gì người khác biết, và đó chỉ là vấn đề của sự kiên trì và chấp nhận rằng sự thất vọng là điều tự nhiên.

Tôi nhớ những khó khăn to lớn tôi có với con trỏ. Mãi cho đến khi một anh chàng rất kiên nhẫn giải thích cho tôi như thể tôi là một thằng ngốc hoàn toàn mà tôi hiểu nó. Đó là đôi khi những gì nó cần.


1

Đây là một vấn đề phổ biến trong học tập và giảng dạy. Và như những người khác đã nói, không có cách nào chắc chắn để giải quyết vấn đề này. Đó là một sự thật cơ bản mà tất cả chúng ta đều học khác nhau vì bộ não của chúng ta có dây khác nhau theo những cách tinh tế nhưng rất quan trọng.

Học tập tạo ra các kết nối thần kinh mới. Không cần đi sâu vào khoa học thần kinh (mà tôi không biết gì về nó), việc tạo ra các kết nối mới đòi hỏi các loại tiếp xúc khác nhau với một khái niệm cho những người khác nhau. Hãy thử nhiều góc độ khác nhau, đọc / nghe / xem các giải thích khác nhau. Thực hành!

Nếu điều đó không hiệu quả, hãy đặt vấn đề sang một bên: bạn có thể đơn giản là thiếu một phần khác của câu đố mà một khi có được, làm cho vấn đề ban đầu có vẻ rõ ràng.

Bạn có biết những aha này ! khoảnh khắc? Đây là khi bộ não của bạn vừa tạo ra một kết nối mới. Đây là cách học tập xảy ra.

Ngẫu nhiên, bất kỳ giáo viên tốt đều biết điều này. Hướng dẫn viết kỹ thuật thường nêu rõ rằng mọi khái niệm nên được giải thích ít nhất hai lần, sử dụng các từ khác nhau (và có lẽ với một số văn bản giữa chúng). Nếu bạn chú ý, bạn sẽ có thể nhận ra rằng tất cả các nhà văn khoa học giỏi đều tuân theo quy tắc này.

Than ôi, tất cả quá nhiều giáo viên bỏ qua nó, và giải thích mọi thứ chỉ một lần. Và ngay cả khi họ thành công trong việc tìm ra một lời giải thích tao nhã với một phép ẩn dụ tuyệt vời thì điều này chỉ đơn giản là không đủ.


0
  1. Đọc bất kỳ tài liệu liên quan và Google nghi ngờ của bạn.

  2. Hãy thử viết ví dụ mã, xem những gì họ làm.

  3. Hãy thử thực thi mã trong gỡ lỗi và xem nó từng bước một.

  4. Nếu bạn vẫn không hiểu một hành vi nhất định, hãy hỏi ai đó, trực tiếp hoặc trong một trang web như thế này. Nếu bạn đã thử tất cả các cách trên, bạn nên có tất cả các yếu tố để soạn một câu hỏi hay. Đừng ngại ngùng :)

Tôi nghĩ rằng đó là khá nhiều những gì người khác làm.


0

Hãy tiếp tục nghiên cứu và học hỏi. Tôi đã có cùng một vấn đề với các khía cạnh khác của lập trình. Nhưng nói chuyện với người khác và đọc các bài báo cuối cùng dẫn đến một khoảnh khắc "AHA". Nói chung, đó là một số bài viết trên Blog hoặc câu trả lời SO khác trình bày thông tin mà tôi có thể theo dõi.

Về cơ bản, tiếp tục tìm kiếm và kiên nhẫn cho sự hiểu biết sẽ đến.

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.