Các giả định lập trình lâu dài, không chính xác [đã đóng]


281

Tôi đang thực hiện một số nghiên cứu về các lỗi phổ biến và các giả định kém được thực hiện bởi các kỹ sư phần mềm cơ sở (và có lẽ là cấp cao).

Giả định lâu nhất của bạn cuối cùng đã được sửa là gì?

Ví dụ, tôi đã hiểu nhầm rằng kích thước của một số nguyên không phải là một tiêu chuẩn và thay vào đó phụ thuộc vào ngôn ngữ và mục tiêu. Một chút lúng túng để nói, nhưng nó có.

Hãy thẳng thắn; bạn có niềm tin vững chắc nào, và bạn duy trì giả định trong bao lâu? Nó có thể là về một thuật toán, ngôn ngữ, khái niệm lập trình, kiểm tra hoặc bất cứ điều gì khác về lập trình, ngôn ngữ lập trình hoặc khoa học máy tính.


Câu trả lời:


545

Trong một thời gian dài, tôi cho rằng mọi người khác đều có siêu thành thạo tất cả các khái niệm lập trình (mẫu thiết kế, ngôn ngữ mới nhất, độ phức tạp tính toán, biểu thức lambda, bạn đặt tên cho nó).

Đọc blog, Stack Overflow và sách lập trình dường như luôn khiến tôi cảm thấy rằng mình đứng sau đường cong về những điều mà tất cả các lập trình viên chỉ cần biết bằng trực giác.

Theo thời gian, tôi đã nhận ra rằng tôi đang so sánh hiệu quả kiến ​​thức của mình với kiến ​​thức tập thể của nhiều người, không phải là một cá nhân và đó là một thanh khá cao đối với bất kỳ ai. Hầu hết các lập trình viên trong thế giới thực đều có một bộ đệm kiến ​​thức cần thiết để thực hiện công việc của họ và có nhiều hơn một vài lĩnh vực mà họ yếu hoặc hoàn toàn không biết gì.


68
Thật vậy! Đó là vấn đề của thời đại này. Thông tin cũng không được khuyến khích. Tôi đã có tiết lộ này vài tuần trước khi tôi cảm thấy mình là một kẻ thất bại hoàn toàn trong mọi việc tôi làm (không phải lần đầu tiên) liên quan đến nghiên cứu. Những người nhận được các bài báo của họ được xuất bản trong Giao dịch của IEEE không nhất thiết phải có các kỹ năng như những người làm việc tại Google, tự hào về StackOverflow, các giáo sư xuất sắc hoặc viết blog lập trình tuyệt vời. Tất nhiên, những người giỏi nhất thì lạnh lùng hơn theo cấp số nhân, nhưng họ không biết mọi thứ bạn biết mà bạn không biết. Vì vậy, hãy giữ bình tĩnh.
jbasko

40
Điều này cũng giúp hiểu rằng những blogger đó cũng không viết mọi thứ ra khỏi đầu họ. Những blogger giỏi nghiên cứu các chủ đề của họ và học những điều mới trong khi viết bài.
JohnFx

47
Tôi ám ảnh hàng ngày về những thứ tôi không có thời gian để đọc và tìm hiểu. Nó để lại cho tôi một cảm giác tội lỗi khủng khiếp đôi khi.
brad

9
@Zilupe: Amen đến đó. Tôi đã xuất bản một vài bài báo và tạp chí quốc tế. Trong mắt một số người, điều đó nghe thật tuyệt. Cho đến khi bạn nhận ra rằng nó không thực sự tốn nhiều công sức để xuất bản một bài báo. Chúng ta không phải là thiên tài. Chúng tôi cũng giống như những người khác. Chúng tôi đã phạm sai lầm, và chúng tôi xuất bản giấy tờ tào lao. Chà, ngoại trừ một số nhóm thiểu số thiên tài thực sự ...
Hao Wooi Lim

4
+1 Điều tốt tôi đọc được điều này. Tôi nghĩ tôi là người duy nhất.
Randell

308

Rằng mọi người biết họ muốn gì.

Trong thời gian dài nhất tôi nghĩ rằng tôi sẽ nói chuyện với mọi người, họ sẽ mô tả một vấn đề hoặc quy trình làm việc và tôi sẽ đưa nó vào mã và tự động hóa nó. Hóa ra mỗi khi điều đó xảy ra, những gì họ nghĩ họ muốn không thực sự là những gì họ muốn.

Chỉnh sửa: Tôi đồng ý với hầu hết các ý kiến. Đây không phải là một câu trả lời kỹ thuật và có thể không phải là những gì người hỏi đang tìm kiếm. Nó không chỉ áp dụng cho lập trình. Tôi chắc chắn đó không phải là giả định lâu nhất của tôi, nhưng đó là điều nổi bật nhất tôi đã học được trong 10 năm ngắn ngủi tôi đã làm điều này. Tôi chắc chắn rằng đó là một sự ngây thơ thuần túy từ phía tôi nhưng cách mà bộ não của tôi / có dây và sự dạy dỗ và kinh nghiệm tôi có trước khi bước vào thế giới kinh doanh khiến tôi tin rằng tôi sẽ làm những gì tôi đã trả lời; rằng tôi sẽ có thể sử dụng mã và máy tính để khắc phục sự cố của mọi người.

Tôi đoán câu trả lời này tương tự như của Robin về những người không lập trình hiểu / quan tâm đến những gì tôi đang nói. Đó là về việc học kinh doanh như một quá trình tương tác nhanh, lặp đi lặp lại. Đó là về việc tìm hiểu sự khác biệt giữa việc trở thành một con khỉ lập trình và trở thành một nhà phát triển phần mềm. Đó là về việc nhận ra rằng có một sự khác biệt giữa hai và để thực sự tốt trong lĩnh vực này, nó không chỉ là cú pháp và tốc độ gõ.

Chỉnh sửa: Câu trả lời này hiện là cộng đồng-wiki để xoa dịu những người khó chịu với câu trả lời này cho tôi đại diện.


9
Hoặc thay đổi những gì họ muốn sau khi nhìn thấy những gì họ muốn trước đây. Mọi người thích thay đổi suy nghĩ của họ. Tôi biết, vì tôi là người.
J. Polfer

13
Bạn đang cho họ những gì họ yêu cầu, không phải những gì họ muốn.
Brent Baisley

47
Tại sao những câu trả lời không gây tranh cãi nhàm chán lại được bình chọn quá mức?!
nes1983

39
Ồ Âm thanh như ai đó cần một cái ôm.
bzlm

24
Trời ơi @ mọi người phàn nàn, đại diện stackoverflow không phải là một đối thủ. Upvote nếu bạn thích câu trả lời, đừng downvote vì bạn ghen tị vì bạn đã không đăng nó trước.
Dmitri Farkov

292

Rằng tôi biết vấn đề hiệu suất ở đâu mà không có hồ sơ


10
Tôi nghĩ rằng đây là lý do tại sao tối ưu hóa sớm là rất phổ biến.
Hao Wooi Lim

10
+1 Wow, ai đó bao gồm một câu trả lời không tầm thường hoặc lạc đề.
Mark Rogers

3
Tôi đã có một số máy tính bảng sẽ giúp tối ưu hóa sớm ...
AndyM

232

Rằng tôi chỉ nên có một điểm thoát khỏi hàm / phương thức.


91
Thực hiện xuất sắc; thoát ra thường xuyên khi cần thiết Người ta phải bảo lãnh ra khỏi một chức năng ngay khi nó không có ý nghĩa để tiếp tục tiếp tục vào nó. Làm điều này có thể làm giảm độ phức tạp và tăng khả năng đọc bằng cách, ví dụ, tránh các điều kiện lồng nhau sâu, khi chúng là điều kiện tiên quyết cần thiết để phương thức chạy đúng. Trong các ngôn ngữ hiện đại với quản lý bộ nhớ và các cấu trúc tài nguyên như sử dụng / cuối cùng, việc tiếp tục cho đến hết phương pháp một cách giáo điều không có ý nghĩa.
Triynko

24
Ai đã nghĩ ra điều này? Nó giống như một huyền thoại đô thị lập trình.
brad

49
Những người phải gỡ lỗi mã của người khác là những người đã nghĩ ra điều này.
gatorfax

23
Tôi nghĩ rằng ý tưởng thường được tổ chức nhưng sai lầm này dựa trên một sự hiểu lầm. Khi bạn thoát khỏi một chức năng, bạn sẽ luôn trở về cùng một điểm. Đó là một quy tắc quan trọng trong các ngôn ngữ như BASIC đã không thi hành nó: Chẳng hạn, quy tắc này có nghĩa là bạn nên sử dụng GOSUB thay vì GOTO. Trong các ngôn ngữ như C # hoặc Java gọi các phương thức, nó tự động. Nhưng bởi vì nó tự động, tôi nghĩ rằng nó biến đổi từ logic "chỉ một điểm quay trở lại" thành "điểm duy nhất" vô nghĩa.
Ryan Lundy

35
Từ các ngôn ngữ như C, nơi yo cần phát hành nguồn tài nguyên. Nhiều điểm thoát là một cơ hội tốt để rò rỉ các nguồn tài nguyên. IMO không có điểm nào trong các ngôn ngữ có ngoại lệ, vì bạn thường không biết các điểm thoát của mình nữa hoặc ở giữa một tuyên bố. - Trong các ngôn ngữ này, tất cả những gì còn lại là "cấu trúc để dễ đọc".
peterchen

228

Những người không lập trình đó hiểu những gì tôi đang nói.


243
hiểu / quan tâm ..
nickf

8
Đôi khi tôi vẫn còn có cái này ... Tôi nghĩ ít nhất vợ tôi đã bắt đầu hiểu đúng: P
workmad3

3
Trời ơi, tôi sợ mình có thể chưa học cái này!
thatismatt

3
vâng, đôi khi tôi quên khán giả của mình và kết thúc với một đám người với vẻ mặt trống rỗng trên cầu thang với tôi, thật tuyệt khi mọi người tỏ ra thích thú
Petey B

3
Đây là sự thất vọng lớn nhất của tôi với nghề.
Andres Jaan Tack

219

Phần mềm bugfree đó là có thể.


35
+1, mặc dù NASA gần như đã quản lý nó
Patrick McDonald

55
Có nhưng "gần như" có giá vài triệu đô la :)
Jem

15
@Triynko "có thể" của bạn và "có thể" của @ JaredPar không giống nhau. Lý thuyết và thực hành có thể giống nhau về lý thuyết nhưng rất khác nhau trong thực tiễn.
wilmustell

13
@Joseph, một phần của vấn đề là mọi người nghĩ rằng các chương trình Hello World không có lỗi. Họ không phải. Hầu hết không kiểm tra lỗi trong printf chẳng hạn hoặc tài khoản cho các lần thử IO thất bại khác.
JaredPar

9
@RussellH, không. Bạn đã không thể chỉ định giá trị trả về và quá trình kết quả sẽ trả về bộ nhớ rác ngẫu nhiên.
JaredPar

199

Các biến thành viên riêng đó là riêng tư đối với thể hiện chứ không phải lớp.


192
Tôi giữ giả định đó cho đến khi ... vừa nãy.
TheMissingLINEQ

9
@ebrown Tôi thường chỉ thấy nó hữu ích khi viết phương thức equals ()
Dave Webb

12
Họ đang ở trong Ruby.
Mike Kucera

17
Điều này rất bình thường với tôi rằng câu trả lời này không có ý nghĩa trong vài lần đầu tiên tôi đọc nó. Bây giờ tôi muốn học Ruby để nó có thể làm tôi bối rối theo cách khác. :)
jmucchiello

16
@Kiewic Nếu bạn có một biến thành viên riêng được gọi là myVar trong lớp của bạn, bạn có thể tham chiếu other.myVar trực tiếp trong mã của mình nếu khác là một thể hiện của lớp này. Tôi đã giả sử vì đó là "riêng tư" mà bạn phải sử dụng other.getMyVar () ngay cả trong lớp.
Dave Webb

166

Tôi nghĩ rằng gõ tĩnh đang ngồi rất yên trên bàn phím của bạn.


53
Chân thành hay không, điều này khiến tôi cười rất nhiều vào cuối một ngày dài làm việc. : P
Olivier Tremblay

5
++ để cười Nghe có vẻ như một cái gì đó mà chồng tôi (phi kỹ thuật) sẽ nghĩ ra.
jess

11
+1! Tôi nghĩ gõ vịt liên quan đến gõ quá. Hoặc vịt. Hoặc cả hai.
SqlACID

162

Rằng bạn hoàn toàn có thể hiểu một vấn đề trước khi bắt đầu phát triển.


32
Điều này, bạn của tôi, nên là: "Rằng bạn hoàn toàn có thể hiểu được một vấn đề." Nhưng nó là sự thật. Và rõ ràng là một khái niệm khó hiểu hoặc thậm chí chấp nhận.
KarlP

4
Bạn không thể hiểu vấn đề "đầy đủ", nhưng chắc chắn bạn PHẢI hiểu vấn đề (ở một mức độ nào đó) trước khi bạn bắt đầu phát triển. bit.ly/kLXgL
OscarRyz

Đôi khi bạn phải bắt đầu phát triển để hiểu vấn đề. Và / hoặc, vấn đề thay đổi bạn càng phát triển.
Evan Plaice

158

Người thông minh luôn thông minh hơn tôi.

Tôi thực sự có thể đánh bại chính mình khi tôi mắc lỗi và thường bị nói ra vì tự ti. Tôi đã từng ngước nhìn rất nhiều nhà phát triển và thường cho rằng vì họ biết nhiều hơn tôi trên X , nên họ biết nhiều hơn tôi.

Khi tôi tiếp tục tích lũy kinh nghiệm và gặp gỡ nhiều người hơn, tôi đã bắt đầu nhận ra rằng đôi khi, họ biết nhiều hơn tôi trong một chủ đề cụ thể, họ không nhất thiết phải thông minh hơn tôi / bạn.

Đạo đức của câu chuyện: Đừng bao giờ đánh giá thấp những gì bạn có thể mang đến bàn.


Tốt một! Tôi hiện đang làm việc với một đồng nghiệp, người thực sự biết rất nhiều về phát triển .NET. Mất một thời gian để tôi nhận ra rằng tôi hiểu rõ hơn những gì khách hàng cần.
Treb

58
Mặt khác, tôi biết nhiều hơn những người khác. Hóa ra họ chỉ biết những thứ khác nhau. Đạo đức khác: Đừng bao giờ đánh giá thấp những gì người khác có thể mang đến bàn.
Thứ năm

1
Đây là điều "Làm lại cho người khác" cũ một lần nữa ... Tôi đang đặt ra một cụm từ mới: Công nghệ bắt nạt ~ Trạng thái cảm thấy vượt trội vì bạn biết một số thứ và phạm sai lầm khi cho mọi người khác biết. @seealso: thông minh.
corlettk

1
Quan sát tuyệt vời - phiên bản của tôi tiêu cực hơn "Mọi người bây giờ đều ngu ngốc". Hơi liên quan đến "đừng lật bozo".
peterchen

2
Bạn chỉ phải lo lắng khi những người ngu ngốc, thông minh hơn bạn.
Brad Gilbert

131

Trong thời gian dài nhất tôi đã nghĩ rằng Lập trình xấu là một cái gì đó đã xảy ra ở rìa .. rằng Làm mọi thứ chính xác là chuẩn mực. Tôi không ngây thơ những ngày này.


30
Tôi đã từng nghĩ Lập trình xấu chỉ được thực hiện bởi các lập trình viên khác, cho đến khi tôi được thực hiện bởi một trong những Chương trình xấu của mình. Bây giờ tôi làm mọi thứ một cách chính xác! (Bạn tin tôi lần này phải không?)
Jared Updike

2
Tổng cộng. Tôi đã đi từ "Điều đó không bao giờ xảy ra" đến "Điều đó không bao giờ xảy ra ngoại trừ tại công việc này " đến "Mọi nơi đều có mã xấu".
Ryan Lundy

1
Hack là chuẩn mực. Kỹ thuật là mục đích của các đối thủ thực sự. Nếu gặp một kỹ sư phần mềm, tôi sẽ cho bạn biết.
corlettk

3
@corlettk: Ý bạn là mã hóa khỉ là chuẩn mực, phải không? Hack là một nghệ thuật, một trí tuệ nghệ thuật cao cấp, mà tôi còn lâu mới đạt được.
hasen

2
@Hasen: Không, hack là một sự tương tự với việc vô tình cầm rìu vào cây, đục những mảnh nhỏ trong cơn hoảng loạn không có kế hoạch thực sự, và tạo ra một mớ hỗn độn đẫm máu cho đến khi cây cuối cùng rơi xuống đầu bạn. Một "hack" là "một người tạo ra công việc tầm thường và tầm thường với hy vọng đạt được thành công thương mại". Tại sao lĩnh vực máy tính thay đổi "hack" thành "lành nghề", tôi sẽ không bao giờ biết.
Lawrence Dol

113

Tôi nghĩ rằng tôi nên tiến tới trừu tượng hóa càng nhiều càng tốt. Tôi bị đánh vào đầu lớn với điều này, vì có quá nhiều chức năng nhỏ đan xen.

Bây giờ tôi cố gắng giữ mọi thứ đơn giản và tách rời nhất có thể. Tái cấu trúc để làm cho một cái gì đó trừu tượng dễ dàng hơn nhiều so với dự đoán làm thế nào tôi cần trừu tượng hóa một cái gì đó.

Vì vậy, tôi đã chuyển từ phát triển khung quy tắc tất cả, sang các đoạn chức năng để hoàn thành công việc. Không bao giờ nhìn lại, ngoại trừ khi tôi nghĩ về thời gian tôi ngây thơ nghĩ rằng mình sẽ là người phát triển điều lớn tiếp theo.


26
Decoupling = Trừu tượng thực sự. Tóm tắt cho mục đích riêng của nó là ... tối ưu hóa sớm.
Jared Updike

1
Điều này đi cùng với những gì tôi đã tìm thấy khi điều chỉnh hiệu suất. Có thể có một chương trình đáng yêu với nhiều lớp trừu tượng. Sau đó, khối lượng công việc trở nên nặng nề và đoán những gì tốn kém mọi lúc ... tất cả những điều trừu tượng. Máy tính thực hiện các hướng dẫn, không trừu tượng.
Mike Dunlavey

5
Trừu tượng hóa và khái quát hóa là các công cụ mạnh mẽ, đáng buồn được sử dụng để khái quát hóa một trường hợp sử dụng trừu tượng với một triển khai duy nhất. Điều buồn cười là bất cứ khi nào có nhu cầu thay đổi việc thực hiện, các khái niệm trừu tượng và khái quát hóa cũng phải thay đổi ...
KarlP

Tôi hoàn toàn đồng ý với Jared ... nếu bạn đã xoay sở để "đơn giản và tách rời" thì bạn đã đạt được sự trừu tượng thực sự. Làm thế nào mọi thứ có thể được tách rời nếu bạn không trừu tượng hóa mọi thứ vào giao diện và nhà máy, v.v ...? Làm thế nào có thể đơn giản trừ khi bạn loại bỏ tất cả "if type = this thì làm điều này, hoặc nếu kiểu đó là sau đó làm một cái gì đó mã khác"?
Richard Anthony Hein

Tương tự ở đây. Tôi nghĩ rằng tôi đã học được về sự trừu tượng trước khi tạo ra rất nhiều mã spaghetti. Họ nên dạy cách hoàn thành công việc ngay cả khi mã là spaghetti, và sau đó dạy chúng tôi về OO và sự trừu tượng.
hasen

103

Phụ nữ thấy lập trình viên máy tính gợi cảm ...


70
Chờ giây lát???
Tekağdaş Tekin

4
he he he he .. okey, tôi đang tìm thứ gì đó để giữ nụ cười cho đến hết ngày. Tôi nghĩ rằng tôi đã tìm thấy nó !!! :)
OscarRyz

17
"Ooh, em bé! Vâng, nói 'nếu' - ném cho tôi một số ngoại lệ .. Vâng, bạn biết tôi muốn nó như thế nào": P
cwap

5
Gì? Lập trình viên có giàu không? Việc đó đã xảy ra khi nào?
Filip Navara

3
Một số phụ nữ (đúng kiểu) bị thu hút bởi những anh chàng thông minh sâu sắc. Trong đó, trừ râu cổ nguyên mẫu và xúc xích-ruột, là những đặc điểm khá phổ biến của các lập trình viên. Rắc rắc một chút lo lắng cho hình ảnh bản thân / vệ sinh và sự hồi hộp / phấn khích thường xuyên của các môn thể thao khắc nghiệt và bạn đang đi đúng hướng.
Evan Plaice

100

Chất lượng phần mềm sẽ dẫn đến doanh số cao hơn. Đôi khi nó không nhưng không phải lúc nào.


37
Bán phần mềm? Đó là năm 1999.
bzlm

Rất nhiều trang web dựa trên đăng ký hiện đang quảng cáo ...
cgp

11
Microsoft chắc chắn sẽ giết chết nó.
Bill Martin

phải yêu cái này, thật vậy
dr. ác

18
Tôi muốn cải thiện chất lượng / hiệu suất của phần mềm của chúng tôi được tính là một tính năng
Tom Leys

82

Rằng tất cả các ngôn ngữ (hầu hết) được tạo ra bằng nhau.

Trong một thời gian dài, tôi nhận ra rằng ngôn ngữ của sự lựa chọn không thực sự tạo ra nhiều sự khác biệt về độ khó của quá trình phát triển và tiềm năng thành công của dự án. Điều này chắc chắn là không đúng sự thật.

Chọn ngôn ngữ phù hợp cho công việc cũng quan trọng / quan trọng như bất kỳ quyết định dự án nào khác được đưa ra.


13
Tôi cảm thấy việc lựa chọn các thư viện phù hợp là điều quan trọng. Nó chỉ xảy ra như vậy thường có sự tương ứng 1-1 giữa các ngôn ngữ và thư viện ...
Kevin Montrose

7
Nhưng nếu hai ngôn ngữ lập trình đều Turing hoàn chỉnh thì có gì khác biệt? Bạn có thể viết bất kỳ chương trình bằng một trong hai ngôn ngữ! ;)
Lập hóa đơn cho Thằn lằn

8
Tôi không đồng ý, quyết định sử dụng ngôn ngữ nào là ít quan trọng hơn so với người thực sự sẽ thực hiện dự án. Chỉ là một ví dụ của nhiều quyết định quan trọng khác.
Boris Terzic

13
BrainFu ** hoàn hảo như trăn.
hasen

9
Rằng ngôn ngữ hoàn chỉnh Turing bằng cách nào đó có thể áp dụng như nhau là một quan niệm sai lầm phổ biến. Một ngôn ngữ hoàn chỉnh Turing có thể tính toán mọi thứ mà máy Turing có thể (và cũng thường ngụ ý theo cách khác). Hoàn toàn không có ý nghĩa liên quan đến hiệu suất. Một hoạt động cần thời gian tuyến tính trong một ngôn ngữ rất có thể mất thời gian theo cấp số nhân trên một ngôn ngữ khác và cả hai vẫn có thể hoàn thành Turing. Có một sự khác biệt rất lớn giữa những gì tính toán trên lý thuyết và những gì khả thi trong thực tế.
Khayman

81

Đó là một tỷ lệ nhận xét / mã lớn là một điều tốt.

Phải mất một thời gian tôi mới nhận ra rằng mã nên tự ghi lại. Chắc chắn, một nhận xét ở đây và có ích nếu mã không thể được làm rõ hơn hoặc nếu có một lý do quan trọng tại sao một cái gì đó đang được thực hiện. Nhưng, nói chung, tốt hơn là dành thời gian bình luận đó để đổi tên các biến. Nó sạch hơn, rõ ràng hơn và các bình luận không nhận được "không đồng bộ" với mã.


1
Tôi đồng ý trong mã thực tế ... không bao gồm các bình luận javadoc (hoặc tương đương).
corlettk

11
+1, thậm chí đừng để tôi bắt đầu vào các chuyên luận mà tôi đã từng viết cho 10 chức năng dòng
wds

Để thêm vào điều này, một câu lệnh assert () tốt hơn là ghi lại một điều kiện tiên quyết / hậu điều kiện. Hợp đồng mã .NET 4 cũng có thể tự động được chuyển thành tài liệu!
Robert Fraser

66

Lập trình đó là không thể.

Không đùa, tôi luôn nghĩ rằng lập trình là một thứ không thể học được, và tôi luôn tránh xa nó. Và khi tôi đến gần mã, tôi không bao giờ có thể hiểu được.

Sau đó một ngày, tôi chỉ cần ngồi xuống và đọc một số hướng dẫn cơ bản cho người mới bắt đầu, và làm việc theo cách của tôi từ đó. Và hôm nay tôi làm việc như một lập trình viên và tôi yêu từng phút giây.

Nói thêm, tôi không nghĩ lập trình là dễ dàng, đó là một thách thức và tôi thích học hỏi nhiều hơn và không có gì vui hơn là giải quyết một số vấn đề lập trình.


7
Amen! Nhưng, này, đừng công bố quan điểm này từ nóc nhà. Chúng tôi không muốn mọi người biết lập trình là niềm vui, bây giờ phải không? ;); P
Peter Perháč

9
MasterPeter: Nó sẽ cho chúng tôi nhiều thức ăn hơn để chúng tôi tăng đại diện khi họ đến đây đặt câu hỏi.
TheTXI

4
Tôi muốn nói rằng lập trình khó để làm đúng . Đó là, tuy nhiên, có thể, dường như là quan điểm của bạn.
Steve S

4
@Olafur: Tại sao bạn muốn câu hỏi là wiki, nhưng không phải là câu trả lời của bạn?
gnovice

2
Điều này phản ánh chính xác kinh nghiệm của tôi. Tôi ước tôi bắt đầu sớm hơn bây giờ: P
Skilldrick

65

"On Error Resume Next" là một số cách xử lý lỗi


6
Tôi cảm thấy bạn ... nhưng trong vbscript (đặc biệt là asp), đó là tùy chọn "xử lý lỗi" DUY NHẤT có sẵn, kết hợp với kiểm tra thận trọng xem có thực sự xảy ra lỗi hay không và một lượng cầu nguyện hợp lý.
thẳng

2
Vâng ... đó là một loại ... chỉ là một loại mà chúng tôi rất vui khi được thoát khỏi
Matthew Whited

6
Tốt?! nhưng nó là. Bạn bắt đầu khối xử lý lỗi của mình với Tiếp tục sửa lỗi, hãy thử một cái gì đó và sau đó Nếu (err.number <> 0) sau đó
jpinto3912

Đây không phải là vbscript duy nhất tương đương với một lần thử sao?
James

-1: Đây là một loại xử lý lỗi. Nó không phải là thanh lịch.
JohnFx

64

Phần mềm lập trình đó đòi hỏi một nền tảng vững chắc trong toán học cao hơn.

Trong nhiều năm trước khi tôi bắt đầu viết mã, tôi luôn được bảo rằng để trở thành một lập trình viên giỏi, bạn phải giỏi về đại số, hình học, giải tích, trig, v.v.

Mười năm sau và tôi chỉ có một lần phải làm bất cứ điều gì mà một học sinh lớp tám không thể làm được.


5
Rất đúng. Trong hầu hết các trường hợp, bạn không cần phải là một chuyên gia toán học. Lần duy nhất tôi thực sự cần biết về bất kỳ môn toán nâng cao nào là khi tôi làm lập trình 3D như một sở thích. Trên thực tế, chính việc lập trình 3D trong thời trung học đã thôi thúc tôi chú ý hơn trong các lớp học trig và pre-cal. Khác với điều đó, toán học rất cơ bản thường là tất cả những gì bạn cần.
Steve Wortham

29
Tôi nghĩ rằng bạn đã thông tin sai. Chắc chắn, để trở thành một lập trình viên giỏi , bạn không thực sự cần phải sử dụng toán cấp cao hơn nhiều, nhưng để thực sự hiểu và áp dụng các khái niệm khoa học máy tính nhất định, bạn sẽ cần nhiều hơn chỉ là toán lớp tám.
hbw

12
Tôi nghĩ rằng sự nhấn mạnh vào toán học là để dạy các kỹ năng tư duy phê phán và giải quyết vấn đề không phải là thứ mà bạn sẽ sử dụng trong lập trình máy tính hàng ngày.
Zack

14
Kiểu trừu tượng bạn cần để hiểu toán học nâng cao rất giống với sự trừu tượng bạn cần để tạo ra phần mềm.
OscarRyz

6
Tôi nghĩ rằng các khái niệm lập trình chức năng sẽ dễ hiểu hơn nhiều nếu bạn có một nền tảng vững chắc hơn trong toán học, đơn giản là vì bạn không sợ cú pháp nhiều như vậy. Trông có vẻ quen. Tôi đã phạm sai lầm khi sử dụng các hàm toán học đơn giản để thể hiện các khái niệm lập trình hàm mới đối với C #. Một số người đã ngay lập tức tuyên bố rằng nó quá phức tạp.
Richard Anthony Hein

63

Điều đó tối ưu hóa == viết lại bằng ngôn ngữ lắp ráp.

Khi tôi lần đầu tiên thực sự hiểu về lắp ráp (đến từ BASIC), dường như cách duy nhất để làm cho mã chạy nhanh hơn là viết lại nó trong lắp ráp. Mất vài năm để nhận ra rằng trình biên dịch có thể rất tốt trong việc tối ưu hóa và đặc biệt là với các CPU có dự đoán nhánh, v.v. chúng có thể có thể làm tốt hơn một con người có thể làm trong một khoảng thời gian hợp lý. Ngoài ra, dành thời gian cho việc tối ưu hóa thuật toán có thể mang lại cho bạn một chiến thắng tốt hơn so với việc dành thời gian chuyển đổi từ ngôn ngữ cấp cao sang ngôn ngữ cấp thấp. Ngoài ra, tối ưu hóa sớm là gốc rễ của mọi tội lỗi ...


8
Peek và Poke là bạn của bạn :)
Matthew Whited

4
Kẻ biến thái! Nói điều đó với thẩm phán!
Shalom Craimer

1
Đây là nơi lý thuyết phức tạp xuất hiện. Hội nói chung là tối ưu hóa vi mô. Làm cho độ phức tạp của thuật toán của bạn nhỏ hơn là tốc độ đạt được.
PeteT

@scraimer: Fancy thấy bạn ở đây, tôi sẽ không bao giờ mong đợi điều đó ;-)
Robert S. Barnes

@ Matthew - "Peek và Poke là bạn của bạn :)": ** TUYỆT VỜI ghen tị Tôi đã không viết điều đó trước tiên.
FastAl

63
  • Rằng các giám đốc điều hành công ty quan tâm đến chất lượng của mã.
  • Càng ít dòng thì càng tốt.

2
họ quan tâm, nhưng bạn phải kết hợp kỹ năng nghệ sĩ với kỹ năng công nhân. Mỗi mảnh algoritm không thể là một tác phẩm nghệ thuật. Một số trong số đó sẽ bị thay đổi, vì vậy hãy sử dụng lại "ít sử dụng". Hãy nhớ quy tắc 80/20 cũ. 80% chương trình được sử dụng 20% ​​thời gian. Vì vậy, tập trung 80% vào 20% mã và thực hiện điều đó thật sự! : OP
BerggreenDK

71
Càng ít dòng càng tốt! một phần lý do tôi không thích java làm ngôn ngữ là vì làm bất cứ điều gì đều chiếm quá nhiều dòng mã. ít dòng mã hơn có nghĩa là dễ dàng thay đổi mã của bạn hơn.
Claudiu

7
Nó phụ thuộc vào những gì bạn đang loại bỏ để có được ít dòng hơn. Nếu mã vẫn có thể đọc được với ít dòng hơn thì tốt. Tuy nhiên, có rất nhiều cách để giảm số lượng dòng mã khiến mã trở nên tồi tệ hơn.
Herms

2
Ngoại trừ khi mọi người mang tâm lý "càng ít dòng càng tốt" cho đến nay với phương thức xâu chuỗi gọi sâu 7 để khi một trong số họ ném một con trỏ null, bạn không biết đó là gì. Hoặc họ ngưng tụ rất nhiều hành động thành một dòng dài 150 ký tự và thực hiện 4 thao tác. Điều này làm cho nó khó đọc hơn và khó gỡ lỗi hơn, nhưng không nhanh hơn và cũng không sử dụng ít bộ nhớ hơn trong khi thực hiện.
Trampas Kirk

17
Nếu dòng của bạn kết thúc bằng))))) và bạn không viết Lisp, bạn có quá ít dòng.

58

Tôi có thể nói rằng việc lưu trữ phần tử năm của một ngày là 2 chữ số là một giả định ảnh hưởng đến toàn bộ thế hệ các nhà phát triển. Số tiền được thổi vào Y2K khá khủng khiếp.


1
Đây là câu trả lời duy nhất mà tôi nêu lên, mặc dù đó là CW nên không thành vấn đề ...
Dan Rosenstark

4
IIRC một số hệ thống trở lại trong thập niên 60 và có thể 70 chỉ sử dụng một chữ số vì nó sử dụng ít bộ nhớ hơn. Tôi thậm chí đã nhìn thấy các mẫu giấy trong đó "196_" và "197_" được in sẵn.
một số

3
Tôi vẫn thấy các biểu mẫu với 200_ và có lẽ hiện tại có một số với 201_ được in.
Macha

5
Điều đáng buồn là ... Unix sẽ có vòng thứ hai vào lúc này vào năm 2038
Evan Plaice

4
@Billy Chỉ vì kiến ​​trúc máy thay đổi không có nghĩa là định dạng dữ liệu sẽ. Lưu trữ 2 chữ số độ phân giải ở định dạng int sẽ tạo ra định dạng ngày byte (8 bit) và tuy nhiên, nó đã ảnh hưởng đến hàng tấn máy kiến ​​trúc phần cứng 32 bit trong 2k. Đây chỉ là một ví dụ nữa về lý do tại sao bạn không để những kẻ phần cứng cấp thấp chỉ định định dạng dữ liệu. Họ kiếm được rất nhiều tiền với kiến ​​thức rằng sẽ có một SNAFU được lên lịch trong tương lai xa.
Evan Plaice

57

Rằng bất cứ thứ gì khác ngoài việc chèn / sắp xếp bong bóng khá đơn giản là ma thuật đen tối.


Haha, tôi thích cái này, vì nó gần nhà. Sắp xếp nhanh hơn thời gian bình phương ?? Không thể nào!
Ross

Thật đáng ngạc nhiên khi các thuật toán sắp xếp đơn giản và rõ ràng nhất dường như một khi bạn có cảm giác mạnh mẽ về đệ quy và phân chia & chinh phục. Cho đến lúc đó, hầu hết trong số họ cảm thấy như ma thuật đen.
Brian

74
Tôi là một nhà nghiên cứu trong việc sắp xếp các thuật toán! Và họ VẪN cảm thấy như ma thuật đen tối.
SPWorley

14
Tôi đã từng có một dòng mã trong chương trình của mình dài và phức tạp và tôi không cảm thấy muốn phá vỡ nó hoặc giải thích nó (đó là một công thức chiếu sáng phức tạp), vì vậy tôi đã đặt nó trên một dòng và #define ' Nếu đó là DARK_MAGICK, và bình luận duy nhất là một cảnh báo chống lại việc cố gắng làm sáng tỏ những bí ẩn của phép thuật bóng tối
Alex

2
Bogosort là bí ẩn nhất trong tất cả.
Alex Beardsley

50

XML đó sẽ là một định dạng dữ liệu thực sự có thể tương tác và có thể đọc được của con người.


7
XML không phải là thuốc chữa bách bệnh nhưng tôi không muốn quay lại những ngày mà tôi thường thấy các ứng dụng cố gắng nén dữ liệu quan hệ vào các tệp csv.
Tony Edgecombe

4
đó là một cú pháp tương tác, không nghi ngờ gì về điều đó. Cú pháp của nó thường là khía cạnh ít quan trọng nhất của bất kỳ giải pháp nào.
Simon Gibbs

2
+1, bạn cũng có thể thêm nhỏ và nhanh vào danh sách mong muốn.
MarkJ

1
Đúng nhưng là một cải tiến về csv và độ dài cố định trong đó không có tài liệu bạn bị vặn.
PeteT

7
Tôi yêu XML vì tiêu chuẩn hóa mà nó mang lại cho các định dạng dữ liệu và để xử lý chính xác các mã hóa ký tự. Tôi ghét những gì đôi khi được thực hiện bằng cách sử dụng XML, tuy nhiên.
Joachim Sauer

48

C ++ về bản chất là tốt hơn tất cả các ngôn ngữ khác.

Điều này tôi nhận được từ một người bạn vài năm trước tôi ở trường đại học. Tôi đã giữ nó trong một thời gian dài lúng túng (tôi đang đỏ mặt ngay bây giờ). Chỉ sau khi làm việc với nó được 2 năm hoặc lâu hơn trước khi tôi có thể nhìn thấy những vết nứt cho những gì chúng là.

Không ai - và không có gì - là hoàn hảo, luôn có chỗ để cải thiện.


5
"tốt hơn" sẽ mang lại cho bạn hàng tấn bình luận ít đáng ghét hơn. Nhưng tôi sẽ nói rằng nó là một trong những thứ nhanh nhất, linh hoạt, không có rào cản. Đó cũng là một điều khiến tuổi trẻ của bạn phải học nó một cách thích hợp, chỉ để thấy rằng bạn có thể làm ít nhiều cùng một ứng dụng. (mặc dù cần thêm một hoặc hai tấn than tạo ra điện) với java hoặc C #.
jpinto3912

@JP: Tôi hài lòng với lựa chọn từ ngữ của mình :)
Nhị phân nhị phân

Năng suất quan trọng hơn trong thế giới của các ứng dụng kinh doanh. tất nhiên, có một số ngóc ngách mà c ++ là bắt buộc và là lựa chọn duy nhất.
Shaw

7
Tôi luôn cho rằng C ++ tệ hơn ANSI C thẳng, đơn giản là vì loại rắc rối mà tôi thấy các lập trình viên C ++ gặp phải phức tạp hơn nhiều so với loại rắc rối mà tôi thấy các lập trình viên C gặp phải.
Nosredna

1
Trên thực tế, ngôn ngữ tốt hơn tất cả các ngôn ngữ khác là Common Lisp. C ++ không phải là xấu, mặc dù.
David Thornley

47

Tôi tin rằng việc tạo ra các chương trình sẽ giống hệt như những gì được dạy trong lớp ... bạn ngồi xuống với một nhóm người, giải quyết vấn đề, đưa ra giải pháp, v.v. Thay vào đó, thế giới thực là "Đây là vấn đề của tôi, tôi cần nó giải quyết, đi "và mười phút sau bạn nhận được một thứ khác, khiến bạn không có thời gian thực sự để lên kế hoạch cho giải pháp của mình một cách hiệu quả.


24
Tôi nghĩ đó gọi là cuộc sống.
Ngày Robin

9
hmmm .. đã đến lúc bạn bảo lãnh cho công ty đó ..
jpinto3912

8
@ jpinto3912: Không. Bởi vì công ty tiếp theo cũng sẽ là một phần của cuộc sống (xem bình luận trước đó).
Treb

42

Tôi nghĩ các mẫu thiết kế chính là tuyệt vời, khi chúng được giới thiệu trong một lớp CS. Tôi đã lập trình khoảng 8 năm như sở thích trước đó và tôi thực sự không có hiểu biết vững chắc về cách tạo ra sự trừu tượng tốt.

Các mẫu thiết kế cảm thấy như ma thuật; bạn có thể làm những thứ thực sự gọn gàng. Sau đó tôi phát hiện ra lập trình chức năng (thông qua Mozart / Oz, OCaml, sau đó là Scala, Haskell và Clojure), và sau đó tôi hiểu rằng nhiều mô hình chỉ là bản tóm tắt, hoặc độ phức tạp bổ sung, vì ngôn ngữ không đủ biểu cảm.

Tất nhiên hầu như luôn có một số kiểu mẫu, nhưng chúng ở cấp độ cao hơn trong các ngôn ngữ biểu cảm. Bây giờ tôi đã thực hiện một số mã hóa chuyên nghiệp trong Java và tôi thực sự cảm thấy đau đớn khi phải sử dụng một quy ước như khách truy cập hoặc mẫu lệnh, thay vì khớp mẫu và các hàm bậc cao hơn.


"nhiều mô hình chỉ là bản tóm tắt, hoặc độ phức tạp bổ sung, bởi vì ngôn ngữ không đủ biểu cảm." Tính biểu cảm chỉ đơn giản là mã soạn sẵn được gắn vào ngôn ngữ.
Không biết

4
Không đúng, làm thế nào để nồi hơi có công cụ hạng nhất thay vì giới hạn khả năng của một lập trình viên, như trong trường hợp các hàm bậc cao hơn. Lisps là ví dụ đẹp về điều này.
egaga

38

Trong vài năm đầu tiên tôi đã lập trình, tôi đã không bắt gặp rằng 1 Kbyte về mặt kỹ thuật là 1024 byte chứ không phải 1000. Tôi luôn cảm thấy hơi bối rối vì thực tế là kích thước của các tệp dữ liệu của tôi có vẻ hơi khác so với những gì tôi mong đợi là.


114
Các nhà sản xuất ổ cứng vẫn chưa bắt kịp ...
Michael Myers

10
@mmyer Tôi nghĩ bạn có nghĩa là nhà tiếp thị ổ cứng phải không? Hoặc là các ổ đĩa thực sự được xây dựng như vậy?
Instantsoup

16
Này, dừng việc ghét kibi đi. MeBi và KiBi ít nhất là unbambiguobus.
bzlm

21
Kilo có nghĩa là 1000, Mega có nghĩa là 1000000, Giga có nghĩa là 1000000000. Chính các nhà sản xuất RAM và hệ điều hành đã hiểu sai, không phải các nhà sản xuất ổ đĩa.
Đánh dấu tiền chuộc

39
Không ai sẽ làm điều đó? Nghiêm túc? Được rồi, tôi sẽ làm điều đó ... xkcd.com/394
Erik Forbes

36

Điều kiện đó kiểm tra như:

if (condition1 && condition2 && condition3)

được thực hiện theo thứ tự không xác định ...


15
Trong ngôn ngữ nào? Các ngôn ngữ như C / C ++, Java và Python đảm bảo rằng các điều kiện được đánh giá từ trái sang phải và việc đánh giá dừng lại ở điều kiện đầu tiên trả về sai. Đó là một phần của thông số ngôn ngữ. Tôi cho rằng hầu hết các ngôn ngữ khác đều đảm bảo như vậy.
Clint Miller

44
@Clint: Vâng, do đó "hóa ra là không chính xác".
bzlm

Vâng, cái này là mát mẻ. nó làm cho công cụ wrint như if (myList! = null && myList.Count> = 0) {do Stuff ();} dễ dàng hơn nhiều
Zack

4
trên thực tế, điều này phụ thuộc vào ngôn ngữ và & sẽ đánh giá tất cả các điều kiện (không phải phím tắt). Và tôi đã thấy nhiều người sử dụng And (&) trong VB thay vì AndAlso (&&)
Lucas

2
. . . Trên thực tế, nó cũng sẽ bị sập trong VB.net trừ khi bạn sử dụng bình luận của AndAlso re Lucas
Binary Worrier

35

Rằng lập trình của tôi sẽ nhanh hơn và tốt hơn nếu tôi thực hiện nó một mình.


Nhưng nó không thể xấu như Cặp- Lập trình :-) ngoại trừ có thể mã của bạn
Egg

33
Đó là tất cả phụ thuộc vào người khác. =)
JohnFx
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.