Tôi nên làm gì khi mã của tôi có mùi?


13

Tôi là một lập trình viên mới làm quen và thường khi tôi làm việc cho các dự án của riêng mình, tôi luôn có cảm giác rằng thiết kế mã của tôi không phải là tốt nhất có thể, và tôi ghét cảm giác này. Cuối cùng tôi dành thời gian để tìm kiếm mọi thứ, nhưng sau đó tôi trở nên dễ dàng bị choáng ngợp với nhiều chi tiết, chẳng hạn như các mẫu thiết kế để lựa chọn và khi nào nên sử dụng một lớp trừu tượng hoặc giao diện. Tôi có nên thử và học một chút mọi thứ cùng một lúc không?


15
sử dụng chất khử mùi;)
Pemdas

6
Và có thể là một chất khử trùng / thuốc diệt côn trùng để loại bỏ các lỗi :-)
Stephen C

3
Ăn một ít tỏi. Mọi người có thể sẽ nhận thấy hơi thở hôi của bạn nhiều hơn.
Mateen Ulhaq

4
và bây giờ bạn có: codereview.stackexchange.com nơi bạn có thể nhận trợ giúp với các ví dụ cụ thể về mã của mình.
LRE

1
Mở cửa sổ ... chờ đã ...
Mchl

Câu trả lời:


18

Một vài gợi ý:

  1. Sử dụng đóng gói để quản lý sự phức tạp bằng cách tách chức năng thành các khối xây dựng riêng biệt. Chứng minh mỗi khối hoạt động (thông qua các bài kiểm tra đơn vị) và bạn có thể sử dụng nó mà không cần quan tâm đến các chi tiết bên trong của nó.

  2. Tìm hiểu và nghiên cứu các mẫu phần mềm . Các mẫu phần mềm được thử và phương pháp đã được chứng minh để thực hiện một số tác vụ phổ biến, nổi tiếng.

  3. Nghiên cứu và hiểu cấu trúc dữ liệu. Tìm hiểu cách sử dụng phù hợp và đặc điểm hiệu suất cho từng loại cấu trúc dữ liệu.

  4. Biết rõ ngôn ngữ lập trình của bạn, điểm mạnh và điểm yếu của nó và cách sử dụng tốt nhất các tính năng của nó.

Bạn không cần phải biết tất cả những điều này cùng một lúc, nhưng bạn nên nghiên cứu tất cả về điều đó theo thời gian.


12

Lời khuyên của tôi là: đừng lo lắng.

Kinh nghiệm là giáo viên tốt nhất và bạn không có kinh nghiệm nếu bạn không viết mã. Ngoài ra, mã thiết kế xấu mà được viết là tốt hơn so với thiết kế tuyệt vời mà là không .

Vì vậy, viết thêm mã. Kết thúc dự án của bạn. Cảm giác rằng mã không lý tưởng có lẽ là đúng. Và có lẽ bạn sẽ gặp vấn đề với mã này. Và khi bạn gặp những vấn đề này, thì bạn sẽ tìm hiểu tại sao chính xác nó lại tệ. Bạn sẽ học được nhiều hơn từ trải nghiệm trực tiếp hơn là từ "tìm kiếm mọi thứ".

Ngoài ra, đừng hy vọng rằng cảm giác "mùi mã" này sẽ biến mất. Khi bạn đã khá hơn, bạn sẽ khắc phục một số vấn đề, nhưng bắt đầu nhận thấy những vấn đề mới, tối nghĩa hơn / nâng cao hơn.


+1 cho mã được viết được thiết kế xấu sẽ tốt hơn mã tuyệt vời chưa được đăng ký!
GrandmasterB

Nghe có vẻ như là một sự thật, nhưng thực tế không phải vậy. Mã được thiết kế xấu thực hiện những gì nó có nghĩa là tốt hơn mã không được thiết kế tốt. Tuy nhiên, nếu mã được thiết kế tồi, thì có khả năng nó sẽ làm những gì nó có nghĩa là làm gì?
Matt Ellen

Chúng ta đang nói về các dự án cá nhân ở đây. Tất nhiên, nếu chúng ta xem xét phần mềm kiểm soát tên lửa hạt nhân, không có mã IS nào tốt hơn mã xấu.
Không bao giờ bắt đầu

@Matt - phụ thuộc vào mức độ viết xấu của nó. IMO gần như tất cả các mã trong thế giới thực đều có mùi ở một mức độ và các tháp ngà không phản ứng tốt với sự thay đổi (một trong những vấn đề với quá nhiều dữ liệu ẩn và quá nhiều lớp trừu tượng). Kinh nghiệm thực sự là giải pháp duy nhất, mặc dù có một lý do chính đáng tại sao các quy tắc tiêu chuẩn được dạy tất nhiên. Điều kinh nghiệm chính là ít biết các quy tắc, và biết nhiều hơn khi nào và làm thế nào để phá vỡ chúng. Về việc học các quy tắc - Tôi đã là một lập trình viên gần 30 năm nay, bao gồm cả những thứ sở thích trẻ em, và tôi vẫn luôn học những thứ mới.
Steve314

@ Steve314: Vâng, tôi đồng ý, do đó tôi sẽ cảnh giác về việc nên làm gì. Bạn không thể học cách viết mã mà không cần viết mã, như bạn đã chỉ ra, và khi làm việc trên các dự án cá nhân để hiểu được những điều cơ bản, hoặc các chủ đề nâng cao hơn, tôi nghĩ điều quan trọng là phải suy nghĩ về những gì bạn đang cố gắng đạt được , thay vì lao vào và bắt đầu viết mã. Một chút thiết kế có thể đi một chặng đường dài, bởi vì, như tôi chắc chắn bạn biết, lập trình không chỉ là về mã hóa.
Matt Ellen

3

Đây là một vấn đề phổ biến với các lập trình viên bắt đầu. Đừng làm tê liệt bản thân bằng cách nghĩ rằng mọi thứ phải hoàn hảo. Đó là cách chắc chắn nhất để không bao giờ hoàn thành một dự án. Một trong những kỹ năng quan trọng nhất để học làm nhà phát triển là sự khác biệt giữa hoàn hảođủ tốt . Chấp nhận rằng mọi hệ thống bạn tạo có thể được cải thiện. Tập trung hoàn thiện các dự án của bạn. Sau khi bạn hoàn thành, bạn có thể quay lại và cải thiện chúng. Đó là lý do tại sao chúng ta có phiên bản 2.0, sau tất cả.


Cuộc gọi tốt Biết rằng một cái gì đó có thể tốt hơn là một khởi đầu tốt.
ozz

2

Tôi có nên thử và học một chút mọi thứ cùng một lúc không?

Tôi hy vọng là không. Mặt khác, bạn nên học hỏi và cải thiện toàn bộ thời gian.

Đọc sách, tham gia các khóa học, có đủ điều kiện, làm việc với nó, và bạn nên cải thiện.


2

Lời khuyên tốt nhất của tôi là tập trung vào các nguyên tắc cơ bản như danh sách mà Robert Harvey đề xuất. Phát triển phần mềm là một con quái vật phức tạp, phải mất nhiều năm để có thể giỏi từ xa, đặc biệt là trong chủ đề thiết kế giao diện tốt. Thật sự rất khó để đánh giá cao nhiều khía cạnh của phát triển phần mềm mà không trải nghiệm chúng trước tiên. Ngay cả một cái gì đó cơ bản như mã nhận xét có thể được đánh giá cao. Từ ngày đầu tiên, bạn được dạy viết mã tài liệu tốt. Tôi sẽ thừa nhận rằng đó không phải là cho đến khi tôi thực sự hiểu được một đoạn mã $$ cố gắng mà tôi đã viết cách đây vài tháng trước khi tôi thực sự đánh giá cao giá trị của những bình luận tốt. Điều tương tự có thể được nói cho nhiều khái niệm lập trình. Ví dụ, đóng gói dữ liệu, mô-đun kết hợp thấp và giao diện sạch rõ nét.

Tài nguyên quý giá nhất mà tôi gặp phải là đồng nghiệp của tôi. Bạn sẽ viết mã xấu. Chỉ cần chấp nhận điều đó. Đó là những gì bạn làm để đảm bảo rằng bạn viết mã tốt hơn theo thời gian xác định bạn là một lập trình viên. Ví dụ, khi tôi mới bắt đầu làm việc, công ty của tôi không có bất kỳ loại quy trình đánh giá thiết kế hoặc mã chính thức nào. Tôi đã tự mình chịu đựng sự chỉ trích của đồng nghiệp với những đồng nghiệp cấp cao hơn và thành thật mà nói, tôi cảm thấy mình như một thằng ngốc trong phần đầu tiên làm việc.

Phát triển phần mềm là một kinh nghiệm học tập đang diễn ra. Đặt hàng tấn câu hỏi, kiểm tra mã của bạn, hiểu lý do tại sao các đề xuất mà nhiều người cao cấp đưa ra, đừng ngại đặt câu hỏi về tính hợp lệ của các đề xuất mà các nhà phát triển cấp cao đưa ra và hầu hết đừng sợ sai. Cuối cùng, yếu tố thân mật hoặc cảm giác bị choáng ngợp. Đối với hồ sơ ... học đường cong hút.


2
  • Đầu tiên: Tái cấu trúc (nó sẽ vẫn có mùi nhưng sẽ có tổ chức hơn một chút)
  • Thứ hai: Xem bạn có thể sử dụng một số Design Patter để làm cho các phần được tái cấu trúc khớp với logic của bạn không.
  • Thứ ba: khi mọi thứ bắt đầu tốt hơn, hãy nhớ thời gian bạn dành để thực hiện bước đầu tiên và thứ hai. Bằng cách này khi bạn viết một số tính năng mới, bạn sẽ nghĩ về điều đó trong khi bạn thực hiện nó chứ không phải là một quy trình khác.

2

Hãy xem cuốn sách Tái cấu trúc: Cải thiện thiết kế của mã hiện có , của Martin Fowler. Điều đầu tiên bạn nên làm là cấu trúc lại mã của mình , để cải thiện khả năng đọc mã và giảm độ phức tạp để cải thiện khả năng duy trì của mã.

Khi bạn cấu trúc lại mã của mình, bạn đã sử dụng Mẫu thiết kế , Mã đóng gói , v.v.

Đây là một trong những cuốn sách hay nhất tôi từng đọc về chủ đề này. Nó cung cấp rất nhiều công thức nấu ăn hữu ích.


2

Một nguồn tốt là Lập trình viên thực dụng . Chương về "Windows bị hỏng" mô tả nơi bạn nhìn thấy chính mình. Các phản ứng ngắn và súc tích là để khắc phục các vấn đề.

Khi bạn bắt đầu sửa chữa thiết kế của mình, sẽ giúp hiểu những gì bạn không thích về nó. Thật dễ dàng để đưa ra những câu trả lời mơ hồ như "nó cứ đi khắp nơi" hoặc "tại sao tôi lại làm vậy?". Nhưng hãy dành thời gian để xem nếu có bất kỳ mẫu phổ biến mà bạn đã sử dụng.

  • Thiết kế tốt sẽ sử dụng lại một số lượng nhỏ các khái niệm trong toàn bộ cơ sở mã (lý tưởng là một khái niệm, nhưng trong thực tế, bạn có thể cần thêm một vài)
  • Một thiết kế tốt sẽ giúp bạn dễ dàng tìm ra nơi khắc phục sự cố (nguyên tắc DRY, nguyên tắc SRP)
  • Một thiết kế tốt sẽ có báo cáo lỗi tốt (liên quan đến điểm trên, nhưng được gọi là một mục riêng biệt vì đó là khía cạnh thường bị bỏ qua)

Khi bạn tìm ra nơi bạn muốn đến, hãy thực hiện các bước nhỏ, dễ dàng đảo ngược để đến đó (nghĩa là đây là những gì Tái cấu trúc là về). Mỗi khi bạn cải thiện mã của mình, hãy xem xét tác động lên phần còn lại của mã. Bạn đã làm cho mọi thứ tốt hơn hay tồi tệ hơn? Ít nhất đây là cách tiếp cận của tôi để mang lại trật tự cho sự hỗn loạn.


1

Nếu bạn đã có một số kinh nghiệm về lập trình, tại sao bạn không nghiên cứu một số dự án nguồn mở có mã sạch ? Bạn có thể xem xét câu hỏi NÀY từ SO có một số liên kết có liên quan.

Ngoài ra, các mẫu thiết kế là phải biết - hãy nghĩ về nó, toàn bộ ý tưởng của việc có các mẫu là để giải quyết các vấn đề đã biết mà không cần phát minh lại bánh xe hoặc viết mã lỗi.

Cuối cùng, có vẻ như bạn cần một số liều lập trình chức năng để giải tỏa đầu óc. Nhìn vào Haskell hoặc Ocaml để bắt đầu.


0

Nếu bạn không phải là một con quái vật nguy hiểm, bạn nên tìm một người bạn được gọi là người bạn có thể xem lại mã của bạn và ngược lại. Ngoài ra, nếu bạn làm mọi thứ, sẽ được xem xét lại, hoặc chỉ được người khác giám sát, đó là một lời tiên đoán tốt để làm điều đó tốt hơn.

Và đừng quên, lập trình bắt đầu trước khi mã hóa, luôn xem lại ý tưởng, kế hoạch của bạn. Nếu kế hoạch của bạn là xấu, đó là một hành động vui mừng để loại bỏ nó: bạn vừa lưu lại sự thất vọng khi ném ra một loạt mã (và thời gian tạo ra nó) dựa trên một kế hoạch tồi.


0

Lời khuyên của tôi là hãy thực hiện từng mùi một cách nghiêm túc và cố gắng khắc phục nó. Có nhiều cuốn sách hay về chủ đề này (Clean code và GOOS là IMHO tốt nhất). Nhưng nhiều hơn những cuốn sách đi đến các hội nghị để nghe và thảo luận với những người khác và về các giải thưởng trực tuyến (danh sách gửi thư, các nhóm). Vẫn tốt hơn hãy thử tham gia xxug cục bộ của bạn (dotnetug, jug, xpug, v.v.) hoặc tìm thấy một.

Thảo luận với các lập trình viên khác là cách duy nhất tôi biết để thực sự cải thiện (trừ khi bạn đủ may mắn để làm việc cùng với các lập trình viên chuyên dụng khác).

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.