{"id":10168,"date":"2021-03-14T09:21:43","date_gmt":"2021-03-14T08:21:43","guid":{"rendered":"https:\/\/vived.io\/software-craftsmanship-saturday-vol-28\/"},"modified":"2022-09-19T13:20:15","modified_gmt":"2022-09-19T11:20:15","slug":"software-craftsmanship-saturday-vol-28","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/","title":{"rendered":"Software Craftsmanship Sunday vol. 28"},"content":{"rendered":"<h2 id=\"1-co-zrobic-zeby-dokumentacja-nie-ssala\" data-num=1>1. <a href=\"https:\/\/www.worldofbs.com\/why-documentation-sucks\/\">Co zrobi\u0107 \u017ceby dokumentacja nie \u201cssa\u0142a\u201d?<\/a><\/h2>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bbe443c1.png\" alt=\"\" \/><\/figure>\n<p>Nikt nie lubi pisa\u0107 dokumentacji, to w zasadzie truizm. Zawsze przestarza\u0142a, zawsze b\u0119d\u0105ca cia\u0142em obcym, kt\u00f3rej zmiany ci\u0119\u017cko jest \u015bledzi\u0107 wraz z kontekstem ewoluuj\u0105cego kodu (aczkolwiek w jednym z projekt\u00f3w mia\u0142em do czynienia z ciekawym eksperymentem &#8211; dokumentacji na Github Pages, dodawanej do PR wraz z produkcyjnym kodem). Tak\u017ce jednym z postulat\u00f3w Agile by\u0142o posiadanie dzia\u0142aj\u0105cego kodu ponad nawet najlepiej napisan\u0105 dokumentacj\u0105. Zak\u0142adam, by\u0142a to odpowied\u017a na problem niemo\u017cliwie rozbuchanych plan\u00f3w projektowych z lat 80tych, aczkolwiek znam tu g\u0142\u00f3wnie dowody anegdotyczne &#8211; chcia\u0142bym si\u0119 kiedy\u015b dokopa\u0107 do jakiej\u015b realnej analizy pokazuj\u0105cej skal\u0119 problemu.<\/p>\n<p>Kolejnym krokiem (cho\u0107 tak naprawd\u0119 <a href=\"https:\/\/www.developerdotstar.com\/mag\/articles\/reeves_design.html\">dokument fundacyjny<\/a> tego trendu to ju\u017c prawdziwa prehistoria, datowana na rok 1992) by\u0142o stwierdzenie, \u017ce najlepsz\u0105 dokumentacj\u0105 jest kod, co rodzi pewne problemy (o kt\u00f3rych ju\u017c cho\u0107by w <a href=\"https:\/\/martinfowler.com\/bliki\/CodeAsDocumentation.html\">2005 roku<\/a> wspomina\u0142 Martin Fowler). Aktualnie do \u0142ask wraca nieco temat tak zwanego \u201cTechnical Writing\u201d &#8211; aczkolwiek, o ile w moim pierwszym projekcie by\u0142a to zupe\u0142nie osobna rola&#8230;<\/p>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bc1c747f.png\" alt=\"\" \/><figcaption>&#8230;o tyle dzisiaj jest to jeszcze jeden skill, w sam raz dla naszych ju\u017c i tak doci\u0105\u017cony FullStack Developer\u00f3w.<\/figcaption><\/figure>\n<p>Faktem pozostaje, \u017ce ka\u017cdy chce mie\u0107 dobr\u0105 dokumentacj\u0119, a nikt takowej nie chce pisa\u0107. Mo\u017ce problem polega na tym, \u017ce to nie ludzie zajmuj\u0105cy si\u0119 programowaniem s\u0105 tacy krn\u0105brni, tylko same dokumentacje po prostu \u017ale robione?<\/p>\n<p>Takie jest te\u017c podej\u015bcie tw\u00f3rcy artyku\u0142u o znamiennym tytule \u201c<a href=\"https:\/\/www.worldofbs.com\/why-documentation-sucks\/\">Why Your Company&#8217;s Documentation Sucks<\/a>\u201d, gdzie stara si\u0119 umotywowa\u0107, \u017ce g\u0142\u00f3wnym problemem jest fakt wybierania\u2026 z\u0142ej reprezentacji danych. Ot\u00f3\u017c wysuwanym argumentem jest, \u017ce zwykle b\u0142\u0119dnie pr\u00f3bujemy przedstawi\u0107 grafowy problem za pomoc\u0105 struktury hierarchicznej. Nieco na mod\u0142\u0119 taktowania Jiry jako \u201c<a href=\"https:\/\/www.linkedin.com\/pulse\/how-jira-can-kill-your-software-teams-productivity-matias-muhonen\">\u017ar\u00f3d\u0142a wszelkiego z\u0142a w IT<\/a>\u201d, tutaj obrywa si\u0119 mocno Confluence, aczkolwiek do\u015b\u0107 podobne zarzuty mo\u017cna wytoczy\u0107 wobec np. Github Pages. Jako przyk\u0142ad bardzo dobrze dzia\u0142aj\u0105cej dokumentacji wskazywana s\u0105 za\u015b wszelkiej ma\u015bci Wiki, przyk\u0142adowo ta <a href=\"https:\/\/wiki.archlinux.org\/\">ArchLinuxa<\/a>.<\/p>\n<p>Jako fan map my\u015bli \u201cpropsuje\u201d og\u00f3lnie podej\u015bcie bardzo mocno Teraz czekam na dobr\u0105 narz\u0119dzi\u00f3wk\u0119 &#8211; nigdy nie by\u0142em w stanie polubi\u0107 si\u0119 z Confluence.<\/p>\n<h3 id=\"-r-d-a-\">\u0179r\u00f3d\u0142a:<\/h3>\n<ul>\n<li><a href=\"https:\/\/www.worldofbs.com\/why-documentation-sucks\/\">Why Your Company&#8217;s Documentation Sucks<\/a><\/li>\n<li><a href=\"https:\/\/www.developerdotstar.com\/mag\/articles\/reeves_design.html\">What Is Software Design?<\/a><\/li>\n<li><a href=\"https:\/\/martinfowler.com\/bliki\/CodeAsDocumentation.html\">CodeAsDocumentation<\/a><\/li>\n<li><a href=\"https:\/\/www.linkedin.com\/pulse\/how-jira-can-kill-your-software-teams-productivity-matias-muhonen\/\">How JIRA can kill your software team&#8217;s productivity<\/a><\/li>\n<\/ul>\n<h2 id=\"2-jak-radzic-sobie-z-problemami-z-cache\" data-num=2><a href=\"http:\/\/calpaterson.com\/ttl-hell.html\">2. Jak radzi\u0107 sobie z problemami z Cache<\/a><\/h2>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bc3aa991.png\" alt=\"\" \/><\/figure>\n<blockquote><p>\u201cW programowaniu s\u0105 dwie trudne rzeczy: inwalidacja cache i nazywanie rzeczy\u201d.<\/p><\/blockquote>\n<p>Ten mocno ju\u017c wy\u015bwiechtany cytat jest nieco nies\u0142usznie przypisywany Martinowi Fowlerowi. <a href=\"https:\/\/skeptics.stackexchange.com\/questions\/19836\/has-phil-karlton-ever-said-there-are-only-two-hard-things-in-computer-science\">Jego autorem jest bowiem Phil Karlton<\/a>, jeden z tw\u00f3rc\u00f3w Netscape. Na obron\u0119 Martina, <a href=\"https:\/\/martinfowler.com\/bliki\/TwoHardThings.html\">w swoim tek\u015bcie (w kt\u00f3rym rozpromowa\u0142 powiedzenie) wskazuje oryginalnego autora<\/a>. Internet po prostu jak zwykle zapomnia\u0142<\/p>\n<p>Trudne problemy s\u0105 wi\u0119c dwa. Na nazywanie rzeczy chyba nic nie poradzimy (co najwy\u017cej mo\u017cemy przeprowadzi\u0107 si\u0119 z \u201ckr\u00f3lestwa rzeczownik\u00f3w\u201d &#8211; polecam <a href=\"http:\/\/steve-yegge.blogspot.com\/2006\/03\/execution-in-kingdom-of-nouns.html\">fantastyczny, klasyczny esej<\/a>, kt\u00f3ry nie szcz\u0119dz\u0105c ironii pokazuje sytuacj\u0119 w kt\u00f3rej \u017cyjemy), mo\u017ce zatem w jaki\u015b spos\u00f3b zaadresowa\u0107 problemy z cache?<\/p>\n<p>Je\u017celi czego\u015b si\u0119 nauczy\u0142em przez lata w IT, to tego \u017ce w in\u017cynierii oprogramowania bardzo trudno m\u00f3wi\u0107 o rozwi\u0105zaniach idealny. <a href=\"https:\/\/groups.csail.mit.edu\/tds\/papers\/Lynch\/jacm85.pdf\">Analizuj\u0105c<\/a> <a href=\"https:\/\/en.wikipedia.org\/wiki\/Two_Generals%27_Problem\">problem<\/a> <a href=\"https:\/\/medium.com\/all-things-ledger\/the-byzantine-generals-problem-168553f31480\">za<\/a> <a href=\"https:\/\/dean.eigenmann.me\/blog\/2020\/02\/17\/cap-theorem\/\">problemem<\/a>, dowiadujemy si\u0119 o kolejnych ograniczeniach wymuszaj\u0105cych na naszych aplikacjach kompromisy. Jednym z popularniejszym jest po\u015bwi\u0119cenie poprawno\u015bci na rzecz pr\u0119dko\u015bci odpowiedzi, a najlepszym przedstawicielem tego trendu jest w\u0142a\u015bnie u\u017cycie cache. Bo w\u0142a\u015bnie rzeczona \u201cinwalidacja\u201d, (czyli wyczyszczenie przestarza\u0142ych\/niepotrzebnych informacji z cache) jest objawem \u017cycia w \u015bwiecie kt\u00f3ry nie jest idealny.<\/p>\n<p>Szcz\u0119\u015bliwie, na ka\u017cdy \u201cniemo\u017cliwy\u201d problem znajdzie si\u0119 jakie\u015b \u201cwystarczaj\u0105co dobre\u201d rozwi\u0105zanie. I o w\u0142a\u015bnie tego typu solucjach dla cache m\u00f3wi artyku\u0142 kt\u00f3rym si\u0119 z <a href=\"http:\/\/calpaterson.com\/ttl-hell.html\">Wami<\/a> dzisiaj dzielimy. Autor prezentuje bowiem przegl\u0105d rozwi\u0105za\u0144 nie bazuj\u0105cych TTL &#8211; konkretnym, z g\u00f3ry ustalonym czasie \u017cycia danych w cache. Rozwi\u0105zaniu o tyle trywialnym, co powoduj\u0105cym czasem nietrywialne bugi.<\/p>\n<p>Tekst stanowi ciekawy przegl\u0105d alternatywnych rozwi\u0105za\u0144. Przy podejmowaniu decyzji o lekturze warto wzi\u0105\u0107 pod uwag\u0119 profil potencjalnego czytelnika &#8211; raczej nie znajdziecie tutaj akademickich rozwa\u017ca\u0144, bardziej sposoby jak poradzi\u0107 sobie z najcz\u0119stszymi potencjalnymi przypad\u0142o\u015bciami aplikacji webowych.<\/p>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bc43a66e.png\" alt=\"\" \/><figcaption>PS: Je\u015bli chodzi o cytat kt\u00f3rym zacz\u0119li\u015bmy t\u0105 sekcj\u0119, to i tak najbardziej lubi\u0119 jego inny wariant<\/figcaption><\/figure>\n<h3 id=\"-r-d-a--1\">\u0179r\u00f3d\u0142a:<\/h3>\n<ul>\n<li><a href=\"http:\/\/calpaterson.com\/ttl-hell.html\">Staying out of TTL hell<\/a><\/li>\n<li><a href=\"http:\/\/steve-yegge.blogspot.com\/2006\/03\/execution-in-kingdom-of-nouns.html\">Execution in the Kingdom of Nouns<\/a><\/li>\n<\/ul>\n<h2 id=\"3-czy-rust-rzeczywiscie-nie-nadaje-sie-do-programowania-asynchronicznego\" data-num=3><a href=\"https:\/\/theta.eu.org\/2021\/03\/08\/async-rust-2.html\">3. Czy Rust rzeczywi\u015bcie nie nadaje si\u0119 do programowania asynchronicznego? <\/a><\/h2>\n<p>Na zako\u0144czenie mam tekst z jednej strony bardzo hermetyczny, z drugiej za\u015b taki, kt\u00f3ry powi<br \/>\nnien zainteresowa\u0107 wszystkich chc\u0105cych poszerzy\u0107 horyzonty. Popularno\u015b\u0107 Rusta jako j\u0119zyka jest jakim\u015b fascynuj\u0105cym fenomenem. Z jednej strony wszyscy go kochaj\u0105, z drugiej strony przeci\u0119tny programista ma raczej ma\u0142\u0105 szans\u0119 spotka\u0107 si\u0119 z jego u\u017cyciem. Jak pisali\u015bmy w jednej z poprzednich edycji, w du\u017cych firmach jest on u\u017cywany w coraz wi\u0119kszej ilo\u015bci projekt\u00f3w, ale mam wra\u017cenie \u017ce do \u201cmainstreamu\u201d ma szans\u0119 przebi\u0107 si\u0119 dopiero wraz z WebAssembly &#8211; czyli jeszcze troch\u0119 wody up\u0142ynie bo i ta technologia le\u017cy w domenie early-adopter\u00f3w.<\/p>\n<p>Czemu po raz kolejny wspominam t\u0105 popularno\u015b\u0107? Poniewa\u017c, pomimo wielkiej mi\u0142o\u015bci jak\u0105 spo\u0142eczno\u015b\u0107 programistyczna raczy Rusta, czasem internet podchwyci teksty nieco bardziej krytyczne. Jednym z nich jest prezentowana dzi\u015b przez nas publikacja, analizuj\u0105ca spos\u00f3b dzia\u0142ania asynchroniczno\u015bci w tym j\u0119zyku. Tak naprawd\u0119 jest to follow up <a href=\"https:\/\/theta.eu.org\/2017\/08\/04\/async-rust.html\">tekstu z roku 2017<\/a>, gdzie autor po raz pierwszy sygnalizowa\u0142 problemy. W opublikowanym w zesz\u0142ym tygodniu tek\u015bcie pojawiaj\u0105 si\u0119 bardzo \u015bmia\u0142e stwierdzenia, \u017ce problemy s\u0105 nie do rozwi\u0105zania &#8211; wynikaj\u0105 bowiem z decyzji projektowych kt\u00f3re przy\u015bwieca\u0142y tw\u00f3rcom j\u0119zyka przy jego tworzeniu.<\/p>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bc538927.png\" alt=\"\" \/><figcaption>Czyli min. dbanie o to \u017ceby\u015bmy nie kopn\u0119li si\u0119 w kolanko. <a href=\"https:\/\/leftoversalad.com\/c\/015_programmingpeople\/\">Tak inni programi\u015bci widz\u0105 bowiem Rusta.<\/a><span class=\"-mobiledoc-kit__atom\">\u200c\u200c<\/span><\/figcaption><\/figure>\n<p>TLDR: O co chodzi? Ot\u00f3\u017c autor stara si\u0119 w swoim tek\u015bcie udowodni\u0107, \u017ce ca\u0142a magia Rusta opiera si\u0119 na jego obiektach strukturalnych. Wi\u0119kszo\u015b\u0107 sk\u0142adni j\u0119zyka oraz dobrych praktyk z niej wynikaj\u0105cych zak\u0142ada styl pisania oparty w\u0142a\u015bnie o nie, wykonuj\u0105c instrukcje jedna po drugiej (dla ludzi kt\u00f3rzy lubi\u0105 teorie &#8211; <a href=\"https:\/\/en.wikipedia.org\/wiki\/Continuation-passing_style\">jest to tak zwany \u201cdirect style\u201d<\/a>). W momencie kiedy zaczynamy pisa\u0107 w spos\u00f3b asynchroniczny, przestawiamy si\u0119 na tak zwany <a href=\"https:\/\/en.wikipedia.org\/wiki\/Continuation-passing_style\">continuation passing style (potocznie zwany CSP)<\/a>. Powoduje to, \u017ce musimy z Rusta robi\u0107 j\u0119zyk funkcyjny, bowiem operacje teraz s\u0105 wykonywane przez tak zwane \u201ckontynuacje\u201d. W odr\u00f3\u017cnieniu od takiego Go, kt\u00f3ry od pocz\u0105tku traktowa\u0142 asynchroniczno\u015b\u0107 jako istotny fragment projektu j\u0119zyka, zar\u00f3wno programi\u015bci Rusta jak i jego tw\u00f3rcy musieli p\u00f3j\u015b\u0107 na szereg kompromis\u00f3w przy tworzeniu async\/awaita w tym j\u0119zyku. Przy obecnym trendzie na \u201casynchronizowanie\u201d wszystkich API, Rust traci swoj\u0105 prostot\u0119 i klarowno\u015b\u0107.<\/p>\n<p>Tekst przebi\u0142 si\u0119 w zasadzie do wszystkich istotnych agregator\u00f3w. Zar\u00f3wno na <a href=\"https:\/\/news.ycombinator.com\/item?id=26406989\">Hacker News<\/a>, <a href=\"https:\/\/www.reddit.com\/r\/programming\/comments\/m1vo6k\/why_asynchronous_rust_doesnt_work_hn_discussion\/\">Redditcie<\/a>, <a href=\"https:\/\/lobste.rs\/s\/3vt0s6\/why_asynchronous_rust_doesn_t_work\">Lobsterze<\/a>, jak i zreszt\u0105 pod <a href=\"https:\/\/theta.eu.org\/2021\/03\/08\/async-rust-2.html\">samym postem<\/a> mo\u017cna znale\u017a\u0107 bardzo \u017carliwe debaty czy autor ma racje, czy mo\u017ce jednak przesadza. Wskazywane jest te\u017c to, \u017ce asynchroniczno\u015b\u0107 tak naprawd\u0119 jest niezb\u0119dnym elementem j\u0119zyka w 2021, wi\u0119c naturalnym jest, \u017ce i w Rustcie zaczyna mie\u0107 ona coraz wi\u0119ksze znaczenie.<\/p>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bc6d7ad4.png\" alt=\"\" \/><figcaption><a href=\"https:\/\/boards.4channel.org\/g\/thread\/80605464\/now-that-rust-turned-out-to-be-complete-failure\">Temat trafi\u0142 nawet na 4Chana <\/a> I dyskusja nawet tam jest do\u015b\u0107 merytoryczna.<\/figcaption><\/figure>\n<p>Je\u015bli jeste\u015bcie zainteresowani budow\u0105 j\u0119zyk\u00f3w programowania &#8211; zar\u00f3wno artyku\u0142, jak i komentarze kt\u00f3rymi obr\u00f3s\u0142 stanowi\u0105 lektur\u0119 obowi\u0105zkow\u0105.<\/p>\n<h3 id=\"-r-d-a--2\">\u0179r\u00f3d\u0142a:<\/h3>\n<ul>\n<li><a href=\"https:\/\/theta.eu.org\/2021\/03\/08\/async-rust-2.html\">Why asynchronous Rust doesn&#8217;t work<\/a><\/li>\n<li><a href=\"https:\/\/theta.eu.org\/2017\/08\/04\/async-rust.html\">Asynchronous Rust<\/a><\/li>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Continuation-passing_style\">Continuation-passing styl<\/a>e<\/li>\n<\/ul>\n<hr \/>\n<h2 id=\"bonus-jako-branza-nauczylismy-sie-po-raz-kolejny-ze-trzeba-robic-backupy-najlepiej-u-innego-providera\" data-num=4>Bonus: jako bran\u017ca nauczyli\u015bmy si\u0119 po raz kolejny, \u017ce trzeba robi\u0107 backupy&#8230; najlepiej u innego providera<\/h2>\n<p>Dla porz\u0105dku nie m\u00f3g\u0142bym o tym nie wspomnie\u0107, aczkolwiek nie b\u0119d\u0119 si\u0119 tutaj mocno go rozwija\u0142. O po\u017carze serwerowni OVH pewnie ka\u017cdy ju\u017c s\u0142ysza\u0142, ka\u017cdy ju\u017c te\u017c pisa\u0142, dlatego zamiast po raz kolejny opisywa\u0107 t\u0105 \u201cpi\u0119kn\u0105 tragedi\u0119\u201d ode\u015bl\u0119 do fajnego <a href=\"https:\/\/venturebeat.com\/2021\/03\/10\/ovh-datacenter-disaster-shows-why-recovery-plans-and-backups-are-vital\/\">opracowania z VentureBeat<\/a>. Od siebie zostawi\u0119 tylko ju\u017c nieco oklepanego mema, ale my\u015bl\u0119 \u017ce nasza edycja bez niego by\u0142aby mocno niekompletna.<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bc8441aa.png\" alt=\"\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Po proprzedniej specjalnej konferencyjnej edycji znowu mamy dla Was przegl\u0105d 3 ciekawych link\u00f3w oraz ma\u0142y bonusik (bonusik za to \u017ce publikacja zamiast w sobot\u0119 ukazuje si\u0119 w niedziele, \u017cycie dogoni\u0142o autora \ud83d\ude09).<\/p>\n<p>Zapraszam do lektury!<\/p>\n","protected":false},"author":10,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[266],"tags":[],"class_list":["post-10168","post","type-post","status-publish","format-standard","hentry","category-craftsmanship"],"acf":{"weekly_summary":true,"estimated_reading_time":"6"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Software Craftsmanship Sunday vol. 28 - Vived<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Software Craftsmanship Sunday vol. 28 - Vived\" \/>\n<meta property=\"og:description\" content=\"Po proprzedniej specjalnej konferencyjnej edycji znowu mamy dla Was przegl\u0105d 3 ciekawych link\u00f3w oraz ma\u0142y bonusik (bonusik za to \u017ce publikacja zamiast w sobot\u0119 ukazuje si\u0119 w niedziele, \u017cycie dogoni\u0142o autora \ud83d\ude09). Zapraszam do lektury!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2021-03-14T08:21:43+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-19T11:20:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bbe443c1.png\" \/>\n<meta name=\"author\" content=\"Artur Skowro\u0144ski\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"Software Craftsmanship Sunday vol. 28\",\"datePublished\":\"2021-03-14T08:21:43+00:00\",\"dateModified\":\"2022-09-19T11:20:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/\"},\"wordCount\":1374,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bbe443c1.png\",\"articleSection\":[\"Craftsmanship\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/\",\"url\":\"https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/\",\"name\":\"Software Craftsmanship Sunday vol. 28 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bbe443c1.png\",\"datePublished\":\"2021-03-14T08:21:43+00:00\",\"dateModified\":\"2022-09-19T11:20:15+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bbe443c1.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bbe443c1.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Software Craftsmanship Sunday vol. 28\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/vived.io\/pl\/#website\",\"url\":\"https:\/\/vived.io\/pl\/\",\"name\":\"Vived\",\"description\":\"platform empowering IT people and technology companies to synergic growth\",\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/vived.io\/pl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/vived.io\/pl\/#organization\",\"name\":\"Vived\",\"url\":\"https:\/\/vived.io\/pl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"width\":136,\"height\":45,\"caption\":\"Vived\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\",\"name\":\"Artur Skowro\u0144ski\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g\",\"caption\":\"Artur Skowro\u0144ski\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Software Craftsmanship Sunday vol. 28 - Vived","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/","og_locale":"pl_PL","og_type":"article","og_title":"Software Craftsmanship Sunday vol. 28 - Vived","og_description":"Po proprzedniej specjalnej konferencyjnej edycji znowu mamy dla Was przegl\u0105d 3 ciekawych link\u00f3w oraz ma\u0142y bonusik (bonusik za to \u017ce publikacja zamiast w sobot\u0119 ukazuje si\u0119 w niedziele, \u017cycie dogoni\u0142o autora \ud83d\ude09). Zapraszam do lektury!","og_url":"https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/","og_site_name":"Vived","article_published_time":"2021-03-14T08:21:43+00:00","article_modified_time":"2022-09-19T11:20:15+00:00","og_image":[{"url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bbe443c1.png","type":"","width":"","height":""}],"author":"Artur Skowro\u0144ski","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"Software Craftsmanship Sunday vol. 28","datePublished":"2021-03-14T08:21:43+00:00","dateModified":"2022-09-19T11:20:15+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/"},"wordCount":1374,"commentCount":0,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bbe443c1.png","articleSection":["Craftsmanship"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/","url":"https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/","name":"Software Craftsmanship Sunday vol. 28 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bbe443c1.png","datePublished":"2021-03-14T08:21:43+00:00","dateModified":"2022-09-19T11:20:15+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bbe443c1.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bbe443c1.png"},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/software-craftsmanship-saturday-vol-28\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Software Craftsmanship Sunday vol. 28"}]},{"@type":"WebSite","@id":"https:\/\/vived.io\/pl\/#website","url":"https:\/\/vived.io\/pl\/","name":"Vived","description":"platform empowering IT people and technology companies to synergic growth","publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vived.io\/pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/vived.io\/pl\/#organization","name":"Vived","url":"https:\/\/vived.io\/pl\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/","url":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","width":136,"height":45,"caption":"Vived"},"image":{"@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3","name":"Artur Skowro\u0144ski","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","caption":"Artur Skowro\u0144ski"}}]}},"blocks_vived":[{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"<h2 id=\"1-co-zrobi-eby-dokumentacja-nie-ssa-a-\">1. <a href=\"https:\/\/www.worldofbs.com\/why-documentation-sucks\/\">Co zrobi\u0107 \u017ceby dokumentacja nie \u201cssa\u0142a\u201d?<\/a><\/h2>\n<figure class=\"kg-card kg-image-card\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bbe443c1.png\" alt=\"\" \/><\/figure>\nNikt nie lubi pisa\u0107 dokumentacji, to w zasadzie truizm. Zawsze przestarza\u0142a, zawsze b\u0119d\u0105ca cia\u0142em obcym, kt\u00f3rej zmiany ci\u0119\u017cko jest \u015bledzi\u0107 wraz z kontekstem ewoluuj\u0105cego kodu (aczkolwiek w jednym z projekt\u00f3w mia\u0142em do czynienia z ciekawym eksperymentem - dokumentacji na Github Pages, dodawanej do PR wraz z produkcyjnym kodem). Tak\u017ce jednym z postulat\u00f3w Agile by\u0142o posiadanie dzia\u0142aj\u0105cego kodu ponad nawet najlepiej napisan\u0105 dokumentacj\u0105. Zak\u0142adam, by\u0142a to odpowied\u017a na problem niemo\u017cliwie rozbuchanych plan\u00f3w projektowych z lat 80tych, aczkolwiek znam tu g\u0142\u00f3wnie dowody anegdotyczne - chcia\u0142bym si\u0119 kiedy\u015b dokopa\u0107 do jakiej\u015b realnej analizy pokazuj\u0105cej skal\u0119 problemu.\n\nKolejnym krokiem (cho\u0107 tak naprawd\u0119 <a href=\"https:\/\/www.developerdotstar.com\/mag\/articles\/reeves_design.html\">dokument fundacyjny<\/a> tego trendu to ju\u017c prawdziwa prehistoria, datowana na rok 1992) by\u0142o stwierdzenie, \u017ce najlepsz\u0105 dokumentacj\u0105 jest kod, co rodzi pewne problemy (o kt\u00f3rych ju\u017c cho\u0107by w <a href=\"https:\/\/martinfowler.com\/bliki\/CodeAsDocumentation.html\">2005 roku<\/a> wspomina\u0142 Martin Fowler). Aktualnie do \u0142ask wraca nieco temat tak zwanego \u201cTechnical Writing\u201d - aczkolwiek, o ile w moim pierwszym projekcie by\u0142a to zupe\u0142nie osobna rola...\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bc1c747f.png\" alt=\"\" \/>\n<figcaption>...o tyle dzisiaj jest to jeszcze jeden skill, w sam raz dla naszych ju\u017c i tak doci\u0105\u017cony FullStack Developer\u00f3w.<\/figcaption><\/figure>\nFaktem pozostaje, \u017ce ka\u017cdy chce mie\u0107 dobr\u0105 dokumentacj\u0119, a nikt takowej nie chce pisa\u0107. Mo\u017ce problem polega na tym, \u017ce to nie ludzie zajmuj\u0105cy si\u0119 programowaniem s\u0105 tacy krn\u0105brni, tylko same dokumentacje po prostu \u017ale robione?\n\nTakie jest te\u017c podej\u015bcie tw\u00f3rcy artyku\u0142u o znamiennym tytule \u201c<a href=\"https:\/\/www.worldofbs.com\/why-documentation-sucks\/\">Why Your Company's Documentation Sucks<\/a>\u201d, gdzie stara si\u0119 umotywowa\u0107, \u017ce g\u0142\u00f3wnym problemem jest fakt wybierania\u2026 z\u0142ej reprezentacji danych. Ot\u00f3\u017c wysuwanym argumentem jest, \u017ce zwykle b\u0142\u0119dnie pr\u00f3bujemy przedstawi\u0107 grafowy problem za pomoc\u0105 struktury hierarchicznej. Nieco na mod\u0142\u0119 taktowania Jiry jako \u201c<a href=\"https:\/\/www.linkedin.com\/pulse\/how-jira-can-kill-your-software-teams-productivity-matias-muhonen\">\u017ar\u00f3d\u0142a wszelkiego z\u0142a w IT<\/a>\u201d, tutaj obrywa si\u0119 mocno Confluence, aczkolwiek do\u015b\u0107 podobne zarzuty mo\u017cna wytoczy\u0107 wobec np. Github Pages. Jako przyk\u0142ad bardzo dobrze dzia\u0142aj\u0105cej dokumentacji wskazywana s\u0105 za\u015b wszelkiej ma\u015bci Wiki, przyk\u0142adowo ta <a href=\"https:\/\/wiki.archlinux.org\/\">ArchLinuxa<\/a>.\n\nJako fan map my\u015bli \u201cpropsuje\u201d og\u00f3lnie podej\u015bcie bardzo mocno Teraz czekam na dobr\u0105 narz\u0119dzi\u00f3wk\u0119 - nigdy nie by\u0142em w stanie polubi\u0107 si\u0119 z Confluence.\n<h3 id=\"-r-d-a-\">\u0179r\u00f3d\u0142a:<\/h3>\n<ul>\n \t<li><a href=\"https:\/\/www.worldofbs.com\/why-documentation-sucks\/\">Why Your Company's Documentation Sucks<\/a><\/li>\n \t<li><a href=\"https:\/\/www.developerdotstar.com\/mag\/articles\/reeves_design.html\">What Is Software Design?<\/a><\/li>\n \t<li><a href=\"https:\/\/martinfowler.com\/bliki\/CodeAsDocumentation.html\">CodeAsDocumentation<\/a><\/li>\n \t<li><a href=\"https:\/\/www.linkedin.com\/pulse\/how-jira-can-kill-your-software-teams-productivity-matias-muhonen\/\">How JIRA can kill your software team's productivity<\/a><\/li>\n<\/ul>\n<h2 id=\"2-jak-radzi-sobie-z-problemami-z-cache-\"><a href=\"http:\/\/calpaterson.com\/ttl-hell.html\">2. Jak radzi\u0107 sobie z problemami z Cache<\/a><\/h2>\n<figure class=\"kg-card kg-image-card\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bc3aa991.png\" alt=\"\" \/><\/figure>\n<blockquote>\u201cW programowaniu s\u0105 dwie trudne rzeczy: inwalidacja cache i nazywanie rzeczy\u201d.<\/blockquote>\nTen mocno ju\u017c wy\u015bwiechtany cytat jest nieco nies\u0142usznie przypisywany Martinowi Fowlerowi. <a href=\"https:\/\/skeptics.stackexchange.com\/questions\/19836\/has-phil-karlton-ever-said-there-are-only-two-hard-things-in-computer-science\">Jego autorem jest bowiem Phil Karlton<\/a>, jeden z tw\u00f3rc\u00f3w Netscape. Na obron\u0119 Martina, <a href=\"https:\/\/martinfowler.com\/bliki\/TwoHardThings.html\">w swoim tek\u015bcie (w kt\u00f3rym rozpromowa\u0142 powiedzenie) wskazuje oryginalnego autora<\/a>. Internet po prostu jak zwykle zapomnia\u0142\n\nTrudne problemy s\u0105 wi\u0119c dwa. Na nazywanie rzeczy chyba nic nie poradzimy (co najwy\u017cej mo\u017cemy przeprowadzi\u0107 si\u0119 z \u201ckr\u00f3lestwa rzeczownik\u00f3w\u201d - polecam <a href=\"http:\/\/steve-yegge.blogspot.com\/2006\/03\/execution-in-kingdom-of-nouns.html\">fantastyczny, klasyczny esej<\/a>, kt\u00f3ry nie szcz\u0119dz\u0105c ironii pokazuje sytuacj\u0119 w kt\u00f3rej \u017cyjemy), mo\u017ce zatem w jaki\u015b spos\u00f3b zaadresowa\u0107 problemy z cache?\n\nJe\u017celi czego\u015b si\u0119 nauczy\u0142em przez lata w IT, to tego \u017ce w in\u017cynierii oprogramowania bardzo trudno m\u00f3wi\u0107 o rozwi\u0105zaniach idealny. <a href=\"https:\/\/groups.csail.mit.edu\/tds\/papers\/Lynch\/jacm85.pdf\">Analizuj\u0105c<\/a> <a href=\"https:\/\/en.wikipedia.org\/wiki\/Two_Generals%27_Problem\">problem<\/a> <a href=\"https:\/\/medium.com\/all-things-ledger\/the-byzantine-generals-problem-168553f31480\">za<\/a> <a href=\"https:\/\/dean.eigenmann.me\/blog\/2020\/02\/17\/cap-theorem\/\">problemem<\/a>, dowiadujemy si\u0119 o kolejnych ograniczeniach wymuszaj\u0105cych na naszych aplikacjach kompromisy. Jednym z popularniejszym jest po\u015bwi\u0119cenie poprawno\u015bci na rzecz pr\u0119dko\u015bci odpowiedzi, a najlepszym przedstawicielem tego trendu jest w\u0142a\u015bnie u\u017cycie cache. Bo w\u0142a\u015bnie rzeczona \u201cinwalidacja\u201d, (czyli wyczyszczenie przestarza\u0142ych\/niepotrzebnych informacji z cache) jest objawem \u017cycia w \u015bwiecie kt\u00f3ry nie jest idealny.\n\nSzcz\u0119\u015bliwie, na ka\u017cdy \u201cniemo\u017cliwy\u201d problem znajdzie si\u0119 jakie\u015b \u201cwystarczaj\u0105co dobre\u201d rozwi\u0105zanie. I o w\u0142a\u015bnie tego typu solucjach dla cache m\u00f3wi artyku\u0142 kt\u00f3rym si\u0119 z <a href=\"http:\/\/calpaterson.com\/ttl-hell.html\">Wami<\/a> dzisiaj dzielimy. Autor prezentuje bowiem przegl\u0105d rozwi\u0105za\u0144 nie bazuj\u0105cych TTL - konkretnym, z g\u00f3ry ustalonym czasie \u017cycia danych w cache. Rozwi\u0105zaniu o tyle trywialnym, co powoduj\u0105cym czasem nietrywialne bugi.\n\nTekst stanowi ciekawy przegl\u0105d alternatywnych rozwi\u0105za\u0144. Przy podejmowaniu decyzji o lekturze warto wzi\u0105\u0107 pod uwag\u0119 profil potencjalnego czytelnika - raczej nie znajdziecie tutaj akademickich rozwa\u017ca\u0144, bardziej sposoby jak poradzi\u0107 sobie z najcz\u0119stszymi potencjalnymi przypad\u0142o\u015bciami aplikacji webowych.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bc43a66e.png\" alt=\"\" \/>\n\n<figcaption>PS: Je\u015bli chodzi o cytat kt\u00f3rym zacz\u0119li\u015bmy t\u0105 sekcj\u0119, to i tak najbardziej lubi\u0119 jego inny wariant<\/figcaption><\/figure>\n<h3 id=\"-r-d-a--1\">\u0179r\u00f3d\u0142a:<\/h3>\n<ul>\n \t<li><a href=\"http:\/\/calpaterson.com\/ttl-hell.html\">Staying out of TTL hell<\/a><\/li>\n \t<li><a href=\"http:\/\/steve-yegge.blogspot.com\/2006\/03\/execution-in-kingdom-of-nouns.html\">Execution in the Kingdom of Nouns<\/a><\/li>\n<\/ul>\n<h2 id=\"3-czy-rust-rzeczywi-cie-nie-nadaje-si-do-programowania-asynchronicznego-\"><a href=\"https:\/\/theta.eu.org\/2021\/03\/08\/async-rust-2.html\">3. Czy Rust rzeczywi\u015bcie nie nadaje si\u0119 do programowania asynchronicznego? <\/a><\/h2>\nNa zako\u0144czenie mam tekst z jednej strony bardzo hermetyczny, z drugiej za\u015b taki, kt\u00f3ry powi\nnien zainteresowa\u0107 wszystkich chc\u0105cych poszerzy\u0107 horyzonty. Popularno\u015b\u0107 Rusta jako j\u0119zyka jest jakim\u015b fascynuj\u0105cym fenomenem. Z jednej strony wszyscy go kochaj\u0105, z drugiej strony przeci\u0119tny programista ma raczej ma\u0142\u0105 szans\u0119 spotka\u0107 si\u0119 z jego u\u017cyciem. Jak pisali\u015bmy w jednej z poprzednich edycji, w du\u017cych firmach jest on u\u017cywany w coraz wi\u0119kszej ilo\u015bci projekt\u00f3w, ale mam wra\u017cenie \u017ce do \u201cmainstreamu\u201d ma szans\u0119 przebi\u0107 si\u0119 dopiero wraz z WebAssembly - czyli jeszcze troch\u0119 wody up\u0142ynie bo i ta technologia le\u017cy w domenie early-adopter\u00f3w.\n\nCzemu po raz kolejny wspominam t\u0105 popularno\u015b\u0107? Poniewa\u017c, pomimo wielkiej mi\u0142o\u015bci jak\u0105 spo\u0142eczno\u015b\u0107 programistyczna raczy Rusta, czasem internet podchwyci teksty nieco bardziej krytyczne. Jednym z nich jest prezentowana dzi\u015b przez nas publikacja, analizuj\u0105ca spos\u00f3b dzia\u0142ania asynchroniczno\u015bci w tym j\u0119zyku. Tak naprawd\u0119 jest to follow up <a href=\"https:\/\/theta.eu.org\/2017\/08\/04\/async-rust.html\">tekstu z roku 2017<\/a>, gdzie autor po raz pierwszy sygnalizowa\u0142 problemy. W opublikowanym w zesz\u0142ym tygodniu tek\u015bcie pojawiaj\u0105 si\u0119 bardzo \u015bmia\u0142e stwierdzenia, \u017ce problemy s\u0105 nie do rozwi\u0105zania - wynikaj\u0105 bowiem z decyzji projektowych kt\u00f3re przy\u015bwieca\u0142y tw\u00f3rcom j\u0119zyka przy jego tworzeniu.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bc538927.png\" alt=\"\" \/>\n\n<figcaption>Czyli min. dbanie o to \u017ceby\u015bmy nie kopn\u0119li si\u0119 w kolanko. <a href=\"https:\/\/leftoversalad.com\/c\/015_programmingpeople\/\">Tak inni programi\u015bci widz\u0105 bowiem Rusta.<\/a><span class=\"-mobiledoc-kit__atom\">\u200c\u200c<\/span><\/figcaption><\/figure>\nTLDR: O co chodzi? Ot\u00f3\u017c autor stara si\u0119 w swoim tek\u015bcie udowodni\u0107, \u017ce ca\u0142a magia Rusta opiera si\u0119 na jego obiektach strukturalnych. Wi\u0119kszo\u015b\u0107 sk\u0142adni j\u0119zyka oraz dobrych praktyk z niej wynikaj\u0105cych zak\u0142ada styl pisania oparty w\u0142a\u015bnie o nie, wykonuj\u0105c instrukcje jedna po drugiej (dla ludzi kt\u00f3rzy lubi\u0105 teorie - <a href=\"https:\/\/en.wikipedia.org\/wiki\/Continuation-passing_style\">jest to tak zwany \u201cdirect style\u201d<\/a>). W momencie kiedy zaczynamy pisa\u0107 w spos\u00f3b asynchroniczny, przestawiamy si\u0119 na tak zwany <a href=\"https:\/\/en.wikipedia.org\/wiki\/Continuation-passing_style\">continuation passing style (potocznie zwany CSP)<\/a>. Powoduje to, \u017ce musimy z Rusta robi\u0107 j\u0119zyk funkcyjny, bowiem operacje teraz s\u0105 wykonywane przez tak zwane \u201ckontynuacje\u201d. W odr\u00f3\u017cnieniu od takiego Go, kt\u00f3ry od pocz\u0105tku traktowa\u0142 asynchroniczno\u015b\u0107 jako istotny fragment projektu j\u0119zyka, zar\u00f3wno programi\u015bci Rusta jak i jego tw\u00f3rcy musieli p\u00f3j\u015b\u0107 na szereg kompromis\u00f3w przy tworzeniu async\/awaita w tym j\u0119zyku. Przy obecnym trendzie na \u201casynchronizowanie\u201d wszystkich API, Rust traci swoj\u0105 prostot\u0119 i klarowno\u015b\u0107.\n\nTekst przebi\u0142 si\u0119 w zasadzie do wszystkich istotnych agregator\u00f3w. Zar\u00f3wno na <a href=\"https:\/\/news.ycombinator.com\/item?id=26406989\">Hacker News<\/a>, <a href=\"https:\/\/www.reddit.com\/r\/programming\/comments\/m1vo6k\/why_asynchronous_rust_doesnt_work_hn_discussion\/\">Redditcie<\/a>, <a href=\"https:\/\/lobste.rs\/s\/3vt0s6\/why_asynchronous_rust_doesn_t_work\">Lobsterze<\/a>, jak i zreszt\u0105 pod <a href=\"https:\/\/theta.eu.org\/2021\/03\/08\/async-rust-2.html\">samym postem<\/a> mo\u017cna znale\u017a\u0107 bardzo \u017carliwe debaty czy autor ma racje, czy mo\u017ce jednak przesadza. Wskazywane jest te\u017c to, \u017ce asynchroniczno\u015b\u0107 tak naprawd\u0119 jest niezb\u0119dnym elementem j\u0119zyka w 2021, wi\u0119c naturalnym jest, \u017ce i w Rustcie zaczyna mie\u0107 ona coraz wi\u0119ksze znaczenie.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bc6d7ad4.png\" alt=\"\" \/>\n\n<figcaption><a href=\"https:\/\/boards.4channel.org\/g\/thread\/80605464\/now-that-rust-turned-out-to-be-complete-failure\">Temat trafi\u0142 nawet na 4Chana <\/a> I dyskusja nawet tam jest do\u015b\u0107 merytoryczna.<\/figcaption><\/figure>\nJe\u015bli jeste\u015bcie zainteresowani budow\u0105 j\u0119zyk\u00f3w programowania - zar\u00f3wno artyku\u0142, jak i komentarze kt\u00f3rymi obr\u00f3s\u0142 stanowi\u0105 lektur\u0119 obowi\u0105zkow\u0105.\n<h3 id=\"-r-d-a--2\">\u0179r\u00f3d\u0142a:<\/h3>\n<ul>\n \t<li><a href=\"https:\/\/theta.eu.org\/2021\/03\/08\/async-rust-2.html\">Why asynchronous Rust doesn't work<\/a><\/li>\n \t<li><a href=\"https:\/\/theta.eu.org\/2017\/08\/04\/async-rust.html\">Asynchronous Rust<\/a><\/li>\n \t<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Continuation-passing_style\">Continuation-passing styl<\/a>e<\/li>\n<\/ul>\n\n<hr \/>\n\n<h2 id=\"bonus-jako-bran-a-nauczyli-my-si-po-raz-kolejny-e-trzeba-robi-backupy-najlepiej-u-innego-providera\">Bonus: jako bran\u017ca nauczyli\u015bmy si\u0119 po raz kolejny, \u017ce trzeba robi\u0107 backupy... najlepiej u innego providera<\/h2>\nDla porz\u0105dku nie m\u00f3g\u0142bym o tym nie wspomnie\u0107, aczkolwiek nie b\u0119d\u0119 si\u0119 tutaj mocno go rozwija\u0142. O po\u017carze serwerowni OVH pewnie ka\u017cdy ju\u017c s\u0142ysza\u0142, ka\u017cdy ju\u017c te\u017c pisa\u0142, dlatego zamiast po raz kolejny opisywa\u0107 t\u0105 \u201cpi\u0119kn\u0105 tragedi\u0119\u201d ode\u015bl\u0119 do fajnego <a href=\"https:\/\/venturebeat.com\/2021\/03\/10\/ovh-datacenter-disaster-shows-why-recovery-plans-and-backups-are-vital\/\">opracowania z VentureBeat<\/a>. Od siebie zostawi\u0119 tylko ju\u017c nieco oklepanego mema, ale my\u015bl\u0119 \u017ce nasza edycja bez niego by\u0142aby mocno niekompletna.\n<figure class=\"kg-card kg-image-card\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bc8441aa.png\" alt=\"\" \/><\/figure>","innerContent":["<h2 id=\"1-co-zrobi-eby-dokumentacja-nie-ssa-a-\">1. <a href=\"https:\/\/www.worldofbs.com\/why-documentation-sucks\/\">Co zrobi\u0107 \u017ceby dokumentacja nie \u201cssa\u0142a\u201d?<\/a><\/h2>\n<figure class=\"kg-card kg-image-card\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bbe443c1.png\" alt=\"\" \/><\/figure>\nNikt nie lubi pisa\u0107 dokumentacji, to w zasadzie truizm. Zawsze przestarza\u0142a, zawsze b\u0119d\u0105ca cia\u0142em obcym, kt\u00f3rej zmiany ci\u0119\u017cko jest \u015bledzi\u0107 wraz z kontekstem ewoluuj\u0105cego kodu (aczkolwiek w jednym z projekt\u00f3w mia\u0142em do czynienia z ciekawym eksperymentem - dokumentacji na Github Pages, dodawanej do PR wraz z produkcyjnym kodem). Tak\u017ce jednym z postulat\u00f3w Agile by\u0142o posiadanie dzia\u0142aj\u0105cego kodu ponad nawet najlepiej napisan\u0105 dokumentacj\u0105. Zak\u0142adam, by\u0142a to odpowied\u017a na problem niemo\u017cliwie rozbuchanych plan\u00f3w projektowych z lat 80tych, aczkolwiek znam tu g\u0142\u00f3wnie dowody anegdotyczne - chcia\u0142bym si\u0119 kiedy\u015b dokopa\u0107 do jakiej\u015b realnej analizy pokazuj\u0105cej skal\u0119 problemu.\n\nKolejnym krokiem (cho\u0107 tak naprawd\u0119 <a href=\"https:\/\/www.developerdotstar.com\/mag\/articles\/reeves_design.html\">dokument fundacyjny<\/a> tego trendu to ju\u017c prawdziwa prehistoria, datowana na rok 1992) by\u0142o stwierdzenie, \u017ce najlepsz\u0105 dokumentacj\u0105 jest kod, co rodzi pewne problemy (o kt\u00f3rych ju\u017c cho\u0107by w <a href=\"https:\/\/martinfowler.com\/bliki\/CodeAsDocumentation.html\">2005 roku<\/a> wspomina\u0142 Martin Fowler). Aktualnie do \u0142ask wraca nieco temat tak zwanego \u201cTechnical Writing\u201d - aczkolwiek, o ile w moim pierwszym projekcie by\u0142a to zupe\u0142nie osobna rola...\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bc1c747f.png\" alt=\"\" \/>\n<figcaption>...o tyle dzisiaj jest to jeszcze jeden skill, w sam raz dla naszych ju\u017c i tak doci\u0105\u017cony FullStack Developer\u00f3w.<\/figcaption><\/figure>\nFaktem pozostaje, \u017ce ka\u017cdy chce mie\u0107 dobr\u0105 dokumentacj\u0119, a nikt takowej nie chce pisa\u0107. Mo\u017ce problem polega na tym, \u017ce to nie ludzie zajmuj\u0105cy si\u0119 programowaniem s\u0105 tacy krn\u0105brni, tylko same dokumentacje po prostu \u017ale robione?\n\nTakie jest te\u017c podej\u015bcie tw\u00f3rcy artyku\u0142u o znamiennym tytule \u201c<a href=\"https:\/\/www.worldofbs.com\/why-documentation-sucks\/\">Why Your Company's Documentation Sucks<\/a>\u201d, gdzie stara si\u0119 umotywowa\u0107, \u017ce g\u0142\u00f3wnym problemem jest fakt wybierania\u2026 z\u0142ej reprezentacji danych. Ot\u00f3\u017c wysuwanym argumentem jest, \u017ce zwykle b\u0142\u0119dnie pr\u00f3bujemy przedstawi\u0107 grafowy problem za pomoc\u0105 struktury hierarchicznej. Nieco na mod\u0142\u0119 taktowania Jiry jako \u201c<a href=\"https:\/\/www.linkedin.com\/pulse\/how-jira-can-kill-your-software-teams-productivity-matias-muhonen\">\u017ar\u00f3d\u0142a wszelkiego z\u0142a w IT<\/a>\u201d, tutaj obrywa si\u0119 mocno Confluence, aczkolwiek do\u015b\u0107 podobne zarzuty mo\u017cna wytoczy\u0107 wobec np. Github Pages. Jako przyk\u0142ad bardzo dobrze dzia\u0142aj\u0105cej dokumentacji wskazywana s\u0105 za\u015b wszelkiej ma\u015bci Wiki, przyk\u0142adowo ta <a href=\"https:\/\/wiki.archlinux.org\/\">ArchLinuxa<\/a>.\n\nJako fan map my\u015bli \u201cpropsuje\u201d og\u00f3lnie podej\u015bcie bardzo mocno Teraz czekam na dobr\u0105 narz\u0119dzi\u00f3wk\u0119 - nigdy nie by\u0142em w stanie polubi\u0107 si\u0119 z Confluence.\n<h3 id=\"-r-d-a-\">\u0179r\u00f3d\u0142a:<\/h3>\n<ul>\n \t<li><a href=\"https:\/\/www.worldofbs.com\/why-documentation-sucks\/\">Why Your Company's Documentation Sucks<\/a><\/li>\n \t<li><a href=\"https:\/\/www.developerdotstar.com\/mag\/articles\/reeves_design.html\">What Is Software Design?<\/a><\/li>\n \t<li><a href=\"https:\/\/martinfowler.com\/bliki\/CodeAsDocumentation.html\">CodeAsDocumentation<\/a><\/li>\n \t<li><a href=\"https:\/\/www.linkedin.com\/pulse\/how-jira-can-kill-your-software-teams-productivity-matias-muhonen\/\">How JIRA can kill your software team's productivity<\/a><\/li>\n<\/ul>\n<h2 id=\"2-jak-radzi-sobie-z-problemami-z-cache-\"><a href=\"http:\/\/calpaterson.com\/ttl-hell.html\">2. Jak radzi\u0107 sobie z problemami z Cache<\/a><\/h2>\n<figure class=\"kg-card kg-image-card\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bc3aa991.png\" alt=\"\" \/><\/figure>\n<blockquote>\u201cW programowaniu s\u0105 dwie trudne rzeczy: inwalidacja cache i nazywanie rzeczy\u201d.<\/blockquote>\nTen mocno ju\u017c wy\u015bwiechtany cytat jest nieco nies\u0142usznie przypisywany Martinowi Fowlerowi. <a href=\"https:\/\/skeptics.stackexchange.com\/questions\/19836\/has-phil-karlton-ever-said-there-are-only-two-hard-things-in-computer-science\">Jego autorem jest bowiem Phil Karlton<\/a>, jeden z tw\u00f3rc\u00f3w Netscape. Na obron\u0119 Martina, <a href=\"https:\/\/martinfowler.com\/bliki\/TwoHardThings.html\">w swoim tek\u015bcie (w kt\u00f3rym rozpromowa\u0142 powiedzenie) wskazuje oryginalnego autora<\/a>. Internet po prostu jak zwykle zapomnia\u0142\n\nTrudne problemy s\u0105 wi\u0119c dwa. Na nazywanie rzeczy chyba nic nie poradzimy (co najwy\u017cej mo\u017cemy przeprowadzi\u0107 si\u0119 z \u201ckr\u00f3lestwa rzeczownik\u00f3w\u201d - polecam <a href=\"http:\/\/steve-yegge.blogspot.com\/2006\/03\/execution-in-kingdom-of-nouns.html\">fantastyczny, klasyczny esej<\/a>, kt\u00f3ry nie szcz\u0119dz\u0105c ironii pokazuje sytuacj\u0119 w kt\u00f3rej \u017cyjemy), mo\u017ce zatem w jaki\u015b spos\u00f3b zaadresowa\u0107 problemy z cache?\n\nJe\u017celi czego\u015b si\u0119 nauczy\u0142em przez lata w IT, to tego \u017ce w in\u017cynierii oprogramowania bardzo trudno m\u00f3wi\u0107 o rozwi\u0105zaniach idealny. <a href=\"https:\/\/groups.csail.mit.edu\/tds\/papers\/Lynch\/jacm85.pdf\">Analizuj\u0105c<\/a> <a href=\"https:\/\/en.wikipedia.org\/wiki\/Two_Generals%27_Problem\">problem<\/a> <a href=\"https:\/\/medium.com\/all-things-ledger\/the-byzantine-generals-problem-168553f31480\">za<\/a> <a href=\"https:\/\/dean.eigenmann.me\/blog\/2020\/02\/17\/cap-theorem\/\">problemem<\/a>, dowiadujemy si\u0119 o kolejnych ograniczeniach wymuszaj\u0105cych na naszych aplikacjach kompromisy. Jednym z popularniejszym jest po\u015bwi\u0119cenie poprawno\u015bci na rzecz pr\u0119dko\u015bci odpowiedzi, a najlepszym przedstawicielem tego trendu jest w\u0142a\u015bnie u\u017cycie cache. Bo w\u0142a\u015bnie rzeczona \u201cinwalidacja\u201d, (czyli wyczyszczenie przestarza\u0142ych\/niepotrzebnych informacji z cache) jest objawem \u017cycia w \u015bwiecie kt\u00f3ry nie jest idealny.\n\nSzcz\u0119\u015bliwie, na ka\u017cdy \u201cniemo\u017cliwy\u201d problem znajdzie si\u0119 jakie\u015b \u201cwystarczaj\u0105co dobre\u201d rozwi\u0105zanie. I o w\u0142a\u015bnie tego typu solucjach dla cache m\u00f3wi artyku\u0142 kt\u00f3rym si\u0119 z <a href=\"http:\/\/calpaterson.com\/ttl-hell.html\">Wami<\/a> dzisiaj dzielimy. Autor prezentuje bowiem przegl\u0105d rozwi\u0105za\u0144 nie bazuj\u0105cych TTL - konkretnym, z g\u00f3ry ustalonym czasie \u017cycia danych w cache. Rozwi\u0105zaniu o tyle trywialnym, co powoduj\u0105cym czasem nietrywialne bugi.\n\nTekst stanowi ciekawy przegl\u0105d alternatywnych rozwi\u0105za\u0144. Przy podejmowaniu decyzji o lekturze warto wzi\u0105\u0107 pod uwag\u0119 profil potencjalnego czytelnika - raczej nie znajdziecie tutaj akademickich rozwa\u017ca\u0144, bardziej sposoby jak poradzi\u0107 sobie z najcz\u0119stszymi potencjalnymi przypad\u0142o\u015bciami aplikacji webowych.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bc43a66e.png\" alt=\"\" \/>\n\n<figcaption>PS: Je\u015bli chodzi o cytat kt\u00f3rym zacz\u0119li\u015bmy t\u0105 sekcj\u0119, to i tak najbardziej lubi\u0119 jego inny wariant<\/figcaption><\/figure>\n<h3 id=\"-r-d-a--1\">\u0179r\u00f3d\u0142a:<\/h3>\n<ul>\n \t<li><a href=\"http:\/\/calpaterson.com\/ttl-hell.html\">Staying out of TTL hell<\/a><\/li>\n \t<li><a href=\"http:\/\/steve-yegge.blogspot.com\/2006\/03\/execution-in-kingdom-of-nouns.html\">Execution in the Kingdom of Nouns<\/a><\/li>\n<\/ul>\n<h2 id=\"3-czy-rust-rzeczywi-cie-nie-nadaje-si-do-programowania-asynchronicznego-\"><a href=\"https:\/\/theta.eu.org\/2021\/03\/08\/async-rust-2.html\">3. Czy Rust rzeczywi\u015bcie nie nadaje si\u0119 do programowania asynchronicznego? <\/a><\/h2>\nNa zako\u0144czenie mam tekst z jednej strony bardzo hermetyczny, z drugiej za\u015b taki, kt\u00f3ry powi\nnien zainteresowa\u0107 wszystkich chc\u0105cych poszerzy\u0107 horyzonty. Popularno\u015b\u0107 Rusta jako j\u0119zyka jest jakim\u015b fascynuj\u0105cym fenomenem. Z jednej strony wszyscy go kochaj\u0105, z drugiej strony przeci\u0119tny programista ma raczej ma\u0142\u0105 szans\u0119 spotka\u0107 si\u0119 z jego u\u017cyciem. Jak pisali\u015bmy w jednej z poprzednich edycji, w du\u017cych firmach jest on u\u017cywany w coraz wi\u0119kszej ilo\u015bci projekt\u00f3w, ale mam wra\u017cenie \u017ce do \u201cmainstreamu\u201d ma szans\u0119 przebi\u0107 si\u0119 dopiero wraz z WebAssembly - czyli jeszcze troch\u0119 wody up\u0142ynie bo i ta technologia le\u017cy w domenie early-adopter\u00f3w.\n\nCzemu po raz kolejny wspominam t\u0105 popularno\u015b\u0107? Poniewa\u017c, pomimo wielkiej mi\u0142o\u015bci jak\u0105 spo\u0142eczno\u015b\u0107 programistyczna raczy Rusta, czasem internet podchwyci teksty nieco bardziej krytyczne. Jednym z nich jest prezentowana dzi\u015b przez nas publikacja, analizuj\u0105ca spos\u00f3b dzia\u0142ania asynchroniczno\u015bci w tym j\u0119zyku. Tak naprawd\u0119 jest to follow up <a href=\"https:\/\/theta.eu.org\/2017\/08\/04\/async-rust.html\">tekstu z roku 2017<\/a>, gdzie autor po raz pierwszy sygnalizowa\u0142 problemy. W opublikowanym w zesz\u0142ym tygodniu tek\u015bcie pojawiaj\u0105 si\u0119 bardzo \u015bmia\u0142e stwierdzenia, \u017ce problemy s\u0105 nie do rozwi\u0105zania - wynikaj\u0105 bowiem z decyzji projektowych kt\u00f3re przy\u015bwieca\u0142y tw\u00f3rcom j\u0119zyka przy jego tworzeniu.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bc538927.png\" alt=\"\" \/>\n\n<figcaption>Czyli min. dbanie o to \u017ceby\u015bmy nie kopn\u0119li si\u0119 w kolanko. <a href=\"https:\/\/leftoversalad.com\/c\/015_programmingpeople\/\">Tak inni programi\u015bci widz\u0105 bowiem Rusta.<\/a><span class=\"-mobiledoc-kit__atom\">\u200c\u200c<\/span><\/figcaption><\/figure>\nTLDR: O co chodzi? Ot\u00f3\u017c autor stara si\u0119 w swoim tek\u015bcie udowodni\u0107, \u017ce ca\u0142a magia Rusta opiera si\u0119 na jego obiektach strukturalnych. Wi\u0119kszo\u015b\u0107 sk\u0142adni j\u0119zyka oraz dobrych praktyk z niej wynikaj\u0105cych zak\u0142ada styl pisania oparty w\u0142a\u015bnie o nie, wykonuj\u0105c instrukcje jedna po drugiej (dla ludzi kt\u00f3rzy lubi\u0105 teorie - <a href=\"https:\/\/en.wikipedia.org\/wiki\/Continuation-passing_style\">jest to tak zwany \u201cdirect style\u201d<\/a>). W momencie kiedy zaczynamy pisa\u0107 w spos\u00f3b asynchroniczny, przestawiamy si\u0119 na tak zwany <a href=\"https:\/\/en.wikipedia.org\/wiki\/Continuation-passing_style\">continuation passing style (potocznie zwany CSP)<\/a>. Powoduje to, \u017ce musimy z Rusta robi\u0107 j\u0119zyk funkcyjny, bowiem operacje teraz s\u0105 wykonywane przez tak zwane \u201ckontynuacje\u201d. W odr\u00f3\u017cnieniu od takiego Go, kt\u00f3ry od pocz\u0105tku traktowa\u0142 asynchroniczno\u015b\u0107 jako istotny fragment projektu j\u0119zyka, zar\u00f3wno programi\u015bci Rusta jak i jego tw\u00f3rcy musieli p\u00f3j\u015b\u0107 na szereg kompromis\u00f3w przy tworzeniu async\/awaita w tym j\u0119zyku. Przy obecnym trendzie na \u201casynchronizowanie\u201d wszystkich API, Rust traci swoj\u0105 prostot\u0119 i klarowno\u015b\u0107.\n\nTekst przebi\u0142 si\u0119 w zasadzie do wszystkich istotnych agregator\u00f3w. Zar\u00f3wno na <a href=\"https:\/\/news.ycombinator.com\/item?id=26406989\">Hacker News<\/a>, <a href=\"https:\/\/www.reddit.com\/r\/programming\/comments\/m1vo6k\/why_asynchronous_rust_doesnt_work_hn_discussion\/\">Redditcie<\/a>, <a href=\"https:\/\/lobste.rs\/s\/3vt0s6\/why_asynchronous_rust_doesn_t_work\">Lobsterze<\/a>, jak i zreszt\u0105 pod <a href=\"https:\/\/theta.eu.org\/2021\/03\/08\/async-rust-2.html\">samym postem<\/a> mo\u017cna znale\u017a\u0107 bardzo \u017carliwe debaty czy autor ma racje, czy mo\u017ce jednak przesadza. Wskazywane jest te\u017c to, \u017ce asynchroniczno\u015b\u0107 tak naprawd\u0119 jest niezb\u0119dnym elementem j\u0119zyka w 2021, wi\u0119c naturalnym jest, \u017ce i w Rustcie zaczyna mie\u0107 ona coraz wi\u0119ksze znaczenie.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bc6d7ad4.png\" alt=\"\" \/>\n\n<figcaption><a href=\"https:\/\/boards.4channel.org\/g\/thread\/80605464\/now-that-rust-turned-out-to-be-complete-failure\">Temat trafi\u0142 nawet na 4Chana <\/a> I dyskusja nawet tam jest do\u015b\u0107 merytoryczna.<\/figcaption><\/figure>\nJe\u015bli jeste\u015bcie zainteresowani budow\u0105 j\u0119zyk\u00f3w programowania - zar\u00f3wno artyku\u0142, jak i komentarze kt\u00f3rymi obr\u00f3s\u0142 stanowi\u0105 lektur\u0119 obowi\u0105zkow\u0105.\n<h3 id=\"-r-d-a--2\">\u0179r\u00f3d\u0142a:<\/h3>\n<ul>\n \t<li><a href=\"https:\/\/theta.eu.org\/2021\/03\/08\/async-rust-2.html\">Why asynchronous Rust doesn't work<\/a><\/li>\n \t<li><a href=\"https:\/\/theta.eu.org\/2017\/08\/04\/async-rust.html\">Asynchronous Rust<\/a><\/li>\n \t<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Continuation-passing_style\">Continuation-passing styl<\/a>e<\/li>\n<\/ul>\n\n<hr \/>\n\n<h2 id=\"bonus-jako-bran-a-nauczyli-my-si-po-raz-kolejny-e-trzeba-robi-backupy-najlepiej-u-innego-providera\">Bonus: jako bran\u017ca nauczyli\u015bmy si\u0119 po raz kolejny, \u017ce trzeba robi\u0107 backupy... najlepiej u innego providera<\/h2>\nDla porz\u0105dku nie m\u00f3g\u0142bym o tym nie wspomnie\u0107, aczkolwiek nie b\u0119d\u0119 si\u0119 tutaj mocno go rozwija\u0142. O po\u017carze serwerowni OVH pewnie ka\u017cdy ju\u017c s\u0142ysza\u0142, ka\u017cdy ju\u017c te\u017c pisa\u0142, dlatego zamiast po raz kolejny opisywa\u0107 t\u0105 \u201cpi\u0119kn\u0105 tragedi\u0119\u201d ode\u015bl\u0119 do fajnego <a href=\"https:\/\/venturebeat.com\/2021\/03\/10\/ovh-datacenter-disaster-shows-why-recovery-plans-and-backups-are-vital\/\">opracowania z VentureBeat<\/a>. Od siebie zostawi\u0119 tylko ju\u017c nieco oklepanego mema, ale my\u015bl\u0119 \u017ce nasza edycja bez niego by\u0142aby mocno niekompletna.\n<figure class=\"kg-card kg-image-card\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bc8441aa.png\" alt=\"\" \/><\/figure>"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10168","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/comments?post=10168"}],"version-history":[{"count":1,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10168\/revisions"}],"predecessor-version":[{"id":10695,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10168\/revisions\/10695"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=10168"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=10168"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=10168"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}