Który język programowania wyrabia najlepsze nawyki?

0

Cześć, zastanawia mnie który język programowania wyrabia najlepsze nawyki, daje solidną bazę i sprawia, że nauka kolejnych jest łatwa? Programowanie nie jest dla mnie czymś zupełnie nowym. Tworzę aplikacje internetowe, uczę się Vue, "liznąłem" C++ na potrzeby matury, ale przed rozpoczęciem pracy po studiach chciałbym wyrobić w sobie pewne nawyki i mechanizmy, które poszerzą moją wiedzę i umiejętności.

2

Ja polecam C (a nie C++). Mam świadomość, że przez bardzo wiele osób doświadczenie w C nie będzie docenione, więc może z punktu widzenia robienia tzw. kariery jest to słabszy wybór niż inne języki, ale z punktu widzenia nauki jak robić programy jak najprostsze i jak najbardziej przejrzyste, jest bardzo dobry.

Język C, przez ręczne alokacje i dealokacje, sprawia że kopiowanie danych z miejsca na miejsce jest uciążliwe. Wydłuża to proces tworzenia programu, ale wymusza dłuższe zastanowienie się, czy wszystkie te operacje, które przy pierwszym podejściu do rozwiązania problemu wydają się potrzebne, są potrzebne w rzeczywistości. Swego czasu preferowałem C++ i intensywnie korzystałem z tych jego ułatwień względem C. I jak wracałem do programu/modułu po dłuższym czasie, to prawie zawsze miałem wrażenie, że był zagmatwany - bo w rzeczywistości był. Gdy miałem potrzebę coś większego tam zmienić, niekiedy znajdowałem czas, by zrobić to od nowa w czystym C. Zajmowało to długo, ale jak porównać wersję w C z wcześniejszą w C++, to ta wcześniejsza wykonywała mnóstwo operacji, które - jak pokazała późniejsza implementacja w C - nie były konieczne. Wersja w C okazywała się krótsza i po powrocie do niej po dłuższym czasie, znacznie łatwiej było prześledzić co gdzie się dzieje.

1

Dobre nawyki i mechanizmy są uniwersalne i niezależne od języka. Poczytaj sobie książki Roberta Martina ("Czysty kod", "Mistrz czystego kodu", "Czysta architektura"). Jakiego języka byś nie wybrał, poprawi ci to podejście, bo w każdym można tworzyć i solidny kod jak i nieczytelne potwory.

0

Doprecyzuję może, że to niekoniecznie będzie język, który będę wykorzystywał w przyszłości do zarabiania. Chcę poprawić swoje "programistyczne" spojrzenie na problemy i rozwiązywanie ich, nauczyć się w końcu dobrze programowania obiektowego. Do tej pory pisząc aplikacje webowe robię to trochę nieświadomie. Wiem czego, gdzie i jak użyć, ale czasami nie wiem jak to do końca działa. Myślę że taki krok wstecz się przyda :)

1

Jak wyrobić dobre nawyki, to musisz poznawać różne języki, żeby mieć porównanie i dystans. Bo znając tylko jeden przesiąkasz jednym językiem i masz ograniczone horyzonty. Wtedy programujesz nie dlatego, że jest to skuteczne, ale że to jedyny sposób, jaki znasz.

nauczyć się w końcu dobrze programowania obiektowego.

Oj, jest dużo w internecie na ten temat (choćby zestaw zasad SOLID - akronim ukuty przez Roberta C. Martina), tylko i tak koniec końców sama teoria mało da, bo trzeba też samemu na maksa kombinować. Zarówno mieć dużą praktykę w kodzeniu, ale również zdolność do myślenia koncepcyjnego - które nie musi odbywać się przy kompie - możesz mieć komp wyłączony, a projektować w głowie (albo na kartce) obiektową aplikację. Na początku może to być trudne, ale warto się ćwiczyć w myśleniu (oraz w implementacji tego, coś wymyślił).

1

Według mojej subiektywnej opinii horyzonty poszerzają takie języki jak między innymi Lisp (aktualnie korzystam z dialektu Common Lisp), assembly x86-64 (aktualnie korzystam z assembler'a NASM).

Common Lisp ma w swoim zapleczu makra za pomocą, których można inaczej pisać kod, ponieważ część kodu nie jest ewaluowana, a część jest - zależy to od napisanego kodu. Dzięki temu można zobaczyć jak pracuje się na listach, jakie są tego zalety, a jakie wady.

assembly x86-64 jest językiem niskopoziomowym, więc warto się go uczyć, chociażby dla poznania tego, co dzieje się pod spodem. Wtedy pisząc konkatenację ciągów znaków w języku wysokopoziomowym (wysoki poziom abstrakcji) wiadomo, że na niższym poziomie abstrakcji jest najprawdopodobniej pętla, która znak po znaku przekopiowywuje znaki z miejsca źródłowego do docelowego.

1 użytkowników online, w tym zalogowanych: 0, gości: 1