DEV Community

Димитър Трифонов (dvt32)
Димитър Трифонов (dvt32)

Posted on • Originally published at Medium

Стреми се да разбираш как работят отвътре различните технологии за програмиране!

SE

(Първо публикувано на May 16, 2021)

Готино е, че технологиите за програмиране се развиват доста бързо и благодарение на това самият процес на разработка на софтуер сякаш става все по-лесен.

Като чета как са протичали нещата преди години, това ме кара да се чувствам благодарен, че не ми се е налагало да минавам по този път. 😅

Например сега има доста инструменти, които ти спестяват писането на много boilerplate код. Има и много GUI инструменти, които ти спестяват това да се занимаваш с писането на команди и правят бързо и лесно изпълняването на често използвани операции.

Конкретен пример в Java. Spring Framework значително улеснява разработката на големи Java EE приложения, Spring MVC улеснява разработката на web приложения, а пък Spring Boot улеснява ползването на самия Spring като цяло. Spring Data JPA прави лесна комуникацията между базата данни и Java приложението, Spring Security прави имплементацията на защитата лесна и т.н.

Според мен е супер, че ги има тези неща, но проблемът е, че всичко това накрая започва да ти се струва като някаква тъмна мистериозна магия. Не знаеш какво точно се случва “под капака” и в резултат имаш по-малко контрол като програмист. Когато нещо се счупи, не си сигурен защо се случва това и как да го поправиш, защото не си запознат със самия механизъм на работа на технологиите, които ползваш.

И в този момент всъщност осъзнаваш, че може би от една страна щеше да е ПО-ДОБРЕ, ако първо беше минал по трудния път (без ползването на тези улесняващи инструменти). Ако беше минал по трудния път, сега хем щеше да ти е много по-лесно, хем пак щеше да разбираш какво се случва отдолу и по-лесно щеше да можеш да се справяш с проблемите, които възникват. 😅

Например с Git. Може да ползваш инструменти като Sourcetree и най-вероятно почти няма да ти се налага да пишеш каквито и да е Git команди. Обаче ако преди това не си свикнал изцяло с писането на команди, ставаш зависим от инструмента и това може да те прецака в един момент.

По-добре според мен е да минеш през писането на една и съща команда много пъти, докато не свикнеш изцяло и не разбереш как точно работи тя, а след това можеш да ползваш и някой инструмент, който ти спестява това да продължаваш да я пишеш ръчно всеки път.

Или пък да речем си свикнал да ползваш Spring Data JPA за манипулиране на данни в базата данни. И виждаш, че тази технология от своя страна ползва Hibernate, за да свърши съществената работа. Ти си свикваш с удобството на Spring Data JPA, но не задълбаваш в Hibernate, а сега когато ти се счупи нещо, не си много сигурен как да процедираш.

Може да вземеш някоя частичка код от StackOverflow, за да решиш проблема, но пак е като да поставиш лейкопласт върху огнестрелна рана (просто временно решение), защото си излекувал “симптома” (конкретната грешка), но не си се справил с “източника на болестта” (липсата ти на знания за Hibernate).

Ta затова вярвам, че е много полезен навик да се стремиш да разбираш всяка технология, която ползваш в програмирането. Не само как се ПОЛЗВА, а и как РАБОТИ и защо работи така.

Очевидно нямам предвид да почваш чак от нулата (“Ами айде да почна направо от писането на програми на binary, a пък един ден ще стигна и до Spring Boot…” *😆). *По-практично според мен е да си ползваш възможно най-модерните и улесняващи инструменти, НО всеки път, когато не си сигурен как работи точно някой компонент, да задълбаеш в него и да се опиташ да го разбереш поне до такава степен, че да не ти се струва като някаква мистериозна магия.**

Мисля, че всеки програмист малко или много се бори с това, защото хората винаги търсим най-лесничкото и това, с което ще изразходваме най-малко енергия и ще загубим най-малко време (просто част от човешката природа). И аз не се справям перфектно в това отношение, но все пак според мен е нещо, към което си струва един софтуерен инженер да се стреми.

Успех! 😎

Top comments (0)