Jaki wpływ mają języki skryptowe na młodszych programistów? [Zamknięte]

18

Rozmawiałem kiedyś z jednym z moich nauczycieli.

Dyskutowaliśmy o wpływie prostszych języków skryptowych (takich jak Python lub Ruby) na młodszych programistów.

Twierdził, że języki skryptowe wywołują niechlujne techniki kodowania, ponieważ początkujący nie rozumieją, co się dzieje „pod maską”. Przytoczył także inne przykłady tego, jak języki skryptowe często powodują, że programiści zaniedbują obawy dotyczące wydajności, zarządzania pamięcią, złożoności operacyjnej itp.

Argumentowałem, że języki niższego poziomu mogą być dla niektórych za dużo i mogą się poddać, zanim rozwiną pasję do programowania. Kiedy zacząłem uczyć się pierwszego języka programowania (C), zacząłem korzystać ze wskazówek i poddałem się, ponieważ koncepcje były zbyt trudne (na swoją obronę miałem zaledwie 14 lat). Gdyby nie Java, nie zostałbym programistą! Gdybym zaczął od prostszego języka, a potem kopał głęboko, wydaje mi się, że nie poddałbym się i nauczyłbym tak samo, jak zaczynałem od C.

Klasa zakończyła się, zanim obie strony zostały w pełni zbadane.


Do tego momentu głosiłem, że początkujący powinni zacząć od języków skryptowych, a następnie kopać głęboko; ale po tej dyskusji zacząłem się zastanawiać, czy to błędne myślenie.

Jaki wpływ mają języki skryptowe na młodszych programistów?

joe_coolish
źródło
8
Nie chcę być dupkiem, ale gramatyka.quickanddirtytips.com/affect-versus-effect.aspx
Singletoned
4
Nauczyłem się jeździć samochodem z automatyczną skrzynią biegów. Później dostałem taki z manualną skrzynią biegów. Nauczenie się zajęło trochę czasu i miałem szczęście, że nie musiałem uczyć się sprzęgła i zmiany biegów wraz ze wszystkim innym.
David Thornley,
2
@Singletoned: True. Jakoś jednak musiałem pomyśleć o xkcd.com/326 ...
2
Sprawiło,
P.Brian.Mackey
4
Osobiście uważam, że nienaturalne jest nauczyć się programować na niskim, a potem na wysokim poziomie. Uczymy się czołgać, potem chodzić, biegać, rozmawiać, a potem pisać. Nie jestem pewien, jaka jest logika odwrócenia naturalnego porządku na studiach. Zwykle słyszę, jak ludzie stwierdzają, że „ponieważ trudno było mi się uczyć, to musiało być trudne”. Nawet Joel to powiedział. Myślę, że cykl nigdy się nie skończy.
P.Brian.Mackey

Odpowiedzi:

26

Nie zgadzam się. Po pierwsze, języki skryptowe mają wyższy poziom abstrakcji i nie ma w tym nic złego. Na początku próbuje się nauczyć zasad. Właściwie powiedziałbym, że wybór języka niższego poziomu może zachęcać do złego kodowania, ponieważ trzeba zrozumieć kilka szczegółów, zanim będzie można je zrozumieć. Zamiast prostszego języka można zacząć pisać czysty i zwięzły kod od samego początku.

Po drugie, trzeba się wiele nauczyć w tych językach. Jeśli chodzi o naukę języka, powiedziałbym, że C jest łatwiejszy niż Python. Trzeba radzić sobie ze wskaźnikami lub dbać o łańcuchy, ale w Pythonie jest wiele innych pojęć. Rozumienie, orientacja obiektu, odbicie, metody magiczne, pierwszorzędne funkcje, lambdy, iteratory i generatory, metaklasy: wszystko to jest częścią języka.

Myślę, że począwszy od Pythona pozwala dowiedzieć się znacznie więcej o programowaniu i łagodniejszej krzywej uczenia się. Język niższego poziomu może mieć mniej abstrakcji - więc mniej ogólnych pojęć do nauki - i przytłoczyć początkujących szczegółami, bez których może chcieć się obejść.

Andrea
źródło
1
+1, choć nie sądzę, żeby C było łatwiejsze do nauczenia się niż Python w jakimkolwiek sensie. Być może jest mniej koncepcji do nauczenia się ogólnie, ale dowiesz się więcej w tym samym czasie dzięki Pythonowi. I oczywiście, jeśli C jest zbyt łatwe, zawsze jest C ++, który uczy złożoności zarówno języków wysokiego, jak i niskiego poziomu. ;)
Martin
+1, tak myślałem! Chciałbym przeczytać to przed zajęciami :)
joe_coolish 21.04. O
22

Nie ma znaczenia od czego zaczniesz. Ma znaczenie, gdzie idziesz po uruchomieniu.

BASIC może nie jest najbardziej eleganckim językiem na świecie, ale obejmuje podstawy programowania proceduralnego i to wystarczy, aby zacząć.

Zacząłem od BASIC. I nie zatrzymać się tam.

Steven A. Lowe
źródło
+1 za idealną odpowiedź - zwięźle pokazując, jak niewłaściwe było pierwotne pytanie! (Zupełnie przypadek, że zacząłem też od BASIC ;-)
Péter Török
5
Dziwi mnie, ilu ludzi tam zostaje ..: o /
Gary Willoughby
1
Doskonała odpowiedź. Krótko, dokładnie i na temat. Zacząłem też od BASIC-a.
Michael Riley - AKA Gunny
11

Twój nauczyciel ma rację, tyle że zakłada, że ​​jego konsekwencje są złe.

Jeśli patrzysz na naukę języków jako działalność czysto akademicką, aby dowiedzieć się, jak działają komputery, to ma rację. Jeśli spojrzysz na nie jako sposób na załatwienie sprawy, masz rację.

Singletoned
źródło
6
Nie zgadzam się z tobą. Konsekwencje złe, ponieważ konsekwencją jest ignorancja. Oznacza to, że w końcu coś się zepsuje, a problem będzie na niższym poziomie abstrakcji niż rozumiesz, więc nie będziesz miał pojęcia, jak to naprawić. To zawsze jest zła rzecz.
Mason Wheeler,
6
Muszę się z tobą zgodzić. Konsekwencją niewiedzy o tym, co dzieje się pod maską, jest ogromna prostota i bezpośredniość ekspresji bez obaw o niuanse sprzętowe. Niższe poziomy abstrakcji są przeznaczone dla projektantów języków, a nie twórców aplikacji.
S.Lott,
1
@Mason: Oczywiście. Kiedyś zarobiłem bardzo dużą sumę pieniędzy, oszczędzając oceny zespołu programistów, którzy nie mieli pojęcia, co naprawdę dzieje się pod maską, a więc nie mogli sprawić, by ich system produkcyjny działał dobrze lub działał niezawodnie. (Raz, ponieważ tego rodzaju praca jest do bani. Życie jest za krótkie!)
William Pietri
1
@Mason - Zgadzam się z tym, co powiedziałeś, że posiadanie tej wiedzy jest ważne, jeśli zamierzasz programować profesjonalnie. Uważam, że moja wiedza na temat wskaźników, struktur dyskretnych i rachunku lambda jest niezwykle cenna. Utknąłem w zespołach, w których członkowie mojego zespołu nie mieli tych umiejętności i ostatecznie stworzyli zbyt skomplikowany lub bardzo błędny kod. tylko dlatego, że nie wiedzieli lepiej. Wydaje się, że czasami uczelnie karmią studentów CS zbyt dużą ilością mleka i niewystarczającej ilości mięsa, ale z drugiej strony, jeśli karmią mięso początkującym programistom, ryzykują ich wypadnięcie.
joe_coolish 21.04.11
1
@Joe: Według Joela, rezygnacja z tych, którzy nie mogą sobie z tym poradzić, jest najważniejsza. Jako nie tylko programista, ale także użytkownik komputera , który regularnie pracuje ze straszliwymi programami, które, jak mogę przypuszczać, zostały stworzone przez niekompetentnych programistów, naprawdę chciałbym, aby bit „zmuszenie ich do rezygnacji” był bardziej udany!
Mason Wheeler,
5

Myślę, że „język skryptowy” to okropne słowo, które jest bardzo nieaktualne lub w najlepszym wypadku pasuje do klasy języków specyficznych dla domeny. Twój nauczyciel po prostu dopasowuje wszystko, o czym wyraźnie nie ma wystarczającego zrozumienia, do osi zła.

Rozsądnym rozróżnieniem jest między językami wysokiego poziomu a językami niskiego poziomu lub między statycznymi i dynamicznymi typami języków, które są naprawdę ortogonalne.

Asembler jest dynamicznie typowany na niskim poziomie (jeśli mówienie o typach ma w ogóle sens), C jest statycznie typowany na niskim poziomie, Ruby jest dynamicznie typowany na wysokim poziomie, Haskell jest typowany na wysokim poziomie. Java nie jest statycznie typowana na wysokim, ani na niskim poziomie, C ++ jest statycznie typowana na wysokim i niskim poziomie. I tak dalej.

Dyskusja może dotyczyć tylko tego, które paradygmaty są bardziej odpowiednie dla programisty na poziomie podstawowym.
Jestem przekonany, że programowanie na niskim poziomie prawdopodobnie nie jest jednym. Być może kiedyś na początku lat 90. można było uzyskać interesujące wyniki w rozsądnym czasie.
Ale programowanie napędzane jest pasją. Namiętność karmi się nagrodami. Dlatego programiści na poziomie podstawowym powinni zacząć od narzędzi do wynagradzania. Narzędzia niskiego poziomu nie są już satysfakcjonujące, ponieważ istnieje ogromne morze narzędzi wysokiego poziomu, które zapewniają ten sam rezultat w ułamku czasu.

Ludzkie myślenie jest abstrakcyjne. Kiedy uczymy się rozumieć świat, robimy to poprzez bardzo gruboziarniste abstrakcje i w miarę potrzeb wchodzimy w szczegóły.
Aby dziecko zrozumiało swoje otoczenie, nie nauczysz go matematyki, fizyki, chemii, biologii, historii, socjologii i filozofii. Dajesz mu bardzo prosty model świata, z którym sobie poradzisz, i sam z siebie długo będzie chciał go przekroczyć, bez końca zadając ci pytania, gdy jesteś młody, a później całkowicie negując swój autorytet.

Tak myślimy. Ludzki mózg może przetwarzać jedynie ograniczone ilości „jednostek” informacji, ale stopień abstrakcyjności nie ma większego znaczenia przy kwantyzacji informacji. Na przykład: odczytanie wyrażenia „34 * 75” jest dla nas prostsze niż jego obliczenie, podczas gdy w przypadku komputerów jest odwrotnie. Rozpoznanie (a tym samym streszczenie) wiązki czarnych pikseli w krętą linię, którą następnie można rozpoznać (a tym samym po raz kolejny wyodrębnić) jako pojedynczą cyfrę, jest ogromnym nakładem pracy.
Moja babcia rozumie pomysł otwarcia pliku. Jednak nie ma zrozumienia poniżej tego poziomu. I szczerze mówiąc, gdyby musiała się tego nauczyć, najpierw badając wewnętrzne działanie sprzętu i systemu operacyjnego, a co nie, nigdy by się tam nie dostała.

Jest wielu ludzi, którzy nadmiernie komplikują rzeczy, ponieważ nigdy nie nauczyli się myśleć w kategoriach jasnych, zwięzłych, a tym samym eleganckich rozwiązań, ale spędzali zbyt dużo czasu na zadręczaniu się wymiennymi szczegółami niskiego poziomu i rozwiązywaniu problemów z nimi. Uczenie ludzi myślenia jak komputer jest najgorszym możliwym podejściem do programowania.
Wartość programowania polega na znalezieniu rozwiązania problemu. Wyrażanie go jako kodu jest bardziej nudnym, mechanicznym zadaniem i powinno być po prostu wykonane przy użyciu odpowiednich narzędzi.

Och, i nie martw się, że nie zrozumiałeś wskaźników. Miałem mniej więcej ten sam problem w tym samym wieku. Problemem jest także brak abstrakcji. Klasycznie dowiadujesz się o wskaźnikach z jakiejś książki C i gdy próbujesz je zrozumieć, idzie to w parze z alokacją pamięci, a więc z pamięcią stosu i sterty i tak dalej. Abstrakcyjną koncepcją wskaźników jest pośrednictwo. Zmienna, która przechowuje indeks w określonej tablicy, jest po prostu (w rzeczywistości jest taka sama w C, gdzie konkretna tablica jest twoją przestrzenią adresową) i do tego nie potrzebujesz arytmetyki wskaźnika.
Ma to jedynie zilustrować, że wybór wysokiego poziomu abstrakcji znacznie ułatwia zrozumienie.

EDYCJA: a jeśli chodzi o pisanie, wolę języki pisane statycznie. I myślę, że programiści na poziomie podstawowym powinni jasno zrozumieć pojęcie typów (które jest abstrakcyjne).

back2dos
źródło
3

W Pythonie nie ma nic prostego. Spójrz na Unicode i metaprogramowanie.

Christopher Mahan
źródło
Zgadzam się, że Python może być bardzo złożony i BARDZO potężny. Ale podstawy (manipulowanie ciągami, manipulacja tablicami itp.) Są znacznie łatwiejsze w Pythonie niż w C.
joe_coolish
1
Python jest bardzo prosty na początek, a wiele codziennych zadań jest o rząd wielkości prostszych niż np. W językach systemowych. Nie, język jako całość, jego krwawe szczegóły i zaawansowane funkcje nie są proste (dotyczy to wszystkich nie-zabawkowych języków). Ale to nie było pytanie.
1
Dlaczego więc moja metoda if searchstring.lower () w filecontent.lower (): nie działa? z powodu bom w pliku UTF-16LE sql w tfs na Windowsie z Python2.7. Nie było fajnie. sprawiło, że działało. zajęło kilka godzin. string.find () też nie działał ... Argghhh!
Christopher Mahan
1
W jaki sposób Unicode jest prostszy w obsłudze w C?
dan04
3

Widzę inny, znacznie głębszy problem.

Języki Unityped nie zmuszają do zwracania uwagi na typy, do myślenia w typach. Jest to dobre i dobre, o ile mam małe skrypty z niektórymi ciągami znaków i liczbami, które są konwertowane na siebie bez zauważania. Ale nadejdzie dzień, kiedy to się zepsuje. Nagle program się zepsuje, a każda szybka poprawka spowoduje jego ponowne uszkodzenie.

Lub początkujący programista zorientuje się, że będzie potrzebował tupę list zamiast listy krotek, ale nie będzie miał najmniejszego pojęcia „jak to zrobić” i będzie zadawał pytania na temat przepełnienia stosu, które pokazują, że jest to absolutna bezradność.

Ingo
źródło
6
Ale Python i Ruby są mocno wpisane. Jest to ortogonalne do dynamicznego pisania. Ciągi i liczby nie są domyślnie konwertowane na siebie.
dsimcha
3
@dsimcha: Tak - A jak to obala to, co powiedział @Ingo?
Jim G.
1
Ponieważ to pytanie dotyczy głównie Ruby i Pythona. Myślałem, że sugeruje, iż myśli, że Ruby i Python są słabo wpisani, co jest częstym nieporozumieniem.
dsimcha
1
@ davidk01 - o to mi chodzi: wartości mają typy, czy tego chcemy, czy nie. Ale w dynamicznie wpisywanych (jeśli ten termin bardziej ci się podoba) językach, zmienne nie. Zamiast tego sprawdzanie typu odbywa się w czasie wykonywania w celu rozróżnienia wielu wariantów Unitype.
Ingo
2
@Ingo: Przynajmniej mogłem znaleźć użytkowników Common Lisp, którzy uważali, że brak pisania statycznego jest zaletą (w rzeczywistości opcjonalne pisanie statyczne, przydatne do sprawdzania błędów lub w celu zwiększenia wydajności), ponieważ przyspieszyło rozwój i błędy, których można by uniknąć podczas pisania statycznego, nie okazały się trudne do znalezienia i naprawy w praktyce. Tak czy inaczej nie widziałem nic poza opiniami.
David Thornley,
2

Nadal twierdzę, że formalne instrukcje i mentoring są znacznie ważniejsze niż wybór języka w jakości kodu dla początkujących. Jednak gdybym musiał wybrać pierwszy język dla początkujących, wybrałbym python dla programistów samouków i C ++ do nauczania na studiach.

Powodem są formalne instrukcje, które możesz rozpocząć od małych, trywialnych programów, aby stworzyć solidne podstawy teoretyczne na wiele lat, zanim będziesz musiał zrobić coś pożytecznego. Myślę, że kolejność jest idealna, jeśli możesz sobie pozwolić na czas, a C ++ zapewnia dużą pomoc w przypadku błędów kompilatora i błędów segmentacji między wykładami, aby poinformować cię, jeśli nie rozumiesz podstaw.

Niektóre z tych podstaw są po prostu bardzo trudne do nauczenia, jeśli jesteś samoukiem, dopóki nie zdobędziesz doświadczenia. Ponadto zazwyczaj musisz jak najszybciej uczynić coś użytecznym i możesz zdobyć teoretyczne podstawy w razie potrzeby, chociaż ryzykujesz, że nigdy nie nauczysz się więcej niż absolutne minimum przy takim podejściu. Dlatego w takim przypadku polecam język taki jak python.

Karl Bielefeldt
źródło
2

Widzieliśmy to na odwrót na studiach i myślę, że jest to przydatne. * Zaczęliśmy na niskim poziomie. Wskaźniki, zarządzanie pamięcią, tablice znaków ... Tak, zaczęliśmy od C. To samo z algorytmami: najpierw zaimplementuj połączoną listę, tablicę skrótów, drzewo ... A dopiero potem użyj standardowych bibliotek.

Następnie przeszliśmy do bardziej zaawansowanych języków, takich jak Java, C # lub perl. Ale z korzyścią wiedząc, co dzieje się pod pasem.

Chociaż to działa, uważam, że przejście od języków skryptowych do języka niższego poziomu jest również w porządku. Znajomość języka wysokiego i niskiego poziomu zapewnia łatwość korzystania z języka wysokiego poziomu przy jednoczesnym zrozumieniu, co się dzieje. Kolejność ich uczenia się jest mniej ważna.

Carra
źródło
1

Języki skryptowe nie powodują, że programiści są niechlujni. Brak jasności w zrozumieniu problematycznej dziedziny (np. Firmy obsługiwanej przez program) jest przyczyną niechlujstwa.

Jak mówi stare powiedzenie: „Możesz pisać COBOL w dowolnym języku”. Chociaż podejrzewam, że gdy każdy typ danych wygląda tak samo , trudniej jest dostrzec, jakie są zasadnicze aspekty Twojego programu, co jest główną cechą COBOL- izacja.

Farley Knight
źródło
1
Wypróbuj przed podejrzeniem. Główną różnicą jest to, że nie obchodzi gdzie jest to Foolub Barczy coś zupełnie innego, tak długo jak to możliwe .frobnicate(), że tak czy inaczej. Bez wyraźnych interfejsów.
Znam dość dynamiczne języki, ponieważ moją codzienną pracą jest Ruby on Rails. I tak, to ważna konwencja w dynamicznej społeczności językowej. Zasadniczo nazywa się to „pisaniem kaczek”. W literaturze badawczej są one nazywane typami strukturalnymi, a istnieją pewne konwencje składniowe, które mogą pokazać, jak wygląda „typ kwakylowalny”. Ponadto istnieją systemy typów, które mogą je rozpoznać i sprawdzić, czy Twój program traktuje kaczki z uprzejmością.
Farley Knight
Znam typy strukturalne i uważam je za całkiem fajny pomysł. Ale ponieważ nie ma ani jednego dojrzałego, zdalnie szeroko używanego języka (baza użytkowników na poziomie O'Caml byłaby dobrym początkiem), który ich używa, nie uważam ich za praktyczną alternatywę dla dynamicznego pisania. Smutne, ale fakt.
Powszechnie używane języki tego nie robią, ale to nie powstrzymuje cię przed przywiązaniem własnego systemu czcionek do powszechnie używanego. Jestem pewien, że widziałeś artykuły na temat wnioskowania na temat języków dynamicznych.
Farley Knight,
Ponownie nie uważam, że coś, z czego korzystam ja i facet z sąsiedztwa, jest praktyczną alternatywą. Programista potrzebuje takich rzeczy, jak biblioteki, stabilna składnia, oprzyrządowanie itp.
1

Uważam, że języki skryptowe mają zachęcić technik niechlujstwa. (Zauważ, że nie oznacza to, że języki są złe , po prostu trudno jest utrzymywać duże bazy kodów w tych językach). Myślę jednak, że z innych powodów niż inne odpowiedzi tutaj.

Myślę, że używając dowolnego języka programista musi posiadać podstawową wiedzę na temat programowania jako całości. Nigdzie nie będą skuteczne, jeśli nie zrozumieją takich pojęć, jak wektory, drzewa i tabele skrótów. Nie muszą koniecznie być w stanie wdrożyć tych rzeczy, ale muszą znać ich cechy.

Myślę, że w grę wchodzi niechlujność, ale nie umiejętność programowania, ale kiedy trzeba stworzyć komponenty do ponownego użycia. Języki te nie wymagają definiowania dobrych interfejsów między jednostkami kodu lub mechanizmów wymuszających na bibliotekach ograniczenia na swoich klientach. Nie jest niemożliwe tworzenie dobrych komponentów do ponownego użycia w takich językach, jest to po prostu znacznie trudniejsze.

Języki skryptowe przemawiają do początkującego programisty, ponieważ pozwalają im wykonywać więcej „jednorazowych” czynności w krótszym czasie, ale kiedy ci sami programiści zaczynają programować konserwację, często szybko mają problemy z tymi językami.

Nie twierdzę, że języki skryptowe są złe - wręcz przeciwnie. Ale utrudniają utrzymanie ogromnych (kilku milionów linii) baz kodowych (co jest jednym z powodów, dla których nie widzisz takich baz kodowych w językach skryptowych). Kiedy potrzebujesz stosunkowo niewielkich lub jednorazowych rozwiązań, pozwalają one osiągnąć znacznie więcej w krótszym czasie i mniej kodu (a mniej kodu jest prawie zawsze lepsze).

Pamiętaj tylko, że żadne narzędzie nie jest najlepsze do każdej pracy. Wybierz narzędzie najbardziej odpowiednie do sytuacji. Dotyczy to języków programowania, tak jak w przypadku każdego narzędzia.

Billy ONeal
źródło
0

Jestem z twoim nauczycielem, ale także z @Singletoned, kiedy mówi, że twój nauczyciel przyjmuje konsekwencje (np. Brak wiedzy o wydajności) są złe.

Myślę, że rozpoczęcie od C jest lepsze niż rozpoczęcie od języków skryptowych. Jako nauczyciel skoncentrowałbym się na tej całej architekturze von Neumanna (ALU, rejestry, pamięć, porty I / O, ...), przechodząc od razu do wskaźników (przepraszam, to naprawdę kluczowa koncepcja [nie wypuszczanie referencje (tj. wskaźniki) w językach VM są głównym źródłem wycieków pamięci]), uderzają w niektóre struktury danych (drzewo, lista połączona, tablica skrótów 1 ), a następnie ... podnoszą poziom abstrakcji do czegoś innego (OO, programowanie funkcjonalne, coś - silne zasady pisania statycznego , yo \ m /, więc nie ma "języków skryptowych"> :().

1 Hmm, może w końcu zgadzam się z nauczycielem w kwestii wydajności.

JohnL4
źródło
Niedbałe programowanie jest źródłem wycieków pamięci i nie trzeba wiele uczyć ludzi, aby śledzić zasoby, takie jak uchwyty plików. Istnieje niezliczona liczba programów C z przeciekami pamięci, więc nie jestem pewien, do czego zmierzasz, ucząc ludzi o wskaźnikach tak szybko, jak to możliwe.
davidk01
To prawda, ale ... (a) niezrozumienie podstaw prowadzi do jakiegoś złego kodu (poprzez hakowanie, aż do poprawnego lub niechlujnego programowania), i (b) starałem się uzasadnić, dlaczego wskaźniki są nadal istotne, a nie twierdzenie, że C jest lepszy niż języki zbierane przez śmieci pod względem wycieków pamięci. Celem jest jak
najszybsze
0

Myślę, że najlepiej zacząć od języka modułowego, a następnie przejść do bardziej skomplikowanych rzeczy. W moich czasach zaczęliśmy od Pascala i COBOL-a i próbowaliśmy zrozumieć, co oznaczają podprogramy, zmienne sterujące przepływem itp. Dopiero po zapoznaniu się z Pascalem miałem nawet ochotę przejść na języki takie jak C / C ++ i nauczyć się wszystkich innych technik, które są raczej dodatkiem do młodszego programisty.

Gaurav Sehgal
źródło
0

Oboje macie rację.

Języki skryptowe zdecydowanie utrudniają początkującym programistom zrozumienie, co naprawdę się dzieje. (Podobnie jak bazy danych, frameworki i biblioteki. Och, a także przeglądarki, serwery, sieci i systemy plików.) Kiedy przeprowadzam wywiady z młodszymi programistami, często jestem oszołomiony, jak mało wiedzą o tym, jak naprawdę działają komputery i jak bardzo są podatni na ładunki -kulturowe programowanie.

Z drugiej strony, najważniejsza rzecz, której szukam w wywiadach, nie jest doskonałym zrozumieniem, to, że uwielbiają tworzyć. Kiedy zaczynałem, komputer robiąc cokolwiek robił wrażenie, więc moje małe Apple Basic i asembler 6502 wydawały mi się naprawdę niesamowite. Ale w dzisiejszych czasach komputery robią wiele niesamowitych rzeczy, więc myślę, że ludzie mogą zaczynać na dość wysokim poziomie, jeśli to jest to, czego potrzebują, aby się uzależnić.

Zasadniczo myślę, że można zacząć od płytkiego końca basenu, o ile w końcu uda ci się znaleźć głębsze wody.

William Pietri
źródło
0

Po pierwsze, zdecydowanie zaczynam od języka o wyższym poziomie abstrakcji. Obecnie polecam Python. Najważniejszym powodem wyboru języka skryptowego jako pierwszego języka jest to, że można łatwo połączyć coś, co działa. Jak Joe wspomina w swoim pytaniu, najważniejszą rzeczą podczas zostania programistą jest to, że masz motywację, aby iść dalej i kopać głębiej. Motywację tę uzyskuje się, gdy można tworzyć działające i użyteczne oprogramowanie.

Oprócz kwestii związanych ze zrozumieniem abstrakcji (wysoki poziom) i zrozumieniem podstawowej implementacji (niski poziom) brakuje trzeciego punktu. Aby być dobrym programistą w dzisiejszych czasach, z pewnością musisz opanować oba powyższe punkty. Ponadto dla Twojej kompetencji niezwykle ważne jest, aby stale patrzeć na nowe technologie i punkty widzenia. Bez względu na to, od którego poziomu abstrakcji zaczynasz, musisz stale doskonalić się i kwestionować swoje obecne metody.

Od samego początku należy wyjaśnić, że języki programowania są jedynie narzędziami do wykonania zadania. Bardzo ważne jest, aby wybrać odpowiednie narzędzie do konkretnego zadania. Myślę, że dla początkującego programisty język skryptowy wysokiego poziomu pomoże w podkreśleniu tego punktu. Język wyższego poziomu da szerszą perspektywę i zmotywuje programistę do głębszego zagłębiania się.


źródło