Quy tắc tiêu chuẩn mã hóa kỳ lạ nhất mà bạn buộc phải tuân theo là gì? [đóng cửa]


173

Khi tôi hỏi câu hỏi này, tôi gần như luôn luôn chắc chắn là bạn nên có các tiêu chuẩn mã hóa.

Quy tắc tiêu chuẩn mã hóa kỳ lạ nhất mà bạn từng bị buộc phải tuân theo là gì?

Và kỳ lạ nhất tôi có nghĩa là hài hước nhất, hoặc tồi tệ nhất, hoặc chỉ đơn giản là kỳ quặc.

Trong mỗi câu trả lời, vui lòng đề cập đến ngôn ngữ nào, quy mô nhóm của bạn là gì và tác động xấu nào gây ra cho bạn và nhóm của bạn.


19
Sau khi đọc danh sách này đột nhiên tôi cảm thấy như mình đã có một sự nghiệp rất may mắn để tránh bất kỳ điều tào lao tiêu chuẩn bắt buộc này!
matt b

Lần tới khi tôi phỏng vấn xin việc, tôi sẽ duyệt câu hỏi này để phục vụ như một "Cờ đỏ. Chạy!" chỉ tiêu. Mã hóa chống mẫu chuẩn, thực sự.
Stu Thompson

5
Và tôi cảm thấy xấu hổ khi thừa nhận rằng từ rất sớm trong sự nghiệp của mình, tôi đã áp đặt một trong những câu trả lời cho một đội. Tôi rất xin lỗi các bạn.
JasonF nhung

Câu trả lời:


434

Tôi ghét nó khi việc sử dụng nhiều lợi nhuận bị cấm.


26
Điểm được cho là của quy tắc này là gì? Cá nhân tôi không thể xem xét mã cho mã có thể được đọc dễ dàng hơn bằng cách trả lại tiền khác.
Đánh dấu Baker

22
Mặt khác, việc loại bỏ một tùy chọn ngay từ đầu như "if (param == null) return null" có thể làm sạch mã của bạn khá nhiều, để cấm điều này thay vì khuyến khích nó có phần hình sự.
Bill K

39
Giải pháp thay thế: if (! Khởi tạo ()) {RetVal = ERR_BADINIT; goto Returnpoint; } (nhiều mã hơn) Returnpoint: return RetVal; } Vấn đề được giải quyết! ;)
Marc Bernier

9
Cho đến gần đây, nhiều lợi nhuận đã bị cấm. Sau đó, thực tế đây là một phần còn lại từ C, bị lỗi thời bởi C ++ RAII và các chức năng có kích thước nhỏ hơn 15 dòng, đã được tiết lộ. Kể từ đó, như Bravelove: "TỰ DO !!!!" ... :-p ...
paercebal

122
Sự lựa chọn của bạn: nhiều lợi nhuận hoặc nhiều lồng nhau nếu câu lệnh. Tôi sẽ nhận nhiều lợi nhuận.
Lance Fisher

333

thụt ngược. Ví dụ:

    for(int i = 0; i < 10; i++)
        {
myFunc();
        }

và:

    if(something)
        {
// do A
        }
    else
        {
// do B
    }

152
Ôi chúa ơi ... tôi có thể gặp sociopath, người đã nghĩ ra cái đó không? Anh ấy có thể dạy tôi một vài điều về sự khốn khổ.
John Rudy

23
Điều đó không thể đúng được.
Dane

191
Mỗi khi bạn đảo ngược vết lõm, Chúa sẽ giết một nhà phát triển bảo trì.
Chris Vest

14
OMG, bạn đang đùa à?
Andrea Ambu

21
tiết kiệm các byte quý giá ... vô giá, hãy sử dụng nó thật nhiều
Spikolynn

326

Có thể không phải là thứ kỳ quặc nhất mà bạn sẽ nhận được, nhưng tôi thực sự ghét khi tôi phải mở đầu tên bảng cơ sở dữ liệu bằng 'tbl'


5
Đây không phải là ký hiệu của Lynn cho DB sao?
ARKBAN

19
Nó không giống như các biến tiền tố với var?
Brian R. Bondy

26
Theo cách tương tự, tôi ghét khi các cột ID trong cơ sở dữ liệu được thêm tiền tố với tên bảng, như trong bảng sản phẩm sẽ có một cột sản phẩm. Sự dư thừa đôi khi khiến cho việc viết kịch bản mà không có ORM khiến bạn đau đầu hơn mức cần thiết
Andrew Ingram

30
Tôi thực sự thích cột ID được thêm tiền tố với tên bảng. Làm cho các truy vấn viết dễ dàng hơn một chút. Và đối với khóa ngoại bạn có thể có trường khóa ngoại giống như trường khóa.
Craig

38
Trên một lưu ý tương tự, tôi ghét nó khi tên bảng phải là số ít. Bản năng của tôi là đặt tên cho một bảng chứa, giả sử, khách hàng, "Khách hàng", không phải "Khách hàng". Nghe có vẻ nhỏ, cho đến khi bạn nhận ra tất cả những rắc rối bạn sẽ lưu nếu chỉ bạn có thể đặt tên cho bảng của mình là "Giao dịch" thay vì "[Giao dịch]".
Atario

248

Hầu như bất kỳ loại ký hiệu nào.

Vấn đề với ký hiệu của Cameron là nó rất thường bị hiểu lầm. Ý tưởng ban đầu là tiền tố biến để ý nghĩa rõ ràng. Ví dụ:

int appCount = 0; // Number of apples.
int pearCount = 0; // Number of pears.

Nhưng hầu hết mọi người sử dụng nó để xác định loại.

int iAppleCount = 0; // Number of apples.
int iPearCount = 0;  // Number of pears.

Điều này thật khó hiểu, bởi vì mặc dù cả hai số đều là số nguyên, mọi người đều biết, bạn không thể so sánh táo với lê.


71
Xem bài đăng Joel trên Phần mềm này về cách sử dụng ký hiệu Hungary đúng cách có thể giúp giảm lỗi: joelonsoftware.com/articles/Wrong.html
flicken

9
Tất nhiên bằng cách sử dụng C ++ thay vì C, bạn có thể viết mã để trình biên dịch cung cấp cho bạn một lỗi khi so sánh táo với lê.
Andreas Magnusson

5
Vâng, Joel đã làm đúng. Tôi muốn trình biên dịch có thể được thực hiện để thực thi phiên bản của Joel.
Loren Pechtel

9
Không phải đó là "int cntApples = 0; int cntPeas = 0;"? I E. Tiền tố là biến "loại".
Blorgbeard sẽ ra mắt vào

42
Ít nhất cái đầu tiên là chính xác ... mọi thứ có "Apple" trong đó cần phải được thêm tiền tố vào "i". ;)
Julian Charra

240

Không có nhà điều hành ternary cho phép nơi tôi hiện đang làm việc:

int value = (a < b) ? a : b;

... bởi vì không phải ai cũng "hiểu được". Nếu bạn nói với tôi, "Đừng sử dụng nó bởi vì chúng tôi đã phải viết lại chúng khi các cấu trúc trở nên quá phức tạp" (các toán tử ternary lồng nhau, có ai không?), Thì tôi đã hiểu. Nhưng khi bạn nói với tôi rằng một số nhà phát triển không hiểu họ ... ừm ... Chắc chắn rồi.


235
Bởi tất cả mọi người, ông chủ của bạn có nghĩa là chính mình.
Brian R. Bondy

13
Tôi đã từng rơi vào trại này ... Nhưng lớn lên từ đó, và đã học cách yêu người điều hành có điều kiện (khi thích hợp).
John Rudy

22
Nếu bất cứ điều gì, quy tắc nên là "luôn luôn sử dụng toán tử ternary", một toán tử của vẻ đẹp thuần khiết :)
Bobby Jack

16
Tôi thích nó, nhưng lý do tôi nhận được thường xuyên nhất vì không sử dụng cũng giống như trải nghiệm của bạn "mọi người sẽ không hiểu nó". Lập luận của tôi là họ không nên làm việc nếu họ không thể hiểu khái niệm này ...
Aidos

7
Làm thế nào khác bạn có thể khởi tạo một cách có điều kiện một biến không đổi mà không cần viết một hàm hoàn toàn mới (điều này sẽ không giúp ích nhiều cho khả năng đọc). Việc sử dụng const cho các "biến" cục bộ sẽ giúp ích cho việc hiểu và tuân theo mã tốt hơn nhiều so với lệnh cấm của toán tử ternary.
Andreas Magnusson

239

KHÔNG BAO GIỜ xóa bất kỳ mã nào khi thực hiện thay đổi. Chúng tôi đã nói để bình luận tất cả các thay đổi. Hãy nhớ rằng chúng tôi sử dụng kiểm soát nguồn. Chính sách này đã không tồn tại lâu bởi vì các nhà phát triển đã rất phẫn nộ về nó và làm thế nào để làm cho mã không thể đọc được.


3
Tôi thực sự ghét rằng ... có một vài người làm điều đó ở đây (dù đó không phải là tiêu chuẩn hay bất cứ điều gì)
chills42

7
Các quy tắc như vậy là lý do tại sao tôi cảm thấy CẦN phải in mã nguồn mà tôi thừa hưởng từ người khác bằng màu sắc. Tại một thời điểm, một trang không phù hợp với công ty của tôi - nhưng đó là cách duy nhất tôi có thể đọc nó nếu tôi phải in nó. (Chúng tôi đã thừa hưởng rất nhiều theo quy tắc này ...)
John Rudy

3
Âm thanh như một quy tắc phát triển kiểm soát nguồn trước. Hoặc do lập trình viên chỉ kiểm tra một lần một tuần.
Craig

6
Tôi thích đọc những câu trả lời này vì nó làm cho công việc của tôi có vẻ tốt hơn gấp 100 lần.
rjh

2
Cảm thấy với bạn ... chúng tôi đã ở SVN hơn 4 năm, nhưng nhà phát triển cấp cao ghét nó và kiểm tra khoảng một lần mỗi hai tháng, dành ba ngày tiếp theo để phàn nàn về mã bị hỏng: /
Viktor Svub

204

Tôi đã từng làm việc dưới sự chuyên chế của Vua VB hùng mạnh .

Các VB vua là bậc thầy tinh khiết của MS Excel và VBA, cũng như cơ sở dữ liệu ( Do đó họ của ông: Ông chơi với Excel trong khi các nhà phát triển làm việc với các trình biên dịch, và thách thức anh ấy trên cơ sở dữ liệu có thể có những ảnh hưởng bất lợi về nghề nghiệp của bạn ... ).

Tất nhiên, các kỹ năng to lớn của anh đã cho anh một tầm nhìn độc đáo về các vấn đề phát triển và giải pháp quản lý dự án: Mặc dù không chính xác theo tiêu chuẩn mã hóa theo nghĩa nghiêm ngặt nhất, VB King thường xuyên có những ý tưởng mới về "tiêu chuẩn mã hóa" và "thực tiễn tốt nhất" mà anh đã thử (và thường đã thành công) để áp đặt chúng tôi. Ví dụ:

  • Tất cả các mảng C / C ++ sẽ bắt đầu ở chỉ số 1, thay vì 0. Thật vậy, việc sử dụng 0 làm chỉ mục đầu tiên của một mảng đã lỗi thời và đã được thay thế bởi quản lý chỉ số sâu sắc của Visual Basic 6.

  • Tất cả các hàm sẽ trả về mã lỗi: Không có ngoại lệ trong VB6, vậy tại sao chúng ta lại cần chúng? ( tức là trong C ++ )

  • Vì "Tất cả các hàm sẽ trả về mã lỗi" là không thực tế đối với các hàm trả về các loại có ý nghĩa, tất cả các hàm sẽ có mã lỗi là tham số [vào / ra] đầu tiên.

  • Tất cả mã của chúng tôi sẽ kiểm tra mã lỗi ( điều này dẫn đến trường hợp xấu nhất về VBScript nếu tôi đã thấy trong sự nghiệp của mình ... Tất nhiên, vì các mệnh đề "khác" không bao giờ được xử lý, không có lỗi nào thực sự được tìm thấy cho đến khi quá muộn ).

  • Vì chúng tôi đang làm việc với C ++ / COM, bắt đầu từ ngày này, chúng tôi sẽ mã hóa tất cả các chức năng tiện ích DOM của chúng tôi trong Visual Basic.

  • Lỗi ASP 115 là xấu. Vì lý do này, chúng tôi sẽ sử dụng On Error Resume Next trong mã VBScript / ASP của chúng tôi để tránh chúng.

  • XSL-T là một ngôn ngữ hướng đối tượng. Sử dụng thừa kế để giải quyết vấn đề của bạn ( sự ngạc nhiên ngu ngốc gần như đã phá vỡ hàm của tôi mở ra một ngày này ).

  • Các ngoại lệ không được sử dụng, và do đó nên được loại bỏ. Vì lý do này, chúng tôi sẽ bỏ chọn hộp kiểm yêu cầu cuộc gọi hủy trong trường hợp ngoại lệ ( phải mất nhiều ngày để một chuyên gia tìm ra nguyên nhân của tất cả những rò rỉ bộ nhớ đó và anh ta gần như phát điên khi phát hiện ra họ đã sẵn sàng bỏ qua (và ẩn) lưu ý kỹ thuật của anh ấy về việc kiểm tra lại tùy chọn, gửi một số tuần trước đó ).

  • nắm bắt tất cả các ngoại lệ trong giao diện COM của các mô-đun COM của chúng tôi và xử lý chúng một cách im lặng ( theo cách này, thay vì gặp sự cố, một mô-đun sẽ chỉ xuất hiện nhanh hơn ... Sáng bóng! ... Khi chúng tôi sử dụng xử lý lỗi über được mô tả ở trên, chúng tôi thậm chí còn mất một thời gian để hiểu điều gì đang thực sự xảy ra ... Bạn không thể có cả tốc độ và kết quả chính xác, phải không? ).

  • Bắt đầu từ hôm nay, cơ sở mã của chúng tôi sẽ chia thành bốn nhánh. Chúng tôi sẽ quản lý đồng bộ hóa của họ và tích hợp tất cả các sửa lỗi / tiến hóa bằng tay.

Tất cả trừ các mảng C / C ++ , các hàm tiện ích VB DOMXSL-T là ngôn ngữ OOP đã được triển khai bất chấp sự phản đối của chúng tôi. Tất nhiên, theo thời gian, một số đã được phát hiện, ahem , bị hỏng và bị bỏ rơi hoàn toàn.

Tất nhiên, uy tín của Vua VB không bao giờ phải chịu vì điều đó: Trong số các quản lý cấp cao hơn, ông vẫn là một chuyên gia kỹ thuật "súng hàng đầu" ...

Điều này tạo ra một số tác dụng phụ thú vị, như bạn có thể thấy bằng cách theo liên kết Nhận xét tốt nhất trong mã nguồn bạn đã từng gặp là gì?


28
Re: 1-index. Đôi khi bạn chỉ cần đứng lên và nói điều gì đó mạnh mẽ như "thật ngu ngốc và sai lầm". Vẽ một đường thẳng trên cát. Hãy quên việc xoa dịu bản ngã và chỉ nói thôi. Tôi gần như có thể đảm bảo rằng mọi lập trình viên đáng giá khác sẽ ngay lập tức bắt đầu gật đầu và tham gia.
Kirk Strauser

31
@jrista: Nếu BẠN KHÔNG bình luận chính tả văn bản của tôi, vui lòng bỏ qua phần sau ... ... ... ... ... ... ... ... Nếu bạn đang bình luận văn bản của tôi, xin vui lòng xem xét (1) đề xuất sửa chữa, (2) tự sửa lỗi chính tả hoặc (3) Hãy xem xét rằng không phải mọi nhà phát triển trên thế giới (cách xa nó) đều là người nói tiếng Anh bản địa, vì vậy tôi đoán rằng việc viết sai chính tả là điều tối thiểu bạn có thể làm, hoặc chứng minh bạn có thể làm tốt hơn bằng cách gửi cho tôi bản dịch chính xác TRONG PHÁP ... ^ _ ^ ...
paercebal

4
Nếu anh chàng này là ông chủ của tôi, tôi sẽ đi thẳng đến mọi thành viên của ban quản lý cấp cao hơn với một danh sách các khiếu nại được viết và ghi chép đầy đủ và khiến anh ta bị sa thải. -1 vì không có bóng để tự đứng lên.
muusbolla

34
@muusbolla: Ai bảo bạn chúng tôi không phàn nàn? Nó leo thang cho đến khi một phái đoàn gồm hai người (bao gồm cả tôi) đến thẳng CEO để giải thích vấn đề. Nhưng tôi rất tiếc phải nói với bạn rằng có một sự khác biệt giữa một thế giới duy tâm, nơi công lý ngự trị và thế giới thực, nơi một số ông chủ tin rằng "sự quản lý không bao giờ sai, ngay cả khi đó là", và sẽ nghiền nát bất cứ ai sẽ dám mâu thuẫn với giáo điều đó. Món quà lưu niệm hạnh phúc duy nhất tôi có từ thời điểm đó là ngày tôi từ chức, gần ba năm trước, và tôi là một người đàn ông hạnh phúc hơn kể từ ngày đó. Dù sao, nếu đúng, lý do downmod của bạn là khập khiễng. Lấy làm tiếc.
paercebal

7
@paercebal: En générale, c'est Correment écrit, sauf que quelques petits erreurs: «squatch»: ça doit être «squash»; «Một ngày này»: en ce bối cảnh-là, trên eo biển «ngày đó»; «Thủ tục thả giống»: «thủ tục chứng khoán»; «Nghẹn ngào» s'écrit «nghẹn ngào». Aussi, dans les bình luận, vous producisez ° đã đề cập », ce qui doit être« đã đề cập »Mais vraiment, tout ça ne justifie pas une telle plainte. Au contraire, vous y montrez une Excellente maîtrise de l'anglais; hôn mê!
trực giác

131

Quay trở lại những năm 80/90, tôi làm việc cho một công ty giả lập máy bay sử dụng FORTRAN. Trình biên dịch FORTRAN của chúng tôi có giới hạn 8 ký tự cho các tên biến. Các tiêu chuẩn mã hóa của công ty dành riêng ba trong số chúng cho thông tin kiểu ký hiệu Hungary. Vì vậy, chúng tôi đã phải thử và tạo các tên biến có ý nghĩa chỉ với 5 ký tự!


17
Sang trọng: chúng tôi chỉ có 6 nhân vật; gói có tên bắt đầu bằng g; Các chức năng nội bộ đều bắt đầu gk; có các trình điều khiển máy trạm với các mã như 0p (vì vậy gk0p là khởi đầu), để lại cho chúng ta hai ký tự cho phần còn lại của tên Fortran. gk0paa, gk0pab, ...
Jonathan Leffler

103
"Khi tôi bằng tuổi bạn, chúng tôi chỉ có 2 nhân vật! Và nó không phân biệt chữ hoa chữ thường!"
pookleblinky

53
Chúng tôi thường phải thức dậy lúc 2 giờ sáng, 3 giờ trước khi đi ngủ, sau đó viết trình biên dịch của riêng mình và trả cho công ty để có được đặc quyền đi làm. Chúng tôi chỉ được phép viết chữ A cho tên biến của chúng tôi. Sau đó, ông chủ của chúng tôi sẽ xóa mã của chúng tôi và nhảy vào danh sách của chúng tôi hát hallelujah.
David Arno

12
"50 số nhận dạng có thể phải là đủ cho bất cứ ai": p
Chris Vest

5
Heck, trình thông dịch BASIC mà chúng tôi đã làm việc trong một thời gian dài trước đây có tên biến hai ký tự. Tại sao lại phàn nàn về 5?
David Thornley

107

Tôi đã làm việc tại một nơi có sự hợp nhất giữa 2 công ty. Người 'thống trị' có một máy chủ chính được viết bằng K & R C (tức là tiền ANSI). Họ đã buộc các nhóm Java (từ cả hai văn phòng - có lẽ tổng cộng 20 nhà phát triển) sử dụng định dạng này, trong đó vui vẻ bỏ qua 2 trụ cột của "cuộc tranh luận cú đúp" và đi thẳng đến điên rồ:

if ( x == y ) 
    {
    System.out.println("this is painful");
    x = 0;
    y++;
    }

18
Tôi nghĩ rằng việc duy trì sự phân biệt thị giác lớn hơn giữa C và Java sẽ giúp việc chuyển đổi dễ dàng hơn. (+1 cho "và đi thẳng đến điên rồ.")
Jeffrey L Whitledge

4
Trông giống như phong cách Whitesmiths đã được Petzold sử dụng trong 'Lập trình Windows' ban đầu! ;)
Bobby Jack

7
Tôi thấy đây là phong cách niềng răng thông minh nhất. Thật không may, hầu hết mọi người không sử dụng nó. Nếu niềng răng có ý nghĩa ngữ nghĩa, chúng nên được đối xử như vậy, không bị kẹt ở cuối dòng và bỏ qua.
Ryan Lundy

7
@Kyralessa. Tôi không đồng ý ... Tôi không biết nếu niềng răng có ý nghĩa ngữ nghĩa nhưng chắc chắn chúng có thể ảnh hưởng đến việc khớp mẫu và cảm giác không gian. IMO, phiên bản này mất hoàn toàn. ví dụ: tôi muốn dấu trang của mình chọc ra ngoài cuốn sách, không bị lộn xộn với các trang.
Michael Easter

6
Đây thực sự là phong cách ưa thích của tôi, nhưng mọi thứ trên thế giới (đặc biệt là Visual Studio) mặc định cho các chế độ khác, vì vậy tôi đã từ bỏ. Tại sao tôi thích nó? Các dấu ngoặc nhọn "một phần" của mã chứa - chúng buộc nó phải "trông giống như" một câu lệnh duy nhất nếu, đó là những gì nó mong đợi.
Atario

104

Cấm

while (true) {

Được phép:

for (;;) {

4
Những người khác đã lập luận rằng đó for (;;) {là một thành ngữ C cho lần đầu tiên.
Robert P

69
Nếu tôi hiểu chính xác những nụ cười hiện đại, mới mẻ, tiêu chuẩn này đang khiến người nghèo, làm việc quá sức vì tuyên bố khóc!
Ben Trống

15
Đây là một quy tắc thực tế ở đây. VC6 đưa ra cảnh báo về trình biên dịch về while (true), nhưng không phải về for (;;). Nếu không thì chúng tương đương. Vì vậy, chúng tôi chọn một cảnh báo miễn phí.
user9876

22
Bjarne S. đã nói trong cuốn sách của mình, "vì (;;) nên được đọc mãi mãi". Nếu nó đủ tốt cho người tạo ra C ++, thì nó sẽ đủ tốt cho bạn. :-)
Frank Krueger

58
Trong chương trình C đầu tiên tôi làm việc, một người nào đó đã thêm #define bao giờ (;;) để bạn có thể nói "mãi mãi {...}"
James Curran

101

một người bạn của tôi - chúng tôi sẽ gọi anh ấy là CodeMonkey - đã nhận được công việc đầu tiên của mình ở trường đại học [ nhiều năm trước] khi làm phát triển nội bộ ở COBOL. Chương trình đầu tiên của anh đã bị từ chối vì 'không tuân thủ các tiêu chuẩn của chúng tôi' vì nó đã sử dụng ... [rùng mình!] Các câu lệnh IF lồng nhau

các tiêu chuẩn mã hóa đã cấm sử dụng các câu lệnh IF lồng nhau

Bây giờ, CodeMonkey không hề ngại ngùng và chắc chắn về khả năng của mình, vì vậy anh ấy đã kiên trì hỏi mọi người về chuỗi và xuống lối đi tại sao quy tắc này tồn tại. Hầu hết tuyên bố họ không biết, một số người bịa ra về 'khả năng đọc' và cuối cùng, một người đã nhớ lý do ban đầu: phiên bản đầu tiên của trình biên dịch COBOL mà họ sử dụng có lỗi và không xử lý chính xác các câu lệnh IF lồng nhau.

Lỗi trình biên dịch này, tất nhiên, đã được sửa trong ít nhất một thập kỷ, nhưng không ai thách thức các tiêu chuẩn . [baaa!]

CodeMonkey đã thành công trong việc thay đổi các tiêu chuẩn - cuối cùng!


7
Steven, điều này gợi cho tôi câu chuyện thí nghiệm khỉ: o) freekvermeulen.blogspot.com/2008/08/ Lời
Nick Dandoulakis

5
@ [Nick D]: vâng, tôi cũng vậy - do đó tên mã là "CodeMonkey" ;-)
Steven A. Lowe


Lý do có thể đã sai, nhưng vẫn tốt để tránh ifs lồng nhau - c2.com/cgi/wiki?ArrowAntiPotype
manojlds

97

Sau khi làm việc trong một dự án, nơi gạch dưới bị cấm. Và tôi có nghĩa là hoàn toàn bị cấm. Vì vậy, trong ứng dụng ac # winforms, bất cứ khi nào chúng tôi thêm trình xử lý sự kiện mới (ví dụ: cho một nút), chúng tôi sẽ phải đổi tên tên phương thức mặc định từ buttonName_Click () thành một cái gì đó khác, chỉ để thỏa mãn cái tôi của anh chàng đã viết mã tiêu chuẩn. Cho đến hôm nay tôi không biết những gì anh ấy đã chống lại gạch dưới khiêm tốn


23
Có lẽ _ đã bị hỏng trên bàn phím của anh ấy;)
Roman Plášil

139
buttonNameUnderscoreClick ()
vitule

9
Có tác dụng phụ đáng tiếc trong việc ngăn chặn việc sử dụng FILELINE để gỡ lỗi. Và #if __cplusplus extern "C" trong các tệp tiêu đề. Và các loại tích phân trong stdint.h. Và size_t.
Steve Jessop

8
Thật tốt, đây là C #
cấu hình

4
Tôi thực sự không khuyến khích dấu gạch dưới (mặc dù không có trong trường hợp OP được liệt kê ở trên. Đó là thêm hai tổ hợp phím (shift + _) mà tôi không muốn đặt cho tôi khi trường hợp pascal hoặc lạc đà sẽ hoạt động tốt.
TGnat

92

Hoàn toàn vô dụng quy ước đặt tên cơ sở dữ liệu. Mỗi tên bảng phải bắt đầu bằng một số. Các con số cho thấy loại dữ liệu nào trong bảng.

  • 0: dữ liệu được sử dụng ở mọi nơi
  • 1: dữ liệu chỉ được sử dụng bởi một mô-đun nhất định
  • 2: bảng tra cứu
  • 3: lịch, trò chuyện và thư
  • 4: đăng nhập

Điều này làm cho nó khó tìm thấy một bảng nếu bạn chỉ biết chữ cái đầu tiên của tên của nó. Ngoài ra - vì đây là cơ sở dữ liệu mssql - chúng tôi phải bao quanh các tablename với dấu ngoặc vuông ở mọi nơi.

-- doesn't work
select * from 0examples;

-- does work
select * from [0examples];

65
Tôi xin lỗi, rất xin lỗi ...
Kirk Strauser

1
Wow - tốt. Tôi đoán sử dụng Letters đã ra khỏi câu hỏi? Không phải đó cũng là một ý tưởng hay nhưng ít nhất bạn không phải trích dẫn tất cả các tên bảng.
Mark Britsham

tâm trí boggling ... ai đã nghĩ ra điều đó? các dba?
dotjoe

90

Chúng tôi đang thực hiện một dự án C ++ và trưởng nhóm là một anh chàng Pascal.

Vì vậy, chúng tôi đã có một tiêu chuẩn mã hóa bao gồm tệp để xác định lại tất cả cú pháp C và C ++ phiền phức đó:

#define BEGIN {
#define END }

nhưng xin chờ chút nữa!

#define ENDIF }
#define CASE switch

vv Thật khó để nhớ sau tất cả thời gian này.

Điều này đã lấy những gì có thể là mã C ++ hoàn toàn có thể đọc được và khiến nó trở nên bất khả thi đối với bất kỳ ai ngoại trừ nhóm trưởng.

Chúng tôi cũng đã phải sử dụng ký hiệu Hungary ngược, tức là

MyClass *class_pt  // pt = pointer to type

UINT32 maxHops_u   // u = uint32

Mặc dù kỳ lạ, tôi đã phát triển như thế này.


22
Xây dựng mã không thể
nhầm lẫn

2
Ký hiệu Hungary được thực hiện đúng là được. Làm sai rồi ... ick. Một hệ thống loại thích hợp đánh bại cả hai.
Thelema

5
Bạn biết đấy, tôi nghĩ rằng tôi với bạn về điều đó. Các mụn cóc của Cameron gần như không quá phản cảm khi giải quyết vào cuối như thế.
TED

haha đưa tôi trở lại những ngày khi tôi chuyển từ Pascal sang C ++ (khoảng 16 năm trước). Mỗi lần tôi nhìn thấy một {Tôi phải tự nhủ "{có nghĩa là BẮT ĐẦU". Ít nhất với tôi nó chỉ là trong đầu của tôi.
thomasrutter

6
Khi tôi làm việc trong bộ phận hỗ trợ MS VC ++, chúng tôi đã có một số khách hàng gửi mã repro được viết như thế này. Phải mất một thời gian chúng tôi mới nhận ra nó thực sự có trong C ++ (chúng không bao gồm #defines).
JBRWilkinson

88

Tại một công việc trước đây:

  • Các bảng "Bình thường" bắt đầu bằng T_
  • Các bảng "Hệ thống" (thường là tra cứu) bắt đầu bằng TS_ (trừ khi chúng không hoạt động vì ai đó không cảm thấy như ngày hôm đó)
  • Các bảng tham chiếu chéo bắt đầu bằng TSX_
  • Tất cả các tên trường bắt đầu bằng F_

Vâng đúng vậy. Tất cả các lĩnh vực, trong mỗi bảng duy nhất. Để chúng ta có thể nói đó là một lĩnh vực.


và bạn không có tiền tố đặc biệt cho các trường khóa chính ???
Czimi

2
@Czimi: Tôi quên đề cập đến điều đó. Mỗi bảng có một trường gọi là FI_ID được sử dụng làm khóa chính.
Jeromy Irvine

31
Holy sh ... T_guy, người đã phát minh ra cơn ác mộng này nên bị giết bằng một khẩu súng ngắn và gửi đến TSX_hell.
Serge Skoblikov

3
Chúng tôi đã có tbl và fld cho tất cả các trường và bảng. Hoàn toàn vô dụng ...
cấu hình

5
@configurator: Bạn đã cài đặt tbl trực tuyến cho tất cả các trường :-)))
Timwi

84

Một người bạn của tôi gặp phải quy tắc này khi làm việc tại một công việc của chính phủ. Việc sử dụng ++ (trước hoặc sau) đã bị cấm hoàn toàn. Lý do: Trình biên dịch khác nhau có thể giải thích nó khác nhau.


5
Chà, tại thời điểm đó bạn cũng có thể từ bỏ, phải không?
Kirk Strauser

90
Một số người đã bị cắn bởi không hiểu sự khác biệt giữa tiền tố và tiền tố, lỗi trình biên dịch, sau đó gây ra nó cho người khác, tôi nghĩ.
Bernard

5
Thật ra, họ đã đúng, trong một số trường hợp. Banning có vẻ một chút trên đầu mặc dù. Lấy ví dụ, dòng: a [i] = i ++; tôi có thể được tăng lên trước khi nó được sử dụng để lập chỉ mục a hoặc sau đó. Ngôn ngữ không định nghĩa điều này.
TED

9
Anh ấy đúng - thứ tự các hoạt động không được đảm bảo khi bạn sử dụng cùng một biến ở nơi khác trong câu lệnh. Chỉ cần cấm mã có khả năng mơ hồ, mặc dù không phải tất cả các sử dụng của nó!
Loren Pechtel

2
Cũng có thể cấm =vì nó có thể được sử dụng để gây ra hành vi không xác định.
cấu hình

81

Một nửa của đội ủng hộ thụt bốn không gian; nửa còn lại ủng hộ thụt hai không gian.

Như bạn có thể đoán, tiêu chuẩn mã hóa bắt buộc ba, để "xúc phạm tất cả như nhau" (một trích dẫn trực tiếp).


42
Đó là lý do tại sao nhận dạng tab là rất lớn. Mọi người đều có thể thay đổi kích thước trong trình chỉnh sửa của mình;)
xardias

41
Vâng, thụt tab là tuyệt vời ... cho đến khi bạn thực sự mở tệp của người khác và thấy mọi thứ bị sai lệch vì không gian bị trộn lẫn ở nơi họ không nên hoặc không bị lẫn vào nơi họ nên có. Sau đó, bạn tự động định dạng lại, và kiểm soát phiên bản khác nhau trở nên xấu xí. Ừ
Alan Hensel

41
đó là lý do tại sao bạn chỉ nên sử dụng các tab để thụt lề và chỉ các khoảng trắng để căn chỉnh và không bao giờ kết thúc. và nếu bạn sẽ thay đổi khoảng trắng trong một tệp, thì đó cần phải là thay đổi duy nhất bạn thực hiện cho lần đăng ký cụ thể đó.
joh6nn

16
... Và điều đó không bao giờ hoạt động. : P
Robert P

10
Để "xúc phạm tất cả như nhau" ... Tôi thích nó. Tôi sẽ phải nhớ điều này vào lần tới khi tôi bị cuốn vào một cuộc chiến tiêu chuẩn hóa thụt đầu dòng.
Michael Burr

74

Không thể sử dụng Reflection vì người quản lý cho rằng nó liên quan đến quá nhiều 'ma thuật'.


10
Vâng, ma thuật rất khó để duy trì, mặc dù vậy;) LOL, mặc dù.
Rik

19
Đó có lẽ là quy tắc đúng, vì những lý do sai lầm :)
Bobby Jack

71
cho 'ma thuật' đọc hiệu suất giết chết mã ác mộng tối nghĩa không thể nhầm lẫn. Anh ấy đúng.
gbjbaanb

4
Tôi đoán bạn không được phép viết mã .Net sau đó. Rốt cuộc, rất nhiều cách thức khung thực hiện là thông qua sự phản ánh.
NotMe

5
Đả đảo những pháp sư đó !! Luôn luôn ở xung quanh, với phép thuật của họ , đánh cắp công việc của chúng tôi, quyến rũ phụ nữ của chúng tôi và làm hư hỏng trẻ em của chúng tôi!
ZJR

71

Một thứ kỳ lạ nhất mà tôi có, và một thứ khiến tôi mất khá nhiều thời gian để lật đổ, là khi chủ sở hữu công ty chúng tôi yêu cầu sản phẩm mới của chúng tôi chỉ là IE. Nếu nó có thể hoạt động trên FireFox, điều đó không sao, nhưng nó chỉ là IE.

Điều này có vẻ không quá xa lạ, ngoại trừ một lỗ hổng nhỏ. Tất cả các phần mềm dành cho gói phần mềm máy chủ bespoke, chạy trên Linux và tất cả các hộp khách mà khách hàng của chúng tôi mua là Linux. Thiếu cố gắng tìm ra cách để Wine (trong những ngày đó, rất không đáng tin cậy) chạy và chạy trên tất cả các hộp này và xem liệu chúng ta có thể chạy IE và huấn luyện quản trị viên của họ cách gỡ lỗi các vấn đề về Rượu không, điều đó đơn giản là không thể để đáp ứng yêu cầu của chủ sở hữu. Vấn đề là anh ta đang thực hiện thiết kế Web và đơn giản là không biết cách làm cho các trang web tuân thủ FireFox.

Có lẽ bạn sẽ không sốc khi biết rằng công ty chúng tôi đã phá sản.


1
Tôi sẽ nói, đó là khá lạ.
Brad Gilbert

14
Ba cổ vũ cho chủ nghĩa tư bản!
starblue

46
Yay cho sự sống còn của kẻ mạnh nhất ... anh chàng này không xứng đáng được điều hành công việc kinh doanh phần mềm của riêng mình.
Mark Britsham

10
Câu cuối cùng thật tuyệt. Làm thế nào một người có thể được thực hiện nghiêm túc khi họ đưa ra quyết định như thế này?
Ông Shickadance

54

Sử dụng tên định danh được đánh số chung

Trong công việc hiện tại của tôi, chúng tôi có hai quy tắc thực sự có nghĩa là:

Quy tắc 1: Mỗi lần chúng tôi tạo một trường mới trong bảng cơ sở dữ liệu, chúng tôi phải thêm các trường dự trữ bổ sung để sử dụng trong tương lai. Các trường dự trữ này được đánh số (vì không ai biết họ sẽ giữ dữ liệu nào vào một ngày nào đó) Lần tới khi chúng tôi cần một trường mới, trước tiên chúng tôi sẽ tìm trường dự trữ chưa sử dụng.

Vì vậy, chúng tôi kết thúc với việc customer.reserve_field_14chứa địa chỉ e-mail của khách hàng.

Vào một ngày nọ, ông chủ của chúng tôi nghĩ về việc giới thiệu các bảng dự trữ , nhưng may mắn thay, chúng tôi có thể thuyết phục anh ta không làm điều đó.

Quy tắc 2: Một trong những sản phẩm của chúng tôi được viết bằng VB6 và VB6 có giới hạn tổng số tên định danh khác nhau và vì mã rất lớn, chúng tôi liên tục chạy vào giới hạn này. Là một "giải pháp", tất cả các tên biến cục bộ được đánh số:

  • Lvarlong1
  • Lvarlong2
  • Lvarstr1
  • ...

Mặc dù điều đó có hiệu quả phá vỡ giới hạn định danh, hai quy tắc này kết hợp lại dẫn đến mã đẹp như thế này:

...

If Lvarbool1 Then
  Lvarbool2 = True
End If

If Lvarbool2 Or Lvarstr1 <> Lvarstr5 Then
  db.Execute("DELETE FROM customer WHERE " _ 
      & "reserve_field_12 = '" & Lvarstr1 & "'")
End If

...

Bạn có thể tưởng tượng việc sửa mã cũ hoặc người khác khó đến mức nào ...

Cập nhật mới nhất: Bây giờ chúng tôi cũng đang sử dụng "thủ tục dự trữ" cho các thành viên tư nhân:

Private Sub LSub1(Lvarlong1 As Long, Lvarstr1 As String)
  If Lvarlong1 >= 0 Then 
    Lvarbool1 = LFunc1(Lvarstr1)
  Else
    Lvarbool1 = LFunc6()
  End If
  If Lvarbool1 Then
    LSub4 Lvarstr1
  End If
End Sub

EDIT: Có vẻ như mẫu mã này đang ngày càng trở nên phổ biến. Xem bài này Hàng ngày WTF để tìm hiểu thêm: Loạn thị :)


10
Không đua đâu. Tôi cá là phải mất mãi mãi để vượt qua và loại bỏ tất cả những lần tiêm SQL đó. ;-)
Kirk Strauser

Đó là tà ác thuần túy. Tôi chắc chắn rằng sếp / TL của bạn là một cấp trên chỉ chờ cơ hội của mình.
Manuel Ferreria

5
omg, ai sẽ đưa ra những quy tắc như thế này ??? quan trọng nhất: làm thế quái nào mà nhóm của bạn quản lý để viết mã ??
hasen

2
Tôi nghĩ rằng anh ta có nghĩa là bạn sẽ chọn tất cả các trường theo mặc định để bạn có tất cả các trường 'dự trữ', mà không cần chỉ định tất cả các trường.
Ông Shickadance

2
maibe bạn có thể sử dụng tính năng chuẩn bị mã, trong đó bạn sẽ viết mã bằng cách sử dụng tên biến có ý nghĩa và sau đó thay thế bằng "tên chính xác" trước khi biên dịch một số phần tử như '% s / email / reserved_field_12 / g';)
João Portela

53

Quay lại những ngày C ++ của tôi, chúng tôi không được phép sử dụng ==,> =, <=, &&, v.v., đã có macro cho ...

if (bob EQ 7 AND alice LEQ 10)
{
   // blah
}

điều này rõ ràng là để đối phó với "sự phân công ngẫu nhiên cũ trong lỗi có điều kiện", tuy nhiên chúng tôi cũng có quy tắc "đặt hằng số trước các biến", vì vậy

if (NULL EQ ptr); //ok
if (ptr EQ NULL); //not ok

Chỉ cần nhớ rằng, tiêu chuẩn mã hóa đơn giản nhất tôi từng nghe là "Viết mã như thể người duy trì tiếp theo là một kẻ tâm thần độc ác biết bạn sống ở đâu".


1
rofl .. viết fortran bằng C.
Robert Paulson

tôi vẫn làm null == biến trong c #. Tôi biết tôi không cần phải lo lắng về điều đó, nhưng tôi không thể tự giúp mình. nếu tôi nhìn nó theo cách khác tôi cảm thấy lo lắng. thói quen cũ khó thay đổi.
Troy Howard

Người cuối cùng về kẻ thái nhân cách sẽ khiến một số người thiệt mạng gần như ngay lập tức.
Ông Shickadance

31
+1 cho kẻ tâm thần độc ác.
rcollyer

Khi đăng mã lên các diễn đàn, đôi khi tôi sẽ sử dụng những thứ như LT và SHL, để tránh việc các nhà khai thác bị biến thành HTML.
supercat

45

Ký hiệu Hungary nói chung.


11
Chà, tôi thích H / N để kiểm soát trên một trang. Dễ dàng hơn nhiều để tìm thấy tất cả các điều khiển hộp văn bản trong trình đơn thả xuống IntelliSense khi tất cả những gì tôi phải tìm là txtFooBar.
cciotti

20
Ký hiệu HUngarian không phải là xấu, chỉ cần được sử dụng đúng cách joelonsoftware.com/articles/Wrong.html
Czimi

1
Tôi sẽ thừa nhận liên quan đến kiểm soát. Sau đó, ký hiệu Hungary có thể hữu ích. Nói chung, tôi nghĩ rằng ký hiệu Hungary đã lỗi thời và thường bị sử dụng sai. Nó đã trôi dạt từ ý định ban đầu của nó.
vfilby

9
Bị lạm dụng khủng khiếp, vâng. Sai, không.
Loren Pechtel

2
Rất nhiều người bắt đầu một tên giao diện với I, IEnumerable, IList ... Trong .Net framework al các giao diện bắt đầu bằng một I.
tuinstoel 15/03/2016

43

Tôi đã có rất nhiều quy tắc ngu ngốc , nhưng không nhiều điều mà tôi cho là hết sức kỳ lạ.

Điều ngớ ngẩn nhất là trong một công việc của NASA mà tôi đã làm việc vào đầu những năm 90. Đây là một công việc khổng lồ, với hơn 100 nhà phát triển trên đó. Các nhà phát triển có kinh nghiệm đã viết các tiêu chuẩn mã hóa đã quyết định rằng mọi tệp nguồn nên bắt đầu bằng một từ viết tắt gồm bốn chữ cái và chữ cái đầu tiên phải viết tắt cho nhóm chịu trách nhiệm về tệp. Đây có lẽ là một ý tưởng tuyệt vời cho các dự án FORTRAN 77 cũ mà họ đã từng sử dụng.

Tuy nhiên, đây là một dự án Ada , với cấu trúc thư viện phân cấp đẹp, nên không có ý nghĩa gì cả. Mỗi thư mục chứa đầy các tệp bắt đầu bằng cùng một chữ cái, theo sau là 3 ký tự vô nghĩa khác, dấu gạch dưới và sau đó là một phần của tên tệp quan trọng. Tất cả các gói Ada phải bắt đầu với mụn cóc năm ký tự này. Các điều khoản "sử dụng" của Ada cũng không được phép (có thể là điều tốt trong các trường hợp thông thường), do đó, điều đó có nghĩa là bất kỳ tham chiếu nào đến bất kỳ định danh nào không phải là địa phương của tệp nguồn đó cũng phải bao gồm cả mụn cóc vô dụng này. Có lẽ đã có một cuộc nổi dậy về điều này, nhưng toàn bộ dự án đã được các lập trình viên cơ sở và mới từ các nhân viên mới vào đại học (bản thân tôi là người đến sau).

Một tuyên bố chuyển nhượng điển hình (đã dài dòng trong Ada) cuối cùng sẽ trông giống như thế này:

NABC_The_Package_Name.X := NABC_The_Package_Name.X + 
  CXYZ_Some_Other_Package_Name.Delta_X;

May mắn thay, ít nhất họ đã giác ngộ đủ để cho phép chúng tôi hơn 80 cột! Tuy nhiên, mụn cóc ở cơ sở đã bị ghét đến mức nó trở thành mã soạn sẵn ở đầu các tệp nguồn của mọi người để sử dụng "đổi tên" của Ada để loại bỏ mụn cóc. Sẽ có một lần đổi tên cho mỗi gói đã nhập ("đã rút"). Như thế này:

package Package_Name renames NABC_Package_Name;
package Some_Other_Package_Name renames CXYZ_Some_Other_Package_Name;
--// Repeated in this vein for an average of 10 lines or so

Những gì sáng tạo hơn trong số chúng ta đã làm là cố gắng sử dụng mụn cóc để tạo ra một tên gói (hoặc ngớ ngẩn) nhạy cảm. (Tôi biết bạn đang nghĩ gì, nhưng những người thám hiểm không được phép và xấu hổ với bạn! Điều đó thật kinh tởm). Ví dụ, tôi thuộc nhóm mã C ommon và tôi cần tạo một gói để giao tiếp với nhóm W orkstation. Sau một buổi động não với anh chàng Workstation, chúng tôi quyết định đặt tên cho các gói của chúng tôi để ai đó cần cả hai sẽ phải viết:

with CANT_Interface_Package;
with WONT_Interface_Package;

1
Với tất cả những gì và NASA vẫn không thể tìm ra liệu để tính toán bằng km hoặc dặm ...
NotMe

16
Chết tiệt, và tôi thực sự nghĩ rằng bạn sẽ đi ra ngoài và sử dụng quy ước đặt tên gói CUN * _ và W * NK_. Xin lỗi, tôi có các tourette cháy chậm, bùng nổ, văn bản. Nhưng của bạn đã rất nhiều, rất nhiều, hài hước hơn!
defmeta

41

Khi tôi bắt đầu làm việc tại một nơi và bắt đầu nhập mã của mình vào kiểm soát nguồn, sếp của tôi đột nhiên đến gặp tôi và yêu cầu tôi ngừng cam kết rất nhiều. Anh ấy nói với tôi rằng không nên làm hơn 1 lần cam kết mỗi ngày cho một nhà phát triển vì nó chiếm quyền kiểm soát nguồn. Tôi chỉ đơn giản là há hốc miệng với anh ta ...

Sau này tôi hiểu rằng lý do anh ta thậm chí đến gặp tôi là vì máy chủ SVN sẽ gửi cho anh ta (và 10 giám đốc điều hành cao hơn) một thư cho mỗi cam kết mà ai đó đưa ra. Và bằng cách xả rác kiểm soát nguồn, tôi đoán anh ta đã nhắc đến hộp thư của mình.


Đánh dấu email, nhấp vào xóa, xong
TheLQ

Tôi chắc chắn không phải là một fan hâm mộ của cái gọi là "check-in chunky". Cam kết khi thay đổi của bạn hoàn tất, đơn giản như vậy. Tôi cũng muốn cam kết vào cuối ngày làm việc vì nó cho rằng mã của tôi phải có khả năng biên dịch và ít nhất có thể chạy được với phần còn lại của dự án cho các lập trình viên khác vào sáng hôm sau.
Jesse C. Choper

2
Tận dụng tốt nhất của cả hai thế giới - Cam kết với chi nhánh địa phương của bạn bất cứ khi nào bạn không muốn mất thứ gì đó. Rebase và squash những cam kết đó khi bạn đã sẵn sàng để đưa chúng vào chủ. (tha thứ cho thuật ngữ git - Tôi chắc chắn nó có thể có trong đồng bóng và một loạt các hệ thống khác nữa)
Michael Anderson

Tôi đồng ý với tất cả những điều trên. Đó là một vấn đề bắt nguồn từ việc tiếp cận kiểm soát phiên bản. Nó không có giải pháp công nghệ. Tôi đã cân nhắc việc chuyển sang git-svn, điều này cho phép tôi làm việc với một kho lưu trữ cục bộ và sau đó đẩy mọi thứ vào kho lưu trữ SVN, nhưng điều đó sẽ gửi thư cho tất cả các cam kết trong ngày của tôi trong một đợt lớn và sẽ giải quyết được không có gì cho các ông chủ của tôi.
Avihu Turzion

34

Thực hiện tất cả các truy vấn cơ sở dữ liệu thông qua các thủ tục được lưu trữ trong Sql Server 2000. Từ các truy vấn đa bảng phức tạp đến các truy vấn đơn giản như:

select id, name from people

Các đối số có lợi cho thủ tục là:

  • Hiệu suất
  • Bảo vệ
  • Bảo trì

Tôi biết rằng chủ đề thủ tục khá gây tranh cãi, vì vậy hãy thoải mái chấm điểm câu trả lời của tôi một cách tiêu cực;)


2
Khả năng bảo trì có thể được cải thiện nếu tên bảng và cột không phải là duy nhất, nhưng tên SP là. Điều này có thể làm cho các tài liệu tham khảo mã dễ dàng hơn để tìm thấy. Nếu có bất kỳ lợi thế bảo trì tốt hơn, tôi không biết về chúng. Bảo mật là lý do chính để sử dụng SP.
Jeffrey L Whitledge

2
Tôi đồng ý rằng vì mục đích chung nó không phải 100% wtf, nhưng nhìn thấy liên kết này: codinghorror.com/blog/archives/000292.html
azkotoki

2
"Bảo mật là lý do chính để sử dụng SP" Không. Không có gì về SP trong SQL Server an toàn hơn. Chúng chỉ an toàn khi được gọi là truy vấn được liệt kê, có thể được thực hiện tốt với SQL động.
Flory

4
Nah: sprocs là hữu ích. Mặc dù đôi khi nó có thể là một nỗi đau, nhưng cuối cùng bạn lại viết một giao diện cơ sở dữ liệu tốt hơn, có thể sử dụng lại nhiều hơn. Dba của bạn cũng có thể có thời gian dễ dàng hơn để phân tích các vấn đề về hiệu suất và có thể cập nhật hệ thống sản xuất mà không cần thay đổi mã ứng dụng. Tôi không ủng hộ logic biz trong sprocs mặc dù.
Robert Paulson

4
Các truy vấn chôn trong mã được biên dịch là một nỗi đau, tôi đứng sau chính sách 100% sprocs cho việc trừu tượng hóa
annakata

33

Phải có 165 bài kiểm tra đơn vị (không nhất thiết phải tự động) trên 1000 dòng mã. Điều đó diễn ra tại một bài kiểm tra cho khoảng 8 dòng.

Không cần phải nói, một số dòng mã khá dài và các hàm trả về con trỏ này để cho phép chuỗi.


Làm thế nào là một bài kiểm tra đơn vị không tự động.
Pupeno

Làm thế nào mà họ nghĩ ra được phép thuật số 8?
Rohit

1
Điều gì xảy ra nếu bạn có 164? 166?
Daniel Daranas

8
Giống như 6 dòng.
đệ quy

1
Nó phụ thuộc vào mức độ tinh vi của bài kiểm tra của bạn quá tôi đoán. Tôi coi đó function(x).should == 2là một thử nghiệm duy nhất, trong khi những người khác sẽ kết hợp 10 thử nghiệm lại với nhau và gọi đó là một thử nghiệm duy nhất.
Orion Edwards

30

Chúng tôi đã phải sắp xếp tất cả các chức năng trong các lớp theo thứ tự abc, để làm cho chúng "dễ tìm hơn". Đừng bận tâm các ide đã thả xuống. Đó là quá nhiều lần nhấp.

(cùng lãnh đạo công nghệ đã viết một ứng dụng để xóa tất cả các nhận xét khỏi mã nguồn của chúng tôi).


3
Chắc chắn rồi, bởi vì các bình luận chỉ là sự lộn xộn, sau tất cả ... và nghĩ xem bộ xử lý trước tiết kiệm được bao nhiêu chu kỳ trong thời gian biên dịch! (Ứng dụng thậm chí còn hài hước hơn so với quy tắc. Tốt.)
ojrac

7
Tất nhiên! Các nhà phát triển có nghĩa vụ viết mã, không lãng phí thời gian viết bình luận :)
Daniel Rikowski

2
Vâng! Và ý kiến ​​làm cho việc xây dựng chậm hơn!
Greg D

2
Tuy nhiên, tôi nghĩ là một quy tắc tốt để sắp xếp các thành viên theo loại (trường, thuộc tính, phương thức) và theo tên
abatishchev

3
Tôi sắp xếp các phương thức, thành viên, v.v ... theo thứ tự abc trong các nhóm tương ứng của chúng, trong cả tiêu đề và nguồn ... nhưng chỉ vì tôi bị ám ảnh.
Jon Purdy

29

Vào năm 1987, tôi đã nhận một công việc với một công ty thuê tôi vì tôi là một trong số ít người biết sử dụng Khải Huyền. Mặc khải, nếu bạn chưa bao giờ nghe về nó, về cơ bản là một triển khai hệ điều hành Pick dựa trên PC - mà nếu bạn chưa bao giờ nghe về nó, có tên từ nhà phát minh của nó, Dick Pick có tên tuyệt vời. Nhiều điều có thể nói về Pick OS, hầu hết đều tốt. Một số nhà cung cấp siêu thị (ít nhất là Prime và MIPS) đã sử dụng Pick hoặc triển khai tùy chỉnh riêng của họ về nó.

Công ty này là một cửa hàng Prime và vì các hệ thống nội bộ của họ, họ đã sử dụng Thông tin. (Không, đó thực sự là tên của nó: đó là triển khai Pick của Prime.) Họ đã ký hợp đồng với nhà nước để xây dựng một hệ thống dựa trên PC, và đã dành khoảng một năm cho dự án Khải Huyền của mình trước khi anh chàng làm tất cả công việc, người cũng là giám đốc MIS của họ, quyết định anh ta không thể làm cả hai công việc nữa và thuê tôi.

Bằng mọi giá, anh ta đã thiết lập một số tiêu chuẩn mã hóa cho phần mềm dựa trên Prime của họ, nhiều trong số đó xuất phát từ hai điều kiện cơ bản: 1) việc sử dụng các thiết bị đầu cuối câm 80 cột và 2) thực tế là vì Prime đã không ' Tôi có một biên tập viên trực quan, anh ấy tự viết. Vì tính di động kỳ diệu của mã Pick, anh ta đã đưa trình soạn thảo của mình xuống Khải Huyền và đã xây dựng toàn bộ dự án trên PC bằng cách sử dụng nó.

Khải, tất nhiên, dựa trên PC, có trình chỉnh sửa toàn màn hình hoàn toàn tốt và không phản đối khi bạn đi qua cột 80. Tuy nhiên, trong vài tháng đầu tiên tôi ở đó, anh ấy đã nhấn mạnh rằng tôi sử dụng trình soạn thảo của anh ấy và tiêu chuẩn của mình.

Vì vậy, tiêu chuẩn đầu tiên là mọi dòng mã phải được bình luận. Mỗi dòng. Không có ngoại lệ. Lý do của ông cho điều đó là ngay cả khi bình luận của bạn nói chính xác những gì bạn vừa viết trong mã, phải bình luận nó có nghĩa là bạn ít nhất đã nghĩ về dòng này hai lần. Ngoài ra, như anh ta vui vẻ chỉ ra, anh ta đã thêm một lệnh vào trình soạn thảo định dạng từng dòng mã để bạn có thể đưa ra nhận xét cuối dòng.

Ồ, vâng. Khi bạn nhận xét mọi dòng mã, đó là với các nhận xét cuối dòng . Nói tóm lại, 64 ký tự đầu tiên của mỗi dòng là mã, sau đó có dấu chấm phẩy và sau đó bạn có 15 ký tự để mô tả 64 ký tự của bạn đã làm gì. Nói tóm lại, chúng tôi đã sử dụng một quy ước ngôn ngữ lắp ráp để định dạng mã Pick / Basic. Điều này dẫn đến những thứ trông như thế này:

EVENT.LIST[DATE.INDEX][-1] = _         ;ADD THE MOST RECENT EVENT
   EVENTS[LEN(EVENTS)]                 ;TO THE END OF EVENT LIST

(Trên thực tế, sau 20 năm cuối cùng tôi đã quên cú pháp tiếp tục dòng của R / Basic, vì vậy nó có thể trông khác. Nhưng bạn hiểu ý.)

Ngoài ra, bất cứ khi nào bạn phải chèn bình luận đa dòng, quy tắc là bạn sử dụng hộp hoa:

************************************************************************
**  IN CASE YOU NEVER HEARD OF ONE, OR COULDN'T GUESS FROM ITS NAME,  **
**  THIS IS A FLOWER BOX.                                             **
************************************************************************

Có, những dấu sao đóng trên mỗi dòng được yêu cầu. Rốt cuộc, nếu bạn sử dụng trình soạn thảo của anh ta, đó chỉ là một lệnh biên tập đơn giản để chèn một hộp hoa.

Khiến anh ấy yên tâm và để tôi sử dụng trình soạn thảo tích hợp của Khải là một trận chiến. Lúc đầu, anh ta khăng khăng, đơn giản vì đó là những quy tắc. Khi tôi phản đối rằng a) Tôi đã biết trình soạn thảo Khải Huyền b) nó thực sự có nhiều chức năng hơn trình soạn thảo của anh ta, c) các nhà phát triển Khải Huyền khác sẽ có cùng quan điểm, anh ta đã vặn lại rằng nếu tôi không đào tạo về trình soạn thảo của anh ta thì tôi sẽ không đã từng có thể làm việc trên cơ sở mã hóa Prime, điều mà cả hai chúng ta đều biết, sẽ không xảy ra chừng nào địa ngục vẫn chưa kết thúc. Cuối cùng anh cũng chịu thua.

Nhưng các tiêu chuẩn mã hóa là cuối cùng để đi. Các bình luận hộp hoa nói riêng là một sự lãng phí thời gian ngu ngốc, và anh ấy đã chiến đấu với tôi bằng răng và nói với họ, nói rằng nếu tôi chỉ sử dụng đúng trình soạn thảo thì việc duy trì chúng sẽ hoàn toàn dễ dàng. (Toàn bộ mọi thứ trở nên khá thụ động, tích cực.) Cuối cùng tôi lặng lẽ nhượng bộ, và từ đó, tất cả các mã tôi mang đến để đánh giá mã đều có những bình luận hộp hoa quý giá của anh ấy.

Một ngày, vài tháng làm việc, khi tôi chứng tỏ bản thân mình có năng lực hơn nhiều (đặc biệt là so với cuộc diễu hành đáng chú ý của các lập trình viên khác đi qua văn phòng đó khi tôi làm việc ở đó), anh ấy nhìn qua vai tôi khi tôi đã làm việc và anh ấy nhận thấy tôi không sử dụng bình luận hộp hoa. Ồ, tôi đã nói, tôi đã viết một trình định dạng mã nguồn chuyển đổi nhận xét của tôi thành phong cách của bạn khi tôi in chúng ra. Nó dễ hơn là duy trì chúng trong trình chỉnh sửa. Anh mở miệng, suy nghĩ một lúc, đóng nó lại, bỏ đi và chúng tôi không bao giờ nói về các tiêu chuẩn mã hóa nữa. Cả hai công việc của chúng tôi trở nên dễ dàng hơn sau đó.


14
+1 cho trình định dạng nhận xét khi in
BradC

1
Hộp hoa KHÔNG BAO GIỜ được sử dụng quá mức. Tôi ghét nó khi tôi đọc mã, bình luận tốt, sau đó thấy một hộp hoa hét lên "NÀY NÀY VÀ NÀY VÀ NÀY"
TheLQ

26

Ở công việc đầu tiên của tôi, tất cả các chương trình C, dù đơn giản hay phức tạp, chỉ có bốn chức năng. Bạn đã có chính, lần lượt gọi ba chức năng khác. Tôi không thể nhớ tên của họ, nhưng chúng là một cái gì đó dọc theo dòng bắt đầu (), middle () và end (). start () đã mở các tệp và kết nối cơ sở dữ liệu, end () đã đóng chúng và middle () đã làm mọi thứ khác . Không cần phải nói, middle () là một hàm rất dài.

Và chỉ để làm cho mọi thứ trở nên tốt hơn, tất cả các biến phải là toàn cầu.

Một trong những ký ức đáng tự hào nhất của tôi về công việc đó là một phần của cuộc nổi dậy chung dẫn đến sự phá hủy các tiêu chuẩn đó.


2
Tôi đoán trên giấy trong phòng họp nghe có vẻ hay, nhưng tôi thương hại lập trình viên phải theo dõi nó
TheLQ

Phải được thiết kế bởi một giáo viên tiếng Anh.
yodie

Phải được thiết kế bởi một lập trình viên COBOL.
bruno

Phải sử dụng rất nhiều goto .
new123456

26

Một tiêu chuẩn mã hóa C được viết bên ngoài có quy tắc 'không dựa vào quyền ưu tiên của nhà điều hành, luôn luôn sử dụng dấu ngoặc'

Đủ công bằng, mục đích rõ ràng là cấm:

a = 3 + 6 * 2;

theo ý kiến:

a = 3 + (6 * 2);

Điều đó là, điều này đã được thi hành bởi một công cụ tuân theo các quy tắc cú pháp C đó là '=', '==', '.' và truy cập mảng là các toán tử. Vì vậy, mã như:

a[i].x += b[i].y + d - 7;

phải được viết là:

((a[i]).x) += (((b[i]).y + d) - 7);

2
có thể (((a) [(i)]). x) + = (((((b) [(i)]). y) + (d)) - (7)); ?
Behrooz
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.