Kỹ năng tư duy để trở thành một lập trình viên giỏi [đóng]


10

Tôi đã lập trình trong 15 năm qua với bằng không CS. Lý do chính tôi tham gia lập trình là tôi thích học những điều mới và áp dụng chúng vào công việc của mình. Và tôi đã có thể tìm và sửa các lỗi lập trình và nguyên nhân của chúng nhanh hơn các lỗi khác. Nhưng tôi không bao giờ thấy mình là một bậc thầy hay một chuyên gia, có thể là do chuyên ngành phi CS của tôi. Và khi tôi thấy các lập trình viên tuyệt vời, tôi đã quan sát thấy họ rất giỏi, tốt hơn tôi tất nhiên, trong việc giải quyết vấn đề.

Một kỹ năng tôi thấy tốt trong sự nghiệp giữa chừng của mình là nghĩ về các yêu cầu và nhiệm vụ theo thứ tự ngược lại và trừu tượng. Bằng cách đó, tôi có thể thấy những gì thực sự cần thiết cho tôi để làm mà không cần chi tiết và có thể nhanh chóng tìm thấy các phần của giải pháp đã tồn tại.

Vì vậy, tôi tự hỏi nếu có những kỹ năng tư duy khác để trở thành một lập trình viên giỏi. Tôi đã theo dõi Q & As bên dưới và thực sự đã đọc một số sách được đề xuất ở đó. Nhưng tôi thực sự không thể chọn phương pháp tốt áp dụng trực tiếp cho công việc lập trình của mình.

Những cuốn sách không lập trình nào nên lập trình viên đọc để giúp phát triển kỹ năng lập trình / tư duy?

/software/44654/skills-and-habits-to-develop-to-be-good-at-programming-im-a-newbie

Câu trả lời:


10

Cảm ơn các con trỏ đến các câu hỏi hiện có. Các câu trả lời cho những điều này khá khác với những gì tôi hiểu bạn muốn mặc dù. Tôi sẽ cung cấp cho bạn một số gợi ý từ kinh nghiệm của riêng tôi. Bằng cấp của tôi là về vật lý, tôi có đến lĩnh vực này với các lỗ hổng xung quanh về hình thức, tính chính xác / xác minh, phân tích thuật toán, lập trình động, hệ thống cơ sở dữ liệu và ở mức độ lớn khi bắt đầu, lựa chọn cấu trúc dữ liệu và thuật toán. Những lỗ hổng rõ ràng nhất (ví dụ cấu trúc dữ liệu và thuật toán) Tôi đã đóng cửa sớm nhưng tôi vẫn đọc sách trong lĩnh vực đó, để hiểu sâu hơn, xem các bài thuyết trình thay thế và làm mới bộ nhớ của tôi. (Tôi khoảng 40 tuổi, vì vậy sách làm việc cho tôi :)

Đây là một danh sách đọc (không theo thứ tự cụ thể nào ngoài thứ tự họ nghĩ đến).

  1. Ngọc trai lập trình (Jon Bentley)
  2. Ngọc trai lập trình khác (Jon Bentley)
  3. Nghệ thuật lập trình máy tính (Donald Knuth)
  4. Các thuật toán trong C ++ (Robert Sedgewick)
  5. Hướng dẫn thiết kế thuật toán (Steven Skiena)
  6. Thực hành lập trình (Kernighan và Pike)
  7. Các yếu tố của lập trình (Stepanov)
  8. Làm thế nào để giải quyết nó (Polya)
  9. Cấu trúc và giải thích các chương trình máy tính (Abelson và Sussman)

Tôi cũng đã nhận được rất nhiều từ việc viết Mã rắn khi tôi đọc nó vào giữa những năm 90. Nhưng nó không có trong danh sách vì nó không thực sự liên quan đến các kỹ năng tư duy như vậy (nó liên quan nhiều hơn đến việc thiết kế API để giảm thiểu khả năng sử dụng không chính xác - hoặc ít nhất đó là sự mất đi chính của tôi).

Tôi cũng đã nhận được rất nhiều từ Gôdel, Escher, Bach (Hofstadter) khi còn là một thiếu niên, nhưng nó đã được đề cập trong các câu trả lời cho các câu hỏi mà bạn đã chỉ ra. Đó là một cuốn sách để đọc cho vui, hơn là trực tiếp để phát triển các kỹ năng khoa học máy tính của một người.

Tôi làm việc với một số lượng lớn các lập trình viên tài năng và gần như toàn cầu họ là những người hâm mộ Lập trình Ngọc trai . Chắc chắn tôi muốn nhiều ứng viên mà tôi phỏng vấn đã đọc chương 4 của cuốn sách đó.


4

Đầu tiên; đối với bất kỳ kỷ luật nhất định, sẽ luôn luôn có một người tốt hơn nhiều về nó theo một cách nào đó. Đừng lo lắng về phần đó.

Sau đó; Bằng cấp CS là tốt và tất cả những thứ đó, và kiến ​​thức lý thuyết mà nó cung cấp cho bạn chắc chắn rất hữu ích, nhưng nó không có nghĩa là một dấu hiệu cho thấy ai đó là một lập trình viên giỏi. Một số lập trình viên giỏi nhất là tự học và tin tôi đi, thế giới đầy những sinh viên tốt nghiệp CS, những người không thể lập trình ra khỏi túi giấy ướt. Vì vậy, đừng lo lắng về phần đó.

Về những gì nó cần để trở thành một lập trình viên giỏi: Tôi nghĩ có hai điều cần thiết. Một là bạn cần có khả năng tiếp cận vấn đề theo một cách chính thức nghiêm ngặt và suy nghĩ ở một mức độ trừu tượng nhất định. Nếu bạn hiểu con trỏ và đệ quy, rất có thể bạn sẽ tốt trên mặt trận này. Một cái khác là sự cống hiến và kiên trì. Cũng giống như bất kỳ nghề thủ công nào khác, lập trình mất hàng chục ngàn giờ luyện tập chuyên dụng, tập trung để thành thạo, điều đó không xảy ra trong đêm. Phải mất ít nhất mười năm để đạt được thành thạo, bằng cách này hay cách khác. Nếu bạn đam mê, bỏ ra hàng giờ, tập trung và tìm kiếm những thử thách mới sẽ trở nên dễ dàng; nếu bạn không, tôi đoán nó vẫn có thể, nhưng nó sẽ không phải là một chuyến đi dễ chịu.


2

Remeber bất cứ khi nào bạn bắt đầu học ngôn ngữ lập trình Trước tiên hãy học Khái niệm và ngay lập tức kiểm tra nó có nghĩa là thực hiện một khi bạn thực hiện bài tập này, bạn sẽ không quên các khái niệm và cách sử dụng.

Tiếp theo "thực hành làm cho hoàn hảo" nổi tiếng và nó cũng được áp dụng ở đây trong lập trình. Bạn càng chơi với mã, chạy mã, đọc mã hiện có để sửa mã, bạn sẽ trở thành lập trình viên không tốt nhưng gr8.


0

Có hai cuốn sách không lập trình mà tôi nghĩ là rất quan trọng.

Đầu tiên là "Lady or the Tiger", bởi Raymond Smullyan. Đây là một bộ câu đố logic tuyệt vời mà lén lút bao gồm một loại tour du lịch của lý thuyết automata. Những thứ tiện lợi.

Thứ hai là "Godel, Escher, Bach: An Eternal Golden Braid" của Douglas Hofstadter, khiến bạn suy nghĩ về đệ quy và lý thuyết ngôn ngữ.

Nếu bạn muốn có những thói quen tốt cho người mới, hãy đọc "Các mô hình học việc" của Hoover và "Cẩm nang sống sót của lập trình viên mới" của Carter. Cả hai cuốn sách này đều nói về cách mở rộng các kỹ năng của bạn và cách mở rộng sự nghiệp của bạn. Họ có những cách tiếp cận khác nhau, nhưng họ làm việc tốt với nhau.


0

Tôi quan tâm đến cách bạn đánh giá kỹ năng của các lập trình viên khác.

Tôi nghĩ rằng kiến ​​thức cụ thể, có thể áp dụng sẽ tạo ra kết quả ấn tượng hơn nhiều so với các kỹ năng chung. Nếu bạn đã có nhiều bối cảnh và có thể đã thấy các vấn đề tương tự trước đây, bạn có thể tìm thấy nguyên nhân của một vấn đề rất nhanh. Nếu bạn đã biết cách sử dụng một bộ công cụ áp dụng, bạn có thể xây dựng các giải pháp rất nhanh. Nếu bạn chưa có kiến ​​thức đó, nhưng bạn có những kỹ năng cần thiết, bạn sẽ mất nhiều thời gian hơn để có được kiến ​​thức bạn cần. Nếu đó là trường hợp, bạn mất nhiều thời gian hơn để bao quát khoảng cách hơn, điều đó không nhất thiết có nghĩa là bạn chậm hơn.

Tất nhiên, nếu bạn có thể xây dựng kiến ​​thức và học cách sử dụng các công cụ sẽ giúp bạn sau này, điều này sẽ mang lại cho bạn một lợi thế. Tôi thấy rằng việc tìm hiểu một chút về nhiều chủ đề khác nhau sẽ giúp ích ở đây, vì chúng kết thúc chồng chéo nhiều hơn tôi mong đợi, và chỉ cần biết tìm kiếm thông tin bạn cần có thể tiết kiệm rất nhiều thời gian. Nhưng có lẽ đó chỉ là tôi.


0

Bạn thích học những điều mới và có thể sửa lỗi nhanh chóng. Nó có nghĩa là bạn có hai yếu tố chính để trở thành một bậc thầy: sự nhiệt tình và khả năng. Nhưng bạn nghĩ rằng bạn không bao giờ thấy mình là một chuyên gia, có thể bạn cần hai thứ nữa: tập trung và thời gian. Ví dụ, khi Linus Torvalds lần đầu tiên phát hành Linux vào năm 1991, không ai coi ông là một bậc thầy. Anh ấy vẫn đang làm việc trên Linux hàng ngày và bạn có thể thấy nhật ký hợp nhất của anh ấy từ kho lưu trữ nhân Git của Linux ngày nay. Sự tập trung của anh ấy khiến anh ấy trở thành bậc thầy nổi tiếng nhất trong lĩnh vực Linux. Thời gian là một khái niệm trừu tượng, nó có nghĩa là giữ cho bản thân cập nhật, tích lũy kinh nghiệm thông qua thực hành liên tục, chia sẻ kiến ​​thức của bạn cho người khác và cải thiện khi nhìn lại.

Tôi có cùng hoàn cảnh với bạn. Tôi đã lập trình được 15 năm với bằng không CS (bằng EE) và tôi luôn bị nhầm lẫn bởi khoảng cách lớn của tôi với đạo sư trong lĩnh vực của tôi. Nhưng tôi có ước mơ trở thành một bậc thầy và bắt đầu tham dự một dự án nguồn mở. Kỹ năng tư duy đến từ thực tiễn và kinh nghiệm. Một số cuốn sách có thể hữu ích, nhưng ý nghĩa của chúng chủ yếu là hướng dẫn. Các kỹ năng tư duy thuộc về bản thân bạn là từ kinh nghiệm của chính bạn. Hãy bắt đầu từ bây giờ!

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.