Компютри Windows интернет

Език от високо ниво за писане на програми. Избор на език за програмиране. Нива на езика за програмиране

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

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

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

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

Лектор Михаил Густокашин - куратор на академични програми в Yandex, директор на Центъра за студентски олимпиади, Факултет по компютърни науки, HSE. Михаил е подготвил десетки победители и призьори на Всеруските олимпиади по програмиране.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Трябва да разберем за какво става дума, но програмирането означава за нас: ние пишем източник... Ние пишем този така наречен изходен код. Ние пишем кода и компютърът ни го превежда. За да обясните това, трябва да знаете как работи компютърът и какво означава програмиране.

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

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

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

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

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

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

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

Какви езици за програмиране?

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

Каква е разликата между по-високи и по-ниски езици за програмиране

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

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

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

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

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

Какво е необходимо за програмиране?

Например, трябва да знаете типа на стойността предварително, за разлика от скриптовите езици. Да приемем, че искате да програмирате програма. От какво имаш нужда? На първо място, компютър, който е незаменим, ако искате да стартирате програмата си. Всъщност почти само познаване на езика за програмиране. Така че определено сте получили всичко, само това, което трябва да напишете в редактора, сега може да се изненадате. Командите са това, което характеризира езика за програмиране с "граматика" и програмен синтаксис.

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

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

Какви елементи има езикът за програмиране?

Но това са само част от "граматическите правила", но ако знаете, че това вече е половината от наема. Има много елементи, които езикът за програмиране трябва да обясни, всички от които не биха били много полезни и само биха ви объркали. Вместо това трябва да знаете как да програмирате нещо сега, просто трябва да знаете за основните елементи. Както знаете, компютърът не разбира нищо, така че програмистът се опитва да даде на компютъра математически условия, за да му обясни, че има команда. Ако искате да програмирате, имате нужда от добро математически и логическо разбиране.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

PHP се появи като ... случайно. Един човек бързо спря да прави това - направи си собствена страница някаква, имаше някаква книга за гости, нещо друго, някакви неща. И той написа набор от някакъв вид макроси за Pearl, който изглеждаше като C, защото знаеше как да използва C, просто защото му беше толкова удобно. И го нарекох Personal HomePage. Сподели и каза: "Хора, вижте какво парче написах, тук всичко е много по-ясно, отколкото на Pearl и можете да го редактирате." И хората го харесаха.

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

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

Съставени езици от 90-те години

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

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

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

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

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

Тоест, ако в C, в C ++, в Python, върху каквото и да е, можем да разтворим някакъв страховит боклук от нашия проект, където имаме всичко объркано, събрано с часове и там още нещо. В Java можете също да разтворите кошчето за боклук, но за това вече трябва да положите известни усилия. Тоест по подразбиране не се оказва "кошче", възникват други проблеми, че нещо е било наследено и наследено там - общо взето за един смислен ред се получават десет не особено смислени. От друга страна, може би такъв средно квалифициран програмист може да напише доста качествен код.
Ние сме почти на края. При нас следващото нещо, което се появи, е .Net (ще достигне), добре, и по-специално ние се интересуваме от 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 и много други големи проекти. Разбира се, трябваше да си напиша свои неща, за да работи добре, а не както беше направен "tyap-blooper", но те го направиха. По принцип няма значение в какво пишете, но аз не препоръчвам Perl. Тук и сега, разбира се, никой не пише нищо от нулата за мрежата. Всеки пише някаква рамка или нещо подобно. Онлайн магазин? Изтеглихме рамка за онлайн магазин - добре, това е, написахме онлайн магазин.

Бизнес програмиране

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

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

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

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

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

Използване на няколко езика наведнъж за разработка на софтуер

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

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

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

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

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

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

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

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

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

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

Ако искате да напишете някои приложения, някакъв браузър, някои играчки, нещо друго, тогава 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 ++. Изминаха петнадесет години и почти никой не пише на Pascal, въпреки факта, че Pascal е модерен. Това е език, който може да прави почти всичко същото. Просто всички са станали твърде мързеливи да научат това, всяка нова тенденция и всички продължават да пишат на Borland Pascal, което разбира се не може да направи нищо. В C ++ хората пишат някакви алгоритми за сортиране (STL) - страхотно, те написаха sort () и това е всичко. На Pascal, на обикновен, на стари - това е проблем. Написаха някакъв набор (нужен) - страхотно, написаха го на C++, в Pascal пак мъките са непрекъснати. В новите Pascals, разбира се, можете да направите това, но те всъщност струват пари. Може да не сте забелязали това, но е така.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Като начало бих искал да кажа, че всеки може да управлява компютър и да създава програми. За създаване компютърни програмине е нужно да имате невероятна интелигентност или диплома по математика. Трябва ви само желание да измислите нещо и търпение, за да не напуснете часовете.

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

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

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

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

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

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

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

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

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

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

Стремежът, любопитството и въображението са трите най-важни качества, които всеки програмист трябва да притежава. Ако ги имате, трябва да се притеснявате само за малките неща: кой език за програмиране да научите (например C ++), какво не е наред с математиката и т.н.

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

Разбира се, в действителност компютърът разбира само един език на единици и нули, който се нарича машинен език. Обикновено програма, написана на машинен език, изглежда така:

0010 1010 0001 1101

ООН 1100 1010 1111

0101 ОНО 1101 0101

1101 1111 0010 1001

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

Сега бих искал да ви изясня какво трябва да отличава езика за програмиране (Basic, Pascal) от неговата реализация, която обикновено се представя като част от среда за програмиране (Quick Basic, Virtual Pascal) - набор от инструменти за редактиране на изходни текстове, генериране на изпълним код, отстраняване на грешки, управление на проекти и др. Синтаксисът и семантиката на езика за програмиране са фиксирани в езиковия стандарт. Всяка програмна среда предоставя свой собствен интерпретатор или компилатор от този език, което често позволява използването на конструкции, които не са фиксирани в стандарта.

Помислете за основните и популярни езици за програмиране

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

Кобол- Език за програмиране на високо ниво, разработен в края на 50-те години. Сдружение КАДАСИЛ за решаване на търговски и икономически проблеми. Различава се с усъвършенствани инструменти за работа с файлове. Тъй като командите на програми, написани на този език, активно използват обикновен английски речник и синтаксис, Cobol се счита за един от най- прости езиципрограмиране. В момента се използва за решаване на икономически, информационни и други проблеми.

Fortran- Език за програмиране на високо ниво, разработен от IBM през 1956 г. за описване на алгоритми за решаване на изчислителни проблеми. Принадлежи към категорията на процедурно ориентираните езици. Най-често срещаните версии на този език са Fortran IV, Fortran 77 и Fortran 90. Използва се във всички компютърни класове. Последната му версия се използва и на компютри с паралелна архитектура.

по дяволите- Език за програмиране на високо ниво, фокусиран върху приложението в системи в реално време и предназначен да автоматизира задачите за управление на процеси и/или устройства, например в бордови (корабни, авиационни и др.) компютри. Разработено по инициатива на Министерството на отбраната на САЩ през 80-те години. Кръстен на английската математичка Ада Аугуста Байрон (Ловлейс), живяла през 1815-1851 г.

ОСНОВЕН(Универсален символичен код за инструкции за начинаещи) Роден през 60-те години в Америка. BASIC е замислен като прост език за бързо учене. BASIC стана де факто стандарт за микрокомпютрите именно поради лекотата на учене и прилагане. За да се постигне това качество, бяха взети редица решения (липса на въвеждане, номериране на редове и неструктурно GOTO и др.), които влияят негативно на стила на обучение на програмиране. Освен това липсата на изразни средства доведе до появата на огромен брой диалекти на езика, несъвместими помежду си.Специализираните версии на BASIC (като Visual Basic), въпреки придобитата "структура", имат всички същите недостатъци, на първо място - небрежност по отношение на типове и описания. свързани системи) или като инструмент за бързо създаване на приложения.

ПаскалРазработен от известния теоретик Н. Вирт на базата на идеите на Алгол-68, Pascal е предназначен предимно за обучение по програмиране. Изграден на принципа "необходимо и достатъчно", той има силен контрол на типа, конструкции за описание на произволни структури от данни и малък, но достатъчен набор от оператори за структурирано програмиране. За съжаление, недостатъкът на простотата и строгостта са тромавите описания на езиковите конструкции. Най-известната реализация - Turbo / Borland Pascal - въпреки разликите от стандарта Pascal, е среда и набор от библиотеки, които правят език за преподаванеиндустриална система за разработване на програми в MS-DOS среда.

C и C ++Езикът C се основава на изискванията на системния програмист: пълен и ефективен достъп до всички компютърни ресурси, инструменти за програмиране на високо ниво, преносимост на програми между различни платформи и операционни системи. C ++, като поддържа съвместимост със C, въвежда възможности за обектно-ориентирано програмиране, като изразява идеята за клас (обект) като дефиниран от потребителя тип. Благодарение на тези качества C / C ++ зае позицията на универсален език за всяка задача. Но прилагането му може да стане неефективно, когато се изисква да се получи готов за използване резултат за възможно най-кратко време или когато самият процедурен подход става нерентабилен.

Delphi- това не е продължение на бизнеса Borland Pascal / Borland C, неговата ниша - т.е. бързо създаванеприложения (Rapid Application Developing, RAD). Такива инструменти ви позволяват бързо да създавате работна програмаот готови компоненти, без да губите много усилия за малките неща. Специално място в такива системи заемат възможностите за работа с бази данни.

Lisp- Алгоритмичен език, разработен през 1960 г. от Дж. Маккарти и предназначен да манипулира списъци с елементи от данни. Използва се главно в университетските лаборатории в САЩ за решаване на проблеми, свързани с изкуствения интелект. В Европа предпочитат да използват Prolog за работа по изкуствен интелект.

Пролог- Декларативен език за програмиране на високо ниво, предназначен за разработване на системи и програми за изкуствен интелект. Принадлежи към категорията езици от пето поколение. Разработен е през 1971 г. в университета в Марсилия (Франция) и е един от широко използваните и постоянно развивани езици. Последната му версия е Prolog 6.0


ЛОГО- Език за програмиране на високо ниво, разработен в Масачузетския технологичен институт около 1970 г. с цел преподаване на математически концепции. Използва се и в училища и потребители на компютри при писане на програми за създаване на чертежи на екрана на монитора и управление на плотер с писалка.

JavaКато отличен пример за специализация, Java езиксе появи в отговор на необходимостта от перфектно преносим език, който да изпълнява програмите ефективно от страна на WWW клиента. Поради спецификата на средата Java може да бъде добър изборза система, базирана на Интернет / Интранет технология.

АЛГОЛ- Език за програмиране на високо ниво, фокусиран върху описване на алгоритми за решаване на изчислителни проблеми. Създаден е през 1958 г. от специалисти от западноевропейски страни за научни изследвания. Версията на този език Algol-60 е приета от Международната конференция в Париж (1960 г.) и е широко използвана на компютрите от 2-ро поколение. Версията Algol-68, разработена от група специалисти от Международната федерация за обработка на информация (IFIP) през 1968 г., получи статут на международен универсален език за програмиране, фокусиран върху решаването не само на изчислителни, но и на информационни проблеми. Въпреки че в наши дни Алгол практически не се използва, той послужи като основа или оказа значително влияние върху развитието на повече модерни езици, например, Ada, Pascal и т.н.
Ако искате да зададете въпрос за конкретен език, използвайте форума за програмисти
на себе си по-добър езикне съществува. Ако ще станете професионалист в писането на програми, трябва да научите един от езиците за програмиране на високо ниво (най-популярният език за програмиране е C ++), както и един от езиците за програмиране на базата данни ( например SQL). След като научите езика за програмиране C ++, няма как да сбъркате. Познавайки този език, винаги можете да намерите работа във всяка компания за програмиране.

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

Ако ще работите сами, за предпочитане е да се научите да творите собствени програмиза бази данни. За да направите това, ще трябва да научите езици за програмиране като SQL или VBA, които се използват в Microsoft Access. За да създавате уеб страници, трябва да знаете HTML, както и малко познания по Java, JavaScript, VBScript и други езици за програмиране за Интернет. Най-необходим ще бъде езикът за програмиране, който ще ви позволи да решавате лесно и бързо поставените ви задачи. Може да бъде C ++, BASIC, Java, SQL или асемблер.
В заключение отбелязваме, че от професионална гледна точка не е толкова важно на какъв език и в каква среда работи програмистът, колко време върши работата си. Оборудването се сменя и операционна система... Нови задачи възникват от голямо разнообразие от предметни области. Те се отдръпват в миналото и се появяват нови езици. Но хората остават – тези, които пишат и тези, за които се пишат нови програми и чиито изисквания за качество остават същите, независимо от тези промени.
Тук разгледахме основите на програмирането и основните езици за програмиране.

Желая ти успех с изучаването на програмиране!