(Първо публикувано на 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)