{"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\/ro\/blog\/news\/ne-soglashajtes-razrabatyvat-to-chego-ne-ponimaete","title":{"rendered":"Nu accepta\u021bi s\u0103 dezvolta\u021bi ceea ce nu \u00een\u021belege\u021bi","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Nu accepta\u021bi s\u0103 dezvolta\u021bi ceea ce nu \u00een\u021belege\u021bi\" src=\"\/wp-content\/uploads\/2019\/07\/bfd609d9004113a76d59d8763d82c6d0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDin \u00eenceputul anului 2018, ocup func\u021bia de lead\/\u0219ef\/dezvoltator principal \u00een echip\u0103 \u2014 numi\u021bi-o cum dori\u021bi, dar esen\u021ba este c\u0103 sunt complet responsabil pentru unul dintre module \u0219i pentru to\u021bi dezvoltatorii care lucreaz\u0103 la el. Aceast\u0103 pozi\u021bie \u00eemi ofer\u0103 o nou\u0103 perspectiv\u0103 asupra procesului de dezvoltare, deoarece sunt implicat \u00een mai multe proiecte \u0219i particip mai activ la luarea deciziilor. Recent, datorit\u0103 acestor dou\u0103 circumstan\u021be, am realizat brusc c\u00e2t de mult m\u0103sura \u00een\u021belegerii influen\u021beaz\u0103 codul \u0219i aplica\u021bia.<\/p>\n<p>G\u00e2ndul pe care vreau s\u0103-l exprim se reduce la faptul c\u0103 calitatea codului (\u0219i a produsului final) este str\u00e2ns legat\u0103 de c\u00e2t de con\u0219tien\u021bi sunt cei care proiecteaz\u0103 \u0219i scriu codul de ceea ce fac.<\/p>\n<p>Poate v\u0103 g\u00e2ndi\u021bi acum: \u201eMul\u021bumesc, c\u0103pitan. Desigur, ar fi bine s\u0103 \u00een\u021belegem ce scriem. Altfel, la fel de bine am putea angaja un grup de maimu\u021be ca s\u0103 loveasc\u0103 la \u00eent\u00e2mplare tastele \u0219i s\u0103 ne lini\u0219tim.\u201d \u0218i ave\u021bi perfect\u0103 dreptate. A\u0219adar, accept ca dat fiind c\u0103 \u00een\u021belege\u021bi c\u0103 a avea o viziune general\u0103 despre ceea ce face\u021bi este esen\u021bial. Acesta poate fi numit nivelul zero de \u00een\u021belegere, iar acesta nu \u00eel vom analiza \u00een detaliu. \u00cen detaliu ne vom ocupa de ceea ce trebuie s\u0103 \u00een\u021belegem \u0219i cum aceasta influen\u021beaz\u0103 deciziile pe care le lua\u021bi \u00een fiecare zi. Dac\u0103 a\u0219 fi \u0219tiut aceste lucruri dinainte, m-ar fi salvat de o mul\u021bime de timp pierdut \u0219i cod \u00eendoielnic.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nDe\u0219i nu ve\u021bi vedea niciun r\u00e2nd de cod mai jos, consider totu\u0219i c\u0103 tot ceea ce s-a spus aici are o mare importan\u021b\u0103 pentru scrierea unui cod de calitate, expresiv. <\/p>\n<h4>Primul nivel de \u00een\u021belegere: De ce nu func\u021bioneaz\u0103?<\/h4>\n<p>\nDe obicei, la acest nivel dezvoltatorii ajung \u00een cele mai timpurii etape ale carierei lor, uneori chiar f\u0103r\u0103 nicio ajutor din partea celor din jur \u2014 cel pu\u021bin, dup\u0103 observa\u021biile mele. Imagineaz\u0103-\u021bi c\u0103 ai primit un raport de bug: o func\u021bie din aplica\u021bie nu func\u021bioneaz\u0103, trebuie s\u0103 o repari. Ce vei face?<\/p>\n<p>Schema standard arat\u0103 astfel:<\/p>\n<ol>\n<li>G\u0103se\u0219te fragmentul de cod care provoac\u0103 problema (cum se face acest lucru este un subiect separat, pe care \u00eel discut \u00een cartea mea despre codul \u00eenvechit)<\/li>\n<li>F\u0103 modific\u0103ri \u00een acest fragment<\/li>\n<li>Asigura\u021bi-v\u0103 c\u0103 bug-ul a fost corectat \u0219i c\u0103 nu au ap\u0103rut erori de regresie<\/li>\n<\/ol>\n<p>\nAcum s\u0103 ne concentr\u0103m asupra celui de-al doilea punct \u2013 modificarea codului. Exist\u0103 dou\u0103 abord\u0103ri pentru acest proces. Prima: a \u00een\u021belege exact ce se \u00eent\u00e2mpl\u0103 \u00een codul curent, a identifica bug-ul \u0219i a-l corecta. A doua: a merge pe \u00eentuneric \u2013 s\u0103 adaugi, de exemplu, +1 \u00eentr-un operator condi\u021bional sau \u00eentr-un ciclu, s\u0103 vezi dac\u0103 func\u021bia a \u00eenceput s\u0103 func\u021bioneze \u00een scenariul dorit, apoi s\u0103 \u00eencerci \u0219i altceva, \u0219i tot a\u0219a la nesf\u00e2r\u0219it.<\/p>\n<p>Corect este prima abordare. A\u0219a cum explic\u0103 \u00een cartea sa Code Complete Steve McConnell (pe care, de altfel, o recomand cu c\u0103ldur\u0103), de fiecare dat\u0103 c\u00e2nd facem o modificare \u00een cod, trebui s\u0103 fim capabili s\u0103 prezicem cu \u00eencredere cum va afecta aceast\u0103 modificare aplica\u021bia. \u00cemi amintesc o citat, dar dac\u0103 bug fix-ul nu func\u021bioneaz\u0103 a\u0219a cum te a\u0219tep\u021bi, ar trebui s\u0103 te \u00eengrijoreze foarte mult, trebuie s\u0103 pui la \u00eendoial\u0103 \u00eentregul t\u0103u plan de ac\u021biune.<\/p>\n<p>Rezum\u00e2nd, pentru a realiza un bug fix de calitate, care s\u0103 nu afecteze negativ calitatea codului, este necesar s\u0103 \u00een\u021belegi at\u00e2t \u00eentreaga structur\u0103 a codului, c\u00e2t \u0219i sursa problemei specifice.<\/p>\n<h4>Al doilea nivel de \u00een\u021belegere: De ce func\u021bioneaz\u0103?<\/h4>\n<p>\nAcest nivel este \u00een\u021beles mult mai pu\u021bin intuitiv dec\u00e2t precedentul. Eu, fiind un dezvoltator \u00eencep\u0103tor, l-am \u00eenv\u0103\u021bat de la \u0219eful meu \u0219i ulterior am explicat esen\u021ba acestui concept de nenum\u0103rate ori \u00eencep\u0103torilor.<\/p>\n<p>De data aceasta, s\u0103 ne imagin\u0103m c\u0103 ai primit dou\u0103 rapoarte de bug-uri: primul se refer\u0103 la scenariul A, iar al doilea - la scenariul B. \u00cen ambele scenarii se \u00eent\u00e2mpl\u0103 ceva \u00een neregul\u0103. A\u0219adar, \u00eencepi mai \u00eent\u00e2i cu primul bug. Conduc\u00e2ndu-te dup\u0103 principiile pe care le-am derivat pentru primul nivel de \u00een\u021belegere, te aprofundezi \u00een codul relevant problemei, descoperi de ce acesta determin\u0103 aplica\u021bia s\u0103 se comporte astfel \u00een scenariul A \u0219i faci modific\u0103rile ra\u021bionale necesare, care ofer\u0103 exact rezultatul pe care l-ai a\u0219teptat. Totul decurge excelent.<\/p>\n<p>Apoi treci la scenariul B. Repe\u021bi scenariul \u00een \u00eencercarea de a provoca eroarea, dar - surpriz\u0103! - acum totul func\u021bioneaz\u0103 a\u0219a cum trebuie. Pentru a-\u021bi confirma intui\u021bia, anulezi modific\u0103rile f\u0103cute \u00een timpul lucrului la eroarea A, iar bug-ul B revine din nou. Fixul t\u0103u a rezolvat ambele probleme. Ai avut noroc!<\/p>\n<p>Nu v-a\u021bi a\u0219teptat deloc la asta. A\u021bi g\u0103sit o modalitate de a corecta eroarea din scenariul A \u0219i nu ave\u021bi idee de ce a func\u021bionat \u0219i pentru scenariul B. \u00cen aceast\u0103 etap\u0103, tenta\u021bia de a concluziona c\u0103 ambele sarcini au fost \u00eendeplinite cu succes este foarte mare. Este logic: p\u00e2n\u0103 la urm\u0103, scopul a fost s\u0103 elimina\u021bi erorile, nu-i a\u0219a? Dar munca nu este \u00eenc\u0103 terminat\u0103: trebuie s\u0103 \u00een\u021belege\u021bi de ce ac\u021biunile dumneavoastr\u0103 au corectat eroarea din scenariul B. De ce? Pentru c\u0103 exist\u0103 posibilitatea ca acesta s\u0103 func\u021bioneze pe principii gre\u0219ite, iar atunci va trebui s\u0103 c\u0103uta\u021bi o alt\u0103 solu\u021bie. Iat\u0103 c\u00e2teva exemple de astfel de cazuri:<\/p>\n<ul>\n<li>deoarece solu\u021bia nu a fost adaptat\u0103 specific pentru eroarea B, lu\u00e2nd \u00een considerare to\u021bi factorii, este posibil s\u0103 fi stricat f\u0103r\u0103 s\u0103 v\u0103 da\u021bi seama func\u021bia C. <\/li>\n<li>nu este exclus ca undeva s\u0103 se ascund\u0103 \u0219i o a treia eroare, legat\u0103 de aceea\u0219i func\u021bie, iar corectarea dumneavoastr\u0103 leag\u0103 func\u021bionarea corect\u0103 a sistemului \u00een scenariul B de aceasta. Acum totul pare bine, dar \u00eentr-o zi frumoas\u0103, aceast\u0103 a treia eroare va fi observat\u0103 \u0219i corectat\u0103. Atunci, \u00een scenariul B va ap\u0103rea din nou o eroare, \u0219i bine c\u0103 doar acolo.<\/li>\n<\/ul>\n<p>\nToate acestea aduc haos \u00een cod \u0219i, \u00eentr-o bun\u0103 zi, se vor r\u0103zbuna asupra dumneavoastr\u0103 \u2014 cel mai probabil \u00een momentul cel mai nepotrivit. Va trebui s\u0103 aduna\u021bi voin\u021b\u0103 pentru a v\u0103 obliga s\u0103 petrece\u021bi timp \u00een\u021beleg\u00e2nd de ce totul pare c\u0103 func\u021bioneaz\u0103, dar merit\u0103. <\/p>\n<h4>Al treilea nivel de \u00een\u021belegere: De ce func\u021bioneaz\u0103?<\/h4>\n<p>\nRecenta mea revela\u021bie este legat\u0103 exact de acest nivel \u0219i, probabil, acesta mi-ar fi oferit cele mai mari avantaje dac\u0103 a\u0219 fi ajuns la aceast\u0103 idee mai devreme.<\/p>\n<p>Pentru a fi mai clar, s\u0103 analiz\u0103m un exemplu: modulul dumneavoastr\u0103 trebuie s\u0103 fie compatibil cu func\u021bia X. Nu sunte\u021bi foarte familiarizat cu func\u021bia X, dar vi s-a spus c\u0103 pentru compatibilitate, trebuie s\u0103 folosi\u021bi framework-ul F. Alte module care se integreaz\u0103 cu X func\u021bioneaz\u0103 exact cu acesta.<\/p>\n<p>Codul t\u0103u nu a avut nicio interac\u021biune cu framework-ul F de la \u00eenceputul s\u0103u, a\u0219a c\u0103 implementarea acestuia nu va fi chiar simpl\u0103. Aceasta va avea consecin\u021be serioase asupra unor componente ale modulului. Cu toate acestea, te dedici complet dezvolt\u0103rii: s\u0103pt\u0103m\u00e2ni \u00eentregi scrii cod, testezi, lansezi versiuni pilot, prime\u0219ti feedback, corectezi erori de regresie, descoperi complica\u021bii neprev\u0103zute, nu te \u00eencadrezi \u00een termenele ini\u021biale, scrii \u0219i mai mult cod, testezi, prime\u0219ti feedback, corectezi erori de regresie - toate acestea pentru a implementa framework-ul F.<\/p>\n<p>\u0218i \u00eentr-un moment dat, \u00ee\u021bi dai seama - sau, poate, auzi de la cineva - c\u0103, poate, framework-ul F nu \u00ee\u021bi va oferi compatibilitate cu func\u021bia X. Poate toate aceste timp \u0219i efort au fost direc\u021bionate \u00een direc\u021bia gre\u0219it\u0103.<\/p>\n<p>Ceva similar s-a \u00eent\u00e2mplat odat\u0103 \u00een timpul lucrului la un proiect pentru care eram responsabil. De ce s-a \u00eent\u00e2mplat a\u0219a? Pentru c\u0103 nu \u00een\u021belegeam bine esen\u021ba func\u021biei X \u0219i cum se leag\u0103 de framework-ul F. Ce ar fi trebuit s\u0103 fac? S\u0103 cer unei persoane care define\u0219te sarcinile de dezvoltare s\u0103 explice clar cum planul de ac\u021biune preconizat duce la rezultatul dorit, \u00een loc s\u0103 repet ceea ce s-a f\u0103cut pentru alte module sau s\u0103 cred pe cuv\u00e2nt c\u0103 a\u0219a trebuie pentru func\u021bionarea func\u021biei X.<\/p>\n<p>Experien\u021ba acestui proiect m-a \u00eenv\u0103\u021bat s\u0103 refuz s\u0103 \u00eencep procesul de dezvoltare p\u00e2n\u0103 c\u00e2nd nu avem o \u00een\u021belegere clar\u0103 despre ce ne cer s\u0103 facem. S\u0103 refuz direct. Atunci c\u00e2nd prime\u0219ti o sarcin\u0103, primul impuls este s\u0103 te apuci imediat de ea pentru a nu pierde vremea. Dar politica de '\u00eenghe\u021bare a proiectului, p\u00e2n\u0103 ne clarific\u0103m toate detaliile' poate reduce timpul pierdut semnificativ. <\/p>\n<p>Chiar \u0219i atunci c\u00e2nd cineva \u00eencearc\u0103 s\u0103 te preseze, s\u0103 te oblige s\u0103 \u00eencepi s\u0103 lucrezi f\u0103r\u0103 s\u0103 \u00een\u021belegi motivele, rezist\u0103. \u00cencepe prin a \u00een\u021belege ce scop are sarcina respectiv\u0103 \u0219i decid\u0103 dac\u0103 este calea corect\u0103 spre scop. A trebuit s\u0103 \u00eenv\u0103\u021b toate acestea din experien\u021b\u0103 amar\u0103 - sper c\u0103 exemplul meu va u\u0219ura via\u021ba celor care citesc aceste r\u00e2nduri.<\/p>\n<h4>Nivelul patru de \u00een\u021belegere: ???<\/h4>\n<p>\n\u00cen programare, exist\u0103 \u00eentotdeauna ceva de \u00eenv\u0103\u021bat, iar eu cred c\u0103 doar am atins suprafa\u021ba subiectului \u00een\u021belegerii. Ce alte niveluri de \u00een\u021belegere a\u021bi descoperit de-a lungul anilor de lucru cu codul? Ce decizii a\u021bi luat care au avut un impact pozitiv asupra calit\u0103\u021bii codului \u0219i aplica\u021biei? Ce decizii s-au dovedit a fi gre\u0219ite \u0219i v-au oferit o lec\u021bie valoroas\u0103? \u00cemp\u0103rt\u0103\u0219i\u021bi-v\u0103 experien\u021ba \u00een comentarii.<br \/>\n<br \/>Sursa: <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.2 - 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\/ro\/blog\/news\/ne-soglashajtes-razrabatyvat-to-chego-ne-ponimaete\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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\udd47Nu accepta\u021bi s\u0103 dezvolta\u021bi ceea ce nu \u00een\u021belege\u021bi | ProHoster","description":"De la \u00eenceputul anului 2018, ocup aceast\u0103 func\u021bie.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/news\/ne-soglashajtes-razrabatyvat-to-chego-ne-ponimaete","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/36115","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=36115"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/36115\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/27008"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=36115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=36115"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=36115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}