Discussion:
Narzędzia do wizualizacji systemów Embedded
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
Maciek Godek
2021-03-24 11:15:58 UTC
Permalink
Hej,
mam pytanie,
czy znacie jakieś narzędzia do wizualizacji/wizualne środowiska programistyczne/notacje wizualne do projektowania systemów wbudowanych?

Pytanie jest ogólne w tym sensie, że nie mam bardzo konkretnych oczekiwań. Ideałem byłoby jakieś narzędzie, albo przynajmniej standardowa notacja, w której wizualnie opisuje się przepływ danych pomiędzy urządzeniami, oraz ewentualnie schematy działania samych urządzeń (np. w postaci grafu przejść stanów). Gdyby z tego dało się wygenerować działający kod (np. dla jakiejś rodziny urządzeń), to byłoby super, ale jeśli nie, to sama ustandaryzowana notacja byłaby wartościowa.

Znacie coś takiego?
heby
2021-03-24 12:33:57 UTC
Permalink
Post by Maciek Godek
wizualnie opisuje się przepływ danych pomiędzy urządzeniami, oraz ewentualnie schematy działania samych urządzeń (np. w postaci grafu przejść stanów).
Narzędzia tego typu występują w językach HDL, ale przypuszczam że to nie
jest odpowiedż na pytanie dotyczące embedded tak jak myślisz.
Adam M
2021-03-24 16:28:27 UTC
Permalink
Post by Maciek Godek
Hej,
mam pytanie,
czy znacie jakieś narzędzia do wizualizacji/wizualne środowiska programistyczne/notacje wizualne do projektowania systemów wbudowanych?
Pytanie jest ogólne w tym sensie, że nie mam bardzo konkretnych oczekiwań. Ideałem byłoby jakieś narzędzie, albo przynajmniej standardowa notacja, w której wizualnie opisuje się przepływ danych pomiędzy urządzeniami, oraz ewentualnie schematy działania samych urządzeń (np. w postaci grafu przejść stanów). Gdyby z tego dało się wygenerować działający kod (np. dla jakiejś rodziny urządzeń), to byłoby super, ale jeśli nie, to sama ustandaryzowana notacja byłaby wartościowa.
Znacie coś takiego?
Nie jestem pewien czy jest to czego szukasz ale jest to napewno narzedzie wizualne: Matlab/Simulink - niestety cena jest zaporowa (chyba ze mozesz dostac licencje studencka) - my w naszej firmie placimy za jedna licencje w potrzebnej nam konfiguracji prawie $17000
Maciek Godek
2021-03-24 19:33:37 UTC
Permalink
Post by Adam M
Post by Maciek Godek
Hej,
mam pytanie,
czy znacie jakieś narzędzia do wizualizacji/wizualne środowiska programistyczne/notacje wizualne do projektowania systemów wbudowanych?
Pytanie jest ogólne w tym sensie, że nie mam bardzo konkretnych oczekiwań. Ideałem byłoby jakieś narzędzie, albo przynajmniej standardowa notacja, w której wizualnie opisuje się przepływ danych pomiędzy urządzeniami, oraz ewentualnie schematy działania samych urządzeń (np. w postaci grafu przejść stanów). Gdyby z tego dało się wygenerować działający kod (np. dla jakiejś rodziny urządzeń), to byłoby super, ale jeśli nie, to sama ustandaryzowana notacja byłaby wartościowa.
Znacie coś takiego?
Nie jestem pewien czy jest to czego szukasz ale jest to napewno narzedzie wizualne: Matlab/Simulink - niestety cena jest zaporowa (chyba ze mozesz dostac licencje studencka) - my w naszej firmie placimy za jedna licencje w potrzebnej nam konfiguracji prawie $17000
Simulinka ogólnie kojarzę ze studiów, ale z tego co pamiętam, służył chyba przede wszystkim do modelowania systemów analogowych?

Ja się bardziej zastanawiałem nad czymś do modelowania złożonych systemów komunikujących się za pomocą różnych protokołów (ale głównie protokołów przesyłających jakieś informacje cyfrowe, czyli np. modbus, bluetooth itd.).

Chodzi przede wszystkim o narzędzie do projektowania i komunikowania takich systemów w zespole; kwestia generowania kodu jest mniej istotna.

Trochę się zastanawiałem nad UMLem. Jak na to patrzyłem lata temu, wydawał się przerostem formy nad treścią, choć być może są w nim jakieś elementy, które można by było wykorzystać.

Swego czasu udokumentowałem na diagramie architekturę jednego z systemów, które zbudowałem, ale jak to pokazałem koleżance, która była największym ekspertem od UMLa, jakiego znam (pracowała w zespole z jednym z autorów tej książki: https://helion.pl/ksiazki/jezyk-uml-2-0-w-modelowaniu-systemow-informatycznych-stanislaw-wrycza-bartosz-marcinkowski-krzysztof,juml2.htm#format/d), to powiedziała, że znane jej diagramy UMLa nie są w stanie uwzględnić tych aspektów, które zawarłem w swoim diagramie.

Diagram mniej więcej tak wyglądał: Loading Image...

Strzałki wyrażają przepływ danych, a linie przerywane -- "relację korespondencji" pomiędzy wewnętrzną reprezentacją, a "zewnętrznymi" urządzeniami.
Kółko ze strzałką symbolizuje natomiast to, że dany byt jest wątkiem.
Maciej Sobczak
2021-03-25 15:41:11 UTC
Permalink
Post by Maciek Godek
Diagram mniej więcej tak wyglądał: https://github.com/panicz/writings/blob/master/archive/events-commands.png
Na moje oko to jest deployment diagram. Tzn. nie ma na tym diagramie nic, czego nie dałoby się pokazać na standardowym dep-diag ("schemat wdrożenia"?), modulo oczywiście notacja.

https://en.wikipedia.org/wiki/Deployment_diagram
--
Maciej Sobczak * http://www.inspirel.com
Maciek Godek
2021-03-25 16:18:29 UTC
Permalink
Post by Maciej Sobczak
Post by Maciek Godek
Diagram mniej więcej tak wyglądał: https://github.com/panicz/writings/blob/master/archive/events-commands.png
Na moje oko to jest deployment diagram. Tzn. nie ma na tym diagramie nic, czego nie dałoby się pokazać na standardowym dep-diag ("schemat wdrożenia"?), modulo oczywiście notacja.
https://en.wikipedia.org/wiki/Deployment_diagram
Może czegoś nie rozumiem, ale z tego co rozumiem, deployment diagram wymienia jedynie komponenty wymagane do wdrożenia i ewentualnie zależności między nimi.
U mnie są wątki, struktury, urządzenia i relacje korespondencji między strukturą a rzeczywistym bytem.

Być może wszystko "da się pokazać" na UMLowym diagramie, ale wydaje mi się, że w pewnej mierze wynika to z tego, że zawsze można np. dorzucić komentarz.

Ja sobie myślę o schematach które by miały bardziej sformalizowaną czy zoperacjonalizowaną semantykę.
Maciej Sobczak
2021-03-26 16:16:28 UTC
Permalink
Post by Maciek Godek
Post by Maciej Sobczak
https://en.wikipedia.org/wiki/Deployment_diagram
Może czegoś nie rozumiem, ale z tego co rozumiem, deployment diagram wymienia jedynie komponenty wymagane do wdrożenia i ewentualnie zależności między nimi.
A Twój diagram pokazał coś innego?
Post by Maciek Godek
U mnie są wątki, struktury, urządzenia i relacje korespondencji między strukturą a rzeczywistym bytem.
No właśnie to wszystko ma swoje miejsce w dep-diag. Z powyższej strony:

"what hardware components ("nodes") exist (e.g., a web server, an application server, and a database server), what software components ("artifacts") run on each node (e.g., web application, database), and how the different pieces are connected (e.g. JDBC, REST, RMI)."

Nawet protokoły komunikacyjne można wskazać.
Post by Maciek Godek
Być może wszystko "da się pokazać" na UMLowym diagramie, ale wydaje mi się, że w pewnej mierze wynika to z tego, że zawsze można np. dorzucić komentarz.
Nie. Raczej z tego, że sam metamodel UML jest dość swobodny i można nawet tworzyć własne typy połączeń między elementami diagramu.
Post by Maciek Godek
Ja sobie myślę o schematach które by miały bardziej sformalizowaną czy zoperacjonalizowaną semantykę.
Ale nie da się mówić o sformalizowanej semantyce, jeśli diagram miałby być tylko obrazkiem. Formalizm widać dopiero w tym, jak ten obrazek jest dalej przetwarzany, a to zależy tylko od Ciebie. Napisz sobie skrypt przetwarzający diagram (generator kodu?), który robić coś konkretnego z połączeniami jakiegoś typu w diagramie i to będzie ten formalizm. UML jest frameworkiem do tworzenia takich procesów projektowych a nie kompletnym i zamkniętym rozwiązaniem.

Tu jest to ładnie wyjaśnione:

https://www.visual-paradigm.com/guide/uml-unified-modeling-language/uml-extexsibility-mechanism/

Chyba to co chcesz zrobić najłatwiej osiągnąć tzw. stereotypami. To nie są komentarze, tylko własne "typy" istniejących bytów, np. połączeń. Możesz mieć np. strzałkę między modułami w dep-diag z wymyślonym stereotypem "<<serial comms>>" i ta strzałka będzie (dla konsumenta diagramu, czy to człowiek, czy generator kodu) oznaczać komunikację łączem szeregowym. Itd. Wątek? Proszę bardzo: "<<active>>". Bo to nawet jest luźniejsze pojęcie, niż "<<thread>>", który wskazuje na istnienie OS a przecież w systemie wbudowanym nie musi go być.
W ten sposób można przerysować cały Twój diagram, z zachowaniem wszystkich informacji.
--
Maciej Sobczak * http://www.inspirel.com
Maciek Godek
2021-03-26 16:47:43 UTC
Permalink
Post by Maciej Sobczak
Post by Maciek Godek
Post by Maciej Sobczak
https://en.wikipedia.org/wiki/Deployment_diagram
Może czegoś nie rozumiem, ale z tego co rozumiem, deployment diagram wymienia jedynie komponenty wymagane do wdrożenia i ewentualnie zależności między nimi.
A Twój diagram pokazał coś innego?
Tak, wątki, struktury, urządzenia i relacje korespondencji między strukturą a rzeczywistym bytem
Post by Maciej Sobczak
Post by Maciek Godek
U mnie są wątki, struktury, urządzenia i relacje korespondencji między strukturą a rzeczywistym bytem.
"what hardware components ("nodes") exist (e.g., a web server, an application server, and a database server), what software components ("artifacts") run on each node (e.g., web application, database), and how the different pieces are connected (e.g. JDBC, REST, RMI)."
Nawet protokoły komunikacyjne można wskazać.
a wątki, struktury, urządzenia i relacje korespondencji między strukturą a rzeczywistym bytem?
Maciej Sobczak
2021-03-27 15:39:07 UTC
Permalink
Post by Maciek Godek
Post by Maciej Sobczak
A Twój diagram pokazał coś innego?
Tak, wątki, struktury, urządzenia i relacje korespondencji między strukturą a rzeczywistym bytem
To wszystko to są właśnie decyzje wdrożeniowe, które można pokazać na deployment diagram.
Post by Maciek Godek
Post by Maciej Sobczak
"what hardware components ("nodes") exist (e.g., a web server, an application server, and a database server), what software components ("artifacts") run on each node (e.g., web application, database), and how the different pieces are connected (e.g. JDBC, REST, RMI)."
Nawet protokoły komunikacyjne można wskazać.
a wątki, struktury, urządzenia i relacje korespondencji między strukturą a rzeczywistym bytem?
A czego nie zrozumiałeś z dotychczasowej wymiany na ten temat?
Mam Ci narysować Twój własny diagram?
--
Maciej Sobczak * http://www.inspirel.com
Adam M
2021-03-25 21:43:30 UTC
Permalink
Post by Maciej Sobczak
Post by Maciek Godek
Diagram mniej więcej tak wyglądał: https://github.com/panicz/writings/blob/master/archive/events-commands.png
Na moje oko to jest deployment diagram. Tzn. nie ma na tym diagramie nic, czego nie dałoby się pokazać na standardowym dep-diag ("schemat wdrożenia"?), modulo oczywiście notacja.
https://en.wikipedia.org/wiki/Deployment_diagram
--
Maciej Sobczak * http://www.inspirel.com
Tutaj wiecej podobnych przykladow
https://galaxy.hua.gr/~mara/publications/caine05.pdf
https://www.visual-paradigm.com/guide/uml-unified-modeling-language/what-is-deployment-diagram/
Ten pierwszy troche stary

A tutaj ciekawostka - nie na temat ale interesujace (diagramy w Pythonie) - z mojego punktu widzenia ma jedna dobra strone - latwe sledzenie zmian przez diff ;-)
https://shekhargulati.com/2020/04/21/software-architecture-diagrams-as-code/
Maciej Sobczak
2021-03-26 16:41:02 UTC
Permalink
A tutaj ciekawostka - nie na temat ale interesujace (diagramy w Pythonie) - z mojego punktu widzenia ma jedna dobra strone - latwe sledzenie zmian przez diff ;-)
https://shekhargulati.com/2020/04/21/software-architecture-diagrams-as-code/
Śledzenie zmian w diff to bardzo poważna zaleta, bo typowe narzędzia na tej części się spektakularnie wykładają. Co jest o tyle absurdalne, że motywacje do używania diagramów pojawiają się w projektach powyżej jakiegoś poziomu złożoności, gdzie dokładnie z tego samego powodu pojawiają się też potrzeby śledzenia historii zmian, czy w ogóle pracy zespołowej na wielu wersjach, itd. Czyli schemat działania jest taki:
- robimy duży projekt, więc zatrudniamy tabun ludzi
- mamy Git, Jenkins i co tam jeszcze, pierdylion branchów i pierdyliard wersji w każdym branchu
- merge'ujemy branche we wszystkich kierunkach
- jesteśmy już tak poważni, że kupujemy program do robienia diagramów...
- i dupa.

Diagram generowany kodem to dobry pomysł również z tego powodu, że można zrobić meta-modelowanie, czyli np. zrobić coś w pętli zamiast copy-paste (np. dużo podobnych bloczków).

Ale Python to i tak słaby wybór do takiej roboty. Lepszy byłby język o swobodniejszej składni, np. Wolfram albo od biedy Scheme. Tam można robić cuda bez ograniczeń ze strony istniejących reguł a tych w Pythonie jest zdecydowanie za dużo do takich zastosowań.
--
Maciej Sobcza * http://www.inspirel.com
Adam M
2021-03-26 21:57:18 UTC
Permalink
Post by Maciej Sobczak
A tutaj ciekawostka - nie na temat ale interesujace (diagramy w Pythonie) - z mojego punktu widzenia ma jedna dobra strone - latwe sledzenie zmian przez diff ;-)
https://shekhargulati.com/2020/04/21/software-architecture-diagrams-as-code/
- robimy duży projekt, więc zatrudniamy tabun ludzi
- mamy Git, Jenkins i co tam jeszcze, pierdylion branchów i pierdyliard wersji w każdym branchu
- merge'ujemy branche we wszystkich kierunkach
- jesteśmy już tak poważni, że kupujemy program do robienia diagramów...
- i dupa.
Zgadzam sie z kolega w 100% - najlepszy przyklad z brzegu merge Simulink models - trzeba uzywac ich narzedzia bo normalny diff nic nie potrafi zrobic - a narzedzie od MATLAB/Simulink "sucks"
Post by Maciej Sobczak
Diagram generowany kodem to dobry pomysł również z tego powodu, że można zrobić meta-modelowanie, czyli np. zrobić coś w pętli zamiast copy-paste (np. dużo podobnych bloczków).
Ale Python to i tak słaby wybór do takiej roboty. Lepszy byłby język o swobodniejszej składni, np. Wolfram albo od biedy Scheme. Tam można robić cuda bez ograniczeń ze strony istniejących reguł a tych w Pythonie jest zdecydowanie za dużo do takich zastosowań.
Na bezrybiu i rak ryba ;-)
Post by Maciej Sobczak
--
Maciej Sobcza * http://www.inspirel.com
Roman Tyczka
2021-03-27 10:46:49 UTC
Permalink
Post by Maciej Sobczak
A tutaj ciekawostka - nie na temat ale interesujace (diagramy w Pythonie) - z mojego punktu widzenia ma jedna dobra strone - latwe sledzenie zmian przez diff ;-)
https://shekhargulati.com/2020/04/21/software-architecture-diagrams-as-code/
- robimy duży projekt, więc zatrudniamy tabun ludzi
- mamy Git, Jenkins i co tam jeszcze, pierdylion branchów i pierdyliard wersji w każdym branchu
- merge'ujemy branche we wszystkich kierunkach
- jesteśmy już tak poważni, że kupujemy program do robienia diagramów...
- i dupa.
Diagram generowany kodem to dobry pomysł również z tego powodu, że można zrobić meta-modelowanie, czyli np. zrobić coś w pętli zamiast copy-paste (np. dużo podobnych bloczków).
Ale Python to i tak słaby wybór do takiej roboty. Lepszy byłby język o swobodniejszej składni, np. Wolfram albo od biedy Scheme. Tam można robić cuda bez ograniczeń ze strony istniejących reguł a tych w Pythonie jest zdecydowanie za dużo do takich zastosowań.
Może to:

https://plantuml.com/
--
pzdr
Roman
Maciej Sobczak
2021-03-27 15:51:30 UTC
Permalink
Post by Roman Tyczka
https://plantuml.com/
Super. To jest właśnie prosta składnia, niezaśmiecona regułami istniejącego języka (jak Python), który powstał zupełnie w innym celu.
Podoba mi się strzałka jako infix operator, tak to właśnie powinno wyglądać. A -> B i wiadomo o co chodzi.

Skoro już rzucamy przykładami, to jakiś czas temu udało mi się popełnić takie narzędzie, chociaż notacje UMLopodobne nie były priorytetem. Chodziło bardziej o programowalny layout, czyli ustalenie, jakie są względne relacje "geograficzne" między elementami dowolnego diagramu:

http://inspirel.com/prodiams/

Cele te same, ale z założenia integruje się ze środowiskiem Wolframa, więc jest naturalnie programowalne.
--
Maciej Sobczak * http://www.inspirel.com
Maciej Sobczak
2021-03-24 17:30:08 UTC
Permalink
Post by Maciek Godek
czy znacie jakieś narzędzia do wizualizacji/wizualne środowiska programistyczne/notacje wizualne do projektowania systemów wbudowanych?
Systemy wbudowane nie mają w sobie niczego szczególnego, co by wymagało specjalnych narzędzi do ich wizualizacji.
Jeśli spojrzysz na taki system z perspektywy "urządzeń" i przepływu danych między nimi, to pewnie nawet jakiś pakiet do projektowania kanalizacji w budynkach byłby odpowiedni. A jeśli chodzi o perspektywę software'ową, to fakt, że to są systemy wbudowane znowu niczego nie zmienia - ot, software, jak każdy inny. Graf przejść stanów? Kiedyś do tego służył UML.
Post by Maciek Godek
Pytanie jest ogólne w tym sensie, że nie mam bardzo konkretnych oczekiwań.
Naostrzony ołówek o twardości B, gumka i trochę kartek (zależnie od doświadczenia).
Post by Maciek Godek
Gdyby z tego dało się wygenerować działający kod
Znacie coś takiego?
https://www.ansys.com/products/embedded-software/ansys-scade-suite

Ale to kosztuje tyle kasy, że to już nie jest inżynieria, tylko polityka.

Ale, ale. Dlaczego chcesz *generować* kod? Co chcesz przez to zyskać?
--
Maciej Sobczak * http://www.inspirel.com
Maciek Godek
2021-03-24 19:45:57 UTC
Permalink
Post by Maciej Sobczak
Post by Maciek Godek
czy znacie jakieś narzędzia do wizualizacji/wizualne środowiska programistyczne/notacje wizualne do projektowania systemów wbudowanych?
Systemy wbudowane nie mają w sobie niczego szczególnego, co by wymagało specjalnych narzędzi do ich wizualizacji.
Bardziej myślę w drugą stronę: czy systemy embedded nie są o tyle specyficzne, że dałoby się dla nich względnie łatwo stworzyć takie narzędzia.
(A przynajmniej dla pewnej klasy)
Post by Maciej Sobczak
Jeśli spojrzysz na taki system z perspektywy "urządzeń" i przepływu danych między nimi, to pewnie nawet jakiś pakiet do projektowania kanalizacji w budynkach byłby odpowiedni. A jeśli chodzi o perspektywę software'ową, to fakt, że to są systemy wbudowane znowu niczego nie zmienia - ot, software, jak każdy inny. Graf przejść stanów? Kiedyś do tego służył UML.
No maszyny stanów to wiadomo.
Tutaj bardziej mi chodzi o coś w rodzaju przepływu informacji/zdarzeń.
Post by Maciej Sobczak
Post by Maciek Godek
Pytanie jest ogólne w tym sensie, że nie mam bardzo konkretnych oczekiwań.
Naostrzony ołówek o twardości B, gumka i trochę kartek (zależnie od doświadczenia).
To rozumiem w warstwie narzędziowej.
Ale mnie raczej interesuje język. (Ołówek i kartki umożliwiają też np. tworzenie opisów w języku francuskim, albo pseudokodu. Bardzo elastyczne narzędzia i cenię je sobie, ale to nie o to idzie).
Post by Maciej Sobczak
Post by Maciek Godek
Gdyby z tego dało się wygenerować działający kod
Znacie coś takiego?
https://www.ansys.com/products/embedded-software/ansys-scade-suite
O, to wygląda ciekawie.
Post by Maciej Sobczak
Ale to kosztuje tyle kasy, że to już nie jest inżynieria, tylko polityka.
Popatrzę sobie na youtube'y
Post by Maciej Sobczak
Ale, ale. Dlaczego chcesz *generować* kod? Co chcesz przez to zyskać?
Może nie tyle "chcę generować kod". Po prostu mam parę pomysłów, i interesowałoby mnie, czy ktoś je już jakoś realizował.
Mam też taki problem z "niewykonywalną dokumentacją", że nie znam jakichś dobrych sposobów, żeby ją przetestować, i że może się łatwo zdesynchronizować z rzeczywistością.
Maciej Sobczak
2021-03-25 15:54:12 UTC
Permalink
Post by Maciek Godek
Bardziej myślę w drugą stronę: czy systemy embedded nie są o tyle specyficzne, że dałoby się dla nich względnie łatwo stworzyć takie narzędzia.
Nie, bo jeśli patrzysz na te systemy jako na komunikujące się samodzielne węzły, to jest to normalny system rozproszony. To, że akurat mieści się w jednym pudełku a nie w serwerowni, nic nie zmienia. Moduł A komunikuje się z modułem B przy użyciu protokołu X. To działa w każdej skali.
Post by Maciek Godek
Tutaj bardziej mi chodzi o coś w rodzaju przepływu informacji/zdarzeń.
OK. Ale to też nie jest problem specyficzny dla embedów.
Jeżeli dla embedów miałoby coś być specyficznego, to raczej współzależności fizyczne, np. fakt posiadania jednego zasilacza, albo niezamierzone "protokoły komunikacyjne" jak interferencja elektromagnetyczna, albo np. zbieg okoliczności polegający na jednoczesnym przegrzaniu się. Ale to też można wyobrazić sobie w większej skali, np. w serwerowni.

Czyli nic specjalnego. Jeśli mowa jest o jakichkolwiek protokołach komunikacyjnych, to masz system rozproszony.
Post by Maciek Godek
Post by Maciej Sobczak
Ale, ale. Dlaczego chcesz *generować* kod? Co chcesz przez to zyskać?
Mam też taki problem z "niewykonywalną dokumentacją", że nie znam jakichś dobrych sposobów, żeby ją przetestować, i że może się łatwo zdesynchronizować z rzeczywistością.
To tylko przepychasz problem w inne miejsce. Diagramy też mają dokumentację w postaci adnotacji, czy innych wlepek tekstowych. Albo w postaci dokumentu Word o nazwie "Dokumentacja do diagramu 123.xyz.beta.docx". I to też może się rozjechać z rzeczywistością.

Jeżeli diagram służy do generowania kodu, to *nie* jest dokumentacją, tak samo jak kod źródłowy (który też służy do generowania czegoś) nie był dokumentacją.
--
Maciej Sobczak * http://www.inspirel.com
Maciek Godek
2021-03-25 16:30:35 UTC
Permalink
Post by Maciej Sobczak
Post by Maciek Godek
Bardziej myślę w drugą stronę: czy systemy embedded nie są o tyle specyficzne, że dałoby się dla nich względnie łatwo stworzyć takie narzędzia.
Nie, bo jeśli patrzysz na te systemy jako na komunikujące się samodzielne węzły, to jest to normalny system rozproszony. To, że akurat mieści się w jednym pudełku a nie w serwerowni, nic nie zmienia. Moduł A komunikuje się z modułem B przy użyciu protokołu X. To działa w każdej skali.
Tu możesz mieć rację.
Być może się przykleiłem do systemów wbudowanych bo to akurat w ich kontekście został sformułowany oryginalny problem.
Ale może być tak, że rozwiązanie mogłoby działać również poza tym kontekstem.
Post by Maciej Sobczak
Post by Maciek Godek
Tutaj bardziej mi chodzi o coś w rodzaju przepływu informacji/zdarzeń.
OK. Ale to też nie jest problem specyficzny dla embedów.
Jeżeli dla embedów miałoby coś być specyficznego, to raczej współzależności fizyczne, np. fakt posiadania jednego zasilacza, albo niezamierzone "protokoły komunikacyjne" jak interferencja elektromagnetyczna, albo np. zbieg okoliczności polegający na jednoczesnym przegrzaniu się. Ale to też można wyobrazić sobie w większej skali, np. w serwerowni.
No, ale z drugiej strony wydaje mi się, że jest sporo oprogramowania, w przypadku którego tworzenie tego rodzaju schematów nie ma większej wartości, bo których źródłem złożoności jest coś innego.

Takie w każdym razie mam doświadczenie w pracy nad swoimi różnymi edytorami: nawet nie mam pomysłu, jak mógłbym je sobie zwizualizować na tego rodzaju diagramie, ani co ta wizualizacja miałaby wnieść (bo problemy, z którymi się zmagam, są bardziej abstrakcyjne)
Post by Maciej Sobczak
Czyli nic specjalnego. Jeśli mowa jest o jakichkolwiek protokołach komunikacyjnych, to masz system rozproszony.
OK, w takim razie zmieniam tytuł wątku na "narzędzia do wizualizacji systemów rozproszonych" :)

Zna ktoś jakieś ciekawe?
Post by Maciej Sobczak
Post by Maciek Godek
Post by Maciej Sobczak
Ale, ale. Dlaczego chcesz *generować* kod? Co chcesz przez to zyskać?
Mam też taki problem z "niewykonywalną dokumentacją", że nie znam jakichś dobrych sposobów, żeby ją przetestować, i że może się łatwo zdesynchronizować z rzeczywistością.
To tylko przepychasz problem w inne miejsce. Diagramy też mają dokumentację w postaci adnotacji, czy innych wlepek tekstowych. Albo w postaci dokumentu Word o nazwie "Dokumentacja do diagramu 123.xyz.beta.docx". I to też może się rozjechać z rzeczywistością.
No, chyba że tego nie stworzysz. To wtedy tego nie ma, i nie może się rozjechać.
Post by Maciej Sobczak
Jeżeli diagram służy do generowania kodu, to *nie* jest dokumentacją, tak samo jak kod źródłowy (który też służy do generowania czegoś) nie był dokumentacją.
Dlaczego nie?
Maciej Sobczak
2021-03-26 16:26:16 UTC
Permalink
Post by Maciek Godek
OK, w takim razie zmieniam tytuł wątku na "narzędzia do wizualizacji systemów rozproszonych" :)
Zna ktoś jakieś ciekawe?
Deployment diagram? :-D
Post by Maciek Godek
Post by Maciej Sobczak
To tylko przepychasz problem w inne miejsce. Diagramy też mają dokumentację w postaci adnotacji, czy innych wlepek tekstowych. Albo w postaci dokumentu Word o nazwie "Dokumentacja do diagramu 123.xyz.beta.docx". I to też może się rozjechać z rzeczywistością.
No, chyba że tego nie stworzysz. To wtedy tego nie ma, i nie może się rozjechać.
Ale do tego nie potrzeba diagramów. Jest cała masa kodu źródłowego, którego dokumentacja nigdy się nie rozjeżdża, bo jej nie ma. Przepchnięcie problemu braku dokumentacji na inny poziom abstrakcji (albo do innej notacji na tym samym poziomie abstrakcji, bo to też się zdarza ludziom robić, patrz np. wyrażenie logiczne vs. schemat bramek logicznych - to jest ten sam ciul, chociaż mają różną wartość szpanu) tego problemu wcale nie rozwiązuje.
Post by Maciek Godek
Post by Maciej Sobczak
Jeżeli diagram służy do generowania kodu, to *nie* jest dokumentacją, tak samo jak kod źródłowy (który też służy do generowania czegoś) nie był dokumentacją.
Dlaczego nie?
https://en.wikipedia.org/wiki/Documentation
--
Maciej Sobczak * http://www.inspirel.com
Maciek Godek
2021-03-26 16:49:49 UTC
Permalink
Post by Maciej Sobczak
Post by Maciek Godek
Post by Maciej Sobczak
Jeżeli diagram służy do generowania kodu, to *nie* jest dokumentacją, tak samo jak kod źródłowy (który też służy do generowania czegoś) nie był dokumentacją.
Dlaczego nie?
https://en.wikipedia.org/wiki/Documentation
To nie jest uzasadnienie. To jest link do Wikipedii.

Pierwsze zdanie artykułu mówi:

"Documentation is any communicable material that is used to describe, explain or instruct regarding some attributes of an object, system or procedure, such as its parts, assembly, installation, maintenance and use"

Kod źródłowy jest komunikowalny i może być użyty do wyjaśnienia pewnych atrybutów systemu, więc nadal nie rozumiem.
Maciej Sobczak
2021-03-27 16:08:21 UTC
Permalink
Post by Maciek Godek
"Documentation is any communicable material that is used to describe, explain or instruct regarding some attributes of an object, system or procedure, such as its parts, assembly, installation, maintenance and use"
Kod źródłowy jest komunikowalny i może być użyty do wyjaśnienia pewnych atrybutów systemu, więc nadal nie rozumiem.
To jest pomysł tej samej warstwy społecznej, która wymyśliła "Working software over comprehensive documentation" i ogólnie tej grupy, która systematycznie nie jest w stanie zrobić sensownej dokumentacji, więc kombinuje jak by tu uzasadnić drobny fakt, że jej po prostu nie ma.

Kod źródłowy oczywiście, że może być komunikowalny. Ale nie jest w stanie wyjaśnić "dlaczego" ani "w jakim celu", czyli nie jest w stanie niczego uzasadnić. Właśnie do tego jest dokumentacja. Oczywiście można zrobić tak:

int maxNumberOfBananasThatTheCustomerXYZAskedForAtTheLastMeeting = 12345;

ale chyba rozumiemy, że taka nazwa to nie jest kod, tylko niewłaściwie użyty komentarz. Czyli dokumentacja. I się pewnie zaraz rozjedzie.
Można też tak:

int maxNumberOfBananas = 12345;

ale bez (rozjeżdżającej się) dokumentacji nie wiemy, dlaczego akurat tyle. A to może być bardzo ważne.
Zrobienie tego samego (w obu wersjach) na diagramie, który posłuży do automatycznego wygenerowania takiego kodu niczego nie zmienia, tylko przenosi problem w inne miejsce w procesie produkcyjnym.

Kod programu nie jest dokumentacją. Diagram może być ilustracją w dokumentacji, ale jeśli diagram służy do generowania kodu, to nie jest. Taki diagram nadal wymaga dokumentacji.
--
Maciej Sobczak * http://www.inspirel.com
Maciek Godek
2021-03-28 20:40:04 UTC
Permalink
Post by Maciej Sobczak
Post by Maciek Godek
"Documentation is any communicable material that is used to describe, explain or instruct regarding some attributes of an object, system or procedure, such as its parts, assembly, installation, maintenance and use"
Kod źródłowy jest komunikowalny i może być użyty do wyjaśnienia pewnych atrybutów systemu, więc nadal nie rozumiem.
To jest pomysł tej samej warstwy społecznej, która wymyśliła "Working software over comprehensive documentation" i ogólnie tej grupy, która systematycznie nie jest w stanie zrobić sensownej dokumentacji, więc kombinuje jak by tu uzasadnić drobny fakt, że jej po prostu nie ma.
int maxNumberOfBananasThatTheCustomerXYZAskedForAtTheLastMeeting = 12345;
ale chyba rozumiemy, że taka nazwa to nie jest kod, tylko niewłaściwie użyty komentarz. Czyli dokumentacja. I się pewnie zaraz rozjedzie.
int maxNumberOfBananas = 12345;
ale bez (rozjeżdżającej się) dokumentacji nie wiemy, dlaczego akurat tyle. A to może być bardzo ważne.
Zrobienie tego samego (w obu wersjach) na diagramie, który posłuży do automatycznego wygenerowania takiego kodu niczego nie zmienia, tylko przenosi problem w inne miejsce w procesie produkcyjnym.
Kod programu nie jest dokumentacją. Diagram może być ilustracją w dokumentacji, ale jeśli diagram służy do generowania kodu, to nie jest. Taki diagram nadal wymaga dokumentacji.
Nadal nie wyjaśniłeś dlaczego nie jest.
Najpierw jak zapytałem, to wkleiłeś link do artykułu na Wikipedii, który twierdzi, że dokumentacją jest wszystko, co służy do wyjaśnienia działania jakiegoś systemu.
Teraz drugi raz twierdzisz, że jeżeli diagram posłuży do wygenerowania kodu, to nagle w jakiś magiczny sposób przestaje być dokumentacją (co w świetle definicji z Wikipedii oznaczałoby, że nie może już służyć do rozumienia działania systemu, bo wówczas... byłby dokumentacją).

Z tego co widzę, swoje uzasadnienie opierasz na ad hominem względem jakiejś grupy ludzi, która kiedyś coś twierdziła, oraz na tym, że kod źródłowy nie dokumentuje wszystkich aspektów budowy i użytkowania systemów. No to teraz uważaj:
żadna dokumentacja nie dokumentuje wszystkich aspektów budowy i użytkowania systemów.

W szczególności, można znaleźć dużo dokumentacji, która również nie wyjaśnia, dlaczego albo w jakim celu danego komponentu systemowego można użyć. Weźmy pierwszy z brzegu przykład - podręcznik do funkcji "memcpy"

https://man7.org/linux/man-pages/man3/memcpy.3.html

Opisuje różne aspekty użycia funkcji `memcpy`, ale nie wyjaśnia, dlaczego ta funkcja powstała, ani w jakim celu się ją stosuje.

Nie zmienia to jednak faktu, że ta strona manuala jest dokumentacją. (Chyba że zaraz stwierdzisz, że nie jest)

Twój przykład z "niewłaściwie użytym komentarzem" może też pokazuje gdzie może leżeć źrodło nieporozumienia.
Bo nie wiem jak Ty, ale ja swoje komentarze do kodu źródłowego zazwyczaj trzymam w kodzie źródłowym.
One *są częścią* kodu źródłowego, i wyjaśniają rzeczy, których w samym języku programowania nie mógłbym wyrazić, albo tłumaczą, skąd się wzięły jakieś nieoczywiste rozwiązania.
Maciej Sobczak
2021-03-29 16:39:47 UTC
Permalink
Post by Maciek Godek
Nadal nie wyjaśniłeś dlaczego nie jest.
Myślałem, że wystarczy praca samodzielna.
Ideą, ktorą ja wyczuwam w tym artykule, jest odróżnienie dokumentacji od dokumentowanego obiektu. Wynika to nawet bezpośrednio z podanych tam przykładów.

A najbardziej wynika z paragrafu o dokumentacji w naszej branży:

https://en.wikipedia.org/wiki/Documentation#Documentation_in_computer_science

Kod źródłowy nie znajduje się na tej liście.
Post by Maciek Godek
Teraz drugi raz twierdzisz, że jeżeli diagram posłuży do wygenerowania kodu, to nagle w jakiś magiczny sposób przestaje być dokumentacją
Tak. Subtelne, prawda? To trochę kwestia kultury pracy i jest to miejsce na subiektywność.
Ja to widzę tak, że jeżeli coś jest bezpośrednio na ścieżce albo w łańcuchu transformacji artefaktów inżynierskich, to jest obiektem wymagającym dokumentacji a nie dokumentacją.
Zauważ (znowu, bo już o tym wspomniałem), że kod źródłowy to nie jest program, choć zawsze tak skrótowo o nim myślimy i mówimy. Kod źródłowy to jedynie konfiguracja dla generatora kodu dla niższej wartwy abstrakcji. I to nadal nie musi być program, bo jeśli kompilator generuje kod w asemblerze, to dalej z tego jest generowany kod obiektowy i to nadal nie jest program, bo trzeba to zlinkować i pozszywać symbole i to może dopiero jest program, który zostanie fizycznie wykonany przez komputer. Tak, w skrócie mówimy, że "napisałem program", ale to nie jest prawda, bo program dopiero powstanie. Później.
I jeżeli teraz chciałbyś w ten długi łańcuch kolejnych generacji z jednego w drugie dołożyć jeszcze jeden etap, np. model (w postaci diagramu), z którego zostanie wygenerowany kod źródłowy, z którego... itd., to coś się zmieniło w całej logice? Nic się nie zmieniło. I możesz dalej sobie coś dołożyć, np. meta-skrypt generujący takie modele z zadanej konfiguracji. I coś to zmienia? Dalej nic.
Bo na całym tym łańcuchu masz artefakty inżynierskie, które automatyzują proces powstania produktu końcowego. I *żaden* z tych artefaktów nie jest wtedy dokumentacją.

Bo gdyby był, to każdy z nich też by był. Ten asembler też. A to by było słabe, prawda? W tym sensie, że słowo "dokumentacja" straciłoby swój pierwotny sens.

Więc subtelne rozróżnienie jest właśnie w tym, czy coś jest na ścieżce automatycznej generacji ostatecznego produktu. Jeśli jest, to nie jest to dukumentacja, bo ta jest z definicji obok tej ścieżki.

Tak, wiem, że są ludzie, dla których kod źródłowy jest jednocześnie programem i dokumentacją. I dziełem sztuki. Bo przecież powstało dzieło.
Post by Maciek Godek
co w świetle definicji z Wikipedii oznaczałoby, że nie może już służyć do rozumienia działania systemu
No bo nie może. To, że coś pokazuje *jak* coś działa, nie znaczy, że pokazuje *dlaczego*. A to jest potrzebne do rozumienia.
Post by Maciek Godek
żadna dokumentacja nie dokumentuje wszystkich aspektów budowy i użytkowania systemów.
Bo nie musi. Natomiast kod źródłowy w ogóle niczego nie dokumentuje.
Post by Maciek Godek
https://man7.org/linux/man-pages/man3/memcpy.3.html
Opisuje różne aspekty użycia funkcji `memcpy`, ale nie wyjaśnia, dlaczego ta funkcja powstała, ani w jakim celu się ją stosuje.
Bardzo dobrze opisuje. Nawet warunki poprawnego użycia są opisane. Dobry kawał dokumentacji.
A że jest to funkcja bardzo niskopoziomowa, to nie dowiesz się z tej dokumentacji, w jakim celu się ją stosuje.
Post by Maciek Godek
Bo nie wiem jak Ty, ale ja swoje komentarze do kodu źródłowego zazwyczaj trzymam w kodzie źródłowym.
One *są częścią* kodu źródłowego, i wyjaśniają rzeczy, których w samym języku programowania nie mógłbym wyrazić, albo tłumaczą, skąd się wzięły jakieś nieoczywiste rozwiązania.
No, to już jesteś powyżej średniej. Obiektywnie, bez żartów.
Ale twierdzenie, że komentarze są częścią kodu źródłowego, to miejsce do nadużyć. Bo fakt, że komentarze są z definicji ignorowane i drugi fakt, że ich związek z otoczeniem jest jedynie umową społeczną między autorem a czytelnikiem, sprawia, że jednak nie są częścią kodu. Umieszczenie różnych rzeczy w tym samym pliku to jedynie fizyczny wybór pojemnika, który to wybór nie wpływa na to, czym coś jest.
I zapewniam, że niektórzy piszą komentarze do kodu poza kodem. Robiłeś kiedyś review kodu w jakimś narzędziu do pracy zespołowej?

Serio, dokumentację robi się gdzie indziej.
--
Maciej Sobczak * http://www.inspirel.com
Maciek Godek
2021-03-30 08:41:22 UTC
Permalink
Post by Maciej Sobczak
Post by Maciek Godek
Nadal nie wyjaśniłeś dlaczego nie jest.
Myślałem, że wystarczy praca samodzielna.
Ideą, ktorą ja wyczuwam w tym artykule, jest odróżnienie dokumentacji od dokumentowanego obiektu. Wynika to nawet bezpośrednio z podanych tam przykładów.
Niestety, ja nie jestem w stanie tego nigdzie wyczytać, a moje moce do wyczuwania są najwidoczniej zbyt słabe
Post by Maciej Sobczak
https://en.wikipedia.org/wiki/Documentation#Documentation_in_computer_science
Kod źródłowy nie znajduje się na tej liście.
Aha, czyli chodzi nie o to, co jest, ale o to, czego nie ma.
No, ale już kliknięcie dalej mamy artykuł https://en.wikipedia.org/wiki/Software_documentation, w którym jest m.in. omówiona koncepcja programowania piśmiennego Knutha.
Post by Maciej Sobczak
Post by Maciek Godek
Teraz drugi raz twierdzisz, że jeżeli diagram posłuży do wygenerowania kodu, to nagle w jakiś magiczny sposób przestaje być dokumentacją
Tak. Subtelne, prawda? To trochę kwestia kultury pracy i jest to miejsce na subiektywność.
OK, to zamiast mówić "wykonywalny diagram nie jest dokumentacją", a później uzasadniać to linkiem do Wikipedii, z którego to nie wynika, możesz powiedzieć "ja wykonywalnego diagramu nie uważam za dokumentację, ponieważ ..."
Post by Maciej Sobczak
Ja to widzę tak, że jeżeli coś jest bezpośrednio na ścieżce albo w łańcuchu transformacji artefaktów inżynierskich, to jest obiektem wymagającym dokumentacji a nie dokumentacją.
Jedno drugiego nie wyklucza.
Co więcej, do dokumentacji też można tworzyć dokumentację.
I nie ma w tym nic strasznego.
Post by Maciej Sobczak
Zauważ (znowu, bo już o tym wspomniałem), że kod źródłowy to nie jest program, choć zawsze tak skrótowo o nim myślimy i mówimy. Kod źródłowy to jedynie konfiguracja dla generatora kodu dla niższej wartwy abstrakcji. I to nadal nie musi być program, bo jeśli kompilator generuje kod w asemblerze, to dalej z tego jest generowany kod obiektowy i to nadal nie jest program, bo trzeba to zlinkować i pozszywać symbole i to może dopiero jest program, który zostanie fizycznie wykonany przez komputer. Tak, w skrócie mówimy, że "napisałem program", ale to nie jest prawda, bo program dopiero powstanie. Później.
I jeżeli teraz chciałbyś w ten długi łańcuch kolejnych generacji z jednego w drugie dołożyć jeszcze jeden etap, np. model (w postaci diagramu), z którego zostanie wygenerowany kod źródłowy, z którego... itd., to coś się zmieniło w całej logice? Nic się nie zmieniło. I możesz dalej sobie coś dołożyć, np. meta-skrypt generujący takie modele z zadanej konfiguracji. I coś to zmienia? Dalej nic.
Bo na całym tym łańcuchu masz artefakty inżynierskie, które automatyzują proces powstania produktu końcowego. I *żaden* z tych artefaktów nie jest wtedy dokumentacją.
Jeżeli zapoznanie się z którymkolwiek powodowałoby zwiększenie zrozumienia działania systemu, to wówczas byłby dokumentacją.
Tak przynajmniej twierdzi Wikipedia. Bo ona mówi, że jest to "dowolny materiał, który..."
Post by Maciej Sobczak
Bo gdyby był, to każdy z nich też by był. Ten asembler też. A to by było słabe, prawda? W tym sensie, że słowo "dokumentacja" straciłoby swój pierwotny sens.
Tak, potencjalnie każdy jest dokumentacją, bo każdy zawiera informację, którą można przyswoić.
Mnie się zdarza studiować asembler, dokładnie w tym celu, żeby zrozumieć, co robi system (wtedy, kiedy to jest istotne).

Jedyna kwestia jest taka, że nie każdy artefakt w tym procesie jest zoptymalizowany do rozumienia działania systemu na poziomie użytkowym.
Post by Maciej Sobczak
Więc subtelne rozróżnienie jest właśnie w tym, czy coś jest na ścieżce automatycznej generacji ostatecznego produktu. Jeśli jest, to nie jest to dukumentacja, bo ta jest z definicji obok tej ścieżki.
Nic takiego nie znalazłem na Wikipedii.
Post by Maciej Sobczak
Tak, wiem, że są ludzie, dla których kod źródłowy jest jednocześnie programem i dokumentacją. I dziełem sztuki. Bo przecież powstało dzieło.
OK, są ludzie, dla których jest, i są ludzie, dla których nie jest. To jest w porządku.
Są też ludzie, którzy twierdzą, że to, co oni uważają w tej kwestii, jest ostateczną prawdą, a to co uważają inni, to jakieś bzdury. I to jest mniej w porządku.
Post by Maciej Sobczak
Post by Maciek Godek
co w świetle definicji z Wikipedii oznaczałoby, że nie może już służyć do rozumienia działania systemu
No bo nie może. To, że coś pokazuje *jak* coś działa, nie znaczy, że pokazuje *dlaczego*. A to jest potrzebne do rozumienia.
*Dlaczego* jest potrzebne do zrozumienia dlaczego coś zostało zrobione. *Jak* jest potrzebne do zrozumienia, jak coś jest zrobione.
W obu przypadkach mamy do czynienia ze zrozumieniem.
Post by Maciej Sobczak
Post by Maciek Godek
żadna dokumentacja nie dokumentuje wszystkich aspektów budowy i użytkowania systemów.
Bo nie musi. Natomiast kod źródłowy w ogóle niczego nie dokumentuje.
Post by Maciek Godek
https://man7.org/linux/man-pages/man3/memcpy.3.html
Opisuje różne aspekty użycia funkcji `memcpy`, ale nie wyjaśnia, dlaczego ta funkcja powstała, ani w jakim celu się ją stosuje.
Bardzo dobrze opisuje. Nawet warunki poprawnego użycia są opisane. Dobry kawał dokumentacji.
A że jest to funkcja bardzo niskopoziomowa, to nie dowiesz się z tej dokumentacji, w jakim celu się ją stosuje.
Innymi słowy, dowiem się *jak* tego użyć, ale nie dowiem się *dlaczego* tego użyć.
(A teraz przeczytaj to, co napisałeś akapit wyżej)
Post by Maciej Sobczak
Post by Maciek Godek
Bo nie wiem jak Ty, ale ja swoje komentarze do kodu źródłowego zazwyczaj trzymam w kodzie źródłowym.
One *są częścią* kodu źródłowego, i wyjaśniają rzeczy, których w samym języku programowania nie mógłbym wyrazić, albo tłumaczą, skąd się wzięły jakieś nieoczywiste rozwiązania.
No, to już jesteś powyżej średniej. Obiektywnie, bez żartów.
Ale twierdzenie, że komentarze są częścią kodu źródłowego, to miejsce do nadużyć. Bo fakt, że komentarze są z definicji ignorowane i drugi fakt, że ich związek z otoczeniem jest jedynie umową społeczną między autorem a czytelnikiem, sprawia, że jednak nie są częścią kodu. Umieszczenie różnych rzeczy w tym samym pliku to jedynie fizyczny wybór pojemnika, który to wybór nie wpływa na to, czym coś jest.
I zapewniam, że niektórzy piszą komentarze do kodu poza kodem. Robiłeś kiedyś review kodu w jakimś narzędziu do pracy zespołowej?
Tak, zdarza mi się. I tego rodzaju komentarzy nie uznaję za część kodu źródłowego, tylko za element konwersacji wokół kodu źródłowego.

Tak samo, jak np. narzędzie do pisania komentarzy w Wordzie odróżnia komentarz od komentowanego tekstu.
Post by Maciej Sobczak
Serio, dokumentację robi się gdzie indziej.
Zależy jaką. Serio. Wiele rzeczy można robić na wiele sposobów.

Proszę, tu piosenka dla Ciebie (moim zdaniem powinna być hymnem inżynierów):


Maciej Sobczak
2021-03-30 21:00:18 UTC
Permalink
Post by Maciek Godek
Post by Maciej Sobczak
Ideą, ktorą ja wyczuwam w tym artykule, jest odróżnienie dokumentacji od dokumentowanego obiektu. Wynika to nawet bezpośrednio z podanych tam przykładów.
Niestety, ja nie jestem w stanie tego nigdzie wyczytać, a moje moce do wyczuwania są najwidoczniej zbyt słabe
Dlatego próbuję pomóc.
Post by Maciek Godek
No, ale już kliknięcie dalej mamy artykuł https://en.wikipedia.org/wiki/Software_documentation,
... w którym w pierwszym zdaniu jest "that accompanies computer software", czyli znowu jest intencja rozdzielenia obiektu od jego dokumentacji, tudzież "or is embedded in the source code" jako logistyczny wybór miejsca umieszczenia, co nadal jednak odróżnia dokumentację od kodu źródłowego.
Post by Maciek Godek
w którym jest m.in. omówiona koncepcja programowania piśmiennego Knutha.
Wiadomo, że "Knuth wielkim poetą był", ale po pierwsze nadal ta koncepcja odróżnia obiekt od jego dokumentacji, a po drugie ta koncepcja nie przyjęła się w sensownej skali pomimo prawie 4 dekad od ogłoszenia (1984). Więc nie.
Post by Maciek Godek
OK, to zamiast mówić "wykonywalny diagram nie jest dokumentacją", a później uzasadniać to linkiem do Wikipedii, z którego to nie wynika, możesz powiedzieć "ja wykonywalnego diagramu nie uważam za dokumentację, ponieważ ..."
Tak. Ponieważ nie tylko tak uważam, ale nawet przypadkiem zgadza się to z Wikipedią, którą wolę wtedy pokazać jako bardziej neutralne źródło.
Post by Maciek Godek
Mnie się zdarza studiować asembler, dokładnie w tym celu, żeby zrozumieć, co robi system
A co, nie było dokumentacji? :-D
To się wtedy nazywa reverse-engineering. Ale to nie znaczy, że asembler jest dokumentacją. To znaczy tylko tyle, że nie było dokumentacji.
Post by Maciek Godek
Jedyna kwestia jest taka, że nie każdy artefakt w tym procesie jest zoptymalizowany do rozumienia działania systemu na poziomie użytkowym.
Hm... Bo nie jest dokumentacją?
Post by Maciek Godek
Post by Maciej Sobczak
Więc subtelne rozróżnienie jest właśnie w tym, czy coś jest na ścieżce automatycznej generacji ostatecznego produktu. Jeśli jest, to nie jest to dukumentacja, bo ta jest z definicji obok tej ścieżki.
Nic takiego nie znalazłem na Wikipedii.
Sam podałeś link. Tam, gdzie w pierwszym zdaniu jest "that accompanies computer software".
"Accompanies" oznacza, że jest obok.
Post by Maciek Godek
Proszę, tu piosenka dla Ciebie
To miłe, ale nie szukam tu muzyki.
--
Maciej Sobczak * http://www.inspirel.com
Maciek Godek
2021-03-31 08:42:45 UTC
Permalink
Post by Maciej Sobczak
Post by Maciek Godek
No, ale już kliknięcie dalej mamy artykuł https://en.wikipedia.org/wiki/Software_documentation,
... w którym w pierwszym zdaniu jest "that accompanies computer software", czyli znowu jest intencja rozdzielenia obiektu od jego dokumentacji, tudzież "or is embedded in the source code" jako logistyczny wybór miejsca umieszczenia, co nadal jednak odróżnia dokumentację od kodu źródłowego.
Podejrzewam, że "is embedded in the source code" można rozumieć różnie -- niekoniecznie jako odróżnienie.
Skrzynia biegów albo silnik też jest "embedded" w samochód, i raczej byśmy powiedzieli, że skrzynia biegów "jest częścią" samochodu, niż czymś "odróżnionym od samochodu"
Post by Maciej Sobczak
Post by Maciek Godek
w którym jest m.in. omówiona koncepcja programowania piśmiennego Knutha.
Wiadomo, że "Knuth wielkim poetą był", ale po pierwsze nadal ta koncepcja odróżnia obiekt od jego dokumentacji, a po drugie ta koncepcja nie przyjęła się w sensownej skali pomimo prawie 4 dekad od ogłoszenia (1984). Więc nie.
Ale więc "co" "nie"?
Jest omówiona, czyli jest omówiona.
W artykule dotyczącym dokumentacji oprogramowania.
Więc tak.
Post by Maciej Sobczak
Post by Maciek Godek
OK, to zamiast mówić "wykonywalny diagram nie jest dokumentacją", a później uzasadniać to linkiem do Wikipedii, z którego to nie wynika, możesz powiedzieć "ja wykonywalnego diagramu nie uważam za dokumentację, ponieważ ..."
Tak. Ponieważ nie tylko tak uważam, ale nawet przypadkiem zgadza się to z Wikipedią, którą wolę wtedy pokazać jako bardziej neutralne źródło.
Tzn. raczej zgadza się z "Twoim odczuwaniem Wikipedii", niż z czymkolwiek, co tam jest napisane.
Post by Maciej Sobczak
Post by Maciek Godek
Mnie się zdarza studiować asembler, dokładnie w tym celu, żeby zrozumieć, co robi system
A co, nie było dokumentacji? :-D
Mam jeszcze raz zacytować definicję spod linku, który wkleiłeś? OK:

"any communicable material that is used to describe, explain or instruct regarding some attributes of an object, system or procedure, such as its parts, assembly, installation, maintenance and use"

Zobacz, "assembly" jest nawet wymienione explicite ;]

w tym, czy coś jest na ścieżce automatycznej generacji ostatecznego produktu. Jeśli jest, to nie jest to dukumentacja, bo ta jest z definicji obok tej ścieżki.
Post by Maciej Sobczak
Post by Maciek Godek
Nic takiego nie znalazłem na Wikipedii.
Sam podałeś link. Tam, gdzie w pierwszym zdaniu jest "that accompanies computer software".
"Accompanies" oznacza, że jest obok.
"or embedded in"

"embedded in" oznacza, że jest w środku.
slawek
2021-04-04 21:07:40 UTC
Permalink
Panowie, całkiem się wam pop^Hmyliło. Słabo u was z logiką.

Ogólnie dokumentacja to nie to samo co kod źródłowy. Ale...

Dokumentacja może zawierać kod źródłowy (taką opcję w Doxygenie
widzieli?) - fragmenty lub całość. Kod źródłowy może zawierać
dokumentację (Javadoc, docstrings itepe). Kod źródłowy może być
samokomentujący, a komentarze to też dokumentacja (Clean Code
wujka Martna czytały krasnalki?)

Czyli w konkretnych przypadkach dokumentacja to kod źródłowy i
vice versa.

Inaczej: dla dowolnych zbiorów A i B nie jest prawdą że zawsze A != B.


Przy tym zupełnie mało interesująca są: statystyka; wierzenia
korpoludków; Wikipedia (Oxenfurt i Sorbowit ubogich).


----Android NewsGroup Reader----
http://usenet.sinaapp.com/
Maciej Sobczak
2021-04-05 17:10:45 UTC
Permalink
Post by slawek
Dokumentacja może zawierać kod źródłowy
Oczywiście. Nikt nie twierdził inaczej. Trzymanie dwóch rzeczy w jednym pojemniku to decyzja logistyczna. Czasem dobra, czasem niedobra.
Post by slawek
Kod źródłowy może zawierać
dokumentację
Oczywiście. Nikt nie twierdził inaczej. Trzymanie dwóch rzeczy w jednym pojemniku to decyzja logistyczna. Czasem dobra, czasem niedobra.
Post by slawek
Kod źródłowy może być
samokomentujący,
Na tej samej zasadzie co deska o długości 1.2m jest samokomentująca, bo przecież widać, że ma 1.2m.
Post by slawek
a komentarze to też dokumentacja
Oczywiście. Nikt nie twierdził inaczej. Ale o tym, że kod może zawierać dokumentację, było już parę linijek wyżej.
Post by slawek
Czyli w konkretnych przypadkach dokumentacja to kod źródłowy i
vice versa.
A to zdanie nie wynika z żadnego z tych powyżej. I chyba na tym skrócie myślowym nam się wcześniej dyskusja urwała. Bo ja nadal odróżniam te dwie rzeczy.
Post by slawek
Przy tym zupełnie mało interesująca są: statystyka; wierzenia
korpoludków; Wikipedia (Oxenfurt i Sorbowit ubogich).
Niech będzie. To co teraz? :-D
--
Maciej Sobczak * http://www.inspirel.com
Maciek Godek
2021-04-06 06:48:21 UTC
Permalink
Post by Maciej Sobczak
Post by slawek
Kod źródłowy może być
samokomentujący,
Na tej samej zasadzie co deska o długości 1.2m jest samokomentująca, bo przecież widać, że ma 1.2m.
O, wyśmienity przykład.
Jeżeli masz system oznaczania desek (np. naklejasz albo wypalasz oznaczenie na elemencie), i zaprojektujesz oznaczenia w ten sposób, że masz deskę typu A, deskę typu B, itd., to będziesz potrzebował dodatkowej dokumentacji, żeby sobie przetłumaczyć "typ" deski na jej wymiar. Natomiast jeżeli zamiast "A" napiszesz na desce "120x15x2", i deska będzie miała wymiary 120cm x 15cm x 2cm, to nie będziesz potrzebował tej dodatkowej dokumentacji.
Post by Maciej Sobczak
int maxNumberOfBananasThatTheCustomerXYZAskedForAtTheLastMeeting = 12345;
ale chyba rozumiemy, że taka nazwa to nie jest kod, tylko niewłaściwie użyty komentarz. Czyli dokumentacja. I się pewnie zaraz rozjedzie.
int maxNumberOfBananas = 12345;
ale bez (rozjeżdżającej się) dokumentacji nie wiemy, dlaczego akurat tyle. A to może być bardzo ważne.
Teraz zwróć uwagę, że zamiast "maxNumberOfBananas" mogłeś użyć np. nazwy "x" albo "mnb". Ale tego nie zrobiłeś, bo "x" ani "mnb" nie wyjaśniałoby roli rzeczonej zmiennej (którą jest -- jak bym chciał wierzyć -- maksymalna liczba bananów w jakimś kontekście) wymagałaby dodatkowego źródła. Dlatego też nazwa zmiennej (będąca częścią kodu źródłowego, a nie tylko logistycznie współwystępującym elementem w kodzie źródłowym -- i oczywiście o ile jest poprawnie użyta) dokumentuje rolę tej zmiennej w systemie.

Rzecz jasna jest tak, że kod źródłowy może dokumentować zachowanie systemu lepiej albo gorzej (podobnie jak każda inna dokumentacja może być napisana lepiej albo gorzej), ale stąd nie wynika, że -- jak uparcie twierdzisz (mimo że nie wskazują na to ŻADNE materiały źródłowe, na które dotychczas próbowałeś się powoływać) -- przez sam fakt swojej potencjalnej wykonywalności (bądź bycia przetwarzalnym do jakiejś postaci wykonywalnej) -- nie może być dokumentacją.

Wydaje mi się też, że Twoja teoria miałaby problem z wyjaśnieniem istnienia tego artykułu na osławionej Wikipedii:

https://en.wikipedia.org/wiki/Self-documenting_code

Nota bene, swego czasu popełniłem na Wikipedii artykuł, który pokazywał, jak przejść od kodu, który dokumentuje siebie w komentarzach, do takiego, który jest samo-dokumentujący:

https://www.quora.com/What-are-some-examples-of-bad-code/answer/Panicz-Godek

Oczywiście nie jest tak, że sprawa nie jest w jakimś stopniu osobliwa: jak wpiszesz w wyszukiwarkę "self-documenting", to główną podpowiedzią (przynajmniej u mnie) jest właśnie "code", i wygląda na to, że -- poza kodem źródłowym -- niewiele jest innych artefaktów, które mogłyby mieć potencjał "dokumentowania siebie samych" (choć np. w wielu książkach widziałem sekcję pt. "jak używać tej książki", którą poniekąd można postrzegać jako dokumentację książki do niej samej)
Maciek Godek
2021-04-06 07:21:24 UTC
Permalink
Post by Maciek Godek
https://www.quora.com/What-are-some-examples-of-bad-code/answer/Panicz-Godek
Errata: miało być oczywiście "na Quorze", a nie "na Wikipedii".
(Na Wikipedii nie popełniłem nigdy żadnego)
Maciej Sobczak
2021-04-06 16:35:43 UTC
Permalink
Post by Maciek Godek
Post by Maciej Sobczak
Na tej samej zasadzie co deska o długości 1.2m jest samokomentująca, bo przecież widać, że ma 1.2m.
O, wyśmienity przykład.
Jeżeli masz system oznaczania desek (np. naklejasz albo wypalasz oznaczenie na elemencie), i zaprojektujesz oznaczenia w ten sposób, że masz deskę typu A, deskę typu B, itd., to będziesz potrzebował dodatkowej dokumentacji, żeby sobie przetłumaczyć "typ" deski na jej wymiar. Natomiast jeżeli zamiast "A" napiszesz na desce "120x15x2", i deska będzie miała wymiary 120cm x 15cm x 2cm, to nie będziesz potrzebował tej dodatkowej dokumentacji.
Nadal jednak deska nie jest dokumentacją.
Nawet pomimo faktu, że patrząc na deskę odpowiednio długo, można się o niej czegoś dowiedzieć.
Post by Maciek Godek
W programowaniu jest podobnie, tylko że bardziej.
Bo medium może być współdzielone. Nadal jednak odróżniam te dwie rzeczy.
Post by Maciek Godek
Teraz zwróć uwagę, że zamiast "maxNumberOfBananas" mogłeś użyć np. nazwy "x" albo "mnb".
Mogłem. Ale w większym programie kończą mi się literki. No i mogłem też na desce napisać "deska". Albo nawet "DESKA".
Pomimo ułatwienia sobie życia przez staranne nazewnictwo, nadal nie ma tam dokumentacji.
Post by Maciek Godek
Rzecz jasna jest tak, że kod źródłowy może dokumentować zachowanie systemu lepiej albo gorzej
Kod nie dokumentuje działania, tylko go definiuje. Jest specyfikacją dla generatora kodu, już pisałem o tym.
Można do czegoś takiego dopisać dokumentację. Ale w wielu przypadkach się tego nie robi, bo w naszej dziedzinie reverse engineering też jest powszechnie akceptowalną metodą poznawczą.
Post by Maciek Godek
https://en.wikipedia.org/wiki/Self-documenting_code
Ja w ogóle nie podejmuję się wyjaśniania istnienia czegokolwiek.
Również tego:

https://en.wikipedia.org/wiki/Self-documenting_code#Criticism

Self-documenting code to taka ładna nazwa na brak dokumentacji. Zdecydowanie lepiej jest powiedzieć na standupie, że się napisało self-documenting code (positive thinker, constructive attitude, involvement, engagement, etc.), niż że się nie napisało dokumentacji.
Ale jak już pisałem, reverse-engineering jest akceptowalną metodą poznawczą, więc w czym problem?
Post by Maciek Godek
Oczywiście nie jest tak, że sprawa nie jest w jakimś stopniu osobliwa: jak wpiszesz w wyszukiwarkę "self-documenting", to główną podpowiedzią (przynajmniej u mnie) jest właśnie "code", i wygląda na to, że -- poza kodem źródłowym -- niewiele jest innych artefaktów, które mogłyby mieć potencjał "dokumentowania siebie samych"
Słuszne spotrzeżenie, ale wyjaśnienie tego jest bardzo proste. Otóż wbrew temu, co my, jako programiści, lubimy o sobie myśleć, to nasza branża jest właśnie jedną z najbardziej dziadowskich jeśli chodzi o akceptację niskiej kultury pracy. Dlatego w innych branżach inżynierskich nie spotkasz czegoś takiego jak samo-dokumentujący się artefakt, bo z punktu widzenia każdego dojrzałego procesu produkcyjnego albo systemu kontroli jakości, jest to po prostu przypadkowy śmieć.
Spróbuj popatrzeć na branżę elektroniczną, jako tą powiedzmy najbliższą technicznie naszej (w systemach embedded z płynną granicą pomiędy nimi), i weź coś najprostszego, tak naprawdę na samym dole drabinki społecznej, czyli no nie wiem, np. najbardziej banalny rezystor 100Ohm, 1%, taki co to kosztuje poniżej jednego grosza za sztukę, np:

https://www.tme.eu/pl/details/crcw0805100rfktabc/rezystory-smd-0805/vishay/

A tak wygląda dokumentacja do tego najprostszego na świecie produktu:

https://www.tme.eu/Document/622e28308c06d160637f2b14751ba16b/Data%20Sheet%20CRCW_BCe3.pdf

Rozumiesz już?
My jesteśmy w lesie.

To co my robimy w naszej pracy to nie jest dokumentacja, tylko kpiny. I właśnie to próbuję nieśmiało tu zasygnalizować.
Oczywiście, możemy sobie dalej tkwić w wirtualnym świecie poklepujących się nawzajem po ramieniu amatorów tworzących "self-documenting code". Czy co tam. Ale możemy też pokusić się o refleksję.
--
Maciej Sobczak * http://www.inspirel.com
Maciek Godek
2021-04-06 21:46:24 UTC
Permalink
Post by Maciej Sobczak
Post by Maciek Godek
Post by Maciej Sobczak
Na tej samej zasadzie co deska o długości 1.2m jest samokomentująca, bo przecież widać, że ma 1.2m.
O, wyśmienity przykład.
Jeżeli masz system oznaczania desek (np. naklejasz albo wypalasz oznaczenie na elemencie), i zaprojektujesz oznaczenia w ten sposób, że masz deskę typu A, deskę typu B, itd., to będziesz potrzebował dodatkowej dokumentacji, żeby sobie przetłumaczyć "typ" deski na jej wymiar. Natomiast jeżeli zamiast "A" napiszesz na desce "120x15x2", i deska będzie miała wymiary 120cm x 15cm x 2cm, to nie będziesz potrzebował tej dodatkowej dokumentacji.
Nadal jednak deska nie jest dokumentacją.
Nawet pomimo faktu, że patrząc na deskę odpowiednio długo, można się o niej czegoś dowiedzieć.
To, czy deska jest, czy nie jest dokumentacją, zależy - według podanej przez Ciebie definicji - od tego, czy służy do "wyjaśnienia, opisania bądź poinstruowania odnośnie pewnych atrybutów jakiegoś przedmiotu, systemu lub procedury, takich jak jego części, sposób budowy, montażu, obsługi czy też użytkowania".
Jeżeli służy do któregoś z tych celów, to jest dokumentacją, a jeżeli nie służy, to nie jest.
(Akurat w przypadku deski jestem bez trudu w stanie sobie wyobrazić, że może być częścią dokumentacji jako referencyjna jednostka długości w jakimś projekcie)
Post by Maciej Sobczak
Post by Maciek Godek
W programowaniu jest podobnie, tylko że bardziej.
Bo medium może być współdzielone. Nadal jednak odróżniam te dwie rzeczy.
W porządku. Ty odróżniasz. Ale Wikipedia, na którą się powołujesz, nie odróżnia.
Post by Maciej Sobczak
Post by Maciek Godek
Teraz zwróć uwagę, że zamiast "maxNumberOfBananas" mogłeś użyć np. nazwy "x" albo "mnb".
Mogłem. Ale w większym programie kończą mi się literki. No i mogłem też na desce napisać "deska". Albo nawet "DESKA".
Pomimo ułatwienia sobie życia przez staranne nazewnictwo, nadal nie ma tam dokumentacji.
Jeżeli napis "DESKA" na desce może posłużyć do wyjaśnienia, opisania bądź poinstruowania odnośnie pewnych atrybutów jakiegoś przedmiotu, systemu lub procedury, takich jak jego części, sposób budowy, montażu, obsługi czy też użytkowania, to wówczas jest tam dokumentacja.
Post by Maciej Sobczak
Post by Maciek Godek
Rzecz jasna jest tak, że kod źródłowy może dokumentować zachowanie systemu lepiej albo gorzej
Kod nie dokumentuje działania, tylko go definiuje.
Nie rozumiem w jaki sposób jedno miałoby wykluczac drugie.
Definiuje, to znaczy: nie dość, że dokumentuje, to jeszcze dokumentuje w sposób źródłowy czy też rozstrzygający.
Post by Maciej Sobczak
Można do czegoś takiego dopisać dokumentację.
Do wszystkiego można dopisać dokumentację. Ale nie wynika stąd, że to, do czego dopisujemy dokumentację, samo nie jest dokumentacją.
Post by Maciej Sobczak
Ale w wielu przypadkach się tego nie robi, bo w naszej dziedzinie reverse engineering też jest powszechnie akceptowalną metodą poznawczą.
Studiowanie kodu źródłowego nie jest formą inżynierii wstecznej.
(Za to często wynikiem działania metod inżynierii wstecznej jest kod źródłowy, który ma właśnie służyć do czytania!)

Kiedyś na filozofii mieliśmy nauczyciela logiki, który próbował nas uczyć podstaw teorii obliczeń i myślenia algorytmicznego w oparciu o język naturalny.
Gęstwina słów w opisach była tak okropna, że w ogóle nie dało się tego czytać.
Moim zdaniem dużo łatwiej nauczyć się posługiwać zoptymalizowanym językiem do wyrażania algorytmów (chociażby Pythonem) niż stosować w tym celu polszczyznę.
Post by Maciej Sobczak
Post by Maciek Godek
https://en.wikipedia.org/wiki/Self-documenting_code
Ja w ogóle nie podejmuję się wyjaśniania istnienia czegokolwiek.
https://en.wikipedia.org/wiki/Self-documenting_code#Criticism
Przeczytałem nawet dziś ten esej Jefa Raskina. Nie zrobił na mnie większego wrażenia, ale jedno, za co jestem wdzięczny autorowi, to że nie próbuje wciskać czytelnikowi, że to on jest w posiadaniu absolutnej prawdy, i prawie na każdym kroku podkreśla, że to są jego opinie, i że tekst ma charakter polemiki z innymi głosami uczestniczącymi w debacie.
Post by Maciej Sobczak
Self-documenting code to taka ładna nazwa na brak dokumentacji. Zdecydowanie lepiej jest powiedzieć na standupie, że się napisało self-documenting code (positive thinker, constructive attitude, involvement, engagement, etc.), niż że się nie napisało dokumentacji.
Może czasem i tak bywa.
Ja jednak rozumiem frazę "self-documenting code" inaczej.
Dla mnie klejnotem koronnym samodokumentującego się kodu jest ewaluator metacykliczny.
Można używać języka naturalnego do opisania, jak należy rozumieć dany język programowania -- ale kiedy się już nauczy myśleć w danym języku programowania, to można użyć samego tego języka do opisania tego, jak należy rozumieć ten język programowania.

Ale to nie jest jedyny aspekt. Jakiś czas temu zauważyłem, że studiowanie definicji przychodzi mi z pewnym trudem -- bo definicje są z natury rzeczy raczej abstrakcyjne. Z tego też względu lubię mieć w kodzie przykłady użycia różnych definiowanych przez siebie funkcji. W moim doświadczeniu posiadanie takich konrketnych, namacalnych przykładów jest najefektywniejszą formą dokumentacji, z jakiej do tej pory korzystałem.

Jednym z częściej podawanych przeze mnie przykładów są funkcje kombinatoryczne, które sobie kiedyś napisałem i umieściłem tu: https://github.com/plande/grand-scheme/blob/master/grand/combinatorics.scm

Wśród nich można znaleźć np. taką definicję:

(define (insertions x l)
(match l
([ ]
[[x]])
([head | tail]
[[x head | tail] | (map (lambda (y) [head | y])
(insertions x tail))])))

Definicja nie jest przesadnie skomplikowana -- raptem dwa przypadki do rozważenia -- ale ja i tak nic z tego nie rozumiem (mimo że jak pisałem, to rozumiałem).
Pod spodem mam natomast napisane:

(e.g.
(insertions 'a '(x y z))
===> ((a x y z) (x a y z) (x y a z) (x y z a)))

i jak na to spojrzę, to w oka mgnieniu rozumiem, o co chodzi.
I teraz, można powiedzieć, że to jest taki "test jednostkowy przepleciony z kodem", ale ja wolę mówić po prostu o przykładzie użycia, bo choć kod rzeczywiście może się wykonać (i albo nic nie zrobić, gdy wszystko jest OK, albo krzyczeć, gdy wejście nie zgadza się z wyjściem), to jednak ten kod jest przeznaczony przede wszystkim do czytania. Jego rolą jest udokumentowanie działania jakiejś funkcji. ("Ale jak to? Przecież to wykonywalny kod?!")

Tego rodzaju przykłady użycia zdarza mi się przeplatać z komentarzami, tak jak kiedy pisałem "suitę testową" dla dokumentu SRFI-201. Ale wówczas komentarze nie są "czymś odrębnym od kodu źródłowego", ani nie są "tylko logistycznie trzymane razem z kodem", a stanowią z nimi pewną całość narracyjną:

https://github.com/scheme-requests-for-implementation/srfi-201/blob/master/guile/examples.scm
Post by Maciej Sobczak
Post by Maciek Godek
Oczywiście nie jest tak, że sprawa nie jest w jakimś stopniu osobliwa: jak wpiszesz w wyszukiwarkę "self-documenting", to główną podpowiedzią (przynajmniej u mnie) jest właśnie "code", i wygląda na to, że -- poza kodem źródłowym -- niewiele jest innych artefaktów, które mogłyby mieć potencjał "dokumentowania siebie samych"
Słuszne spotrzeżenie, ale wyjaśnienie tego jest bardzo proste. Otóż wbrew temu, co my, jako programiści, lubimy o sobie myśleć, to nasza branża jest właśnie jedną z najbardziej dziadowskich jeśli chodzi o akceptację niskiej kultury pracy.
Ponownie, jedno drugiego nie wyklucza.
Post by Maciej Sobczak
Dlatego w innych branżach inżynierskich nie spotkasz czegoś takiego jak samo-dokumentujący się artefakt, bo z punktu widzenia każdego dojrzałego procesu produkcyjnego albo systemu kontroli jakości, jest to po prostu przypadkowy śmieć.
No, może problemem jest to, że programowanie nie do końca jest "branżą inżynierską".
To jest ogólnie ciekawe, bo programowanie wydaje mi się bardzo chłonne, jeżeli idzie o metafory.
Jedni chcą widzieć w tym inżynierię, innym kojarzy się z biologią, dla jeszcze innych do poezja, dla innych matematyka, czy wreszcie architektura.
Pewnie się już ze sto razy dzieliłem tutaj tym wykładem, ale akurat ten jeden jest tego wart -- perspektywa profesora informatyki, który został dotkorem nauk medycznych:


Post by Maciej Sobczak
https://www.tme.eu/pl/details/crcw0805100rfktabc/rezystory-smd-0805/vishay/
https://www.tme.eu/Document/622e28308c06d160637f2b14751ba16b/Data%20Sheet%20CRCW_BCe3.pdf
Rozumiesz już?
My jesteśmy w lesie.
Dla mnie raczej znamienne jest to, że Ty twierdzisz, że branża elektroniczna jest "technicznie najbliższa naszej".
Dla mnie nie jest. Znam dobrych projektantów hardware'u, którzy są bardzo kiepiskimi programistami. Znam też niezłych programistów, którzy za Chiny nie poradziliby sobie z hardwarem.
Dla mnie programowanie jest najbliższe pisaniu tekstów. Ba, dla mnie programowanie jest w przeważającej mierze pisaniem tekstu.
Jeżeli bym szukał tego, co jest najbliższe, to byłyby to prace Gottloba Frege albo Bertranda Russella.
Sądzę też, że raczej nie zaszkodziłoby programistom zapoznanie się z teorią literatury (zwłaszcza jeżeli mają tworzyć dokumentację).

Jest nawet taka naprawdę dobra książka, którą na wydziałach filologicznych nazywają "trojaczkami", zatytułowana "Zarys Teorii Literatury". Dziwi mnie, że nie przerabiają tego na wydziałach Informatyki. Z tego co widzę, można nawet tutaj ściągnąć:

https://docer.pl/doc/xx0e501

W każdy razie pomiędzy programowaniem a projektem hardware'u jest przepaść. Współcześnie większość programistów nawet nie będzie miała szans powąchać hardware'u, na którym będzie chodził ich software.
Post by Maciej Sobczak
To co my robimy w naszej pracy to nie jest dokumentacja, tylko kpiny. I właśnie to próbuję nieśmiało tu zasygnalizować.
Pewnie różni ludzie robią w pracy różne rzeczy.
Dla mnie w dużej mierze programowanie to jest budowanie języka, w którym mogę "opowiedzieć system".
Ale rzeczywiście, jak rozglądam się dookoła, to dla większości programistów chyba tak nie jest.
Dużo widzę różnej maści kultu Cargo.
(Ale tak jak śledzę trendy, to "tworzenie DSLi" chyba nawet jest teraz na czasie)
Maciej Sobczak
2021-04-07 20:07:19 UTC
Permalink
Post by Maciek Godek
(Akurat w przypadku deski jestem bez trudu w stanie sobie wyobrazić, że może być częścią dokumentacji jako referencyjna jednostka długości w jakimś projekcie)
Brawo. Czyli rozumiesz już różnicę pomiędzy artefaktem, który jest na ścieżce generacji produktu od takiego, który nie jest.
Ta deska referencyjna jest dokumentacją. Ale deska użyta do budowy budy dla psa już nie jest - dokładnie tak było z diagramami parę postów wcześniej.

Wyprzedzając: tak, można tą deskę referencyjną użyć w innym projekcie jako budulec. Wtedy przestanie być dokumentacją. Ale to już chyba rozumiesz.
Post by Maciek Godek
Post by Maciej Sobczak
Bo medium może być współdzielone. Nadal jednak odróżniam te dwie rzeczy.
W porządku. Ty odróżniasz. Ale Wikipedia, na którą się powołujesz, nie odróżnia.
Może ktoś kiedyś dopisze. :-D Wikipedia nie jest wykuta w kamieniu.
Post by Maciek Godek
Studiowanie kodu źródłowego nie jest formą inżynierii wstecznej.
https://en.wikipedia.org/wiki/Reverse_engineering

Zdumiewająco duża część tego artykułu, w odniesieniu do oprogramowania, dotyczy właśnie różnych form wyciągania wiedzy z kodu źródłowego. Czytanie kodu źródłowego to jest właśnie reverse engineering.
Post by Maciek Godek
Ale to nie jest jedyny aspekt. Jakiś czas temu zauważyłem, że studiowanie definicji przychodzi mi z pewnym trudem -- bo definicje są z natury rzeczy raczej abstrakcyjne. Z tego też względu lubię mieć w kodzie przykłady użycia różnych definiowanych przez siebie funkcji. W moim doświadczeniu posiadanie takich konrketnych, namacalnych przykładów jest najefektywniejszą formą dokumentacji, z jakiej do tej pory korzystałem.
Jak najbardziej.
Ale Knuth w swojej słynnej książce specjalnie podjał najpierw wysiłek opracowania języka, który nie miał żadnej znanej implementacji, żeby z jednej strony zapewnić sobie precyzję opisu, ale z drugiej nie sugerować, że te przykłady są fragmentami konkretnych projektów. W ten sposób chciał zachować czystość narracji.
Już pisałem - w programowaniu medium jest wspólne, więc ludzie nie odróżniają kodu od dokumentacji. Zwłaszcza jak jej nie mają. Tak czy siak to są jakieś literki, czasem cyferki.
Post by Maciek Godek
No, może problemem jest to, że programowanie nie do końca jest "branżą inżynierską".
Podobnie, jak nie każda kupa desek to architektura.
To nie jest tak, że "nie do końca", tylko właśnie "szerzej niż". Powszechne praktykowanie programowania daleko wykracza poza inżynierię. Dlatego mamy masę projektów, które z inżynierią nie mają nic wspólnego.
Post by Maciek Godek
Dla mnie raczej znamienne jest to, że Ty twierdzisz, że branża elektroniczna jest "technicznie najbliższa naszej".
Tak to widzę. W sensie - tak to pamiętam z lekcji historii. Również w sensie, że te dziedziny nawzajem się karmią.
Post by Maciek Godek
Sądzę też, że raczej nie zaszkodziłoby programistom zapoznanie się z teorią literatury (zwłaszcza jeżeli mają tworzyć dokumentację).
No właśnie, ciekawą sprawę poruszyłeś. A dlaczego to programiści mają ją tworzyć? Dawno temu pisaniem dokumentacji zajmowali się zupełnie inni ludzie. Technical writing to poważna dyscyplina, nie powierzano tego byle komu. Zauważ, że dokumentacja w odróżnieniu od kodu jest wizytówką firmy (w wielu projektach zleceniodawca nawet nie jest zainteresowany kodem źródłowym poza celami archiwizacyjnymi, natomiast dokumentację dostaje uroczyście), więc ma wpływ na postrzeganie marki. Dlatego pisarz dokumentacji to była wyższa kasta, niż klepacz kodu.

Może problemem jest to, że obecnie za bardzo przeciążyliśmy pojęcie programisty? Kiedyś programista to był ktoś, kto pisał kod. A dzisiaj programiści zajmują się wszystkim, łącznie z psychologią i grafiką użytkową.
Post by Maciek Godek
W każdy razie pomiędzy programowaniem a projektem hardware'u jest przepaść. Współcześnie większość programistów nawet nie będzie miała szans powąchać hardware'u, na którym będzie chodził ich software.
No właśnie. Może to też jest problem?
Post by Maciek Godek
Pewnie różni ludzie robią w pracy różne rzeczy.
Tak. W szczególności, większość nie robi dokumentacji. :-D
--
Maciej Sobczak * http://www.inspirel.com
Maciek Godek
2021-04-08 10:57:41 UTC
Permalink
Post by Maciej Sobczak
Post by Maciek Godek
(Akurat w przypadku deski jestem bez trudu w stanie sobie wyobrazić, że może być częścią dokumentacji jako referencyjna jednostka długości w jakimś projekcie)
Brawo. Czyli rozumiesz już różnicę pomiędzy artefaktem, który jest na ścieżce generacji produktu od takiego, który nie jest.
Ta deska referencyjna jest dokumentacją. Ale deska użyta do budowy budy dla psa już nie jest - dokładnie tak było z diagramami parę postów wcześniej.
Teraz złap się czegoś, żeby nie spaść z krzesła: buda dla psa też może być dokumentacją. Wraz z każdą użytą w niej deską.
Post by Maciej Sobczak
Post by Maciek Godek
Post by Maciej Sobczak
Bo medium może być współdzielone. Nadal jednak odróżniam te dwie rzeczy.
W porządku. Ty odróżniasz. Ale Wikipedia, na którą się powołujesz, nie odróżnia.
Może ktoś kiedyś dopisze. :-D Wikipedia nie jest wykuta w kamieniu.
To nie o to chodzi.
Chodzi o to, że Ty stwierdziłeś, że "Jeżeli diagram służy do generowania kodu, to *nie* jest dokumentacją, tak samo jak kod źródłowy (który też służy do generowania czegoś) nie był dokumentacją", natomiast na moje pytanie o to, dlaczego nie, odpowiedziałeś linkiem do artykułu na Wikipedii, z którego odpowiedź na to pytanie w żaden sposób nie wynika.

Definicja, którą podaje Wikipedia, jest bardzo inkluzywna: "rodzajem nadrzędnym" czy też "genus proximum" dokumentacji jest "dowolny materiał" (czyli bardzo dużo przedmiotów podpada pod tę deskrypcję), natomiast "różnicą gatunkową" czy też "differentia specifica" jest to, że "służy do opisania, wyjaśnienia bądź poinstruowania".

Na ile do tej pory zdołałem się zorientować, definicja dokumentacji, którą Ty masz na myśli, byłaby taka, że dokumentacja to "materiał, którego główną funkcją jest opisanie, wyjaśnienie bądź poinstruowanie", albo "materiał stworzony przede wszystkim w celu opisania, wyjaśnienia" itd.

To jest mniej inkluzywna definicja, i oczywiście możesz się na nią powoływać, ale w momencie, kiedy powołujesz się na inną definicję, żeby uzasadnić coś, co wynika z Twojej definicji, wprowadzasz tylko zamieszanie (moim zdaniem dość niepotrzebnie).

Przy okazji - odnośnie Twojego wcześniejszego rozróżnienia na "definiowanie i dokumentowanie" -- dokładnie z tym samym mamy do czynienia w prawie.
Dokumenty prawne - ustawy, rozpotrządzenia - są zarazem "źródłem prawa" w tym sensie, że definiują, jakie działania są legalne.
Post by Maciej Sobczak
Post by Maciek Godek
Studiowanie kodu źródłowego nie jest formą inżynierii wstecznej.
https://en.wikipedia.org/wiki/Reverse_engineering
Zdumiewająco duża część tego artykułu, w odniesieniu do oprogramowania, dotyczy właśnie różnych form wyciągania wiedzy z kodu źródłowego. Czytanie kodu źródłowego to jest właśnie reverse engineering.
Znamienne, że artykuł zaczyna się od uwagi: "This article has multiple issues."
W ogólności jest raczej dość długi, więc jeżeli jest jakieś zdanie albo akapit, który miałbyś na myśli, to pewnie wskazanie albo przytoczenie go ułatwiłoby komunikację.
Moją uwagę przykuło zdanie (na początku sekcji 2.3 pt. "Source code"):
"A number of UML tools refer to the process of importing and analysing source code to generate UML diagrams as "reverse engineering.""

Co jest znamienne, bo po pierwsze pokazuje, jak mętne i niedookreślone jest pojęcie "reverse engineeringu", a po drugie, że zwolennicy najwidoczniej UML uważają, że ich język jest "notacją, w której wyraża się źródłowa intencja budowy systemu". Podczas gdy tym czasem bardzo wiele procesów wytwarzania oprogramowania w ogóle nie uwzględnia UMLa na żadnym ze swoich etapów, i jeżeli w wyniku "reverse engineeringu" za pomocą wspomnianych narzędzi otrzymasz jakiś artefakt, to on nie będzie żadnym odtworzeniem czegokolwiek.
Post by Maciej Sobczak
Post by Maciek Godek
Ale to nie jest jedyny aspekt. Jakiś czas temu zauważyłem, że studiowanie definicji przychodzi mi z pewnym trudem -- bo definicje są z natury rzeczy raczej abstrakcyjne. Z tego też względu lubię mieć w kodzie przykłady użycia różnych definiowanych przez siebie funkcji. W moim doświadczeniu posiadanie takich konrketnych, namacalnych przykładów jest najefektywniejszą formą dokumentacji, z jakiej do tej pory korzystałem.
Jak najbardziej.
Ale Knuth w swojej słynnej książce specjalnie podjał najpierw wysiłek opracowania języka, który nie miał żadnej znanej implementacji, żeby z jednej strony zapewnić sobie precyzję opisu, ale z drugiej nie sugerować, że te przykłady są fragmentami konkretnych projektów. W ten sposób chciał zachować czystość narracji.
To też jest przykład, który dla mnie jest znamienny: książka Knutha jest raczej słynna z tytułu i nazwiska autora, niż z tego, żeby była popularną lekturą wśród młodzieży.
Po części problem wynika stąd, że Knuth zaczął ją pisać w latach 60., kiedy obsługa komputerów często wymagała zaznajamiania się z ich partykularnymi zestawami instrukcji.
Wtedy stworzenie asemblera "MIX" mogło wydawać się racjonalne, bo rzeczywiście wiązało się z pewnymi umiejętnościami, które były wymagane.
Natomiast od tamtej pory wiele się zmieniło: upowszechnił się język C oraz inne języki wysokiego poziomu, dzięki którym "ten sam program" można uruchamiać na różnych zestawach instrukcji.
Pojawiły się też komputery osobiste, które za pomocą BASICa spopularyzowały "symboliczne programowanie", i zredefiniowały rozumienie tego, czym jest programowanie, wśród kolejnego pokolenia programistów.
I tym sposobem książka Knutha - mimo że porusza tematykę uniwersalną - nie porusza jej w uniwersalny sposób.
Dla mnie pewnym kontrastem dla tej książki jest "Struktura i Interpretacja Programów Komputerowych", która też porusza uniwersalne kwestie, ale w sposób bardziej uniwersalny, bo pomimo, że używa języka, którego też nikt nie używa, używa języka, który - w przeciwieństwie do asemblera - jest ekspresywny.

To przywodzi na myśl anegdotę opowiedzianą przez Breta Victora o reakcji von Neumanna na to, jak jeden z jego studentów opracował asembler, dzięki któremu nie trzeba było programować w kodzie maszynowym:

Post by Maciej Sobczak
Post by Maciek Godek
No, może problemem jest to, że programowanie nie do końca jest "branżą inżynierską".
Podobnie, jak nie każda kupa desek to architektura.
To nie jest tak, że "nie do końca", tylko właśnie "szerzej niż". Powszechne praktykowanie programowania daleko wykracza poza inżynierię. Dlatego mamy masę projektów, które z inżynierią nie mają nic wspólnego.
No może tak bardziej.
Post by Maciej Sobczak
Post by Maciek Godek
Dla mnie raczej znamienne jest to, że Ty twierdzisz, że branża elektroniczna jest "technicznie najbliższa naszej".
Tak to widzę. W sensie - tak to pamiętam z lekcji historii. Również w sensie, że te dziedziny nawzajem się karmią.
Dla mnie branża elektroniczna jest pod wieloma względami bliższa np. hydraulicznej. W tym sensie, że jest trochę analogii w działaniu (choć oczywiście wiele zjawisk, jak np. indukcja, nie ma bezpośrednich odpowiedników). Natomiast historycznie wydziały komputerowe powstawały chyba równolegle na przy wydziałach inżynierii elektrycznej i matematyki.
Post by Maciej Sobczak
Post by Maciek Godek
Sądzę też, że raczej nie zaszkodziłoby programistom zapoznanie się z teorią literatury (zwłaszcza jeżeli mają tworzyć dokumentację).
No właśnie, ciekawą sprawę poruszyłeś. A dlaczego to programiści mają ją tworzyć? Dawno temu pisaniem dokumentacji zajmowali się zupełnie inni ludzie. Technical writing to poważna dyscyplina, nie powierzano tego byle komu. Zauważ, że dokumentacja w odróżnieniu od kodu jest wizytówką firmy (w wielu projektach zleceniodawca nawet nie jest zainteresowany kodem źródłowym poza celami archiwizacyjnymi, natomiast dokumentację dostaje uroczyście), więc ma wpływ na postrzeganie marki. Dlatego pisarz dokumentacji to była wyższa kasta, niż klepacz kodu.
Może i tak. Z drugiej strony, dla mnie kod źródłowy również jest dokumentacją, i wiele "reguł dobrego pisania" obowiązuje również przy pracy z kodem.
(Tzn. oczywiście wiele kodu nie stosuje się do tych reguł).
Pod tym względem bardzo podobała mi się ta prezentacja twórcy frameworku Rails dla Ruby'ego, w której porusza związki programowania z siedemnastowieczną poezją francuską:

Post by Maciej Sobczak
Może problemem jest to, że obecnie za bardzo przeciążyliśmy pojęcie programisty? Kiedyś programista to był ktoś, kto pisał kod. A dzisiaj programiści zajmują się wszystkim, łącznie z psychologią i grafiką użytkową.
Z jednej strony sobie myślę, że może trochę tak. Z drugiej -- ja nadal piszę kod, i to głównie ten kod jest owocem mojej pracy (nawet jeżeli do napisania tego kodu muszę zdobyć wiedzę z wielu innych dziedzin).
Post by Maciej Sobczak
Post by Maciek Godek
W każdy razie pomiędzy programowaniem a projektem hardware'u jest przepaść. Współcześnie większość programistów nawet nie będzie miała szans powąchać hardware'u, na którym będzie chodził ich software.
No właśnie. Może to też jest problem?
Może jest na wielu poziomach. Ale wydaje mi się, że przede wszystkim pokazuje, jak bardzo "wyabstrahowaną" aktywnością stało się programowanie.
slawek
2021-04-09 10:07:57 UTC
Permalink
Szczerze? Gdybym miał opiniować cię jako mojego pracownika, to
napisałbym "niezdolny do myślenia abstrakcyjnego". Na szczęście
nie jesteś moim podwładnym i nie muszę znać twoich
wad.

Nawet rozumiem twój upór - wyuczono cię że pisze się program a jak
program już jest to osobną sprawą jest zrobienie dokumentacji.
Masz po prostu single core brain - jednowątkowo myślisz i nie
rozumiesz że jeden i ten sam byt może należeć do dwóch klas
abstrakcji. Mózg zryty dziedziczeniem jednobazowym. Za dużo Javy
za mało C++.

Tego się nie da leczyć. Ale dla złagodzenia objawów przepisałbym
na początek po 5 stron z Clean Code Martina. dziennie.



----Android NewsGroup Reader----
http://usenet.sinaapp.com/
Maciej Sobczak
2021-04-09 14:57:54 UTC
Permalink
Niestety nie umiem zmusić Google'a, żeby pokazał do czego Twoja wiadomość się odnosi, ale z treści wnioskuję, że może to być odpowiedź do mnie. Czuję się więc wywołany do tablicy.
Post by slawek
Na szczęście
nie jesteś moim podwładnym
Wygląda na to, że to są dwa szczęścia na raz! :-D
Post by slawek
Nawet rozumiem twój upór - wyuczono cię że pisze się program a jak
program już jest to osobną sprawą jest zrobienie dokumentacji.
Pudło. Ostatnio raczej mam do czynienia z czymś odwrotnym - najpierw powstaje dokumentacja a dopiero potem program.
W sumie to jest chyba najlepsza metoda, żeby nie dochodziło do wypaczeń typu "napisaliśmy samodokumentujący się kod".
Post by slawek
Masz po prostu single core brain - jednowątkowo myślisz i nie
rozumiesz że jeden i ten sam byt może należeć do dwóch klas
abstrakcji.
Dwóch? Chyba żartujesz. My tu już nawet ustaliliśmy, że kod jest również poezją. :-)
Post by slawek
Za dużo Javy
za mało C++.
Musisz tu być nowy.
Post by slawek
Ale dla złagodzenia objawów przepisałbym
na początek po 5 stron z Clean Code Martina. dziennie.
Jeśli właśnie w ten sposób zdobywałeś kwalifikacje, to zaczynam rozumieć różnice w perspektywie.
A właściwie to dlaczego Martin napisał książkę? Nie wystarczyło napisać kod? Hm...

Proponuję dla dobra pozostałych grupowiczów podsumować, że w tej dyskusji nie ustalono wspólnego stanowiska.
No chyba że pojawiłby się jakiś nowy punkt zaczepienia, to ja chętnie.
--
Maciej Sobczak * http://www.inspirel.com
slawek
2021-04-09 16:44:11 UTC
Permalink
Post by Maciej Sobczak
Ostatnio raczej mam do czynienia z czymś odwrotnym - najpierw powstaje dokumentacja a dopiero potem program.
Też można: skoro płacą jak za programowanie, to po co pisać
program, skoro napisanie dokumentacji wystarcza aby była kasa?
Łatwiej i nie trzeba debugować - papier (docx) wszystko przyjmie
;)

Najlepiej - MOIM ZDANIEM - jest pisać program i dokumentację oraz
testy jednocześnie. Na przykład opis w Javadoc do metody
(kontrakt na kod), testy i potem kod. Ale... prawdopodobnie
trzeba to będzie poprawiać, zmieniać, modyfikować... więc dalsze
prace mogą być w innej kolejności - najpierw jakaś zmiana w
kodzie, potem fix w dokumentacji.
Post by Maciej Sobczak
A właściwie to dlaczego Martin napisał książkę? Nie wystarczyło napisać kod?
Przeczytaj to się dowiesz. Może się zdziwisz ale w tej książce
jest też i kod.


----Android NewsGroup Reader----
http://usenet.sinaapp.com/
Maciej Sobczak
2021-04-10 14:26:12 UTC
Permalink
Post by slawek
Post by Maciej Sobczak
Ostatnio raczej mam do czynienia z czymś odwrotnym - najpierw powstaje dokumentacja a dopiero potem program.
Też można: skoro płacą jak za programowanie, to po co pisać
program,
Znowu jesteś w błędzie. To właśnie system rozliczeniowy, w którym płaci się za program, prowadzi do tego, że nie powstaje dokumentacja. A tak powstaje jedno i drugie.
Post by slawek
papier (docx) wszystko przyjmie
Znowu jesteś w błędzie. Ponieważ dokumentacja zaczyna powstawać wcześniej, to ma też największą ilość poprawek. To nie jest tak, że tam jest cokolwiek.
Post by slawek
Najlepiej - MOIM ZDANIEM - jest pisać program i dokumentację oraz
testy jednocześnie.
Znowu jesteś w błędzie, bo z tego wynika, że te trzy rzeczy powstają w próżni. Otóż one nie powstają w próżni, tylko na podstawie czegoś. I te zależności wpływają na sensowną kolejność wykonywania tych rzeczy. I ta kolejność będzie jeszcze dodatkowo zależna od logistyki, np. dostępności sprzętu.
Istnieje też zupełnia poważna podstawa do tego, żeby testy i program były robione niezależnie, co czyni postulat jednoczesności całkiem bezprzedmiotowym. Z grafu zależności wiadomo tylko tyle, że kiedyś potrzebne będą zarówno testy, jak i program (np. po to, żeby w ogóle można było te testy puścić).
Post by slawek
Post by Maciej Sobczak
A właściwie to dlaczego Martin napisał książkę? Nie wystarczyło napisać kod?
Przeczytaj to się dowiesz. Może się zdziwisz ale w tej książce
jest też i kod.
Ale to nie odpowiada na pytanie, po co napisał książkę. Kod by napisał, taki samokomentujący, i by stykło. Nie?
--
Maciej Sobczak * http://www.inspirel.com
Maciek Godek
2021-04-11 21:57:04 UTC
Permalink
Post by Maciej Sobczak
Proponuję dla dobra pozostałych grupowiczów podsumować, że w tej dyskusji nie ustalono wspólnego stanowiska.
Ja bym powiedział, że jest znacznie gorzej: nie udało się nawet ustalić wspólnego rozumienia znaczeń słów, ani sposobów posługiwania się prawami logiki. Na rozmowę o stanowiskach nie było nawet szans.
Post by Maciej Sobczak
Post by slawek
Post by Maciej Sobczak
A właściwie to dlaczego Martin napisał książkę? Nie wystarczyło napisać kod?
Przeczytaj to się dowiesz. Może się zdziwisz ale w tej książce
jest też i kod.
Ale to nie odpowiada na pytanie, po co napisał książkę. Kod by napisał, taki samokomentujący, i by stykło. Nie?
Równie dobrze mógłbyś pytać, dlaczego nauczyciele prowadzą z uczniami lekcje czytania. Przecież daliby im do rąk elementarz, w którym jest wszystko wyjaśnione, i by stykło. Nie?

Problem jest podobny do kwestii udostępniania wersji binarnej kompilatora, którego kod źródłowy jest dostępny.
Kod źródłowy kompilatora na niewiele się zda, jeżeli nie będziesz miał narzędzia, przy pomocy którego mógłbyś ten kod skompilować. Na niewiele się zda, czyli będzie służył wyłącznie jako dokumentacja, bo nie będzie sposobu, żeby ten kod wykonać (chyba że ręcznie go "skompilujesz" do jakiegoś języka, który już jest zrozumiały dla komputera -- ale to pod warunkiem, że sam rozumiesz język w którym i dla którego jest napisany kompilator).

Błąd, jaki Ty popełniasz, polega na tym, że ze stwierdzenia, że coś jest dokumentacją, próbujesz wyciągać wniosek, że owo coś jest wyczerpującą albo jedyną potrzebną dokumentacją.

Samodokumentujący kod zawiera wszystko, co jest potrzebne do tego, żeby zrozumieć, jak jakiś system działa. Nie zawiera za to, na przykład, informacji, jak albo w jakim celu ten system powstał, jak można ten system rozwijać, ani jak się tego systemu używa. Nie zawiera też informacji o tym, w jaki sposób należy pisać i czytać kod taki źródłowy -- to jest osobna umiejętność, którą programista musi rozwinąć. Książka Martina jest (kiepskim bo kiepskim, ale jednak) materiałem, który ma trenować tę umiejętność.
Maciej Sobczak
2021-04-12 15:58:25 UTC
Permalink
Post by Maciek Godek
Post by Maciej Sobczak
Ale to nie odpowiada na pytanie, po co napisał książkę. Kod by napisał, taki samokomentujący, i by stykło. Nie?
Równie dobrze mógłbyś pytać, dlaczego nauczyciele prowadzą z uczniami lekcje czytania.
Zgadzam się, że na logiczną dyskusję chyba nie ma już szans...
Post by Maciek Godek
Problem jest podobny do kwestii udostępniania wersji binarnej kompilatora, którego kod źródłowy jest dostępny.
... tak, jestem tego coraz bardziej pewny. Nie ma szans.
Post by Maciek Godek
Błąd, jaki Ty popełniasz, polega na tym, że ze stwierdzenia, że coś jest dokumentacją, próbujesz wyciągać wniosek, że owo coś jest wyczerpującą albo jedyną potrzebną dokumentacją.
Bo właśnie tak to działa w powszechnym odbiorze. W sensie - ktoś, kto nie napisał dokumentacji stwierdza, że przecież jego kod jest tak bardzo samodokumentujący, że już niczego więcej nie trzeba. I tak to zostaje.
Więc warto jednak dbać o rozróżnianie pojęć, w przeciwnym razie pogubimy się w ich rozmyciach.
Więc zadbajmy o takie rozróżnienie: kod *nie* jest dokumentacją. Może sobie być poezją w jakimś pozainżynierskim kontekście (no chyba że poeci zgłoszą jakiś sprzeciw, np. poczują się obrażeni albo coś), ale nie jest dokumentacją.
Post by Maciek Godek
Samodokumentujący kod zawiera wszystko, co jest potrzebne do tego, żeby zrozumieć, jak jakiś system działa.
"Koń jaki jest, każdy widzi." Wiesz, skąd to zdanie pochodzi? Z bardzo poważnego źródła. Ale jednak z biegiem czasu zaczęliśmy wymagać więcej, więc nawet w tych poważnych źródłach już takich zdań nie ma.
Post by Maciek Godek
Nie zawiera za to, na przykład, informacji [...]
Bo nie jest dokumentacją.
Post by Maciek Godek
Książka Martina jest (kiepskim bo kiepskim, ale jednak) materiałem, który ma trenować tę umiejętność.
Umiejętność czego? Pisania dobrej jakości kodu? No i świetnie, oby więcej takich książek.
Nadal jednak kod nie jest dokumentacją.
--
Maciej Sobczak * http://www.inspirel.com
Maciek Godek
2021-04-13 08:32:49 UTC
Permalink
Post by Maciej Sobczak
Post by Maciek Godek
Post by Maciej Sobczak
Ale to nie odpowiada na pytanie, po co napisał książkę. Kod by napisał, taki samokomentujący, i by stykło. Nie?
Równie dobrze mógłbyś pytać, dlaczego nauczyciele prowadzą z uczniami lekcje czytania.
Zgadzam się, że na logiczną dyskusję chyba nie ma już szans...
Szanse są zawsze. Tylko to wymaga przede wszystkim wysiłku zdefiniowania używanych w dyskusji terminów, i trzymania się tych definicji. Wierzę, że stać Cię na taki wysiłek.
Post by Maciej Sobczak
Post by Maciek Godek
Błąd, jaki Ty popełniasz, polega na tym, że ze stwierdzenia, że coś jest dokumentacją, próbujesz wyciągać wniosek, że owo coś jest wyczerpującą albo jedyną potrzebną dokumentacją.
Bo właśnie tak to działa w powszechnym odbiorze. W sensie - ktoś, kto nie napisał dokumentacji stwierdza, że przecież jego kod jest tak bardzo samodokumentujący, że już niczego więcej nie trzeba. I tak to zostaje.
Jak to mówią, "ogólnie różnie bywa".
Jeżeli rzeczywiście niczego więcej nie potrzeba, to czas, który nie został wydatkowany na robienie dokumentacji, to czas zaoszczędzony.
A jeżeli potrzeba czegoś więcej, to ta potrzeba prędzej czy później da o sobie znać w jakimś procesie.
Pisanie dokumentacji po to, żeby była napisana dokumentacja, to kiepski pomysł.

Znów mogę posłużyć się przykładem. Ostatnio zajmowałem się trochę kwestią parsowania z zachowaniem komentarzy i białych znaków. Napisałem parser i podzieliłem się nim ze swoim przyjacielem, z którym często sobie rozmawiamy na różne tematy:

https://github.com/panicz/grasp-android/blob/master/javor/parse.scm

w odpowiedzi przyjaciel napisał swoją wersję parsera, którą podzielił się ze mną:

https://github.com/drcz/random-crap/blob/master/pod-jaworem.scm

Ponieważ "mówimy wspólnym językiem", i obaj wyrobiliśmy w sobie nawyk pisania przykładów w kodzie źródłowym, żadna dodatkowa dokumentacja nie była potrzebna. Nic by nie wniosła.
Post by Maciej Sobczak
Więc warto jednak dbać o rozróżnianie pojęć, w przeciwnym razie pogubimy się w ich rozmyciach.
Przede wszystkim należy zacząć od zdefiniowania pojęć.
Post by Maciej Sobczak
Więc zadbajmy o takie rozróżnienie: kod *nie* jest dokumentacją. Może sobie być poezją w jakimś pozainżynierskim kontekście (no chyba że poeci zgłoszą jakiś sprzeciw, np. poczują się obrażeni albo coś), ale nie jest dokumentacją.
Według JAKIEJ definicji "dokumentacji"?
Post by Maciej Sobczak
Post by Maciek Godek
Samodokumentujący kod zawiera wszystko, co jest potrzebne do tego, żeby zrozumieć, jak jakiś system działa.
"Koń jaki jest, każdy widzi." Wiesz, skąd to zdanie pochodzi? Z bardzo poważnego źródła. Ale jednak z biegiem czasu zaczęliśmy wymagać więcej, więc nawet w tych poważnych źródłach już takich zdań nie ma.
Nie rozumiem.
Post by Maciej Sobczak
Post by Maciek Godek
Nie zawiera za to, na przykład, informacji [...]
Bo nie jest dokumentacją.
Według JAKIEJ definicji?
Post by Maciej Sobczak
Post by Maciek Godek
Książka Martina jest (kiepskim bo kiepskim, ale jednak) materiałem, który ma trenować tę umiejętność.
Umiejętność czego?
Pisania kodu, do którego zrozumienia nie potrzeba dodatkowej dokumentacji.
Post by Maciej Sobczak
Nadal jednak kod nie jest dokumentacją.
Według JAKIEJ definicji?
Maciej Sobczak
2021-04-13 15:50:24 UTC
Permalink
Post by Maciek Godek
Jeżeli rzeczywiście niczego więcej nie potrzeba, to czas, który nie został wydatkowany na robienie dokumentacji, to czas zaoszczędzony.
A jeżeli potrzeba czegoś więcej, to ta potrzeba prędzej czy później da o sobie znać w jakimś procesie.
Pisanie dokumentacji po to, żeby była napisana dokumentacja, to kiepski pomysł.
O, i ładnie zmieniliśmy temat. Bo teraz rozmawiamy o tym, czy dokumentacja jest potrzebna.
Otóż ja nigdzie nie twierdziłem, że zawsze jest potrzebna. Jest cała masa projektów (i projekcików), gdzie się jej w ogóle nie robi i wszyscy są z tego zadowoleni. Zwłaszcza ci, którzy akceptują reverse engineering jako metodę poznawczą. Ale już o tym było.

Więc nie kłócimy się o to, czy dokumentacja ma być, czy ma jej nie być. Kłócimy się o to, co jest a co nie jest dokumentacją.
(tzn. ja mam coraz mniejszą ochotę się o to przepychać)
Post by Maciek Godek
Znów mogę posłużyć się przykładem [...] podzieliłem się nim ze swoim przyjacielem
No widzisz. Jak nie potrzebujesz dokumentacji, to jej nie rób. Do dzielenia się z przyjacielem lepsze jest piwo, niż dokumentacja.
Post by Maciek Godek
Post by Maciej Sobczak
"Koń jaki jest, każdy widzi." Wiesz, skąd to zdanie pochodzi? Z bardzo poważnego źródła. Ale jednak z biegiem czasu zaczęliśmy wymagać więcej, więc nawet w tych poważnych źródłach już takich zdań nie ma.
Nie rozumiem.
To było w pierwszej encyklopedii. Autor uznał, że nie ma potrzeby rozpisywać się na temat konia, bo przecież każdy wie, jak wygląda koń. Takie samodokumentujące się konie wtedy były. I nikomu to nie przeszkadzało.
Post by Maciek Godek
Post by Maciej Sobczak
Bo nie jest dokumentacją.
Według JAKIEJ definicji?
Według mojej. Serio. Napisałem już tyle na ten jeden temat, że mam dość tłumaczenia tego i się z tego. Jak nie dotarło, to poległem dydaktyktycznie i pokornie to przyjmuję. Pocieszam się, że może inni grupowicze skorzystali z tej dyskusji.
Kod nie jest dokumentacją, ja nie umiem (lepiej) tłumaczyć, wypij piwo z przyjacielem.
--
Maciej Sobczak * http://www.inspirel.com
Maciek Godek
2021-04-13 20:57:42 UTC
Permalink
Post by Maciej Sobczak
Post by Maciek Godek
Znów mogę posłużyć się przykładem [...] podzieliłem się nim ze swoim przyjacielem
No widzisz. Jak nie potrzebujesz dokumentacji, to jej nie rób. Do dzielenia się z przyjacielem lepsze jest piwo, niż dokumentacja.
Post by Maciek Godek
Post by Maciej Sobczak
"Koń jaki jest, każdy widzi." Wiesz, skąd to zdanie pochodzi? Z bardzo poważnego źródła. Ale jednak z biegiem czasu zaczęliśmy wymagać więcej, więc nawet w tych poważnych źródłach już takich zdań nie ma.
Nie rozumiem.
To było w pierwszej encyklopedii. Autor uznał, że nie ma potrzeby rozpisywać się na temat konia, bo przecież każdy wie, jak wygląda koń. Takie samodokumentujące się konie wtedy były. I nikomu to nie przeszkadzało.
Nie były samodokumentujące się. Być może wiedza na ich temat była bardziej powszechna.
Ale kod źródłowy tym rózni się od konia, że jest napisany (albo, jak to określa Wikipedia, "komunikowalny"). Tak jak dokumentacja.

W każdym razie abstrahując od tego kontekstu historyczno-kulturowego, nadal nie rozumiem jak się to ma do naszej dyskusji.

Ale może to jest kwestia różnicy perspektyw.
Studiując logikę, nauczyłem się widzieć formalne języki jako coś, co ma służyć przede wszystkim do formułowania precyzyjnych i zwięzłych opisów, które w przypadku języka naturalnego byłyby rozwlekłe i niejednoznaczne.
Ale rozumiem, że taka perspektywa jest odmienna od "normalnego" uczenia się programowania, gdzie mamy jakiś "język komputerowy", z którym musimy walczyć, żeby uzyskać taki efekt, jaki chcemy. W takich sytuacjach program często nie jest "komunikatem", tylko właśnie owocem walki; czymś, co trzeba "odszyfrować".

Do tego dochodzi też kwestia samej nauki języka - pewne rzeczy w języku formalnym (tak samo zresztą jak w każdym innym języku) stają się zrozumiałe dopiero wtedy, kiedy nauczymy się biegle tym językiem posługiwać. Istotne jest też to, z jakim językiem się zmagamy: ostatnio trochę programuję w Javie, i jest to język tak toporny, że ciężko w nim cokolwiek wyrazić.

Przypomniała mi się też anegdota związana z powstaniem Lispa, która w jakiś sposób wydaje się powiązana z tematem tej dyskusji.
Była opowiedziana w eseju Paula Grahama "Hackers and Painters":

McCarthy said: "Steve Russell said, look, why don't I program this eval ... and I said to him, ho, ho, you're confusing theory with practice, this eval is intended for reading, not for computing. But he went ahead and did it. That is, he compiled the eval in my paper into IBM 704 machine code, fixing bug, and then advertised this as a Lisp interpreter, which it certainly was. So at that point Lisp had essentially the form that it has today ..."
Post by Maciej Sobczak
Post by Maciek Godek
Post by Maciej Sobczak
Bo nie jest dokumentacją.
Według JAKIEJ definicji?
Według mojej. Serio. Napisałem już tyle na ten jeden temat, że mam dość tłumaczenia tego i się z tego. Jak nie dotarło, to poległem dydaktyktycznie i pokornie to przyjmuję.
OK, według Twojej. Tak może być. Ale podasz tę definicję? Bo od początku dyskusji jej nie podałeś.
Stwierdziałeś tylko, że "kod nie jest dokumentacją", powołując się na definicję z Wikipedii, z której taki wniosek nie wynika (a jeżeli wynika, to nie pokazałeś, w jaki sposób).
Czy może Twoja definicja też jest "jak ten koń"? Że "czym jest dokumentacja wg Sobczaka, każdy widzi"?
Maciek Godek
2021-04-16 09:26:03 UTC
Permalink
Post by Maciek Godek
Przypomniała mi się też anegdota związana z powstaniem Lispa, która w jakiś sposób wydaje się powiązana z tematem tej dyskusji.
Jeszcze mi się skojarzyła jedna rzecz. Na Quorze jest gość co się nazywa Gerry Rzeppa, który stworzył język programowania o nazwie "Plain English".
Przykładowy program, z tej odpowiedzi
https://www.quora.com/How-do-you-write-a-program-that-requests-a-number-of-numbers-and-then-displays-it-separately-Python-development/answer/Gerry-Rzeppa

To run:
Start up.
Clear the screen.
Put a one-line console at the top of the screen.
Get a string of numbers from the user with "Enter some numbers".
Loop.
If the string is blank, break.
Get a number from the string.
Display the number anywhere below the console.
Repeat.
Refresh the screen.
Wait for the escape key.
Shut down.

Maciek Godek
2021-04-12 09:45:07 UTC
Permalink
Post by Maciej Sobczak
Post by slawek
papier (docx) wszystko przyjmie
Znowu jesteś w błędzie. Ponieważ dokumentacja zaczyna powstawać wcześniej, to ma też największą ilość poprawek. To nie jest tak, że tam jest cokolwiek.
Zabawne, że dosłownie kilka postów wcześniej pisałeś o "różnicy pomiędzy artefaktem, który jest na ścieżce generacji produktu od takiego, który nie jest".
To dokumentacja, która powstaje przed kodem, jest, czy nie jest, na ścieżce generacji produktu?
Jeżeli nie jest, to wówczas - by użyć Twoich słów - "jest tak, że tam jest cokolwiek".
A jeżeli jest, to - według Twojej definicji - taka dokumentacja "nie jest dokumentacją".
Maciej Sobczak
2021-04-12 16:07:59 UTC
Permalink
Post by Maciek Godek
To dokumentacja, która powstaje przed kodem, jest, czy nie jest, na ścieżce generacji produktu?
A czy kod może być wygenerowany automatycznie *z tego* artefaktu, tak jak kod wykonywalny może być wygenerowany automatycznie z kodu źródłowego?
Bo właśnie na tym polegało rozróżnienie w diagramach.
Post by Maciek Godek
Jeżeli nie jest, to wówczas - by użyć Twoich słów - "jest tak, że tam jest cokolwiek".
W żadnym przypadku nie jest tam cokolwiek.
Tzn. ja piszę o inżynierii. Nie wiem, jak tam u poetów.
--
Maciej Sobczak * http://www.inspirel.com
slawek
2021-04-04 20:32:13 UTC
Permalink
Ideą, ktorą ja wyczuwam w tym artykule, jest odróżnienie dokumentacji od dokumentowanego obiektu. Wynika to nawet bezpośrednio z podanych tam przykładów.> Niestety, ja nie jestem w stanie tego nigdzie wyczytać, a moje moce do wyczuwania są najwidoczniej zbyt słabeDlatego próbuję pomóc.> No, ale już kliknięcie dalej mamy artykuł https://en.wikipedia.org/wiki/Software_documentation,... w którym w pierwszym zdaniu jest "that accompanies computer software", czyli znowu jest intencja rozdzielenia obiektu od jego dokumentacji, tudzież "or is embedded in the source code" jako logistyczny wybór miejsca umieszczenia, co nadal jednak odróżnia dokumentację od kodu źródłowego.> w którym jest m.in. omówiona koncepcja programowania piśmiennego Knutha.Wiadomo, że "Knuth wielkim poetą był",
----Android NewsGroup Reader----
http://usenet.sinaapp.com/
Loading...