Những cám dỗ có hại trong lập trình


97

Chỉ tò mò, những loại cám dỗ trong lập trình hóa ra thực sự có hại trong các dự án của bạn?

Giống như khi bạn thực sự cảm thấy thôi thúc phải làm một cái gì đó và bạn tin rằng nó sẽ mang lại lợi ích cho dự án nếu không bạn sẽ tự lừa mình tin vào điều đó, và sau một tuần bạn nhận ra rằng bạn đã giải quyết bất kỳ vấn đề thực sự nào mà thay vào đó tạo ra những vấn đề mới hoặc thay vào đó , trong trường hợp tốt nhất, làm hài lòng con thú bên trong của bạn mà không có tác động rõ ràng.

Cá nhân, tôi thấy rất khó để không cấu trúc lại mã xấu. Tôi làm việc với rất nhiều mã kế thừa xấu và phải hít một hơi thật sâu để không chạm vào nó khi tôi không có bài kiểm tra nào để chứng minh việc tái cấu trúc của mình không phá vỡ bất cứ điều gì.

Một con quỷ khác đối với tôi trong giao diện người dùng, tôi thực sự có thể dành hàng giờ để thay đổi bố cục UI chỉ vì tôi thích làm việc đó. Đôi khi tôi tự nhủ mình đang làm việc với khả năng sử dụng, nhưng sự thật chỉ là tôi thích di chuyển các nút xung quanh.

Quỷ lập trình của bạn là gì, và làm thế nào để bạn tránh chúng?


19
Tôi thấy thật hài hước khi không ai có thể trả lời phần thứ hai của câu hỏi của bạn - "[và] làm thế nào để bạn tránh chúng?".
Craige

3
Có ai để ý rằng đây là câu hỏi hàng đầu trên SE cả ngày.
msarchet

+1 cho "... dành hàng giờ để thay đổi bố cục UI ..." Tôi rơi vào cái bẫy đó quá thường xuyên.
7wp

Câu trả lời:


67

Tổng quát hóa sớm là lỗi lớn của tôi; thay vì giải quyết vấn đề trước và chờ đợi cho đến khi có nhu cầu thực sự cần giải quyết cho trường hợp chung, tôi luôn theo dõi vụ việc chung trước và viết lên một tấn mã phức tạp hơn mức cần thiết.

Cập nhật:

Xem " Tội lỗi số 1 - Tổng quát hóa sớm " để biết mô tả chuyên sâu.


6
Tôi ghét nó khi các phi hành gia kiến ​​trúc làm điều đó!
ozz

13
Ôi, niềm vui của metafactoryfactories :(

+1 "Một nghiên cứu về các nhà thiết kế vĩ đại cho thấy tất cả họ đều giỏi dự đoán sự thay đổi" (Code Complete 2). Thật tốt khi có thể nói những loại thay đổi có khả năng. Sau đó, bạn có thể quyết định liệu có bất cứ điều gì sẽ đạt được bằng cách giải quyết trường hợp tổng quát hơn sớm hay không - liệu nó có tiết kiệm thời gian sau này không. Đôi khi nó không đáng, nó sẽ dễ dàng sửa đổi mã sau này.
MarkJ

1
Bạn đã nghe nói về Nguyên tắc YAGNI (Bạn không cần đến nó) chưa?
Oscar Mederos

1
Điều này. Tôi đổ lỗi cho thực tế là việc tạo mã đẹp, tổng quát và có thể sử dụng lại rất thỏa mãn, đặc biệt là nếu vấn đề không phải là rất khó khăn và / hoặc chỉ là một sự thử lại những gì bạn đã làm trước đây. Trường hợp cụ thể, các hoạt động cơ sở dữ liệu CRUD chung (UI, phản hồi hành động của người dùng, thực hiện một cái gì đó với DB, thar).
Cthulhu

197

"Chúng tôi sẽ quay lại vấn đề này và sửa nó sau. Chúng tôi chỉ cần nó hoạt động ngay bây giờ!"


16
Đây là ma quỷ tuyệt đối.
alesplin

6
Tôi sẽ cho bạn 100 điểm cho việc này nếu tôi có thể. "Sau này" KHÔNG BAO GIỜ HẠNH PHÚC. Làm công cụ ngay lần đầu tiên hoặc không.
quick_now

12
Đây không phải là bổ sung của việc dành hàng giờ để tái cấu trúc mã xấu? Chúng ta có thể phân chia thế giới cho các lập trình viên "sẽ sửa nó sau" nhưng không, và các lập trình viên cố gắng làm cho đúng ngay lần đầu tiên sau đó dành hàng giờ để "tái cấu trúc mã xấu".

6
diễn đạt lại cụm từ này thành "Chúng tôi sẽ quay lại và sửa lỗi lặp lại tiếp theo này " và nó có vẻ có cấu trúc hơn nhiều
Chris S

4
Bạn phải làm điều này. Nếu bạn dành tất cả thời gian để làm cho nó hoàn hảo, nó sẽ không bao giờ giao hàng. Kết thúc dự án, sau đó đánh bóng nó.
Zan Lynx

105

Hạn chót là rất xa, tôi có quá nhiều thời gian để làm điều đó, vậy tại sao không dành một chút thời gian để lướt web?


72
thay thế "web" bằng "lập
trình.stackexchange.com

1
Có bất cứ điều gì khác trên web đáng đọc? Tôi đã quên mất có bất cứ điều gì khác!
James McLeod

3
còn gọi là 'Chết tiệt, Minecraft'
johnc

1
@david, đó chỉ là điểm khởi đầu trên web - câu hỏi là bạn nhận được bao xa ...

Id 'nói, điều này không còn hợp lệ nữa do Agile.
vartec

103

"Đây chỉ là mã bằng chứng khái niệm vứt đi. Một khi họ thích nó, tôi sẽ thực sự làm cho nó tốt."


13
Điều này được gọi là Phát triển ứng dụng nhanh chóng; và nó không bao giờ hoạt động trong môi trường kinh doanh. :)
John Kraft

12
Thật buồn cười là đối với tôi, đó là một cách khác xung quanh giáo dục Tôi không thể tự mình viết mã ném ngay cả khi đó là chính xác những gì được yêu cầu.
Dan

6
Tôi làm việc trong lĩnh vực tài chính và RAD vẫn đang phát triển mạnh mẽ, đặc biệt là công cụ VBA / Excel. Có một sở trường của nó, RAD không có nghĩa là cẩu thả.
Ian

5
Và đôi khi ứng dụng bạn mất hai năm để hoàn thiện mã bị vứt đi bởi vì ai đó cao hơn đã quyết định "oh, chúng tôi không thể làm điều đó" hoặc một số phiên bản khác của "không bận tâm".
PSU

12
Điều này. Tôi: "Đây chỉ là bằng chứng của tôi. Nếu bạn thích nó, chúng tôi sẽ viết phiên bản sản xuất." Quản lý: "Phiên bản của bạn hoạt động, hãy gửi nó!" Tôi: "Chà, nó không bao gồm tất cả việc sử dụng ... bạn đã giao hàng, phải không?"

74
  1. Tái cấu trúc một phần của mã một vài ngày trước khi phát hành.
  2. Internet: Sự phân tâm lớn nhất của tất cả.
  3. Công nghệ mới : Không thể rời tay khỏi công nghệ mới.
  4. Tối ưu hóa: Tối ưu hóa, Tối ưu hóa. .. và tối ưu hóa hơn nữa
  5. Sự hoàn hảo : Không bao giờ hài lòng với mã.
  6. TODO: Thiếu todos thời gian sẽ không bao giờ được thực hiện.
  7. Ước tính thời gian: Nhiều PM không coi đây là "ước tính". Họ coi như thực tế.
  8. Lời hứa: Đưa ra quá nhiều lời hứa.

1
Đã từng làm việc trong một dự án có 100 người trong một căn phòng lớn và chỉ có 2 PC dùng chung có internet. Năng suất rất cao. Ban quản lý đã cho mọi người internet và tự hỏi tại sao sản lượng công việc giảm một nửa.
quick_now

2
Về Dự toán thời gian ... rất nhiều nhà quản lý coi đó là điểm khởi đầu trong đàm phán (như mặc cả về giá cả). Những người coi đó là sự thật sai lầm nhưng thực sự trên mức trung bình ...
dbkk

@quickly_now Việc cắt mạng có thể hoạt động cho các tác vụ trần tục như nhập dữ liệu hoặc sửa lỗi thường xuyên, nơi bạn không cần phải tìm kiếm bất cứ điều gì. Đối với nhiều thứ khác thường (ví dụ: tra cứu tài liệu API / mã ví dụ), Google là bạn của bạn - phải mất thêm 5 lần thời gian để tự mình tìm ra. Ngoài ra, nếu mọi người không có động lực và muốn bị phân tâm, họ sẽ tìm cách.
dbkk

@dbkk - có đến một điểm. Đó là tất cả trong Ada, không có API để tìm kiếm, nó là trên phần cứng chuyên dụng và phân loại bí mật quốc gia. Việc đưa các máy kết nối internet không được phân loại vào môi trường đó cũng là một cơn ác mộng về bảo mật.
quick_now

55

Trở thành con mồi để cố gắng xây dựng mọi thứ trong nhà, khi có các khung và thư viện hiện có.


6
Đôi khi các khung và thư viện hiện có được đánh dấu Verboten bằng chữ lớn màu đỏ bởi pháp lý CNTT.
Christopher Mahan

22
Và tất nhiên, sự cám dỗ ngược lại: sử dụng một khung hoặc thư viện xa lạ và cho rằng nó sẽ làm những gì bạn cần và mọi thứ sẽ diễn ra suôn sẻ.
Carson63000

"Nhưng sẽ chỉ mất một tuần để viết và khuôn khổ của chúng tôi sẽ thực hiện chính xác những gì chúng tôi muốn, một cái trực tuyến miễn phí có lẽ đầy lỗi"

2
@Christopher: Đó là một lý do tốt để thực hiện lại (hoặc tìm một thư viện khác có giấy phép chấp nhận được). Nhưng quá thường xuyên, lý do để thực hiện lại chỉ là NIH
Donal Fellows

@Carson: +1 :-)
Macke

48

Quỷ tái phát của tôi: Tối ưu hóa sớm và áp đảo.

Và tôi vẫn không thể tránh họ 100% ...


10
+1 cho áp đảo. Tôi đã từng viết toàn bộ "khung cấu hình" với "bộ điều hợp tham số cấu hình" cho các tệp .ini, tệp XML, bảng cơ sở dữ liệu và ổ cắm mạng (vì mọi người đều muốn lưu trữ một dịch vụ web cấu hình, phải không?)
TMN

8
Kỹ thuật quá sớm?
Christopher Mahan

@Chris "áp đảo quá sớm" cũng áp dụng. Nó cũng được đề cập trong các câu trả lời khác . Tôi biết đó là một trong những lệnh cấm của tôi.
Matthew Scharley

Làm thế nào về kỹ thuật siêu lớn được tối ưu hóa quá sớm ...
Newtopian

4
Cái này của tôi ư. Tôi đổ lỗi cho quản lý khi cho tôi thời hạn trị vì miễn phí / tương lai xa và không đưa ra thời hạn cho các thành phần cụ thể.
Cthulhu

46

Ước tính quá lạc quan

Khi người quản lý của bạn đang nhìn chằm chằm xuống bạn và bạn cảm thấy cảm giác nóng bỏng muốn đưa ra ước tính thấp hơn so với ruột của bạn đang nói với bạn ... đừng làm điều đó!

Rốt cuộc, ruột của bạn có lẽ đã quá thấp rồi!


13
Khi họ hỏi bạn có thực sự sẽ mất nhiều thời gian như vậy không, chỉ cần nói đồng ý và sau đó ngồi im lặng cho đến khi họ cảm thấy lúng túng ...
PeterAllenWebb

4
Giáo sư đại học của tôi đã từng nói với tôi, "Hãy tìm ra ước tính tốt nhất của bạn, sau đó nhân đôi nó." Nó đã làm việc cho tôi cho đến nay.
zzzzBov

2
Ngoài ra, hãy thử phương pháp SMBC .
gièm pha

4
Một trong những ông chủ cũ của tôi tăng gấp ba ước tính của nhà phát triển, sau đó thương lượng xuống gấp đôi với khách hàng. Khách hàng nghĩ rằng họ đã có một thỏa thuận, các nhà phát triển đã có thời gian họ cần ngay cả khi họ không biết điều đó. Thắng-thắng!
DaveE

2
Lập lịch dựa trên bằng chứng có thể giúp giải quyết vấn đề này: joelonsoftware.com/items/2007/10/26.html
Rei Miyasaka

33

Để sử dụng một công nghệ / công cụ / ngôn ngữ trong dự án của bạn hoàn toàn vì bạn vừa mới học nó.

Để cố gắng chứng minh bạn là một nhà phát triển giỏi như thế nào.

Để xem xét mã bạn đã viết là của bạn.


Nếu tôi chỉ có thể nâng cấp nó mỗi lần tôi làm như vậy. May mắn thay, một nửa trong số các giải pháp hóa ra là khá tốt. Một nửa thì không.
Dan

Hoặc một trong những điều bạn chưa học được. Chỉ cần đừng quên buộc dây của bạn vì nó sẽ là một chuyến đi dài.
Evan Plaice

32

Tôi sẽ nghỉ ngơi và xem stackoverflow.com;)


2
Tôi luôn thích khi stackoverflow là câu trả lời cho một trong những câu hỏi này
Bill Leeper

31

Sự cám dỗ tồi tệ nhất:

Oh, tốt .. Tôi đoán một mẹo nhỏ / hack / sửa chữa bẩn sẽ không bị tổn thương.

Đoán xem, nó có đau không. :)

đi đến


11
"Sửa lỗi cổng"
Đánh dấu C

4
Sử dụng một gototuyên bố sẽ dẫn đến một cuộc tấn công raptor.
Tối đa

1
@Maxpm: Suy nghĩ tốt! Đã bao gồm.
Goran Jovic

1
@Mark C, sửa cổng là gì? Gøøgle-fu của tôi không đủ tốt.

1
@ Thorbjørn Ravn Andersen: vi.wikipedia.org/wiki/Gateway_drug_theory
Jimmy


23

Creep tính năng

Lập một kế hoạch, bám sát và triển khai. Và sau đó quay lại và thêm những thứ mà mọi người đang yêu cầu.

Tôi đã thấy điều này nhiều lần. Bạn ngồi xuống, thiết kế và bắt đầu viết mã. Người dùng nghe thấy một số điều vô nghĩa nhầm lẫn về tính năng yêu thích của họ bị "mất tích" và họ bắt đầu vận động hành lang cho nó. Sếp của bạn yêu cầu bạn thêm nó vào giờ thứ 11, nó phạm lỗi khi triển khai, nó giới thiệu các lỗi ở khắp mọi nơi và 3 tháng sau, khi mọi người đã ổn định, bạn sẽ được yêu cầu xóa nó, bởi vì không ai có thể hiểu tại sao bạn đặt tính năng retro nhảm nhí ở nơi đầu tiên! Bạn không thể nói rằng phần còn lại của thiết kế làm cho nó vô nghĩa?


Rời khỏi thông số kỹ thuật không đóng băng và mở ra như một sự nhượng bộ vì Thủ tướng đầu tiên (hiện đã bị sa thải) không biết gì về phát triển phần mềm và thiết kế một lịch trình phát hành hoàn toàn phi thực tế. Ý tưởng tồi tệ nhất.
Evan Plaice

20
  1. Thêm nhiều tính năng

  2. Cuộc thi có tính năng này. Vì vậy, đây là một tính năng phải có do đó lập trình nhiều hơn là phân tích chiến lược, định vị, v.v.

  3. Cuộc thi KHÔNG có tính năng này. Vì vậy, đây là một tính năng khác biệt do đó lập trình nhiều hơn là phân tích chiến lược, định vị, v.v.

  4. Giải quyết một vấn đề kinh doanh với lập trình nhiều hơn. ví dụ, chuyên môn tốt hơn trong việc quản trị máy chủ linux, trang web của bạn được lưu trữ trên không thể có được thông qua lập trình nhiều tính năng hơn. Đôi khi bạn chỉ cần học cách khắc phục sự cố thay vì mã hóa lại toàn bộ vào C # .Net

  5. Giải quyết một vấn đề tiếp thị với lập trình nhiều hơn. ví dụ: lạm dụng khái niệm con bò tím của Seth Godin rằng bạn đang gián tiếp giải quyết vấn đề tiếp thị bằng cách lập trình thêm các tính năng vào sản phẩm của bạn để biến nó thành "con bò tím". Đôi khi, nó chỉ là một con quái vật đột biến.

  6. Giải quyết vấn đề năng suất với việc lập trình nhiều hơn cho chính mình rằng thời gian viết kịch bản này sẽ được lưu lại trong vài giờ trong tương lai thay vì thực sự lập trình những thứ thực sự quan trọng

  7. Lập kế hoạch để mã nhưng chưa mã hóa vì bạn muốn "làm cho đúng"

  8. Mã hóa một phiên bản bẩn và hứa rằng bạn sẽ "làm cho nó tốt hơn sau này" nhưng không bao giờ quay lại để "làm cho nó tốt hơn"

  9. Không thực hiện một mockup hoặc sơ đồ trang web vì nó "quá rắc rối". Tôi chỉ có thể chụp màn hình các trang của đối thủ cạnh tranh cho mockup và vẽ sơ đồ trang web "sau này" không bao giờ có. Và sau đó chỉ cần đi thẳng vào lập trình trang đầu tiên tôi hình dung trong đầu.

Thú nhận: Cá nhân tôi đã mắc lỗi 1, 3, 7, 8. Tôi cũng đã mắc 2, 4, 5, 6 nhưng thường tự lừa dối bản thân mình rằng tôi đã không làm.

Tôi hiện đang khắc phục 9.

EDIT Không nhận ra câu hỏi yêu cầu chúng tôi đưa ra giải pháp.

1) Thêm nhiều tính năng Chỉ cần không làm điều đó. Làm việc với doanh nghiệp, tiếp thị, người sáng lập, cố vấn, v.v. và tước ứng dụng của bạn chỉ còn 1 điều.

Hãy đọc về twitter, Groupon , v.v ... về cách họ chỉ loại bỏ mọi thứ xuống chỉ còn 1 điều dẫn đến thành công của họ.

Nếu bạn nghĩ rằng nó chỉ hoạt động nếu bạn muốn xây dựng các công ty lớn, hãy nghĩ lại. Ctrl + F cho dòng này "Tôi càng thêm nhiều tính năng vào phần mềm, nó càng bán kém hơn (Điều này, không cần phải nói, rất không trực quan đối với hầu hết các nhà phát triển phần mềm.)" Trong liên kết này

2) Cuộc thi có tính năng này. Vì vậy, đây là một tính năng phải có

Xem giải pháp 1

3) Cuộc thi KHÔNG có tính năng này. Vì vậy, đây là một tính năng khác biệt

Xem giải pháp 1

4) Giải quyết một vấn đề kinh doanh với lập trình nhiều hơn.

Nếu bạn cần thuê một ai đó để dạy bạn, tư vấn, hoặc làm điều đó cho bạn và sau đó ghi lại cách anh ấy đã làm, để bạn có thể tự làm điều đó vào lần tới. CỨ LÀM ĐI!! Không viết lại mã, không vượt qua GO, không thu 200 đô la.

5) Giải quyết một vấn đề tiếp thị với lập trình nhiều hơn.

Nếu mọi người không hiểu những gì bạn đang bán, thì đó là một vấn đề tiếp thị. Quay trở lại giải pháp 1 và trục.

6) Giải quyết vấn đề năng suất với nhiều chương trình hơn

Chờ đợi.

Đợi cho đến khi bạn cảm thấy rằng năng suất của bạn đã gặp phải một vấn đề năng suất cụ thể trong khoảng thời gian dài hơn 2 tuần và điều đó hợp lý sẽ xảy ra trong 2 tuần nữa.

Bây giờ, hãy đánh giá lượng thời gian dành để lập trình một kịch bản để giải quyết vấn đề này. Hãy nhớ lấy ước tính tồi tệ nhất của bạn và nhân với 2.

Nhân ước tính của bạn với tỷ lệ hàng giờ của bạn.

Bây giờ hãy xem xét các giải pháp thay thế: thuê ngoài, mua một giải pháp sẵn có, không làm gì về nó, v.v.

Chọn giải pháp hiệu quả nhất.

Dính vào nó.

7) Lập kế hoạch viết mã nhưng chưa mã hóa vì bạn muốn "làm cho đúng"

Đi tập thể dục. Bạn sẽ cảm thấy một lượng endorphin sẽ thúc đẩy mông của bạn và khiến bạn có kế hoạch hành động. Tôi biết điều này bởi vì tôi vừa mới tập 5x5 và squats 5x5.

8) Viết mã phiên bản bẩn và hứa rằng bạn sẽ "làm cho nó tốt hơn sau" nhưng không bao giờ quay lại để "làm cho nó tốt hơn"

Thiết lập hệ thống tập tin tickler trong GTD. và tích cực theo dõi. Thực hiện theo tất cả các lời hứa với bản thân và những người khác.

9) Không thực hiện một mockup hoặc sơ đồ trang web vì nó "quá rắc rối".

Hãy chi 75 USD cho phiên bản máy tính để bàn balsamiq mockups. Tôi biết điều này bởi vì tôi đã mua nó 3 tuần trước. Nó đã làm cho tôi làm lại các mockup của mình bởi vì tôi cảm thấy như một nghệ sĩ, kiến ​​trúc sư và người có tầm nhìn tất cả trong 1 mặc dù bản vẽ của tôi trong thế giới thực rất tệ. Phông chữ được sử dụng trong balsamiq vô thức nhắc nhở bạn rằng đây chỉ là một mockup, không được đặt trong đá giúp bạn trong RAD.

Kết thúc EDIT


+ 1 câu trả lời này, nhưng tôi thấy nó hơi khó đọc. Tôi không thực sự hiểu bối cảnh của 9 điểm đầu tiên. Bạn có phiền làm rõ không? Tuy nhiên, công việc tốt.

@MattFenwick Xin chào, cảm ơn bạn đã +1. Điểm 1-5 thường được áp dụng trong kịch bản tạo ra sản phẩm để bán, mặc dù bạn cũng có thể áp dụng nó cho các tình huống trong đó xu hướng tìm câu trả lời tốt nhất dẫn bạn nghiên cứu sâu về nghệ thuật trước đó. Ví dụ, trong nghiên cứu.
Kim Stacks

Điểm 6-9 liên quan nhiều hơn đến xu hướng thần kinh của một lập trình viên. Tôi đã đọc ở đâu đó (không thể tìm thấy) rằng một nhà thiết kế sẽ luôn tiếp cận bất kỳ vấn đề nào với giải pháp thiết kế; một nhà tiếp thị với một giải pháp tiếp thị; và một lập trình viên với một giải pháp mã. Phải, "Khi bạn có một cây búa vàng, tất cả những gì bạn thấy là hội chứng móng tay". Điều này đặc biệt rõ ràng ở điểm 6) Giải quyết vấn đề năng suất với nhiều chương trình hơn
Kim Stacks

@MattFenwick xin lỗi nếu bạn nhầm lẫn với tên của tôi. Tôi đã thay đổi tên hiệu của mình sau khi viết câu trả lời này. Tôi thấy rằng nền tảng của bạn là nhiều hơn trong nghiên cứu. Câu trả lời của tôi xuất phát phần lớn từ kinh nghiệm của tôi về việc phát triển các giải pháp để bán hàng. Nhưng tôi chắc chắn, có một số điểm tương đồng nhất định giữa dòng công việc của tôi và của bạn vì cả hai chúng tôi đều làm lập trình.
Kim Stacks

17

Một vài loại bia sẽ giúp tôi làm việc tốt hơn và lâu hơn.


11
Đợi ... bạn có nghĩa là nó không? ( xkcd.com/323 )
Craige

4
@Craige: sau 21 năm kinh nghiệm với việc uống rượu và 20 năm kinh nghiệm làm kỹ sư phần mềm chuyên nghiệp, tôi vẫn đang làm việc trong phần hiệu chuẩn.
Adam Crossland

4
@adam, bạn mất một năm uống rượu để trở thành kỹ sư?

17
Viết mã trong khi uống bia giúp bạn tạo ra các mạng xã hội cực kỳ phổ biến sẽ có giá trị hàng tỷ trong một vài năm. Đó là sự thật, tôi đã thấy điều này trong một bộ phim.
janosrusiczki

1
@Kitsched: Đúng! Đặc biệt là nếu bạn có thiết kế có sẵn của người khác để tách ra.
Mason Wheeler

16

"Vâng, tôi có thể tái cấu trúc mớ hỗn độn khổng lồ gồm 2000 dòng mì spaghetti trong một ngày ..."


13
Ngoài ra: "anh chàng mới [người hoàn toàn không biết gì về phần mềm hoặc cấu trúc mã của nó] không làm gì cả, anh ta có thể sửa nó". Điểm thưởng khi anh chàng thậm chí chưa bao giờ sử dụng ngôn ngữ mà mã được viết.
wildpeaks

16

"Tôi có thể nhận được mà không cần kiểm tra cho điều đó. Thật khó để kiểm tra."

và đó là anh trai độc ác,

"Tôi phải có một bài kiểm tra cho điều đó, bất kể bài kiểm tra đó khó viết hay hiểu như thế nào."


2
Nếu một bài kiểm tra khó viết, bạn có thể không lập trình đúng :)
Merlyn Morgan-Graham

2
@Merylyn Morgan-Graham, hoàn toàn đúng. Nhưng có một số lĩnh vực, chẳng hạn như đồng thời, khó kiểm tra hơn.
Wayne Conrad

1
@Merlyn: Nếu bạn thấy mình đang viết một trình giả lập hướng dẫn để bạn có thể buộc chuyển đổi ngữ cảnh ở đúng nơi, thì có lẽ bạn đã đi quá xa trong thử nghiệm đồng thời. :)
Zan Lynx

1
@Zan: Tôi đồng ý - tại thời điểm bắt buộc, tôi sẽ đẩy lùi các nhà phát triển và cố gắng để họ tái cấu trúc mã của họ và để tôi chèn giả. Tho tôi làm việc chống lại các lang lang cấp cao nơi chúng tôi xem xét Big-O, tối ưu hóa các nút thắt cổ chai, cần suy nghĩ về sự đồng thời chủ yếu là để đảm bảo tính toàn vẹn của dữ liệu thay vì tốc độ thô và vận chuyển (và thường không phải là một trong số đó vì nó chỉ đủ nhanh để thoát khỏi cái hộp).
Merlyn Morgan-Graham

15

Chần chừước tính nhiệm vụ lạc quan là tội lỗi lớn nhất của tôi.

Kéo dài, chống đẩy hoặc kéo tạ (hoặc bất kỳ bài tập thể chất nào khác) cho lần đầu tiên và tâm trạng bi quan trước khi đưa ra ước tính cho lần thứ hai.


Làm rõ ... Bởi, "ước tính nhiệm vụ lạc quan" ý bạn là 'hội chứng dễ dãi' phải không? :)
Evan Plaice

@Evan Plaice - chính xác. Giống như "oh, nó quá tầm thường" và sau đó googling từng chữ cái mã của bạn sau khi bạn bắt đầu mã hóa thực tế.
Nikita Barsukov

13

"Thật dễ dàng hơn nhiều để thực hiện lại chức năng từ đầu hơn là hiểu mã hiện có."


2
Có, c2.com/cgi/wiki?RewriteCodeFromScratch tuyên bố rằng đây là một trong những "Điều bạn không bao giờ nên làm".
David Cary

Làm việc trên nguồn mở giúp xu hướng này. Cá nhân tôi đã nhìn chằm chằm vào các bản vá trước khi lác mắt, sau đó tiếp tục và viết bản thực hiện của riêng tôi chỉ để nhận ra rằng nó gần giống với bản vá (ngay cả sau khi cải thiện / tái cấu trúc mã của tôi). Thật buồn cười khi nó hoạt động.
Evan Plaice

10

Một cám dỗ gây hại ồ ạt mà dự án tôi đang phải chịu là 'Hiệu ứng nền tảng bên trong'. Đây là một cách tiếp cận mà Kiến trúc sư, người đã mất từ ​​lâu, đã đặt ra trí tuệ vô hạn của họ, người đã tạo ra một dự án tạo ra khoảng 20 triệu đô la mỗi năm nhưng tốn 60 triệu để cập nhật và duy trì (rõ ràng là con số lớn nhưng đây là mức độ lớn của vấn đề).


10

NIH - Không được phát minh ở đây

Tôi có một thời gian thực sự khó khăn để cho các giải pháp của bên thứ ba một cơ hội công bằng. Mọi người nên nghi ngờ một cách tự nhiên về các giải pháp của bên thứ ba không phù hợp với họ, nhưng tôi gặp khó khăn khi phải khách quan 100% về nó.

Tiết kiệm thời gian có thể quá lớn đến nỗi ngay cả khi 9 lần trong số 10 giải pháp của bên thứ ba nên tránh, tôi cần phải khách quan, đủ để nhận ra một điều đó sẽ làm việc.


1
Tôi thấy quan điểm của bạn và phải sống với nó mọi lúc. Đôi khi tôi hoàn toàn trái ngược với quan điểm ngược lại đến mức nó xứng đáng nhận được câu trả lời ngay bên cạnh bạn. Tuy nhiên tôi có một thời gian khó tin rằng tôi có thể làm tốt hơn trong một tuần so với một nhóm các chuyên gia về vấn đề đã tồn tại trong nhiều năm. Tất nhiên bạn phải đảm bảo rằng những người đứng sau cho biết bên thứ ba thực sự là chuyên gia. Điều tra tốt về môi trường xung quanh của thành phần đã giúp lựa chọn chính xác giữa việc áp dụng hoặc mã hóa.
Newtopian

1
@Newtopian cách "chính xác" chắc chắn là ở đâu đó ở giữa. Vấn đề của tôi với các thư viện bên thứ ba không phải là liệu tôi có thể làm tốt hơn một nhóm chuyên gia có nhiều tháng hay nhiều tuần không, mà là tôi hiếm khi , có thể không bao giờ tìm thấy một thư viện chính xác là những gì chúng ta cần. Luôn luôn thích nghi để làm, và sau đó tôi thường thấy mình và những người khác dành nhiều thời gian vật lộn với điều đó như viết một giải pháp chính xác những gì chúng ta cần.
Nicole

Bản thân tôi đến từ phía đối diện của quang phổ chỉ tò mò muốn biết làm thế nào bạn cố gắng để đạt được điều này "chỉ ở giữa" nếu có. Cũng tò mò về những gì khiến bạn không muốn sử dụng bên thứ ba trong việc cố gắng hiểu điều gì khiến tôi sử dụng chúng quá mức vì tôi chắc chắn cả hai đều có hại như nhau đối với năng suất.
Newtopian

@Newtopian giải thích của tôi ở trên có ý nghĩa như thế nào tại sao? Nỗ lực của tôi để cố gắng đạt được mục tiêu đơn giản là khách quan hơn khi đánh giá và tìm kiếm giải pháp của bên thứ ba.
Nicole

9

Thiết kế, mã hóa và hoặc kiểm tra đơn vị đối với "dữ liệu mẫu" được cung cấp thay vì phân tích một bản sao của cơ sở dữ liệu thực tế của khách hàng. Thời hạn là ngắn và họ cứ nói rằng nó sẽ đến nhưng nó không bao giờ làm được. Khi nó được triển khai, vụ nổ là ngoạn mục. Thực sự, ai có thể mong đợi một khách hàng có 3 khách hàng mẹ.

Tôi sẽ không bao giờ bắt đầu một dự án nữa cho đến khi tôi có một bản sao của dữ liệu thực .


Nếu chưa có sản phẩm, liệu có dữ liệu nào để sao chép không?
Svish

Nếu không có dữ liệu, luôn có giấy. Hồ sơ công ty sẽ giúp ở đây quá.
burnt_hand

9

Các Có phải là người ngồi một thư viện nào đó ở đâu đó hội chứng.

liên quan chặt chẽ đến

Plugin Focco


2
Tôi dường như luôn có thể tìm thấy thư viện "làm điều đó" Vấn đề của tôi thường khiến chúng hoạt động như quảng cáo. :(
Ben L

Dễ dàng tìm thấy một thư viện - Khó tìm thấy một thư viện có các bài kiểm tra đơn vị tốt được tích hợp sẵn
burnt_hand

8

Chủ nghĩa cầu toàn giết chết; có lẽ các dự án lý do lớn nhất không thành công.


Tôi đoán có thể điều này là đúng, nhưng tôi chưa bao giờ tham gia một dự án thất bại, hoặc thậm chí là muộn, vì lý do này.
Peter ALLenWebb

Phụ thuộc vào cách bạn xác định sự hoàn hảo và mức độ của nó mà bạn đang hướng tới.
Svish


7

Viết lại thay vì tái cấu trúc.


Đồng ý. Nếu bạn sẵn sàng cam kết với số lượng nỗ lực cần thiết để viết lại, thì gần như LUÔN LUÔN để tái cấu trúc. Sẽ vẫn mất nhiều thời gian hơn bạn nghĩ, nhưng bạn đang thực hiện tái cấu trúc tăng dần, phải không? Bạn có thể dừng lại trước khi nó "hoàn hảo".
Peter ALLenWebb

1
như một hệ quả .... viết lại ở nơi khác thay vì bao thanh toán lại. Cơ sở mã của chúng tôi có rất nhiều triển khai khác nhau cho cùng một thứ mà không thể có được bất kỳ loại thống nhất nào.
Newtopian

6

Suy nghĩ phải có một cách tốt hơn để làm điều này. Tôi sẽ không giải quyết cho một cái gì đó có thể là "đủ tốt." Tôi không lấy gì ngoài sự hoàn hảo! Thông thường điều này được tránh bằng cách nói chuyện với những người khác có thể có quan điểm khác về một vấn đề hoặc nhìn thấy giải pháp từ một góc độ khác.


5

Tự động hóa mọi thứ đến mức dành nhiều thời gian hơn cho việc duy trì các công cụ hơn là công việc thực tế.

Giải pháp: giống như với tối ưu hóa mã, trước tiên hãy tìm các tắc nghẽn năng suất và chỉ sau khi chúng được phát hiện, hãy chữa chúng bằng một số tự động hóa tốt .


Tôi có thể đồng ý với nguyên tắc này, nhưng tôi chưa bao giờ thấy tự động hóa quá mức trong thực tế. Tuy nhiên, đó chỉ có thể là kinh nghiệm của tôi .
Peter ALLenWebb

4

Quỷ lập trình của bạn là gì?

Ngoài những gì một số người khác đã đề cập.

Ưu tiên : Bỏ qua công việc ưu tiên cao đối với dự án và làm việc khác trong dự án trước vì, chúng thú vị hơn!

Làm thế nào để bạn tránh chúng?

Với một chút kỷ luật tự hơn. Nghiêm túc, kỷ luật tự giác và động lực bản thân để làm điều đúng giúp tránh hầu hết các "con quỷ".


3

Chúng tôi chưa nhận được sự chấp thuận từ khách hàng nhưng thời hạn đang đến gần, vì vậy đây là một số comps sơ bộ để bạn có thể bắt đầu ...

Sau đó, sau khi bạn hoàn thành việc xây dựng dự án để phù hợp với ...

Ồ, đây là bản sửa đổi của khách hàng, họ chỉ muốn thay đổi một vài điều nhỏ *

(* chức năng chính là hoàn toàn khác nhau)

Sau đó, bạn tiếp tục tái cấu trúc mã gốc của mình, dựa trên mô hình thiếu sót ban đầu thay vì chỉ bắt đầu từ đầu vì bạn đang chịu áp lực của thời hạn ngắn và cho rằng đó là những sửa đổi cuối cùng.

Tôi nhận được một chút bởi điều này tất cả các thời gian. Thật khó để tránh là một nhà phát triển web. Lời khuyên tốt nhất của tôi là thúc đẩy thêm thời gian để bạn có thể thực hiện các thay đổi một cách chính xác.


2
Thực hiện chính sách mà bạn không bắt đầu phát triển cho đến khi bạn có chữ ký của khách hàng.
Ben L

1
@Ben: Nếu chỉ có điều đó nằm dưới sự kiểm soát của chúng tôi!
Sevenseacat
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.