Hmm, odnosząc to do samochodu:
- Python: potrafię wsiadać do samochodu i wciskać guzik. W ten sposób samochód sam prowadzi mnie do celu
- Java/C#: pójdę na kurs prawo jazdy, będę wstanie prowadzić samochód: manipulować biegami, sprzęgłem, skręcać, dojadę więc do celu
- C++: jadę samochodem, bo umiem nim jeździć, a gdy się zepsuje, to potrafię go naprawić, dojadę więc do celu
- C: nie mam samochodu, ale potrafię zdobyć różne komponenty i go samodzielnie stworzyć od zera, dojadę więc do celu
- Asembler: skręciłbym samochód, ale nie mam części. Przetopię żelazo i zwulkanizuję kauczuk by otrzymać opony, potem sobie wszystko pospawam, w końcu jak złożę samochód, to dojadę do celu
Jak widać, każdy z tych języków pozwoli ostatecznie dotrzeć programiście do celu za ich pomocą. Niektórzy będą się fascynować tym, że dojechali tam gdzie planowali bez większego wysiłku, inni będą się cieszyć, że zrobili to za pomocą żmudnej pracy. Ale dzięki temu podróżowali swoim pojazdem, który znali na wylot.
C++ jest językiem, który mnie osobiście pozwolił zrozumieć każdy z tych aspektów. Nie umiem pisać w Asemblerze, ale potrafię zrozumieć zarządzanie pamięcią, stos i stertę. Z drugiej strony dzięki C++ ideowo wiem jak implementowane są w Pythonie listy czy krotki. Co to są klasy, metody i po co importuje się moduły (odpowiednik binarnych bibliotek .h z C++). Oczywiście każdy język jest ważny, łącznie za HTML czy CSS, który posiada mechanizm dziedziczenia, niemniej jednak wybierając C++ można najszybciej znaleźć przejścia pomiędzy programowaniem nisko a wysokopoziomowym.