Một lập trình viên có năng lực có thể đưa ra thuật toán đường đi ngắn nhất của riêng mình không?


58

Tôi đang bị khủng hoảng niềm tin vào khả năng là một lập trình viên máy tính.

Hôm qua tôi đã cố gắng đưa ra thuật toán đường đi ngắn nhất của riêng mình cho một biểu đồ và sau vài giờ, tôi chỉ đơn giản ném vào khăn và học thuật toán của Dijkstra.

Đây có phải là điều mà một lập trình viên giỏi sẽ có thể "phát minh lại" trong vài giờ hay tôi không thực tế?

Ồ, ít nhất tôi đã có thể phát minh lại loại bong bóng: D


7
Một người đã làm UI trong 20 năm có lẽ sẽ gặp khó khăn trong việc tìm giải pháp cho một vấn đề từ một tên miền khác, trong một khoảng thời gian ngắn.
Coder

38
Tôi dành nhiều thời gian cho các trang web SE mang đến cho mọi người một cuộc khủng hoảng niềm tin tôi nghĩ! (Không phải đó là một điều xấu). Hạnh phúc trong cuộc sống là tìm thấy sự cân bằng hoàn hảo giữa chấp nhận những gì đang có và mong muốn thay đổi nó.
TrojanName

2
Tôi không thể tự sáng tạo lại, nhưng tôi cố gắng nhớ nó hoạt động như thế nào. hãy chắc chắn rằng bạn hiểu hoạt hình này: upload.wikimedia.org/wikipedia/commons/2/23/...
Gióp

6
@Brian Bi kịch của thiên tài địa phương. Bạn khó có thể trở thành người giỏi nhất ở bất cứ điều gì nữa.
Rei Miyasaka

7
một nhà khoa học máy tính giỏi nhưng không nhất thiết phải là lập trình viên máy tính hay kỹ sư phần mềm
Neil McGuigan

Câu trả lời:


118

Một lập trình viên giỏi nên nhận ra rằng một thuật toán tuyệt vời đã được viết để giải quyết vấn đề và không lãng phí thời gian để phát minh lại bánh xe.

Tôi nghi ngờ Dijkstra đã đưa ra thuật toán đường dẫn ngắn nhất trong vài giờ, vì vậy đó có vẻ như là một tiêu chuẩn thực sự cao để sử dụng để xác định xem ai đó có phải là một 'lập trình viên giỏi' không


25
@Nakilon - Các lập trình viên bỏ qua các giải pháp hiện có chỉ đang lãng phí thời gian của họ và nếu họ không lãng phí thời gian của họ, họ sẽ tạo ra một giải pháp tồi tệ hơn. Xem: Mọi người thực hiện kế hoạch băm mật khẩu của riêng họ so với bcrypt.
Tái lập lại

10
@GSto: theo wikipedia, Dijkstra đã đưa ra thuật toán trong vòng chưa đầy một giờ: 20 phút, theo ghi chú đầu tiên trên wikipedia: en.wikipedia.org/wiki/Dijkstra%27s_alacticm
woliveirajr

9
Đó là một thuật toán đơn giản tương đối, nhưng Dijkstra rất tài năng, và đã được đào tạo về vật lý lý thuyết và toán học nâng cao. Không có gì giống như một vài năm viết bằng chứng để cải thiện khả năng thiết kế thuật toán của một người.
kevin cline

19
@woliveirajr - Chà, tôi chắc chắn rằng Newton đã mất cùng một khoảng thời gian để đưa ra các định luật về chuyển động. Sau khi nghĩ về nó trong 20 năm đầu tiên.
Rook

6
@Nakilon - Có, đó là lý do tại sao mọi người viết mọi thứ bằng C, vì nếu không, bạn chỉ là một lập trình viên, sử dụng ngôn ngữ cấp cao của người khác. Đợi đã, ý tôi là lắp ráp, nếu không thì bạn chỉ đang sử dụng ngôn ngữ cấp thấp của người khác. Đợi đã, ý tôi là lật công tắc để thay đổi mạch điện, nếu không bạn chỉ đang sử dụng bộ hướng dẫn của người khác. Hoặc bạn biết, bạn chỉ có thể sử dụng những gì đã có và làm việc để tạo ra một cái gì đó mới . Tại sao phải lãng phí thời gian để phát minh lại thuật toán của Dijkstra khi bạn có thể phát minh ra thứ gì đó mới, như một chương trình sử dụng nó?
Tái lập lại

54

Đây có phải là điều mà một lập trình viên giỏi sẽ có thể "phát minh lại" trong vài giờ hay tôi không thực tế?

Đầu tiên, có lẽ bạn đang nhầm lẫn lập trình với khoa học máy tính lý thuyết. Một lập trình viên tuyệt vời cần một nền tảng tốt trong khoa học máy tính nhưng anh ta không cần phải tuyệt vời. Dijkstra là tuyệt vời về khoa học máy tính.

Thứ hai, tôi mong mọi người có hiểu biết về đồ thị sẽ phát triển biểu đồ của riêng họ sau một chút suy nghĩ. Nhưng không phải là một thuật toán đường dẫn ngắn nhất. Thuật toán của Dijkstra nói riêng rất tinh vi. Một khi bạn hiểu nó, nó rõ ràng rõ ràng. Nhưng hầu hết mọi thứ là như vậy.

Bạn có thể có thể rút ra một số loại thuật toán đường dẫn ngắn nhất sau khi thử một số thứ và đưa ra ý tưởng một thời gian. Nhưng đừng thất vọng nếu điều đó mất hàng giờ, hoặc thậm chí vài ngày. Điều này là hoàn toàn OK và bình thường.

(Hãy cẩn thận: tốt, bạn sẽ có thể giải quyết vấn đề trong vài giờ nữa, nhưng điều này sẽ không mang lại thuật toán hoạt động ngay cả trên các biểu đồ khá nhỏ.)


56
Đừng lo lắng, nếu lực lượng vũ phu không hoạt động, bạn sẽ không sử dụng đủ.
Robbie

2
+1 để che giấu sự khác biệt giữa CS lý thuyết và lập trình. Lập trình là giải quyết vấn đề trong thế giới thực và CS có lý thuyết để hỗ trợ lập trình. Tuy nhiên, CS lý thuyết không phải là 100% thiết yếu trong lập trình hàng ngày của hầu hết mọi người.
Phil

17

Đây có phải là điều mà một lập trình viên giỏi sẽ có thể "phát minh lại" trong vài giờ hay tôi không thực tế?

Chắc chắn là không thực tế. Mọi người không chỉ "nghĩ ra" với các thuật toán trong một vài giờ. Phải mất rất nhiều nỗ lực và công việc. Để trích dẫn blog này :

Trong Lập trình Pearls, Bentley, trích dẫn Donald Knuth, nói rằng "Trong khi tìm kiếm nhị phân đầu tiên được xuất bản vào năm 1946, thì tìm kiếm nhị phân đầu tiên hoạt động chính xác cho tất cả các giá trị của n đã không xuất hiện cho đến năm 1962".

và phiên bản của Bentley cũng có vấn đề khi được triển khai cho các bộ lớn.

Hơn nữa, một lập trình viên giỏi biết những công cụ nào theo ý mình và khi nào nên sử dụng những công cụ đó. Bạn không nhận được thêm điểm cho sự độc đáo hoặc làm những điều khác biệt - bạn muốn nó hoạt động và hoạt động tốt.


1
BlackJack, tôi đã phải tham gia diễn đàn này để chỉ ra rằng Bentley không nói những gì bạn tuyên bố rằng anh ấy đã nói: Knuth đã nói điều đó, và Bentley đã trích dẫn anh ấy. Khi tôi đọc bình luận của bạn, tôi nghĩ rằng bạn đã đưa ra một quan điểm tốt, nhưng tôi thích xác minh các nguồn của tôi và chưa bao giờ nghe nói về Bentley. Tuy nhiên, tôi đã nghe nói về Knuth và có thể tin tưởng những gì anh ta nói. Vui lòng kiểm tra nguồn của bạn tốt hơn vào lần sau.
Richard

8
@Richard - Nhận xét là "Trong Lập trình Ngọc trai, Bentley nói .." Knuth là người đầu tiên nói, nhưng nguồn của tôi là Lập trình Ngọc trai, không phải TAoCP, vì vậy tôi đã viết những gì Bentley viết. Tôi không cho rằng Bentley là người khởi tạo - tôi chỉ trích dẫn những gì được nói trong cuốn sách. Rất nhiều tài liệu trong sách không được phát minh bởi chính các tác giả, vì vậy tôi không hiểu tại sao bạn lại thấy nó như vậy.
BlackJack

Bằng cách chỉ trích dẫn cho Bentley, bạn không thể nhận được tín dụng Knuth và, nếu tuyên bố của "Bentley" sai, bạn đặt Bentley vào vị trí đã tạo ra thông tin không chính xác, thay vì chỉ truyền bá thông tin đó. Nói đúng ra, bạn đã không nói những gì Bentley nói: nếu bạn có, bạn sẽ nói, "Bentley nói rằng Knuth nói rằng ...". Các trích dẫn được sử dụng tốt ở đây, nhưng nó được đưa ra khỏi bối cảnh mà nó đã được nói.
Richard

3
@Richard - Trích dẫn tôi đã liệt kê là trực tiếp từ blog, trích dẫn trực tiếp từ cuốn sách (theo nghĩa đen, tôi nghĩ đó là trang 57 của phiên bản đầu tiên). Nếu bạn có nhiều vấn đề với tuyên bố này, hãy liên hệ với tác giả của blog và yêu cầu anh ấy thay đổi nó.
BlackJack

1
@Richard và BlackJack: Cả hai bạn đều đúng, nhưng sự quy kết cho tác giả ban đầu làm tăng thêm uy tín và bối cảnh cho tuyên bố. Chỉnh sửa của tôi là đủ.
Steven Evers

9

Rất có khả năng là bạn sẽ không thể tìm ra giải pháp tốt hơn giải pháp bạn có thể chọn.

Xuất hiện với một thuật toán tốt hơn một thuật toán được coi là "tốt nhất" (trong trường hợp của bạn, ngắn nhất) là điều không phải ai cũng làm được. Có lẽ nó thậm chí không thể.

Một lập trình viên giỏi sẽ có thể hiểu logic đằng sau thuật toán và tại sao nó tốt hơn hay tệ hơn (hoặc đơn giản là không đủ cho vấn đề cụ thể đó) so với các thuật toán khác cố gắng giải quyết vấn đề tương tự.

(s) Anh ấy cũng có thể biết liệu đó có thực sự là cách tốt nhất để giải quyết vấn đề cụ thể đó không.

Dù sao, nếu bạn muốn thực hành, bạn vẫn có thể cố gắng viết bài thực hiện thuật toán cá nhân của mình, cố gắng giải quyết vấn đề bằng tâm trí của bạn. Nó có thể không phải là tốt nhất, nhưng đó là một thực hành tốt để giải quyết vấn đề.


6

Điều này nhắc nhở tôi về một cái gì đó tôi đọc về sự khác biệt giữa "công nghệ phần mềm" (cái mà tôi sẽ gọi là lập trình) và các ngành kỹ thuật khác. Nghĩ về nó, tôi nghĩ đó là cuốn sách Mẫu thiết kế ban đầu. Tôi chắc rằng ai đó ở đây có thể trích dẫn nó ra khỏi đỉnh đầu.

Dù sao, điểm (mặc dù không chính xác hướng đến thiết kế thuật toán) là các ngành kỹ thuật được mã hóa; không có kỹ sư dân sự nào có thể dành thời gian cố gắng phát minh lại I-tia, nhưng các lập trình viên làm điều đó mọi lúc. Vấn đề (và tôi nhận ra rằng tôi chỉ đơn thuần lặp lại tình cảm của nhiều người) là hành vi này là lãng phí và dễ bị lỗi, và phục vụ bản ngã nhiều hơn giải pháp.

Khoa học máy tính dẫn tôi đến lập trình, và tôi yêu cả hai. Tuy nhiên, tôi là một lập trình viên giỏi hơn nhiều so với nhà khoa học máy tính. Tôi sẽ không bao giờ buộc tội bạn là bất tài vì bạn không thể phát minh lại thuật toán của Dijkstra vào một buổi chiều. Tôi sẽ đặt câu hỏi về năng lực của bạn với tư cách là một lập trình viên nếu bạn không thể nhận ra một vấn đề có thể được giải quyết thông qua thuật toán đồ thị đường đi ngắn nhất.

Điều đó nói rằng, tôi tin rằng suy nghĩ về các thuật toán và cố gắng thiết kế và thực hiện những thuật toán mới là (có khả năng) thú vị và (hầu như) luôn mang tính hướng dẫn. Tôi chỉ cố gắng tách sạch thời gian CS của tôi khỏi thời gian lập trình. Đối với các lập trình viên, thời gian (đặc biệt là trả tiền) của chúng tôi tốt hơn dành cho việc giải quyết các vấn đề thực tế thay vì giải quyết vấn đề. Bên cạnh đó, thời gian CS hầu như luôn đè bẹp sự tự tin của tôi.


Thật trớ trêu ... bây giờ tôi có thể bình luận ở bất cứ đâu, tôi có nên xóa câu trả lời mang lại cho tôi đặc quyền đó không? Phải có một huy hiệu cho điều đó.
Keith Layne

Tuy nhiên - Có kỷ luật , nếu danh tiếng của bạn được tính toán lại, bạn sẽ bị giảm xuống còn 1.
ChrisF

Vâng, đó chính xác là quan điểm của tôi ... Tôi sẽ vượt lên và vượt ra ngoài kỷ luật tại thời điểm đó IMO. Nếu tôi chuyển đổi câu trả lời của mình thành nhận xét trước khi xóa, tôi có thể có tất cả ... Tôi đề xuất một huy hiệu mới có tên UberDisciplined cho bất kỳ thao tác xóa nào khiến bạn quay lại trạng thái người dùng hoàn toàn mới. :)
Keith Layne

3

Bạn sẽ không nhận thấy những điều tương tự như những người khác làm. Tôi nghĩ đó chỉ là một thực tế của cuộc sống mà chúng ta phải sống cùng. Phần lớn đến từ việc học thụ động của bạn và các mô hình tinh thần mà bạn đã phát triển như là kết quả của chúng.

Tôi biết một số lập trình viên rất thông minh và có năng lực, những người phải được dạy luật DeMorgan ở trường trước khi họ có thể làm điều đó một cách nhất quán. Tôi tình cờ tự mình tìm ra Thuật toán của Dijkstra (và tôi phải thừa nhận rằng tôi hơi tự hào về nó), nhưng tôi đã mất một thời gian rất dài cho đến khi tôi có thể hiểu được loại bong bóng.

Nổi tiếng hơn, Einstein, người mà bạn nghĩ sẽ là một chuyên gia về lý thuyết thắt nút, không thể buộc dây giày của mình cho đến khi ông khoảng mười tuổi.

Rất có thể là bạn đã vô tình phát minh lại nhiều thứ mà nhiều người khác sẽ không bao giờ nghĩ ra nếu không được dạy một cách rõ ràng.


3

Tôi cầu xin khác nhau cho những gì hầu hết các câu trả lời nói. Mặc dù tôi không mong muốn một lập trình viên ở bất kỳ cấp độ nào có thể tự mình đưa ra thuật toán của Dijkstra, tôi chắc chắn sẽ mong đợi anh ta đưa ra bất kỳ cách nào (hiệu quả hay không) để giải quyết vấn đề.

Ví dụ, bạn đã nói như một nhận xét phụ rằng bạn có thể tự mình đưa ra loại bong bóng. Tôi biết nó là thuật toán sắp xếp dễ hiểu nhất, nhưng bạn đã tìm ra cách giải quyết vấn đề và đó là điều tôi mong các lập trình viên có thể: tìm cách giải quyết vấn đề.

Tất nhiên, điều tra và tìm giải pháp được thực hiện bởi những người khác cũng có hiệu quả, nhưng điểm cực đoan đó là một anh chàng không nghĩ về bản thân mình và những chương trình của họ là một bản tóm tắt các tìm kiếm của Google.

Tôi nghĩ rằng tôi nghe có vẻ khắc nghiệt hơn tôi thực sự muốn, nhưng quan điểm của tôi là: Tôi mong muốn một lập trình viên đủ sáng tạo để đưa ra giải pháp cho một vấn đề, ngay cả khi giải pháp đó có lỗi hoặc lộn xộn.


Vì vậy, quay trở lại trường hợp của bạn, tôi không nghĩ bạn nên nghĩ ra thuật toán của Dijkstra, nhưng nếu bạn có khả năng viết một thuật toán để thử một vài khả năng và tìm ra con đường ngắn nhất mà không kết thúc trên một vòng lặp vô hạn, sau đó bạn đã được tôi chấp thuận.

(BTW sự chấp thuận của tôi được tính theo thứ tự quan trọng như một phiếu giảm giá rửa xe miễn phí.)


3
Tôi đồng ý rằng có, một lập trình viên có năng lực sẽ có thể đưa ra loại bong bóng hoặc tương đương. Nó thậm chí có thể là một cách sử dụng hiệu quả thời gian để thực sự thực hiện nó và thử nó, có lẽ chỉ để hiểu vấn đề tốt hơn. Nhưng tôi nghĩ cần phải nói rằng không lập trình viên có năng lực nào sẽ tiếp tục và thực sự sử dụng nó trong mã sản xuất. Làm điều đó là điều khiến khách hàng của bạn quay trở lại vào năm tới và phàn nàn rằng, bây giờ họ có nhiều dữ liệu để xử lý, thuật toán O (n!) Của bạn sẽ mất gấp đôi tuổi của vũ trụ để hoàn thành ...
Thomas Padron-McCarthy

Ai quan tâm nếu bạn có thể phát minh ra thuật toán, nếu bạn thậm chí không thể nhận ra khi nào nó hút? Tự phê bình cũng quan trọng đối với một lập trình viên như sự sáng tạo. Tôi thà làm việc với một lập trình viên nhanh chóng thừa nhận khi họ biết giải pháp của họ mất quá nhiều thời gian hoặc không chắc là tốt nhất, hơn là với một lập trình viên muốn sáng tạo lại mọi bánh xe vì điều đó làm bầm dập cái tôi của họ.
Rei Miyasaka

Tôi đồng ý ở cả hai điểm, nhưng tôi nghĩ chúng ta đang đo hai thứ khác nhau. Một là khả năng cho lập trình viên giải quyết vấn đề (điều mà tôi cho là thiết yếu). Khác là tự phê bình (tôi xem xét điều này cần thiết nhưng không phải để lập trình: cho cuộc sống) và khả năng đánh giá mã (rất mong muốn). Tôi cũng sẽ nói rằng các giải pháp mất mãi mãi không thực sự là giải pháp, phải không? ;)
Alpha

2

Có, anh ấy / cô ấy nên.

Nó có thể tương đương với đạo đức của loại bong bóng, nhưng tôi nghĩ một lập trình viên giỏi nên có thể đưa ra ít nhất một cái gì đó hoạt động, tuy nhiên nó không hiệu quả.

Không cần phải nói, nếu vấn đề cụ thể đó xuất hiện, một lập trình viên giỏi sẽ tìm kiếm trước nếu có một thư viện để làm điều đó cho anh ta, hoặc các thuật toán được xuất bản làm điều đó và dễ thực hiện.

Tất nhiên, nhiều nhiệm vụ lập trình ít khó khăn hơn nhiều và không phải ai cũng cần có khả năng giải quyết các vấn đề khó khăn như vậy. Nhưng bạn sẽ muốn có một người có suy nghĩ như vậy trong nhóm của mình, bởi vì bạn có thể có một số vấn đề cụ thể của dự án phức tạp mà bạn không thể dựa vào vô số nghiên cứu khoa học trước đây.


1

Đừng lo

Là một lập trình viên Perl, tôi hoàn toàn không bao giờ phát minh lại bánh xe. Đó là công việc của CPAN. Nếu có một thuật toán hoặc mô-đun đơn giản, được hỗ trợ tốt, chúng tôi sử dụng nó. Nếu không có một mô-đun tốt, thì chúng tôi phát minh ra bánh xe. Đó là một trong những điều tuyệt vời nhất về Perl.

Vì vậy, những gì tôi đang nói là đây:

  1. Tôi không khuyên bạn nên phát minh lại bánh xe nhưng khi bạn làm ...
  2. Cố gắng không hoàn toàn phát minh lại nó và ...
  3. Đừng lo lắng nếu bạn không thể làm điều đó. Đó là lý do tại sao chúng tôi có một cộng đồng lập trình :-).

Đó không phải là phát minh lại mà là giải quyết vấn đề nói chung. Nếu bạn không cố gắng tự mình phát minh ra mọi thứ, bạn sẽ không bao giờ cải thiện.
Nils

0

Lý thuyết đồ thị, và các thuật toán áp dụng cho nó, trông đơn giản trên bề mặt nhưng nhìn chung cách xa nó. Bạn sẽ nghĩ rằng việc hình thành các đồ thị không cắt ngang (mặt phẳng) là đơn giản, chẳng hạn, thoạt nhìn. Năm ngoái tôi đã xem xét sâu rộng vấn đề này (tính đồng nhất thông qua việc loại bỏ các sơ đồ con Kuratowski). Tôi có thể nói với bạn, từ kinh nghiệm đó, rằng những người viết các thuật toán này thường dành thời gian nghiên cứu tiến sĩ của họ để làm như vậy, và đôi khi nghiên cứu đó được thực hiện theo nhóm. Và như các nhà nghiên cứu , đó là trọng tâm làm việc duy nhất của họ trong khoảng thời gian đó. Thật không hợp lý khi nghĩ rằng các kỹ sư trên mặt đất của chúng ta có thể mong đợi điều tương tự. Như một người khác ở đây đã nói đúng, rõ ràng một cách rõ ràng một khi giải pháp đang ở trước mặt bạn. Đó dường như luôn luôn là trường hợp!


0

Đây có phải là điều mà một lập trình viên giỏi sẽ có thể "phát minh lại" trong vài giờ hay tôi không thực tế?

Tôi có thể nói rằng nếu bạn có thể phát minh ra một thuật toán cho một vấn đề nổi tiếng như Con đường ngắn nhất của riêng bạn, thì bạn là một lập trình viên tồi .

Điều đó có nghĩa là bạn đang bỏ qua khá nhiều lịch sử về vấn đề Đường dẫn ngắn nhất , đi từ thuật toán O (| V | ^ 4) được xuất bản năm 1955 sang thuật toán O (E + V log V) được xuất bản năm 1984 (là Dijkstra thuật toán với các cây Fibonacci). Bạn gần như đảm bảo sẽ làm tồi tệ hơn các thuật toán đã nghĩ ra. Tệ hơn nữa, có khả năng thuật toán của bạn có những khoảng trống hoặc lỗi khiến nó không chính xác. Ngoài ra, bạn gần như chắc chắn sẽ dành nhiều thời gian hơn để nghĩ ra thuật toán của mình, thực hiện nó và thử nghiệm nó so với thời gian sử dụng lại thuật toán hiện có.

Để lại việc thiết kế các thuật toán cho các nhà thiết kế thuật toán. Các lập trình viên là người tiêu dùng của kết quả của họ. Các lập trình viên kết hợp các thuật toán và đưa chúng vào làm việc với các nhiệm vụ trong thế giới thực. Một sĩ quan cảnh sát không cần phải có khả năng tái tạo luật để có thể làm việc, hoặc trở thành một sĩ quan tốt.

Tôi thậm chí còn khuyến khích bạn sử dụng các triển khai được thực hiện bởi các chuyên gia thay vì tự thực hiện các thuật toán cho bất kỳ thuật toán phức tạp vừa phải nào. Có nhiều khả năng là chính xác, rất có thể họ đã làm nó nhanh hơn bạn từng làm và nó giúp bạn tiết kiệm rất nhiều thời gian. Điều này đặc biệt đúng đối với các thuật toán mã hóa, bởi vì bạn nhận được nhu cầu bảo mật bổ sung, điều mà thường chỉ các chuyên gia mới có thể cung cấp cho bạn.


Các thuật toán mật mã dễ dàng xác minh việc thực hiện; các vectơ kiểm tra chính xác đã biết là một tá cho bất kỳ thuật toán được chỉ định công khai nào, và nó có đúng hay không. (Bạn có thể có được hiệu suất tối ưu với một thực hiện tùy chỉnh, nhưng nếu nó chỉ đúng, mà có thể được làm việc trên.) Các khó khăn là một phần trong mật mã học là những thứ như thế hệ số ngẫu nhiên, xử lý đúng đắn các phím liệu và bảng mở rộng quan trọng trong bộ nhớ, thích hợp xử lý đầu vào của người dùng (tạo muối, v.v.), lưu trữ thứ gì đó để cho phép bạn tìm hiểu xem dữ liệu được giải mã có hợp lệ hay không, v.v.
một CVn

Tôi đã suy nghĩ nhiều hơn về các cuộc tấn công thời gian, v.v., hầu như không có lập trình viên nào biết đến. Nó không phải luôn luôn là một vấn đề, nhưng dù sao cũng là một vấn đề quan trọng. Ngoài ra, kết hợp các nguyên thủy mã hóa thường không hoạt động như mong đợi, đây cũng là một phần khó khăn của bảo mật.
Alex ten Brink

Mặc dù các cuộc tấn công thời gian, vv chắc chắn là một mối quan tâm hợp lệ (và không chỉ trong mật mã học), tôi cho rằng tính nhạy cảm của việc triển khai đối với điều đó không ảnh hưởng đến tính chính xác của nó . Và có rất nhiều, nhiều cách để phạm lỗi trong cách mã hóa hơn là chỉ cho phép các cuộc tấn công thời gian. Bruce Schneier từng điều hành loạt Doghouse của mình ; Tôi đã không thấy bất cứ điều gì trong đó gần đây, nhưng có rất nhiều ví dụ cảnh báo ở đó. google.com/search?q=site%3Aschneier.com+%22the+doghouse%22
một CVn
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.