Przeczytałem tutaj na P.SE więcej pytań, w których początkującym programistom zaleca się wybranie Python jako pierwszego języka programowania.
Nie zrozum mnie źle, lubię Python. Bardzo to lubię! Ale jego filozofia obraca się wokół: „Wszyscy jesteśmy tu zgodni z dorosłymi”.
Z punktu widzenia doświadczenia / wiedzy początkujący programista nie jest dorosły. Co oznacza, że łatwiej jest zastrzelić się w stopę i nabrać złych nawyków, nawet jeśli przeżyjesz ranę.
Myślę, że w „bardziej statycznym” języku trudniej byłoby zastrzelić się w stopę, ponieważ będzie to bardziej restrykcyjne.
Wróć do mojego pytania. Dlaczego Python jest zalecany jako podstawowy język programowania?
Jakie są punkty, które sprawiają, że jest dobry do nauki języka programowania? Czy ... czy to osobiste preferencje doradcy?
I'm thinking that in a "more static" language it would be harder to shoot yourself in the foot
- Cóż, C i C ++ są wpisywane statycznie i byłbyś bardzo, bardzo zaskoczony, widząc, jak wiele różnych sposobów możesz zdmuchnąć stopę za ich pomocą ...Odpowiedzi:
IMO, najważniejsze punkty, które mówią w języku Python jako językiem podstawowym to:
źródło
Witaj świecie w Pythonie:
witaj świecie w Javie:
witaj świecie w C:
Dodajmy do tego, że musimy rozmawiać o kompilacji dla dwóch pozostałych, a python jest znacznie prostszy. Muszę tylko porozmawiać o jednym pomyśle, na który jestem zainteresowany, wszystkie maszyny, które komplikują sprawę, po prostu znikają w pythonie. Mogę poczekać, aż będą gotowi rozmawiać o modułach, nie muszę się spieszyć, aby uzyskać stdio.h dla prostych programów. Mogę poczekać, aż będą gotowi na takie tematy jak zajęcia, nie trzeba ich spieszyć na pierwsze programy. Ma REPL do wygłupów w wierszu poleceń. Python jest bardzo dobry w byciu minimalnie koncepcyjnym. Jest to dobra rzecz, ponieważ pomaga początkującym skoncentrować się na zadaniu.
źródło
To niezwykły punkt widzenia.
Zgadzanie się dorosłych jest bardzo małą częścią filozofii Pythona. Z pewnością nie „kręci się” wokół tego. To nawet nie jest część „Zen Pythona”, którą dostajesz, jeśli robisz to
import this
w tłumaczu.Inne rzeczy, takie jak „wyraźne są lepsze niż niejawne”, „Proste jest lepsze niż złożone”, a „Liczby czytelności” są znacznie ważniejsze dla Pythona i pokazują, dlaczego Python jest dobrym pierwszym językiem.
W każdym razie „osoby dorosłe wyrażające zgodę” naprawdę dotyczą tylko braku prywatnych obiektów w Pythonie. Co samo w sobie jest, moim zdaniem, kolejnym dowodem na to, dlaczego jest dobre dla początkujących: nie musisz się martwić takimi rzeczami, jak interfejsy, gdy dopiero zaczynasz.
źródło
private
pola,public
aby hackować? BTW, w Pythonie możesz poprzedzić właściwość znakiem podkreślenia, aby ustawić ją jako prywatną (choć nie tak naprawdę ukrytą)Istnieją dwa różne punkty. Czy wychowując dziecko, należy umieścić je w bańce, w której są tylko bezpieczne rzeczy, lub pozwolić im bawić się na podwórku, na którym mogłyby się potknąć i spaść?
Przebywanie w bańce jest bardzo restrykcyjne. Musisz napisać swój kod w bardzo specyficzny sposób, aby go uruchomić. Kiedy ludzie zaczynają po raz pierwszy, wszystko, czego nie ma, aby zrobić to, czego chce, jest postrzegane jako marnotrawstwo. Może to również prowadzić do „Nie wiem, dlaczego tak jest, ale ktoś mi powiedział, że to konieczne”.
W Pythonie to nie istnieje. Jeśli chcesz powiedzieć „Hello World”, po prostu
print "Hello World"
. Użycie Pythona jako punktu wejścia pozwala komuś rzucić się na ziemię i po prostu napisać kod, którego potrzebują, aby zrealizować to, co chcą. Po raz pierwszy programista nie może zrozumieć wartości enkapsulacji, zanim zrozumie podstawy programowania.Również w małych programach bezpieczeństwo typu nie jest dużym problemem. Każdy kod, który pisze początkujący programista, będzie niewielki i zawarty. Dopiero gdy będziesz mieć większą bazę kodu, z dużą ilością sekcji, które wykorzystujesz jako warstwy abstrakcji i nie zastanawiasz się aktywnie, gdy bezpieczeństwo tekstu pokazuje, że korzyści płynące z zapewnienia tego, co musisz zrobić. Gdy cały kod znajduje się w tym samym pliku, łatwiej jest po prostu spojrzeć na funkcję i zobaczyć, co zrobiłeś źle.
Inne korzyści:
źródło
Python to świetny język dla początkujących, ponieważ sprawia, że proste rzeczy stają się proste, a jednocześnie jest wystarczająco skomplikowane, aby nie był uważany za bezużyteczny język zabawek, a nawet zaawansowani programiści uważają go za odpowiednie narzędzie do niektórych zadań. W szczególności proste rzeczy obejmują:
Bezwzględne minimum kodu płyty grzewczej dla prostych programów.
Zbieranie śmieci.
Pisanie dynamiczne.
Czysta, prosta składnia.
Porównaj to np. Z Javą lub C ++ i trudnością wyjaśnienia wszystkich pojęć związanych z programem „Witaj, świecie”. Skomplikowane rzeczy obejmują:
Introspekcja (odpowiednik odbicia w Pythonie).
Łatka na małpy.
Rzeczy, które można zrobić dzięki ogromnej standardowej bibliotece.
To powiedziawszy, nikt, kto zna tylko Pythona, nie jest dobrym programistą, ponieważ nikt, kto zna tylko jeden język lub jeden styl języka, nie jest dobrym programistą. Każdy, kto poważnie myśli o programowaniu, powinien w końcu nauczyć się czegoś na niższym poziomie, nie tylko wtedy, gdy wciąż próbuje opanować kontrolę przepływu, rekurencję i inne podstawy.
źródło
Widzę Python jako dobry wybór. Zazwyczaj do programowania na poziomie podstawowym potrzebujesz czegoś prostego, ale produktywnego. Otrzymywanie szybkich informacji zwrotnych wspiera zarówno motywację, jak i szybkość nauki. Odważę się powiedzieć, że nie chodzi o naukę „właściwej drogi”, ale „uzależnienie się i zakochanie w programowaniu na całe życie”. Reszta przyjdzie później dzięki doświadczeniu, wykształceniu średniemu, cokolwiek.
źródło
IMHO, uczenie ludzi kodowania w „bezpiecznych” językach jest bardzo złym pomysłem. Ludzie zakładają, że wszystko jest łatwe i myślą tylko o dodaniu warstw i warstw kodu. I tracąc szansę na debugowanie / naprawę problemów, gdy się pojawią.
Dobrzy programiści absolutnie muszą znać C / C ++, a nawet asembler. Ich sposób myślenia również musi pochodzić z tej strony. I nie - „Och, GC, robi Magic (tm), jesteśmy fajni, a dlaczego C ++ nie ma GC, to jest głupie”. nastawienie.
źródło
Dla początkującego programisty brak typów statycznych jest cechą, a nie błędem!
Podczas nauki programowania nawet najbardziej oczywiste rzeczy mogą być trudne do zrozumienia. Systemy typu dynamicznego są bardzo proste i eliminują bardziej pilne tematy w kursie wprowadzającym, takim jak modularyzacja, przepływ sterowania itp.
Istnieje także kilka pojęciowych zalet dynamicznego pisania w środowisku edukacyjnym:
Typy są powiązane z wartościami, a nie zmiennymi. Jest to prawdopodobnie bardziej intuicyjne, ponieważ odzwierciedla przyczyny awarii programów.
Komunikaty o błędach są znacznie bardziej natychmiastowe i konkretne. W Pythonie otrzymujesz piękny ślad stosu i komunikat wskazujący, co faktycznie poszło nie tak. W statycznie wpisywanych języka otrzymasz ostrzeżenie kompilatora mówiąc co by się nie udać.
Studenci pracujący z kompilatorem mogą pracować tylko w programach, które w pełni rozumieją, aby nie napotkać błędu kompilacji, którego nie mogą rozwiązać.
Sprawdzanie błędów w czasie wykonywania umożliwia uruchamianie niekompletnych programów. Pozwala to na tworzenie programów przyrostowych, w których uczeń może najpierw martwić się poprawnością rozpoczęcia programu, a dopiero potem zobaczyć, co się stanie.
Niektóre ważne pojęcia, takie jak polimorfizm parametryczny i pisanie kaczek, pojawiają się za darmo w języku dynamicznym, ale wymagają bardziej złożonych systemów typów w języku statycznym.
Wreszcie, mimo że nadal musisz radzić sobie z tą samą złożonością, nie zyskujesz wszystkich korzyści płynących z pisania statycznego podczas uruchamiania programu:
Programy dla początkujących są małe i nie mają wielu ścieżek kodu (więc nie musisz się tak bardzo przejmować błędami typu w rzadko używanych fragmentach kodu)
Programy dla początkujących nie używają interfejsów i funkcji wysokiego poziomu, więc nie ma też wiele do zyskania w dziale „Użyj systemu typów do zaprojektowania programu”.
źródło
Jest jedna bardzo, bardzo , bardzo ważna rzecz w Pythonie dla początkujących programistów, o której wszyscy zdają się przeoczyć: Wymuszanie prawidłowego wcięcia.
Jak niektórzy inni komentatorzy, uczyłem początkujących przez kilka lat. Niepokojąco powszechne było oglądanie takich rzeczy:
Teraz wyobraź sobie tę okropną niespójność w około stu liniach kodu. W przypadku niektórych studentów tak wyglądał cały ich projekt.
Nie mam pojęcia, jak im się to udało i nigdy im to nie przeszkadzało. Za każdym razem, gdy pytałem, ich odpowiedź brzmiała: „Cóż, to nie ma znaczenia, ponieważ kompilator to rozwiąże”. Nawet kiedy pokazuję im oczywisty błąd poprzez naprawienie wcięcia, nadal nie mają pojęcia.
W Pythonie ten typ wcięcia jest po prostu nieprawidłowy. Są zmuszeni użyć czegoś, co najmniej czytelnego, nawet jeśli jest to trochę niespójne. Daje im to nawyk, który, miejmy nadzieję, będzie kontynuowany, gdy w końcu nauczą się innego języka.
źródło
Python jest świetnym pierwszym językiem z większości powodów wymienionych powyżej. W szczególności jednym z wymagań pierwszego języka jest delikatna krzywa uczenia się, którą ma Python. Na przykład nie musisz wiedzieć wszystkiego o klasach. Pod tym względem przypomina trochę Basic, od którego wielu z nas zaczęło.
Jedną z rzeczy, która nie została do tej pory podkreślona, jest to, że wiele języków ma łagodną krzywą uczenia się, ale szybko wpada w ścianę z cegieł, gdy próbuje robić bardziej zaawansowane rzeczy. Old-school Basic jest tego dobrym przykładem. Dzięki Python możesz dostać się do bardzo zaawansowanych rzeczy, zanim poczujesz, że jakiś inny język może być lepszym wyborem.
W tym czasie początkujący jest w stanie zrozumieć więcej na temat wyborów i kompromisów i jest gotowy na C / C ++, Java, Assembler, Prolog, Lisp itp. W rzeczywistości Lisp może być dobrym pierwszym językiem, chociaż jest dość surowy !
źródło
Kluczowym problemem z Pythonem jako pierwszym językiem jest dynamiczne pisanie i brak deklaracji zmiennych. IMHO to jedyny poważny problem z językiem.
Proste dodanie wiersza z informacją, że mam zamiar przechowywać tylko ciąg znaków w zmiennej foo, pozwala programistom, środowisku programistycznemu, językowi (i „profesjonalnemu kodowi” biednego głupca, który musi przyjść na zimno i wesprzeć go później) pracować razem. Dla zwykłych programistów i początkujących nie ma sensu używać zmiennej dla więcej niż jednego typu. W rzadkich przypadkach, gdy ma sens użycie jawnego typu var / object, który umożliwia dynamiczne pisanie, jest całkiem OK.
źródło