Dlaczego Python jest zalecany jako podstawowy język programowania? [Zamknięte]

16

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?

JohnDoDo
źródło
17
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ą ...
Péter Török
@ Péter Török: Tak i zabiera całą stopę (c ++: D). Powiedziałem „bardziej statyczny”, próbując uniknąć wojen płomieni z powodu czegoś takiego… Nie wiem… Java?!?!…, Którego wszyscy zdają się nienawidzić, jak się myśli w szkole / na uniwersytetach, a ludzie mają trochę przeraża go ...
JohnDoDo,
1
Myślę, że C ++ jest lepszym językiem początkowym, ponieważ pomógł mi lepiej zrozumieć rzeczy w innych językach.
systemovich,
1
Mam swoje wołowiny z pythonem jako językiem początkowym po ukończeniu pierwszej klasy programowania, która go używała. Studenci często nie rozumieli „typów” i zabijały ich zależności od białych znaków. Mieli też trudności ze zrozumieniem obiektów z tym „własnym” odniesieniem do zakłóconej działalności OO. Ma to swoje zalety, ale zdecydowanie ma też swoich przeciwników.
Rig
2
@MahmoudHossam Zgadzam się. Właśnie podkreślałem niektóre najważniejsze kwestie z mojego doświadczenia. Java, C #, Lisp itp. Mają swoje problemy. To były tylko główne problemy, które napotkałem podczas nauczania języka Python dla programistów po raz pierwszy.
Rig

Odpowiedzi:

30

IMO, najważniejsze punkty, które mówią w języku Python jako językiem podstawowym to:

  • ma płytką krzywą uczenia się - przejście od niczego do „Hello world” jest znacznie szybsze niż w większości innych języków
  • jest intuicyjny - składnia została zaprojektowana zgodnie z zasadą najmniejszego zaskoczenia i jest ogólnie bardzo spójna (niestety standardowe biblioteki nie zawsze zachowują tę spójność)
  • wymaga bardzo małej liczby elementów : typowy „Hello world” to jeden wiersz kodu, a proste programy można pisać bez dodatkowego szumu tła, który należy wyjaśnić (np. słowa kluczowe deklaracji funkcji, instrukcje importu, konstrukcje klas, dyrektywy preprocesora, itp.)
  • istnieją doskonałe, proste narzędzia do pracy z kodem Pythona, zwłaszcza interaktywny interpreter; nie musisz uczyć się systemu kompilacji, IDE, specjalnego edytora tekstu ani niczego innego, aby zacząć korzystać z Pythona - wystarczy wiersz poleceń, interaktywny edytor i prosty edytor tekstu
  • korzysta z dynamicznego pisania , ale w przeciwieństwie do wielu innych języków z dynamicznym pisaniem , typy są przezroczyste, a pułapki związane z typem są rzadkie
tdammers
źródło
Chcę tylko podkreślić intuicyjność języka. Widziałem, że ludzie z 0 doświadczeniem w programowaniu szybko uczą się języka Python. Wynika to głównie z faktu, że składnia / gramatyka są bardzo zbliżone do mówionego angielskiego.
Stephen Gross
12
W ostatnim punkcie: ludzie często mieszają pisanie dynamiczne ze słabym pisaniem. Python jest dynamicznie typowany (typy powiązane z wartościami zamiast zmiennych), ale także silnie typowany (więc programy zawieszają się zamiast cicho połykają błędy konwersji)
hugomg
@missingo I sekunda - Eagle eyes you have;)
yati sagade
@missingno: Znam różnicę. Przykładem nieprzezroczystych typów są klucze tablicowe PHP - tablice zachowują się inaczej dla kluczy całkowitych niż dla jakiegokolwiek innego typu; jeśli dodasz dwie wystarczająco duże liczby całkowite, możesz otrzymać liczbę zmiennoprzecinkową. I to tylko jeden przykład - zwłaszcza PHP i javascript (dwa najpopularniejsze języki dynamiczne w tworzeniu stron internetowych) są pełne niejasnych przypadków pisania na klawiaturze.
tdammers,
Sądząc z twojego komentarza, „typy są przejrzyste” oznacza, że ​​zasady rządzące typami są łatwe do zrozumienia? Co dokładnie chciałeś powiedzieć?
phant0m
8

Witaj świecie w Pythonie:

 print "Hi there"

witaj świecie w Javie:

 class HelloWorldApp {
  public static void main(String[] args) {
    System.out.println("Hello World!"); // Display the string.
    }
  }

witaj świecie w C:

  #include<stdio.h>
  int main(int argc, char** argv)
  {
    printf("Hello World");
   }

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.

kamieniste
źródło
15
Zapomniałeś „return 0;” instrukcja w implementacji C :) Ostrzeżenie kompilatora!
Stephen Gross
2
Właśnie dlatego BASIC istniał w pierwszej kolejności. 10 DRUKUJ „Witaj świecie!” 20 KONIEC Aby uzyskać dodatkowe uznanie, program Python kończy się niepowodzeniem „Czy powiedziano„ Hello World! ”? test jednostkowy :-)
Ross Patterson
3
To samo na F #: printfn „Hello World!”. Tak, F # jest dobry dla początkujących!
Den
7

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 thisw 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.

Daniel Roseman
źródło
1
Tak, ale jeśli chodzi o te „prywatne” części, ponieważ masz do nich dostęp, możesz ulec pokusie zhakowania niektórych obejść / skrótów wokół nich, nie wiedząc lepiej.
JohnDoDo,
@JohnDoDo Jaka to różnica, jeśli w C # lub Javie zdecydowałem się przekonwertować privatepola, publicaby hackować? BTW, w Pythonie możesz poprzedzić właściwość znakiem podkreślenia, aby ustawić ją jako prywatną (choć nie tak naprawdę ukrytą)
OnesimusUnbound
4

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:

  • Wiele bibliotek, które robią wiele rzeczy
  • Elastyczność w nauczaniu zarówno technik programowania obiektowego, jak i funkcjonalnego, bez powodowania, że ​​jeden z nich zmuszony jest wpasować się w język zaprojektowany tak, by robić to samo.
unholysampler
źródło
3
Przeciwdziałanie: Nauczanie dziecka, jak nie bawić się ogniem. 1) Możesz z nim porozmawiać, wyjaśnić, co to jest ogień i co robi ogień, pokazać slajdy PowerPoint cokolwiek .. lub 2) pozwolić mu bawić się ogniem i zostać spalonym. Druga metoda jest rzeczywiście znacznie bardziej wydajna. Interesuje mnie możliwość podpalenia domu, a nawet polubienia go i zostania piromanem, ponieważ nie podjęto żadnych środków bezpieczeństwa. Niby ekstremalna sytuacja, ale tak naprawdę nie jest w stanie wyrazić tego słowami.
JohnDoDo,
1
@JohnDoDo - Więc pozwól mu się poparzyć ... to najlepsza szkoła, a kto nie został spalony na meczu jako dziecko? To go nie zabije ...
Wież
1
@JohnDoDo: To, że język pozwala bawić się ogniem, nie oznacza, że ​​nauczyciel nie wskazuje, że pożar jest bardzo niebezpieczny, i wyjaśnia, jak go uniknąć. Myślę, że drugą rzeczą, której brakuje, jest to, że ktoś nie jest przywiązany do języka. Po opanowaniu podstaw programowania mogą posługiwać się innym językiem, aby uczyć się większych pojęć (np. Nie palić budynku).
unholysampler,
3

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.

dsimcha
źródło
2

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.

Zniszczyć
źródło
1

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.

Koder
źródło
1

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:

  1. Typy są powiązane z wartościami, a nie zmiennymi. Jest to prawdopodobnie bardziej intuicyjne, ponieważ odzwierciedla przyczyny awarii programów.

  2. 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ć.

  3. 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.

  4. 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”.

hugomg
źródło
1

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:

#include <stdio.h>

int main(char *args[])
                                                                     {
   int A = 1, B = 1, C;
for (int X = 0;X < 20;X++)
{
   printf("%d\n", A);
C = B + A;
      A = B;  B = C;
}
        }

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.

Izkata
źródło
0

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 !

rzzzwilson
źródło
-1

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.

JohnC
źródło