Jaki język programowania wybrać?
To pytanie często widuję na różnorakich forach internetowych poświęconych programowaniu. Osoby, które dopiero zaczynają przygodę z programowaniem, zastanawiają się od jakiego języka zacząć.
Moim skromnym zdaniem sam język nie jest tutaj najważniejszy. To co czyni z kogoś programistę to umiejętność twórczego myślenia i przekształcania problemu do postaci algorytmu. Innymi słowy, jeśli chcemy napisać program rozwiązujący pewne zagadnienie, to już po jego usłyszeniu powinny nam w głowie powstawać myśli typu „tam wstawię pętle, tam warunek, tutaj użyję tablicy…” itd. Miałem okazję uczyć kilka początkujących osób i zawsze z tym osoby te miały największy problem. O ile składnia języka była dla nich jasna, to trudności nastarczał właśnie ten typowo programistyczny tok myślenia.
Zatem czy początkowy język programowania nie ma w ogóle znaczenia?
W zasadzie nie, aczkolwiek wydaje mi się aby ten pierwszy spełniał następujące założenia:
- był językiem wysokiego poziomu,
- był językiem kompilowanym (nie interpretowanym),
- posiadał wsparcie dla programowania obiektowego (OOP),
Czyli odpada np.: PHP, jako iż jest to język interpretowany. Wiąże się z tym kilka udogodnień, które niestety mogą być przyczyną problemów u początkującego programisty – np.: niejawne rzutowanie typów.
Idealne języki dla początkującego? C++, C#, Object Pascal (Delphi), Java, itp. Nauka jednego otwiera przed nami drzwi do świata programistów. Nauka kolejnego sprowadza się później do poznania innej składni – oczywiście nie tylko, ale w głównej mierze. Podstawy programowania takie jak operacje matematyczne, operatory, instrukcje warunkowe i pętle we wszystkich w/w językach wyglądają niemal identycznie pod względem logicznym. Różni je jedynie składnia języka.
Reasumując, jeśli jesteś osobą która stoi przed wyborem swojego pierwszego języka programowania, nie zadręczaj się. Dokonany wybór nie będzie rzutował na Twoje umiejętności w zależności od wybranego języka. Oczywiście jeśli potrzebujesz pisać pod konkretne zastosowanie (np.: webowe) to nie ma sensu uczyć się C++ a od razu sięgnąć do PHP. Jeśli jednak jesteś ukierunkowany na ogólną naukę programowania to wybór jest naprawdę szeroki.
Ja rozpocząłem swoją przygodę z PHP i zmyśleniem pętlami, funkcjami nie mam mam natomiast problem z językami typu C++ Delphi po prostu wygląd ich względem PHP jest dla mnie kosmiczny.
Jako koder od lat kilku chciałbym potwierdzić powyższą opinię. Podstawa to ASD (Algorymy i Struktury Danych); język jest kwestią drugorzędną; wybór języka i środowiska roboczego powinien być ukierunkowany na wygodę programisty. Jednak nie zgodzę się z częścią na temat zaczynania od języka kompilowanego – języki interpretowane mają o wiele prostszą strukturę; znika w nich pewna bariera dotycząca ogromu róznych opcji kompilatora, która nierzadko dla początkującego użytkownika jest nie do przebycia, jeżeli mu się nie pomoże.
Idealnym językiem na początek może okazać się Python – prosty, przejrzysty, SZYBKI.
Mówiąc o preferowanym języku kompilowanym miałem na uwadze sposób w jaki się programuje. Tzn. przykładowo, w PHP można odnieść się do nazwy zmiennej po przez inną zmienną: ${$abc} = …. W języku kompilowanym coś takiego nie jest możliwe z tego prostego względu że zmienne występują pod postacią offsetu pamięci a nie ich nazw. Tzn. w PHP też się to do tego sprowadza, ale z punku widzenia programisty może on mieć wrażenie że to nazwa odpowiada za jej identyfikację a tak de facto nie jest. Jest też dużo innych ułatwień które wg. mnie nie są dobre dla początkującego który powinien zrozumieć sedno problemu.
@M@ster
A ja rozumiem sedno problemu, pomimo że na codzień używam PHP. Zaczynałem od kodu maszynowego procesora 6502C, więc hm, jakby to powiedzieć, drodzy „prawdziwi” programiści, raczej odróżniam bit od bajta i nawet wiem co to wskaźnik jest.
Zdarzało mi się pisać w Delphi, kiedyś był jeszcze Pascal, później przejściowo C#, C++. Miałem nawet krótki kontakt z Pythonem.
Język programowania to narzędzie. Jedyna cecha jaką powinien posiadać to efektywność. Reszta bez znaczenia. Używam PHP tam gdzie jest efektywny. Do rozwiązywania problemów, które przy oprogramowaniu np w C++ zajęłyby o wiele więcej czasu roboczego – ergo, C++ jest nieefektywny do nich. Gdybym jednak próbował użyć PHP do generowania grafiki 3D albo rozpoznawania obrazu – cóż, to byłoby dopiero nieefektywne.
A próby wychwalania jednych styli programowania nad innymi są niedorzeczne. Style programowania dzielą się praktycznie tylko na efektywne i nieefektywne. Oczywiście wszystko jest względne i styl efektywny do jednego zadania będzie kompletnie nieefektywny w innym.
A co do nauki? Jak ktoś tego nie czuje, to święty Boże nie pomoże. Albo się to czuje albo nie. To jest niezależne od języka, i od tego czy będę odwoływał się do zmiennej jako nazwy, offsetu w przydzielonej pamięci, czy adresu fizycznego, czy kurde zapalę najpierw odpowiednie bity kontrolera pamięci żeby przełączył bank.
Mało tego, są ludzie, którzy czują matematyczno-elektroniczną stronę programowania, kompletnie nie czując praktyczniej (bo w końcu algorytm ma czemuś służyć). Tacy też nie będą programistami, na nieszczęście samej informatyki – tacy często kończą ucząc.