Đáng tiếc nhất thiết kế hoặc quyết định lập trình bạn đã thực hiện? [đóng cửa]


57

Tôi muốn nghe những loại quyết định thiết kế bạn đã thực hiện và làm thế nào chúng phản tác dụng. Vì một quyết định thiết kế tồi, cuối cùng tôi đã phải ủng hộ quyết định tồi tệ đó (tôi cũng có một phần trong đó). Điều này khiến tôi nhận ra rằng một lỗi thiết kế duy nhất có thể ám ảnh bạn mãi mãi. Tôi muốn học hỏi từ những người có kinh nghiệm hơn về loại sai lầm mà họ đã trải qua và họ đã học được gì từ họ.

Tôi chắc chắn rằng điều này sẽ giúp ích rất nhiều cho các lập trình viên khác bằng cách giúp họ không lặp lại những quyết định đó.

Cảm ơn vì đã chia sẽ kinh nghiệm của bạn.


19
dành quá nhiều thời gian cho SO !! ;)
Mitch Wheat

6
@George: có vẻ như liên kết đầu tiên của bạn là về kỹ thuật quá mức, có thể liên quan một cách hữu hình với chủ đề này, nhưng nó không phải là một bản sao. Liên kết thứ hai và cuối cùng liên quan đến lỗi mã hóa và quản lý, không phải là trùng lặp của chủ đề này.
Juliet

1
Điều này có lẽ nên được đưa vào wiki cộng đồng (có một hộp khi bạn chỉnh sửa bài đăng).

3
Tôi ước có một cách để bỏ phiếu để chống lại sự đóng cửa. Downvote gần?
Kieveli

5
Điều gì là sai với tất cả các cử tri đóng cửa? Vì vậy, nếu đó không phải là một CW, hãy để người hỏi nhận được một số phiếu bầu để đưa ra câu hỏi. Tôi thực sự quan tâm đến chủ đề này. Đừng để CW vướng vào câu hỏi chủ quan tốt. Sheesh, SO đầy những tiếng hét "CW NÀY".
syaz

Câu trả lời:


73

Bỏ qua YAGNI , hết lần này đến lần khác ...


22
Đúng với hầu hết, nhưng cũng có những người có thể sử dụng YAGNI ít hơn một chút. Không phải là cực đoan là nơi tốt nhất để được.
Bảng điều khiển 80x24

56

"WIll do it later"
"Later" không bao giờ đến.


8
Sau này không bao giờ đến.

Nó không bao giờ làm.

Người ta đã nói, nếu bạn không có thời gian để làm điều đó ngay bây giờ, điều gì khiến bạn nghĩ rằng bạn sẽ có thời gian để sửa nó sau này?

4
Chúng tôi gọi đây là "lặp đi lặp lại không bao giờ"
NotMe

10
Không có gì là vĩnh viễn như một giải pháp tạm thời.
Dietbuddha

52

C ++, thừa kế ảo nhiều hình kim cương . Bạn có được ý tưởng.


19
Tôi cần tạo một tài khoản mới để nâng cấp lại tài khoản này ...
Kieveli

Có ... những trải nghiệm đau đớn ...
Ed S.

Tôi vừa có một đoạn hồi tưởng xấu xí
Neil N

1
@Jay nó thực sự có vẻ như là một ý tưởng tốt vào thời điểm đó.

6
Tôi không biết điều đó có nghĩa gì, nhưng nghe có vẻ đau đớn +1
The Disintegrator

44

Cấu hình trong một ứng dụng là tốt đẹp. Quá nhiều cấu hình là một cơn ác mộng để sử dụng và bảo trì.


2
Đúng. Thật. Đó là lý tưởng để biến mọi thứ thành cấu hình và nói với ông chủ rằng chúng ta sẽ không bao giờ cần phải thay đổi một dòng mã nữa.

1
Đã từng là người dùng không may mắc kẹt với một trong những hệ thống có thể cấu hình vô cùng đó để quản lý dự án của chúng tôi, tôi chỉ có thể nói, tôi sẽ nâng bạn lên hàng triệu lần nếu tôi có thể.
HLGEM

Khả năng quá mức trong cấu hình thường là do bạn không thể thực thi mã tùy ý khi chạy, do đó bạn cần dự đoán mọi thứ.

Điều này được gọi là «spoftcoding» trái ngược với «mã hóa cứng»
deadalnix

42

Từ một trong những sai lầm của tôi, tôi đã học được rằng bình thường hóa DB không nên bị theo dõi một cách mù quáng. Bạn có thể, và trong một số tình huống, bạn PHẢI làm phẳng các bảng của mình.

Tôi đã kết thúc việc quản lý vô số bảng (thông qua các mô hình) và hiệu suất không tốt như có thể với một chút làm phẳng cho các bảng.


5
Tôi không thể đồng ý nhiều hơn ... Tôi là một kỹ sư phần mềm và chúng tôi được bảo là luôn bình thường hóa. Thật là một thùng rác Chỉ vì các giáo viên chưa cố gắng làm việc với DB thật sự phức tạp và phụ thuộc hiệu suất.

8
Tôi có thể thêm rằng bình thường hóa cũng có thể rất tích cực tất nhiên.

12
Tôi nghĩ rằng các lập trình viên quá nhanh để không chuẩn hóa vì những lý do không thỏa đáng, nhưng đúng vậy, việc tuân thủ các quy tắc chuẩn hóa là một sai lầm lớn. Nói chung, một trong những nỗi thất vọng lớn của tôi trong phát triển phần mềm là khi ai đó nói "Chúng ta phải làm X" và khi tôi chỉ ra tất cả các vấn đề sẽ gây ra, họ trả lời: "Điều đó không liên quan. Tất cả các chuyên gia đều đồng ý rằng X là tốt, do đó, chúng ta phải làm X, luôn luôn, không có ngoại lệ. "

4
Cách tiếp cận bình thường hóa của tôi luôn luôn đơn giản. Tôi luôn bình thường hóa, NHƯNG nếu tôi thấy hiệu suất tăng tiềm năng khi làm phẳng ít - tôi luôn kiểm tra và điểm chuẩn và trong hầu hết các trường hợp, nó phải trả cho việc làm phẳng.
Eimantas

7
Nhưng bình thường hóa là FUN! :) Tôi nghiêm túc, tôi thích thiết kế cấu trúc dữ liệu. Điều tôi muốn nói là trong khi thật dễ dàng để bình thường hóa một lược đồ chuẩn hóa, thì điều ngược lại là KHÔNG đúng. Bạn cần BIẾT các quy tắc trước khi phá vỡ chúng.

36

Sử dụng một char trong cơ sở dữ liệu cho các trạng thái, v.v. lên khá khó hiểu, hoặc chạy ra ngoài (không phải cho các trạng thái, nhưng những thứ khác). Tốt hơn hết là chỉ đưa phiên bản có thể đọc được của con người vào và cũng có trong mô hình Java của bạn (trong trường hợp của tôi) một enum với các giá trị khớp.

Tôi đoán đây là một hình thức tối ưu hóa sớm không cần thiết và mù quáng. Như thể sử dụng một char duy nhất sẽ cứu thế giới những ngày này. Ngoài booleans Y / N trong cơ sở dữ liệu không hỗ trợ booleans / bit.


+1 Chúng tôi vừa có một cuộc họp về chính vấn đề này. Chúng tôi đã đi đến kết luận tương tự.
APC

Điều gì xảy ra nếu khách hàng của bạn làm việc với các chữ viết tắt như vậy và không muốn từ bỏ chúng?

Đối với các hệ thống hiện có, bạn cần phải tương thích (dĩ nhiên tôi vẫn tạo ra một liệt kê Java có giá trị phù hợp, với phương thức <code> MyEnum fromChar (char c) </ code>). Đối với thiết kế mới, chỉ cần không đi đến đó!

Một số cơ sở dữ liệu hỗ trợ enums, vừa nhỏ gọn vừa dễ đọc và cũng phục vụ độc đáo cấm các giá trị bất ngờ. Nếu bạn có thể, hãy sử dụng chúng.
Karl Bartel

2
Hầu như là xấu: Sử dụng loại BIT trong MS SQL Server, trước khi phát hiện ra rằng nó không thể là một phần của chỉ mục.
Finnw

32

Không phát triển Lớp truy cập dữ liệu phù hợp và có sql ở mọi nơi trong mã của tôi, chỉ để có được thứ gì đó "nhanh chóng" hoạt động. Sau này, khi dự án bắt đầu mở rộng và các yêu cầu thay đổi, nó trở thành một cơn ác mộng. Lúc đó tôi không biết DAL là gì.

... rất vui vì tôi đã vượt qua điều đó, mặc dù tôi vẫn thấy các lập trình viên với hơn 20 năm "kinh nghiệm" làm việc này.


16
Không thể nhớ tôi đã đọc nó ở đâu, nhưng có một sự khác biệt giữa 20 năm kinh nghiệm và một năm kinh nghiệm được lặp lại 19 lần.
CaffGeek

@Chad: Đó là một nơi nào đó trong các tác phẩm của Joel Spolsky.

+1: Yup. Và thử tái cấu trúc tất cả logic đó được gắn trong SQL đó ... Cho dù đó là SQL nội tuyến, dạng tự do hoặc procs được lưu trữ. [Yup - Tôi không sợ cuộc chiến thần thánh đó.]
Jim G.

26

Nghĩ rằng tôi có thể là Kiến trúc sư, Nhà phát triển và PM tất cả trong cùng một dự án.

2 tháng ngủ 3 tiếng mỗi đêm đã dạy tôi rằng bạn không thể làm điều đó.


15
Vì vậy, hãy ngừng ngủ thật nhiều! oh, đợi đã ... ý bạn là điều đó KHÔNG bình thường ... ?? Hmm, tôi phải giúp tôi một số người khác trong dự án này ...
AviD

Âm thanh giống như PM-bạn cần được đào tạo với các ước tính :)

21

Kết hợp các lớp Microsoft Foundation (MFC) để viết Java IDE.


3
Ôi. Điều đó sẽ làm cho não của tôi bị tổn thương.
Greg D

2
Đó không phải là một quyết định tồi trong năm 1999. AWT thật xấu xí và chậm chạp.
finnw

Finnw - tốt, ít nhất nó vẫn xấu!
Niklas H

20

Đó không phải quyết định của tôi (tôi đã gia nhập công ty sau đó một chút) nhưng ở đâu đó tôi làm việc đã đưa i18n đi quá xa, bao gồm cả việc dịch tất cả các thông điệp tường trình của họ.

Các kết quả:

  • Đau đớn hơn để thêm đăng nhập mới
  • Thêm chi phí dịch thuật
  • Nhật ký khó đọc hơn sau đó

Úi.


Tôi đang thực hiện một số i18n ở đây và cố gắng tìm hiểu những gì sẽ đến với người dùng và những gì đi vào nhật ký. Tôi muốn tất cả đầu ra hướng tới người dùng có thể bản địa hóa, nhưng tôi muốn các bản ghi vẫn giữ nguyên. Trong quá trình đó, tôi phải tìm ra nhiều ngoại lệ hơn là tôi muốn.
David Thornley

1
Hãy để tôi đoán, người Mỹ của bạn? Và nếu không, bạn chỉ nói tiếng Anh? Sử dụng quốc tế hóa nơi các mục nhật ký mới bằng tiếng Anh, nếu có ngôn ngữ khác, bạn sẽ hiển thị ngôn ngữ người dùng. GỢI Ý: Sử dụng mã lỗi giúp ích ở đây vì điều đó có nghĩa là bạn luôn có thể grep / quét nhật ký bất kể ngôn ngữ nào.

2
@Jacob: Tôi là người Anh, nhưng chỉ nói tiếng Anh. Nhưng điều này là cho một công ty có toàn bộ cơ sở kỹ thuật ở Anh, do đó, có các tệp nhật ký (dành cho mục đích chẩn đoán, không phải thông tin hiển thị của người dùng) trong các ngôn ngữ khác sẽ gây lãng phí tài nguyên. Tôi đồng ý rằng việc sử dụng mã lỗi thay vì văn bản cho phép dịch nhanh chóng - nhưng vẫn còn nhiều việc hơn là chỉ sử dụng một ngôn ngữ để bắt đầu. Đó là vấn đề giảm công việc bằng cách xác định nơi mà thứ gì đó nghe có vẻ thực sự sẽ không cung cấp bất kỳ giá trị quan trọng nào.
Jon Skeet

10
Tôi là người Thụy Điển. Tôi sẽ phải có được thời trung cổ đối với bất kỳ ai thậm chí còn gợi ý rằng mã / nhận xét / nhật ký nên ở bất cứ thứ gì khác ngoài tiếng Anh. Tiếng Anh là ngôn ngữ để sử dụng cho mọi thứ trừ giao diện người dùng. Mọi thứ khác chỉ làm cho mã khó đọc và thảo luận. Sử dụng ngôn ngữ bản địa là vô lý vì bất kỳ khung / thư viện nào khác bạn sử dụng đều bằng tiếng Anh.
jgauffin

1
+1 Tiếng Anh là ngôn ngữ chung của lập trình. Có nó được dịch chỉ là đưa vào một lớp bổ sung, nơi bạn cần càng ít lớp và càng rõ ràng càng tốt.


19

Làm quá nhiều thiết kế . Tạo nhiều sơ đồ UML, đặc biệt là sơ đồ tuần tự cho mọi hoạt động đơn lẻ, phần lớn trong số đó cuối cùng hóa ra vô dụng. Cuối cùng, hóa ra lượng thời gian đáng kể có thể đã tiết kiệm được bằng cách bỏ qua các thiết kế / sơ đồ chi tiết không cần thiết và bắt đầu mã hóa trực tiếp.


Nếu câu hỏi là "Quyết định thiết kế hay lập trình đáng tiếc nhất bạn từng thấy là gì?" trái ngược với những sai lầm mà chúng ta đã tự gây ra, tôi đã đặt "UML" ở gần đầu danh sách của mình. Ngay bên dưới "sổ đăng ký Windows".

2
UML là tốt để thảo luận giữa các thành viên của một nhóm, nhưng khi nói đến thiết kế sau đó thực hiện theo thiết kế, nó luôn kết thúc tồi tệ. Đây là một giấc mơ của một số công ty, nhưng thật ra, phần mềm viết chắc chắn không hoạt động theo cách đó. +1!
deadalnix

17

Khách hàng tin tưởng biết những gì họ muốn và sau đó làm quá nhiều trước khi kiểm tra với họ.


15

Quyết định thiết kế tồi tệ nhất của tôi? Quay trở lại những năm 1980, tôi đã làm việc trong một dự án nơi chúng tôi có ý tưởng sáng tạo để tạo ra một loại mẫu cho màn hình nhập dữ liệu của chúng tôi sẽ được diễn giải vào thời gian chạy. Một quyết định không tồi: nó làm cho màn hình đầu vào dễ dàng thiết kế. Về cơ bản chỉ cần tạo một tệp giống với màn hình nhập dữ liệu, với một số mã đặc biệt để xác định nhãn là gì so với trường đầu vào là gì và để xác định xem trường nhập là alpha hay số. Sau đó, tôi quyết định thêm một số mã đặc biệt hơn vào các tệp này để xác định những xác nhận nào sẽ được thực hiện. Sau đó, tôi đã thêm nhiều mã hơn để cho phép xây dựng màn hình có điều kiện, trường X chỉ được bao gồm khi một số điều kiện là đúng, v.v. Sau đó, tôi đã thêm nhiều mã để thực hiện một số xử lý đơn giản cho các đầu vào. Vân vân. Cuối cùng, chúng tôi đã biến mẫu màn hình của mình thành ngôn ngữ lập trình mới, hoàn chỉnh với các biểu thức, cấu trúc điều khiển và thư viện i / o. Và để làm gì? Chúng tôi đã làm rất nhiều công việc để phát minh lại FORTRAN. Chúng tôi đã có một kệ đầy đủ các trình biên dịch cho các ngôn ngữ được thiết kế tốt hơn và được kiểm tra tốt hơn. Nếu chúng ta dành nhiều nỗ lực đó để xây dựng các sản phẩm mà chúng ta thực sự có chuyên môn, công ty đó vẫn có thể kinh doanh cho đến ngày nay.


Điều đó vừa buồn cười vừa bi thảm :)

Điều đáng buồn là cách tiếp cận này đôi khi là cách tốt nhất để đi. Khách hàng có thể chọn "màn hình có thể được thay đổi tại một thời điểm thông báo" hoặc "màn hình làm mọi thứ kể cả pha trà" nhưng không phải cả hai!

3
Tôi không có gì chống lại việc sử dụng các mẫu hoặc mã chung khác. Sai lầm là trong việc biến một đoạn mã chung thành ngôn ngữ trong ngôn ngữ.

Tôi đã thấy điều này chính xác được thực hiện ... vào năm 2004! Tất cả logic nghiệp vụ được trải đều trong khoảng mười lăm bảng cấu hình với một vài lần thử với các "ngôn ngữ" động được đưa ra để đo lường tốt (xem Quy tắc thứ mười của Greensasta)!

1
Ý bạn không phải là COBOL chứ không phải FORTRAN?
Finnw

15

Quá hăng say áp dụng YAGNI (được gọi là Thiết kế bởi Enumeration trong Cạm bẫy của Object Oriented Development ) trong một môi trường mà bất kỳ người nào hợp lý có thể nói rằng các yêu cầu đã được chắc chắn sẽ thay đổi. Và thay đổi nhiều lần.

Nếu bạn (cứng-) mã hóa mọi thứ chính xác theo yêu cầu hiện tại, trong khi đánh bại bất cứ ai nói rằng "không thể chung chung hơn sao?" với trung tâm mua sắm YAGNI của bạn và sau đó các yêu cầu thay đổi mạnh mẽ (nhưng theo cách có thể dự đoán một cách hợp lý), thì đó có thể là sự khác biệt giữa mất 2 tuần để thích nghi, so với mất 20 phút.

CẬP NHẬT: Để làm rõ, đây là một ví dụ hư cấu không quá xa so với những gì đã xảy ra. Stack Overflow được thiết kế để hỗ trợ huy hiệu, nhưng giả sử lúc đầu họ chỉ có thể nghĩ ra bốn huy hiệu. Chỉ có bốn, một con số nhỏ như vậy, vì vậy họ đã mã hóa cứng hỗ trợ cho chính xác bốn huy hiệu trong toàn bộ logic trong trang web. Trong cơ sở dữ liệu, trong thông tin người dùng, trong tất cả các mã hiển thị. Bởi vì "Ya sẽ không cần" bất kỳ huy hiệu nào mà bạn không thể nghĩ ra, phải không? Giả sử sau đó trang web đi vào hoạt động và mọi người bắt đầu đề xuất các huy hiệu mới. Mỗi huy hiệumất tới hai tuần để thêm, bởi vì có quá nhiều mã hóa cứng để điều chỉnh mọi nơi. Tuy nhiên, "Ya sẽ không cần" bất kỳ huy hiệu nào nhiều hơn danh sách ngày nay, vì vậy không bao giờ có bất kỳ tái cấu trúc nào để hỗ trợ một bộ huy hiệu chung. Một bộ sưu tập chung như vậy có mất thêm thời gian trước không? Không nhiều, nếu có.

YAGNI là một nguyên tắc có giá trị, nhưng nó không nên được sử dụng để bào chữa cho thiết kế kém và mã hóa không phù hợp. Có một sự cân bằng, và với kinh nghiệm, tôi tin rằng tôi đang tiếp cận nó.


1
Có và không, bạn có thể dự đoán nó sẽ thay đổi theo hướng nào không? Tôi có kinh nghiệm về các hệ thống phức tạp đầy đau đớn, điều đó chứng tỏ hoàn toàn không phù hợp cho lần tái sử dụng đầu tiên, không phù hợp với tính tổng quát dự đoán ...
Stewol

^ vâng, tôi thà đối phó với YAGNI còn hơn thế nữa.

Vì vậy, bạn nghĩ rằng bạn nên dành 2 tuần trả trước?
Finnw

4
Ví dụ đó hoàn toàn không phải là YAGNI. DRY là một phần của YAGNI và nếu không có nó, bạn không thể phản hồi để thay đổi.

3
Stephan, ví dụ cho thấy sự lạm dụng và không phù hợp của cụm từ bắt, đó là quan điểm của tôi. DRY (với biến thể OAOO) cũng là một nguyên tắc tốt, nhưng khá riêng biệt: c2.com/cgi/wiki?OaooBalancesYagni . Tuy nhiên, tôi không thể tìm thấy bất cứ điều gì ở bất cứ đâu để hỗ trợ cho tuyên bố của bạn rằng "DRY là một phần của YAGNI." Mù tạt rất hợp với hotdogs, nhưng điều đó không có nghĩa là mù tạt là một phần của hotdog. Nếu bạn có thể làm rõ, có lẽ với tài liệu tham khảo, có lẽ tôi sẽ hiểu.
Bảng điều khiển 80x24

15

Nguồn nhân lực không đủ

Cố gắng làm một cái gì đó đúng và tuyệt vời với những người sai!
Ngay cả khi họ đang ở trong vai trò của một PM bản ngã không cần thiết (điều này khá phổ biến, đặc biệt là ở các công ty lớn, nơi sự bất tài của họ có thể tồn tại trong một thời gian dài hơn).


1
Tôi hiểu nỗi đau của bạn :(

13

Mỗi lần tôi tạo nợ kỹ thuật, viết mã thủ tục, bỏ qua các bài kiểm tra viết, v.v. bởi vì tôi đang gấp rút. Gần như chắc chắn tôi thấy điều này tạo ra nỗi đau cho tôi xuống đường.


13

Sử dụng Dịch vụ tích hợp máy chủ SQL (SSIS).

Tôi không muốn nó trên kẻ thù tồi tệ nhất của tôi.

Sau khi xây dựng một số gói SSIS trong hai tháng qua, chỉ để biết rằng các gói tôi đã phát triển không thể phân phối được và không thể triển khai. Cụ thể trong một môi trường không có web, không có SQL Server được cấp phép.

Đây là một tình huống rất tồi tệ, khi bạn có ít hơn 48 giờ để viết lại các gói SSIS của mình bằng mã .NET POCO thuần túy hoặc bỏ lỡ thời hạn được nhắm mục tiêu.

Điều làm tôi ngạc nhiên là tôi đã có thể viết lại ba gói SSIS (tôi mất hai tháng để thử nghiệm và phát triển), trong vòng 12 giờ bằng mã .NET thuần túy, với Bộ điều hợp OLEDB và Bộ điều chỉnh SQL.

SSIS không thể phân phối và sẽ không thực thi các gói từ máy khách nếu nó không có giấy phép SQL Server được cài đặt trên đó (Cụ thể là DTSPipeline.dll). Điều này sẽ là tuyệt vời để biết lên phía trước. Tôi thấy từ chối trách nhiệm ngay bây giờ (bản in đẹp) trên MSDN. Điều đó không tốt khi bạn có mã ví dụ trên internet chỉ sử dụng mã máy SQL-LICENSED. Về cơ bản, bạn phải tạo một dịch vụ web sẽ nói chuyện với máy chủ SQL của bạn, để chạy các gói SSIS của bạn theo chương trình. Bạn không thể thực thi chúng từ mã .NET thuần túy, trừ khi bạn đã cài đặt giấy phép SQL trên máy thực thi. Làm thế nào là không thực tế? Microsoft có thực sự mong đợi SSIS sẽ được sử dụng từ các máy yêu cầu cài đặt máy chủ SQL không? Thật là một sự lãng phí hoàn toàn trong hai tháng.

Công ty của tôi sẽ không bao giờ sử dụng SSIS nữa vì bản in "gotcha" nhỏ này.


Có lẽ bạn nên tránh sử dụng phần mềm "in đẹp" hoàn toàn! Ví dụ, Talend là một IDE ETL mã nguồn mở.

+1: Yup. Kinh nghiệm phát triển SSIS cũng là một cơn ác mộng. Có lẽ có ít nhất một nửa tá cách tốt hơn để thực hiện ETL.
Jim G.


10

Ném một số quả trứng Phục sinh 'hài hước' vào một số mã tôi đã viết trước khi đi nghỉ 2 tuần. Tôi nghĩ tôi sẽ là người duy nhất đọc nó khi tôi quay lại, nó sẽ khiến tôi cười thầm và sẵn sàng viết lại mã.

Không cần phải nói, ông chủ của tôi đã không ấn tượng khi anh ta xem xét nó khi tôi đi vắng, và anh ta thậm chí còn ít ấn tượng hơn khi một trong những 'quả trứng Phục sinh' liên quan đến khuôn mặt của anh ta hoạt hình vui nhộn trong ASCII.

Ừm ...


1
IMO, đó là "Làm tốt lắm thưa ngài!"

18
Rất gần đây, tôi đã bị nhóm của mình chế giễu vì những thông điệp dấu vết như, "addin 'th'value (p) t'yer bảng!" Tôi nói nhìn xem, họ bắt tôi làm việc trong Talk Like A Pirate Day, họ xứng đáng với những gì họ nhận được.

3
Arr, loggie của bạn đang tìm kiếm một keel'haulin!

10

Sử dụng Chủ đề ASP.Net khi chỉ là một thư mục CSS thông thường sẽ hoàn thành tốt.


Lol ở đó, vâng!

1
Câu trả lời này có thể được rút ngắn thành "Sử dụng ASP.NET"
finnw

Skins rất hữu ích để thiết lập CssClass mặc định.
Tối thiểu

8

Đi theo con đường nhanh để làm cho một số mã hoạt động, thay vì đường đúng (bit chung, nhưng chúng tôi sẽ gọi đó là một sự trừu tượng và do đó là một câu trả lời 'đúng').


7

Công ty của tôi có một mô hình phát triển giống như thác nước, nơi người dùng doanh nghiệp và nhà phân tích kinh doanh của chúng tôi sẽ xác định các yêu cầu cho các dự án. Trong một trong những dự án "lớn" của chúng tôi, chúng tôi đã nhận được rất nhiều yêu cầu và tôi nhận thấy một số yêu cầu chứa chi tiết triển khai , cụ thể là thông tin liên quan đến lược đồ cơ sở dữ liệu của chúng tôi được sử dụng bởi hệ thống kế toán của chúng tôi.

Tôi đã nhận xét với người dùng doanh nghiệp rằng việc triển khai là miền của tôi , không nên chứa trong các yêu cầu. Họ không sẵn lòng thay đổi yêu cầu của mình bởi vì, sau tất cả, họ là KINH DOANH, và nó chỉ có ý nghĩa đối với kế toán để thiết kế phần mềm kế toán. Là một nhà phát triển thấp kém trong cuộc thăm dò ý kiến ​​totem, tôi được trả tiền để làm thay vì suy nghĩ . Nhiều như tôi đã chiến đấu với nó, tôi không thể thuyết phục họ viết lại các yêu cầu - có quá nhiều giấy tờ và băng đỏ xung quanh những thay đổi mà nó quá rắc rối.

Vì vậy, tôi đã cho họ những gì họ yêu cầu. Ít nhất, nó sắp xếp hoạt động , nhưng cơ sở dữ liệu được thiết kế kỳ lạ:

  • Rất nhiều bình thường hóa không cần thiết. Một bản ghi chứa 5 hoặc 10 trường được chia thành 3 hoặc 4 bảng. Tôi có thể giải quyết vấn đề đó, nhưng cá nhân tôi muốn có tất cả các trường 1: 1 được kéo vào một bảng duy nhất.

  • Rất nhiều sự không chuẩn hóa không phù hợp. Chúng tôi có một bảng lưu trữ dữ liệu hóa đơn lưu trữ nhiều hơn dữ liệu hóa đơn. Chúng tôi lưu trữ một số cờ linh tinh trong bảng InvoiceData, ngay cả khi cờ không liên quan về mặt logic với bảng InvoiceData, sao cho mỗi cờ có một giá trị Khóa chính được mã hóa cứng và tất cả các trường khác bị vô hiệu hóa trong bảng InvoiceData. Vì cờ được biểu diễn dưới dạng bản ghi trong bảng, tôi đề nghị kéo cờ vào bảng riêng.

  • Nhiều sự không chuẩn hóa không phù hợp hơn. Một số cờ trên toàn ứng dụng được lưu trữ dưới dạng cột trong các bảng không phù hợp, như việc thay đổi cờ của ứng dụng yêu cầu cập nhật mọi bản ghi trong bảng.

  • Khóa chính chứa siêu dữ liệu, sao cho nếu khóa chính varchar kết thúc bằng "D", chúng tôi sẽ tính toán hóa đơn bằng một bộ giá trị, nếu không, chúng tôi sẽ tính toán nó bằng một bộ khác. Sẽ có ý nghĩa hơn khi kéo siêu dữ liệu này vào một cột riêng hoặc kéo tập hợp các giá trị để tính toán vào một bảng khác.

  • Khóa ngoại thường đi đến nhiều bảng, sao cho khóa ngoại kết thúc bằng "M" có thể liên kết với bảng tài khoản thế chấp của chúng tôi, trong khi khóa ngoại kết thúc bằng "A" có thể liên kết với bảng tài khoản tự động của chúng tôi. Sẽ dễ dàng hơn để chia dữ liệu thành hai bảng, MortageData và AutoInsuranceData.

Tất cả những lời đề nghị của tôi đã bị bắn hạ với nhiều tiếng khóc lóc và nghiến răng. Ứng dụng này hoạt động như thiết kế, và trong khi nó là một quả bóng lớn, tất cả các vụ hack khó chịu, trường hợp đặc biệt và các quy tắc kinh doanh kỳ lạ đều được ghi lại một cách mỉa mai và hài hước trong mã nguồn.


3
Trời ơi, hy vọng CV của bạn thật đẹp và cập nhật cho một lối thoát nhanh chóng trước khi quả bóng bùn lớn chịu thua trọng lực!
Stewol

7

Bám sát công nghệ cũ hơn vì có vẻ quá rắc rối khi để khách hàng của bạn nâng cấp lên phiên bản .NET framework mới, nhưng thực sự sẽ mất nhiều thời gian phát triển hơn để tạo phần mềm vì bạn không thể sử dụng một số thành phần (tiết kiệm thời gian) của phiên bản khung mới hơn.


+1: Yup - Tôi đã ở đó ... Và ngay khi tôi nhận ra rằng n00bs sẽ không nâng cấp, tôi bắt đầu lên kế hoạch trốn thoát đến đồng cỏ xanh hơn.
Jim G.

Và vì vậy tôi đã làm, chỉ cần nghỉ hưu vào tháng tới!
dây leo

6

Trở lại trường đại học, tôi đang thực hiện dự án thiết kế cao cấp của mình. Một anh chàng khác và tôi đang viết một hệ thống theo dõi lỗi dựa trên web. (Không có gì đột phá, nhưng cả hai chúng tôi đều muốn có được một số trải nghiệm web.) Chúng tôi đã làm điều đó với các máy chủ Java và nó hoạt động khá tốt, nhưng vì một số lý do ngớ ngẩn, thay vì chọn sử dụng Ngoại lệ làm cơ chế xử lý lỗi, chúng tôi đã chọn để sử dụng mã lỗi.

Khi chúng tôi trình bày dự án của chúng tôi cho một lớp và một trong các giảng viên đã hỏi không thể tránh khỏi, "Nếu bạn phải làm lại, bạn sẽ làm gì khác?" Tôi ngay lập tức biết câu trả lời: "Tôi sẽ sử dụng ngoại lệ, đó là những gì họ đang ở đó."


Ahhh niềm vui của việc phát minh lại bánh xe! :-) Thật buồn cười.

Tôi gọi nó là sai sót có chủ ý, chỉ để bạn có thể cải thiện nó trong lần lặp lại tiếp theo.
whatnick

2
Các ngoại lệ chỉ để xử lý các ngoại lệ. Quá nhiều người lạm dụng ngoại lệ bằng cách biến mọi thứ thành một ngoại lệ.

@jacob - Tôi đồng ý với tình cảm của bạn rằng các ngoại lệ nên được sử dụng cho những thứ bạn có thể dự đoán (nghĩa là các điều kiện đặc biệt) nhưng từ những gì tôi đã thấy (và không phải là lập trình viên Java) Java dường như sử dụng ngoại lệ cho mọi thứ dưới ánh mặt trời. Vì vậy, việc không sử dụng các ngoại lệ trong mã Java có thể được coi là đi ngược lại dòng chảy của ngôn ngữ.

6

Không phải lựa chọn phương pháp của tôi, nhưng đã tạo XSLT để chuyển đổi tệp XML dựa trên hàng thành báo cáo HTML dựa trên cột.

Nó chỉ hoạt động trong IE, hoàn toàn không thể giải mã cách nó hoạt động. Mỗi khi chúng tôi cần mở rộng nó, vô cùng khó khăn và mất nhiều thời gian.

Cuối cùng, tôi đã thay thế bằng một tập lệnh C # nhỏ bé cũng làm điều tương tự.


Tôi cũng đã làm điều đó. Tôi đã triển khai một công cụ tạo khuôn mẫu email bằng XSL và thấy khó đọc và bảo trì.
TrueWill

Vâng. Thay thế cây tệp XSLT khổng lồ của ai đó bằng một vài hàm VB.NET đơn giản. Rất hài lòng, đặc biệt là khi yêu cầu thay đổi khách hàng tiếp theo xuất hiện sẽ không thể thực hiện được trong XSLT.

Tôi đã thấy rằng hầu hết các lập trình viên coi XSLT là một lựa chọn tồi, đơn giản là vì họ không hiểu nó. Nó cực kỳ hữu ích cho một tập hợp nhỏ các vấn đề, hiệu quả hơn nhiều so với nhiều giải pháp khác. Mặt khác, nó được sử dụng CÁCH quá thường xuyên và chủ yếu KHÔNG phải trong một vấn đề nhỏ đó ...
AviD

6

cố gắng sử dụng tất cả các công nghệ mới (để tìm hiểu công nghệ mới) mặc dù nó thậm chí còn yêu cầu ..


5

Tôi đã không mất đủ thời gian để đánh giá mô hình kinh doanh. Tôi đã làm những gì khách hàng yêu cầu, nhưng 6-12 tháng sau, cả hai chúng tôi đã đi đến kết luận rằng nó nên làm khác đi.


4

Thiết kế mà không có một đặc điểm kỹ thuật.


3
Thông số kỹ thuật luôn luôn có thể

Nên là "Thực hiện giải pháp mà không hỏi khách hàng nếu đó là điều họ muốn"; có nghĩa là bạn thường theo thông số kỹ thuật.
Dietbuddha

3

Tôi đã thực hiện một phần phụ của một ứng dụng theo yêu cầu.

Nó chỉ ra rằng các yêu cầu đã được tăng cường và mạ vàng, và mã của tôi được thiết kế quá mức. Tôi nên thiết kế phần phụ của mình để chỉ hoạt động với những gì tôi đã thêm vào lúc đó, nhưng lên kế hoạch thêm tất cả những thứ khác mà không bao gồm hỗ trợ chung cho nó ngay từ đầu.

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.