Zacząłbym od cytatu:
„jeśli jedynym narzędziem, jakie masz, jest młotek, traktujesz wszystko jak gwóźdź”. (Abraham Maslow)
Najważniejszą zasadą, IMO, jest poznanie wielu różnych paradygmatów programowania, języków i dokładne poznanie dostępnych narzędzi. Każdy problem można rozwiązać w prawie każdym wybranym języku, niezależnie od tego, czy jest to pełny język głównego nurtu z ogromną biblioteką domyślną, czy mały język specjalistyczny, taki jak AutoHotKey. Pierwszym zadaniem programisty jest określenie, czego użyć zgodnie ze specyfikacją problemu. Niektóre koncepcje zapewniają lepsze podejście do tematu, niezależnie od tego, jaki jest Twój główny cel - wyrafinowanie, zaciemnianie, wydajność, przenośność, konserwacja, mały rozmiar kodu ...
W przeciwnym razie skończysz jak niektórzy programiści, którzy desperacko próbują zrobić coś w jednym specjalizowanym przez siebie języku, podczas gdy problem może być trywialny do rozwiązania w innym kontekście programowania.
Ta rada jest zgodna z dzisiejszą tendencją do projektów wielojęzycznych (weźmy na przykład aplikacje internetowe, które mogą obejmować kilka języków w jednej aplikacji, takie jak C #, JS, CSS, XPath, SQL, XML, HMTL, RegExp ... a nawet różne paradygmaty programowania (na przykład C # wprowadził ostatnio pewne koncepcje z paradygmatów programowania funkcjonalnego, lambd).
Więc podstawową rzeczą jest ciągła nauka, na zawsze :)