Różne języki programowania i obszary ich zastosowania. Wykład w Yandex

Zalina 13 stycznia 2016 o 15:42

Różne języki programowania i obszary ich zastosowania. Wykład w Yandex

  • Blog firmowy Yandex,
  • Tworzenie stron internetowych,
  • Programowanie,
  • Programowanie przemysłowe

Nasz pierwszy post w tym roku postanowiliśmy poświęcić bardzo podstawowemu tematowi, na który wygłoszono wykład w Małym ShAD. Biorą w nim udział uczniowie szkół średnich zainteresowani technologią, stąd specyfika prezentacji – wykład będzie szczególnie interesujący dla tych, którzy dopiero zaczynają programować i zastanawiają się, w jakim kierunku się rozwijać. Dla nich Yandex ma kurs „Wprowadzenie do programowania (C++)”, który można odbyć na platformie Stepic.org.

Wykładowca Michaił Gustokaszyn jest kuratorem programów akademickich w Yandex, dyrektorem centrum konkursów studenckich na Wydziale Informatyki Wyższej Szkoły Ekonomicznej. Michaił wyszkolił dziesiątki zwycięzców i laureatów Ogólnorosyjskich Olimpiad Programowania.

Wykład opowiada o tym, jakie istnieją języki programowania, czym się różnią, jak się pojawiły oraz które są lepsze, a które gorsze. Na początku porozmawiamy trochę o historii języków - jak się pojawiły, jak ludzie zaczęli programować, jak wszystko się rozwinęło, co się dzieje teraz. W drugiej części dowiemy się, do jakich zadań nadaje się dany język, jak „wybrać swój ulubiony język i cieszyć się życiem”. Wykładowca opowie też trochę o tym, jak jego zdaniem można się tego wszystkiego nauczyć, a potem znaleźć pracę.

Jak zawsze, pod wycinkiem znajduje się szczegółowy zapis wykładu, dzięki czemu można poruszać się po jego treści.

Historia języków programowania

Zacznijmy od początku. Na początku komputery nie miały nawet klawiatur! Oznacza to, że wszystko było bardzo źle - nie mieli ani klawiatury, ani ekranu, mieli tylko karty dziurkowane (są to małe rzeczy z dziurami lub bez dziur). W związku z tym albo wbili tam szpilki, albo zaświecili tam światło. Jeśli jest dziura (lub odwrotnie) - oznaczało to zero lub jeden. A programy w tamtych czasach pisano przy użyciu kodów maszynowych - każda operacja wykonywana na komputerze (dodawanie, odejmowanie, niektóre bardziej złożone operacje) miała jakiś kod maszynowy. Ludzie sami wybierali ten kod ze znaku, wszelkiego rodzaju adresy w pamięci, wybijali to wszystko rękami i wkładali do czytnika - i wszystko zostało policzone. Oczywiście praca programisty prawdopodobnie nie była wtedy szczególnie interesująca - robienie dziur - a wraz z rozwojem nauki i technologii zaczęli oczywiście wymyślać różnego rodzaju bardziej „ciekawe” rzeczy. Na przykład asembler, który już nieco ułatwił życie.

No bo jak ułatwił życie? Zamiast pamiętać, że istnieje jakiś „magiczny” kod polecenia, używano wszelkiego rodzaju słów podobnych do „ludzkiego” angielskiego - niektóre dodaj lub mov - a następnie rejestry lub obszary pamięci, zmienne, z którymi były potrzebne zostały wymienione, wykonaj operacje. Ale jasne jest, że to w sumie wymagało też sporo wysiłku umysłowego, aby zapamiętać, w jakim rejestrze co mamy, gdzie jakie są zmienne i co się w ogóle dzieje. Dlaczego się to stało? Bo komputery były „głupie” i nie potrafiły zrozumieć niczego bardziej „inteligentnego”. Tak naprawdę składanie kodu maszynowego z asemblera również wymaga czasu i pamięci (w tamtym czasie oczywiście było jej niewiele).

Stopniowo stało się jasne, że opracowanie tak dużych, złożonych programów jest bardzo trudne. Produktywność programisty w tych zespołach była wyjątkowo niska - to znaczy pisał kilka linijek dziennie (znaczących), a każda linijka nie robiła nic specjalnego - jakieś proste operacje arytmetyczne. Ludzie chcieli, aby języki były znacznie bardziej podobne do języka ludzkiego, w szczególności do języka angielskiego, aby pisanie programów było łatwiejsze i wygodniejsze. I ruszamy!

Języki stare i martwe

Jednym z pierwszych języków był Fortran. Nawiasem mówiąc, wybijano go również na kartach dziurkowanych - były specjalne karty dziurkowane do wybijania programów Fortran. Ale jeśli weźmiesz teraz ten Fortran, moim zdaniem jest to nawet gdzieś pomiędzy 50-60. pojawił się - a jeśli spróbujesz coś na nim napisać, będziesz bardzo nieprzyjemny, gwarantuję ci! Współczesny Fortran wciąż żyje, ale jest zupełnie inny od tego, co było wcześniej.

Inne języki – teraz napiszę jedną rzecz, o której zapewne słyszeliście jedynie na różnych wydarzeniach, gdzie opowiada się o historii programowania – jest to COBOL. Był to język do pisania aplikacji biznesowych. Czym są aplikacje biznesowe? Niektóre transakcje w bankach, coś innego, wszystko to pisane było w Cobolu. Oczywiście nie jest to tutaj zbyt popularne. Myślę, że bardzo trudno będzie Ci znaleźć programistę Cobola w Moskwie. I gdzieś nie w Moskwie - z jeszcze większym trudem. Ale, co zaskakujące, zaledwie 10 lat temu ponad połowa całego kodu napisanego przez ludzkość została napisana w języku Cobol. I do dziś znaczna część wszystkich transakcji bankowych przeprowadzana jest za pomocą napisanych w nim programów (COBOL), a ludzie wciąż coś w nim piszą.

Istnieje również „zabawny” język, nazywał się Algol (68. wersja, która charakteryzuje rok jego powstania). Jest to język algorytmiczny. W sumie udało im się tam coś zrobić, ale teraz nie jesteśmy zbytnio zainteresowani tym, co potrafią. I na tym możemy zakończyć naszą wycieczkę w starożytność i w stosunkowo nieużywane języki i przejść do tego, co wciąż żyje (i aktywnie żyje).

Stare, ale żywe języki

Algol został wynaleziony w Europie, a Fortran był używany głównie w Stanach – nie ma dużych różnic. Jaki trend jest zauważalny? Na początku wszystko było skomplikowane i żeby pisać trzeba było być prawie inżynierem, elektrykiem, żeby wiedzieć gdzie są podłączone styki i coś jeszcze do programowania. Wtedy też trzeba było siedzieć z kartkami papieru i liczyć pamięć, opiekować się nią. I stopniowo wszystko stawało się prostsze, prostsze, prostsze, a potem jeszcze prostsze dla programisty - myśleć jak najmniej dla człowieka, a jak najwięcej robić automatycznie. Pod koniec tego okresu (wykładowca wskazuje na Algol i Kobol) zaczynają pojawiać się języki, które w pewnym sensie „przetrwały” do dziś.

PODSTAWOWY. Być może niektórzy nadal coś tam piszą, przynajmniej widziałem, że w niektórych instytucjach uczą w QBasic - jest tam niebieskie okienko, w którym jest napisane „1989”. Ogólnie rzecz biorąc, „żyje ze wszystkich sił”! Został wynaleziony jako język dla nieprogramistów. Programista był wówczas bardzo specjalistycznym zawodem. A tutaj mówią: „Mamy fajny język Basic i każda rozsądna osoba może w nim napisać program – to proste”. Powtórzę raz jeszcze, że BASIC i nowoczesny BASIC to ogromna różnica. Wszystkie te linie po 10, wszelkiego rodzaju GOTO i inne horrory - nie mają już nic wspólnego z nowoczesnym BASIC-iem, a nawet z BASICiem z 1989 roku mają z nim niewiele wspólnego.

Kolejną zabawną historią jest język pascal, powszechnie znany w kręgach uniwersyteckich, głównie w Rosji i krajach byłego Związku Radzieckiego. Był i nadal jest zaskakująco używany jako język nauczania. W pozostałej części świata jest mniej powszechny, ale również żyje i ma się dobrze. Jest taka osoba jak Wirth – jest naukowcem, teoretykiem. Brał udział w dyskusji Algol, nie podobało mu się to, co się stało, i wymyślił własny język – Pascal. A potem firma Borland (a wcześniej wiele innych firm - w szczególności Apple było w to zaangażowane) wzięła to i wszystko zrujnowała. Miał piękną, spójną teorię – „wszystko będzie dobrze” – a oni ją wykorzystali i nafaszerowali tym, czego ludzie potrzebowali do pracy. Cóż, nie wyszło tak pięknie, jak chciał.

I w końcu... C został wymyślony przez inżynierów. Jeśli Pascal został wynaleziony przez naukowca, to C zostało wynalezione przez Kernighana i Ritchiego, pracowali jako inżynierowie w Bell. Jak to się stało? W tamtych czasach nie można było w tych językach napisać nic systemowego (wykładowca wskazuje na Fortran, COBOL, Algol). Co to jest „systemowe”? Na przykład system operacyjny, niektóre sterowniki, coś innego. Te języki były przeznaczone do obliczeń matematycznych, do obliczeń biznesowych i do tego wszystkiego. A cała reszta została napisana w Asemblerze. Było kilka języków, teraz są martwe, to znaczy język C nie pojawił się bezpośrednio w Asemblerze, ale poprzez pewne pośrednie rzeczy.

Jaki jest sens? Kernighan i Ritchie uwielbiali bawić się zabawką Asteroidy - statek kosmiczny leci, a tam są asteroidy, strzela do nich, a one się rozpadają. Mieli serwer, na którym grali, ale było tam dużo ludzi, a zabawka działała wolno. I odkryli gdzieś w swoim biurze, że mają jakiś komputer, którego nikt nie używał. Był jednak problem – miała inną architekturę, a gra została napisana w Asemblerze.

Oczywiście przepisali go, a nawet dodali pewne funkcje umożliwiające grę na nim. Ale to doprowadziło ich do pomysłu, że przepisywanie za każdym razem nowej architektury nie jest zbyt mądre. I postanowili napisać język wysokiego poziomu, który nadawałby się do programowania systemowego, czyli taki, w którym możliwe byłoby zarządzanie pamięcią, w którym można byłoby zrozumieć, gdzie się znajdują rzeczy i jak uzyskać dostęp do tych fragmentów pamięci . I tak pojawił się język C, który miał ogromny wpływ na wszystko, co potem nastąpiło. Wszystkie (wykładowca wskazuje na Algol, Fortran i inne wymienione języki) miały ogromny wpływ, ale C - po prostu tak...

W związku z tym był to główny język Uniksa, systemu operacyjnego, który był wówczas jeszcze bardziej popularny niż obecnie. A około lat 80-tych sytuacja wyglądała mniej więcej tak (wykładowca pokazuje Basic, C i inne wymienione języki). Powiedzmy, że to wszystko już powoli wymarło w naszym kraju (wykładowca wymazuje wzmianki o Assembly Language, Fortran i Algol)... A w latach 80. komputery stały się mniejsze, mądrzejsze, tańsze, a ludzie chcieli różnych dziwnych rzeczy aby życie było jeszcze lepsze, aby żyć jeszcze przyjemniej.

Języki z lat 80

Jedną z pierwszych osobliwości było to, że był to język C++. Język C ma ogromną ilość mankamentów (no, po prostu w sumie ogromnych) - można w nim zrobić wszystko, m.in. strzelić sobie w stopę, strzelić sobie w stopę fikcją, w drugą nogę, strzelić sobie nogą w drugą noga ogólnie - co chcesz robić. Ale jednocześnie pewne rzeczy architektoniczne są tam dość trudne - znowu, podobnie jak w Asemblerze, musimy śledzić, gdzie jesteśmy, jaką i jaką pamięć przydzieliliśmy; Cały czas gdzieś „płynie”, ta pamięć - to znaczy ją przydzieliliśmy, zapomnieliśmy ją usunąć, usunęliśmy niewłaściwą rzecz, ogólnie przekroczyliśmy limity pamięci - zgarnęliśmy mnóstwo problemów.

C++ został pierwotnie stworzony jako zestaw dodatków do języka C, które miały ułatwić jego programowanie. W tamtym czasie modne stało się programowanie obiektowe i ludzie uznali, że wszystko można opisać w formie hierarchii, czyli masz piłkę (abstrakcyjną), dziedziczysz po niej piłkę nożną, siatkówkę, inną abstrakcyjną piłkę . Było wtedy modne, że „teraz piszemy wszystko w formie jakiejś hierarchii i wszystko będzie dobrze, życie stanie się lepsze, wszystko będzie dobrze i tyle”. C++ w pewnym sensie zaimplementowało to podejście obiektowe - nie był to pierwszy obiektowy język programowania, ale stał się dość popularny i zaczęły pojawiać się w nim wszelkiego rodzaju funkcje. Jednocześnie C++ zachował niemal pełną (wówczas) kompatybilność z językiem C; program napisany w C został w 99% przypadków pomyślnie skompilowany jako C++ i nawet działał w ten sam sposób. Miało to ułatwić przejście z C na C++.

Oprócz podejścia obiektowego (w C++) szybko pojawiła się standardowa biblioteka szablonów (STL). Myślę, że w szkole ci, którzy jeszcze uczyli się Pascala, odkryli, że po pierwsze nie ma się wbudowanego sortowania (w starożytnym, niebieskim Borlandzie Pascalu, teraz jest już we współczesnych wersjach) - jest przykład (źródło kod) sortowania, można go skopiować i wkleić. Ale jeśli chcesz sortować tutaj liczby całkowite, tutaj liczby rzeczywiste i tutaj ciągi znaków, które można ze sobą porównać, musisz napisać trzy różne sortowania, które robią dokładnie to samo, mają tylko różne typy danych. Nie jest to zbyt dobre, a szablony, które nie pojawiły się od razu w C++, znacznie złagodziły ten problem. Oznacza to, że miałeś abstrakcyjny program, który pomyślnie posortował coś, co można było ze sobą porównać.

Języki skryptowe z lat 90-tych

Ale czas nie stał w miejscu, w latach 80. wydarzyło się wiele ciekawych rzeczy. Ale gdzieś na przełomie lat 80. i 90. komputery stały się tak dobre, że można było robić bardzo dziwne i bardzo nieefektywne rzeczy. W szczególności były to języki skryptowe, które nie były kompilowane do kodu maszynowego, ale raczej interpretowane. BASIC też był kiedyś interpretowany, ale te języki skryptowe były przeznaczone głównie do przetwarzania tekstu - są to np. Perl, Python (wtedy nie było to zbyt znane), PHP, Ruby - to są języki skryptowe że w takim czy innym stopniu nadal żyją (wszystkim udało się pojawić przed 2000 rokiem, a nawet znacznie wcześniej).

Przyjrzyjmy się im trochę, bo są to rzeczy specyficzne i obecnie stosowane w wielu miejscach. Jaki jest pomysł? Jeśli nie skompilujemy, możemy pozwolić na znacznie więcej. Na przykład program może sprawdzić swój kod i w jakiś sposób go wykorzystać; wie, co się w niej dzieje i dzięki temu może dokonać wielu ciekawych rzeczy.

Perl był przeznaczony do przetwarzania tekstu - w tamtych czasach komputery miały tak dużo pamięci, że można było w nim umieścić jakiś tekst i zrobić z nim coś pożytecznego (na przykład policzyć słowa, przeprowadzić jakieś wyszukiwanie). Ale moim zdaniem zaprojektowali go ludzie, którzy byli trochę szaleni, ponieważ jest z tym żart: „Każdy zapisany zestaw znaków jest poprawnym programem w Perlu”. Moim zdaniem można na nim tylko pisać, nie można go czytać. Kiedy patrzę na kod Perla i próbuję coś zrozumieć, nic nie rozumiem. Może gdybym go lepiej poznał, coś bym zrozumiał, ale jak słyszałem od osób, które jeszcze wiedzą jak, mówią, że łatwiej jest to napisać od nowa. Oznacza to, że programy okazują się krótkie i naprawdę łatwiej jest je przepisać od zera, niż dowiedzieć się, co tam jest i to naprawić.

Mniej więcej w tym czasie, w połowie lat 90., pojawił się Internet. Na początku była to poczta, strony internetowe ze statycznym HTML-em, ale ludzie chcieli dodać tam jakąś dynamikę, żeby wszystko działo się dynamicznie, można było wypełnić jakieś formularze, zrobić księgi gości i coś jeszcze. W związku z tym wymagało to pewnego rodzaju interakcji, opracowano protokół, sposób interakcji i, co najważniejsze, wygenerowanie tych statycznych (warunkowych) stron, które zostaną „wyplute” użytkownikowi w odpowiedzi na jego żądanie.

Ogólnie rzecz biorąc, nic innego niż Perła nie było wówczas odpowiednie. Napisanie modułu obsługi w czystym C lub C++ było złym pomysłem. I z braku czego lepszego, w tym czasie (i przez dłuższy czas) Pearl był popularnym językiem do tworzenia stron internetowych. Oczywiście skali nie można porównywać z tym, co dzieje się obecnie.

PHP pojawił się jako... przez przypadek. Jedna osoba dość szybko przestała to robić – założyła własną stronę, miała jakąś księgę gości, coś innego, jakieś inne rzeczy. Napisał także zestaw kilku makr dla Perla, które były podobne do C, ponieważ wiedział, jak używać C, po prostu dlatego, że było to dla niego tak wygodne. Nazwałem ją Osobista Strona Główna. Podzielił się tym i powiedział: „Ludzie, spójrzcie, co napisałem, wszystko tutaj jest znacznie jaśniejsze niż w Perlu i można to edytować”. I ludziom się to podobało.

Potem porzucił ten biznes. Ogólnie rzecz biorąc, w rezultacie ten PHP zaczął żyć i z czasem stał się znacznie bardziej popularny niż Perl. Ale ta jego „trauma porodowa” (pomyślona jako zestaw makr dla Pearl) zrobiła mu dość okrutny żart. Język okazał się dziwny. Oznacza to, że rozwijał się sam, nikt go nie projektował, nikt nie zarządzał procesem rozwoju (ani firma, ani żadna osoba), ale było wiele grup, z których każda widziała to, co jej się podobało. W rezultacie funkcje nazywają się inaczej, nie ma nawet stylu, wszystko jest podkreślone, w zasadzie przypadkowe, ustawienia są tu i tam, a jak to wszystko będzie działać, nie jest zbyt jasne. Ale w dwie godziny można usiąść i pisać w PHP, bo tak właśnie było zamierzone.

Python i Ruby: Ruby jest teraz mniej popularny, Python jest w jakiś sposób lepiej „zaplanowany”, porozmawiamy o tym później. Widać, że w tamtych czasach były to (wykładowca wskazuje na Perl, Python, Ruby, PHP) języki wysoce wyspecjalizowane, przeznaczone do wysoce wyspecjalizowanych celów. W ogóle nikt wtedy nie pisał żadnego oprogramowania systemowego, nie było w nich logiki biznesowej i obecnie niewiele się z tego robi.

Języki kompilowane z lat 90

Będziemy jechać w tym samym czasie, ale w innym kierunku. W tamtym czasie używaliśmy C++ do prawie wszystkiego, co trzeba było napisać, nie do Internetu, nie do przetwarzania tekstu, ale po prostu do aplikacji, systemów operacyjnych, zabawek – ogólnie do czegokolwiek. Ale C++ to tak naprawdę okropny język. Dlaczego? Ponieważ, po pierwsze, odziedziczył wszystkie problemy C ze względu na kompatybilność wsteczną. Tam nadal można było się zabić na milion różnych sposobów, tych samych, które były w C (oczywiście w C++ dodano nowe sposoby). Jednocześnie, jeśli napiszesz wszystko dobrze i poprawnie, zgodnie z zamierzeniami autorów C++, to oczywiście nie da się już zabić metodami starego kodu C i wygląda na to, że jest ich mniej ich. Miał jednak bardzo dziwny, osobliwy model obiektu. Dzielenie programu na moduły, na jakieś części, zazwyczaj pochodzi z języka C (jeśli wiesz, jak napisać include w C lub C++ - w rzeczywistości miało to na celu proste wstawienie tekstu biblioteki do programu, w koniec, jak napiszesz całą masę dołączań, to masz wszystko - jeśli jest to „prymitywne”, tak jak było na samym początku - wszystko jest wrzucane do jednego pliku i wtedy strasznie długo się to wszystko kompiluje, bo to się kręci kilka razy Ten sam Pascal, Wirtowski, był pod tym względem znacznie bardziej przemyślany, późniejsze wersje stały się jeszcze lepsze.

Ogólnie C++ ma wiele wad. Programista musiał mieć wysokie kwalifikacje, żeby pisać w C++, a tacy programiści byli kosztowni (a szkolenia i coś jeszcze, czyli ciężko znaleźć programistów na rynku, trzeba im dużo płacić i w ogóle to jest nie o to chodzi...). A nasze komputery liczą się coraz szybciej, stają się coraz tańsze, ludzie kupują nowe komputery i chcą więcej aplikacji, więcej zabawek do swoich telefonów, w ogóle – więcej radości.

Tak pojawiła się Java. Istnieje również dość zabawna historia o tym, jak ten język otrzymał swoją nazwę. Są tam programiści, cały czas piją kawę i wtedy było modne pić kawę, która rosła na wyspie Jawa. Język został pomyślany jako język dla urządzeń do zabudowy, w szczególności dla ekspresu do kawy. Tak powstała nazwa...
Co się z nią zaczęło, co było w niej dobrego i dlaczego zyskała taką popularność? Po pierwsze, całkowicie pozbyli się dziedzictwa Sishnoi. Nie ma żadnych znaków, a tym bardziej sposobów na odstrzelenie jakiejś części ciała i zniszczenie wszystkiego. Po drugie, wprowadzili znacznie nowsze pomysły w zakresie modelu obiektowego - czyli C++ pojawił się znacznie wcześniej niż Java i wykorzystywał bardziej archaiczny, „dziki” model obiektowy. No cóż, tutaj (wykładowca wskazuje na Javę) już wtedy było to już bardziej przemyślane i w teorii ludzie myśleli, a w praktyce zastosowali i wszystko znacznie fajniej zrobili.

I wreszcie trzecie. Nasze programy Java zostały skompilowane nie do kodu maszynowego, ale do kodu maszyny wirtualnej. Oznacza to, że miałeś maszynę wirtualną (VM) JVM - Java. Twoje programy zostały złożone w jakąś pośrednią reprezentację, a następnie, przy pomocy tej maszyny, zostały już wykonane. Co to dało? Po pierwsze zwalniał, po drugie z potworną siłą zżerał pamięć, po trzecie można go było (teoretycznie) przenosić wszędzie - nawet do ekspresu do kawy, nawet do młynka do kawy, nawet do komputera, nawet do telefonu komórkowego. Z jednej strony to dobrze, to znaczy, że po prostu napisałeś implementację maszyny wirtualnej, a następnie wszędzie uruchamiasz swoje programy Java. Ale z drugiej strony szkoda, że ​​ten sam telefon miał wtedy mało pamięci, niską wydajność, a wszystko to też zaczęło zwalniać i zwalniać.

Ale to nie jest nawet główna rzecz, dla której język został wymyślony. Język Java został wynaleziony, aby zmniejszyć wymagania kwalifikacyjne stawiane programistom. Oznacza to, że gorsi programiści mogą pisać dobre programy w Javie, ponieważ nie pozwala to na pisanie złych programów - nie ma możliwości pisania złych programów. Tam można pisać tylko dobre programy. Cóż, w rozumieniu twórców języka.

To znaczy, jeśli w C, w C++, w Pythonie, w czymkolwiek, możemy stworzyć z naszego projektu jakiś straszny śmietnik, w którym mamy wszystko pomieszane, składane godzinami i coś jeszcze. W Javie możesz także utworzyć wysypisko śmieci, ale w tym celu trzeba się trochę postarać. Oznacza to, że domyślnie nie jest to „śmieci”, pojawiają się inne problemy, że coś zostało odziedziczone i odziedziczone - ogólnie rzecz biorąc, na jedną znaczącą linię przypada dziesięć niezbyt znaczących. Ale taki średnio wykwalifikowany programista może napisać kod dość wysokiej jakości.
Jesteśmy już prawie na końcu. U nas następną rzeczą, która się pojawiła, był .Net (dotnet), a szczególnie interesuje nas C# (prawie to samo [wykładowca wskazuje na Javę], czyli są różnice w szczegółach, jeśli się między nimi wybierzesz spójrz, gdzie płacą więcej).

I jeszcze jedno – JavaScript. Nie ma nic wspólnego z językiem Java, pojawił się w tym samym roku - słowo było modne, uzyskano licencję na używanie znaku towarowego.

Na co przede wszystkim musisz zwrócić uwagę? (Wykładowca rysuje strzałki z C++ do Java, .Net, C#, JavaScript i PHP). Aby napisać prosty program w jednym z tych języków, a także w wielu innych - jeśli znasz C++, w zasadzie nic więcej nie musisz wiedzieć - piszesz w C++, a potem dodajesz na początku dolary, coś innego robi małe rzeczy i zaczyna pracować nad czymkolwiek (wykładowca wskazuje na języki, do których przypisano strzałki z C++). Oznacza to, że są niezwykle podobni w niektórych prostych rzeczach. Jeśli rozwiązujesz jakieś problemy szkolne, edukacyjne lub coś innego (nie projektujesz dużego projektu - masz jeden plik, który czyta liczby, wyświetla liczby w konsoli i robi coś innego), to prawie nie ma różnicy między te języki. Oczywiste jest, że JavaScript i PHP są wyspecjalizowane, wszystko jest dla nich trochę inne. Ale tutaj (wykładowca wskazuje na Javę i C#) różnica jest bardzo niewielka.

Od tego czasu pojawiło się wiele innych interesujących rzeczy, ale nie jest jasne, czy przeżyją, czy umrą pomyślnie. Czego teraz używają, do jakich celów?

Wybór języka w zależności od zadania

Załóżmy, że stoisz przed zadaniem napisania sterownika karty graficznej. Jakiego języka będziesz dzisiaj używać? (Okrzyk publiczności: Java!) Dlaczego... Java jest świetna, ale dlaczego nie Ruby albo PHP? (Wykładowca mówi sarkastycznie.)

Programowanie niskiego poziomu

Jeśli piszesz coś na niskim poziomie, najlepszym wyborem jest C, ale tak naprawdę słyszałem (ale nie widziałem), że używa się do tego C++. Ale mało w to wierzę, bo w C można wyraźnie kontrolować - skoro dałeś tyle bajtów pamięci, to znaczy, że będzie ich tyle. A w C++ (STL) jak zaimplementowany jest ciąg znaków? No cóż, jakoś to zostało zrealizowane. I w końcu nie wiemy, jak i co się tam dzieje, może zabraknie nam pamięci na naszej karcie graficznej lub wydarzy się coś innego. Dlatego C wciąż żyje i nie umiera, takie zadania programowania systemu nadal istnieją - napisz system operacyjny, napisz sterowniki, napisz coś innego - C jest do tego świetny. Poza tym teraz pojawiają się różnego rodzaju urządzenia (obiecuje się, że wkrótce nadejdzie Internet Rzeczy), które działają na bateriach (a będzie ich oczywiście miliony, wszystko będzie objęte tym Internetem Rzeczy), powinny być bardzo tanie i zużywać bardzo mało energii elektrycznej. Odpowiednio będzie 2 KB pamięci, procesor 5 kHz i wiadomo, że w najbliższym czasie nie uda się wkręcić jakiejś maszyny wirtualnej czy języka skryptowego - a to oznacza, że ​​trzeba będzie coś napisać w C. I nawet teraz, na przykład, pracując na karcie graficznej (OpenCL lub inna technologia) - nie wymyślają nowego języka do pisania dla nich programów - robią C z pewnymi dużymi ograniczeniami. Tylko dlatego, że ludzie już wiedzą, jak to zrobić, po co uczyć się czegoś nowego? Formalnie jest to prawdopodobnie także w pewnym sensie C.

Programowanie sieciowe

Załóżmy, że chcesz założyć nowy Facebook (sieć społecznościowa). Na czym to napiszesz? (Ludzie z widowni mówią o HTML i CSS.) HTML i CSS to projekt i chcemy, aby można było tam dodawać zdjęcia, znajomych i zostawiać komentarze.

Jeśli chodzi o część skryptową – czyli to, co stanie się po stronie klienta – jest to JavaScript. Co więcej, czasami JavaScript jest generowany i wysyłany w innym języku (zdarza się, że generowany jest skrypt... bo czasami łatwiej jest przetworzyć pewne zmiany w logice).

Co zaskakujące, jest napisany w PHP - i Facebooku, i wielu innych dużych projektach. Oczywiście musieli napisać coś od siebie, żeby to nadal działało normalnie, a nie w „nieporadny” sposób, ale udało się. W zasadzie nie ma większego znaczenia, w czym piszesz, ale Perla nie polecam. Tu i teraz nikt oczywiście nie pisze niczego dla sieci od zera. Każdy pisze jakiś framework lub coś innego. Sklep internetowy? Pobraliśmy framework dla sklepu internetowego - i gotowe, napisaliśmy sklep internetowy.

Programowanie dla biznesu

Następnie chcesz napisać jakąś nudną aplikację dla banku. Albo na przykład, czy masz kogoś, kto sprzedaje karty SIM? Być może kiedykolwiek kupiłeś telefon lub coś innego i powiedziano Ci: „System się zawiesza, nie możemy nic zrobić”. Czego użyjesz do napisania takiej aplikacji? (Krzyk publiczności na temat Pythona) Nie możesz tego napisać w Pythonie, co ty mówisz?! W Pythonie nie ma potrzeby pisać niczego biznesowego. Dlaczego? Ponieważ pisząc coś w Pythonie, nie da się wykryć znacznej liczby błędów podczas procesu pisania. Python jest dynamicznie wpisywany na wszystkie możliwe sposoby i w ogóle można ukryć błąd w taki sposób, że wyskoczy w takiej sytuacji, że nawet nie będziesz w stanie zrozumieć, co ci nieuczciwi użytkownicy tam zrobili, że wszystko jest złamane dla ciebie. Oznacza to, że w Pythonie lepiej jest pisać małe skrypty dla siebie - rozumiesz, co się tam dzieje i co się robi. Cóż, albo coś, czego nie masz nic przeciwko wyrzuceniu: chcesz wypuścić coś przed konkurencją, a co, jeśli od czasu do czasu coś się zepsuje. Napisałeś w Pythonie i tyle – podbiłeś rynek. A jeśli piszesz coś od dłuższego czasu, np. jakąś aplikację bankową (żeby zatwierdzała kredyty, coś innego) - piszesz to w Javie. Bo to poważna sprawa, papiery, pieniądze, dokumenty, coś jeszcze, ale nie da się tego tak schrzanić, żeby wszystko się popsuło, bo inaczej ludzie by się obrazili – ich pieniądze poszły w niepamięć i nigdzie nie trafiły, bo w jakiś sposób chwili ciąg znaków zamienił się w liczbę i odwrotnie. Czyli metodycznie bierze się to do Javy i pisze, pisze... No cóż, czy na .Net, w zasadzie takie sytuacje też się zdarzają. Tam oczywiście również możesz napotkać problemy, ale nadal prawdopodobieństwo ich wystąpienia jest nieco mniejsze.

Programowanie dla wojska, przemysłu lotniczego

A teraz wyobraź sobie, że postanowili wysłać cię rakietą na Księżyc. Czego wolałbyś użyć do napisania kodu sterującego silnikami rakietowymi? Przyjrzyjmy się. To chyba (wykładowca pokazuje Perl, Python, PHP, Ruby) nie jest tego warte - zwalnia, dzieje się coś innego i w ogóle nie zgodziłbym się na latanie na takiej rakiecie. W C++? Szczerze mówiąc, też bym temu nie ufał, bo w C++ jest zbyt wiele sposobów na samobójstwo. Kiedy jesteś gdzieś w kosmosie, nie jest zbyt dobrze.

Może w Javie? Wydaje się, że wszystko jest tam dość niezawodne, a architektura jest dobra, bez dzikich typów, bez zbędnych wycieczek poza granice pamięci. Powiedzmy, że nadszedł najważniejszy moment i nasza Java postanowiła zbierać za nas śmieci. Musimy wylądować, zwolnić, a ona na to: „Nie, śmieci idą”. Ogólnie też niezbyt dobrze.

Szczerze mówiąc, wolałbym, żeby ten program był napisany w Pascalu. Oczywiście nie przepadam za Pascalem, ale jakoś w takich sprawach byłoby to bardzo fajne.

Używanie wielu języków do tworzenia oprogramowania

Cóż, co ogólnie trzeba powiedzieć o językach nowożytnych. Obecnie wiele projektów nie jest realizowanych w jednym języku, to znaczy niektóre z nich działają w jednym języku, inne w innym, a niektóre w trzecim. Na przykład, jeśli masz jakąś aplikację internetową, która przetwarza ogromne ilości informacji, wywołania dysków (nawet nie baz danych, są tak ogromne, że nawet znajdująca się tam baza danych nie jest w stanie obsłużyć żadnej już napisanej) są prawdopodobnie napisane w jakimś języku następnie niski poziom C, aby szalenie szybko pisać na dysk i tak dalej. Naturalnie nie warto pisać całego projektu w C. Być może istnieje jakiś rodzaj logiki pośredniej napisanej w Javie, która wywołuje funkcje C w celu szybkich wywołań. Cóż, frontend (na co patrzy użytkownik) jest już oczywiście w czymś napisany, w niektórych skryptach, w czymś, co jest bezpośrednio wykonywane przez przeglądarkę (JavaScript). A wszystko to żyje razem i pomyślnie współdziała.

Co czasami robią ludzie, tworząc niektóre aplikacje, nawet te duże? Biorą to i piszą prototyp w Pythonie (jak to wszystko będzie działać), szkicują, przemyśleją jakąś architekturę. Pisanie na nim jest naprawdę bardzo szybkie – złożyli prototyp, poeksperymentowali z nim i powiedzieli: „Wow! To jest takie fajne!" I całkowicie go przepisali. Wydawać by się mogło, że wykonali tę pracę dwa razy, przez co trwało to dwukrotnie dłużej (no, półtora). Ale nie! Często okazuje się, że ta metoda nie jest zła, bo jeśli od razu coś napiszesz, np. w Javie, a potem zdecydujesz: „Nie, przeprowadźmy refaktoryzację, zmieńmy całkowicie architekturę i tak dalej”, to wydasz 10 razy więcej czas. Takie rzeczy też istnieją i żyją.

Warunki powodzenia dowolnego języka programowania

Porozmawiajmy teraz o tym, dlaczego niektóre dobrze wyglądające języki nie przetrwały lub żyją na bardzo ograniczonej przestrzeni. Kiedy Wirth zobaczył, jakie złe firmy Apple, Borland i wszystko, co zrobiło z jego Pascalem, wymyślił jeszcze lepszy język - Oberon. Było po prostu szalenie minimalistycznie – to znaczy było bardzo mało poleceń (Ciągi znaków? Po co nam ciągi znaków? Stworzymy tablicę znaków!). No cóż, coś mu nie wyszło, na tyle, na ile mogło się udać.

Jeszcze jedna rzecz. Wojsko amerykańskie poprosiło ich o opracowanie fajnego języka, w którym wszystko działa i wszystko można napisać. Rezultatem był dość potworny język Ada, w którym jednak nadal coś piszą, ale znowu tylko dla wojska.

Jaki jest problem? Dlaczego niektóre języki, takie jak Python, którego na początku nie wspierała żadna firma, opanowały rynek. PHP, które również jest słabo zaprojektowane, również samo podbiło rynek (większość). I zainwestowano całe miliardy dolarów (wykładowca wskazuje na Adę) i nigdzie nie poszło, nic się nie stało. Z czym to się wiąże? Wynika to z faktu, że wokół tych języków nie ma infrastruktury. Oznacza to, że język może być doskonały, ale dopóki nie ma dokumentacji, dopóki nie ma społeczności, która może odpowiedzieć na pytania (na Stack Overflow) i wreszcie, co najważniejsze, dopóki nie ma dużej liczby bibliotek język nie rozwija się. Czyli np. chciałeś napisać stronę internetową na Oberonie. Co to jest, dlaczego nie? I zaczyna się kłopot… Nie można skonfigurować własnego serwera WWW na Oberonie, aby go lekko przetestować, nie można podłączyć żadnych bibliotek, ponieważ Oberon ich nie ma. A to wszystko odbywa się o kulach, siły odchodzą i w ogóle się poddajesz i piszesz swoją stronę w czystym C zamiast w Oberonie. A te języki, które dobrze żyją, to te, które potrafią korzystać z bibliotek z innych języków. Ten sam Python w tych miejscach, gdzie zwalnia. Cóż, ogólnie rzecz biorąc, wszelkiego rodzaju standardowe rzeczy, takie jak sortowanie i inne, są napisane w C i on (Python) może z nimi współdziałać.

Java ma również natywny interfejs Java. To w zasadzie C, czyli tam (moim zdaniem zawsze chcą tego zakazać, ale wygląda na to, że jeszcze tego nie zbanowali) te języki mogą wchodzić w interakcję z już istniejącymi bibliotekami (głównie C). I dlatego biorą to i pracują. Idea, którą próbuję ci przekazać, jest jasna, prawda? Nie pisz w językach, które nie obsługują biblioteki C. Cóż, jeśli chcesz użyć czegoś fajnego. Cóż, stopniowo one (języki) zdobywają własną infrastrukturę. I jakoś żyje się im dobrze.

Język programowania i poradnictwo zawodowe

Porozmawiajmy teraz o tym, jak zrozumieć, czego chcesz w życiu. Jakie są najfajniejsze rzeczy? Potrafisz programować systemy, prawda? Świetnie, że liczysz te bity, chcesz odpalić quadkoptery, jakieś kamery i zająć się czymś innym. Zatem prawdopodobnie C jest twoim wyborem.

Jeśli chcesz pisać, może nie najciekawsze aplikacje w życiu, ale fajnie, że je projektujesz, myślisz o tym wszystkim i zarabiasz dużo pieniędzy za to, że większość czasu siedzisz i się nudzisz (trzeba za to zapłacić jeśli dobrze chybiasz), oto one - Java, .Net. Idziesz do pracy w jakimś banku, piszesz, idziesz do pracy o dziewiątej w białej koszuli, dostajesz dobrą pensję i piszesz według rekomendacji najlepszych programistów Java, owiec .Net i tak dalej...

Jeśli chcesz napisać jakieś aplikacje, jakąś przeglądarkę, jakieś zabawki lub coś innego, C++ będzie świetny. Jeśli chcesz pisać strony internetowe, to tutaj są, wybrane przez Ciebie języki (wykładowca pokazuje Perl, Python, PHP, Ruby), nie ma dużej różnicy. Jedyną rzeczą jest to, że PHP umrze przed Pythonem, więc jeśli jesteś leniwy, aby uczyć się nowych rzeczy, naucz się Pythona. Nie zauważysz dużej różnicy, ale będziesz trwać dłużej.

Nie jest jasne, co dzieje się z Ruby. Cóż, możesz pracować w PHP, jeśli już się go nauczyłeś, na szczęście jest to tak proste, że ponowna nauka nie zajmuje dużo czasu.

I wreszcie istnieje inny obszar zastosowania języków programowania - wtedy posługuje się nimi osoba niebędąca programistą. Załóżmy, że jesteś matematykiem, fizykiem, chemikiem, analitykiem, kimkolwiek i musisz szybko coś obliczyć, przeanalizować jakieś dane (dla biologów np. Ile lisów polarnych żyje na Wyspach Komandorskich). Możesz to wszystko umieścić w tabeli w Excelu lub za pomocą czegoś przeanalizować. Python też jest do tego dobry, potrafi pracować z tekstem i jest mnóstwo bibliotek statystycznych i tak dalej. Jeśli chcesz przeprowadzić jakiś rodzaj uczenia maszynowego, przetworzyć pewne dane, dokonać prognoz, to jest to obecnie najszybszy sposób również w Pythonie. To prawda, należy zauważyć, że zadania są bardzo różne. Na przykład, jeśli chcesz natychmiast handlować na giełdzie w warunkach, w których notowania cały czas się zmieniają, to niezależnie od tego, jak fajnie Machine Learning napiszesz w Pythonie, ludzie, którzy mają to napisane w czymś szybszym, zdążą kupić wszystko przed Wszystko zostaną dla Ciebie policzone, nawet jeśli ich algorytmy są gorsze. Dlatego nawet te zadania uczenia maszynowego (niektóre z nich) wymagają wysokiej wydajności (i niezwykle wysokiej wydajności) i odpowiednio innych języków.

Jedynym sposobem, aby zrozumieć, czego chcesz, jest spróbować wszystkiego. Teraz powiem to jako jedną z wizji tego, jak można spróbować wszystkiego. Jak zostać programistą i być szczęśliwym? Więc. Zacznijmy z czystą kartą. Tutaj uczysz się w szkole matematyki, języka rosyjskiego oraz innych przedmiotów obowiązkowych i fakultatywnych, a Twoja wiedza z zakresu programowania znajduje odzwierciedlenie na tablicy (wykładowca wskazuje pustą tablicę). A ty chcesz zostać szczęśliwym człowiekiem, robić to co kochasz, zarabiać dużo pieniędzy, nie odmawiać sobie niczego i być szczęśliwym.

Jeden sposób, aby to osiągnąć. Istnieje oczywiście mnóstwo inspirujących historii o ludziach, którzy w ogóle nie poszli na studia, albo je porzucili i zostali miliarderami, właścicielami firm i tak dalej. Należy jednak zauważyć, że większość ludzi, którzy być może nie zostali miliarderami, ale też dobrze żyją, nadal w pewnym momencie ukończyli studia.

Jak wygląda sytuacja z przyjęciem na studia (czy studiujesz obecnie w szkole)? Będąc już w szkole, musisz zrozumieć, że kolejnym krokiem jest zapisanie się do szkoły i zadbanie o nią. Zdaj zunifikowany egzamin państwowy lub wygraj olimpiadę. Na egzaminie Unified State Exam możesz posługiwać się Pascalem, C++ (w tym czystym C), Pythonem (nie będę ich szerzej wspominać). Na Olimpiadzie jest ten sam Pascal, ten sam C++, ten sam Python (porozmawiamy teraz o jego problemach) i najczęściej jest Java. W zależności od igrzysk olimpijskich dzieją się inne rzeczy, ale nie o to tu chodzi.

Jak wygląda wykres rozkładu języków na Ogólnorosyjskiej Olimpiadzie Informatycznej? Ludzie, którzy biorą udział w ogólnorosyjskich, najfajniejszych igrzyskach olimpijskich, w czym piszą? Wygląda to tak (tutaj chodzi o Pascala, a tu chodzi o około 2000, a tu o zero, tu o C++, a tu o rok 2015).

W 2000 roku prawie nikt nie pisał C++. Minęło 15 lat i prawie nikt nie pisze w Pascalu, mimo że Pascal jest nowoczesny. Jest to język, który potrafi niemal wszystko tak samo. Tyle, że wszyscy stali się zbyt leniwi, żeby się tego nauczyć, każdego nowego trendu i dalej piszą wszystko w Borland Pascal, co oczywiście nic nie da. W C++ ludzie piszą pewne algorytmy (STL) do sortowania - świetnie, napisali sort() i to wszystko. Na Pascalu, na zwykłym, na starym - to jest problem. Napisaliśmy jakiś zestaw (był potrzebny) - super, napisaliśmy to w C++, ale w Pascalu znowu była to kompletna udręka. Oczywiście można to zrobić za pomocą nowych Pascalów, ale generalnie są one kosztowne. Być może nie zauważyłeś tego, ale to prawda.

Jest też Java, ale Java ma dużo liter. Dotyczy to dużych projektów, ale w przypadku małych jednorazowych programów okazuje się bardzo źle, ponieważ jest dużo dodatkowych liter. Ale niektórzy ludzie też piszą, możesz nauczyć się na tym pisać. Ale nie dotyczy to ujednoliconego egzaminu państwowego, a większość nadal będzie musiała przystąpić do ujednoliconego egzaminu państwowego.

Co najlepiej nadaje się do egzaminu Unified State Exam? Na egzamin Unified State Exam najlepiej (jeśli nic nie wiesz i niczego nie uczą w szkole) nauczyć się Pythona. Niektóre problemy egzaminacyjne można na nim doskonale rozwiązać. Na olimpiadzie w ogóle okazuje się, że używany jest C++, ponieważ Python jest bardzo powolny, nie wszystko jest tam rozwiązane.

W ten sposób nauczyłeś się jakiegoś małego podzbioru języka i niektórych algorytmów (prawdopodobnie) i rozwiązałeś wiele problemów, aby otrzymać dyplom z olimpiady i wejść na uniwersytet, aby uzyskać wyższe wykształcenie.

Opowiem teraz o tym, jak organizujemy kurs w HSE, w jakiej kolejności uczymy języków, jak studiuje się je w zakresie matematyki stosowanej i informatyki na Wydziale Nauk Stosowanych, co robimy wspólnie z Yandex. W pierwszym semestrze - Python (nie w całości, mniej więcej tak, jak powinno się uczyć w szkole) i C++ (już szerzej, znacznie szerzej, niż zwykle uczy się w szkołach). Powiem Ci od razu, żebyś się nie przestraszył, jeśli nagle będziesz chciał się zapisać, powiesz: „Co, ja to wszystko już wiem, po co mam iść gdzieś na studia? Wolałbym pójść gdzie indziej. Dla tych, którzy już umieją dobrze programować, istnieje możliwość od razu przejścia do studiowania algorytmów i to w miarę teoretycznym przygotowaniu. Nie patrzymy na nie teraz, to (wskazuje na tablicę) jest dla tych, którzy są programistami średnio zaawansowanymi lub wcale.

W pierwszym semestrze nauczane są podstawy Pythona, właśnie po to, żeby ludzie nauczyli się programować i żeby nikt się zbytnio nie obraził. Pythona rzadko uczy się w szkołach; większość ludzi przychodzi ze znajomością Pascala lub C++. Przeważnie nawet Pascal, jeśli jest to szkoła masowa. No cóż, żeby nikogo nie urazić, wszyscy uczą się nowego języka (jakby byli na równych warunkach). A C++ po prostu dlatego, że z C++ możesz przejść gdziekolwiek.

Następnie przychodzi kurs Algorytmy i oddzielny projekt kursu. Algorytmy klasyczne z implementacją. To nie jest tak, że wzięliśmy coś w teorii i obliczyliśmy złożoność. Na wykładzie zrobiliśmy to, obliczyliśmy złożoność, na seminarium zrobiliśmy to i zaimplementowaliśmy algorytm. Projekt polega na tym, że uczniowie tworzą coś kompletnego. Na przykład jeden z projektów brzmiał: policz... Załóżmy, że masz dużo mieszkań w Moskwie i rozumiesz: „Och, mam dużo dodatkowych rzeczy, część wynajmę. I ustalają określoną cenę i z jakiegoś powodu nikt nie chce od ciebie wynająć mieszkania - to prawdopodobnie jest za drogie. Albo ustalili jakąś cenę, natychmiast ci ją zabrali i myślisz: „Och, pewnie sprzedałem to tanio” - i ty też się denerwujesz. Oznacza to, że trzeba było obliczyć, ile kosztuje wynajęcie mieszkania? Wprowadzasz dane - one tworzą dla Ciebie wycenę. Taka strona, która składała się z kilku rzeczy: wziąć zdania, przeanalizować je, zastosować jakiś (prawdopodobnie) prosty algorytm uczenia maszynowego i zrobić piękną twarz internetową, w której można coś wybrać, coś wpisać, kilka metrów, pewną liczbę pokoi , ilość saun, ilość jacuzzi w Twoim mieszkaniu i przybliżony koszt. To znaczy coś gotowego, niezbyt skomplikowanego. Tutaj oznacza to (wykładowca wskazuje na kurs z algorytmów) taki rdzeń C++, z konsolowym wejściem-wyjściem. No cóż, tutaj (wykładowca wskazuje na napis „projekt”) coś pod okiem mentora, może z bazami danych, może z analizą tekstu i czymś jeszcze.
Następnie następuje semestr trzeci – jest to kurs zatytułowany „Systemy komputerowe”. Jest całkiem sporo języka asemblera do zrozumienia (bardzo mało), a potem coś podobnego do czystego C i interakcji z systemami operacyjnymi, w istocie programowania systemowego. Projekt na seminarium także dotyczy wszelkiego rodzaju interakcji sieciowych, dość niskiego poziomu: opracuj jakieś narzędzie, na przykład rsync (być może wiesz, synchronizacja. Mniej więcej w czystym C napisz odpowiednik rsync, dzięki któremu będziesz mieć przez sieć synchronizację folderów ze wszystkimi dostępami do plików i tak dalej).

I wreszcie czwarty. Nawet nie wiem jak to nazwać, to taki winegret technologii niezbędnych do prawdziwego rozwoju, na przykład tworzenia stron internetowych. Oznacza to, że jest to praktyczne zastosowanie baz danych, znowu coś podobnego do tego, co zostało zrobione w projekcie (wykładowca wskazuje na projekt z drugiego roku), ale bardziej dogłębne. Czyli są to mniej lub bardziej konkretne rzeczy, praktyczne programowanie. Równolegle z tym jest każda teoria, a tutaj też zajmują się nauką.

A po dwóch kursach ludzie idą robić to, co ich interesuje, bo to obejmuje podstawy programowania dość szeroko i ludzie już w tym czasie rozumieją, że nie chcą pracować z systemami komputerowymi w żadnym wypadku (nie jak na przykład programowanie systemowe), ale chcą popracować nad pewnymi algorytmami teoretycznymi, obliczyć złożoność, wymyślić jakieś nowe rzeczy, rozproszone lub coś innego. Albo wręcz przeciwnie, uważają, że nie mają tu zbyt wiele ( wykładowca wskazuje na linię pierwszego kursu z Pythonem i C++) poszedł, a następnie ( wykładowca wskazuje na trzeci kierunek, z programowania systemów) - Nie podoba mi się to, liczenie bajtów i ustawianie wszelkiego rodzaju ograniczeń w czytaniu i zapisywaniu, tworzenie strumieni, wątków i czegokolwiek innego. I zgodnie z tym ludzie wybierają kierunek i studiują. To znaczy w zasadzie, abyś nie rozwinął „syndromu kaczątka” - jako pierwszy zobaczyłeś swojego Pascala, a teraz powiedziałeś „Pascal to siła”; lub bardziej zaawansowany - zobaczyłeś C++ i zacząłeś mówić wszystkim, że C++ jest mocny, ale wszystko inne nie jest zbyt dobre.

Teraz trzeba na to spojrzeć (wykładowca wskazuje na listę kursów na tablicy) szerzej – to jedna z metod, która została wybrana zwłaszcza w HSE (pojawiła się niedawno, więc jest dość nowoczesna). Są inne sposoby na zapoznanie się. Na innych dobrych uczelniach porządek jest trochę inny i stawiane są inne akcenty. Ale starają się też przedstawić ludziom wszystko, co mają.

Jak szukać pracy jako programista

Jesteś ( wykładowca wskazuje listę kursów) zrobiłem wszystko, studiowałem na uniwersytecie, przez dwa lata robiłem coś innego bardziej produktywnie i trzeba iść do pracy. Jak wybrać coś do pracy? Po pierwsze, oswoiłeś się ze wszystkim, zeszedłeś gdzieś głębiej i już wiesz, co kochasz. Naturalnie musisz wybrać to, co kochasz. Bo jeśli kochasz, włożysz wysiłek, będziesz miała motywację i ogólnie wszystko będzie dobrze. Ponieważ nie chodzi tylko o pieniądze, chodzi o to, aby były one dla Ciebie interesujące i przyjemne. No cóż, chcesz dostać się do fajnej firmy i znaleźć pracę. Jaką osobę osobiście chciałbym zobaczyć? Powiedzmy, że przychodzi do mnie setka studentów – czy mam zatrudnić dwóch, czy jednego. Po co przychodzą, w ogóle nie rozumiem, kim oni są, czym są, jacy są? W najlepszym razie pokażą mi dyplom, który otrzymali na uczelni, a ja powiem: „Wow!” To fajny dyplom, ale to nie jest takie fajne!” A swoją drogą mogę się mylić. Być może dana osoba miała dużo wolnego czasu i uczyła się znacznie lepiej.

Co byłoby świetne? Po pierwsze, jakiś projekt open source, który napisałeś od początku do końca. Najlepiej, jeśli tworzę jakąś infrastrukturę, aby dane można było szybko odczytać, lub coś innego, to oczywiście byłbym zainteresowany napisaniem dla mnie czegoś open source. Nie zrobili strony internetowej, ale coś na ten temat. Dlaczego mnie to interesuje? Mogę spojrzeć na Twój kod, widzę, jak często się angażowałeś, widzę, jak zareagowałeś na błędy użytkowników, błędy programistów, którzy go używają - wszystko jest rejestrowane, patrzę na wszystko i myślę: „Wow, ten błąd się pojawił nie byłem tam już dwa lata.” Zamknięto, tutaj odpowiedziałeś użytkownikowi nieuprzejmie, tutaj jest coś innego - nie wezmę tego. Oznacza to, że jest to Twój osobisty projekt.

Następnie, co jeszcze byłoby fajnego? Chciałbym zobaczyć, jak poradziliście sobie z pracą zespołową. To znaczy przychodzisz do mnie na rozmowę kwalifikacyjną i mówisz: „Chłopaki z uniwersytetu i ja złożyliśmy niezłą aplikację. Ja tam robiłam bazę danych, oni tam robili jakąś aplikację mobilną, mieliśmy tam też faceta, projektantkę, chłopaka do pomocy technicznej. Było nas pięciu i zrobiliśmy fajny projekt. No cóż, widzę, że to naprawdę Twój projekt, mówię: „A jaki jest Twój?” Patrzę jeszcze raz na kod i rozumiem, że umiesz pracować w zespole z ludźmi.

Programista to nie ktoś, kto siedzi sam (indie) w garażu, gdzieś przy zgaszonym świetle, z nikim nie rozmawia, zapuszcza brodę i pisze. Nadal istnieje interakcja z ludźmi. Na przykład z szefem, który czasami może na ciebie przeklinać (szefowie tacy są, nie zawsze są mili). Widzę, że umiesz pracować z ludźmi i bardzo mnie cieszy, jeśli masz jakiś dobry zespół. Nawet jeśli nie jest to dobre, lepsze to niż jego brak.

Czego jeszcze osobiście chciałbym? Jeśli sprawdziłeś się w dużych projektach. Na przykład, jeśli zajmujesz się programowaniem systemowym, popełniłeś coś w jądrze Linuksa i naprawiłeś jakiś błąd. Oznacza to, że pokazali, że potrafisz czytać cudzy kod i wiesz, jak wprowadzić w nim pewne zmiany. Patrzę: „Och, naprawdę, wymyśliłeś coś skomplikowanego i naprawiłeś kilka błędów!” I zaczyna mnie to bardzo cieszyć. Bo ja... no nie wiem... mój programista odszedł, bo konkurencja zaoferowała mu wyższą pensję, a ja pilnie potrzebuję kogoś na jego miejsce - Ciebie. Widzę, że pisałeś tylko od zera, ale nie umiesz czytać i edytować cudzego kodu, co mnie denerwuje.

I wreszcie, w zależności od konkretnego stanowiska, są różne inne rzeczy. Jeśli szukasz pracy jako analityk, chciałbym, abyś rozwiązał problemy związane z analizą danych w Kaggle. Jeśli starasz się o jakieś algorytmiczne rzeczy, chciałbym, żebyś zrobił kilka algorytmów w programowaniu sportowym. I wreszcie, jeśli zastanawiałeś się nad zawodem, przeczytałeś, jak przeprowadza się rozmowy kwalifikacyjne, widziałeś, że niektórzy ludzie wyrażają tam ogromne niezadowolenie: „Przyszedłem i zapytali mnie, jakie jest moje hobby. Siedzę jak sowa i nie odbieram, bo nie mam hobby” – a oni myślą, że HR tak robią. W rzeczywistości próbują zrozumieć, jak przyjazny i odpowiedni jesteś. Jeśli jesteś nieprzyjazny i nieadekwatny, to niezależnie od tego, jak genialny i pracoholik jesteś, twardy specjalista z dużą wiedzą, zespołowi będzie trudno współpracować z Tobą, a Ty nie będziesz w stanie sam ukończyć projektu. Poza tym nawet jeśli go wyciągniesz, możesz sobie wyobrazić, jakie obciążenie stanowi dla firmy. A co jeśli przyjdziesz jutro i powiesz: „Zwiększ moją pensję 10 razy, bo inaczej cię opuszczę”. Wiadomo, że firmy nie chcą znaleźć się w takiej sytuacji. Dlatego kultywowanie w sobie adekwatności i dobrej woli jest równie ważne (przynajmniej), jak rozwijanie niektórych umiejętności zawodowych.

Podsumowując, co możemy powiedzieć? Które języki są dobre, a które złe? Cóż, w ramach pewnej grupy języków, na przykład pomiędzy Ruby, Python i PHP, co wybrać? Oczywiście poprawną odpowiedzią jest Python, ale tak naprawdę różnica między nimi polega na liczbie dozwolonych błędów, na liczbie czegoś innego - 5%, no, może 10%. Oznacza to, że jeśli masz już gotowy projekt napisany w PHP, to nikt o zdrowych zmysłach nie powie: „Przepiszmy wszystko w Pythonie”. Powiedzą: „Zatrudnijmy więcej programistów PHP i kontynuujmy pisanie w PHP”. Świetnie, to dobry wybór. Oczywiste jest, że jeśli nagle zdecydujesz się napisać jakiś projekt, mądrzej będzie wybrać Pythona już teraz. Chociaż to też zależy. Być może masz na rynku wielu tanich programistów PHP, a programistów Pythona są drogich i myślisz: „Tak, technologia jest fajniejsza, ale zaoszczędzę pieniądze na gotowych programistach”. I wszystko jest świetnie, już tam przyjechałeś i pracujesz.
Jak wybrać pomiędzy Javą a C++? Tak, dzieje się mniej więcej to samo. Myślę, że zanim zdecydujesz, w jakim języku rozpocząć nowy, duży projekt, będziesz mieć już wiedzę w swojej dziedzinie zawodowej i będziesz mógł dokonać właściwego wyboru. Teraz nie musisz jeszcze dokonywać tego wyboru, dlatego radzę ci robić, co lubisz.

Podstaw, jak już mówiłem, samych podstaw programowania (czym jest funkcja, czym są if’ics, for’ics, tablice, coś jeszcze) można się nauczyć w mniej więcej dowolnym języku. Np. w C++, bo jest z nim sporo podobieństw, jest w nim najmniej konkretów (na tym poziomie) i najmniej jest dodatkowych liter do napisania. No cóż, kiedy nauczysz się skomplikowanych rzeczy architektonicznych, nauczysz się i nie musisz się tym zbytnio martwić. Czyli najważniejsze to spróbować, poszukać tego, co lubisz, a kiedy zorientujesz się, że jest już 4 rano, a ty siedzisz i piszesz dla zabawy, bo to lubisz - prawdopodobnie w tym momencie jasne jest, że znalazłeś swój.

Język programowania

Język programowania- formalny system znaków przeznaczony do nagrywania programów komputerowych. Język programowania definiuje zbiór reguł leksykalnych, syntaktycznych i semantycznych, które definiują wygląd programu i działania, które wykonawca (komputer) będzie wykonywał pod jego kontrolą.

  • Funkcjonować: Język programowania przeznaczony jest do pisania programów komputerowych, które służą do przesyłania do komputera instrukcji w celu wykonania określonego procesu obliczeniowego i organizacji sterowania poszczególnymi urządzeniami.
  • Zadanie: Język programowania różni się od języków naturalnych tym, że służy do przesyłania poleceń i danych od osoby do komputera, natomiast języki naturalne służą do komunikacji między ludźmi. Można uogólnić definicję „języków programowania” – jest to sposób przekazywania poleceń, rozkazów, jasnych wytycznych działania; podczas gdy języki ludzkie służą również do wymiany informacji.
  • Wykonanie: Język programowania może używać specjalnych konstrukcji do definiowania i manipulowania strukturami danych oraz kontrolowania procesu obliczeń.

Standaryzacja języków programowania

Język programowania można przedstawić jako zbiór specyfikacji definiujących jego składnię i semantykę.

Dla wielu powszechnie używanych języków programowania stworzono międzynarodowe standardy. Organizacje specjalne regularnie aktualizują i publikują specyfikacje i formalne definicje odpowiedniego języka. W ramach takich komitetów kontynuowany jest rozwój i modernizacja języków programowania oraz rozwiązywane są problemy rozbudowy lub wspierania istniejących i nowych konstrukcji językowych.

Typy danych

Nowoczesne komputery cyfrowe są zwykle binarne i przechowują dane w kodzie binarnym (chociaż możliwe są również implementacje w innych systemach liczbowych). Dane te zazwyczaj odzwierciedlają informacje ze świata rzeczywistego (nazwiska, konta bankowe, pomiary itp.) reprezentujące koncepcje wysokiego poziomu.

Specjalnym systemem organizacji danych w programie jest systemu typu język programowania; rozwój i badanie systemów typów jest znane jako teoria typów. Języki można sklasyfikować jako systemy z pisaniem statycznym i języki z dynamiczne pisanie.

Języki z typem statycznym można dalej podzielić na języki za pomocą obowiązkowa deklaracja, gdzie każda deklaracja zmiennej i funkcji posiada wymaganą deklarację typu, oraz języki z wywnioskowane typy. Czasami nazywane są języki pisane dynamicznie ukryte.

Struktury danych

Systemy typów w językach wysokiego poziomu umożliwiają definiowanie typów złożonych, złożonych, tzw. struktur danych. Zazwyczaj strukturalne typy danych są tworzone jako iloczyn kartezjański typów podstawowych (atomowych) i wcześniej zdefiniowanych typów złożonych.

Podstawowe struktury danych (listy, kolejki, tablice mieszające, drzewa binarne i pary) są często reprezentowane przez specjalne konstrukcje składniowe w językach wysokiego poziomu. Takie dane są strukturyzowane automatycznie.

Semantyka języków programowania

Istnieje kilka podejść do definiowania semantyki języków programowania.

Najbardziej rozpowszechnione są trzy odmiany: operacyjna, derywacyjna (aksjomatyczna) i denotacyjna (matematyczna).

  • Opisując semantykę wewnątrz operacyjny podejście, zwykle wykonanie konstrukcji języka programowania jest interpretowane przy użyciu jakiegoś wyimaginowanego (abstrakcyjnego) komputera.
  • Pochodna semantyka opisuje konsekwencje wykonywania konstrukcji językowych przy użyciu języka logiki i określania warunków wstępnych i końcowych.
  • Denotacyjny Semantyka operuje pojęciami typowymi dla matematyki - zbiorami, korespondencją, a także sądami, twierdzeniami itp.

Paradygmat programowania

Język programowania jest zbudowany zgodnie z jednym lub innym podstawowym modelem obliczeniowym i paradygmatem programowania.

Pomimo tego, że większość języków koncentruje się na imperatywnym modelu informatyki, zdefiniowanym przez architekturę komputerową von Neumanna, istnieją inne podejścia. Można wymienić języki posiadające model obliczeń stosowych (Forth, Factor, PostScript itp.), a także programowania funkcjonalnego (Lisp, Haskell itp.) i programowania logicznego (Prolog) oraz język REFAL oparty na modelu obliczeniowym wprowadzone przez radzieckiego matematyka A.A.Markowa Jr.

Obecnie aktywnie rozwijają się także języki programowania problemowego, deklaratywnego i wizualnego.

Sposoby implementacji języków

Języki programowania można implementować zarówno w wersji skompilowanej, jak i interpretowanej.

Program w języku kompilowanym za pomocą kompilatora (programu specjalnego) jest konwertowany (kompilowany) na kod maszynowy (zestaw instrukcji) dla danego typu procesora, a następnie składany w moduł wykonywalny, który można uruchomić do wykonania jako odrębny program. Innymi słowy, kompilator tłumaczy kod źródłowy programu z języka programowania wysokiego poziomu na kody binarne instrukcji procesora.

Jeśli program jest napisany w języku interpretowanym, wówczas interpreter bezpośrednio wykonuje (interpretuje) tekst źródłowy bez wcześniejszego tłumaczenia. W takim przypadku program pozostaje w języku oryginalnym i nie można go uruchomić bez tłumacza. Pod tym względem procesor komputera można nazwać interpretatorem kodu maszynowego.

Podział na języki kompilowane i interpretowane jest warunkowy. Zatem dla każdego tradycyjnie kompilowanego języka, takiego jak Pascal, możesz napisać interpreter. Ponadto większość współczesnych „czystych” interpreterów nie wykonuje bezpośrednio konstrukcji językowych, ale kompiluje je w jakąś pośrednią reprezentację wysokiego poziomu (na przykład ze zmiennymi dereferencjami i rozszerzaniem makr).

Kompilator można stworzyć dla dowolnego języka interpretowanego - np. język Lisp, który jest natywnie interpretowany, można kompilować bez żadnych ograniczeń. Kod wygenerowany podczas wykonywania programu może być również dynamicznie kompilowany podczas wykonywania.

Z reguły skompilowane programy działają szybciej i nie wymagają do wykonania dodatkowych programów, ponieważ są już przetłumaczone na język maszynowy. Jednocześnie za każdym razem, gdy zmienia się tekst programu, należy go przekompilować, co spowalnia proces programowania. Ponadto skompilowany program można uruchomić tylko na komputerze tego samego typu i zwykle w tym samym systemie operacyjnym, dla którego kompilator został zaprojektowany. Aby utworzyć plik wykonywalny dla innego typu maszyny, wymagana jest nowa kompilacja.

Języki interpretowane mają pewne specyficzne dodatkowe cechy (patrz wyżej), ponadto programy w nich można uruchamiać natychmiast po modyfikacji, co ułatwia rozwój. Program w języku interpretowanym często można bez dodatkowego wysiłku uruchomić na różnych typach maszyn i systemów operacyjnych.

Jednak interpretowane programy działają zauważalnie wolniej niż skompilowane i nie można ich uruchomić bez programu interpretującego.

Takie podejście w pewnym sensie pozwala wykorzystać zalety zarówno interpreterów, jak i kompilatorów. Należy wspomnieć, że istnieją języki, które mają zarówno interpreter, jak i kompilator (Forth).

Stosowane symbole

Nowoczesne języki programowania są zaprojektowane tak, aby korzystać z ASCII, czyli dostępności dla wszystkich graficzny Znaki ASCII są warunkiem koniecznym i wystarczającym zapisania dowolnych konstrukcji językowych. Menedżerowie Znaki ASCII są używane w ograniczonym zakresie: dozwolone są tylko znaki powrotu karetki CR, przejścia do nowego wiersza LF i poziomego tabulatora HT (czasami także pionowego tabulatora VT i przejścia strony FF).

Wczesne języki, pojawiające się w epoce znaków 6-bitowych, korzystały z bardziej ograniczonego zestawu. Na przykład alfabet Fortran ma 49 znaków (łącznie ze spacją): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + - * / () . , $":

Godnym uwagi wyjątkiem jest język APL, który wykorzystuje wiele znaków specjalnych.

Użycie znaków innych niż ASCII (takich jak znaki KOI8-R lub znaki Unicode) zależy od implementacji: czasami są one dozwolone tylko w komentarzach i stałych znakowych/łańcuchowych, a czasami w identyfikatorach. W ZSRR istniały języki, w których wszystkie słowa kluczowe pisano rosyjskimi literami, ale takie języki nie zyskały dużej popularności (wyjątek stanowi 1C:Enterprise wbudowany język programowania).

Rozszerzanie zestawu używanych symboli jest ograniczone faktem, że wiele projektów rozwoju oprogramowania ma charakter międzynarodowy. Bardzo trudno byłoby pracować z kodem, w którym nazwy niektórych zmiennych są zapisane rosyjskimi literami, inne arabskimi, a jeszcze inne chińskimi. Jednocześnie do pracy z danymi tekstowymi języki programowania nowej generacji (Delphi 2006, Java) obsługują Unicode.

Zajęcia z języka programowania

Zobacz też

Notatki

Literatura

  • Hala Abelsona i Geralda Jaya Sussmana. Struktura i interpretacja programów komputerowych
  • Roberta W. Sebesty. Podstawowe pojęcia języków programowania = Pojęcia języków programowania / Tłum. z angielskiego - 5. wyd. - M.: Williams, 2001. - 672 s. - 5000 egzemplarzy. - ISBN 5-8459-0192-8 (rosyjski), ISBN 0-201-75295-6 (angielski)
  • Wolfenhagen V.E. Konstrukcje języka programowania. Techniki opisu. - M.: Centrum YurInfoR, 2001. - 276 s. - ISBN 5-89158-079-9
  • Paronjanov V.D. Jak ulepszyć swój umysł. Algorytmy bez programistów - to bardzo proste! - M.: Delo, 2001. - 360 s. - ISBN 5-7749-0211-0
  • F. Biancuzzi, S. Worden. Pionierzy programowania. Dialogi z twórcami najpopularniejszych języków programowania. - Petersburgu. : Symbol-Plus, 2010. - 608 s. - ISBN 978-5-93286-170-7

Spinki do mankietów

  • Lista języków (angielski) - ponad 2500 języków z krótkimi opisami
  • Historia języków komputerowych (angielski) - historia języków programowania (od 1954 do maja 2004) (zawiera regularnie aktualizowany wykres)
  • Przykłady (angielski) - przykłady programowania w 162 językach
  • Popularność języków programowania (angielski) - badanie popularności języków programowania za rok 2004
  • 10 języków programowania, których warto się uczyć (2006)
  • Programming Community Index (angielski) - regularnie aktualizowany ranking popularności języków programowania
  • Computer Language Shootout Benchmarks (angielski) - porównanie języków programowania pod względem wydajności
  • Języki programowania, które się kocha (angielski) - porównanie języków programowania według „miłości” i „nienawiści” dla nich

Fundacja Wikimedia. 2010.

Języki programowania

Język programowania – formalny system znaków przeznaczony do opisywania algorytmów w wygodnej dla wykonawcy formie (np. komputer, czyli komputer).

Język programowania definiuje zbiór reguł leksykalnych, syntaktycznych i semantycznych używanych do tworzenia programu. Pozwala programiście dokładnie określić, na jakie zdarzenia zareaguje komputer, w jaki sposób dane będą przechowywane i przesyłane oraz jakie działania należy na tych danych wykonać w różnych okolicznościach.

Od czasu stworzenia pierwszych programowalnych maszyn ludzkość wymyśliła ponad 2500 języków programowania. Co roku ich liczba jest uzupełniana o nowe.

Niektóre języki są używane tylko przez niewielką liczbę własnych programistów, podczas gdy inne stają się znane milionom ludzi. Profesjonalni programiści czasami wykorzystują w swojej pracy kilkanaście różnych języków programowania.

Każdy język programowania można przedstawić jako zbiór formalnych specyfikacji definiujących jego składnię i semantykę – czyli system reguł interpretacji poszczególnych konstrukcji językowych.

Specyfikacje te zazwyczaj obejmują opis:

    typy i struktury danych;

    semantyka operacyjna (algorytm obliczania konstrukcji językowych);

    semantyczne konstrukcje języka;

    biblioteki prymitywów (na przykład polecenia I/O);

    filozofia, cel i możliwości języka.

Wiele powszechnie używanych języków programowania ma międzynarodowe komitety normalizacyjne, które regularnie aktualizują i publikują specyfikacje i formalne definicje języka. W ramach takich komitetów kontynuowany jest rozwój i modernizacja języków programowania oraz rozwiązywane są problemy rozbudowy lub wspierania istniejących i nowych konstrukcji językowych.

Języki programowania są zwykle podzielone na niski poziom I wysoki poziom. Podział ten następuje w zależności od poziomu szczegółowości poleceń – im mniej szczegółów, tym wyższy poziom języka.

Języki programowania niskiego poziomu

Język programowania niskiego poziomu to język programowania zbliżony do programowania bezpośrednio w kodzie maszynowym. Języki niskiego poziomu zazwyczaj korzystają z funkcji określonej rodziny procesorów.

Językiem niskiego poziomu jest język monter(z angielskiego assembler - assembler) - nazwa tłumacza (kompilatora) z języka assemblera. Język asemblera jest często błędnie nazywany w skrócie „asemblerem”.

Polecenia języka asemblera odpowiadają w stosunku jeden do jednego poleceniom procesora i w rzeczywistości reprezentują wygodną formę symboliczną do zapisywania poleceń i argumentów.

Zazwyczaj programy lub sekcje kodu są pisane w języku asemblera niskiego poziomu w przypadkach, gdy dla programisty krytyczna jest optymalizacja parametrów, takich jak wydajność (na przykład podczas tworzenia sterowników urządzeń) i rozmiar kodu (sektory startowe, oprogramowanie dla różnych urządzeń , wirusy, zabezpieczenia napowietrzne itp.). d.).

Języki programowania wysokiego poziomu

Język programowania wysokiego poziomu to język programowania zaprojektowany tak, aby był szybki i łatwy w użyciu przez programistę. Termin „wysoki poziom” oznacza tutaj, że język jest przeznaczony do rozwiązywania abstrakcyjnych problemów wysokiego poziomu i nie operuje instrukcjami dotyczącymi sprzętu, ale koncepcjami logicznymi i abstrakcją danych. Pozwala to na szybkie programowanie złożonych zadań i zapewnia względną niezależność od sprzętu. Zastosowanie różnorodnych tłumaczy pisemnych i ustnych gwarantuje, że programy napisane w językach wysokiego poziomu komunikują się z różnymi systemami operacyjnymi i różnym sprzętem, przy czym ich kod źródłowy pozostaje w dużej mierze niezmieniony.

Język wysokiego poziomu nie zapewnia możliwości tworzenia precyzyjnych instrukcji dla sprzętu. Zatem programy napisane w językach wysokiego poziomu są łatwiejsze do zrozumienia dla programisty, ale są znacznie mniej wydajne niż ich odpowiedniki napisane w językach niskiego poziomu. W szczególności dlatego większość profesjonalnych języków programowania wysokiego poziomu ma obecnie wbudowaną obsługę jednego lub drugiego języka niskiego poziomu - języka asemblera.

Za pierwszy język programowania wysokiego poziomu uważa się komputer Język plankalkulski, opracowany przez niemieckiego inżyniera Konrada Zuse w latach 1942–1946. Jednak powszechne użycie języków wysokiego poziomu rozpoczęło się wraz z pojawieniem się Fortranu i stworzeniem kompilatora dla tego języka (1957).

Najpopularniejszymi obecnie językami wysokiego poziomu są C++, Visual Basic, Delphi, Java, Python, Ruby, Perl, PHP.

Większość nowoczesnych kompilatorów umożliwia łączenie w jednym programie kodu napisanego w różnych językach programowania. Pozwala to na szybkie pisanie złożonych programów przy użyciu języka wysokiego poziomu, bez utraty wydajności w zadaniach krytycznych czasowo, wykorzystując do nich części napisane w języku asemblera. Kombinację osiąga się na kilka sposobów:

    Wstawianie fragmentów w języku asemblera do tekstu programu (za pomocą specjalnych dyrektyw języka) lub pisanie procedur w języku asemblera. Metoda jest dobra do prostych transformacji danych, ale nie można jej użyć do stworzenia pełnoprawnego kodu asemblera z danymi i podprogramami, w tym podprogramami z wieloma wejściami i wyjściami, które nie są obsługiwane przez języki wysokiego poziomu.

    Kompilacja modułowa. Większość współczesnych kompilatorów działa w dwóch etapach. W pierwszym etapie każdy plik programu jest kompilowany do postaci modułu obiektowego. Po drugie, moduły obiektowe są łączone (łączone) w gotowy program. Piękno kompilacji modułowej polega na tym, że każdy moduł obiektowy przyszłego programu można w całości napisać we własnym języku programowania i skompilować przy użyciu własnego kompilatora.

Wizualne środowisko programowania Delphi

Szybki rozwój technologii komputerowej oraz zapotrzebowanie na skuteczne narzędzia do tworzenia oprogramowania i języków programowania doprowadziły do ​​pojawienia się systemów programistycznych skupionych na tzw. „szybkim rozwoju” – systemach RAD (Rapid Application Development).

Wśród takich systemów szybkiego tworzenia aplikacji możemy wyróżnić Borlanda Delphi, Borland C Builder i Microsoft Visual Basic. Opierają się one na technologii projektowania wizualnego i programowania zdarzeń, których istotą jest to, że środowisko programistyczne przejmuje większość rutynowych prac, pozostawiając programiście zaprojektowanie okien dialogowych i funkcji przetwarzania zdarzeń.

Delfy to środowisko szybkiego programowania, które wykorzystuje język obiektowy jako język programowania Obiekt Pascal.

Obiekt Pascal jest wynikiem rozwoju języka Turbo Pascal, który z kolei rozwinął się z języka Pascal. Pascal, zaproponowany po raz pierwszy przez szwajcarskiego naukowca N. Wirtha w 1970 roku, jest językiem całkowicie proceduralnym, Turbo Pascal, począwszy od wersji 5.5, dodał do Pascala właściwości obiektowe, a Object Pascal jest obiektowym językiem programowania o unikalnym właściwość dostępu do metadanych klas (czyli do opisu klas i ich składowych) w skompilowanym kodzie, zwana także introspekcją.

Programowanie to cała nauka, która pozwala na tworzenie programów komputerowych. Zawiera ogromną liczbę różnych operacji i algorytmów tworzących jeden język programowania. Czym więc jest i jakie są różne języki programowania? Artykuł zawiera odpowiedzi, a także zawiera przeglądową listę języków programowania.

Historię powstania i zmian języków programowania należy badać wraz z historią rozwoju technologii komputerowych, ponieważ pojęcia te są ze sobą bezpośrednio powiązane. Bez języków programowania nie byłoby możliwe stworzenie jakiegokolwiek programu obsługującego komputer, co oznacza, że ​​tworzenie komputerów stałoby się ćwiczeniem pozbawionym sensu.

Pierwszy język maszynowy został wynaleziony w 1941 roku przez Konrada Zuse, twórcę silnika analitycznego. Nieco później, w 1943 roku, Howard Aiken stworzył maszynę Mark 1, zdolną do odczytywania instrukcji na poziomie kodu maszynowego.

W latach pięćdziesiątych XX wieku zaczęło się zapotrzebowanie na tworzenie oprogramowania, a język maszynowy nie był w stanie obsłużyć dużych ilości kodu, dlatego stworzono nowy sposób komunikacji z komputerami. „Asembler” to pierwszy język mnemoniczny zastępujący instrukcje maszynowe. Z biegiem lat lista języków programowania tylko się zwiększa, ponieważ zakres technologii komputerowej staje się coraz szerszy.

Klasyfikacja języków programowania

W tej chwili istnieje ponad 300 języków programowania. Każdy z nich ma swoją własną charakterystykę i nadaje się do jednego konkretnego zadania. Wszystkie języki programowania można podzielić na kilka grup:

  • Zorientowany aspektowo (główną ideą jest oddzielenie funkcjonalności w celu zwiększenia wydajności modułów oprogramowania).
  • Strukturalny (oparty na idei stworzenia hierarchicznej struktury poszczególnych bloków programu).
  • Logiczne (oparte na teorii aparatu logiki matematycznej i regułach rozdzielczości).
  • Zorientowany obiektowo (w takim programowaniu nie stosuje się już algorytmów, ale obiekty należące do określonej klasy).
  • Multiparadygmat (połącz kilka paradygmatów, a programista sam decyduje, jakiego języka użyć w danym przypadku).
  • Funkcjonalne (główne elementy to funkcje, które zmieniają swoją wartość w zależności od wyników obliczeń danych źródłowych).

Programowanie dla początkujących

Wiele osób zastanawia się, czym jest programowanie? Zasadniczo jest to sposób komunikacji z komputerem. Dzięki językom programowania możemy przydzielać określone zadania różnym urządzeniom, tworząc specjalne aplikacje lub programy. Studiując tę ​​naukę na początkowym etapie, najważniejsze jest, aby wybrać odpowiednie (interesujące Cię) języki programowania. Poniżej znajduje się lista dla początkujących:

  • Basic został wynaleziony w 1964 roku, należy do rodziny języków wysokiego poziomu i służy do pisania programów użytkowych.
  • Python jest dość łatwy do nauczenia ze względu na prostą, czytelną składnię, jednak zaletą jest to, że można go używać do tworzenia zarówno zwykłych programów komputerowych, jak i aplikacji internetowych.
  • Pascal to jeden z najstarszych języków (1969) stworzony do nauczania uczniów. Jego współczesna modyfikacja jest ściśle typizowana i ustrukturyzowana, ale Pascal jest językiem w pełni logicznym, zrozumiałym na poziomie intuicyjnym.

To nie jest pełna lista języków programowania dla początkujących. Istnieje ogromna liczba składni, które są łatwe do zrozumienia i na pewno będą poszukiwane w nadchodzących latach. Każdy ma prawo samodzielnie wybrać kierunek, który będzie dla niego interesujący.

Początkujący mają możliwość przyspieszenia nauki programowania i jego podstaw dzięki specjalnym narzędziom. Głównym asystentem jest zintegrowane środowisko programistyczne dla programów i aplikacji Visual Basic („Visual Basic” to także język programowania, który odziedziczył styl języka Basic z lat 70. XX wieku).

Poziomy języków programowania

Wszystkie sformalizowane języki przeznaczone do tworzenia, opisywania programów i algorytmów rozwiązywania problemów na komputerach dzielą się na dwie główne kategorie: języki programowania niskiego poziomu (lista znajduje się poniżej) i języki wysokiego poziomu. Porozmawiajmy o każdym z nich osobno.

Języki niskiego poziomu służą do tworzenia instrukcji maszynowych dla procesorów. Ich główną zaletą jest to, że korzystają z zapisu mnemonicznego, czyli zamiast ciągu zer i jedynek (z systemu binarnego) komputer zapamiętuje znaczące, skrócone słowo z języka angielskiego. Najbardziej znane języki niskiego poziomu to „Assembler” (istnieje kilka podtypów tego języka, z których każdy ma wiele wspólnego, a różni się jedynie zestawem dodatkowych dyrektyw i makr), CIL (dostępny w .Net platforma) i kod bajtowy JAVA.

Języki programowania wysokiego poziomu: lista

Języki wysokiego poziomu tworzone są dla wygody i większej wydajności aplikacji, są dokładnym przeciwieństwem języków niskiego poziomu. Ich cechą charakterystyczną jest obecność konstrukcji semantycznych, które zwięźle i zwięźle opisują struktury i algorytmy programów. W językach niskiego poziomu ich opis w kodzie maszynowym byłby zbyt długi i niezrozumiały. Języki wysokiego poziomu są niezależne od platformy. Zamiast tego kompilatory pełnią funkcję tłumacza: tłumaczą tekst programu na elementarne instrukcje maszynowe.

Poniższa lista języków programowania: C („C”), C# („Csharp”), „Fortran”, „Pascal”, Java („Java”) – należy do najczęściej używanych składni wysokiego poziomu. Ma następujące właściwości: języki te współpracują ze złożonymi strukturami, obsługują typy danych łańcuchowych i operacje na informacjach we/wy plików, a także mają tę zaletę, że są znacznie łatwiejsze w obsłudze ze względu na czytelność i zrozumiałą składnię.

Najczęściej używane języki programowania

W zasadzie program można napisać w dowolnym języku. Pytanie: czy będzie to działać sprawnie i bezawaryjnie? Dlatego powinieneś wybrać najbardziej odpowiednie języki programowania, aby rozwiązać różne problemy. Listę według popularności można opisać w następujący sposób:

  • Języki OOP: Java, C++, Python, PHP, VisualBasic i JavaScript;
  • grupa języków strukturalnych: Basic, Fortran i Pascal;
  • wieloparadygmat: C#, Delphi, Curry i Scala.

Zakres programów i aplikacji

Wybór języka, w którym napisany jest konkretny program, w dużej mierze zależy od obszaru jego zastosowania. Na przykład do pracy z samym sprzętem komputerowym (pisanie sterowników i programów pomocniczych) najlepszą opcją będzie C („C”) lub C++, które są zawarte w głównych językach programowania (patrz lista powyżej) . A do tworzenia aplikacji mobilnych, w tym gier, warto wybrać Java lub C# („Csharp”).

Jeśli jeszcze nie zdecydowałeś w jakim kierunku chcesz pracować, polecamy rozpocząć naukę od C lub C++. Mają bardzo przejrzystą składnię i przejrzysty podział strukturalny na klasy i funkcje. Ponadto znając C lub C++, możesz łatwo nauczyć się dowolnego innego języka programowania.

Wprowadzenie komputerów do wszystkich dziedzin działalności człowieka wymaga od specjalistów o różnych profilach opanowania umiejętności korzystania z technologii komputerowej. Rośnie poziom przygotowania studentów uczelni wyższych, którzy już od pierwszego roku zapoznawani są z obsługą komputerów i prostych metod numerycznych, nie mówiąc już o tym, że podczas realizacji zajęć i projektów dyplomowych stosowanie technologii komputerowej staje się normą w zdecydowana większość uniwersytetów.

Technologia komputerowa jest obecnie wykorzystywana nie tylko w obliczeniach inżynierskich i naukach ekonomicznych, ale także w takich tradycyjnie niematematycznych specjalnościach, jak medycyna, językoznawstwo i psychologia. W związku z tym można stwierdzić, że wykorzystanie komputerów stało się powszechne. Pojawiła się duża kategoria specjalistów – użytkowników komputerów, którzy potrzebują wiedzy na temat wykorzystania komputerów w swojej branży – umiejętności pracy z istniejącym oprogramowaniem, a także tworzenia własnego oprogramowania dostosowanego do rozwiązania konkretnego problemu. I tutaj z pomocą użytkownikowi przychodzą opisy języków programowania.

2. Co to jest język programowania

Język programowania- formalny system znaków przeznaczony do opisywania algorytmów w wygodnej dla wykonawcy formie (np. komputer). Język programowania definiuje zbiór reguł leksykalnych, syntaktycznych i semantycznych używanych do tworzenia programu komputerowego. Pozwala programiście dokładnie określić, na jakie zdarzenia zareaguje komputer, w jaki sposób dane będą przechowywane i przesyłane oraz jakie działania należy na nim wykonać w różnych okolicznościach.

Od czasu stworzenia pierwszych programowalnych maszyn ludzkość wymyśliła już ponad dwa i pół tysiąca języków programowania. Co roku ich liczba jest uzupełniana o nowe. Niektóre języki są używane tylko przez niewielką liczbę własnych programistów, podczas gdy inne stają się znane milionom ludzi. Profesjonalni programiści czasami wykorzystują w swojej pracy kilkanaście różnych języków programowania.

Twórcy języka różnie interpretują to pojęcie język programowania. Wśród wspólnych punktów uznawanych przez większość programistów są następujące:

· Funkcjonować: Język programowania służy do pisania programów komputerowych, które służą do przesyłania do komputera instrukcji w celu wykonania określonego procesu obliczeniowego i organizacji sterowania poszczególnymi urządzeniami.

· Zadanie: Język programowania różni się od języków naturalnych tym, że służy do przesyłania poleceń i danych od osoby do komputera, natomiast języki naturalne służą wyłącznie do komunikowania się ludzi ze sobą. W zasadzie możemy uogólnić definicję „języków programowania” – jest to sposób przekazywania poleceń, rozkazów, jasnych wskazówek dotyczących działania; podczas gdy języki ludzkie służą również do wymiany informacji.

· Wykonanie: Język programowania może używać specjalnych konstrukcji do definiowania i manipulowania strukturami danych oraz kontrolowania procesu obliczeń.

3. Etapy rozwiązywania problemu na komputerze.

VT znalazło najskuteczniejsze zastosowanie przy przeprowadzaniu pracochłonnych obliczeń w badaniach naukowych i obliczeniach inżynierskich. Podczas rozwiązywania problemu na komputerze główna rola nadal należy do człowieka. Maszyna realizuje tylko swoje zadania według opracowanego programu. Rolę człowieka i maszyny łatwo zrozumieć, jeśli proces rozwiązywania problemu podzieli się na etapy wymienione poniżej.

Sformułowanie problemu. Etap ten polega na sensownym (fizycznym) sformułowaniu problemu i ustaleniu ostatecznych rozwiązań.

Budowa modelu matematycznego. Model musi poprawnie (adekwatnie) opisywać podstawowe prawa procesu fizycznego. Budowa lub wybór modelu matematycznego spośród istniejących wymaga głębokiego zrozumienia problemu i znajomości odpowiednich działów matematyki.

Rozwój Pucharu Świata. Ponieważ komputer może wykonywać tylko najprostsze operacje, nie „rozumie” sformułowania problemu, nawet w sformułowaniu matematycznym. Aby go rozwiązać, należy znaleźć metodę numeryczną, która pozwoli sprowadzić problem do jakiegoś algorytmu obliczeniowego. W każdym konkretnym przypadku należy wybrać odpowiednie rozwiązanie spośród opracowanych już standardowych.

Opracowanie algorytmu. Proces rozwiązywania problemu (proces obliczeniowy) zapisuje się jako ciąg elementarnych działań arytmetycznych i logicznych prowadzących do wyniku końcowego i nazywany jest algorytmem rozwiązywania problemu.

Programowanie. Algorytm rozwiązania problemu napisany jest w języku zrozumiałym maszynowo w postaci precyzyjnie określonej sekwencji operacji – programu. Proces ten odbywa się zwykle przy użyciu jakiegoś języka pośredniego, a jego tłumaczeniem zajmuje się sama maszyna i jej system.

Dostosowanie programu. Skompilowany program zawiera różnego rodzaju błędy, nieścisłości i błędy pisarskie. Debugowanie obejmuje monitorowanie programu, diagnozowanie (wyszukiwanie i ustalanie zawartości) błędów oraz ich eliminację. Program jest testowany poprzez rozwiązywanie problemów kontrolnych (testowych) w celu uzyskania pewności co do wiarygodności wyników.

Przeprowadzanie obliczeń. Na tym etapie przygotowywane są wstępne dane do obliczeń i przeprowadzane są obliczenia przy pomocy sprawdzonego programu. Jednocześnie, aby ograniczyć pracę ręczną przy przetwarzaniu wyników, można powszechnie stosować dogodne formy wydawania wyników w postaci informacji tekstowej i graficznej, w formie zrozumiałej dla człowieka.

Analiza wyników. Wyniki obliczeń są szczegółowo analizowane i sporządzana jest dokumentacja naukowo-techniczna.

4. Do czego służą języki programowania?

Proces działania komputera polega na wykonaniu programu, czyli zestawu bardzo konkretnych poleceń w bardzo określonej kolejności. Maszynowa postać instrukcji, składająca się z zer i jedynek, wskazuje dokładnie, jaką akcję powinien wykonać centralny procesor. Oznacza to, że aby nadać komputerowi sekwencję działań, które musi wykonać, należy określić sekwencję kodów binarnych dla odpowiednich poleceń. Programy w kodzie maszynowym składają się z tysięcy instrukcji. Pisanie takich programów jest zadaniem trudnym i żmudnym. Programista musi pamiętać kombinację zer i jedynek kodu binarnego każdego programu, a także kody binarne adresów danych użytych do jego wykonania. O wiele łatwiej jest napisać program w jakimś języku bliższym naturalnemu językowi ludzkiemu i powierzyć komputerowi pracę nad tłumaczeniem tego programu na kody maszynowe. Tak powstały języki zaprojektowane specjalnie do pisania programów - języki programowania.

Dostępnych jest wiele różnych języków programowania. W rzeczywistości możesz użyć dowolnego z nich, aby rozwiązać większość problemów. Doświadczeni programiści wiedzą, jakiego języka najlepiej użyć do rozwiązania każdego konkretnego problemu, ponieważ każdy język ma swoje własne możliwości, orientację na określone typy problemów i własny sposób opisywania pojęć i obiektów wykorzystywanych przy rozwiązywaniu problemów.

Wszystkie liczne języki programowania można podzielić na dwie grupy: języki niskiego poziomu I języków wysokiego poziomu.

Do języków niskiego poziomu zaliczają się języki asemblera (od angielskiego toassemble - assemble, assemble). Język asemblera wykorzystuje polecenia symboliczne, które są łatwe do zrozumienia i szybkie do zapamiętania. Zamiast ciągu kodów binarnych poleceń zapisywane są ich symboliczne oznaczenia, a zamiast binarnych adresów danych używanych przy wykonywaniu polecenia zapisywane są wybrane przez programistę symboliczne nazwy tych danych. Język asemblera jest czasami nazywany kodem mnemonicznym lub autokodem.

Większość programistów do pisania programów używa języków wysokiego poziomu. Podobnie jak zwykły język ludzki, język taki ma swój własny alfabet – zbiór symboli używanych w tym języku. Symbole te są używane do tworzenia tak zwanych słów kluczowych języka. Każde ze słów kluczowych spełnia swoją funkcję, tak jak w naszym ojczystym języku słowa utworzone z liter alfabetu danego języka mogą pełnić funkcje różnych części mowy. Słowa kluczowe są łączone w zdania zgodnie z pewnymi regułami syntaktycznymi języka. Każde zdanie definiuje pewną sekwencję działań, które musi wykonać komputer.

Język wysokiego poziomu pełni rolę pośrednika między człowiekiem a komputerem, umożliwiając osobie komunikowanie się z komputerem w sposób bardziej znany człowiekowi. Często taki język pomaga wybrać właściwą metodę rozwiązania problemu.

Przed napisaniem programu w języku wysokiego poziomu programista musi napisać algorytm rozwiązanie problemu, czyli plan działania krok po kroku, który należy wykonać, aby rozwiązać ten problem. Dlatego często nazywane są językami wymagającymi wstępnej kompilacji algorytmu języki algorytmiczne.