Làm thế nào để tôi cải thiện kỹ năng mã hóa của mình? [đóng cửa]


76

Đây là một chút thông tin về tôi, trước khi bắt đầu với câu hỏi.

Tôi là sinh viên khoa học máy tính, Java là ngôn ngữ mã hóa chính của tôi.

Vấn đề cơ bản trong trường đại học của tôi là các tiêu chuẩn giảng dạy. Không ai quan tâm đến việc dạy kiến ​​thức mã hóa cho sinh viên, thay vì chỉ là kiến ​​thức lý thuyết.

Hiệu quả là, hầu hết các bạn học đại học của tôi không hiểu lập trình gì cả.

Ngay cả tôi cũng không thể ra khỏi môi trường lập trình truyền thống, điều này giới hạn mã hóa của tôi ở một mức độ nào đó.

Những cách có thể mà tôi có thể phát triển và mở rộng các kỹ năng lập trình / mã hóa của mình là gì.

Ngoài ra, bạn có thể đề xuất các nguồn cho cùng?

Chỉnh sửa : Các nguồn gợi ý phát triển các kỹ năng mã hóa.


13
FYI: Từ kinh nghiệm của tôi, kiến ​​thức lý thuyết chắc chắn sẽ giúp bạn trong phần sau
Gopi

6
Bạn có thể bơi chỉ bằng cách đọc cuốn sách "dạy bản thân cách bơi trong X ngày" không?
pramodc84

9
"Thực hành có chủ ý". Làm điều gì đó khó hơn một chút so với trình độ hiện tại của bạn, giải quyết nó, học hỏi từ nó, lặp lại.

7
@ pramodc84 Nhưng chắc chắn đọc một cuốn sách liên quan đến bơi lội và sau đó nhảy xuống sông chắc chắn sẽ giúp THAN chỉ trực tiếp nhảy xuống sông và cố gắng học bơi
Gopi

5
Nó giống như ở hầu hết các trường đại học. Bằng cấp không phải là về một lập trình viên giỏi; đó là về việc biết các lý thuyết đằng sau điều đó và cách áp dụng chúng - bạn có thể nói rằng trở thành một lập trình viên giỏi còn lại như một bài tập cho sinh viên tốt nghiệp.
cấu hình

Câu trả lời:


46

Lập trình là một trong những lĩnh vực mà kinh nghiệm quan trọng. Do đó, để trở thành một lập trình viên tốt hơn, bạn nên viết mã nhiều hơn. Tuy nhiên, viết không phải là điều duy nhất bạn nên làm. Bạn cũng nên đọc mã của các nhà phát triển khác và tìm hiểu từ đó mã tốt là gì. Tham khảo các câu hỏi SO về điều này .

Bạn cũng có thể tìm thấy những cuốn sách dành riêng cho mã hóa, hữu ích; chẳng hạn như "Hoàn thành mã". Chúng chứa các mô tả về mã tốt là gì, kết hợp với kiến ​​thức cơ bản của bạn, có thể làm cho bạn trở thành một lập trình viên giỏi.


8
Code Complete là một cuốn sách hay - đó là cuốn sách tôi mong ước nhất tôi đã đọc khi ra khỏi trường đại học với tư cách là một lập trình viên.
glenatron

2
Bây giờ cuốn sách đó là trong must-readdanh sách của tôi . :) Cảm ơn!
ykombinator

2
@ykombinator:(push 'code-complete must-read)
Giorgio

98

Câu nói yêu thích của tôi là từ Khổng Tử:

Tôi nghe, tôi biết. Tôi thấy, tôi nhớ. Tôi làm, tôi hiểu.

Tất cả kiến ​​thức tôi có được, là từ việc áp dụng một và một chiến lược duy nhất:

Đi con đường thử thách nhất, luôn luôn.

Bạn muốn học C #? Nhận một công việc như một nhà phát triển C #.

Bạn muốn học tiếng Ý? Đến đó với một từ điển tiếng Anh / tiếng Ý và nói tiếng Ý

Bạn muốn học viết mã? Mã!


19
+1 cho luôn đi con đường khó nhất. Cuối cùng, họ trở thành một con đường dễ dàng! Câu trả lời tốt.
Ryan Hayes

3
Nó chắc chắn có vẻ như là một nhiệm vụ khó khăn để đặt ra cho mình một thách thức nhưng tôi thấy nó mang lại động lực để thành công. Câu trả lời chính xác. Những ngôn ngữ tôi biết rõ nhất là những ngôn ngữ tôi học đầu tiên mà không có đầu mối và liên tục học được với mỗi dự án.
Chris

2
Tôi thay đổi mạnh mẽ nhất bằng cách tăng dần. Nó tích cực hơn

2
Lập trình tốt không phải là một môn thể thao khán giả.
Ẩn danh

4
@Pierre, bạn muốn học 1) Latin và 2) Perl. Mã Perl bằng tiếng Latinh: csse.monash.edu.au/~damian/ con /HTML / Colligata.html

21

Viết mã là lời khuyên tuyệt vời, nhưng không có ai ở đó để cung cấp cho bạn thông tin phản hồi, bạn sẽ chỉ lặp lại sai lầm của mình. Tìm một công việc, làm việc trong một dự án nguồn mở, tìm một người cố vấn và khiến họ xem mã của bạn.


1
Chính xác! Đó là một điểm tuyệt vời. Có lẽ tôi không có người cố vấn.
ykombinator

4
Viết một số mã và gửi nó với một câu hỏi cụ thể trên StackOverflow.com và bạn sẽ nhận được rất nhiều.
JeffO

2
Đây là lý do tại sao tôi tiếp tục chê bai để có các đánh giá mã về dự án của chúng tôi, nhưng "không có thời gian cho việc đó."
MetalMikester

1
@MetalMikester - nhưng luôn có thời gian để làm điều đó hơn.
JeffO

1
@JeffO Đó chính xác là những gì đang xảy ra. :(
MetalMikester

10

Dưới đây là bài thuyết trình Dan North đã trình bày và QCon về cách chuyển từ người mới sang lập trình viên chuyên gia có tên là Làm sắc nét các công cụ . Dưới đây là những gợi ý chính từ bài thuyết trình:

  1. Thực hành những điều cơ bản: kata, mã cho vui ...
  2. Học hỏi từ những người khác: đọc sách, blog, v.v., đọc mã, chương trình theo cặp ...
  3. Hiểu xu hướng: những gì đang xảy ra trong ngành công nghiệp bây giờ
  4. Chia sẻ kiến ​​thức: cách tốt nhất để học một cái gì đó là hiểu và dạy nó
  5. Duy trì hộp công cụ của bạn: sử dụng "công cụ vượt thời gian" và các công cụ mới
  6. Học cách học: hiểu cách học

8

Cố gắng viết một trình biên dịch cho một số ngôn ngữ đơn giản từ đầu. Bạn sẽ cải thiện kỹ năng của mình rất nhiều trên đường đi (với một số kỹ thuật lý thuyết tốt đẹp từ lý thuyết ngôn ngữ chính thức như một phần thưởng). Tôi đã cố gắng viết một phiên bản Excel đơn giản và đó cũng là một bài tập rất hay.

Giống như những người khác nói cách duy nhất để cải thiện kỹ năng mã hóa của bạn là thực sự làm điều đó. Bắt tay bẩn với một số dự án lớn. Nhưng đối với chương trình lớn, điều quan trọng hơn nữa là bạn thành thạo các kỹ thuật thiết kế phần mềm, nếu không thì kích thước của chương trình dường như không thể quản lý được.

Có một câu nói hay từ Nate Kirby:

"Các lập trình viên xấu bỏ qua các chi tiết. Các nhà thiết kế xấu bị lạc trong các chi tiết."

Vì vậy, chuyển đổi giữa hai cấp độ trừu tượng này là kỹ năng bạn nên thành thạo.

Ngoài ra tốc độ của bao nhiêu dòng mã bạn có thể viết mỗi giờ không phải là điều bạn nên nhắm tới. Tôi thích một trích dẫn của David Parnas :

"Tôi thường nghe các nhà phát triển được mô tả là 'một người biết cách xây dựng một hệ thống lớn một cách nhanh chóng.' Không có mẹo nào trong việc xây dựng các hệ thống lớn một cách nhanh chóng, bạn xây dựng chúng càng nhanh, chúng càng lớn! "


5

Tôi đã triển khai một nhóm cá cược hoặc trò chơi Baccarat bằng hầu hết mọi ngôn ngữ tôi đã học.

Loại phần mềm này bao gồm

  • Ngày và thời gian, với tính toán
  • Các loại tiền tệ và những thứ có thể được chuyển đổi sang và từ tiền tệ
  • Một bộ quy tắc riêng biệt dễ kiểm tra
  • Các tiểu bang, quá trình chuyển đổi giữa các quốc gia và nhiều thực thể chịu trách nhiệm chuyển đổi trạng thái
  • Nhiều người dùng với các chế độ xem khác nhau của cùng một mô hình
  • Nhiều điều kiện kết thúc

Nhiều người chơi blackjack và poker cũng sẽ làm việc.

Một điều lưu ý là trong công việc hàng ngày của tôi, tôi làm việc trên các hệ thống tài chính và có sự chồng chéo rất lớn giữa những điều cần xem xét khi viết một trò chơi may rủi nhiều người chơi và một hệ thống giao dịch.


4
  • Chọn các dự án mã nguồn mở tốt và đọc mã.
  • Lấy một dự án kích thước trung bình cho chính mình và bắt đầu viết mã
    • Nếu bạn quan tâm đến phát triển web, hãy thử xây dựng một trang web hiện có từ đầu bằng cách sử dụng công nghệ yêu thích của bạn; Làm thế nào về twitter trong django?
    • Nếu bạn đang phát triển ứng dụng máy tính để bàn, hãy bắt đầu với một notepad và ứng biến nó để hỗ trợ các tính năng nâng cao (tìm kiếm dựa trên regex, để bắt đầu).

4

Hãy nghĩ về nó như thế này .... Tiger Woods đã không trở thành tay golf "giỏi nhất" bằng cách xem golf hoặc bằng cách đọc về nó. Anh ấy có được điều đó, như bất kỳ vận động viên nào khác làm, bằng cách học tập, bằng cách luyện tập, bằng cách tìm nơi anh ấy có thể cải thiện trò chơi của mình và làm một cái gì đó về nó.

Mã hóa là như nhau. Cách tốt nhất để cải thiện nó là nghiên cứu những gì người khác làm, hiểu TẠI SAO họ làm theo cách đó, và sau đó tự làm điều đó.


Phải, Tiger Woods trở thành tay golf "giỏi nhất" khi có nhiều người yêu. :-) Vì vậy, anh ấy không thực sự là một ví dụ tốt.
DL

4

Như trong bất kỳ hoạt động nào khác của con người, cách tốt nhất để cải thiện là thực hành kiến ​​thức của bạn, nhưng bạn cần một số bài tập cho việc đó. Dave Thomas , một trong những tác giả của cuốn sách Lập trình viên thực dụng, đã giới thiệu khái niệm Code Katas , tương tự như khái niệm kata trong võ thuật.

Bạn có thể xem tại đây: http://codekata.pragprog.com/


4

Nhảy xuống nước, ban đầu có thể lạnh và bạn sẽ bị lôi ra ngoài nhưng chẳng mấy chốc cơ thể bạn sẽ quen với nó và trở nên ấm áp trở lại và khi bạn trở nên thoải mái trong nước, sau đó bạn có thể bơi xung quanh có thể đi vào kết thúc sâu sắc.

Tôi vừa học xong đại học vài tháng trước, nơi tôi học Java. Giống như bạn, tôi không biết cách viết mã đúng. Khoảng một tháng trước tôi muốn xây dựng một ứng dụng web bằng PHP. Tôi không biết những gì tôi đã làm nhưng chỉ đi cho nó. Nó đáng sợ và áp đảo lúc đầu nhưng khi bạn thực hành nó trở nên tự nhiên. Tôi thậm chí đã viết ứng dụng nhiều lần, mỗi lần đơn giản hóa nó nhiều hơn. Bây giờ tôi đang làm việc trên ứng dụng từ đầu nhưng lần này tôi đang tìm cách làm thế nào để nó phản đối định hướng và sử dụng PEAR và mô đun nhanh của nó, đây là một trở ngại khác mà tôi phải vượt qua nhưng dù sao cũng quyết tâm và phấn khích.

Vì vậy, thực hành. Nhảy xuống nước! May mắn nhất :)


3

Tôi đề nghị học tất cả các cú pháp của ngôn ngữ yêu thích của bạn. Hiểu cách sử dụng các chức năng ảo, kế thừa, lambda nếu chúng tồn tại. v.v ... Một điều tôi đã làm là lấy một thư viện lớn đáng sợ (tôi đã làm điều này với boost và STL cho C ++) và xem liệu mỗi dòng và mọi từ khóa đều có ý nghĩa.

Hoặc ngoài ra, bạn có thể đọc tài liệu tham khảo cú pháp ngôn ngữ nếu có một tài liệu tốt bao gồm phiên bản cập nhật nhất. Một ví dụ ở đây là tham chiếu C # (Không phải phiên bản ở trên cùng. Tôi đã mắc lỗi khi xem phiên bản cũ phổ biến hơn không có cú pháp tôi đang tìm)


3

Sự đồng thuận chung là "viết thêm mã", tôi đồng ý, nhưng tôi sẽ thêm vào lời khuyên đó là bạn nên viết nhiều loại mã khác nhau. Java vẫn ổn khi sử dụng ngôn ngữ, nhưng bạn chắc chắn nên viết mã cả lên và xuống phổ công suất. Ngoài Java, tôi khuyên bạn nên thực hiện một vài dự án nhỏ bằng ngôn ngữ cấp thấp hơn (C là một ngôn ngữ tốt cho việc này), ngôn ngữ kịch bản (tôi thích perl, nhưng python cũng là một lựa chọn tốt), ngôn ngữ chức năng ( lisp là khuyến nghị chung ở đây, nhưng OCaml và Haskell cũng là những lựa chọn tốt), và ít nhất là cảm thấy thoải mái khi đọc một ngôn ngữ lắp ráp.

Ngoài ra, chọn một số loại trong các loại chương trình bạn thực hiện. Nhìn vào việc thực hiện ít nhất GUI GUI, ứng dụng web phong phú, máy khách và máy chủ mạng, trình điều khiển, tiện ích kết hợp dữ liệu, trình theo dõi tia và mô phỏng vật lý.

Tất cả các dự án nên có phạm vi tương đối nhỏ, mục tiêu không phải là có một chương trình đầy đủ tính năng, mà là để có được trải nghiệm rộng rãi trong các lĩnh vực khác nhau mà bạn có thể gặp phải, để tìm hiểu các loại suy nghĩ khác nhau cần thiết cho mỗi, và để tìm ra sở thích của bạn.

Khi bạn đã thực hiện điều đó, bạn sẽ có ý tưởng tốt về loại chương trình nào bạn quan tâm nhất và bạn có thể tìm hoặc bắt đầu một dự án nguồn mở để có kinh nghiệm làm việc trên các cơ sở mã lớn, xử lý lâu dài dự án hạn, và làm việc với các nhà phát triển khác.


2

Bạn đang nhận được một vài câu trả lời tương tự và tôi cũng sẽ như vậy. Viết mã. Có hai cách tốt bạn có thể làm điều đó.

  1. Chọn một cái gì đó thực sự hấp dẫn bạn hoặc bạn quan tâm và chỉ cần thực hiện nó. Nếu bạn tham gia vào các trò chơi, hãy viết một trò chơi. Nếu bạn quan tâm đến các công cụ web, hãy kết hợp một trang web thú vị và độc đáo. Bạn có thể không quản lý để hoàn thành nó ngay cả, nhưng kinh nghiệm sẽ dạy cho bạn rất nhiều.
  2. Chọn một dự án nguồn mở mà bạn thấy thú vị và tham gia với nó. Tìm hiểu từ mã hiện có và sử dụng nó để sửa lỗi, xây dựng các bài kiểm tra đơn vị và triển khai các tính năng mới.

Một trong số đó sẽ cung cấp cho bạn trải nghiệm trực tiếp về lập trình mà bạn cần cũng như sự tham gia vào các cộng đồng lập trình khi bạn học và phải đặt câu hỏi để hiểu rõ hơn về nó. Bạn sẽ phạm nhiều sai lầm. Điều này là tốt - nếu bạn ngừng phạm sai lầm, bạn đã ngừng học hỏi và bạn cần tìm ra một cách mới để thử thách bản thân.


2

Đề nghị của tôi

  • Tìm một dự án thú cưng và viết nó bằng một ngôn ngữ khác (lyke python / c #) cho một dự án mà bạn biết. Điều này sẽ dạy cho bạn nhiều hơn bạn có thể tưởng tượng. Nhìn vào các dự án khác tương tự và cố gắng để có được tính tương đương với chúng. Bạn có thể đi chậm với điều này và có các mục tiêu khiêm tốn, tăng dần mức độ khó của bạn với các tính năng mới. Điều này cũng trở thành phần trình diễn của bạn khi bạn đi phỏng vấn xin việc.
  • Tìm sử dụng trong dự án của bạn cho các công nghệ có liên quan như dịch vụ web, javascript, ajax, mã hóa địa lý và về cơ bản là bất cứ điều gì đang đi đầu trong thế giới phần mềm.
  • Chơi với các hệ điều hành khác như Linux / freebsd. Càng tiếp xúc nhiều với các loại hệ thống khác nhau, bạn sẽ càng hiểu được suy nghĩ của họ, và tại sao họ làm mọi thứ theo cách họ đã làm.
  • Khi bạn hoàn thành với các phần của mã, hãy quay lại và cố gắng cải thiện nó liên tục. Tìm kiếm sự không hiệu quả, thêm ý kiến ​​khi cần thiết, cố gắng hoàn thiện nó.
  • Đào xung quanh tại c2.com. Có rất nhiều thực hành mã hóa tốt. Tìm hiểu những điều này và cố gắng áp dụng chúng trong dự án của riêng bạn.
  • Đọc những cuốn sách như lập trình viên thực dụng và mã hoàn chỉnh, chúng sẽ cung cấp cho bạn kiến ​​thức về lập trình chiến đấu cứng.
  • Điều này nghe có vẻ không liên quan, nhưng hãy tìm một sở thích kỹ thuật khác nếu bạn chưa từng thích đua xe RC, chơi nhạc cụ hoặc học ngoại ngữ. Càng sử dụng nhiều bộ não của bạn thì càng tốt và bạn cần thư giãn theo thời gian vì lập trình có thể nhận được quá nhiều.

2

Đánh giá ngang hàng thực sự giúp cải thiện chất lượng mã của bạn. Nếu bạn không có người cố vấn thực sự, bạn có thể đăng mã của mình [sau khi bạn giảm mã xuống mức tối thiểu cần thiết] tại StackOverflow hoặc RefactorMyCode hoặc danh sách gửi thư và mọi người sẽ giúp bạn cải thiện chất lượng mã.


1

"Thực hành!" Đó là một sáo ngữ.

Bạn nên xem lại những gì bạn đã học trong các lớp toán và tạo ra một số chương trình giải quyết các vấn đề. Ngoài ra, thực hiện một chương trình thang máy, một máy bán hàng tự động (tính toán thay đổi tiền xu), để mài giũa kỹ năng logic của bạn. Hãy nghĩ về mọi thứ trong cuộc sống hàng ngày, và thực hiện chúng.


1

Vâng, thực hành là vô cùng quan trọng để phát triển kỹ năng lập trình và giữ cho chúng sắc nét. Tuy nhiên thực hành một mình sẽ chỉ đưa bạn đến nay. Bạn cũng phải học hỏi từ những người biết nhiều hơn bạn. Có những kỹ thuật bạn chưa bao giờ nghe nói đến, những thực hành mà lợi ích của chúng không rõ ràng ngay lập tức và những thủ thuật mà bạn không bao giờ có thể tự phát minh ra.

Cách để học các kỹ thuật mới, thủ thuật gọn gàng và thực hành hữu ích là rất nhiều. Đọc sách. Nói chuyện với đồng nghiệp. Hỏi câu hỏi. Xem lại mã của người khác và để họ xem lại mã của bạn. Đọc blog và bài viết về lập trình, bao gồm cả trang web này. Tóm lại, không làm việc trong chân không.

Ồ, và nếu bạn không chắc NP-Complete nghĩa là gì, hoặc nếu ký hiệu big-O làm bạn sợ, thì có lẽ bạn nên lấy một số lý thuyết về các lớp tính toán và thuật toán.


1

Tôi muốn nói rằng bạn nên đọc các mẫu thiết kế, chẳng hạn như Builder, Factory, Composite, và cuối cùng là Observer, Mediator và Fly weight. Các mẫu thiết kế không phải là tất cả cho tất cả các giải pháp mã hóa, nhưng chúng cho thấy cách thực hiện các khái niệm lý thuyết về lập trình hướng đối tượng.


1

Tôi chỉ có thể đề xuất những gì đã làm việc cho tôi. Tôi có ước mơ học ngôn ngữ lập trình và tạo ra động cơ cờ vua với nó. Tôi đã dành thời gian cho sách, bài báo và các mẫu nhỏ. Vì vậy, tôi quyết định kiểm tra các dự án thực sự có tài liệu tốt hơn cho nhà phát triển. Tôi đã chọn một dự án và bắt đầu đọc dự án từng ngày. Đừng nghĩ rằng ngày trôi qua lãng phí thời gian trong khi đọc. Nó là tốt hơn nhiều so với dành thời gian đọc trên các bài báo và sách. Bạn sẽ gặp rất nhiều điều không rõ ràng ngay từ cái nhìn đầu tiên nhưng từng ngày điều này sẽ thay đổi nếu bạn kiên nhẫn nghiên cứu. Đừng mong đợi để hiểu mọi thứ trong một tuần. Bạn phải giữ lòng tự trọng thấp khi bạn không hiểu một số điều. Hãy thử khám phá cách thức * điều tuyệt vời này đang hoạt động và tận hưởng.

Chọn một dự án hiện có mà bạn có đam mê với nó. Bắt đầu đọc mã, gỡ lỗi và cố gắng hiểu cách mọi thứ hoạt động hàng ngày. Cũng sử dụng dự án cho chính mình. Sau đó bắt đầu thêm một số tính năng mà bạn muốn. Thậm chí cố gắng viết ứng dụng tương tự hoặc tương tự.

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.