{"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\/sv\/blog\/news\/ne-soglashajtes-razrabatyvat-to-chego-ne-ponimaete","title":{"rendered":"Acceptera inte att utveckla n\u00e5got du inte f\u00f6rst\u00e5r","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Acceptera inte att utveckla n\u00e5got du inte f\u00f6rst\u00e5r\" src=\"\/wp-content\/uploads\/2019\/07\/bfd609d9004113a76d59d8763d82c6d0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSedan b\u00f6rjan av 2018 har jag haft rollen som ledare\/chef\/huvudutvecklare i teamet \u2013 kalla det vad du vill, men i grund och botten \u00e4r jag helt ansvarig f\u00f6r en av modulerna och f\u00f6r alla utvecklare som arbetar med den. Denna position ger mig ett nytt perspektiv p\u00e5 utvecklingsprocessen, d\u00e5 jag \u00e4r involverad i fler projekt och deltar mer aktivt i beslutsfattandet. Nyligen, tack vare dessa tv\u00e5 omst\u00e4ndigheter, ins\u00e5g jag ov\u00e4ntat hur mycket graden av f\u00f6rst\u00e5else p\u00e5verkar koden och applikationen.<\/p>\n<p>Tanken jag vill uttrycka \u00e4r att kvaliteten p\u00e5 koden (och den slutliga produkten) \u00e4r n\u00e4ra knuten till hur mycket de personer som designar och skriver koden \u00e4r medvetna om vad de faktiskt g\u00f6r.<\/p>\n<p>Du kanske nu t\u00e4nker: \"Tack, kapten. Sj\u00e4lvklart \u00e4r det viktigt att f\u00f6rst\u00e5 vad man skriver. Annars kan det lika g\u00e4rna anst\u00e4lla en grupp apor som sl\u00e5r p\u00e5 tangenterna helt utan m\u00e5l, och d\u00e4rmed vara n\u00f6jda.\" Och du har helt r\u00e4tt. D\u00e4rf\u00f6r tar jag det f\u00f6r givet: du \u00e4r medveten om att ha en \u00f6vergripande f\u00f6rst\u00e5else f\u00f6r vad du g\u00f6r \u00e4r n\u00f6dv\u00e4ndigt. Detta kan kallas nollniv\u00e5 av f\u00f6rst\u00e5else och den kommer vi inte att g\u00e5 in p\u00e5 ing\u00e5ende. Vi kommer ist\u00e4llet att fokusera p\u00e5 vad som specifikt beh\u00f6ver f\u00f6rst\u00e5s och hur detta p\u00e5verkar de beslut du fattar varje dag. Om jag hade k\u00e4nt till dessa saker i f\u00f6rv\u00e4g skulle jag ha undvikit en m\u00e4ngd bortkastad tid och tveksamt kod.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n\u00c4ven om du inte kommer att se ett enda kodstycke nedan, anser jag \u00e4nd\u00e5 att allt som s\u00e4gs h\u00e4r har stor betydelse f\u00f6r att skriva kvalitativ, uttrycksfull kod. <\/p>\n<h4>F\u00f6rsta niv\u00e5 av f\u00f6rst\u00e5else: Varf\u00f6r fungerar det inte?<\/h4>\n<p>\nUtvecklare n\u00e5r vanligtvis denna niv\u00e5 i de tidigaste skedena av sin karri\u00e4r, ibland till och med utan n\u00e5got st\u00f6d fr\u00e5n omgivningen \u2013 \u00e5tminstone enligt mina observationer. F\u00f6rest\u00e4ll dig att du har f\u00e5tt en buggrapport: en viss funktion i applikationen fungerar inte, och den m\u00e5ste \u00e5tg\u00e4rdas. Hur agerar du?<\/p>\n<p>Standardm\u00f6nstret ser ut s\u00e5 h\u00e4r:<\/p>\n<ol>\n<li>Hitta den kodsnutt som orsakar problemet (hur man g\u00f6r detta \u00e4r ett separat \u00e4mne, vilket jag behandlar i min bok om f\u00f6r\u00e5ldrad kod)<\/li>\n<li>G\u00f6r \u00e4ndringar i denna kodsnutt<\/li>\n<li>F\u00f6rvissa dig om att buggen \u00e4r \u00e5tg\u00e4rdad och inga regressionsfel har uppst\u00e5tt<\/li>\n<\/ol>\n<p>\nL\u00e5t oss nu fokusera p\u00e5 den andra punkten - att g\u00f6ra \u00e4ndringar i koden. Det finns tv\u00e5 tillv\u00e4gag\u00e5ngss\u00e4tt f\u00f6r denna process. F\u00f6r det f\u00f6rsta: att f\u00f6rst\u00e5 vad som faktiskt h\u00e4nder i den nuvarande koden, identifiera felet och fixa det. F\u00f6r det andra: att g\u00e5 fram p\u00e5 m\u00e5f\u00e5 - l\u00e4gga till, s\u00e4g, +1 i en villkorssats eller loop, se om funktionen fungerar i det aktuella scenariot, f\u00f6rs\u00f6ka med n\u00e5got annat och s\u00e5 vidare i o\u00e4ndlighet.<\/p>\n<p>Det korrekta tillv\u00e4gag\u00e5ngss\u00e4ttet \u00e4r det f\u00f6rsta. Som Steve McConnell f\u00f6rklarar i sin bok Code Complete (f\u00f6rresten, jag rekommenderar den verkligen), varje g\u00e5ng vi g\u00f6r \u00e4ndringar i koden m\u00e5ste vi kunna f\u00f6ruts\u00e4ga hur det kommer att p\u00e5verka applikationen. Jag citerar ur minnet, men om en buggfix inte fungerar som du f\u00f6rv\u00e4ntade dig, ska det v\u00e4cka allvarlig oro, och du m\u00e5ste ifr\u00e5gas\u00e4tta hela din handlingsplan.<\/p>\n<p>Sammanfattningsvis, f\u00f6r att g\u00f6ra en ordentlig buggfix utan att s\u00e4nka kodens kvalitet, m\u00e5ste man f\u00f6rst\u00e5 s\u00e5v\u00e4l hela kodstrukturen som k\u00e4llan till det specifika problemet.<\/p>\n<h4>Den andra niv\u00e5n av f\u00f6rst\u00e5else: Varf\u00f6r fungerar det?<\/h4>\n<p>\nDenna niv\u00e5 \u00e4r mycket mindre intuitiv \u00e4n den f\u00f6reg\u00e5ende. N\u00e4r jag fortfarande var en nyb\u00f6rjare som utvecklare ins\u00e5g jag detta tack vare min chef, och senare har jag m\u00e5nga g\u00e5nger f\u00f6rklarat saken f\u00f6r nykomlingar.<\/p>\n<p>Denna g\u00e5ng l\u00e5t oss f\u00f6rest\u00e4lla oss att du f\u00e5r tv\u00e5 buggrapporter p\u00e5 en g\u00e5ng: den f\u00f6rsta handlar om scenario A, den andra om scenario B. I b\u00e5da scenarierna h\u00e4nder n\u00e5got fel. D\u00e4rf\u00f6r b\u00f6rjar du med det f\u00f6rsta felet. Med hj\u00e4lp av de principer som vi har dragit f\u00f6r den f\u00f6rsta f\u00f6rst\u00e5elseniv\u00e5n f\u00f6rdjupar du dig v\u00e4l i koden som r\u00f6r problemet, tar reda p\u00e5 varf\u00f6r det f\u00e5r applikationen att bete sig p\u00e5 det s\u00e4ttet i scenario A, och g\u00f6r rimliga justeringar som ger precis det resultat du f\u00f6rv\u00e4ntade dig. Allt g\u00e5r bra.<\/p>\n<p>D\u00e4refter g\u00e5r du vidare till scenario B. Du upprepar scenariot i ett f\u00f6rs\u00f6k att provocera fram felet, men - \u00f6verraskning! - nu fungerar allt som det ska. F\u00f6r att bekr\u00e4fta din gissning \u00e5ngrar du de \u00e4ndringar som gjordes under arbetet med fel A, och bugg B \u00e5terkommer. Din buggfix l\u00f6ste b\u00e5da problemen. Vilken tur!<\/p>\n<p>Du hade inte alls r\u00e4knat med detta. Du har kommit p\u00e5 ett s\u00e4tt att \u00e5tg\u00e4rda felet i scenario A och har ingen aning om varf\u00f6r det fungerade \u00e4ven f\u00f6r scenario B. Vid det h\u00e4r laget \u00e4r det frestande att dra slutsatsen att b\u00e5da uppgifterna har blivit framg\u00e5ngsrikt genomf\u00f6rda. Det k\u00e4nns logiskt: syftet var ju att \u00e5tg\u00e4rda felen, eller hur? Men arbetet \u00e4r inte avslutat: du m\u00e5ste fortfarande lista ut varf\u00f6r dina \u00e5tg\u00e4rder l\u00f6ste felet i scenario B. Varf\u00f6r? F\u00f6r att det kanske fungerar p\u00e5 felaktiga principer, och d\u00e5 m\u00e5ste du leta efter en annan l\u00f6sning. H\u00e4r \u00e4r ett par exempel p\u00e5 s\u00e5dana fall:<\/p>\n<ul>\n<li>eftersom l\u00f6sningen inte var specifikt riktad mot fel B med h\u00e4nsyn till alla faktorer, kan det h\u00e4nda att du, utan att inse det, har brutit funktionen C. <\/li>\n<li>Det \u00e4r inte om\u00f6jligt att det finns en tredje bugg som g\u00f6mmer sig n\u00e5gonstans, kopplad till samma funktion, och din buggfix binder systemets korrekta funktion i scenario B till den. Just nu ser allt bra ut, men en dag kommer den tredje buggen att uppt\u00e4ckas och \u00e5tg\u00e4rdas. D\u00e5 kommer det \u00e5terigen att uppst\u00e5 ett fel i scenario B, och helst inte bara d\u00e4r.<\/li>\n<\/ul>\n<p>\nAllt detta bidrar till en kaosartad kod och kommer en dag att falla tillbaka p\u00e5 dig \u2014 troligtvis vid det mest ol\u00e4mpliga tillf\u00e4llet. Du f\u00e5r samla kraft f\u00f6r att tvinga dig sj\u00e4lv att spendera tid p\u00e5 att f\u00f6rst\u00e5 varf\u00f6r allt ser ut att fungera, men det \u00e4r v\u00e4rt det. <\/p>\n<h4>Tredje niv\u00e5n av f\u00f6rst\u00e5else: Varf\u00f6r fungerar det?<\/h4>\n<p>\nMin senaste insikt \u00e4r just relaterad till denna niv\u00e5, och det \u00e4r f\u00f6rmodligen den som skulle ge mig st\u00f6rst f\u00f6rdelar om jag hade kommit p\u00e5 detta tidigare.<\/p>\n<p>F\u00f6r att f\u00f6rtydliga, l\u00e5t oss ta ett exempel: din modul beh\u00f6ver g\u00f6ras kompatibel med funktion X. Du \u00e4r inte s\u00e4rskilt v\u00e4lbekant med funktion X, men du har f\u00e5tt veta att f\u00f6r kompatibilitet m\u00e5ste du anv\u00e4nda ramverket F. Andra moduler som integreras med X fungerar just med det.<\/p>\n<p>Din kod har fr\u00e5n och med dag ett aldrig kommit i kontakt med ramverket F, s\u00e5 att implementera det kommer inte att vara s\u00e5 enkelt. Detta kan medf\u00f6ra allvarliga konsekvenser f\u00f6r vissa delar av modulen. \u00c4nd\u00e5 kastar du dig helhj\u00e4rtat in i utvecklingen: du skriver kod i flera veckor, testar, lanserar pilotversioner, f\u00e5r feedback, r\u00e4ttar regressionsfel, uppt\u00e4cker of\u00f6rutsedda komplikationer, hinner inte med de ursprungligen \u00f6verenskomna tidsramarna, skriver mer kod, testar, f\u00e5r \u00e5terkoppling, r\u00e4ttar regressionsfel \u2013 allt detta f\u00f6r att implementera ramverket F.<\/p>\n<p>Och pl\u00f6tsligt inser du \u2013 eller kanske h\u00f6r du fr\u00e5n n\u00e5gon \u2013 att ramverket F kanske inte alls ger dig kompatibilitet med funktion X. Kanske har all denna tid och kraft lagts p\u00e5 helt fel saker.<\/p>\n<p>N\u00e5got liknande h\u00e4nde en g\u00e5ng under ett projekt jag ansvarade f\u00f6r. Hur kunde det bli s\u00e5? F\u00f6r att jag hade en d\u00e5lig f\u00f6rst\u00e5else f\u00f6r vad funktion X handlade om och hur den relaterade till ramverket F. Vad borde jag ha gjort? Fr\u00e5gat personen som s\u00e4tter upp utvecklingsuppgiften om en tydlig f\u00f6rklaring av hur den f\u00f6reslagna planen leder till det \u00f6nskade resultatet, ist\u00e4llet f\u00f6r att bara upprepa vad som gjorts f\u00f6r andra moduler eller tro p\u00e5 att det var n\u00f6dv\u00e4ndigt f\u00f6r att funktion X skulle fungera.<\/p>\n<p>Erfarenheten fr\u00e5n det h\u00e4r projektet l\u00e4rde mig att jag m\u00e5ste v\u00e4gra att p\u00e5b\u00f6rja utvecklingsprocessen innan vi har en klar f\u00f6rst\u00e5else f\u00f6r varf\u00f6r vi ombeds att utf\u00f6ra vissa \u00e5tg\u00e4rder. Att tydligt v\u00e4gra. N\u00e4r man f\u00e5r en uppgift \u00e4r den f\u00f6rsta impulsen att omedelbart ta tag i den f\u00f6r att inte sl\u00f6sa bort tid. Men policyn \"stoppa projektet tills vi begriper allt\" kan spara massa on\u00f6dig tid. <\/p>\n<p>\u00c4ven om du pressas av andra att b\u00f6rja arbeta, \u00e4ven om du inte f\u00f6rst\u00e5r varf\u00f6r \u2013 st\u00e5 emot. F\u00f6rst m\u00e5ste du reda ut vad syftet med uppgiften \u00e4r och om det \u00e4r den r\u00e4tta v\u00e4gen till m\u00e5let. Jag fick l\u00e4ra mig allt detta p\u00e5 h\u00e5rda v\u00e4gar \u2013 jag hoppas att mitt exempel kan g\u00f6ra livet enklare f\u00f6r dem som l\u00e4ser detta.<\/p>\n<h4>Fj\u00e4rde niv\u00e5n av f\u00f6rst\u00e5else: ???<\/h4>\n<p>\nInom programmering finns det alltid n\u00e5got att l\u00e4ra sig, och jag tror att jag bara har ber\u00f6rt ytan av \u00e4mnet f\u00f6rst\u00e5else. Vilka andra niv\u00e5er av f\u00f6rst\u00e5else har du uppt\u00e4ckt under dina \u00e5r med kodning? Vilka beslut har du tagit som har f\u00f6rb\u00e4ttrat kvaliteten p\u00e5 koden och applikationen? Vilka beslut har visat sig vara felaktiga och gett dig v\u00e4rdefulla l\u00e4rdomar? Dela med dig av dina erfarenheter i kommentarerna.<br \/>\n<br \/>K\u00e4lla: <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.4 - 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\/sv\/blog\/news\/ne-soglashajtes-razrabatyvat-to-chego-ne-ponimaete\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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\udd47Acceptera inte att utveckla n\u00e5got du inte f\u00f6rst\u00e5r | ProHoster","description":"Sedan b\u00f6rjan av 2018 har jag haft en tj\u00e4nst.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/news\/ne-soglashajtes-razrabatyvat-to-chego-ne-ponimaete","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/36115","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=36115"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/36115\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/27008"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=36115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=36115"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=36115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}