Làm việc như một nhà phát triển duy nhất: nhận mã


39

Tôi không có lựa chọn nào khác ngoài tự mình làm việc và không thể tìm ra giải pháp thích hợp để xem xét công việc của mình, kiểm tra sự tỉnh táo, có ai đó để lên ý tưởng, thảo luận về các thực tiễn tốt nhất, v.v.

Tôi nghĩ tôi sẽ nhận được câu trả lời qua bài viết của Jeff Atwood: Trong Lập trình, One Is The Loneliest Number , điều tốt nhất tôi có thể tìm thấy về chủ đề này, nhưng hóa ra chỉ nhắc lại câu hỏi của tôi.

Tôi biết các trang web Stack Exchange như thế này và Đánh giá mã là một câu trả lời tiềm năng rõ ràng, nhưng như nhiều người sẽ đánh giá cao, đó là FAR từ lý tưởng:

Mặc dù tôi không thể liệt kê tất cả các cạm bẫy, thông thường, việc đặt ra một câu hỏi và giải quyết nó thành một vấn đề khép kín thường tốn rất nhiều công sức đến mức khi bạn chuẩn bị đầy đủ, bạn đã trả lời câu hỏi của mình nhiều hơn thời gian hơn nó sẽ mất. Ngoài ra, ẩn chi tiết để hỏi một câu hỏi được xác định rõ sẽ loại bỏ khả năng ai đó phát hiện ra vấn đề mà bạn chưa từng nghĩ đến. Ngoài ra, trong khi tôi không thể đặt ngón tay của mình lên nó, thì khả năng phản hồi của cuộc trò chuyện miễn phí không thể phù hợp với bất kỳ hình thức thảo luận internet văn bản nào mà tôi có thể nghĩ ra. Cuối cùng nhưng không kém phần quan trọng, tôi không muốn đăng toàn bộ dự án của mình cho thế giới nhìn vào phần còn lại của sự vĩnh hằng, vì những lý do rõ ràng.

Có câu trả lời nào khác ngoài việc trả tiền cho một nhà tư vấn để xem qua mã của tôi không?


3
Tôi cũng có vấn đề này (với các dự án cho vui), chỉ có tôi đủ may mắn để có một vài người bạn lập trình viên thân thiết sẵn sàng xem qua mã của tôi.
Austin Hyde

23
Bạn luôn có thể nói chuyện với chính mình - điều này đặc biệt tốt cho việc kiểm tra sự điên rồ :-)
Danny Varod

4
Nếu bạn có đủ khả năng thì đây là một lý do tại sao nên thuê văn phòng / bàn làm việc trong một khu kinh doanh (lý tưởng là nơi tập trung dân IT). Tôi đã có nhiều cuộc trò chuyện tốt với những người làm CNTT trong các văn phòng lân cận của tôi khi tôi là một lập trình viên đơn độc làm việc trong một văn phòng.
JW01

6
Làm việc một mình có thể tốt hơn làm việc với những kẻ ngốc.
Công việc

2
Không thực sự là một giải pháp, nhưng bạn có thể tham gia trò chuyện SO hoặc kênh IRC thích hợp; điều đó có thể làm giảm bớt một số gánh nặng làm việc của chính bạn.
Tikhon Jelvis

Câu trả lời:


36

Tôi đã ở trong đôi giày của bạn và tôi không nghĩ có bất kỳ giải pháp dễ dàng nào. Trả tiền cho một nhà tư vấn để xem qua mã của bạn không phải là một cách tốt để tiêu tiền. Nếu vấn đề của bạn là bạn cảm thấy cô đơn và không có ai để nói về lập trình thì tôi không thể giúp bạn ở đó nhưng nếu bạn thực sự quan tâm đến việc cải thiện chất lượng mã của mình thì điều tốt nhất nên làm là đặt nó sang một bên và trở lại với nó trong một tuần hoặc lâu hơn. Nếu mã thực sự xấu thì nó sẽ rõ ràng bởi vì bạn sẽ không thể hiểu ý nghĩa của nó và bạn có thể bắt đầu tái cấu trúc nó để có ý nghĩa. Sau một vài lần lặp lại của quy trình này, bạn sẽ bắt đầu nhận thấy các mẫu mã giúp mã dễ hiểu và chất lượng mã của bạn sẽ được cải thiện.


Tốt một! ... 15
Marjan Venema

2
Về lý thuyết, điều này có thể hoạt động, trong thực tế, KHÔNG CÓ CÁCH NÀO , anh ấy sẽ đi xem lại mã anh ấy đã viết cách đây 2 tuần nếu nó hoạt động. Anh ta cũng không nên, nếu nó hoạt động trở lại để dành thời gian cho nó vì lý do duy nhất làm cho nó "đẹp hơn" là một sự lãng phí thời gian, nó nên được thực hiện khi và nếu nó được chạm lại.
Thomas Bonini

3
@Krelp: Tôi nhìn vào mã quá khứ mọi lúc và không có cách nào bạn có thể thêm các tính năng và nói chung là bảo trì phần mềm mà không cần nhìn vào mã được viết trước đó. Không có thứ gọi là một kiến ​​trúc hoàn hảo và sự trừu tượng bị rò rỉ là quy tắc chứ không phải là ngoại lệ nên việc nhìn vào mã được viết trước đó là không thể tránh khỏi. Tôi biết rằng các lập trình viên marathon được thần tượng hóa trong giới lập trình nhưng mã hóa marathon nhanh chóng dẫn đến các dự án kiệt sức và vô chủ vì vậy, trên hết việc cải thiện chất lượng mã đang nghỉ và quay trở lại cũng giúp tôi tỉnh táo.
davidk01

@david: bạn đã đề cập đến việc nhìn lại mã sau một khoảng thời gian cố định, ngay cả khi không cần thiết vào lúc này. Ban đầu, bạn không nói chỉ nhìn lại mã khi bạn phải làm như vậy để thêm các tính năng mới .. Vì vậy, nếu - theo những gì bạn nói - cuối cùng bạn phải nhìn lại tất cả mã cũ, tại sao không làm Vì vậy, trong một thời điểm có liên quan thay vì sau một khoảng thời gian cố định?
Thomas Bonini

3
@Krelp: Nếu bạn đủ tự tin vào khả năng của mình thì hãy tiếp tục và chỉ xem mã làm việc khi bạn cảm thấy thích nhưng nếu bạn mới bắt đầu và không chắc chắn về việc bạn sẽ cấu trúc mã của mình như thế nào thì hãy tiếp tục tìm kiếm trở lại những gì bạn đã viết vài tuần trước và tái cấu trúc nó là một cách thực sự tốt để tìm hiểu cấu trúc mã phù hợp. Lời khuyên của tôi là dành cho những người đang tìm cách cải thiện và đạt đến điểm mà việc tái cấu trúc mã được viết trước đó trở nên ngày càng ít cần thiết hơn vì phiên bản ban đầu có cấu trúc mở rộng phù hợp. Bạn được chào đón nhiều hơn để bỏ qua lời khuyên của tôi.
davidk01

17

Có câu trả lời nào khác ngoài việc trả tiền cho một nhà tư vấn để xem qua mã của tôi không?

Không.

Lời khuyên của tôi là tham gia nhóm người dùng phát triển địa phương và nói ra ý tưởng của bạn với người khác. Nói về thiết kế của bạn. Hỏi người khác làm thế nào họ đã tiếp cận một số vấn đề nhất định.

Nếu họ xác minh thiết kế của bạn, ngay cả khi không nhìn vào mã của bạn, điều đó cũng đủ tốt.


4
Nhiều nhà văn chuyên nghiệp làm điều này.
JeffO

10

Có các kỹ thuật tự kiểm tra như phát triển theo hướng kiểm tra có thể giúp cung cấp phản hồi. Khi nó trở nên khó khăn để làm bạn biết kiến ​​trúc của bạn có khả năng ra khỏi whack.

Đặt ra một câu hỏi và đưa nó vào một vấn đề độc lập thường tốn rất nhiều công sức đến mức khi bạn chuẩn bị đầy đủ, bạn đã trả lời câu hỏi của chính mình trong nhiều thời gian hơn so với cách khác.

Vấn đề được giải quyết. Bạn không cần phản hồi bên ngoài trên mỗi dòng mã để cải thiện, chỉ cần lấy mẫu tốt tại các nhánh chính trên đường và tự kiểm tra cẩn thận tại các điểm ở giữa.

Bạn phải vượt qua ý tưởng rằng bạn có thể duy trì cùng một mức chất lượng làm việc một mình trong cùng một khoảng thời gian như một người làm việc trong nhóm. Có một lý do mọi người làm việc theo nhóm. Tin tốt là bạn không có xung đột về các quyết định thiết kế. Tin xấu là bạn không có xung đột về các quyết định thiết kế. Hy vọng rằng thời gian thêm bạn dành để duy trì chất lượng được bù đắp phần nào bởi những lợi thế của việc làm việc một mình.


Tôi không thấy TDD là một câu trả lời ở đây.
Aaronaught

1
@Aaronaught Tôi ở cùng thuyền với TS và tôi có thể đảm bảo với bạn rằng viết bài kiểm tra (trước mã như trong TDD hoặc sau đó) là cách để kiểm tra xem mã của bạn có lành mạnh không. Nếu bạn không thể kiểm tra nó, điều đó thật tệ.
stijn

1
@stijn: Có thể (phần nào) đúng là mã xấu khó viết bài kiểm tra hơn, nhưng không bao giờ là không thể - đó là cách các hệ thống kế thừa được nâng cấp. Ngay cả khi chúng tôi chấp nhận theo mệnh giá, yêu cầu không rõ ràng rằng mã tốt dẫn đến các thử nghiệm tốt, yêu cầu ngược lại vẫn không được chứng minh; một bài kiểm tra vượt qua không có nghĩa là mã có chất lượng hợp lý. Trên thực tế, tiền đề của TDD - "đỏ, xanh lục, tái cấu trúc" - về cơ bản có nghĩa là viết mã cẩu thả vượt qua bài kiểm tra và sau đó tái cấu trúc nó để cải thiện chất lượng, vì vậy vào cuối ngày bạn quay lại ngay nơi bạn bắt đầu, chỉ với các bài kiểm tra.
Aaronaught

2
@Aaronaught: bạn thực hiện các điểm hợp lệ, nhưng tôi vẫn khẳng định rằng các bài kiểm tra là một cách rất tốt để kiểm tra sự tỉnh táo của mã (mặc dù thực tế không phải là cách duy nhất); kinh nghiệm đã chứng minh cho tôi như vậy, đặc biệt hữu ích khi thấy SRP bị xâm phạm nặng nề.
stijn

@Mark: Điều đó thật tuyệt, nhưng tất cả những giai thoại này đều có giá trị thậm chí ít hơn một yêu cầu quảng cáo "Tôi đã giảm 50 pound trong 2 tuần", bởi vì điều được nói đến thậm chí chưa được đo lường , chứ đừng nói là quan sát trong các điều kiện được kiểm soát. Vâng, có bằng chứng cho thấy TDD làm giảm các khiếm khuyết trước khi phát hành, và đó là một điều tuyệt vời; đánh giá mã giải quyết một vấn đề hoàn toàn khác và không có cơ sở để giả định rằng TDD giải quyết cùng một vấn đề. Các bài kiểm tra đơn vị "trường học cũ" có lẽ thực sự tốt hơn cho việc này bởi vì chúng đặt các ràng buộc kiểm tra đối với các lớp riêng lẻ thay vì các nhóm của chúng.
Aaronaught

6

Tôi sẽ khuyên bạn nên thực hiện càng nhiều mạng càng tốt tại các hội nghị và các nhóm người dùng địa phương. Tôi biết rất nhiều nhà phát triển đã bắn mã khử trùng qua lại qua email hoặc im mọi lúc chỉ để giữ sắc nét và xem xét các thuật toán cùng nhau. Không, đó không phải là một cuộc đối thoại trực tiếp, và vâng, đôi khi việc vệ sinh mã là một nỗi đau, nhưng việc xem xét mã 20 tin nhắn tức thời theo thời gian có thể khá hữu ích, đặc biệt là khi bạn đang tuyệt vọng với một đôi mắt thứ hai.


4

Tôi đang ở trong một tình huống tương tự và tôi phụ thuộc rất nhiều vào Stack Overflow để nhận phản hồi về những câu hỏi sởn gai ốc. Tôi cũng thấy rằng thực sự phải viết ra một mô tả về vấn đề mà câu trả lời thường trở nên rõ ràng. Về mặt thực tiễn tốt nhất, tôi là nhà phát triển .Net và tôi sử dụng ReSharper, sẽ cung cấp các đề xuất về các lựa chọn thay thế thực hành tốt cho mã tôi đang viết (mà đôi khi tôi chỉ bỏ qua - nó có thể hơi khoa trương). Và một công cụ hữu ích khác là FxCop sẽ thực hiện phân tích mã tĩnh và làm nổi bật bất kỳ vấn đề nào không phù hợp với quy tắc của nó.

Nếu không, bạn phải đọc và cập nhật các thông lệ hiện tại. Tôi thích Morning Dew của Alvin Ashcraft vì các liên kết đến những gì mới và được cải thiện trong thế giới .Net.


4

Tôi sẽ đề nghị cố gắng tạo (hoặc tìm) một nhóm người dùng nhỏ. Làm cho mã của bạn có sẵn và khiến mọi người cam kết làm cho nó hoạt động - nửa giờ hoặc hơn mỗi ngày.


3

Một phản hồi mang tính xây dựng từ kinh nghiệm của tôi là trong những năm đầu phát triển của bạn, điều đó sẽ rất quan trọng mặc dù không bắt buộc nhà phát triển có kinh nghiệm xem xét mã của bạn để đặt nền móng. Khi bạn đã có kinh nghiệm, bạn có thể làm theo cách tiếp cận được đề xuất bởi @ davidk01 tức là Xem lại mã của riêng bạn theo định kỳ để cải thiện chất lượng mã.


2

Tôi không biết chi tiết về tình huống của bạn, nhưng hiện tại tôi đang có rất nhiều sinh viên khao khát trải nghiệm, họ hạnh phúc hơn khi làm thực tập sinh và học được điều gì đó.

Việc bạn xử lý chúng và dạy chúng điều này có vẻ có vẻ là việc làm thêm, nhưng chúng tôi đã ở đó khi chúng tôi mới bắt đầu và tôi đoán rằng đến lượt chúng tôi phải trả lại.

Họ không phải là chuyên gia và đôi khi họ có thể đánh lừa bạn, nhưng thường thì họ thách thức mọi thứ và đầy ý tưởng và rất tuyệt cho một cuộc thảo luận nơi bạn phải bảo vệ từng chi tiết về mã của mình.


2

Mặc dù tôi không thể liệt kê tất cả các cạm bẫy, thông thường, việc đặt ra một câu hỏi và giải quyết nó thành một vấn đề khép kín thường tốn rất nhiều công sức đến mức khi bạn chuẩn bị đầy đủ, bạn đã trả lời câu hỏi của mình nhiều hơn thời gian hơn nó sẽ mất.

Tôi trải nghiệm tương tự cho> 75% câu hỏi tôi đăng.

Tuy nhiên, đó không phải là một lập luận cho việc không bận tâm để làm như vậy. Đây là gỡ lỗi vịt cao su hiệu quả. Bạn đang tìm câu trả lời cho các câu hỏi mà bạn nghĩ có thể mọc lên để trả lời câu hỏi của bạn; có nghĩa là bạn đang nghĩ về vấn đề theo quan điểm của mọi người; có nghĩa là bạn đang suy nghĩ về vấn đề từ tất cả các hướng có thể; đó là cách tốt nhất để tìm ra lỗ hổng

Tốt nhất, bạn đã chứng minh một cách thuyết phục rằng bạn rõ ràng không thể nghĩ ra câu trả lời ở đây. Tại "tệ nhất", bạn kết thúc việc trả lời câu hỏi của riêng bạn. Hãy nhớ các trích dẫn, bởi vì điều này không phải là xấu cả. Nó có thể là một chút thời gian không hiệu quả, nhưng giải quyết vấn đề chậm hơn là quyết định nhanh chóng để không giải quyết vấn đề . Cuối cùng, bạn sẽ nhanh chóng giải quyết vấn đề hơn.

Trường hợp tại điểm:

Khi tôi là một nhà phát triển non trẻ, tôi đã xử lý trang eror ASP.Net rất nhiều lần. Tôi cần gửi cho Google tin nhắn để tìm ra những gì sai. có thể mất vài giờ trước khi tôi có giải pháp đúng. Về cơ bản, tôi đã phạm mọi sai lầm trong cuốn sách và sau đó phải giải quyết hậu quả của việc phải gỡ lỗi các vấn đề.

Bây giờ, khi một lỗi xuất hiện, tôi đã biết "nghi phạm thông thường" về những gì có thể gây ra sự cố. Danh sách tinh thần "nghi phạm thông thường" của tôi có hiệu quả dựa trên những vấn đề tôi gặp phải nhiều vấn đề nhất trong sự nghiệp. Nếu không lần đầu tiên thực hiện công việc chân không hiệu quả trong nhiều giờ của Google, tôi sẽ không bao giờ có được danh sách tinh thần này . Nhưng bây giờ tôi có danh sách tinh thần đó, tôi nhanh hơn đáng kể trong việc khắc phục sự cố.


Ngoài ra, trong khi tôi không thể đặt ngón tay của mình lên nó, thì khả năng phản hồi của cuộc trò chuyện miễn phí không thể phù hợp với bất kỳ hình thức thảo luận internet văn bản nào mà tôi có thể nghĩ ra.

Tôi hơi không đồng ý ở đây. Bạn đúng rằng giao tiếp internet ít phản hồi hơn, nhưng bạn (theo tôi) sai rằng điều này không tốt cho bạn.

Là một nhà phát triển đơn độc, bạn sẽ phụ thuộc vào việc gỡ lỗi vịt cao su. Thành phần quan trọng để làm cho RDD hoạt động là bạn dự đoán các câu hỏi mà con vịt cao su có thể có cho bạn. Bạn rõ ràng không thể dựa vào những gì con vịt cao su thực sự nói.

Khi làm việc với các hệ thống nhắn tin chậm (đăng trên StackOverflow hoặc liên lạc bằng cách viết thư), bạn vốn được khuyến khích để đảm bảo rằng bạn làm đúng ngay từ lần đầu tiên. Bởi vì cần sửa chữa một sai lầm sẽ là một quá trình chậm chạp và gian khổ.
Bằng cách so sánh, hãy xem xét rằng các hệ thống nhắn tin nhanh (hội thoại, nhắn tin tức thời), bạn có thể ngay lập tức sửa một cái gì đó. Khả năng nhanh chóng sửa một cái gì đó khiến mọi người ít được khuyến khích để đảm bảo rằng nó là chính xác.

Bốn trường hợp tại điểm:

  • Khi tôi lập danh sách phân tích / việc cần làm của riêng mình với tư cách là nhà phát triển, tôi vẫn sử dụng bút và giấy. Tôi đã nhận thấy rằng tôi che đậy những giả định và sự giả dối khi tôi gõ ghi chú của mình, bởi vì tâm trí tôi nghĩ rằng "Tôi có thể dễ dàng sửa lỗi này sau". Tuy nhiên, việc phải sửa một cái gì đó bạn viết trên giấy thật khó chịu, bạn cần gạch bỏ mọi thứ và viết giữa các dòng và tài liệu trông tệ hơn nhiều khi nó có những nét vẽ nguệch ngoạc trên đó. Viết trên giấy làm cho tôi kiểm tra thực tế bản thân trước khi tôi cam kết viết nó. Điều này bắt gặp rất nhiều hiểu lầm sớm, trước khi tôi thậm chí viết mã sẽ tạo ra lỗi.
  • Bà tôi là một thư ký (tuổi của máy đánh chữ). Làm một lỗi đánh máy trong một tài liệu chính thức có nghĩa là phải gõ lại toàn bộ trang. Dì tôi là một thư ký (tuổi của trình xử lý văn bản). Cô ấy có thể dựa vào trình kiểm tra chính tả tự động, và các lỗi có thể được sửa chữa dễ dàng và với nỗ lực tối thiểu. Không có gì đáng ngạc nhiên, bà tôi mắc lỗi đánh máy và lỗi chính tả ít hơn đáng kể so với dì tôi.
  • Trò chơi video được sử dụng để in trên hộp mực. Sửa một lỗi sau khi phát hành là không thể. Bạn cần in lại tất cả các hộp mực, phân phối chúng cho tất cả các nhà cung cấp và hy vọng rằng các nhà cung cấp bằng cách nào đó có thể liên lạc với các khách hàng đã mua trò chơi. Nó sẽ tốn hàng tấn tiền (gấp đôi chi phí sản xuất vật chất) và vẫn không đến được với một số khách hàng. Giờ đây, trong thời đại của các bản vá internet, các nhà phát triển trò chơi đã cho thấy được đầu tư ít hơn đáng kể vào việc thử nghiệm trò chơi của họ để họ có thể tránh được các lỗi phát hành trong ngày, bởi vì đơn giản là rất dễ dàng để khắc phục trực tiếp mọi khách hàng. Tác động của việc phạm sai lầm được giảm thiểu đến mức tốt hơn là khắc phục một số vấn đề sau khi thực tế, so với việc phải kiểm tra tất cả các khả năng có thể lỗi có thể xảy ra.
  • Tôi từng sống trong một căn hộ tầng ba, không có thang máy và thường phải đỗ một hoặc hai con đường từ tòa nhà của tôi. Tôi hầu như không bao giờ quên lấy một cái gì đó từ xe của tôi. Bây giờ, tôi sống trong một ngôi nhà với chiếc xe của tôi ngay cạnh tôi trên đường. Tôi quên mất mọi thứ từ xe của tôi mọi lúc .

Ý tưởng cơ bản ở đây là một hệ thống trao đổi khó khăn khuyến khích mọi người thực hiện các trao đổi chính xác và được kiểm tra thực tế . Mức độ nghiêm trọng của hình phạt (= quá trình sửa lỗi khó khăn) dạy bạn không phạm sai lầm.


Ngoài ra, ẩn chi tiết để hỏi một câu hỏi được xác định rõ sẽ loại bỏ khả năng ai đó phát hiện ra vấn đề mà bạn chưa từng nghĩ đến.

Khi bạn thực hiện MCVE , bạn không nên tạo nó và đăng nó trong câu hỏi. Trước tiên bạn nên làm cho chính mình , để bạn có thể cô lập vấn đề. Và sau đó, khi bạn nghĩ rằng vấn đề không thể giảm được nữa, và bạn vẫn không thấy nguyên nhân; sau đó bạn có một câu hỏi hợp lệ cho StackOverflow.

Trường hợp tại điểm:

Tôi luôn có một Visual Studio thứ hai chạy với một ứng dụng bảng điều khiển đơn giản có tên Sandbox. Bất cứ khi nào tôi gặp phải một vấn đề kỹ thuật, tôi sao chép mã vi phạm vào hộp cát và bắt đầu chơi xung quanh nó.

  • Điều gì xảy ra khi tôi thay đổi cài đặt này?
  • Tôi có thể tái tạo vấn đề nếu tôi rút ngắn mã không?
  • Những cài đặt nào làm cho có thể / không thể tái tạo vấn đề?

Trong 90% trường hợp, tôi tìm thấy nguyên nhân của vấn đề vì hộp cát giúp tôi xem mã vi phạm mà không bị phân tâm bởi bối cảnh xung quanh (hoặc, ví dụ, bất kỳ sự không chắc chắn nào về các giá trị xuất hiện cho các phần khác nhau của mã.

Trong 10% trường hợp khác, tôi chỉ còn lại mã tối thiểu để tái tạo vấn đề, đây là một đoạn ví dụ hoàn hảo để đăng trên StackOverflow.


Cuối cùng nhưng không kém phần quan trọng, tôi không muốn đăng toàn bộ dự án của mình cho thế giới nhìn vào phần còn lại của sự vĩnh hằng, vì những lý do rõ ràng.

Khi bạn đã có MCVE, bạn không nên có nhiều thông tin cá nhân (hoặc công ty) trong đó. Nếu bạn làm như vậy, vì mã là tối thiểu, thật dễ dàng để đổi tên mọi thứ thành một ví dụ foo / bar / baz cơ bản hơ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.