Autor Wątek: Języka dla początkującego  (Przeczytany 7028 razy)

Offline Galardo

  • Użytkownik

# Grudzień 20, 2015, 20:35:54
Jako, że chciałbym zacząć programować zacząłem przeszukiwać internet i trafiłem na waszą stronę. Poczytałem tu trochę o tym jaki język na początku jest dobry i dlaczego zwłaszcza w temacie "[Rozkminka] Jakim językiem programowania powinno się traktować początkujących." ale zauważyłem, że często używa się tam terminologii w argumentacji za i przeciw ,która myślę nie jest znana osobą które chciały rozpocząć przygodę z programowaniem a sam temat schodził czasem z głównego wątku :).
Po przemyśleniu tego zawęziłem wybór i teraz zastanawiam się na Pythonem a C++. Dlatego stworzyłem temat aby się dowiedzieć konkretnie co z tych dwóch będzie lepszą opcją oraz jaką literaturę byście polecali, najlepiej popartą przykładem z własnego doświadczenia. Oraz czy Symfonia C++ była by dobrym rozwiązaniem w wypadku C++?

PS Nie chciałem pisać w temacie "[Rozkminka] Jakim językiem programowania powinno się traktować początkujących.", mimo iż w sumie chodzi o to samo, ponieważ tam znajdowały się porady osób z doświadczeniem a nie pytania takie jak to :).

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Vault 11th

  • Użytkownik

  • +3
# Grudzień 20, 2015, 22:12:34
Sugerowałbym zacząć od polskiego. ;)
Symfonia C++ nie jest dobra do nauki C++. Ale skoro dopiero zaczynasz programowanie, to i tak Python będzie znacznie lepszym wyborem niż C++. Szybciej załapiesz o co chodzi w kodowaniu i dalsza nauka będzie przebiegała sprawniej.
Co do źródła, to w internecie znajdziesz wiele darmowych i dobrych kursów Pythona, znajdź taki, który jest dla Ciebie najłatwiejszy w odbiorze.

Offline deadeye

  • Użytkownik

# Grudzień 20, 2015, 22:43:06
Z tych dwóch, to zdecydowanie Python. C++ to overkill do nauki na początek.

Offline Xender

  • Użytkownik

# Grudzień 20, 2015, 22:52:33
O, ktoś wspomina temat, który zacząłem. :)

Przede wszystkim: niezależnie od języka, polecam znaleźć sobie jakiś program do rozwiązania - "jaki program chcę napisać".

Wprawdzie jesteśmy na forum o tworzeniu gier, ale tworzenie gier od 0 to ciężki temat (pętla czasu rzeczywistego na dzień dobry).
No chyba, że tekstowa historia z jakimiś wyborami i paroma ścieżkami dialogów.

Wdzięczniejszym tematem może być np. wyłuskanie jakichś informacji ze strony internetowej (web scrapping), kalkulator, który policzy jakiś konkretny problem - coś, co normalnie łatwo by się zrobiło w arkuszu kalkulacyjnym, dla nauki napisać w klasycznym języku programowania, itp. wyzwania - nie koniecznie praktyczne/przydatne, ale przynajmniej konkretne. I niezbyt duże.

Z tych dwóch na początek polecam Pythona, docelowo - oba (i więcej języków).
Konkretniej Pythona 3 - uwaga na tutoriale do 2 krążące po sieci.

Z książek czy tutoriali polecam... oficjalną dokumentację. Serio!
https://docs.python.org/3/ - spis treści/przegląd.
https://docs.python.org/3/tutorial/index.html - "zacznij od tego".
https://docs.python.org/3/library/index.html - "trzymaj to pod poduszką".

Książka/strona, którą podlinkował Xion we wspomnianym wątku także wygląda ciekawie:
https://automatetheboringstuff.com/


Symfonia C++ nie uczy programować od zera.
Uczy niby-od-zera C++, wychodząc z założenia, że czytelnik umie już programować w innym języku.
Mimo to, kiedy ją czytałem (chociaż było to lata temu, w wieku jeszcze dziecięcym), moje wrażenie było takie, że podstawy C++ są tam potraktowane bardzo zdawkowo i w ogóle nie umiałem zrozumieć, po co mi te klasy - "przecież nie będę tworzył własnych typów danych" (jak się okazało - będę, i właśnie na tym polega programowanie obiektowe. Ale po lekturze Symfonii jakoś tego nie zaczaiłem - a byłem wtedy po lekturze innej książki o podstawach C++ i programowania w ogóle).
Chociaż wracając do niej potem, rozumiałem z niej coś więcej.
Ciężko mi ocenić.

Offline Galardo

  • Użytkownik

# Grudzień 20, 2015, 23:34:39
Dzięki za odpowiedzi, wiem co będę robił w najbliższym czasie :)

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Grudzień 21, 2015, 02:10:31
Definitywnie na początek nie bierz się za Pythona. To język skryptowy, przez co wiele błędów wykrywanych jest zbyt późno (dopiero w momencie uruchomienia konkretnej funkcji). Nie wiem też czy jest do Pythona IDE z możliwościami porównywalnymi do IDE C++'owych - z podpowiadaniem składni i przede wszystkim genialnym debuggerem (np. wystarczy najechać myszą na zmienną w kodzie, by zobaczyć jej wartość).

Jeśli jednak nie jesteś fanem pisania na dość niskim poziomie, to zamiast C++ możesz zainteresować się C# - co się przyda w szczególności jeśli chcesz pisać gry w Unity, gdyż tam C# jest jednym z dostępnych języków skryptowych.

Offline CheshireCat

  • Użytkownik

# Grudzień 21, 2015, 02:56:03
Moim zdaniem C++ jest lepszy na początek niż Python/JavaScript itp. Mnóstwo programistów zaczęło od C lub C++. Oba języki dają dużą swobodę np. można ręcznie alokować pamięć, przez co wprowadzają w świat programowania lepiej. Potem można sobie ułatwiać życie, jak się ogarnie podstawy.

Łatwiej na C++ przetestować czy w ogóle ktoś się do programowania nadaje. C# oraz Java też wydają się sensownymi opcjami, jednak polecam C++ aby ogarnąć zarządzanie pamięcią, wskaźniki, popisać sobie różne struktury danych, które później będzie się brało z jakiejś biblioteki...
« Ostatnia zmiana: Grudzień 21, 2015, 02:58:11 wysłana przez CheshireCat »

Offline Kos

  • Użytkownik
    • kos.gd

# Grudzień 21, 2015, 09:42:20
Symfonia C++ nie jest dobra do nauki C++.

Przez to że jest przestarzała? Bo jak jeszcze nie była "tylko trochę przestarzała", to mi się z niej już uczyło bardzo dobrze.
Co teraz jest 'na topie'?
(Na pewno C++ core guidelines, ale to nie na początek :D.)

Offline wezu

  • Użytkownik

# Grudzień 21, 2015, 09:45:03
Python jest łatwiejszy na początek. Wystarczy go zainstalować i można pisać programy nawet w notatniku, do tego jest interaktyna konsola - łatwo przetestować co zrobi pojedyncza linia kodu. Nie ma wskaźników, nie ma alokacji pamięci, nie ma problemów.  Do pisania gier też się nadaje, do 2D jest pygame, do 3D jest Panda3D.

Offline Xender

  • Użytkownik

# Grudzień 21, 2015, 12:19:58
Definitywnie na początek nie bierz się za Pythona. To język skryptowy,
Veto.
Język skryptowy to coś, w czym skryptuje się inny program.
C# też może służyć za język skryptowy.
Niektórzy porywają się na skryptowanie w C++, no da się.

Python to język interpretowany z całkowicie dynamicznym typowaniem - to dokładniejsze określenie.

przez co wiele błędów wykrywanych jest zbyt późno (dopiero w momencie uruchomienia konkretnej funkcji).
W C++ też wiele błędów wykrywanych jest dopiero w momencie uruchomienia konkretnej funkcji - tak, nasze ulubione segfaulty.
Nie zawsze odpala się program pod debuggerem, a w takiej sytuacji pełny stacktrace z liniami kodu ma miażdżącą przewagę nad lakonicznym "no wysypało się, pod tym adresem pamięci".
Chyba, że pod Windowsem ustawi się JIT-debugger, a pod Linuxem zapisywanie coredumpów (i załaduje się potem taki coredump do debuggera), co odpowiednio: (JIT-debugger) AFAIK wchodzi w interakcje z wysypywaniem się wszystkich innych programów w systemie i (obsługa coredumpów) jest nietrywialne.

Nie wiem też czy jest do Pythona IDE z możliwościami porównywalnymi do IDE C++'owych - z podpowiadaniem składni i przede wszystkim genialnym debuggerem (np. wystarczy najechać myszą na zmienną w kodzie, by zobaczyć jej wartość).
Zapewne mówisz o Visualu - powinieneś explicite napisać, że proponujesz lock-in w produktach Micro$$oftu.

Z innymi IDE to jest bardzo różnie - w Code::Blocks czy Eclipse debugger działał różnie.
Podpowiadanie składni w tych IDE też podziaływywało, jak miało ochotę.

Poza tym, IDE mają tendencję do ogłupiania programisty.
Powinny być narzędziem, które jest wymienialne, a nie czymś, z czym należałoby się trwale wiązać.

Tekstowy debugger Pythona, PDB, jest na tyle przyjazny, że nie odczuwam, aby GUI-wrapper był potrzebny.
Czego nie mogę powiedzieć o GDB, jego nie mogę ogarnąć.
Zresztą, w Pythonie czasy iteracji zmian kodu są krótsze, bo nie trzeba rekompilować. Przeważnie nie musiałem w ogóle odpalać debuggera, wystarszyło dodać debugowe printy i odpalić program ponownie.

Tak więc mamy nie lepsze, nie gorsze, ale trochę inne sposoby debugowania.


Ale IDE są, np. PyCharm.
Moje odczucie było jak z każdym innym IDE - zrobienie czegoś minimalnie niestandardowego wymaga więcej walki z materią, niż pozostanie przy terminalu z shellem + edytorze tekstu.
« Ostatnia zmiana: Grudzień 21, 2015, 12:23:19 wysłana przez Xender »

Offline Vault 11th

  • Użytkownik

# Grudzień 21, 2015, 13:05:52
Python z Eclipse wydawał mi się znacznie lepszy pod względem podpowiadania składni niż VS 2015 Community z C++ - ten drugi nie wyrabia na moim (4xXeon + 8 GB RAM...) kompie z UE4, na podpowiadanie trzeba długo czekać, często po drobnej zmianie.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Grudzień 21, 2015, 16:24:06
Cytuj
W C++ też wiele błędów wykrywanych jest dopiero w momencie uruchomienia konkretnej funkcji - tak, nasze ulubione segfaulty.
Czyli co? Skoro nie jesteśmy w stanie przy kompilacji wykryć wszystkich błędów, to nie wykrywajmy żadnego?
Do poczytania: link ;)

Poza tym we w miarę nowoczesnym C++ przy vectorach i smart pointerach o segfaulta już relatywnie ciężko.
A na pewno dużo ciężej niż o zwykłą literówkę, którą Python wykryje dopiero jak już będzie za późno.

Cytuj
Nie zawsze odpala się program pod debuggerem, a w takiej sytuacji pełny stacktrace z liniami kodu ma miażdżącą przewagę nad lakonicznym "no wysypało się, pod tym adresem pamięci".
Ale jak już się wysypuje, to najczęściej dość łatwo to jest zreprodukować i pod debuggerem. Poza tym jak poważnie podchodzisz do tematu to możesz w reakcji na segfaulta zrobić dumpa i załadować go potem pod debuggerem.

Cytuj
Zapewne mówisz o Visualu - powinieneś explicite napisać, że proponujesz lock-in w produktach Micro$$oftu.
Ani trochę. Po prostu mają dobre IDE i o ile się da, osobiście wolę 99% developmentu i debugowania przeprowadzić na targecie windowsowym. Co nie znaczy że tego samego kodu nie mogę potem skompilować GCC na Androida, Blackberry, embedded czy do asm.js pod web.

Cytuj
Poza tym, IDE mają tendencję do ogłupiania programisty.
Podobne tezy można wysnuć o każdej rzeczy coś ułatwiającej lub automatyzującej - chociażby kalkulatory ogłupiają w porównaniu z liczeniem w pamięci. Dla mnie liczy się efektywność, a ćwiczenia typu wklepywanie pełnych identyfikatorów z pamięci, czy trening wyobraźni przestrzennej z użyciem terminala GDB jakoś do mnie nie przemawiają. ;)

Cytuj
Powinny być narzędziem, które jest wymienialne, a nie czymś, z czym należałoby się trwale wiązać.
Podobnie jak dobry stolarz co chwilę zmienia narzędzie z młotka na śrubokręt, nawet jeśli cały dzień ma wbijać gwoździe? ;)
Do mnie to nie przemawia. Jak trafię na lepsze narzędzie do danego zadania to zmienię. Póki co, nawet do zwykłej edycji plaintextu, nie trafiłem.

Cytuj
Tekstowy debugger Pythona, PDB, jest na tyle przyjazny, że nie odczuwam, aby GUI-wrapper był potrzebny.
Tak samo jak mi przez bardzo długi czas w zupełności wystarczał DevC++ i debug przez printf. Dopóki nie odpaliłem Visuala i mnie wgniotło, że można zupełnie inaczej.

Nie powiesz chyba, że nawet w Pythonie taki tree-view do przeglądania struktur danych nie byłby przydatny?

Cytuj
Zresztą, w Pythonie czasy iteracji zmian kodu są krótsze, bo nie trzeba rekompilować.
No nie tak do końca. Iteracje w których w Pythonie trzasnąłeś literówkę są duużo dłuższe od C++'owych.

Offline Kyroaku

  • Użytkownik

# Grudzień 21, 2015, 17:15:41
Nie ma wskaźników, nie ma alokacji pamięci, nie ma problemów.  Do pisania gier też się nadaje, do 2D jest pygame, do 3D jest Panda3D.
Ta, bo każdy zaczynający programować, zaczyna od wskaźników.

C++ na początku jest równie trudny (albo i prostszy), jak każdy inny język.

A jeśli mówimy już o znajomości wskaźników, to według mnie jest to podstawowa wiedza w programowaniu.
(trochę zaprzeczyłem samemu sobie :) miałem na myśli to, że każdy programista powinien znać wskaźniki)

Ja to bym chyba nawet po tylu setkach tysięcy tego typu tematów nie próbował przekonywać do konkretnego języka, tylko kazał wypróbować oba i wybrać wedle własnego uznania.
Ciężko powiedzieć komuś "To je be, bo to ma wskaźniki", skoro ktoś nie wie, co to jest wskaźnik.

Ja na przykład zaczynałem w C++ i teraz choć C# sprawia słuszne wrażenie nowszego, jakoś mi się nie podoba. Za dużo tych wszystkich "udogodnień". Nie mniej jednak, w Unity pisze się w C# wspaniale :)
« Ostatnia zmiana: Grudzień 21, 2015, 17:17:12 wysłana przez Kyroaku »

Offline Vault 11th

  • Użytkownik

# Grudzień 21, 2015, 17:29:02
No i właśnie, ciężko jest wejść w stan umysłu beginnera po latach doświadczenia, dlatego można spróbować doradzić w inny sposób, zadając pytanie:

Nauka jakiego języka (wraz z całą infrastrukturą), na dzisiaj, pozwoli beginnerowi najszybciej i najmniej boleśnie zrobić działającą grę?

Wydaje mi się, że na tak postawione pytanie, właśnie C# będzie najlepszą odpowiedzią...

Offline bies

  • Użytkownik

  • +2
# Grudzień 21, 2015, 17:29:23
Uwaga, wall-of-text na dodatek off-topic.

Wszystko poniżej też nie dotyczy początkujących programistów ale kogoś kto ma już parę (tak z 5 minimum) lat doświadczenie za pasem i więcej niż kilka języków za sobą.

Podobne tezy można wysnuć o każdej rzeczy coś ułatwiającej lub automatyzującej - chociażby kalkulatory ogłupiają w porównaniu z liczeniem w pamięci.
Tak! Tylko wydaję mi się, że nie pamiętasz, że nóż potrzebuje ostrzenia. A mózg to nie jest coś co dostałeś na całe życie. Tylko organ który się degeneruje (jesteśmy obaj już w tym wieku, że tendencja jest spadkowa, niestety). I owszem, używając kalkulatora Twój mózg przestanie sobie radzić z liczbami. Znam takie przypadki, nie potrafią oszacować (nie policzyć, oszacować) przychodu rocznego jeśli tygodniowy, średni jest np. 8650 EUR. Nie bez Excela. I teraz, jeśli nie masz problemu z takim stanem swojej głowy to OK. Dla mnie to upośledzenie.

Nie wiem dlaczego nikt się nie oburza na to, że warto czasami zostawić samochód i przejść się pieszo a że warto czasami zostawić kalkulator już wydaje się dziwne...

Z używaniem IDE jest podobnie. Ale to nie wszystko. Ten podlinkowany artykuł był naprawdę sensowny. Otóż chodzi o to, że masz w głowie pewną ,,przestrzeń mentalną'' takie ,,rejestry'' na których możesz operować. I to nie jest bynajmniej duża przestrzeń. A na dodatek maleje z wiekiem. Wiec jak jej nie wykorzystujesz (a IDE właśnie na to Ci pozwala -- na mentalne lenistwo) to się degraduje.

Druga sprawa jest taka, że ta przestrzeń jest skończona i mała. W związku z tym rozwiązania które tworzysz muszą się w niej mieścić -- są mniejsze, zgrabniejsze i lepiej przemyślane (to jest właśnie teza z artykułu). IDE sztucznie poszerza Ci przestrzeń w której pracujesz, co może prowadzić do zmutowanej kupy... kodu.

Przykład, zachwycasz się debuggerem -- ja nie debuguję swojego kodu. Po co? Przecież napisałem ten kod. A skoro go napisałem to go znam (jest w moich ,,rejestrach'' lub jestem go w stanie ,,załadować''). Po opisie błędu, czasami stack-trace'ie lub logu wiem na czym polega błąd. I nawet nie chodzi o to, że nie mam dobrego debuggera -- mam. Piszę głównie pod JVM ostatnio a wiele mogę złego powiedzieć o Eclipse ale nie to, że debugger dla JVM jest słaby. I znów, możesz nie mieć problemu z tym, że debugger jest pierwszą rzeczą po którą sięgasz jak masz błąd. Ale dla mnie to kolejne upośledzenie -- ja sięgam do swojej głowy.

Inna sprawa że debugger (i jakieś IDE do nawigacji po kodzie) jest bardzo przydatny do czytania ze zrozumieniem kiepsko napisanej papki.