Различни езици за програмиране и техните области на приложение. Лекция в Yandex

Zalina 13 януари 2016 г. в 15:42 ч

Различни езици за програмиране и техните области на приложение. Лекция в Yandex

  • Блог на компанията Yandex,
  • Разработка на уебсайтове,
  • програмиране,
  • Индустриално програмиране

Решихме да посветим първата си публикация тази година на много основна тема, лекция по която беше изнесена в Small Shad. В нея участват гимназисти, които се интересуват от технологии, откъдето идва и спецификата на презентацията – лекцията ще бъде особено интересна за тези, които тепърва започват да програмират и обмислят в каква посока да се развиват. За тях Yandex има курс „Въведение в програмирането (C++)“, който може да се вземе на платформата Stepic.org.

Преподавателят Михаил Густокашин е куратор на академичните програми в Yandex, директор на центъра за студентски състезания към Факултета по компютърни науки на Висшето училище по икономика. Михаил е обучил десетки победители и призьори на Всеруските олимпиади по програмиране.

Лекцията говори за това какви езици за програмиране има, как се различават, как са се появили и кои са по-добри и кои са по-лоши. В началото ще поговорим малко за историята на езиците - как са се появили, как хората са започнали да програмират, как се е развило всичко, какво се случва сега. Втората част ще засегне за какви задачи кой език е подходящ, как да „изберете любимия си език и да се насладите на живота“. Лекторът също ще говори малко за това как според него можете да научите всичко това и след това да си намерите работа.

Както винаги, под изрезката има подробен препис на лекцията, така че да можете да навигирате в нейното съдържание.

История на езиците за програмиране

Да започнем отначало. В началото компютрите дори не са имали клавиатури! Тоест всичко беше много лошо - нямаха нито клавиатура, нито екран, имаха само перфокарти (това са малки неща с дупки или без дупки). Съответно или са забили карфиците там, или са осветили там. Ако има дупка (или обратното не) - това означава нула или единица. А програмите по това време са били написани с помощта на машинни кодове - всяка операция на компютър (събиране, изваждане, някои по-сложни операции) е имала някакъв машинен код. Хората сами избраха този код от знак, всякакви адреси в паметта, те го избиха с ръцете си и го поставиха в четеца - и всичко беше преброено. Разбира се, тогава работата на програмиста вероятно не беше особено интересна - правенето на дупки - и с развитието на науката и технологиите, разбира се, те започнаха да измислят всякакви по-„интересни“ неща. Например асемблер, който вече улесни донякъде живота.

Е, как той направи живота по-лесен? Вместо да се помни, че има някакъв вид „магически“ код за командата, бяха използвани всякакви думи, които бяха подобни на „човешкия“ английски – някои add или mov – и след това регистри или области на паметта, променливи, с които те бяха необходими бяха изброени извършват операции. Но е ясно, че това като цяло също изисква доста умствени усилия, за да запазим в главите си в кой регистър какво имаме, къде какви променливи са и какво се случва като цяло. Защо се случи това? Защото компютрите бяха „глупави“ и не можеха да разберат нищо по-„умно“. Всъщност асемблирането на машинен код от асемблер също изисква време и памет (по това време, разбира се, имаше малко).

Постепенно стана ясно, че разработването на толкова големи комплексни програми е много трудно. Производителността на програмиста в тези екипи беше изключително ниска - тоест той пишеше няколко реда на ден (смислени), като всеки ред не правеше нищо особено - някакви прости аритметични операции. И хората искаха да направят езиците много по-сходни с човешкия език, по-специално с английския, за да направят писането на програми по-лесно и по-удобно. И тръгваме!

Стари и мъртви езици

Един от първите езици беше Fortran. Между другото, той също беше перфориран на перфокарти - имаше специални перфорирани карти за перфориране на Fortran програми. Но ако сега вземете този Fortran, според мен дори е някъде между 50-60. се появи - и ако се опиташ да напишеш нещо на него, ще ти е много неприятно, гарантирам ти! Модерният Fortran все още е жив, но е доста различен от това, което беше преди.

Други езици - сега ще напиша едно нещо, за което вероятно сте чували само на различни събития, където се говори за историята на програмирането - това е COBOL. Това беше език за писане на бизнес приложения. Какво представляват бизнес приложенията? Някои транзакции в банки, нещо друго, всичко това беше написано на Cobol. Разбира се, тук не е много популярно. Мисля, че ще ви е много трудно да намерите програмист на Cobol в Москва. И някъде не в Москва - с още по-голяма трудност. Но, изненадващо, само преди 10 години повече от половината от целия код, написан от човечеството, беше написан на Кобол. И до днес значителна част от всички банкови транзакции се извършват с помощта на програми, написани на него (COBOL), и хората все още пишат нещо в него.

Има и „забавен“ език, той се нарича Алгол (68-та версия, която характеризира годината на създаването му). Това е алгоритмичен език. Като цяло там успяха да направят нещо, но сега не ни интересува много какво могат. И с това можем да завършим нашата екскурзия в древността и в относително неизползваните езици и да преминем към това, което все още е живо (и активно живеещо).

Стари, но живи езици

Algol е измислен в Европа, а Fortran се използва предимно в Щатите - няма големи разлики. Каква тенденция се забелязва? Отначало всичко беше сложно и за да пишеш трябваше да си почти инженер, електроинженер, да разбираш къде кои контакти се свързват и още нещо за програмиране. След това също трябваше да седите с парчетата хартия и да броите паметта, да се грижите за нея. И постепенно всичко стана по-просто, по-просто, по-просто и след това още по-просто за програмиста - да мисли колкото се може по-малко за човек, да прави колкото се може повече автоматично. Около края на този период (лекторът посочва Алгол и Кобол) започват да се появяват езици, които в известен смисъл са „оцелели“ до днес.

ОСНОВЕН. Може би някои хора все още пишат нещо в него, поне видях, че в някои институции преподават в QBasic - има син прозорец, където е написано "1989". Като цяло той "живее с всички сили"! Той е измислен като език за непрограмисти. По това време програмистът беше много специализирана професия. И тук ви казват: „Имаме страхотен базов език и всеки разумен човек може да напише програма на него - лесно е.“ Отново този BASIC и съвременният BASIC са огромна разлика. Всички тези редове, номерирани след 10, всякакви GOTO и други ужаси - те вече нямат нищо общо със съвременния BASIC и дори с BASIC от 1989 г. нямат нищо общо с него.

Друга забавна история е езикът Паскал, широко известен в университетските среди, предимно в Русия и страните от бившия Съветски съюз. Той е бил и продължава да се използва изненадващо като език за преподаване. В останалия свят се среща по-рядко, но също е жив и здрав. Има такъв човек като Вирт - той е учен, теоретик. Той участва в дискусията на Алгол, не му хареса случилото се и той излезе със свой собствен език - Паскал. И тогава компанията Borland (а преди това много други компании - в частност Apple беше замесена) го взе и развали всичко. Той имаше красива, последователна теория - „всичко ще бъде наред“ - и те я взеха и я напълниха с това, от което хората се нуждаеха, за да работят. Е, не се оказа толкова красиво, колкото искаше.

И накрая... C е изобретен от инженери. Ако Pascal е изобретен от учен, тогава C е изобретен от Kernighan и Ritchie, те са работили като инженери в Bell. Как се случи това? По това време беше невъзможно да се напише нещо системно на тези езици (лекторът посочва Fortran, COBOL, Algol). Какво е "системно"? Например операционна система, някакви драйвери, нещо друго. Тези езици бяха предназначени за математически изчисления, за бизнес изчисления, за всичко това. И всичко останало беше написано в Събранието. Имаше едни езици, те вече са мъртви, тоест езикът С не се появи веднага от Асемблера, а чрез някакви междинни неща.

Какъв е смисълът? Керниган и Ричи обичаха да играят на играчката Астероиди - космически кораб лети и има астероиди, той стреля по тях и те се разпадат. Те имаха сървър, където играеха, но там имаше много хора и играчката беше бавна. И откриха някъде в офиса си, че имат някакъв компютър, който никой не използва. Но имаше проблем - беше с различна архитектура и играта беше написана на Assembly.

Те го пренаписаха, разбира се, дори добавиха някои функции, за да играят на него. Но това ги доведе до идеята, че пренаписването за нова архитектура всеки път не е много умно. И те решиха да напишат език от високо ниво, който би бил подходящ за системно програмиране, тоест, в който би било възможно да се управлява паметта, в който би било възможно да се разбере къде се намират нещата и как да се осъществи достъп до тези части от паметта . И така се появи езикът C, който оказа огромно влияние върху всичко, което последва. Всички те (лекторът посочва Algol, Fortran и други споменати езици) имаха голямо влияние, но C - просто да...

Съответно, това беше основният език в Unix, операционна система, която беше дори по-популярна по това време, отколкото е сега. А около 80-те години ситуацията беше нещо подобно (лекторът показва Basic, C и други споменати езици). Да кажем, че всичко това вече лека-полека е отмряло у нас (лекторът изтрива споменаванията на асемблер, фортран и алгол)... А през 80-те компютрите станаха по-малки, по-умни, по-евтини и хората искаха всякакви странни неща да направим живота още по-добър, да живеем още по-забавно.

Езици от 80-те години

Една от първите странности беше, че това беше език C++. Езикът C има огромен брой недостатъци (добре, просто като цяло огромни) - можете да правите всичко в него, включително да се стреляте в крака, да се стреляте в крака с фикция, в другия крак, да стреляте с единия крак в другия крака, общо взето - каквото искаш прави. Но в същото време някои архитектурни неща там се правят доста трудно - отново, както при Assembly, трябва да следим къде се намираме, каква и каква памет сме заделили; През цялото време „тече“ някъде, тази памет - тоест, разпределихме я, забравихме да я изтрием, изтрихме грешното нещо, надхвърлихме границите на паметта, като цяло - натрупахме куп проблеми.

C++ първоначално е създаден като набор от допълнения към езика C, които биха улеснили разработката. По това време обектно-ориентираното програмиране стана модерно и хората решиха, че всичко може да се опише под формата на йерархия, тоест имаш топка (абстрактна), наследяваш от нея футболна топка, волейболна топка, още една абстрактна топка . Тогава беше модерно, че „сега пишем всичко под формата на някаква йерархия и всичко ще бъде наред, животът ще се оправи, всичко ще бъде наред и това е“. C++ в известен смисъл имплементира този обектно-базиран подход - не беше първият обектно-ориентиран език за програмиране, но стана доста популярен и в него започнаха да се появяват всякакви функции. В същото време C++ запази почти пълна съвместимост (по това време) с езика C; програма, написана на C, беше успешно компилирана като C++ в 99% от случаите и дори работеше по същия начин. Това имаше за цел да улесни превключването от C към C++.

В допълнение към обектния подход (в C++) бързо се появи стандартна библиотека с шаблони (STL). Мисля, че в училище тези, които все още учеха Паскал, откриха, че първо, нямате вградено сортиране (в древния, син Borland Pascal, сега вече е в модерните версии) - има пример (източник код) сортиране, може да се копира и поставя. Но ако искате да сортирате цели числа тук, реални числа тук и низове тук, които могат да се сравняват помежду си, трябва да напишете три различни сортировки, които правят точно едно и също нещо, те просто имат различни типове данни. Това не е много добре и шаблоните, които не се появиха веднага в C++, значително облекчиха този проблем. Тоест имате абстрактна програма, която успешно сортира нещо, което може да се сравни едно с друго.

Скриптови езици от 90-те години

Но времето не спря, през 80-те години се случиха много интересни неща. Но някъде около началото на 80-те и 90-те години компютрите станаха толкова добри, че беше възможно да се правят много странни и много неефективни неща. По-специално, това бяха скриптови езици, които не бяха компилирани в машинен код, а по-скоро интерпретирани. BASIC също беше интерпретиран по някое време, но тези скриптови езици бяха предназначени главно за обработка на текст - това са например Perl, Python (тогава не беше много известен), PHP, Ruby - това са скриптовите езици че в една или друга степен в различна степен, те все още живеят (всички успяха да се появят преди 2000 г., дори много по-рано).

Нека ги прегледаме малко, защото това са специфични неща и сега се използват на много места. каква е идеята Ако не компилираме, тогава можем да позволим много повече. Например, една програма може да погледне своя код и по някакъв начин да го използва; тя знае какво се случва в нея и благодарение на това може да прави много интересни неща.

Perl беше предназначен за обработка на текст - в онези дни имаше толкова много памет в компютрите, че можете да пъхнете някакъв текст там и да направите нещо полезно с този текст (например да преброите думи, да направите някакъв вид търсене). Но, по мое мнение, той е проектиран от хора, които са били малко луди, защото има един виц за него: „Всеки набор от написани знаци е валидна програма на Perl.“ Според мен на него може само да се пише, не може да се чете. Когато гледам кода на Perl и се опитвам да разбера нещо, не разбирам нищо. Може би, ако го познавах по-добре, щях да разбера нещо, но както чух от тези хора, които все още знаят как, казват, че е по-лесно да го пренапиша отново. Тоест, програмите се оказват кратки и е наистина по-лесно да ги пренапишем от нулата, отколкото да разберем какво има и да го поправим.

Някъде по това време, в средата на 90-те, се появи интернет. Отначало беше поща, уебсайтове със статичен HTML, но хората искаха да добавят някаква динамика там, така че всичко да се случва динамично, да могат да се попълват някакви формуляри, да се правят книги за гости и нещо друго. Съответно това изискваше някакво взаимодействие, те измислиха протокол, как взаимодейства и най-важното генериране на тези статични (условно) страници, които ще бъдат „изплюти“ на потребителя в отговор на негова заявка.

Като цяло нищо друго освен Pearl не беше подходящо по това време. Писането на манипулатор на чист C или C++ беше лоша идея. И поради липса на нещо по-добро, по това време (и за доста дълго време) Pearl беше популярният език за уеб разработка. Разбира се, мащабите не могат да се сравняват с това, което се случва сега.

PHP се появи като... случайно. Един човек доста бързо спря това - направи си страница, имаше някаква книга за гости, нещо друго, други неща. И той написа набор от някои макроси за Perl, които бяха подобни на C, защото знаеше как да използва C, просто защото беше толкова удобно за него. И го нарекох Лична начална страница. Той го сподели и каза: „Хора, вижте какво написах, всичко тук е много по-ясно, отколкото в Perl и можете да го редактирате.“ И хората го харесаха.

След това се отказа от този бизнес. Като цяло, в резултат на това този PHP започна да живее и с времето стана много по-популярен от Perl. Но тази негова „родова травма“ (замислена като набор от макроси за Пърл) му изигра доста жестока шега. Езикът се оказа странен. Тоест, той се развива сам, никой не го е проектирал, никой не е администрирал процеса на разработка (нито компания, нито който и да е човек), но имаше много групи, всяка от които видя каквото иска. В резултат на това функциите са именувани по различен начин, дори няма стил, всичко е подчертано, основно случайно, настройките са тук и там и как ще работи всичко това не е много ясно. Но можете да седнете и да пишете на PHP за два часа, защото това е предназначението му.

Python и Ruby: Ruby е по-малко популярен сега, Python е някак по-добре „рендосан“, нека поговорим за това по-късно. Ясно е, че в онези дни това са били (лекторът посочва Perl, Python, Ruby, PHP) високоспециализирани езици за високоспециализирани цели. Като цяло никой не е писал системно програмиране, няма бизнес логика в тях по онова време и сега не го прави много.

Компилирани езици от 90-те години

Ще обиколим същите часове, но в другата посока. По това време използвахме C++ за почти всичко, което трябваше да се напише, не за мрежата, не за обработка на текст, а само за приложения, за операционни системи, за играчки - като цяло, за всичко. Но C++ всъщност е ужасен език. Защо? Защото, първо, той наследи всички проблеми със C поради обратна съвместимост. Там все още можете да се самоубиете по милиони различни начини, същите, които бяха в C (естествено, нови начини бяха добавени в C++). В същото време, ако напишете всичко добре и правилно, както е предвидено от авторите на C++, тогава, разбира се, вече не е възможно да се самоубиете с помощта на старите методи на C код и изглежда, че има по-малко тях. Той обаче имаше много странен, особен обектен модел. Разделянето на програма на модули, на части от някакъв вид, обикновено идва от C (ако знаете как да пишете включване на C или C++ - всъщност това е предназначено като начин просто да вмъкнете текста на библиотеката във вашата програма, в накрая, когато напишете куп включвания, имате всичко - ако е "примитивно", както беше в самото начало - всичко се вмъква в един файл и след това всичко отнема ужасно много време да се компилира, защото обикаля няколко пъти Същият Паскал, Виртовски, беше много по-внимателен в това отношение, по-късните версии станаха още по-добри.

Като цяло C++ има много недостатъци. Програмистът трябваше да е висококвалифициран, за да пише на C++, а такива програмисти бяха скъпи (и обучение, и нещо друго, тоест трудно се намират програмисти на пазара, трябва да им се плаща много и като цяло това е не е важното...). И нашите компютри броят все по-бързо, стават по-евтини, хората купуват нови компютри и искат повече приложения, повече играчки за телефоните си, като цяло - повече радост.

Така се появи Java. Има и доста забавна история за това как този език е получил името си. Там има програмисти, пият кафе през цялото време и по това време беше модерно да се пие кафе, което растеше на остров Ява. Езикът е замислен като език за вградени устройства, по-специално за кафе машина. Така се появи името...
Какво започна с нея, какво й беше хубавото и защо придоби толкова голяма популярност? Първо, те се отърваха напълно от наследството на Сишной. Няма знаци, още по-малко начини да откъснеш част от тялото си и да счупиш всичко. Второ, те въведоха много по-нови идеи по отношение на обектния модел - тоест C++ се появи много по-рано от Java и използваше по-архаичен, "див" обектен модел. Ами тук (лекторът сочи Java) тогава вече беше по-замислено и на теория хората мислеха, а на практика приложиха и направиха всичко много по-готино.

И накрая, трето. Нашите Java програми бяха компилирани не в машинен код, а в код за виртуална машина. Тоест имахте виртуална машина (VM) JVM - Java. Вашите програми бяха сглобени в някакво междинно представяне и след това, с помощта на тази машина, те вече бяха изпълнени. Какво даде? Първо, забави се, второ, изяде паметта със страшна сила, трето, беше преносим навсякъде (теоретично) - дори в кафемашина, дори в кафемелачка, дори в компютър, дори в мобилен телефон. От една страна, това е добре, тоест просто сте написали имплементация на виртуална машина, след което стартирате своите Java програми навсякъде. Но, от друга страна, лошо е, че същият телефон тогава имаше малко памет, ниска производителност и всичко това също започна да се забавя и забавя.

Но това дори не е основното нещо, за което езикът е изобретен на първо място. Езикът Java е изобретен, за да намали изискванията за квалификация на програмистите. Тоест, по-лошите програмисти могат да пишат добри програми на Java, защото тя не ви позволява да пишете лоши програми - там няма средства да пишете лоши програми. Там можете да пишете само добри програми. Е, в разбирането на създателите на езика.

Тоест, ако в C, в C++, в Python, във всичко, можем да създадем някакво ужасно сметище от нашия проект, където всичко е смесено, сглобявано за часове и нещо друго. В Java можете също да създадете боклук, но за това трябва да положите малко усилия. Тоест по подразбиране това не е „сметище“, възникват други проблеми, че нещо е наследено и наследено - като цяло за един смислен ред има десет не много смислени. Но такъв средно квалифициран програмист може да напише доста висококачествен код.
Почти сме на финала. При нас следващото нещо, което се появи беше .Net (dotnet) и по-специално ни интересува C# (почти същото [лекторът посочва Java], тоест има разлики в детайлите, ако избирате между тях , вижте къде плащат повече пари).

И още нещо - JavaScript. Няма нищо общо с езика Java, появи се същата година - думата беше модерна, лицензираха търговската марка да я използват.

Кое е основното, на което трябва да обърнете внимание? (Лекторът чертае стрелки от C++ към Java, .Net, C#, JavaScript и PHP). За да напишете проста програма на един от тези езици и на много други - ако знаете C++, обикновено не е нужно да знаете нищо друго - пишете на C++ и след това добавяте долари в началото, нещо друго прави малки неща и започва да работи върху каквото и да било (лекторът посочва езиците, на които са присвоени стрелките от C++). Тоест те са изключително сходни в някои прости неща. Ако решавате някакви училищни проблеми, образователни проблеми или нещо друго (не проектирате голям проект - имате един файл, който чете числа, показва числа в конзолата и прави нещо друго), тогава почти няма разлика между тези езици. Ясно е, че JavaScript и PHP са специализирани, при тях всичко е малко по-различно. Но тук (лекторът посочва Java и C#) има съвсем малка разлика.

Оттогава се появиха още какви ли не интересни неща, но не е ясно дали ще живеят или ще умрат успешно. Какво използват сега, за какви цели?

Избор на език в зависимост от задачата

Да приемем, че сте изправени пред задачата да напишете драйвер за видеокарта. Какъв език ще използвате днес? (Викове от публиката: Java!) Защо... Java е страхотна, но защо не Ruby или PHP? (Лекторът говори саркастично.)

Програмиране на ниско ниво

Ако пишете нещо на ниско ниво, тогава най-добрият избор е C, но всъщност съм чувал (но не съм виждал), че C++ се използва за това. Но имам малко вяра в това, защото в C можете ясно да контролирате - след като сте дали толкова много байтове памет, това означава, че ще има толкова много. А в C++ (STL) как се имплементира низ? Е, по някакъв начин беше изпълнено. И в крайна сметка не знаем как и какво се случва там, може би ще ни свърши паметта на нашата видеокарта или ще се случи нещо друго. Следователно C все още живее и не умира, такива задачи за системно програмиране все още съществуват - напишете операционна система, напишете драйвери, напишете нещо друго - C е страхотен за това. В допълнение, сега се появяват всякакви устройства (интернетът на нещата е обещан да дойде скоро), които работят на батерии (и, естествено, ще има милиони от тях, всичко ще бъде покрито с този интернет на нещата), те трябва да са много евтини и да консумират много малко електроенергия. Съответно ще има 2 KB памет, 5 kHz процесор и е ясно, че в близко бъдеще няма да може да прецакате някаква виртуална машина или скриптов език - което означава, че ще трябва да напишете нещо в C. И дори сега, например, изчислявайки на видеокарта (OpenCL или някаква друга технология) - те не измислят нов език, за да пишат програми за тях - те правят C с някои големи ограничения. Само защото хората вече знаят как, защо да научават нещо ново? Формално това вероятно също е в известен смисъл C.

Уеб програмиране

Да приемем, че искате да напишете нов Facebook (социална мрежа). На какво ще напишете това? (Хората от публиката говорят за HTML и CSS.) HTML и CSS са дизайн и искаме да е възможно да добавяте снимки, приятели и да оставяте коментари там.

За скриптовата част - тоест какво ще се случи от страна на клиента - това е JavaScript. Освен това понякога JavaScript се генерира на друг език и се изпраща (случва се скриптът да се генерира... защото понякога е по-лесно да се обработят някои промени в логиката).

Изненадващо, той е написан на PHP - и Facebook, и много други големи проекти. Разбира се, те трябваше да напишат някои свои неща, така че да работи нормално, а не по „тромав“ начин, но го направиха. По принцип малко или много няма значение на какво пишеш, но не ти препоръчвам Perl. Тук и сега, разбира се, никой не пише нищо за мрежата от нулата. Всеки пише някаква рамка или нещо друго. Онлайн магазин? Изтеглихме рамка за онлайн магазин - и това е, написахме онлайн магазин.

Програмиране за бизнеса

След това искате да напишете някакво скучно заявление за банка. Или например имате ли някой, който продава SIM карти? Може би някога сте купили телефон или нещо друго и сте казали: „Системата виси, не можем да направим нищо.“ Какво ще използвате, за да напишете такова приложение? (Викове от публиката за Python) Не можете да пишете това на Python, какво казвате?! Няма нужда да пишете нищо за бизнеса в Python. Защо? Защото, когато пишете нещо на Python, е невъзможно да откриете значителен брой грешки по време на процеса на писане. Python се въвежда динамично по всички възможни начини и като цяло можете да скриете грешка по такъв начин, че да изскочи в такава ситуация, че дори няма да можете да разберете какво са направили тези нечестиви потребители там, че всичко е счупен за теб. Тоест, в Python е по-добре да пишете малки скриптове за себе си - разбирате какво се случва там и какво се прави. Е, или нещо, което нямате нищо против да изхвърлите: искате да пуснете нещо преди вашите конкуренти, така че какво ще стане, ако то се повреди от време на време. Писал си на Python и това е - завладял си пазара. И ако пишеш нещо дълго време, например някакво приложение за банкиране (така че да одобрява кредити, нещо друго) - пишеш го на Java. Защото това е сериозна работа, документи, пари, документи, друго, но не може да го прецакате толкова, че всичко да се счупи, иначе хората ще се обидят - парите им отидоха и никъде не стигнаха, защото по някакъв начин в момента, в който низът се превърна в число или обратно. Така че, това означава, че методично го вземете в Java и пишете, пишете... Е, или в .Net, такива ситуации по принцип също се случват. Там, разбира се, също можете да срещнете проблеми, но все пак вероятността за това е малко по-ниска.

Програмиране за армията, космическата индустрия

Сега си представете, че са решили да ви изпратят на Луната с ракета. Какво бихте предпочели да се използва за написване на кода, който управлява ракетните двигатели? Нека да погледнем. Това, вероятно (лекторът показва Perl, Python, PHP, Ruby), не си заслужава - забавя се, нещо друго се случва и като цяло не бих се съгласил да летя на такава ракета. В C++? Честно казано, аз също не бих му се доверил, защото в C++ има твърде много начини да се самоубиете. Когато си някъде в космоса, не е много добре.

Може би в Java? Изглежда, че всичко там е доста надеждно и архитектурата е добра, няма диви типове, няма ненужни пътувания извън границите на паметта. Да кажем, че е настъпил най-важният момент и нашата Java е решила да събере боклука вместо нас. Трябва да кацнем, да намалим скоростта и тя казва: „Не, боклук отива“. Като цяло също не е много добре.

Честно казано, бих предпочел тази програма да е написана на Pascal. Разбира се, не харесвам Паскал, но по някакъв начин в такива неща би било много готино.

Използване на множество езици за разработка на софтуер

Е, какво трябва да се каже като цяло за съвременните езици. Сега много проекти не живеят на нито един език, тоест някои от тях живеят на един език, други на друг, а някои на трети. Например, ако имате някакво уеб приложение, което обработва диви количества информация, обажданията към дискове (дори не към бази данни, те са толкова огромни, че дори база данни там не може да се справи с вече написана такава) вероятно са записани в някакъв вид след това C на ниско ниво, за да пишете изключително бързо на диска и всичко това. Естествено, не си струва да напишете целия проект на C. Може би има някаква междинна логика, написана на Java, която извиква C функции за бързи повиквания. Е, интерфейсът (това, което потребителят гледа), разбира се, вече е написан в нещо, в някои скриптове, в нещо, което се изпълнява директно от браузъра (JavaScript). И всичко това живее заедно и си взаимодейства успешно.

Когато разработват някои приложения, дори и големи, понякога какво правят хората? Те го вземат и пишат прототип на Python (как ще работи всичко), скицират го, обмислят някаква архитектура. Писането върху него е наистина много бързо - те направиха прототип, експериментираха с него и казаха: „Уау! Това е толкова готино!“ И го пренаписаха изцяло. Изглежда, че са свършили работата два пъти, което отне два пъти повече време (добре, един и половина). Но не! Често се оказва, че този метод не е лош, защото ако напишете нещо веднага, например на Java, и след това решите: „Не, нека рефакторираме, променим напълно архитектурата и всичко това“, тогава ще похарчите 10 пъти повече време . Такива неща също съществуват и живеят.

Условия за успех на всеки език за програмиране

Сега нека поговорим защо някои добре изглеждащи езици не са оцелели или живеят в много ограничено пространство. Когато Вирт видя какви лоши компании направиха Apple, Borland и всички останали с неговия Pascal, той измисли още по-добър език - Oberon. Беше просто диво минималистичен - тоест имаше много малко команди (Низове? Защо ни трябват низове? Ще направим масив от знаци!). Е, нещо не му се получи, доколкото можеше да се получи.

Още нещо. Американските военни ги помолиха да разработят готин език, на който всичко работи и всичко може да бъде написано. Резултатът беше доста чудовищен език Ada, на който обаче все още пишат нещо, но отново само за военните.

Какъв е проблемът? Защо някои езици като Python, които никоя компания не поддържаше в началото, превзеха пазара. PHP, който също е лошо проектиран, също превзе пазара (по-голямата част) сам. И бяха инвестирани всякакви милиарди долари (лекторът посочва Ада) и не отидоха никъде, нищо не се случи. С какво е свързано това? Това се дължи на факта, че около тези езици няма инфраструктура. Тоест, езикът може да е отличен, но докато няма документация, докато няма общност, която да отговаря на въпроси (на Stack Overflow) и накрая, най-важното, докато няма голям брой на библиотеките, езикът не излита. Това е, например, искахте да напишете уебсайт на Oberon. Какво е, защо не? И караницата започва... Не можете да настроите собствен уеб сървър на Oberon, за да го тествате леко, не можете да свържете библиотеки, защото Oberon ги няма. И всичко това става с някакви патерици, силите изчезват и като цяло се отказвате и пишете уебсайта си на чисто C вместо Oberon. И тези езици, които живеят добре, са тези, които знаят как да използват библиотеки от други езици. Същият Python на онези места, където се забавя. Ами като цяло всякакви стандартни неща като сортиране и нещо друго са написани на C и той (Python) може да взаимодейства с тях.

Java също има Java Native Interface. Това по същество е C, тоест там (по мое мнение те винаги искат да го забранят, но изглежда, че все още не са го забранили) тези езици могат да взаимодействат с вече съществуващи библиотеки (главно C). И поради това те го вземат и работят. Идеята, която се опитвам да ви предам е ясна, нали? Не пишете на езици, които не поддържат C библиотеката. Е, ако искате да използвате нещо готино. Е, постепенно те (езиците) придобиват собствена инфраструктура. И живеят някак добре.

Език за програмиране и кариерно ориентиране

Сега нека поговорим за това как да разберете какво искате от живота. Кои са най-яките неща? Можете да правите малко системно програмиране, нали? Страхотно ви е да броите тези битове, искате да пуснете квадрокоптери, някакви камери и да правите нещо друго. Тогава вероятно С е вашият избор.

Ако искате да пишете, може би не най-интересните приложения в живота, но е страхотно да ги проектирате, да мислите за всичко това и да печелите много пари за това, че седите и скучаете през повечето време (трябва да платите за това ако сте добър в мис), ето ги - Java, .Net. Отиваш на работа в някоя банка, пишеш, отиваш на работа в девет с бяла риза, получаваш добра заплата и пишеш според препоръките на най-добрите Java разработчици, .Net овце и всичко останало...

Ако искате да напишете някои приложения, някакъв вид браузър, някакъв вид играчки или нещо друго, тогава C++ е страхотен. Ако искате да пишете уебсайтове, ето ги, езици по ваш избор (лекторът показва Perl, Python, PHP, Ruby), няма голяма разлика. Единственото нещо е, че PHP ще умре преди Python, така че ако ви мързи да научавате нови неща, тогава научете Python. Няма да забележите голяма разлика, но ще издържите по-дълго.

Какво се случва с Ruby също не е ясно. Е, можете да правите PHP, ако вече сте го научили, за щастие е толкова просто, че не отнема много време, за да го научите отново.

И накрая, има още една област на приложение на езиците за програмиране - това е, когато ги използва непрограмист. Да приемем, че сте математик, физик, химик, анализатор, всеки и трябва бързо да изчислите нещо, да анализирате някои данни (за биолози, например, колко арктически лисици живеят на Командорските острови). Можете да поставите всичко това в таблица в Excel или да го анализирате с нещо. Python също е добър за това, може да работи с текст и има много библиотеки, статистика и всичко останало. Ако искате да направите някакъв вид машинно обучение, да обработвате някои данни, да правите прогнози, тогава това също се прави в Python по най-бързия начин сега. Вярно е, че трябва да се отбележи, че задачите са много различни. Например, ако искате незабавно да търгувате на фондовата борса в условия, при които котировките се променят през цялото време, тогава без значение колко страхотно машинно обучение пишете на Python, хората, които го записват на нещо по-бързо, ще имат време да купят всичко преди Всичко ще бъдат зачетени за вас, дори ако техните алгоритми са по-лоши. Следователно дори тези задачи за машинно обучение (някои от тях) изискват висока производителност (и изключително висока производителност) и, съответно, други езици.

Единственият начин да разберете какво искате е да опитате всичко. Сега ще го кажа като една от визиите как можете да опитате всичко. Как да станеш програмист, и то щастлив? Така. Да започнем от чисто. Тук вие изучавате математика, руски език и други задължителни и избираеми предмети в училище, а знанията ви в областта на програмирането са отразени на дъската (лекторът посочва празна дъска) в момента. И искате да станете щастлив човек, да правите това, което обичате, да печелите много пари и да не си отказвате нищо и да сте щастливи.

Един от начините да постигнете това. Има, разбира се, всякакви вдъхновяващи истории за хора, които изобщо не са учили в университет или са напуснали и са станали милиардери, собственици на компании и т.н. Но трябва да се отбележи, че повечето хора, които може и да не са станали милиардери, но и живеят добре, все пак са завършили университет в даден момент.

Какво е положението с приема в университет (в момента учиш ли в училище)? Докато сте в училище, трябва да разберете, че следващата стъпка е да се запишете и да се погрижите за него. Издържайте Единния държавен изпит или спечелете олимпиадата. На Единния държавен изпит можете да използвате Pascal, C++ (включително чист C), Python (няма да ги споменавам повече). На олимпиадата има същия Pascal, същия C++, същия Python (сега ще говорим за неговите проблеми) и най-често има Java. Има и други неща, които се случват в зависимост от Олимпиадата, но не това е важното.

Как изглежда графиката на езиковото разпределение на Всеруската олимпиада по информатика? Хората, които участват във Всеруската, най-яката олимпиада, какво пишат? Изглежда така (тук означава Pascal, а тук е около 2000, а тук е около нула, тук е C++, а тук е 2015).

През 2000 г. почти никой не пише C++. Минаха 15 години и почти никой не пише на Паскал, въпреки факта, че Паскал е модерен. Това е език, който може да прави почти всичко по същия начин. Просто всички са станали твърде мързеливи, за да научат това, всяка нова тенденция, и продължават да пишат всичко на Borland Pascal, който, разбира се, не може да направи нищо. В C++ хората пишат някои алгоритми (STL) за сортиране - страхотно, написали са sort() и това е. На Паскал, на обикновен, на стария - това е проблем. Написахме някакъв комплект (трябваше) - супер, написахме го на C++, но на Pascal пак беше пълна мъка. Разбира се, можете да направите това с нови Pascals, но те обикновено струват пари. Може да не сте забелязали това, но е истина.

Има и Java, но Java има много букви. Става за големи проекти, но за малки еднократни програми се оказва много зле, защото има много излишни букви. Но някои хора също пишат, можете да се научите да пишете върху него. Но не е на Единния държавен изпит и мнозинството все още ще трябва да вземе Единния държавен изпит.

Какво е най-доброто за единния държавен изпит? За единния държавен изпит е най-добре (ако не знаете нищо и не ви учат на нищо в училище) да научите Python. Някои изпитни задачи могат да бъдат решени перфектно на него. На олимпиадата като цяло се оказва, че се използва C++, защото Python е много бавен, там не всичко се решава.

Така вие сте изучавали малко подмножество от езика и някои алгоритми (евентуално) и сте решили много задачи, за да получите диплома от вашата олимпиада и да влезете в университета, за да получите висше образование.

Сега ще говоря за това как структурираме курса в HSE, в какъв ред се преподават езиците, как се изучават приложната математика и компютърните науки във Факултета по приложни науки, които правим заедно с Yandex. През първия семестър - Python (не изцяло, приблизително колкото трябва да се учи в училище) и C++ (вече по-широк, много по-широк, отколкото обикновено се учи в училищата). Веднага да ви кажа, за да не се плашите, ако изведнъж искате да се запишете, ще кажете: „Какво, аз вече знам всичко това, защо да ходя някъде да уча? Предпочитам да отида някъде другаде. За тези, които вече знаят как да програмират добре, има възможност веднага да преминат към изучаване на алгоритми и в доста теоретична подготовка. Сега не ги разглеждаме, това (посочва дъската) е за тези, които са средно напреднали или изобщо не програмисти.

През първия семестър се преподават основите на Python, само за да се научат хората да програмират и никой да не се обиди много. Python рядко се преподава в училищата; повечето хора идват с познания по Pascal или C++. Най-вече дори Паскал, ако това е масово училище. Е, за да няма обидени, всеки учи нов език (все едно е в равни условия). И C++ просто защото от C++ можете да отидете навсякъде.

След това идва курсът Алгоритми и отделен курсов проект. Класически алгоритми с реализация. Не че сме взели нещо на теория и сме изчислили сложността. На лекцията го взехме, изчислихме сложността, на семинара го взехме и внедрихме алгоритъма. Проектът е мястото, където студентите правят нещо завършено. Например, един от проектите беше: пребройте... Да кажем, че имате много апартаменти в Москва и разбирате: „О, имам много допълнителни неща, ще дам някои под наем. И те определят определена цена и по някаква причина никой не иска да наеме апартамент от вас - вероятно е твърде скъпо. Или са определили някаква цена, веднага са ви я взели и си мислите: „О, вероятно съм го продал евтино“ - и вие също се разстройвате. Тоест, беше необходимо да се изчисли колко струва наемането на апартамент? Вие въвеждате данните - те създават оценка за вас. Такъв сайт, който се състоеше от няколко неща: вземете изречения, анализирайте ги, приложете някакъв вид (вероятно) прост алгоритъм за машинно обучение и направете красиво уеб лице, в което можете да изберете нещо, да въведете нещо, няколко метра, някакъв брой стаи , брой сауни, брой джакузита във вашия апартамент и груба оценка на разходите. Тоест някакво завършено, не много сложно нещо. Тук това означава (лекторът посочва курса по алгоритми) такъв core C++, с конзолен вход-изход. Е, ето (лекторът посочва надписа „проект“) нещо под ръководството на ментор, може би с бази данни, може би с парсинг на текст и нещо друго.
След това има трети семестър - това е курс, наречен "Компютърни системи". Има доста малко асемблер за разбиране (много малко) и след това нещо подобно на чист C и взаимодействие с операционни системи, системно програмиране по същество. И проектът за семинара също е нещо по темата за всички видове мрежови взаимодействия, доста ниско ниво: разработете някаква помощна програма, например rsync (синхронизация, може би знаете. На чист C, горе-долу, напишете аналог на rsync, който ще имате по мрежата да синхронизира папки с всички достъпи до файлове и т.н.).

И накрая, четвъртото. Дори не знам как да го нарека, това е такъв винегрет от технологии, необходими за истинско развитие, например уеб развитие. Тоест, това е практическото приложение на базите данни, отново нещо подобно на това, което е направено в проекта (лекторът посочва проекта от 2-ра година), но по-задълбочено. Тоест това са повече или по-малко конкретни неща, практическо програмиране. Паралелно с това има всякаква теория, а тук се занимават и с наука.

И след два курса хората тръгват да правят каквото им е интересно, защото това нещо обхваща доста широко основите на програмирането и до този момент хората вече разбират, че не искат да работят с компютърни системи при никакви обстоятелства (те не са като системно програмиране, например), но те искат да работят върху някои теоретични алгоритми, да изчисляват сложности, да измислят някои нови неща, разпределени или нещо друго. Или, напротив, смятат, че нямат много тук ( лекторът посочва линията на първия курс с Python и C++) отиде, след това ( Лекторът посочва третата линия на курса със системно програмиране) - Не ми харесва, броене на байтове и задаване на всякакви ограничения за четене и писане, правене на потоци, нишки и нещо друго. И в съответствие с това хората избират посока и учат. Това е по принцип, за да не развиете „синдром на патешко“ - вие бяхте първият, който видя вашия Pascal и сега казвате „Pascal е сила“; или по-напреднали - видяхте C++ и започнахте да говорите за всички, че C++ е силен, но всичко останало не е много добро.

Сега трябва да разгледаме това (лекторът посочва списъка с курсове на дъската) по-широко - това е един от методите, които бяха избрани, по-специално в HSE (наскоро се появи, така че е доста модерен). Има и други начини да се запознаете. В други добри университети редът е малко по-различен и се поставят други акценти. Но също така се опитват да запознаят хората с всичко, което имат.

Как да си търся работа като програмист

Ти си ( лекторът посочва списъка с курсове) направи всичко, учи в университета, направи нещо друго две години по-продуктивно и трябва да отидеш на работа. Как да изберем нещо за работа? Първо, вие сте се запознали с всичко, отишли ​​сте по-дълбоко някъде и вече знаете какво обичате. Трябва да изберете това, което обичате, естествено. Защото ако обичаш, полагаш усилия, ще имаш мотивация и като цяло всичко ще е наред. Защото не става въпрос само за пари, а за това да ви бъде интересно и приятно. Е, искате да влезете в готина компания и да си намерите работа. Какъв човек бих искал да видя лично аз? При мен да дойдат стотина студенти - двама ли да наема или един. Защо идват, изобщо не разбирам, кои са, какви са, как са? В най-добрия случай ще ми покажат дипломата, която са получили в университета, и аз ще кажа: „Уау! Това е готина диплома, но това не е толкова готино!“ И може и да греша, между другото. Може би човекът е имал много свободно време и е научил много по-добре.

Какво би било чудесно? Първо, някакъв проект с отворен код, който сте написали от началото до края. За предпочитане е, ако правя някакъв вид инфраструктура, така че данните да могат бързо да се четат, или нещо друго, тогава, разбира се, бих се интересувал да напиша нещо с отворен код за мен. Не направиха сайт, а нещо по темата. Защо се интересувам от това? Мога да погледна кода ви, мога да видя колко често сте се ангажирали, мога да видя как реагирате на грешки от потребители, грешки от разработчици, които го използват - всичко се записва, гледам всичко и си мисля: „Уау, този бъг не е Не съм бил там от две години.” затворено, тук отговорихте неучтиво на потребителя, ето нещо друго – няма да го приема.” Тоест това е ваш личен проект.

След това, какво друго би било страхотно? Бих искал да видя как сте се справили с екипната работа. Тоест идвате при мен на интервю и казвате: „С момчетата от университета направихме добра кандидатура. Там правех база данни, там правеха някакво мобилно приложение и там също работехме едно момче, момиче дизайнер, едно момче от техническа поддръжка. Бяхме петима и направихме страхотен проект.” Е, виждам, че наистина е ваш проект, казвам: „Какъв е вашият?“ Гледам отново кода и разбирам, че знаете как да работите в екип с хора.

Програмистът не е някой, който седи сам (инди) в гараж, някъде със загасени лампи, не говори с никого, пуска брада и пише. Все още има някакво взаимодействие с хората. С шеф например, който понякога може да те псува (шефовете, те са такива, не винаги са мили). И виждам, че умеете да работите с хора и ме радва, ако имате някакъв добър екип. Дори и да не е добре, по-добре е, отколкото да нямате такъв.

Какво друго бих искал аз лично? Ако сте се доказали в големи проекти. Например, вие сте ангажирали нещо в ядрото на Linux, ако се занимавате със системно програмиране, и сте коригирали някакъв бъг. Тоест, те показаха, че знаете как да четете кода на някой друг и знаете как да направите някои промени в него. Поглеждам: „О, наистина, разбрахте нещо сложно и поправихте някои грешки!“ И започвам да бъда много щастлив от това. Защото имам... е, не знам... програмистът ми напусна, защото конкурентите му предложиха по-висока заплата и спешно имам нужда от някой, който да заеме мястото му - при вас. Виждам, че сте писали само от нулата, но не знаете как да четете и редактирате кода на някой друг и се разстройвам.

И накрая, в зависимост от конкретната позиция, има различни други неща. Ако си намирате работа като анализатор, бих искал да решавате проблеми с анализа на данни в Kaggle. Ако кандидатствате за някои алгоритмични неща, бих искал да направите някои алгоритми в спортното програмиране. И накрая, ако сте мислили за професията, прочетете как се провеждат интервютата, видяхте, че някои хора там изразяват голямо недоволство: „Дойдох и ме попитаха какво ми е хобито. Седя като кукумявка и не отговарям, защото нямам хоби“, а те си мислят, че HR правят това. Всъщност те се опитват да разберат колко си приятелски настроен и адекватен. Ако сте недружелюбен и неадекватен, тогава колкото и да сте гениален и работохолик, твърд специалист с големи познания, на екипа ще бъде трудно да работи с вас и няма да можете да завършите проекта сам. Освен това, дори и да го извадите, можете да си представите каква е тежестта за компанията. Ами ако дойдете утре и кажете: „Увеличете ми заплатата 10 пъти, иначе ще ви напусна. Ясно е, че компаниите не искат да изпадат в подобна ситуация. Следователно култивирането на адекватност и добронамереност в себе си е толкова важно (като минимум), колкото и развиването на някои професионални умения.

За да обобщим, какво можем да кажем? Кои езици са добри и кои са лоши? Е, в рамките на определена група езици, например между Ruby, Python и PHP, какво трябва да изберете? Разбира се, правилният отговор е Python, но всъщност разликата между тях е в броя на разрешените бъгове, в броя на нещо друго - 5%, е, може би 10%. Тоест, ако вече имате готов проект, написан на PHP, тогава никой с здрав ум няма да каже: „Нека пренапишем всичко на Python.“ Те ще кажат: „Нека наемем повече PHP разработчици и да продължим да пишем на PHP.“ Страхотно, това е добър избор. Ясно е, че ако изведнъж решите да напишете някакъв проект, тогава може би е разумно да изберете Python сега. Въпреки че и това зависи. Може би имате много евтини PHP разработчици на пазара, а Python са скъпи и си мислите: „Да, технологията е по-готина, но ще спестя пари за готови разработчици.“ И всичко е супер, вече идвате и работите там.
Как да избера между Java и C++? Да, приблизително същото се случва. Мисля, че докато решите на какъв език да започнете нов голям проект, ще сте натрупали знания в професионалната си област и ще можете да направите правилния избор. Сега все още не е нужно да правите този избор и затова ви съветвам да правите това, което ви харесва.

Основите, както вече казах, самите, много основи на програмирането (какво е функция, какво са if’ics, for’ics, масиви, нещо друго) могат да се научат на повече или по-малко всеки език. Например в C++, тъй като има много прилики с него и има най-малко специфики в него (на това ниво) и има най-малко допълнителни букви за писане. Е, тогава, когато научите някои сложни архитектурни неща, ще научите и няма нужда да се тревожите твърде много за това. Тоест основното е да опитваш, да търсиш това, което ти харесва и когато разбереш, че вече е 4 часа сутринта, а ти седиш и пишеш за удоволствие, защото ти харесва - вероятно в този момент ясно е, че си намерил своето.

Програмен език

Програмен език- формална знакова система, предназначена за запис на компютърни програми. Езикът за програмиране определя набор от лексикални, синтактични и семантични правила, които определят външния вид на програмата и действията, които изпълнителят (компютърът) ще изпълнява под негов контрол.

  • функция:Езикът за програмиране е предназначен за писане на компютърни програми, които се използват за предаване на инструкции към компютър за извършване на определен изчислителен процес и организиране на управлението на отделни устройства.
  • Задача:Езикът за програмиране се различава от естествените езици по това, че е предназначен да предава команди и данни от човек към компютър, докато естествените езици се използват за комуникация между хората. Можем да обобщим определението „езици за програмиране” - това е начин за предаване на команди, заповеди, ясни насоки за действие; като има предвид, че човешките езици също служат за обмен на информация.
  • Екзекуция:Езикът за програмиране може да използва специални конструкции, за да дефинира и манипулира структури от данни и да контролира изчислителния процес.

Стандартизация на езиците за програмиране

Езикът за програмиране може да бъде представен като набор от спецификации, които определят неговия синтаксис и семантика.

Създадени са международни стандарти за много широко използвани езици за програмиране. Специални организации редовно актуализират и публикуват спецификации и официални дефиниции на съответния език. В рамките на такива комисии продължава развитието и модернизацията на езиците за програмиране и се решават въпроси за разширяване или поддържане на съществуващи и нови езикови конструкции.

Типове данни

Съвременните цифрови компютри обикновено са двоични и съхраняват данни в двоичен код (въпреки че са възможни и реализации в други бройни системи). Тези данни обикновено отразяват информация от реалния свят (имена, банкови сметки, измервания и т.н.), представляващи концепции от високо ниво.

Специалната система, чрез която се организират данните в една програма, е тип системапрограмен език; разработването и изучаването на типови системи е известно като теория на типовете. Езиците могат да бъдат класифицирани като системи със статично писанеи езици с динамично писане.

Статично въведените езици могат да бъдат допълнително подразделени на езици с задължителна декларация, където всяка декларация на променлива и функция има необходима декларация на тип и езици с изведени типове. Понякога се наричат ​​динамично въведени езици латентен тип.

Структури от данни

Типовите системи в езиците на високо ниво позволяват дефинирането на сложни, съставни типове, така наречените структури от данни. Обикновено структурните типове данни се формират като декартово произведение на основни (атомарни) типове и предварително дефинирани съставни типове.

Основните структури от данни (списъци, опашки, хеш-таблици, двоични дървета и двойки) често се представят чрез специални синтактични конструкции в езиците от високо ниво. Тези данни се структурират автоматично.

Семантика на езиците за програмиране

Има няколко подхода за дефиниране на семантиката на езиците за програмиране.

Най-разпространените разновидности са следните три: операционна, деривационна (аксиоматична) и денотационна (математична).

  • Когато описвате семантиката в рамките на оперативенподход, обикновено изпълнението на конструкции на език за програмиране се интерпретира с помощта на някакъв въображаем (абстрактен) компютър.
  • Производнасемантиката описва последствията от изпълнението на езикови конструкции, използвайки езика на логиката и определяйки пред- и постусловия.
  • ДенотационенСемантиката оперира с характерни за математиката понятия – множества, съответствие, както и съждения, твърдения и др.

Парадигма на програмиране

Програмният език се изгражда в съответствие с един или друг основен изчислителен модел и програмна парадигма.

Въпреки факта, че повечето езици са фокусирани върху императивния модел на изчисление, дефиниран от компютърната архитектура на фон Нойман, има и други подходи. Можем да споменем езици със стеков изчислителен модел (Forth, Factor, PostScript и т.н.), както и функционално (Lisp, Haskell и т.н.) и логическо програмиране (Prolog) и езика REFAL, базиран на изчислителния модел въведен от съветския математик А. А. Марков младши.

В момента активно се развиват и проблемно-ориентирани, декларативни и визуални езици за програмиране.

Начини за внедряване на езици

Езиците за програмиране могат да бъдат реализирани като компилирани или интерпретирани.

Програма на компилиран език с помощта на компилатор (специална програма) се преобразува (компилира) в машинен код (набор от инструкции) за даден тип процесор и след това се сглобява в изпълним модул, който може да бъде стартиран за изпълнение като отделна програма. С други думи, компилаторът превежда изходния код на програмата от език за програмиране на високо ниво в двоични кодове на инструкции на процесора.

Ако една програма е написана на интерпретиран език, тогава интерпретаторът директно изпълнява (интерпретира) изходния текст без предварителен превод. В този случай програмата остава на оригиналния език и не може да бъде стартирана без преводач. Компютърният процесор в това отношение може да се нарече интерпретатор на машинен код.

Разделението на компилирани и интерпретирани езици е условно. Така че за всеки традиционно компилиран език, като Pascal, можете да напишете интерпретатор. В допълнение, повечето съвременни „чисти“ интерпретатори не изпълняват директно езикови конструкции, а ги компилират в някакво междинно представяне на високо ниво (например с дерефериране на променливи и макроразширяване).

Компилатор може да бъде създаден за всеки интерпретиран език - например езикът Lisp, който е естествено интерпретиран, може да бъде компилиран без никакви ограничения. Кодът, генериран по време на изпълнение на програмата, може също да бъде динамично компилиран по време на изпълнение.

По правило компилираните програми се изпълняват по-бързо и не изискват допълнителни програми за изпълнение, тъй като вече са преведени на машинен език. В същото време всеки път, когато текстът на програмата се промени, тя трябва да бъде прекомпилирана, което забавя процеса на разработка. В допълнение, компилираната програма може да се изпълни само на същия тип компютър и обикновено под същата операционна система, за която е проектиран компилаторът. За да създадете изпълним файл за различен тип машина, е необходима нова компилация.

Интерпретираните езици имат някои специфични допълнителни функции (вижте по-горе), освен това програмите в тях могат да се изпълняват веднага след модификация, което улеснява разработката. Програма на интерпретиран език често може да се изпълнява на различни типове машини и операционни системи без допълнителни усилия.

Интерпретираните програми обаче работят значително по-бавно от компилираните и не могат да бъдат изпълнени без програма за интерпретатор.

Този подход в известен смисъл ви позволява да използвате предимствата както на интерпретаторите, така и на компилаторите. Трябва да се спомене, че има езици, които имат както интерпретатор, така и компилатор (Forth).

Използвани символи

Съвременните езици за програмиране са проектирани да използват ASCII, тоест достъпност за всички графика ASCII символите са необходимо и достатъчно условие за писане на всякакви езикови конструкции. Мениджъри ASCII знаците се използват в ограничена степен: разрешени са само връщане на каретка CR, подаване на ред LF и хоризонтален раздел HT (понякога също вертикален раздел VT и подаване на страница FF).

Ранните езици, появили се в ерата на 6-битовите знаци, използваха по-ограничен набор. Например азбуката Fortran има 49 знака (включително интервал): 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 = + - * / () . , $ " :

Забележително изключение е езикът APL, който използва много специални знаци.

Използването на не-ASCII знаци (като знаци KOI8-R или Unicode знаци) зависи от имплементацията: понякога те са разрешени само в коментари и константи на знаци/низове, а понякога и в идентификатори. В СССР имаше езици, където всички ключови думи бяха написани с руски букви, но такива езици не спечелиха голяма популярност (изключение е вграденият език за програмиране 1C:Enterprise).

Разширяването на набора от използвани символи е ограничено от факта, че много проекти за разработка на софтуер са международни. Би било много трудно да се работи с код, където имената на някои променливи са написани с руски букви, други с арабски, а трети с китайски йероглифи. В същото време, за да работите с текстови данни, езиците за програмиране от ново поколение (Delphi 2006, Java) поддържат Unicode.

Курсове по език за програмиране

Вижте също

Бележки

Литература

  • Хал Абелсън, Джералд Джей Съсман. Структура и интерпретация на компютърни програми
  • Робърт У. Себеста.Основни понятия на езиците за програмиране = Concepts of Programming Languages ​​​​/ Прев. от английски - 5-то изд. - М.: Уилямс, 2001. - 672 с. - 5000 бр. - ISBN 5-8459-0192-8 (руски), ISBN 0-201-75295-6 (английски)
  • Волфенхаген В. Е.Езикови конструкции за програмиране. Техники за описание. - М.: Център ЮрИнфоР, 2001. - 276 с. - ISBN 5-89158-079-9
  • Паронянов В.Д.Как да подобрите ума си. Алгоритми без програмисти - много е просто! - М.: Дело, 2001. - 360 с. - ISBN 5-7749-0211-0
  • Ф. Бианкузи, С. Уорден.Пионерите на програмирането. Диалози със създателите на най-популярните езици за програмиране. - Санкт Петербург. : Символ-Плюс, 2010. - 608 с. - ISBN 978-5-93286-170-7

Връзки

  • Езиковият списък (английски) - повече от 2500 езика с кратки описания
  • История на компютърните езици (английски) - история на езиците за програмиране (от 1954 г. до май 2004 г.) (съдържа редовно актуализирана диаграма)
  • Примери (английски) - примери за програмиране на 162 езика
  • Programming Language Popularity (English) - проучване на популярността на езиците за програмиране за 2004 г.
  • 10 езика за програмиране, които си струва да научите (2006)
  • Programming Community Index (английски) - редовно актуализирана класация на популярността на езиците за програмиране
  • Компютърни езици Shootout Benchmarks (английски) - сравнение на езиците за програмиране по ефективност
  • Езици за програмиране, които са обичани (английски) - сравнение на езиците за програмиране по „любов“ и „омраза“ към тях

Фондация Уикимедия. 2010 г.

Програмни езици

Програмен език – формална знакова система, предназначена да описва алгоритми във форма, която е удобна за изпълнителя (например компютър, т.е. компютър).

Езикът за програмиране дефинира набор от лексикални, синтактични и семантични правила, използвани за съставяне на програма. Той позволява на програмиста да определи точно на какви събития ще реагира компютърът, как ще се съхраняват и предават данните и какви действия трябва да бъдат извършени върху тези данни при различни обстоятелства.

От създаването на първите програмируеми машини човечеството е измислило повече от 2500 езика за програмиране. Всяка година техният брой се попълва с нови.

Някои езици се използват само от малък брой собствени разработчици, докато други стават известни на милиони хора. Професионалните програмисти понякога използват повече от дузина различни езици за програмиране в работата си.

Всеки език за програмиране може да бъде представен като набор от формални спецификации, които определят неговия синтаксис и семантика – система от правила за интерпретация на отделни езикови конструкции.

Тези спецификации обикновено включват описание на:

    типове и структури на данни;

    операционна семантика (алгоритъм за изчисляване на езикови конструкции);

    семантични конструкции на езика;

    библиотеки от примитиви (например I/O команди);

    философия, цел и възможности на езика.

Много широко използвани езици за програмиране имат комитети по международни стандарти, които редовно актуализират и публикуват спецификации и официални дефиниции на езика. В рамките на такива комисии продължава развитието и модернизацията на езиците за програмиране и се решават въпроси за разширяване или поддържане на съществуващи и нови езикови конструкции.

Езиците за програмиране обикновено се разделят на ниско нивоИ високо ниво. Това разделение става в зависимост от нивото на детайлност на командите - колкото по-малко детайли, толкова по-високо е нивото на езика.

Езици за програмиране на ниско ниво

Езикът за програмиране на ниско ниво е език за програмиране, който е близък до програмирането директно в машинен код. Езиците от ниско ниво обикновено използват функции на конкретно семейство процесори.

Езикът на ниско ниво е езикът асемблер(от английски асемблер - асемблер) - името на преводача (компилатора) от асемблер. Асемблерният език често е неправилно наричан накратко „асемблиране“.

Командите на асемблерния език съответстват едно към едно на командите на процесора и всъщност представляват удобна символна форма за писане на команди и аргументи.

Обикновено програмите или секциите от кода се пишат на асемблер от ниско ниво в случаите, когато е критично за разработчика да оптимизира параметри като производителност (например при създаване на драйвери на устройства) и размер на кода (зареждащи сектори, софтуер за различни устройства , вируси, режийна защита и др.). d.).

Езици за програмиране на високо ниво

Езикът за програмиране от високо ниво е език за програмиране, предназначен да бъде бърз и лесен за използване от програмиста. Терминът „високо ниво“ тук означава, че езикът е проектиран да решава абстрактни проблеми на високо ниво и работи не с инструкции за оборудване, а с логически концепции и абстракция на данни. Това ви позволява бързо да програмирате сложни задачи и осигурява относителна независимост от хардуера. Използването на различни преводачи и интерпретатори гарантира, че програмите, написани на езици от високо ниво, комуникират с различни операционни системи и различен хардуер, докато изходният им код остава до голяма степен непроменен.

Езикът от високо ниво не предоставя възможност за създаване на точни инструкции за хардуера. По този начин програмите, написани на езици от високо ниво, са по-лесни за разбиране от програмиста, но са много по-малко ефективни от техните колеги, написани на езици от ниско ниво. По-специално, ето защо повечето професионални езици за програмиране на високо ниво днес имат вградена поддръжка за един или друг език на ниско ниво - асемблер.

Първият език за програмиране от високо ниво се счита за компютърен Език планкалкюл, разработен от немския инженер Конрад Цузе през периода 1942–1946 г. Въпреки това, широкото използване на езици от високо ниво започва с появата на Fortran и създаването на компилатор за този език (1957 г.).

Най-разпространените езици на високо ниво в момента са C++, Visual Basic, Delphi, Java, Python, Ruby, Perl, PHP.

Повечето съвременни компилатори ви позволяват да комбинирате код, написан на различни езици за програмиране в една програма. Това ви позволява бързо да пишете сложни програми, използвайки език от високо ниво, без да губите производителност при критични за времето задачи, като използвате части, написани на асемблер за тях. Комбинацията се постига по няколко начина:

    Вмъкване на фрагменти на асемблер в текста на програмата (с помощта на специални езикови директиви) или писане на процедури на асемблер. Методът е добър за прости трансформации на данни, но не може да се използва за създаване на пълноценен асемблерен код с данни и подпрограми, включително подпрограми с много входове и изходи, които не се поддържат от езици от високо ниво.

    Модулна компилация. Повечето съвременни компилатори работят на два етапа. На първия етап всеки програмен файл се компилира в обектен модул. А на втория обектните модули са свързани (свързани) в завършена програма. Красотата на модулната компилация е, че всеки обектен модул на бъдеща програма може да бъде напълно написан на собствен език за програмиране и компилиран със собствен компилатор.

Среда за визуално програмиране Delphi

Бързото развитие на компютърните технологии и необходимостта от ефективни инструменти за разработка на софтуер и езици за програмиране доведоха до появата на системи за програмиране, фокусирани върху така нареченото „бързо развитие“ - RAD (Rapid Application Development) системи.

Сред такива системи за бързо разработване на приложения можем да подчертаем Borland Delphi, Borland C Builder и Microsoft Visual Basic. Те се основават на технологията на визуалния дизайн и програмирането на събития, чиято същност е, че средата за разработка поема по-голямата част от рутинната работа, оставяйки на програмиста да проектира диалогови прозорци и функции за обработка на събития.

Делфи е среда за бърза разработка, която използва обектно-ориентиран език като език за програмиране Object Pascal.

Object Pascal е резултат от развитието на езика Turbo Pascal, който от своя страна се развива от езика Pascal. Pascal, предложен за първи път от швейцарския учен N. Wirth през 1970 г., е напълно процедурен език, Turbo Pascal, започвайки с версия 5.5, добавя обектно-ориентирани свойства към Pascal, а Object Pascal е обектно-ориентиран език за програмиране с уникален свойство за достъп до метаданни на класа (т.е. до описанието на класовете и техните членове) в компилиран код, наричано също интроспекция.

Програмирането е цяла наука, която ви позволява да създавате компютърни програми. Той включва огромен брой различни операции и алгоритми, които образуват един език за програмиране. И така, какво е това и какви са различните езици за програмиране? Статията предоставя отговори и също така предоставя прегледен списък на езиците за програмиране.

Историята на появата и промените в програмните езици трябва да се изучава заедно с историята на развитието на компютърните технологии, тъй като тези понятия са пряко свързани помежду си. Без езици за програмиране би било невъзможно да се създаде каквато и да е програма за работа на компютър, което означава, че създаването на компютри би се превърнало в безсмислено упражнение.

Първият машинен език е изобретен през 1941 г. от Конрад Цузе, който е изобретателят на аналитичната машина. Малко по-късно, през 1943 г., Хауърд Айкен създава машината Mark 1, способна да чете инструкции на ниво машинен код.

През 50-те години на миналия век започва търсенето на разработка на софтуер и машинният език не може да се справи с големи количества код, така че е създаден нов начин за комуникация с компютри. "Асемблер" е първият мнемоничен език, който замества машинните инструкции. С течение на годините списъкът с езици за програмиране само се увеличава, тъй като обхватът на компютърните технологии става все по-широк.

Класификация на езиците за програмиране

В момента има повече от 300 езика за програмиране. Всеки от тях има свои собствени характеристики и е подходящ за една конкретна задача. Всички езици за програмиране могат да бъдат разделени на няколко групи:

  • Аспектно ориентиран (основната идея е разделянето на функционалността за повишаване на ефективността на софтуерните модули).
  • Структурен (въз основа на идеята за създаване на йерархична структура на отделни програмни блокове).
  • Логически (въз основа на теорията на апарата на математическата логика и правилата за разделителна способност).
  • Обектно-ориентиран (при такова програмиране вече не се използват алгоритми, а обекти, принадлежащи към определен клас).
  • Мултипарадигма (комбинирайте няколко парадигми, а програмистът сам решава кой език да използва в даден случай).
  • Функционални (основните елементи са функции, които променят стойността си в зависимост от резултатите от изчисленията на изходните данни).

Програмиране за начинаещи

Много хора се чудят какво е програмиране? По същество това е начин за комуникация с компютър. Благодарение на езиците за програмиране можем да възлагаме конкретни задачи на различни устройства, като създаваме специални приложения или програми. Когато изучавате тази наука в началния етап, най-важното е да изберете подходящи (интересни за вас) езици за програмиране. По-долу е даден списък за начинаещи:

  • Basic е изобретен през 1964 г., принадлежи към семейството на езиците от високо ниво и се използва за писане на приложни програми.
  • Python е доста лесен за научаване поради простия си, четим синтаксис, но предимството е, че може да се използва за създаване както на обикновени десктоп програми, така и на уеб приложения.
  • Pascal е един от най-старите езици (1969), създаден за обучение на студенти. Съвременната му модификация е строго типизирана и структурирана, но Паскал е напълно логичен език, който е разбираем на интуитивно ниво.

Това не е пълен списък с езици за програмиране за начинаещи. Има огромен брой синтаксиси, които са лесни за разбиране и определено ще бъдат търсени през следващите години. Всеки има право самостоятелно да избере посоката, която ще му бъде интересна.

Начинаещите имат възможност да ускорят обучението си по програмиране и неговите основи благодарение на специални инструменти. Основният помощник е интегрираната среда за разработка на програми и приложения Visual Basic (“Visual Basic” също е език за програмиране, наследил стила на езика Basic от 70-те години).

Нива на езиците за програмиране

Всички формализирани езици, предназначени за създаване, описване на програми и алгоритми за решаване на проблеми на компютри, са разделени на две основни категории: езици за програмиране на ниско ниво (списъкът е даден по-долу) и високо ниво. Нека поговорим за всеки от тях поотделно.

Езиците на ниско ниво са предназначени да създават машинни инструкции за процесори. Основното им предимство е, че използват мнемонични означения, т.е. вместо поредица от нули и единици (от двоичната бройна система), компютърът запомня смислена съкратена дума от английския език. Най-известните езици на ниско ниво са „Асемблер“ (има няколко подтипа на този език, всеки от които има много общо, но се различава само в набор от допълнителни директиви и макроси), CIL (достъпен в .Net платформа) и JAVA байт код.

Езици за програмиране на високо ниво: списък

Езиците на високо ниво са създадени за удобство и по-голяма ефективност на приложенията, те са точно обратното на езиците на ниско ниво. Тяхната отличителна черта е наличието на семантични конструкции, които кратко и стегнато описват структурите и алгоритмите на програмите. В езиците на ниско ниво тяхното описание в машинен код би било твърде дълго и неразбираемо. Езиците от високо ниво са независими от платформата. Вместо това компилаторите изпълняват функцията на преводач: те превеждат програмния текст в елементарни машинни инструкции.

Следният списък от езици за програмиране: C ("C"), C# ("C-sharp"), "Fortran", "Pascal", Java ("Java") - е сред най-използваните синтаксиси на високо ниво. Той има следните свойства: тези езици работят със сложни структури, поддържат низови типове данни и операции с файлова I/O информация и също имат предимството, че са много по-лесни за работа поради четимост и разбираем синтаксис.

Най-използваните езици за програмиране

По принцип можете да напишете програма на всеки език. Въпросът е дали ще работи ефективно и безпроблемно? Ето защо трябва да изберете най-подходящите езици за програмиране за решаване на различни проблеми. Списъкът по популярност може да бъде описан по следния начин:

  • ООП езици: Java, C++, Python, PHP, VisualBasic и JavaScript;
  • група структурни езици: Basic, Fortran и Pascal;
  • мулти-парадигма: C#, Delphi, Curry и Scala.

Обхват на програми и приложения

Изборът на език, на който е написана определена програма, до голяма степен зависи от областта на нейното приложение. Така например, за работа със самия компютърен хардуер (писане на драйвери и поддържащи програми), най-добрият вариант би бил C („C“) или C ++, които са включени в основните езици за програмиране (вижте списъка по-горе) . А за да разработвате мобилни приложения, включително игри, трябва да изберете Java или C# („C-sharp“).

Ако все още не сте решили в коя посока да работите, препоръчваме да започнете да изучавате C или C++. Те имат много ясен синтаксис и ясно структурно разделение на класове и функции. Освен това, познавайки C или C++, можете лесно да научите всеки друг език за програмиране.

Въвеждането на компютри във всички сфери на човешката дейност изисква специалисти от различни профили да овладеят уменията за използване на компютърни технологии. Повишава се нивото на обучение на студентите, които от първата година се запознават с използването на компютри и прости числени методи, да не говорим за факта, че при завършване на курсови и дипломни проекти използването на компютърни технологии се превръща в норма в по-голямата част от университетите.

Сега компютърните технологии се използват не само в инженерните изчисления и икономическите науки, но и в такива традиционно нематематически специалности като медицина, лингвистика и психология. В тази връзка може да се каже, че използването на компютри е широко разпространено. Появи се голяма категория специалисти - компютърни потребители, които се нуждаят от познания за използването на компютри в тяхната индустрия - умения за работа със съществуващ софтуер, както и създаване на собствен софтуер, адаптиран за решаване на конкретен проблем. И тук описанията на езиците за програмиране идват на помощ на потребителя.

2. Какво е език за програмиране

Програмен език- формална знакова система, предназначена да описва алгоритми във форма, която е удобна за изпълнителя (например компютър). Езикът за програмиране дефинира набор от лексикални, синтактични и семантични правила, използвани за съставяне на компютърна програма. Той позволява на програмиста да определи точно на какви събития ще реагира компютърът, как ще се съхраняват и предават данните и какви действия трябва да бъдат извършени върху него при различни обстоятелства.

От създаването на първите програмируеми машини човечеството вече е измислило повече от две и половина хиляди езика за програмиране. Всяка година техният брой се попълва с нови. Някои езици се използват само от малък брой собствени разработчици, докато други стават известни на милиони хора. Професионалните програмисти понякога използват повече от дузина различни езици за програмиране в работата си.

Създателите на езика тълкуват концепцията по различен начин програмен език. Сред общите точки, признати от повечето разработчици, са следните:

· функция:Езикът за програмиране е предназначен за писане на компютърни програми, които се използват за предаване на инструкции към компютър за извършване на конкретен изчислителен процес и организиране на управлението на отделни устройства.

· Задача:Езикът за програмиране се различава от естествените езици по това, че е предназначен да предава команди и данни от човек към компютър, докато естествените езици се използват само за комуникация между хората. По принцип можем да обобщим определението за „езици за програмиране“ - това е начин за предаване на команди, заповеди, ясни насоки за действие; като има предвид, че човешките езици също служат за обмен на информация.

· Екзекуция:Езикът за програмиране може да използва специални конструкции, за да дефинира и манипулира структури от данни и да контролира изчислителния процес.

3. Етапи на решаване на проблем на компютър.

VT намери най-ефективното си приложение при извършване на трудоемки изчисления в научни изследвания и инженерни изчисления. Когато решавате проблем на компютър, основната роля все още принадлежи на човека. Машината изпълнява задачите си само по разработената програма. Ролята на човека и машината е лесна за разбиране, ако процесът на решаване на проблем е разделен на етапите, изброени по-долу.

Формулиране на проблема.Този етап се състои от смислено (физическо) формулиране на проблема и определяне на окончателните решения.

Изграждане на математически модел.Моделът трябва правилно (адекватно) да описва основните закони на физическия процес. Изграждането или изборът на математически модел от съществуващите изисква задълбочено разбиране на проблема и познаване на съответните клонове на математиката.

Развитие на Световната купа.Тъй като компютърът може да изпълнява само най-простите операции, той не „разбира“ формулировката на проблема, дори и в математическа формулировка. За да се реши, трябва да се намери числен метод, който позволява да се сведе проблема до някакъв изчислителен алгоритъм. Във всеки конкретен случай е необходимо да се избере подходящо решение от вече разработени стандартни.

Разработка на алгоритъм.Процесът на решаване на проблем (изчислителен процес) се записва като последователност от елементарни аритметични и логически операции, водещи до крайния резултат и се нарича алгоритъм за решаване на проблем.

Програмиране.Алгоритъмът за решаване на задача е написан на машинно разбираем език под формата на точно определена последователност от операции – програма. Процесът обикновено се извършва с помощта на някакъв междинен език, а неговият превод се извършва от самата машина и нейната система.

Корекция на програмата.Компилираната програма съдържа различни видове грешки, неточности и технически грешки. Отстраняването на грешки включва наблюдение на програмата, диагностициране (търсене и определяне на съдържанието на) грешки и тяхното отстраняване. Програмата се тества чрез решаване на контролни (тестови) задачи за получаване на увереност в достоверността на резултатите.

Извършване на изчисления.На този етап се подготвят първоначални данни за изчисления и изчисленията се извършват с помощта на добре установена програма. В същото време, за да се намали ръчният труд при обработката на резултатите, могат да се използват широко удобни форми за издаване на резултати под формата на текстова и графична информация във форма, разбираема за хората.

Анализ на резултатите.Резултатите от изчисленията се анализират внимателно и се изготвя научно-техническа документация.

4. За какво са езиците за програмиране?

Процесът на работа на компютъра се състои от изпълнение на програма, тоест набор от много специфични команди в много специфичен ред. Машинната форма на инструкцията, състояща се от нули и единици, показва какво точно действие трябва да извърши централния процесор. Това означава, че за да дадете на компютъра последователност от действия, които той трябва да извърши, трябва да посочите последователност от двоични кодове за съответните команди. Програмите с машинен код се състоят от хиляди инструкции. Писането на такива програми е трудна и досадна задача. Програмистът трябва да запомни комбинацията от нули и единици от двоичния код на всяка програма, както и двоичните кодове на адресите на данни, използвани при нейното изпълнение. Много по-лесно е да напишете програма на някакъв език, който е по-близък до естествения човешки език, и да поверите работата по превеждането на тази програма в машинни кодове на компютър. Ето как възникват езици, предназначени специално за писане на програми - програмни езици.

Има много различни езици за програмиране. Всъщност можете да използвате всеки от тях, за да решите повечето проблеми. Опитните програмисти знаят кой език е най-добре да се използва за решаване на всеки конкретен проблем, тъй като всеки език има свои собствени възможности, ориентация към определени типове проблеми и свой собствен начин за описване на концепции и обекти, използвани при решаването на проблеми.

Всички много езици за програмиране могат да бъдат разделени на две групи: езици на ниско нивоИ езици на високо ниво.

Езиците на ниско ниво включват езици за сглобяване (от английски toassemble - сглобяване, сглобяване). Асемблерният език използва символни команди, които са лесни за разбиране и бързи за запомняне. Вместо последователност от двоични кодове на команди се записват техните символни обозначения, а вместо двоични адреси на данни, използвани при изпълнение на команда, се записват символни имена на тези данни, избрани от програмиста. Асемблерният език понякога се нарича мнемоничен код или автокод.

Повечето програмисти използват езици от високо ниво за писане на програми. Подобно на обикновения човешки език, такъв език има своя собствена азбука - набор от символи, използвани в езика. Тези символи се използват за съставяне на така наречените ключови думи на езика. Всяка от ключовите думи изпълнява своя собствена функция, както в познатия ни език думите, съставени от букви от азбуката на даден език, могат да изпълняват функциите на различни части на речта. Ключовите думи са свързани заедно в изречения според определени синтактични правила на езика. Всяко изречение определя определена последователност от действия, които компютърът трябва да извърши.

Езикът от високо ниво действа като посредник между човек и компютър, позволявайки на човек да комуникира с компютър по начин, по-познат за хората. Често такъв език помага да се избере правилният метод за решаване на проблем.

Преди да напише програма на език от високо ниво, програмистът трябва да пише алгоритъмрешаване на проблем, т.е. стъпка по стъпка план за действие, който трябва да бъде изпълнен, за да се реши този проблем. Следователно често се наричат ​​езици, които изискват предварителна компилация на алгоритъм алгоритмични езици.