Bạn nghĩ gì về nguyên tắc đầu tiên của lập trình?


59

Tôi luôn thích tự hỏi mình "nguyên tắc đầu tiên của việc này là gì?" sau khi tôi học được những thứ cơ bản của một cái gì đó (ví dụ lập trình). Đó là một câu hỏi đầy cảm hứng, IMO, có thể buộc bạn phải suy nghĩ về (các) nguyên tắc quan trọng nhất đằng sau một cái gì đó, đặc biệt là một kỹ năng như lập trình.

Vì vậy, bạn nghĩ gì là nguyên tắc đầu tiên của lập trình? Tôi sẽ đưa ra câu trả lời của tôi dưới đây một chút sau.


Chúng tôi không nói về câu lạc bộ chiến đấu.
Công việc

Câu trả lời:


97
  1. KISS - Giữ cho nó đơn giản ngu ngốc
  2. DRY - Đừng lặp lại chính mình
  3. YAGNI - Bạn sẽ không cần nó

KISS nên giữ nó thông minh đơn giản. Lần đầu tiên bạn phải viết lại một đoạn mã lớn vì bạn không thiết kế thông minh và có thể mở rộng, bạn sẽ đồng ý với điều này. :)

8
Tôi nghĩ rằng KISS nên là "Giữ cho nó đơn giản, ngu ngốc!"
Dennis C

Tôi thực sự đang làm việc trên một bài đăng trên blog về việc hai người này là hai người gần gũi và thân thiết nhất với trái tim lập trình viên như thế nào và cùng lúc họ là một chút oxymoron như thường thì bạn sẽ cần phải chọn một người khác

10
Tôi cũng sẽ thêm YAGNI.

3
@Programmin Tool - Tôi không nghĩ "ngu ngốc" là thừa. Tôi nghĩ rằng nó truyền tải rằng chúng ta có xu hướng muốn "thông minh" và điều này biểu hiện là sự phức tạp không cần thiết. Như tôi thấy, "ngu ngốc" cố gắng nhắc nhở chúng ta về xu hướng này bằng cách giúp chúng ta nhớ những gì chúng ta nghĩ ban đầu là "thông minh" thường là không.
codekaizen

37

Viết mã như nếu đó là bạn sẽ phải duy trì mã đó.


Đây là một heuristic rất thực tế, 3x :)

19
Viết mã như thể một psycopath cầm rìu sẽ phải duy trì nó. FTFY.
Quên dấu chấm phẩy

10
... Và kẻ tâm thần cầm rìu biết bạn sống ở đâu.
CAD bloke

2
.. và anh ta vừa mài rìu ...
Roalt

1
... Và anh ấy đang làm việc bên cạnh bạn.
Broken_Window

29

Hãy lười biếng nhất có thể.


2
Một lần nữa, quá chung chung, IMO. Điều này đặt ra câu hỏi "Làm thế nào lười biếng là mức độ lười biếng thích hợp, thực sự?", Bởi vì rõ ràng "cẩu thả" là điều bạn không muốn trở thành.

Đây là một tham chiếu đến "Sự lười biếng, thiếu kiên nhẫn và Hubris" của perl

Vì vậy, chúng ta đang nói về loại lười biếng khác nhau? Tôi nghĩ bởi "lười biếng" Bob có nghĩa là "đừng bận tâm đến việc tổ chức mã của bạn trước khi nó bị rối": D

2
Quá chung chung. Tương tự như vậy, tất cả các biến và hàm sẽ là 1 chữ cái vì tôi 'quá lười' để gõ ra một cái gì đó có ý nghĩa. Tuy nhiên, giả sử tôi phải duy trì nó, thì có lẽ bạn đúng, vì tôi sẽ làm cho nó dễ bảo trì nhất có thể.
Kyle Ballard

3
@Kyle: Vâng, đó là điểm chính. "Sự lười biếng thực sự" đang khiến mọi thứ trở nên dễ dàng nhất đối với bản thân bạn cũng như trong tương lai. Mà hóa ra cũng giống như làm việc đúng cách. Nếu bạn làm ít hơn bây giờ nhưng làm việc nhiều hơn sau này, bạn sẽ không "lười biếng nhất có thể" :)

23

Zen, phần I: Lập trình chỉ là con đường, không phải con đường.

Lập trình chỉ là kỹ thuật để dạy cho máy tính những gì nó phải làm. Để thành công trong việc tạo ra phần mềm nhanh, đáng tin cậy có nghĩa là phải biết các thuật toán, thực tiễn tốt nhất của bạn và tất cả những thứ khác không nhất thiết phải được kết nối với Lập trình (ngôn ngữ) của bạn.

Zen, phần II: Nếu bạn đang vội, hãy đi bộ chậm rãi. Nếu bạn thực sự đang vội, hãy đi đường vòng.

Nghe có vẻ ngớ ngẩn, nhưng đừng để bản thân thỏa hiệp mà sau đó (thực sự) có thể gây rắc rối cho bạn sau đó. Tôi có một quy tắc: Nếu bạn là cốt lõi của một chương trình, hãy cố gắng chính xác và tốt nhất có thể. Nếu bạn đang sử dụng các phương thức từ cốt lõi nằm sâu trong phần mềm của mình, hãy thử mã hóa nhanh hơn. Nếu bạn đang viết mã trên hai cái này, bạn thậm chí có thể trở nên cẩu thả hơn một chút.

Lỗi thiết kế là khó tìm và / hoặc sửa lỗi nhất, bước tiếp theo là lỗi lập trình ở các bộ phận mà mọi người đều dựa vào, sau đó là "các phần mềm hiển thị thực sự". Nếu bạn cần sửa một lỗi thiết kế ở cuối dự án, ừm, điều đó không tốt ... ;-)

Zen, phần III: Biết con đường của bạn, Neo.

Biết môi trường, công cụ của bạn và những thứ bạn dựa vào hàng ngày và sắp xếp nó để nó phù hợp với bạn. Tốt nhất nếu bạn sử dụng "môi trường" lập trình của mình một cách tự nhiên đến mức bạn thậm chí không phải nghĩ về nó. Nếu bạn phải hoàn thành công việc, đừng giới thiệu "những thứ mới lạ mắt" mà hãy thực hiện công việc của bạn. Công cụ này có thể được giới thiệu trong một dự án mới, cụ thể là khi bạn có thời gian chuẩn bị và sử dụng nó.


Uh, và sau đó một lần nữa: Tôi đã đến vùng đất Zen trong khi nói về lập trình :)

@part III - không thêm "công cụ mới lạ mắt" trừ khi bạn được trả tiền để làm điều đó!
Jason

+1 cho tham chiếu Ma trận. Tôi là một người

19

KISS (giữ cho nó đơn giản, ngu ngốc).

Nó thực sự đặt ra câu hỏi "Làm thế nào để bạn xác định đơn giản?" Và cũng "Khi nào thì một cái gì đó quá đơn giản cho nhiệm vụ trong tay?" Đây là lý do tại sao bạn không thể trở thành một lập trình viên giỏi chỉ bằng cách biết nguyên tắc đầu tiên của lập trình.


Tôi nghĩ rằng đây là một quy tắc quá chung chung. Nó đặt ra câu hỏi "làm thế nào để bạn xác định" đơn giản ", thực sự".

3
và nếu bạn ngu ngốc, làm sao bạn biết nó đơn giản?
Steven A. Lowe

Đó là một điều tốt, Steven :)

1
"Đây là lý do tại sao bạn không thể trở thành một lập trình viên giỏi chỉ bằng cách biết nguyên tắc lập trình đầu tiên" - thích nó.

1
@Dima: bạn nói đúng, ý tôi là chất lượng và sự đơn giản (ít nhất là trong trường hợp này) đều không thể xác định được, nhưng chúng ta biết điều đó khi chúng ta nhìn thấy nó, nếu đôi mắt của chúng ta được đào tạo.
Quảng trường Adriano Varoli

18

Tối ưu hóa sớm là gốc rễ của mọi tội lỗi. - Donald Knuth


Cho dù trong việc thực hiện HOẶC thiết kế.

16

Đừng phát minh lại bánh xe.


Câu trả lời đúng cho câu hỏi liệu người ta có nên phát minh lại bánh xe luôn luôn là "nó phụ thuộc" hay không. Vì vậy, "không phát minh lại bánh xe" chỉ đi cho đến nay. Nó có thể phục vụ như một heuristic tốt hầu hết thời gian, nhưng không phải mọi lúc.

5
Một số "bánh xe" cần được phát minh lại.

Nói điều đó với Dunlop. Ông đã phát minh ra lốp khí nén. Nếu không phải là anh ta, phát minh lại bánh xe, chúng ta sẽ có một chuyến đi khá gập ghềnh.
Kibbee

3
Làm thế nào về: Chỉ phát minh lại bánh xe nếu lợi ích sẽ có giá trị chi phí
e.James

16

Hiểu vấn đề trước!


Ah, cuối cùng cũng có người với cái này. Bạn ca hôn, yagni, lau khô tất cả những gì bạn muốn. Thật vô ích nếu bạn lập trình một cái gì đó không có gì.

@ e-satis: Yeap, đó là những gì tôi nghĩ khi tôi trả lời lần đầu tiên. Tôi cuộn cho tất cả các câu trả lời và đáng ngạc nhiên không ai đăng trước đó.
OscarRyz

Câu trả lời tốt. Giờ và giờ bị lãng phí khi lập trình viên không hiểu đúng các yêu cầu đầy đủ của một vấn đề.
Steve Wortham

Vấn đề là: làm thế nào để bạn biết bạn hiểu vấn đề?
CamelCamelCamel

13

YAGNI - Bạn không cần nó . Ý tưởng đằng sau YAGNI là lập trình cho các yêu cầu của bạn, không phải cho các tính năng tiềm năng, tiềm năng. Tiền đề là bằng cách tuân thủ những gì bạn cần lập trình, bạn sẽ (trong số những thứ khác) cắt giảm sự phình to mã, giảm độ phức tạp, tránh creep tính năng và giảm các hạn chế về những gì có thể được thực hiện (và cách thực hiện) Tương lai.

Tôi cho rằng nó hoạt động song song với thiết kế mô-đun: Các tính năng trong tương lai có thể được tăng cường mà không cần thiết kế lại mã hiện có.


12

Biết khi nào không nên lập trình.


Điều này có nghĩa là gì?

Và khi nào vậy?

Đôi khi bạn cần giải quyết vấn đề người dùng theo cách khác - không chỉ viết mã giải pháp.

Sự phán xét và ra quyết định của con người là một phần của mọi thứ; đôi khi không có điểm nào trong việc cố gắng tự động hóa phán đoán.
S.Lott

1
Điều ông muốn nói là nhiều vấn đề lập trình có thể được giải quyết rẻ hơn và kịp thời hơn bằng cách mua các ứng dụng, thành phần hoặc thư viện.
Gordon Bell

11

Cà phê trong, mã ra.


3
Trà trong trường hợp của tôi =)

+1 hmm giống như "Cà phê trong, Mã + nhiều lần nghỉ?" :) Tôi yêu cả Cà phê và trà, tôi đu cả hai chiều ...
Darknight

10

Nếu nó không được thử nghiệm, nó đã bị hỏng.


Tôi đồng ý với điều đó

7

Có hai cách để xây dựng một thiết kế phần mềm: Một cách là làm cho nó đơn giản đến mức rõ ràng là không có thiếu sót, và cách khác là làm cho nó phức tạp đến mức không có thiếu sót rõ ràng. Phương pháp đầu tiên là khó khăn hơn nhiều.

- Charles Antony Richard Hoare


6
  1. Phân biệt giữa nguyên nhân và kết quả (làm việc với máy tính)

  2. Phân biệt giữa thực tế và ý kiến ​​(làm việc với mọi người)

  3. Càng đơn giản càng tốt, nhưng không đơn giản hơn (thiết kế)


5

Lập trình là một phương tiện không phải là kết thúc. Hoặc có lẽ, "Có thể không có nghĩa là nên."


5
  1. Hiểu lý do tại sao chương trình sẽ làm cho ai đó hạnh phúc (nếu không, tại sao bạn không ở ngoài chơi với tất cả những đứa trẻ khác?). (Người này có thể là bạn.)
  2. Phát triển một mô hình khái niệm về lĩnh vực kinh doanh nắm bắt tất cả sự phức tạp cần thiết, và không còn nữa.
  3. Phát triển một mô hình khái niệm về kiến trúc phần mềm , nắm bắt tất cả sự phức tạp cần thiết, và không còn nữa.
  4. Tàn nhẫn giữ tất cả sự phức tạp khác ra.

nói hay lắm! không thể đồng ý nhiều hơn
Antony

5

Theo tôi, nguyên tắc quan trọng nhất là giảm độ phức tạp bằng cách tạo ra sự trừu tượng tốt .

Điêu nay bao gôm

  • hiểu vấn đề cần giải quyết,
  • thiết kế một giải pháp thích hợp cho nó và
  • thực hiện nó
  • tốt nhất là theo cách giữ cho mã dễ hiểu và có thể duy trì được,

nhưng cũng xác định điểm dừng tạo trừu tượng và đi xuống các thuộc tính cơ bản của các công nghệ triển khai (ví dụ: hệ thống cơ sở dữ liệu, ngôn ngữ lập trình) để ngăn chặn việc tạo ra sự phức tạp bổ sung có thể tránh được.


4

Chương trình với một khán giả trong tâm trí. Do đó, đừng cho rằng bất cứ điều gì bạn viết sẽ không được đọc và duy trì bởi bạn hoặc người khác.

Một hệ quả tất yếu: Chứng minh rằng bạn hiểu vấn đề bạn đang cố gắng giải quyết bằng cách đặt tên cho các biến và hàm và các lớp của bạn thật tốt!


4

nó không hoạt động cho đến khi bạn cho thấy nó trong một thử nghiệm


6
Điều đó không đúng, tôi đã viết hàng tấn mã hoạt động và không được kiểm tra! : D

1
"Tôi chưa kiểm tra nó, tôi chỉ chứng minh rằng nó đúng" :)
Daniel Daranas

4

Suy nghĩ trước, mã sau.

Bạn không ở đâu thông minh như bạn nghĩ. Hỏi câu hỏi. Học cách coi trọng đồng nghiệp của bạn.

Khi gỡ lỗi, câu trả lời đầu tiên sẽ luôn luôn sai.

Mã bạn viết với ý định tung ra có xu hướng trở thành nền tảng của các quy trình lớn hơn nhiều. Không bao giờ để lại bất cứ điều gì viết ngớ ngẩn.


3

Bất kỳ vấn đề có thể được giải quyết với một lớp cảm ứng khác.


Trên thực tế, việc có quá nhiều chỉ dẫn là một vấn đề đang chờ được xác định và giải quyết. Vì vậy ..

giải quyết ... bằng một lớp gián tiếp khác! =)
Erik Forbes

Thật kỳ lạ, nó đúng. Nhìn vào mùa xuân ...


3

Nguyên tắc: Phần mềm là nắm bắt kiến ​​thức .

Hậu quả: Nhiều kỹ thuật biểu diễn tri thức, tất cả được thành lập trên Trừu tượng . Cung cấp cho chúng tôi các lớp, tầng, đóng gói, tách các mối quan tâm.

Nhiều kỹ thuật để biểu diễn thủ tục, tất cả được thành lập trên Trình tự , Lựa chọn , Lặp lại .



3

Luôn viết mã như thể người sẽ duy trì nó là một kẻ giết người hàng loạt tâm thần, người biết bạn sống ở đâu

Ngoài ra, đừng bao giờ nghĩ rằng bạn biết mọi thứ về lập trình, hãy tiếp tục học hỏi


2

Tôi tham gia lập trình bằng cách nghiên cứu thiết bị điện tử kỹ thuật số, vì vậy tôi đoán đối với tôi các cổng logic cơ bản (không, và, hoặc, xor, ngụ ý) là những nguyên tắc đầu tiên của lập trình.



2

Rác vào - Rác ra Không quan trọng giao diện người dùng của bạn đẹp như thế nào nếu dữ liệu xấu.


2

DRY, khá nhiều thứ khác sinh ra từ nó. KISS là kết thúc khác của hành động cân bằng để đảm bảo bạn không theo đuổi sự thanh lịch của phần mềm đến mức độ điên rồ.


2

Bắt đầu với đầu ra và làm việc lạc hậ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.