Chú thích mã nguồn với sơ đồ là nhận xét


14

Tôi viết rất nhiều mã (chủ yếu là c ++ và javascript) chạm vào hình học và đồ họa tính toán và các loại chủ đề đó, vì vậy tôi thấy rằng sơ đồ trực quan là một phần không thể thiếu trong quá trình giải quyết vấn đề.

Tôi đã xác định ngay bây giờ rằng "ồ, sẽ không tuyệt vời nếu tôi bằng cách nào đó có thể đính kèm một sơ đồ vẽ tay vào một đoạn mã như một nhận xét", và điều này sẽ cho phép tôi quay lại với một cái gì đó mà tôi đã làm việc, ngày, tuần, tháng sớm hơn và nhanh chóng tìm lại thuật toán của tôi.

Là một người học trực quan, tôi cảm thấy như thế này có khả năng cải thiện năng suất của tôi với hầu hết mọi loại lập trình bởi vì các sơ đồ đơn giản có thể giúp hiểu và suy luận về bất kỳ loại cấu trúc dữ liệu không tầm thường nào. Đồ thị chẳng hạn. Trong lớp lý thuyết đồ thị ở trường đại học, tôi chỉ có thể thực sự hiểu được các mối quan hệ đồ thị mà tôi thực sự có thể vẽ các biểu diễn sơ đồ.

Vì thế...

Không có IDE theo hiểu biết của tôi cho phép bạn lưu hình ảnh dưới dạng nhận xét vào mã.

Suy nghĩ của tôi là tôi hoặc người khác có thể đưa ra một số công cụ khá dễ sử dụng có thể chuyển đổi hình ảnh thành chuỗi nhị phân base64 mà sau đó tôi có thể chèn vào mã của mình.

Nếu quá trình chuyển đổi / chèn có thể được sắp xếp hợp lý, nó sẽ cho phép kết nối tốt hơn nhiều giữa sơ đồ và mã thực tế, vì vậy tôi không còn cần phải tìm kiếm theo thời gian qua sổ ghi chép của mình. Tuyệt vời hơn nữa: các plugin để IDE tự động phân tích cú pháp và hiển thị hình ảnh. Hoàn toàn không có gì khó khăn về điều này từ quan điểm lý thuyết.

Tôi đoán là tôi sẽ mất thêm thời gian để thực sự tìm ra cách mở rộng các IDE yêu thích của mình và duy trì các plugin này, vì vậy tôi hoàn toàn hài lòng với một loại bộ xử lý hậu mã sẽ thực hiện phân tích tương tự và kết xuất các hình ảnh và hiển thị chúng cạnh nhau với mã, bên trong trình duyệt hoặc một cái gì đó. Vì tôi là một lập trình viên javascript bằng thương mại.

Mọi người nghĩ gì? Bất cứ ai sẽ trả tiền cho điều này? Tôi sẽ. Nhưng có lẽ tôi cũng chỉ ra rằng bất kể tôi hoặc một số lượng đáng kể đồng nghiệp của tôi sẽ trả tiền cho điều đó, cách duy nhất một điều như vậy có khả năng thành công sẽ là thông qua một bản phát hành nguồn mở.


4
Một cách khác: Nhận xét trong một liên kết đến tệp hình ảnh cục bộ mở trong trình xem ảnh mặc định.
Thực phẩm điện tử cầm tay

Nỗi sợ lớn nhất của tôi sẽ là lạm dụng hệ thống. Chắc chắn nó bắt đầu với một sơ đồ có ý nghĩa đối với một thuật toán phức tạp, nhưng mất bao lâu cho đến khi ai đó tải lên các tài liệu đặc tả mỏng manh vào các bình luận cho lớp? Trước khi bạn biết điều đó, mọi thứ liên quan đến dự án + nhà phát triển đều được đưa vào các bình luận mã. Tất nhiên, bất kỳ hệ thống mạnh mẽ là mở để lạm dụng. Tôi nghĩ rằng nhu cầu là một phân khúc thích hợp, nhưng nếu bạn ở trong phân khúc đó thì đó sẽ là một công cụ rất hữu ích.
Snixtor

@ Hand-E-Food Đẹp! Một URL tệp trong một nhận xét hiển thị dưới dạng một liên kết có thể nhấp trong Xcode ngoài hộp. Khiếu nại duy nhất của tôi với điều này là dường như không thể tạo URL tệp đường dẫn tương đối, do đó, khía cạnh liên kết có thể nhấp sẽ bị phá vỡ (trong tất cả khả năng) khi chuyển đổi hệ thống.
Steven Lu

Bạn có thể quan tâm đến đồ thị hoặc cây
TehShrike

Tôi làm javadoc sẽ tạo ra HMTL, với hình ảnh. Hoặc SimpleDocBook, tài liệu riêng, dựa trên XML, người ta có thể / phải tham chiếu trong mã cho các quy tắc kinh doanh. Điều đó mang lại văn xuôi tốt đẹp, và bao quát hệ thống ra khỏi viễn cảnh của tất cả logic kinh doanh, thay vì phân phối các thành phần và lớp (lớp) phần mềm. Mỗi yêu cầu thay đổi, thêm mã với tham chiếu đến tài liệu + số phiên bản / số vé và tài liệu có danh sách các thay đổi + số vé. Điều đó làm việc vì phạm vi bảo hiểm đầy đủ của nó. Không chắc nó sẽ phù hợp với hoàn cảnh của bạn như thế nào.
Eggen

Câu trả lời:


6

Còn plugin Chèn hình ảnh cho Visual Studio thì sao?

Nếu bạn đang sử dụng một IDE khác và nó không hỗ trợ các hình ảnh nhúng hoặc bạn không có thời gian để mở rộng nó, vậy thì việc đặt một liên kết đến một hình ảnh trong các bình luận, trong khi hình ảnh sẽ nằm ở đâu đó trong kho lưu trữ ?


Điều đó thật tuyệt. Tôi sử dụng VS tại nơi làm việc vì vậy tôi có thể thử nó! Cảm ơn. Lưu hình ảnh vào repo và bằng cách nào đó liên kết nó chắc chắn là một cách để thực hiện điều này nhưng tôi khá chắc chắn rằng nó vẫn còn quá nhiều công việc kế toán để tôi thực hiện một cách đáng tin cậy. Tôi là một lập trình viên khá lười biếng.
Steven Lu

Lưu ảnh vào repo cũng sẽ hoạt động với hầu hết các phương pháp duyệt lại (ví dụ: giao diện web repo của VCS)
Steven Lu

4

Nếu bạn không phải là nghệ sĩ ASCII , bạn có thể sử dụng doxygen làm công cụ tài liệu cùng với dot / graphviz được tích hợp với nó.

Điều này cho phép viết mô tả văn bản của đồ thị và hiển thị chúng trong tài liệu.

Ví dụ, mô tả này:

digraph finite_state_machine {
    rankdir=LR;
    size="8,5"
    node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8;
    node [shape = circle];
    LR_0 -> LR_2 [ label = "SS(B)" ];
    LR_0 -> LR_1 [ label = "SS(S)" ];
    LR_1 -> LR_3 [ label = "S($end)" ];
    LR_2 -> LR_6 [ label = "SS(b)" ];
    LR_2 -> LR_5 [ label = "SS(a)" ];
    LR_2 -> LR_4 [ label = "S(A)" ];
    LR_5 -> LR_7 [ label = "S(b)" ];
    LR_5 -> LR_5 [ label = "S(a)" ];
    LR_6 -> LR_6 [ label = "S(b)" ];
    LR_6 -> LR_5 [ label = "S(a)" ];
    LR_7 -> LR_8 [ label = "S(b)" ];
    LR_7 -> LR_5 [ label = "S(a)" ];
    LR_8 -> LR_6 [ label = "S(b)" ];
    LR_8 -> LR_5 [ label = "S(a)" ];
}

ám chỉ như:

nhập mô tả hình ảnh ở đây


Thật là tuyệt! Bất kỳ công cụ hỗ trợ cho môi trường Java? Tôi không thể thấy bất cứ điều gì tương tự như hỗ trợ cho điều này trong Mojo này: graphviz-maven-plugin.bryon.us/dot-mojo.html . Tất cả những người khác cũng vừa có hỗ trợ cho các tệp .dot.
oligofren

2

Bạn có thể thử chế độ nghệ sĩ emacs. Nó sẽ làm nghệ thuật ascii chứ không phải hình ảnh, vì vậy nó có thể hoặc không phải là những gì bạn đang tìm kiếm. Đặc biệt, nếu IDE của bạn không làm phông chữ có chiều rộng cố định, nó sẽ không hữu ích. Là văn bản đơn giản, nó sẽ chơi rất độc đáo với kiểm soát phiên bản.

Đây là một screencast của chế độ nghệ sĩ đang được sử dụng, vì vậy bạn có thể có ý tưởng nếu bạn quan tâm hay không.

Để khởi động chế độ nghệ sĩ trong emacs, hãy thực hiện Alt-x, nhập chế độ nghệ sĩ và nhấn return. Nút chuột giữa đưa lên menu. Các keybindings để cắt và dán không phải là các cửa sổ bình thường theo mặc định, nhưng bạn có thể bật chế độ CUA để thay đổi điều đó.


Wow thật ... ấn tượng. Tôi thực sự có một vài nhận xét kiểu sơ đồ ASCII trong mã của tôi. Nó quá tốn thời gian. Tôi sẽ muốn sử dụng các công cụ tốt hơn vì công nghệ đã có sẵn. Đôi khi tôi đã từng viết mã bằng Vim nhưng những đoạn script nhận biết mã nào tôi đã bị thiếu so với các IDE thực sự. Nhưng cảm ơn vì đã chỉ cho tôi kỹ thuật học cũ này!
Steven Lu

Đến thăm một vài năm sau đó và tôi đã thu thập được một vài món quà Vim để hỗ trợ nhanh chóng lắp ráp sơ đồ hộp. cho dù đó là ký tự hộp ascii hoặc unicode, đây là một cách rất hay để tô điểm một số mã với các bình luận thú vị và hữu ích. Vim không đi kèm với bất kỳ thứ gì trong số đó.
Steven Lu

1

Mọi người nghĩ gì? Bất cứ ai sẽ trả tiền cho điều này? Tôi sẽ.

ZOMG, tôi phù hợp với một thể loại tương tự như bạn và sẽ thích một tính năng như vậy trực tiếp trong IDE.

Bây giờ tôi chỉ có xu hướng làm nhiều "nghệ thuật" ASCII như thế này:

// ******************************************************
// *v3            |e5          v4*           |e6      v6*
// *              |              *           |          *
// *              |              *           |          *
// *              |              *           |          *
// *              |              *           |p1        *
// *              |            e1*-----------~----------*
// *              |              *           |          *
// *              |              *           |          *
// *              |              *           |          *
// *              |              *           |          *
// *cen           |p0          v0*           |        v5*
// *--------------~--------------************************
// *e4            |              *           |e7        *
// *              |              *           |          *
// *              |              *           |          *
// *              |              *           |          *
// *              |              *           |p2        *
// *              |            e2*-----------~----------*
// *              |              *           |          *
// *              |              *           |          *
// *              |              *           |          *
// *              |              *           |          *
// *v2            |e3          v1*           |e8      v7*
// ******************************************************

Giá trị chính tôi tìm thấy là nhìn thấy các tên biến tương ứng với sơ đồ trực quan, đặc biệt là khi chúng tôi sử dụng các đường ngang phức tạp của các mắt lưới và như vậy cho các thuật toán lưới mới. Thủ thuật tạo đồ thị doxygen này được thể hiện trong một trong những câu trả lời là rất tuyệt - tôi nên thử nhiều hơn thế.

Có rất nhiều điều dễ dàng hơn để giao tiếp trực quan là tốt, thậm chí không nhất thiết phải sử dụng biểu đồ. Thí dụ:

nhập mô tả hình ảnh ở đây

... Hoặc điều này (so sánh thuật toán của tôi, tôi đang gọi "phân khu hook" với phân khu CC tiêu chuẩn như Pixar sử dụng):

nhập mô tả hình ảnh ở đây

Nó sẽ cung cấp cho mã rất nhiều ngữ cảnh để xem những gì các hoạt động này làm và cách chúng khác nhau bên trong mã bởi vì một số thứ được hiển thị tốt nhất một cách trực quan. Hình ảnh thực sự có thể chụp một ngàn từ.

Vì vậy, nó sẽ hoàn toàn mơ mộng đối với tôi khi có một IDE cho phép tôi xem mã và hình ảnh cạnh nhau, cho phép tôi nhúng hình ảnh vào mã nguồn.

Đặc biệt là khi chúng tôi phát minh ra các thuật toán mới, thật khó để tìm ra một cách hay để mô tả chúng rất chính xác (từ góc độ kỹ thuật, không chính xác là quan điểm người dùng) mà không đi vào các bước thuật toán của chúng vì không có gì để so sánh trực tiếp với chúng. Những loại hình ảnh trước và sau có xu hướng hoàn toàn hiển thị những gì bạn có thể mong đợi từ thuật toán ngay lập tức.

Một điều tôi mơ ước là một trình gỡ lỗi trực quan cho phép tôi lập trình nó để tôi có thể làm cho một số loại dữ liệu của mình xuất ra một hình ảnh vào trình gỡ lỗi, ví dụ, để xem kết quả một cách trực quan khi tôi bước qua mã và đảm bảo các thuật toán Tôi đang cố gắng phát minh đang hoạt động chính xác ở mọi bước và phù hợp với cách tôi vẽ nó ra giấy. Ví dụ: làm cho cấu trúc dữ liệu lưới của tôi xuất ra một hình ảnh được hiển thị trong cửa sổ xem trình gỡ lỗi - lý tưởng nếu tôi thậm chí có thể xoay chế độ xem và ngay lúc đó và ở đó.

Ngoài ra, khi làm việc trong các cơ sở mã quy mô rất lớn (hàng chục triệu LỘC) được viết bởi các nhóm lỏng lẻo với hàng ngàn plugin, đôi khi nó có thể là một cơn ác mộng khi tìm ra cách thực thi mã mà chúng tôi đang tìm kiếm để che giấu, plugin hiếm khi được sử dụng từ UI. Sẽ rất tuyệt vời trong những trường hợp đó nếu mã có thể nhúng một ảnh chụp màn hình thu nhỏ cho thấy cách thực sự gọi mã đó từ giao diện người dùng (đôi khi có thể bị lỗi thời, nhưng thường thì các UI không ổn định như vậy các phiên bản để hiển thị ảnh chụp màn hình cũ vô dụng).

Bất cứ ai sẽ trả tiền cho điều này? Tôi sẽ.

Vì vậy, dù sao, yeah, hoàn toàn! Tôi muốn cái đó!!!


1
Hình ảnh tuyệt vời và cảm ơn cho bài viết (mặc dù nó có thể là một nhận xét nhiều hơn là một câu trả lời)! Gần đây tôi đã quyết định nghỉ ngơi hoàn toàn khỏi các công cụ mô phỏng và đồ họa thú vị và xây dựng các công cụ gỡ lỗi và theo dõi thế hệ tiếp theo . Những gì bạn mơ ước rất giống với những điều tôi mơ ước ....
Steven Lu

1
@StevenLu Tôi thường mơ ước tạo ra loại IDE này mà bạn đang đề xuất với trình gỡ lỗi trực quan (mặc dù tôi đã nghĩ đến việc làm nó từ đầu vì tôi không thể tưởng tượng được một giải pháp plugin làm tốt cho trình gỡ lỗi). Nhưng vâng - tôi đoán câu trả lời đó là một loại bình luận ... nhưng tôi rất vui khi thấy người khác muốn điều đó. Đồng nghiệp của tôi trong quá khứ là những người giỏi công nghệ và toán học hơn - họ không hiểu lắm về mong muốn của tôi để giao tiếp mọi thứ một cách trực quan.

1
Có lẽ một cách giả khoa học để xem xét đó là hệ thống thị giác ở xa giao diện băng thông cao nhất mà chúng ta có, và mặc dù chúng ta chỉ có sẵn để sử dụng làm đầu vào, tích hợp sâu vào hệ thống thị giác truy cập bộ nhớ não cho phép các định dạng trực quan một lợi thế rõ ràng cho tài liệu và phổ biến các khái niệm trừu tượng. ... Cuối cùng, tôi đang làm việc trên một công cụ bất khả tri IDE (theo triết lý Unix) cho phép các ứng dụng được biên dịch để tự động tạo các biểu diễn trực quan có cấu trúc của các phần bên trong của nó để chúng ta có thể hiểu chúng.
Steven Lu

0

Âm thanh giống như một trường hợp sử dụng cho Lập trình biết chữ , nơi bạn có thể thêm sơ đồ và bất cứ điều gì vào tài liệu của bạn.


Tại sao các downvote?
Phục hồi Monica - M. Schröder

Tôi ủng hộ bạn. Đó là một quan sát rất tốt, những gì tôi đang thảo luận gần như hoàn toàn nằm dưới chiếc ô đó.
Steven Lu

1
Tôi cũng đánh giá thấp vì điều này thực sự không cung cấp câu trả lời. Anh ấy rõ ràng không muốn chuyển toàn bộ chương trình của mình sang phong cách lập trình biết chữ và ngay cả khi anh ấy đã làm, lập trình biết chữ chỉ là một cách tiếp cận để lập trình - điều đó không nhất thiết có nghĩa là sơ đồ và hình ảnh được hỗ trợ.
Timmmm

0

Doxygen cho phép bạn chèn hình ảnh vào các bình luận như thế này:

  /*! Here is a snapshot of my new application:
   *  \image html application.jpg
   */

Thật không may, có vẻ như không có IDE nào sẽ hiển thị những hình ảnh này theo dòng, nhưng tôi nghi ngờ rằng sẽ không quá khó để viết một phần mở rộng VSCode để làm điều đó chẳng hạn.

Tôi cũng đã tìm thấy một phần mở rộng VSCode đã hỗ trợ điều này với một nhận xét cú pháp khác . Điều này thực hiện thông qua một di chuột:

VSCode đang thêm một tính năng cho phép hình ảnh nội tuyến - "chèn mã" - nhưng dường như nó chưa sẵn sàng.

Đây là một ảnh chụp màn hình từ tiện ích mở rộng mẫu (mà tôi thực sự không thể tìm thấy - có lẽ chưa được phát hành vì API chèn mã chưa được phát hành)

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.