{"id":36115,"date":"2019-10-31T22:09:42","date_gmt":"2019-10-31T19:09:42","guid":{"rendered":"https:\/\/prohoster.info\/blog\/ne-soglashajtes-razrabatyvat-to-chego-ne-ponimaete\/"},"modified":"2019-10-31T22:09:42","modified_gmt":"2019-10-31T19:09:42","slug":"ne-soglashajtes-razrabatyvat-to-chego-ne-ponimaete","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/news\/ne-soglashajtes-razrabatyvat-to-chego-ne-ponimaete","title":{"rendered":"Nie zgadzaj si\u0119 na rozwijanie czego\u015b, czego nie rozumiesz.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Nie zgadzaj si\u0119 na rozwijanie czego\u015b, czego nie rozumiesz.\" src=\"\/wp-content\/uploads\/2019\/07\/bfd609d9004113a76d59d8763d82c6d0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOd pocz\u0105tku 2018 roku pe\u0142ni\u0119 funkcj\u0119 lidera \/ kierownika \/ g\u0142\u00f3wnego programisty w zespole \u2014 jak to nazwiesz, nie ma znaczenia, ale w istocie odpowiadam w pe\u0142ni za jeden z modu\u0142\u00f3w oraz za wszystkich programist\u00f3w, kt\u00f3rzy nad nim pracuj\u0105. Ta pozycja otwiera przede mn\u0105 nowy spos\u00f3b postrzegania procesu tworzenia, poniewa\u017c jestem zaanga\u017cowany w wi\u0119ksz\u0105 liczb\u0119 projekt\u00f3w i aktywniej uczestnicz\u0119 w podejmowaniu decyzji. Niedawno, dzi\u0119ki tym dw\u00f3m okoliczno\u015bciom, nagle zda\u0142em sobie spraw\u0119, jak mocno zrozumienie wp\u0142ywa na kod i na aplikacj\u0119.<\/p>\n<p>My\u015bl, kt\u00f3r\u0105 chc\u0119 wyrazi\u0107, sprowadza si\u0119 do tego, \u017ce jako\u015b\u0107 kodu (i ostatecznego produktu) jest \u015bci\u015ble zwi\u0105zana z tym, jak bardzo ludzie, kt\u00f3rzy zajmuj\u0105 si\u0119 projektowaniem i pisz\u0105 kod, s\u0105 \u015bwiadomi tego, co tak naprawd\u0119 robi\u0105.<\/p>\n<p>Mo\u017cecie teraz pomy\u015ble\u0107: \u201eDzi\u0119ki, kapitanie. Oczywi\u015bcie dobrze by\u0142oby wiedzie\u0107, co si\u0119 pisze. W przeciwnym razie r\u00f3wnie dobrze mo\u017cna zatrudni\u0107 grup\u0119 ma\u0142p, aby pisa\u0142y na przypadkowych klawiszach, i na tym poprzesta\u0107\u201d. I macie ca\u0142kowit\u0105 racj\u0119. Dlatego przyjmuj\u0119 jako oczywiste, \u017ce zdajecie sobie spraw\u0119, i\u017c og\u00f3lne zrozumienie tego, co robicie, jest konieczne. Mo\u017cna to nazwa\u0107 zerowym poziomem zrozumienia, a tym si\u0119 nie b\u0119dziemy szczeg\u00f3\u0142owo zajmowa\u0107. Szczeg\u00f3\u0142owo om\u00f3wimy to, co dok\u0142adnie trzeba zrozumie\u0107 i jak wp\u0142ywa to na decyzje, kt\u00f3re podejmujecie ka\u017cdego dnia. Gdybym zna\u0142 te rzeczy wcze\u015bniej, zaoszcz\u0119dzi\u0142oby mi to mn\u00f3stwo zmarnowanego czasu i w\u0105tpliwego kodu.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nChocia\u017c poni\u017cej nie zobaczycie ani jednej linijki kodu, i tak uwa\u017cam, \u017ce wszystko, co tutaj powiedziano, ma ogromne znaczenie dla pisania wysokiej jako\u015bci, wyrazistego kodu. <\/p>\n<h4>Pierwszy poziom zrozumienia: Dlaczego to nie dzia\u0142a?<\/h4>\n<p>\nNa ten poziom programi\u015bci zazwyczaj dochodz\u0105 na bardzo wczesnych etapach swojej kariery, czasami nawet bez jakiejkolwiek pomocy ze strony otoczenia \u2014 przynajmniej wed\u0142ug moich obserwacji. Wyobra\u017acie sobie, \u017ce otrzymali\u015bcie zg\u0142oszenie b\u0142\u0119du: jaka\u015b funkcja w aplikacji nie dzia\u0142a, trzeba j\u0105 naprawi\u0107. Jakie dzia\u0142ania podejmiecie?<\/p>\n<p>Standardowy schemat wygl\u0105da tak:<\/p>\n<ol>\n<li>Znale\u017a\u0107 fragment kodu, kt\u00f3ry wywo\u0142uje problem (jak to zrobi\u0107 \u2014 to osobny temat, kt\u00f3ry omawiam w mojej ksi\u0105\u017cce o przestarza\u0142ym kodzie)<\/li>\n<li>Wprowadzi\u0107 zmiany w tym fragmencie<\/li>\n<li>Upewni\u0107 si\u0119, \u017ce b\u0142\u0105d zosta\u0142 naprawiony, a regresja nie wyst\u0105pi\u0142a<\/li>\n<\/ol>\n<p>\nSkupmy si\u0119 teraz na drugim punkcie \u2014 wprowadzaniu zmian w kodzie. Istniej\u0105 dwa podej\u015bcia do tego procesu. Pierwsze: zrozumie\u0107, co dok\u0142adnie dzieje si\u0119 w obecnym kodzie, zidentyfikowa\u0107 b\u0142\u0105d i go naprawi\u0107. Drugie: dzia\u0142a\u0107 na czuja \u2014 doda\u0107, powiedzmy, +1 w warunku lub p\u0119tli, sprawdzi\u0107, czy ta funkcja zacz\u0119\u0142a dzia\u0142a\u0107 w odpowiednim scenariuszu, a potem spr\u00f3bowa\u0107 czego\u015b jeszcze, i tak w niesko\u0144czono\u015b\u0107.<\/p>\n<p>Prawid\u0142owe jest pierwsze podej\u015bcie. Jak wyja\u015bnia w swojej ksi\u0105\u017cce Code Complete Steve McConnell (zreszt\u0105 bardzo j\u0105 polecam), za ka\u017cdym razem, gdy wprowadzamy zmiany w kodzie, musimy by\u0107 w stanie z pe\u0142nym przekonaniem przewidzie\u0107, jak wp\u0142ynie to na aplikacj\u0119. Przytaczam cytat z pami\u0119ci, ale je\u017celi naprawa b\u0142\u0119du dzia\u0142a inaczej ni\u017c oczekiwa\u0142e\u015b, powinno to wzbudzi\u0107 twoje w\u0105tpliwo\u015bci, a ca\u0142y plan dzia\u0142ania powinien zosta\u0107 poddany rewizji.<\/p>\n<p>Podsumowuj\u0105c, aby wykona\u0107 solidn\u0105 napraw\u0119 b\u0142\u0119du, kt\u00f3ra nie pogorszy jako\u015bci kodu, nale\u017cy rozumie\u0107 zar\u00f3wno ca\u0142\u0105 struktur\u0119 kodu, jak i \u017ar\u00f3d\u0142o konkretnego problemu.<\/p>\n<h4>Drugi poziom zrozumienia: Dlaczego to dzia\u0142a?<\/h4>\n<p>\nTen poziom jest osi\u0105gany znacznie mniej intuicyjnie ni\u017c poprzedni. Ja, b\u0119d\u0105c jeszcze pocz\u0105tkuj\u0105cym programist\u0105, przyswoi\u0142em go dzi\u0119ki mojemu szefowi, a p\u00f3\u017aniej wielokrotnie sam wyja\u015bnia\u0142em t\u0119 kwesti\u0119 nowicjuszom.<\/p>\n<p>Tym razem wyobra\u017amy sobie, \u017ce otrzymujesz od razu dwa raporty b\u0142\u0119d\u00f3w: pierwszy dotyczy scenariusza A, drugi \u2014 scenariusza B. W obu scenariuszach dzieje si\u0119 co\u015b nie tak. W zwi\u0105zku z tym najpierw zajmujesz si\u0119 pierwszym b\u0142\u0119dem. Kieruj\u0105c si\u0119 zasadami, kt\u00f3re ustalili\u015bmy dla pierwszego poziomu zrozumienia, dok\u0142adnie analizujesz kod zwi\u0105zany z problemem, ustalasz, dlaczego powoduje on takie a nie inne zachowanie aplikacji w scenariuszu A, i wprowadzasz sensowne korekty, kt\u00f3re daj\u0105 dok\u0142adnie ten rezultat, jakiego si\u0119 spodziewa\u0142e\u015b. Wszystko idzie \u015bwietnie.<\/p>\n<p>Nast\u0119pnie przechodzisz do scenariusza B. Powtarzasz scenariusz w pr\u00f3bie sprowokowania b\u0142\u0119du, ale \u2014 niespodzianka! \u2014 teraz wszystko dzia\u0142a jak nale\u017cy. Aby potwierdzi\u0107 swoje przypuszczenie, cofasz zmiany wprowadzone w trakcie pracy nad b\u0142\u0119dem A, a b\u0142\u0105d B wraca. Twoja naprawa rozwi\u0105za\u0142a oba problemy. Szcz\u0119\u015bcie!<\/p>\n<p>Nie spodziewa\u0142e\u015b si\u0119 tego. Wymy\u015bli\u0142e\u015b spos\u00f3b na naprawienie b\u0142\u0119du w scenariuszu A i nie masz poj\u0119cia, dlaczego zadzia\u0142a\u0142 r\u00f3wnie\u017c w scenariuszu B. Na tym etapie mo\u017ce by\u0107 wielka pokusa, by uzna\u0107, \u017ce oba zadania zosta\u0142y pomy\u015blnie zako\u0144czone. To ca\u0142kiem logiczne: chodzi\u0142o przecie\u017c o naprawienie b\u0142\u0119d\u00f3w, prawda? Ale praca jeszcze si\u0119 nie sko\u0144czy\u0142a: musisz jeszcze zrozumie\u0107, dlaczego twoje dzia\u0142ania naprawi\u0142y b\u0142\u0105d w scenariuszu B. Po co? Bo mo\u017ce on dzia\u0142a na niew\u0142a\u015bciwych zasadach, a wtedy b\u0119dziesz musia\u0142 szuka\u0107 innego rozwi\u0105zania. Oto kilka przyk\u0142ad\u00f3w takich sytuacji:<\/p>\n<ul>\n<li>poniewa\u017c rozwi\u0105zanie nie by\u0142o dopasowane celowo pod b\u0142\u0105d B z uwzgl\u0119dnieniem wszystkich czynnik\u00f3w, mo\u017cesz, nie\u015bwiadomie, uszkodzi\u0107 funkcj\u0119 C. <\/li>\n<li>istnieje prawdopodobie\u0144stwo, \u017ce gdzie\u015b czai si\u0119 r\u00f3wnie\u017c trzeci b\u0142\u0105d zwi\u0105zany z t\u0105 sam\u0105 funkcj\u0105, a tw\u00f3j fix b\u0142\u0119d\u00f3w uzale\u017cnia poprawne dzia\u0142anie systemu w scenariuszu B od niego. Teraz wszystko wygl\u0105da dobrze, ale pewnego pi\u0119knego dnia ten trzeci b\u0142\u0105d zostanie zauwa\u017cony i naprawiony. Wtedy w scenariuszu B zn\u00f3w pojawi si\u0119 b\u0142\u0105d, i dobrze, je\u015bli tylko tam.<\/li>\n<\/ul>\n<p>\nWszystko to wprowadza chaotyczno\u015b\u0107 w kodzie i kiedy\u015b spadnie ci na g\u0142ow\u0119 \u2014 najprawdopodobniej w najmniej odpowiednim momencie. B\u0119dzie trzeba zebra\u0107 si\u0142y, aby zmusi\u0107 si\u0119 do po\u015bwi\u0119cenia czasu na zrozumienie, dlaczego wszystko wydaje si\u0119 dzia\u0142a\u0107, ale warto. <\/p>\n<h4>Trzeci poziom zrozumienia: Dlaczego to dzia\u0142a?<\/h4>\n<p>\nMoje ostatnie o\u015bwiecenie dotyczy w\u0142a\u015bnie tego poziomu i prawdopodobnie to on przyni\u00f3s\u0142by mi najwi\u0119cej korzy\u015bci, gdybym wpad\u0142 na ten pomys\u0142 wcze\u015bniej.<\/p>\n<p>Aby to lepiej zobrazowa\u0107, rozwa\u017cmy to na przyk\u0142adzie: tw\u00f3j modu\u0142 musi by\u0107 kompatybilny z funkcj\u0105 X. Nie znasz si\u0119 zbyt dobrze na funkcji X, ale powiedziano ci, \u017ce aby zapewni\u0107 z ni\u0105 kompatybilno\u015b\u0107, musisz u\u017cywa\u0107 frameworka F. Inne modu\u0142y, kt\u00f3re integruj\u0105 si\u0119 z X, dzia\u0142aj\u0105 dok\u0142adnie z nim.<\/p>\n<p>Tw\u00f3j kod od pierwszego dnia swojej egzystencji w og\u00f3le nie mia\u0142 styczno\u015bci z frameworkiem F, wi\u0119c jego wdro\u017cenie nie b\u0119dzie proste. To poci\u0105gnie za sob\u0105 powa\u017cne konsekwencje dla niekt\u00f3rych element\u00f3w modu\u0142u. Niemniej jednak, ca\u0142kowicie zanurzasz si\u0119 w rozw\u00f3j: tygodniami piszesz kod, testujesz, wypuszczasz wersje pilota\u017cowe, otrzymujesz feedback, poprawiasz b\u0142\u0119dy regresji, napotykasz nieprzewidziane komplikacje, nie mieszcz\u0105c si\u0119 w pierwotnie ustalonych terminach, piszesz jeszcze troch\u0119 kodu, testujesz, otrzymujesz opini\u0119 zwrotn\u0105, poprawiasz b\u0142\u0119dy regresji \u2014 wszystko to po to, aby wdro\u017cy\u0107 framework F.<\/p>\n<p>I w pewnym momencie nagle zdajesz sobie spraw\u0119 \u2014 lub mo\u017ce s\u0142yszysz od kogo\u015b \u2014 \u017ce framework F mo\u017ce w og\u00f3le nie zapewni\u0107 Ci kompatybilno\u015bci z funkcj\u0105 X. Mo\u017ce wszystkie te czas i wysi\u0142ek by\u0142y skierowane zupe\u0142nie w z\u0142ym kierunku.<\/p>\n<p>Co\u015b podobnego zdarzy\u0142o si\u0119 pewnego razu w trakcie pracy nad projektem, za kt\u00f3ry by\u0142em odpowiedzialny. Dlaczego tak si\u0119 sta\u0142o? Poniewa\u017c \u017ale rozumia\u0142em, na czym polega funkcja X i jak jest zwi\u0105zana z frameworkiem F. Co powinienem by\u0142 zrobi\u0107? Poprosi\u0107 osob\u0119, kt\u00f3ra stawia zadanie na rozw\u00f3j, aby klarownie wyt\u0142umaczy\u0142a, jak planowane dzia\u0142ania prowadz\u0105 do po\u017c\u0105danego rezultatu, zamiast po prostu powtarza\u0107 to, co robiono dla innych modu\u0142\u00f3w, lub wierzy\u0107 na s\u0142owo, \u017ce to jest konieczne dla dzia\u0142ania funkcji X.<\/p>\n<p>Do\u015bwiadczenie tego projektu nauczy\u0142o mnie, aby unika\u0107 rozpoczynania procesu rozwijania, p\u00f3ki nie mamy jasnego zrozumienia, dlaczego prosz\u0105 nas o wykonanie okre\u015blonych dzia\u0142a\u0144. Unika\u0107 tego wprost. Kiedy otrzymujesz zadanie, pierwszym impulsem jest natychmiastowe zabranie si\u0119 do pracy, aby nie traci\u0107 czasu. Ale polityka \u201ezamra\u017camy projekt, dop\u00f3ki nie poznamy wszystkich szczeg\u00f3\u0142\u00f3w\u201d mo\u017ce znacznie ograniczy\u0107 zmarnowany czas. <\/p>\n<p>Nawet je\u015bli pr\u00f3buj\u0105 na Ciebie wywiera\u0107 presj\u0119, zmusza\u0107 do rozpocz\u0119cia pracy, chocia\u017c nie rozumiesz, z jakiego to powodu \u2014 stawiaj op\u00f3r. Najpierw zrozum, jakie cele staj\u0105 przed Tob\u0105 i zdecyduj, czy to w\u0142a\u015bciwa droga do celu. Musia\u0142em si\u0119 tego wszystkiego nauczy\u0107 na gorzkim do\u015bwiadczeniu \u2014 mam nadziej\u0119, \u017ce moim przyk\u0142adem u\u0142atwi\u0119 \u017cycie tym, kt\u00f3rzy to czytaj\u0105.<\/p>\n<h4>Czwarty poziom zrozumienia: ???<\/h4>\n<p>\nProgramowanie zawsze ma wiele do zaoferowania, a ja s\u0105dz\u0119, \u017ce dotkn\u0105\u0142em tylko powierzchni tematu zrozumienia. Jakie inne poziomy zrozumienia odkryli\u015bcie przez lata pracy z kodem? Jakie podejmowali\u015bcie decyzje, kt\u00f3re pozytywnie wp\u0142yn\u0119\u0142y na jako\u015b\u0107 kodu i aplikacji? Jakie decyzje okaza\u0142y si\u0119 b\u0142\u0119dne i przynios\u0142y cenn\u0105 lekcj\u0119? Podzielcie si\u0119 do\u015bwiadczeniem w komentarzach.<br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/digital-ecosystems\/blog\/459588\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421 \u043d\u0430\u0447\u0430\u043b\u0430 2018 \u0433\u043e\u0434\u0430 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c \u043b\u0438\u0434\u0430\/\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0438\u043a\u0430\/\u0432\u0435\u0434\u0443\u0449\u0435\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u2014 \u043d\u0430\u0437\u044b\u0432\u0430\u0439\u0442\u0435 \u044d\u0442\u043e \u043a\u0430\u043a \u0445\u043e\u0442\u0438\u0442\u0435, \u043d\u043e \u0441\u0443\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044f \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043e\u0442\u0432\u0435\u0447\u0430\u044e \u0437\u0430 \u043e\u0434\u0438\u043d \u0438\u0437 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0438 \u0437\u0430 \u0432\u0441\u0435\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0434 \u043d\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442. \u042d\u0442\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043c\u043d\u0435 \u043d\u043e\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u044f \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d \u0432 \u0431\u043e\u043b\u044c\u0448\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u0435\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27008,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-36115","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0421 \u043d\u0430\u0447\u0430\u043b\u0430 2018 \u0433\u043e\u0434\u0430 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/news\/ne-soglashajtes-razrabatyvat-to-chego-ne-ponimaete\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041d\u0435 \u0441\u043e\u0433\u043b\u0430\u0448\u0430\u0439\u0442\u0435\u0441\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0442\u043e, \u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421 \u043d\u0430\u0447\u0430\u043b\u0430 2018 \u0433\u043e\u0434\u0430 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/news\/ne-soglashajtes-razrabatyvat-to-chego-ne-ponimaete\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:09:42+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:09:42+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Nie zgadzaj si\u0119 na opracowywanie tego, czego nie rozumiesz | ProHoster","description":"Od pocz\u0105tku 2018 roku pe\u0142ni\u0119 t\u0119 funkcj\u0119.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/news\/ne-soglashajtes-razrabatyvat-to-chego-ne-ponimaete","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041d\u0435 \u0441\u043e\u0433\u043b\u0430\u0448\u0430\u0439\u0442\u0435\u0441\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0442\u043e, \u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435 | ProHoster","og:description":"\u0421 \u043d\u0430\u0447\u0430\u043b\u0430 2018 \u0433\u043e\u0434\u0430 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c.","og:url":"https:\/\/prohoster.info\/pl\/blog\/news\/ne-soglashajtes-razrabatyvat-to-chego-ne-ponimaete","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:09:42+00:00","article:modified_time":"2019-10-31T19:09:42+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"36115","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 02:04:38","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:50:24","updated":"2026-01-22 02:04:38","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/36115","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=36115"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/36115\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/27008"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=36115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=36115"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=36115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}