Forskellige programmeringssprog og deres anvendelsesområder. Foredrag i Yandex

Zalina 13. januar 2016 kl. 15.42

Forskellige programmeringssprog og deres anvendelsesområder. Foredrag i Yandex

  • Yandex virksomhedsblog,
  • Udvikling af hjemmeside,
  • Programmering,
  • Industriel programmering

Vi besluttede at afsætte vores første indlæg i år til et meget grundlæggende emne, et foredrag om hvilket blev holdt på Small ShAD. Det overværes af gymnasieelever, der er interesserede i teknologi, deraf præsentationens specificitet - foredraget vil især være interessant for dem, der lige er begyndt at programmere og tænker på, hvilken retning de skal udvikle. For dem har Yandex et kursus "Introduktion til programmering (C++)", som kan tages på Stepic.org-platformen.

Foredragsholder Mikhail Gustokashin er kurator for akademiske programmer på Yandex, direktør for centeret for studenterkonkurrencer ved Det Datalogiske Fakultet på Higher School of Economics. Mikhail har trænet snesevis af vindere og prisvindere af de all-russiske programmerings-olympiader.

Foredraget fortæller om hvilke programmeringssprog der findes, hvordan de adskiller sig, hvordan de fremstod, og hvilke der er bedre og hvilke der er værre. I begyndelsen vil vi tale lidt om sprogens historie - hvordan de så ud, hvordan folk begyndte at programmere, hvordan alting udviklede sig, hvad der sker nu. Den anden del vil berøre hvilke opgaver, hvilket sprog er egnet til, hvordan man "vælger dit yndlingssprog og nyder livet." Foredragsholderen vil også fortælle lidt om, hvordan man efter hans mening kan lære alt dette og så få et job.

Som altid er der under klippet en detaljeret transskription af foredraget, så du kan navigere i indholdet.

Historien om programmeringssprog

Lad os starte fra begyndelsen. I begyndelsen havde computere ikke engang tastaturer! Det vil sige alt var meget dårligt – de havde hverken tastatur eller skærm, de havde kun hulkort (det er småting med huller eller ingen huller). Derfor stak de enten stifterne der, eller også lyste de et lys der. Hvis der er et hul (eller omvendt ikke) - betød det et nul eller et. Og programmer på det tidspunkt blev skrevet ved hjælp af maskinkoder - hver operation på en computer (addition, subtraktion, nogle mere komplekse operationer) havde en form for maskinkode. Folk valgte selv denne kode fra et skilt, alle mulige adresser i hukommelsen, de slog det hele ud med hænderne og lagde det ind i læseren - og det hele blev talt. Selvfølgelig var arbejdet med en programmør nok ikke specielt interessant dengang - at lave huller - og med udviklingen af ​​videnskab og teknologi begyndte de selvfølgelig at finde på alle mulige mere "interessante" ting. For eksempel assembler, som allerede gjorde livet noget lettere.

Hvordan gjorde han livet lettere? I stedet for at huske, at der var en slags "magisk" kode til kommandoen, blev der brugt alle mulige slags ord, der lignede "menneskeligt" engelsk - nogle tilføje eller flytte - og derefter registre eller hukommelsesområder, variabler, hvormed disse var nødvendige blev opført udføre operationer. Men det er klart, at dette generelt også krævede en del mental indsats for at holde i hovedet, i hvilket register vi har hvad, hvor hvilke variabler er, og hvad der sker generelt. Hvorfor skete dette? Fordi computere var "dumme" og ikke kunne forstå noget mere "smart". Faktisk kræver det også tid og hukommelse at samle maskinkode fra assembler (dengang var der selvfølgelig lidt af det).

Efterhånden blev det klart, at det var meget vanskeligt at udvikle så store komplekse programmer. Programmørens produktivitet i disse teams var ekstremt lav - det vil sige, han skrev flere linjer om dagen (meningsfuldt), og hver linje lavede ikke noget særligt - nogle simple regneoperationer. Og folk ønskede at gøre sprog meget mere lig det menneskelige sprog, især engelsk, for at gøre skriveprogrammer nemmere og mere bekvemt. Og afsted!

Gamle og døde sprog

Et af de første sprog var Fortran. Det blev i øvrigt også stanset ud på hulkort – der var særlige hulkort til at stanse Fortran-programmer. Men hvis du tager denne Fortran nu, er den efter min mening endda et sted mellem 50-60. dukkede op - og hvis du forsøger at skrive noget på det, bliver du meget ubehagelig, det garanterer jeg dig! Moderne Fortran er stadig i live, men er helt anderledes end før.

Andre sprog - nu vil jeg skrive en ting, som du sikkert kun har hørt om ved forskellige begivenheder, hvor de taler om programmeringshistorien - dette er COBOL. Det var et sprog til at skrive forretningsapplikationer. Hvad er forretningsapplikationer? Nogle transaktioner i banker, noget andet, alt dette blev skrevet i Cobol. Det er selvfølgelig ikke særlig populært her. Jeg tror, ​​du vil finde det meget svært at finde en Cobol-programmør i Moskva. Og et eller andet sted ikke i Moskva - med endnu større besvær. Men overraskende nok, for bare 10 år siden, blev mere end halvdelen af ​​al den kode skrevet af menneskeheden skrevet i Cobol. Og den dag i dag udføres en betydelig del af alle banktransaktioner ved hjælp af programmer skrevet i det (COBOL), og folk skriver stadig noget i det.

Der er også et "sjovt" sprog, det blev kaldt Algol (den 68. version, som karakteriserer året for dets oprettelse). Dette er et algoritmisk sprog. Generelt kunne de gøre noget der, men nu er vi ikke særlig interesserede i, hvad de kan. Og hermed kan vi afslutte vores udflugt til antikken og til relativt ubrugte sprog og gå videre til det, der stadig lever (og aktivt lever).

Gamle, men levende sprog

Algol blev opfundet i Europa, og Fortran blev primært brugt i staterne - der er ingen store forskelle. Hvilken tendens er mærkbar? Først var alt kompliceret, og for at kunne skrive skulle man nærmest være ingeniør, elektroingeniør, for at forstå, hvor hvilke kontakter er forbundet og noget andet til programmering. Så skulle man også sidde med papirlapperne og tælle hukommelsen, passe på den. Og efterhånden blev alt enklere, enklere, enklere og så endnu enklere for programmøren - at tænke så lidt som muligt for en person, at gøre så meget som muligt automatisk. Omkring slutningen af ​​denne periode (forelæseren peger på Algol og Kobol) begynder der at dukke sprog op, som på en måde har "overlevet" den dag i dag.

GRUNDLÆGGENDE. Måske nogle mennesker stadig skriver noget i det, i det mindste så jeg, at i nogle institutioner de underviser i QBasic - der er et blåt vindue, hvor "1989" er skrevet. Generelt "lever han med al sin magt"! Det blev opfundet som et sprog for ikke-programmører. På det tidspunkt var en programmør sådan et meget specialiseret erhverv. Og her fortæller de dig: "Vi har et sejt grundlæggende sprog, og enhver fornuftig person kan skrive et program i det - det er nemt." Igen, at BASIC og moderne BASIC er en kæmpe forskel. Alle disse linjer nummereret efter 10, alle mulige GOTO'er og andre rædsler - de har ikke længere noget at gøre med moderne BASIC, og selv til BASIC fra 1989 har de ikke meget med det at gøre.

En anden sjov historie er Pascal-sproget, der er bredt kendt i universitetskredse, hovedsageligt i Rusland og landene i det tidligere Sovjetunionen. Det har været og bliver stadig brugt overraskende som undervisningssprog. I resten af ​​verden er den mindre almindelig, men den lever også i bedste velgående. Der er sådan en person som Wirth - han er en videnskabsmand, en teoretiker. Han deltog i Algol-diskussionen, han kunne ikke lide, hvad der skete, og han kom med sit eget sprog - Pascal. Og så tog Borland-virksomheden (og før det mange andre virksomheder - især Apple var involveret) det og ødelagde alt. Han havde en smuk, sammenhængende teori - "alt bliver godt" - og de tog den og fyldte den med, hvad folk skulle bruge for at arbejde. Nå, det blev ikke så smukt, som han ønskede.

Og endelig... C blev opfundet af ingeniører. Hvis Pascal blev opfundet af en videnskabsmand, så blev C opfundet af Kernighan og Ritchie, de arbejdede som ingeniører hos Bell. Hvordan skete dette? På det tidspunkt var det umuligt at skrive noget systemisk på disse sprog (forelæseren peger på Fortran, COBOL, Algol). Hvad er "systemisk"? For eksempel et operativsystem, nogle drivere, noget andet. Disse sprog var beregnet til matematiske beregninger, til forretningsberegninger, for alt det. Og alt andet blev skrevet i forsamlingen. Der var nogle sprog, de er nu døde, det vil sige, C-sproget dukkede ikke op umiddelbart fra Assembly, men gennem nogle mellemting.

Hvad er pointen? Kernighan og Ritchie elskede at spille Asteroids-legetøjet - et rumskib flyver, og der er asteroider, han skyder på dem, og de falder fra hinanden. De havde en server, hvor de spillede, men der var mange mennesker der, og legetøjet var langsomt. Og de opdagede et sted på deres kontor, at de havde en form for computer, som ingen brugte. Men der var et problem - det var af en anden arkitektur, og spillet blev skrevet i Assembly.

De omskrev det, selvfølgelig, tilføjede endda nogle funktioner til at spille på det. Men dette førte dem til ideen om, at det ikke er særlig smart at omskrive til en ny arkitektur hver gang. Og de besluttede at skrive et sprog på højt niveau, der ville være egnet til systemprogrammering, det vil sige, hvor det ville være muligt at administrere hukommelsen, hvor det ville være muligt at forstå, hvor tingene ligger, og hvordan man får adgang til disse hukommelsesstykker . Og så dukkede C-sproget op, som havde stor indflydelse på alt, hvad der fulgte. Alle (underviseren peger på Algol, Fortran og andre nævnte sprog) havde stor indflydelse, men C - bare ja...

Derfor var det hovedsproget i Unix, et operativsystem, der var endnu mere populært på det tidspunkt, end det er nu. Og omkring 80'erne var situationen sådan her (foredragsholderen viser Basic, C og andre nævnte sprog). Lad os sige, at alt dette allerede langsomt er uddød i vores land (foredragsholderen sletter omtaler af Assembly Language, Fortran og Algol)... Og i 80'erne blev computere mindre, smartere, billigere, og folk ville have alle mulige mærkelige ting at gøre livet endnu bedre, at leve endnu sjovere.

Sprog fra 80'erne

En af de første mærkværdigheder var, at det var et C++-sprog. C-sproget har et enormt antal mangler (nå, bare generelt kæmpestore) - du kan alt i det, inklusive at skyde dig selv i foden, skyde dig selv i foden med fiktion, i den anden fod, skyde den ene fod i den anden fod, generelt - hvad end du vil gøre. Men samtidig bliver der gjort nogle arkitektoniske ting der ret besværlige - igen, som i Montering, skal vi holde styr på, hvor vi er, hvad og hvilken hukommelse vi har tildelt; Det er der hele tiden "flyder" et eller andet sted, denne hukommelse - det vil sige, vi tildelte den, glemte at slette den, slettede den forkerte ting, gik ud over hukommelsesgrænserne generelt - vi fik en masse problemer ind.

C++ blev oprindeligt skabt som et sæt tilføjelser til C-sproget, der ville gøre udvikling lettere. På det tidspunkt blev objektorienteret programmering moderne, og folk besluttede, at alt kunne beskrives i form af et hierarki, det vil sige, du har en bold (abstrakt), du arver fra den en fodbold, en volleyball, en anden abstrakt bold . Det var på mode dengang, at "vi skriver nu alt i form af en form for hierarki, og alt vil være godt, livet bliver bedre, alt vil være godt, og det er det." C++ implementerede på en måde denne objektbaserede tilgang - det var ikke det første objektorienterede programmeringssprog, men det blev ret populært, og alle mulige funktioner begyndte at dukke op i det. Samtidig beholdt C++ næsten fuld kompatibilitet (på det tidspunkt) med C-sproget; et program skrevet i C blev med succes kompileret som C++ i 99% af tilfældene og fungerede endda på samme måde. Dette var beregnet til at gøre det nemt at skifte fra C til C++.

Ud over objekttilgangen (i C++) dukkede et standard skabelonbibliotek (STL) hurtigt op. Jeg tror, ​​at i skolen opdagede de, der stadig lærte Pascal, at man for det første ikke har indbygget sortering (i det gamle, blå Borland Pascal, nu er det allerede i moderne versioner) - der er et eksempel (kilde kode) sortering, kan den kopieres og indsættes. Men hvis du vil sortere heltal her, reelle tal her og strenge her, der kan sammenlignes med hinanden, skulle du skrive tre forskellige sorteringer, der gør præcis det samme, de har bare forskellige datatyper. Dette er ikke særlig godt, og de skabeloner, der ikke umiddelbart dukkede op i C++, lindrede dette problem i høj grad. Det vil sige, at du havde et abstrakt program, der med succes sorterede noget, der kunne sammenlignes med hinanden.

Scriptsprog fra 90'erne

Men tiden stod ikke stille, i 80'erne skete der mange interessante ting. Men et sted omkring overgangen til 80'erne og 90'erne blev computere så gode, at det var muligt at lave meget mærkelige og meget ineffektive ting. Især var disse scriptsprog, der ikke blev kompileret til maskinkode, men snarere fortolket. BASIC blev også tolket på et tidspunkt, men disse scriptsprog var hovedsageligt beregnet til tekstbehandling - disse er for eksempel Perl, Python (det var ikke særlig berømt dengang), PHP, Ruby - det er scriptsprogene at de i et eller andet i forskelligt omfang stadig lever (de nåede alle at dukke op før 2000, endda meget tidligere).

Lad os gennemgå dem lidt, for det er specifikke ting og bliver nu brugt mange steder. Hvad er ideen? Hvis vi ikke kompilerer, kan vi tillade meget mere. For eksempel kan et program se på sin kode og på en eller anden måde bruge den; hun ved, hvad der sker i hende, og på grund af dette kan hun lave en masse interessante ting.

Perl var beregnet til tekstbehandling - dengang var der så meget hukommelse i computere, at man kunne proppe noget tekst der og gøre noget nyttigt med denne tekst (f.eks. tælle ord, lave en form for søgning). Men efter min mening blev det designet af folk, der var lidt skøre, fordi der er en joke om det: "Ethvert sæt karakterer skrevet er et gyldigt Perl-program." Efter min mening kan du kun skrive på den, du kan ikke læse den. Når jeg ser på Perl-koden og prøver at forstå noget, forstår jeg ingenting. Måske ville jeg forstå noget, hvis jeg kendte ham bedre, men som jeg hørte fra de mennesker, der stadig ved hvordan, siger de, at det er nemmere at omskrive det igen. Det vil sige, at programmerne viser sig at være korte, og det er virkelig nemmere at omskrive dem fra bunden end at finde ud af, hvad der er der, og ordne det.

Omkring det tidspunkt, i midten af ​​90'erne, dukkede internettet op. Først var det mail, hjemmesider med statisk HTML, men folk ville gerne tilføje en eller anden form for dynamik der, så alting ville ske dynamisk, nogle formularer kunne udfyldes, laves gæstebøger og noget andet. Derfor krævede dette en form for interaktion, de kom med en protokol, hvordan den interagerer, og vigtigst af alt, genereringen af ​​disse statiske (betinget) sider, der vil blive "spyttet ud" til brugeren som svar på hans anmodning.

Generelt var intet andet end Pearl egnet på det tidspunkt. At skrive en handler i ren C eller C++ var en dårlig idé. Og i mangel af noget bedre var Pearl på det tidspunkt (og i ret lang tid) det populære sprog til webudvikling. Skalaen kan naturligvis ikke sammenlignes med, hvad der sker nu.

PHP dukkede op som... ved et uheld. En person stoppede med at gøre dette ret hurtigt - han lavede sin egen side, han havde en slags gæstebog, noget andet, nogle andre ting. Og han skrev et sæt makroer til Perl, der lignede C, fordi han vidste, hvordan man bruger C, simpelthen fordi det var så praktisk for ham. Og jeg kaldte det Personlig Hjemmeside. Han delte det og sagde: "Mennesker, se på, hvad jeg skrev, alt her er meget klarere end i Perl, og du kan redigere det." Og folk kunne lide det.

Så opgav han denne forretning. Generelt, som et resultat, begyndte denne PHP at leve og blev over tid meget mere populær end Perl. Men dette hans "fødselstraume" (udtænkt som et sæt makroer til Pearl) spillede en ret grusom joke på ham. Sproget viste sig mærkeligt. Det vil sige, at det udviklede sig af sig selv, ingen designede det, ingen administrerede udviklingsprocessen (hverken en virksomhed eller nogen person), men der var mange grupper, som hver så det, de kunne lide. Som et resultat er funktionerne navngivet anderledes, der er ikke engang en stil, alt er understreget, dybest set tilfældigt, indstillingerne er her og der, og hvordan alt dette vil fungere, er ikke særlig klart. Men du kan sætte dig ned og skrive i PHP på to timer, for det var sådan det var tænkt.

Python og Ruby: Ruby er mindre populær nu, Python er på en eller anden måde bedre "høvlet", lad os tale om det senere. Det er klart, at det i de dage var (forelæseren peger på Perl, Python, Ruby, PHP) højt specialiserede sprog til højt specialiserede formål. Generelt var der ingen, der skrev nogen systemprogrammering, ingen forretningslogik i dem på det tidspunkt, og nu er der ikke meget, der gør det.

Kompilerede sprog fra 90'erne

Vi vil gå rundt de samme tidspunkter, men i den anden retning. På det tidspunkt brugte vi C++ til næsten alt, hvad der skulle skrives, ikke til nettet, ikke til tekstbehandling, men til kun applikationer, til operativsystemer, til legetøj – generelt til hvad som helst. Men C++ er faktisk et forfærdeligt sprog. Hvorfor? For det første arvede det alle C-problemer på grund af bagudkompatibilitet. Der kunne du stadig slå dig selv ihjel på en million forskellige måder, de samme som var i C (naturligvis blev der tilføjet nye måder i C++). Samtidig, hvis du skriver alt godt og korrekt, som det var meningen af ​​forfatterne til C++, så var det selvfølgelig ikke længere muligt at slå dig selv ihjel ved at bruge de gamle C-kode metoder, og det ser ud til, at der er færre af dem. Imidlertid havde den en meget mærkelig, ejendommelig objektmodel. At opdele et program i moduler, i stykker af en eller anden art, kom generelt fra C (hvis du ved, hvordan man skriver inkludere i C eller C++ - faktisk var det tænkt som en måde at blot indsætte biblioteksteksten i dit program, i slut, når du skriver en masse inkluderer, har du alt - hvis det er "primitivt", som det var i begyndelsen - alt indsættes i en fil, og så tager det hele frygtelig lang tid at kompilere, fordi det går rundt flere gange. Den samme Pascal, Virtovsky, var meget mere betænksom i denne henseende, senere versioner er blevet endnu bedre.

Generelt har C++ en masse ulemper. Programmøren skulle være højt kvalificeret til at skrive i C++, og sådanne programmører var dyre (og uddannelse og noget andet, det vil sige, det er svært at finde programmører på markedet, de skal betales meget, og generelt er dette ikke meningen...). Og vores computere tæller hurtigere og hurtigere, de bliver billigere, folk køber nye computere og vil have flere applikationer, mere legetøj til deres telefoner generelt – mere glæde.

Sådan opstod Java. Der er også en ret sjov historie om, hvordan dette sprog fik sit navn. Der er programmører der, de drikker kaffe hele tiden og dengang var det moderne at drikke kaffe, som voksede på øen Java. Sproget blev tænkt som et sprog for indbyggede enheder, især for en kaffemaskine. Sådan opstod navnet...
Hvad startede med hende, hvad var godt ved hende, og hvorfor opnåede hun så meget popularitet? Først slap de helt af med Sishnois arv. Der er ingen tegn, meget færre måder at skyde en del af din krop af og bryde alt. For det andet introducerede de meget nyere ideer med hensyn til objektmodellen - det vil sige, C++ dukkede op meget tidligere end Java og brugte en mere arkaisk, "vild" objektmodel. Nå, her (forelæseren peger på Java) var det allerede dengang mere gennemtænkt, og i teorien tænkte folk, og i praksis søgte de og gjorde alting meget sejere.

Og endelig tredje. Vores Java-programmer blev ikke kompileret til maskinkode, men til kode til en virtuel maskine. Det vil sige, du havde en virtuel maskine (VM) JVM - Java. Dine programmer blev samlet til en form for mellemrepræsentation, og derefter, ved hjælp af denne maskine, var de allerede udført. Hvad gav det? For det første sænkede den farten, for det andet spiste den hukommelsen med frygtelig kraft, for det tredje var den bærbar overalt (teoretisk set) - selv til en kaffemaskine, endda til en kaffekværn, endda til en computer, endda til en mobiltelefon. På den ene side er dette godt, det vil sige, at du lige har skrevet en implementering af en virtuel maskine, så kører du dine Java-programmer overalt. Men på den anden side er det slemt, at den samme telefon så havde lidt hukommelse, lav ydeevne, og alt dette begyndte også at blive langsommere og langsommere.

Men dette er ikke engang det vigtigste, som sproget blev opfundet til i første omgang. Java-sproget blev opfundet for at reducere kvalifikationskravene til programmører. Det vil sige, at dårligere programmører kan skrive gode programmer i Java, fordi det ikke tillader dig at skrive dårlige programmer – der er ingen måde at skrive dårlige programmer på. Der kan man kun skrive gode programmer. Nå, i forståelsen af ​​skaberne af sproget.

Det vil sige, at hvis vi i C, i C++, i Python, i hvad som helst, kan skabe en form for frygtelig skraldeplads ud af vores projekt, hvor vi har alt blandet sammen, samlet i timevis og noget andet. I Java kan du også oprette en affaldsplads, men for dette skal du gøre en indsats. Det vil sige, at det som standard ikke er en "skraldeplads", der opstår andre problemer, at noget er blevet nedarvet og nedarvet - generelt, for en meningsfuld linje, er der ti ikke særlig meningsfulde. Men sådan en moderat kvalificeret programmør kan skrive kode af ret høj kvalitet.
Vi er næsten ved slutningen. For os var det næste, der dukkede op, .Net (dotnet), og i særdeleshed er vi interesserede i C# (næsten det samme [forelæseren peger på Java], dvs. der er forskelle i detaljer, hvis man vælger mellem dem , se hvor de betaler flere penge).

Og en ting mere - JavaScript. Har intet at gøre med Java-sproget, dukkede op samme år - ordet var på mode, de licenserede varemærket til at bruge det.

Hvad er det vigtigste, du skal være opmærksom på? (Læreren tegner pile fra C++ til Java, .Net, C#, JavaScript og PHP). For at skrive et simpelt program på et af disse sprog, og på mange andre - hvis du kan C++, behøver du generelt ikke at vide noget andet - du skriver i C++ og tilføjer derefter dollars i begyndelsen, noget andet gør småting og det begynder at arbejde på hvad som helst (underviseren peger på de sprog, som pilene fra C++ blev tildelt). Det vil sige, at de er ekstremt ens i nogle simple ting. Hvis du løser nogle skoleproblemer, pædagogiske problemer eller andet (du designer ikke et stort projekt - du har én fil, der læser tal, viser tal i konsollen og gør noget andet), så er der næsten ingen forskel mellem disse sprog. Det er klart, at JavaScript og PHP er specialiserede, alt er lidt anderledes for dem. Men her (underviseren peger på Java og C#) er der meget lidt forskel overhovedet.

Siden da er der dukket alle mulige andre interessante ting op, men det er ikke klart, om de vil leve eller dø med succes. Hvad bruger de nu, til hvilke formål?

Valg af sprog afhængigt af opgaven

Lad os sige, at du står over for opgaven med at skrive en driver til et videokort. Hvilket sprog vil du bruge i dag? (Råb fra publikum: Java!) Hvorfor... Java er fantastisk, men hvorfor ikke Ruby eller PHP? (Læreren taler sarkastisk.)

Programmering på lavt niveau

Hvis du skriver noget på lavt niveau, så er det bedste valg C, men faktisk har jeg hørt (men ikke set), at C++ bruges til dette. Men det har jeg lidt tiltro til, for i C kan du tydeligt styre - da du gav så mange bytes hukommelse, betyder det, at der vil være så mange. Og i C++ (STL) hvordan implementeres en streng? Nå, på en eller anden måde blev det implementeret. Og i sidste ende ved vi ikke, hvordan og hvad der sker der; måske løber vi tør for hukommelse på vores videokort, eller noget andet vil ske. Derfor lever C stadig og dør ikke, sådanne systemprogrammeringsopgaver eksisterer stadig - skriv et styresystem, skriv drivere, skriv noget andet - C er fantastisk til dette. Derudover dukker der nu alle mulige slags enheder op (det loves at Internet of Things kommer snart), som kører på batterier (og naturligvis vil der være millioner af dem, alt vil være dækket af dette Internet of Things), de burde være meget billige og have meget lidt strømforbrug. Følgelig vil der være 2 KB hukommelse, en 5 kHz processor, og det er klart, at det ikke vil være muligt at skrue en slags virtuel maskine eller scriptsprog ind i den nærmeste fremtid - hvilket betyder, at du bliver nødt til at skrive noget i C. Og selv nu, for eksempel, computere på et videokort (OpenCL eller anden teknologi) - de kommer ikke på et nyt sprog til at skrive programmer til dem - de laver C med nogle store begrænsninger. Bare fordi folk allerede ved hvordan, hvorfor så lære noget nyt? Formelt er dette nok også i en vis forstand C.

Web programmering

Lad os sige, at du vil skrive et nyt Facebook (socialt netværk). Hvad vil du skrive dette på? (Folk fra publikum taler om HTML og CSS.) HTML og CSS er design, og vi ønsker, at det skal være muligt at tilføje billeder, venner og efterlade kommentarer der.

For scripting-delen - det vil sige hvad der vil ske på klientsiden - er dette JavaScript. Desuden genereres JavaScript nogle gange på et andet sprog og sendes (det sker, at scriptet genereres... fordi det nogle gange er nemmere at behandle nogle ændringer i logikken).

Overraskende nok er det skrevet i PHP – og Facebook, og mange andre store projekter. De skulle selvfølgelig skrive nogle af deres egne ting, for at det stadig ville fungere normalt, og ikke på en "klumpet" måde, men de gjorde det. I princippet er det mere eller mindre lige meget, hvad du skriver i, men jeg anbefaler ikke Perl. Her og nu er der selvfølgelig ingen, der skriver noget til nettet fra bunden. Alle skriver en form for ramme eller noget andet. Online butik? Vi downloadede en ramme til en netbutik - og det var det, vi skrev en netbutik.

Programmering til erhvervslivet

Dernæst vil du skrive en kedelig ansøgning til en bank. Eller har du for eksempel nogen, der sælger SIM-kort? Måske har du nogensinde købt en telefon eller noget andet og fået at vide: "Systemet hænger, vi kan ikke gøre noget." Hvad vil du bruge til at skrive sådan en ansøgning? (Råb fra publikum om Python) Du kan ikke skrive dette i Python, hvad siger du?! Der er ingen grund til at skrive noget for erhvervslivet i Python. Hvorfor? For når du skriver noget i Python, er det umuligt at opdage et betydeligt antal fejl under skriveprocessen. Python er dynamisk skrevet på alle mulige måder, og generelt kan du skjule en fejl på en sådan måde, at den dukker op i en sådan situation, at du ikke engang vil kunne forstå, hvad disse skæve brugere gjorde der, at alt er ødelagt for dig. Det vil sige, at i Python er det bedre at skrive små scripts til dig selv - du forstår, hvad der sker der, og hvad der bliver gjort. Nå, eller noget, du ikke har noget imod at smide væk: du vil rulle noget ud før dine konkurrenter, så hvad nu hvis det går i stykker nu og da. Du skrev i Python, og det var det - du erobrede markedet. Og hvis du skriver noget i lang tid, for eksempel en form for bankansøgning (så den godkender lån, noget andet) - så skriver du det i Java. For det er en alvorlig sag, papirer, penge, dokumenter, noget andet, men man kan ikke skrue så meget op, at alt går i stykker, ellers bliver folk fornærmede - deres penge gik væk og kom ingen vegne, for på en eller anden måde i det øjeblik strengen blev til et tal eller omvendt. Altså, det betyder, at du metodisk tager det i Java og skriver, skriver... Nå, eller på .Net, sådanne situationer sker i princippet også. Der kan du selvfølgelig også løbe ind i problemer, men alligevel er sandsynligheden for dette noget lavere.

Programmering til hæren, rumfartsindustrien

Forestil dig nu, at de besluttede at sende dig til Månen på en raket. Hvad vil du helst bruges til at skrive koden, der styrer raketmotorerne? Lad os tage et kig. Dette (forelæseren viser Perl, Python, PHP, Ruby), er nok ikke det værd - det bremser, der sker noget andet, og generelt ville jeg ikke gå med til at flyve på sådan en raket. I C++? For at være ærlig ville jeg heller ikke stole på det, for i C++ er der for mange måder at slå sig selv ihjel på. Når du er derude et sted i rummet, er det ikke særlig godt.

Måske i Java? Det ser ud til, at alt der er ret pålideligt, og arkitekturen er god, ingen vilde typer, ingen unødvendige ture ud over hukommelsesgrænserne. Lad os sige, at det mest afgørende øjeblik er kommet, og vores Java har besluttet at samle skrald for os. Vi er nødt til at lande, sætte farten ned, og hun siger: "Nej, der går skrald." Generelt heller ikke særlig godt.

Helt ærligt, jeg ville foretrække, at dette program var skrevet i Pascal. Selvfølgelig kan jeg ikke rigtig godt lide Pascal, men på en eller anden måde i sådanne sager ville det være meget fedt.

Brug af flere sprog til softwareudvikling

Nå, hvad skal der generelt siges om moderne sprog. Nu lever mange projekter ikke på ét sprog, det vil sige, at nogle af dem lever på ét sprog, nogle på et andet og nogle på et tredje. For eksempel, hvis du har en form for webapplikation, der behandler vilde mængder information, er opkald til diske (ikke engang til databaser, de er så store, at selv en database der ikke kan håndtere nogen allerede skrevet) sandsynligvis skrevet i en eller anden form for så lavt niveau C, for at skrive vildt hurtigt til disk og alt det der. Det er naturligvis ikke værd at skrive hele projektet i C. Måske er der skrevet en form for mellemlogik i Java, der kalder C-funktioner for hurtige opkald. Nå, frontend (hvad brugeren ser på), er selvfølgelig allerede skrevet i noget, i nogle scripts, i noget, der udføres direkte af browseren (JavaScript). Og alt dette lever sammen og interagerer med succes.

Når man udvikler nogle applikationer, selv store, hvad gør folk nogle gange? De tager det og skriver en prototype i Python (hvordan det hele vil fungere), skitserer det, gennemtænker en form for arkitektur. Det er virkelig meget hurtigt at skrive på den - de smed en prototype sammen, eksperimenterede med den og sagde: "Wow! Det er så sejt!" Og de omskrev det fuldstændigt. Det ser ud til, at de gjorde jobbet to gange, hvilket gjorde, at det tog dobbelt så lang tid (nå, halvanden). Men nej! Det viser sig ofte, at denne metode ikke er dårlig, for hvis du skriver noget med det samme, for eksempel i Java, og derefter beslutter dig: "Nej, lad os refaktorere, ændre arkitekturen fuldstændig og alt det der," så vil du bruge 10 gange mere tid. Sådanne ting findes også og lever.

Betingelser for succes for ethvert programmeringssprog

Lad os nu tale om, hvorfor nogle flotte sprog ikke overlevede eller levede i et meget begrænset rum. Da Wirth så, hvilke dårlige firmaer Apple, Borland og alt det gjorde ved hans Pascal, kom han med et endnu bedre sprog – Oberon. Det var bare vildt minimalistisk – det vil sige, at der var meget få kommandoer (Strings? Hvorfor har vi brug for strenge? Vi laver en række karakterer!). Nå, noget fungerede ikke for ham, i det omfang det kunne have fungeret.

En ting mere. Det amerikanske militær bad dem udvikle et sejt sprog, hvor alt fungerer, og alt kan skrives. Resultatet blev et ret monstrøst Ada-sprog, hvor de dog stadig skriver noget, men igen kun for militæret.

Hvad er problemet? Hvorfor nogle sprog som Python, som ingen virksomhed understøttede i begyndelsen, overtog markedet. PHP, som også er dårligt designet, overtog også markedet (det meste af det) på egen hånd. Og der blev investeret alle mulige milliarder af dollars (forelæseren peger på Ada) og gik ingen vegne, intet skete. Hvad er dette forbundet med? Dette skyldes, at der ikke er nogen infrastruktur omkring disse sprog. Det vil sige, at sproget kan være fremragende, men så længe der ikke er nogen dokumentation, så længe der ikke er et fællesskab, der kan besvare spørgsmål (på Stack Overflow), og endelig, vigtigst, så længe der ikke er et stort antal af biblioteker, tager sproget ikke fart. Det vil sige, at du for eksempel ville skrive en hjemmeside på Oberon. Hvad er det, hvorfor ikke? Og besværet begynder... Du kan ikke oprette din egen webserver på Oberon for at teste den let, du kan ikke forbinde nogen biblioteker, fordi Oberon ikke har dem. Og alt dette gøres gennem nogle krykker, styrken forsvinder, og generelt giver du op og skriver din hjemmeside i ren C i stedet for Oberon. Og de sprog, der lever godt, er dem, der ved, hvordan man bruger biblioteker fra andre sprog. Den samme Python på de steder, hvor den bremser. Tja, generelt er alle mulige standardting som sortering og andet skrevet i C, og det (Python) kan interagere med dem.

Java har også en Java Native Interface. Dette er i det væsentlige C, det vil sige der (efter min mening vil de altid forbyde det, men det ser ud til, at de ikke har forbudt det endnu) disse sprog kan interagere med allerede eksisterende biblioteker (hovedsageligt C). Og på grund af dette tager de det og arbejder. Den idé, jeg prøver at formidle til dig, er klar, ikke? Skriv ikke på sprog, der ikke understøtter C-biblioteket. Nå, hvis du vil bruge noget fedt. Nå, efterhånden får de (sprogene) deres egen infrastruktur. Og de lever på en eller anden måde godt.

Programmeringssprog og karrierevejledning

Lad os nu tale om, hvordan man forstår, hvad du ønsker i livet. Hvad er de fedeste ting? Du kan lave noget systemprogrammering, ikke? Det er fantastisk for dig at tælle disse stykker, du vil starte quadcoptere, en slags kameraer og gøre noget andet. Så er C sandsynligvis dit valg.

Hvis du vil skrive, er det måske ikke de mest interessante applikationer i livet, men det er fedt for dig at designe dem, tænke over det hele og tjene mange penge på at sidde og kede dig det meste af tiden (det skal du betale for hvis du er god til at misse), her er de - Java, .Net. Du går på arbejde i en eller anden bank, skriver, går på arbejde klokken ni i en hvid skjorte, får en god løn og skriver efter anbefalingerne fra de bedste Java-udviklere, .Net-får og alt det der...

Hvis du vil skrive nogle applikationer, en form for browser, en form for legetøj eller noget andet, så er C++ fantastisk. Hvis du vil skrive hjemmesider, så er de her, sprog efter eget valg (forelæseren viser Perl, Python, PHP, Ruby), der er ikke den store forskel. Det eneste er, at PHP vil dø før Python, så hvis du er doven til at lære nye ting, så lær Python. Du vil ikke mærke den store forskel, men du holder længere.

Hvad der sker med Ruby er også uklart. Nå, du kan lave PHP, hvis du allerede har lært det, heldigvis er det så enkelt, at det ikke tager så lang tid at genlære.

Og endelig er der et andet anvendelsesområde for programmeringssprog - det er når en ikke-programmør bruger dem. Lad os sige, at du er en matematiker, fysiker, kemiker, analytiker, hvem som helst, og du skal hurtigt beregne noget, analysere nogle data (for biologer, for eksempel, hvor mange polarræve lever på Commander Islands). Du kan lægge alt dette ind i en tabel i Excel eller analysere det med noget. Python er også god til dette, det kan arbejde med tekst og der er en masse biblioteker, statistisk og alt det der. Hvis du vil lave en form for Machine Learning, behandle nogle data, lave forudsigelser, så gøres dette også i Python på den hurtigste måde nu. Sandt nok skal det bemærkes, at opgaverne er meget forskellige. For eksempel, hvis du vil handle på børsen med det samme under forhold, hvor kurserne ændrer sig hele tiden, så uanset hvor sejt Machine Learning du skriver i Python, vil folk, der får det skrevet i noget hurtigere, have tid til at købe alt før Alt vil blive talt for dig, selvom deres algoritmer er værre. Derfor kræver selv disse maskinlæringsopgaver (nogle af dem) høj ydeevne (og ekstrem høj ydeevne) og følgelig andre sprog.

Den eneste måde at forstå, hvad du vil, er at prøve alt. Nu vil jeg sige det som en af ​​visionerne om, hvordan du kan prøve alt. Hvordan bliver man en programmør, og en glad en? Så. Lad os starte med en ren tavle. Her læser du matematik, russisk sprog og andre obligatoriske og valgfrie fag på skolen, og din viden inden for programmering afspejles på tavlen (underviseren peger på en tom tavle) i øjeblikket. Og du vil blive et lykkeligt menneske, gøre det, du elsker, tjene mange penge og ikke nægte dig selv noget og være glad.

En måde at opnå dette på. Der er selvfølgelig alle mulige inspirerende historier om folk, der slet ikke gik på universitetet, eller droppede ud og blev milliardærer, virksomhedsejere og så videre. Men det skal bemærkes, at de fleste mennesker, der måske ikke er blevet milliardærer, men som også lever godt, alligevel dimitterede fra universitetet på et tidspunkt.

Hvordan er situationen med optagelse på universitetet (læser du i øjeblikket på skolen)? Mens du er i skole, skal du forstå, at næste skridt er at tilmelde dig og tage dig af det. Bestå Unified State-eksamenen eller vind olympiaden. På Unified State Exam kan du bruge Pascal, C++ (inklusive ren C), Python (jeg vil ikke nævne dem yderligere). Ved Olympiaden er der den samme Pascal, den samme C++, den samme Python (vi vil nu tale om dens problemer) og oftest er der Java. Der er andre ting, der sker afhængigt af OL, men det er ikke meningen.

Hvordan ser grafen over sprogfordelingen ved den alrussiske olympiade i informatik ud? Folk der deltager i det al-russiske, de fedeste OL, hvad skriver de i? Det ser sådan ud (her betyder det Pascal, og her er det omkring 2000, og her er det omkring nul, her er det C++, og her er det 2015).

I 2000 var der næsten ingen, der skrev C++. 15 år er gået, og næsten ingen skriver i Pascal, på trods af at Pascal er moderne. Dette er et sprog, der kan næsten alt det samme. Det er bare, at alle er blevet for dovne til at lære dette, hver ny trend, og de fortsætter med at skrive alt i Borland Pascal, hvilket selvfølgelig ikke kan noget. I C++ skriver folk nogle algoritmer (STL) for at sortere - fantastisk, de skrev sort() og det er det. På Pascal, på almindelig, på den gamle - dette er et problem. Vi skrev en slags sæt (det var nødvendigt) - fantastisk, vi skrev det i C++, men i Pascal var det igen en komplet smerte. Det kan du selvfølgelig med nye Pascals, men de koster generelt penge. Du har måske ikke bemærket dette, men det er sandt.

Der er også Java, men Java har mange bogstaver. Det er til store projekter, men til små engangsprogrammer bliver det meget dårligt, for der er mange ekstra bogstaver. Men nogle mennesker skriver også, man kan lære at skrive på det. Men det er ikke på Unified State-eksamenen, og flertallet skal stadig tage Unified State-eksamenen.

Hvad er bedst til Unified State-eksamenen? Til Unified State-eksamenen er det bedst (hvis du ikke ved noget, og de ikke lærer dig noget i skolen) at lære Python. Nogle eksamensproblemer kan løses perfekt på det. Ved Olympiaden viser det sig generelt, at der bruges C++, for Python er meget langsom, ikke alt er løst der.

Således har du studeret en lille delmængde af sproget og nogle algoritmer (muligvis) og løst mange problemer for at modtage et diplom fra din Olympiade og komme ind på universitetet for at modtage en videregående uddannelse.

Jeg vil nu fortælle om, hvordan vi strukturerer forløbet på HSE, i hvilken rækkefølge sprogene undervises i, hvordan de studeres i anvendt matematik og datalogi på Det anvendte fakultet, hvilket vi laver sammen med Yandex. I det første semester - Python (ikke fuldt ud, cirka som du burde lære i skolen) og C++ (allerede bredere, meget bredere end det normalt undervises i i skolerne). Lad mig fortælle dig det med det samme, så du ikke bliver bange, hvis du pludselig vil tilmelde dig, vil du sige: "Hvad, jeg ved allerede alt dette, hvorfor skulle jeg gå et sted hen for at studere? Jeg vil hellere tage et andet sted hen." For dem, der allerede ved, hvordan man programmerer godt, er der mulighed for straks at gå videre til at studere algoritmer og i en ret teoretisk forberedelse. Vi ser ikke på dem nu, dette (peger på tavlen) er for dem, der er mellemliggende eller slet ikke programmører.

På første semester undervises i det grundlæggende i Python, bare for at folk lærer at programmere, og så ingen bliver for stødt. Python undervises sjældent i skoler; de fleste kommer med viden om Pascal eller C++. Mest endda Pascal, hvis dette er en masseskole. Nå, så ingen bliver stødt, lærer alle et nyt sprog (som om de er under lige forhold). Og C++ simpelthen fordi man fra C++ så kan gå hvor som helst.

Derefter kommer Algoritme-kurset og et separat kursusprojekt. Klassiske algoritmer med implementering. Det er ikke, at vi tog noget i teorien og beregnede kompleksiteten. På foredraget tog vi det, beregnede kompleksiteten, på seminaret tog vi det og implementerede algoritmen. Et projekt er, hvor eleverne gør noget komplet. For eksempel var et af projekterne: tæl... Lad os sige, at du har mange lejligheder i Moskva, og du forstår: "Åh, jeg har en masse ekstra ting, jeg vil leje nogle ud. Og de sætter en bestemt pris, og af en eller anden grund vil ingen leje en lejlighed af dig - det er nok for dyrt. Eller også satte de en eller anden pris, de tog den straks fra dig og du tænker: “Åh, jeg har nok solgt det billigt” - og du bliver også ked af det. Det vil sige, det var nødvendigt at beregne, hvor meget det koster at leje en lejlighed? Du indtaster data - det opretter et skøn for dig. Sådan et websted, som bestod af flere ting: tage sætninger, analysere dem, anvende en form for (sandsynligvis) simpel maskinlæringsalgoritme og lave et smukt web-face, hvor du kan vælge noget, indtaste noget, nogle meter, et eller andet antal rum , antal saunaer, antal jacuzzi i din lejlighed og estimere prisen groft. Altså en form for færdig, ikke særlig kompliceret ting. Her betyder det (underviseren peger på kurset om algoritmer) sådan en kerne C++, med konsol input-output. Nå, her (foredragsholderen peger på inskriptionen "projekt") noget under vejledning af en mentor, måske med databaser, måske med tekstparsing og noget andet.
Så er der tredje semester - dette er et kursus kaldet "Computersystemer". Der er en del assemblersprog at forstå (meget lidt) og så noget, der ligner ren C og interaktion med operativsystemer, systemprogrammering i det væsentlige. Og projektet for seminaret er også noget om emnet alle mulige netværksinteraktioner, ret lavt: udvikle en form for værktøj, for eksempel rsync (synkronisering, måske du ved. I ren C, mere eller mindre, skriv en analog af rsync, som du vil have over netværket til at synkronisere mapper med alle filadgange og så videre).

Og endelig den fjerde. Jeg ved ikke engang, hvad jeg skal kalde det, det er sådan en vinaigrette af teknologier, der er nødvendige for reel udvikling, for eksempel webudvikling. Det vil sige, at dette er den praktiske anvendelse af databaser, igen noget der ligner det der blev lavet i projektet (underviseren peger på 2. års projektet) men mere dybdegående. Det vil sige, det er mere eller mindre specifikke ting, praktisk programmering. Parallelt med dette er der al teori, og her laver de også videnskab.

Og efter to kurser går folk ud for at gøre, hvad der interesserer dem, fordi denne ting dækker det grundlæggende i programmering ret bredt, og på dette tidspunkt forstår folk allerede, at de ikke ønsker at arbejde med computersystemer under nogen omstændigheder (de gjorde det ikke som systemprogrammering, for eksempel), men de vil arbejde på nogle teoretiske algoritmer, beregne kompleksiteter, finde på nogle nye ting, distribueret eller noget andet. Eller tværtimod tror de, at de ikke har meget her ( underviseren peger på linjen i det første kursus med Python og C++) gik, så ( underviser peger på tredje kursuslinje, med systemprogrammering) - Jeg kan ikke lide det, at tælle bytes og sætte alle mulige restriktioner på læsning og skrivning, lave streams, tråde og noget andet. Og i overensstemmelse med dette vælger folk en retning og studerer. Det vil sige i princippet, så du ikke udvikler "ællingsyndrom" - du var den første, der så din Pascal og sagde nu "Pascal er magt"; eller mere avanceret - du så C++ og begyndte at tale om alle, at C++ er stærkt, men alt andet er ikke særlig godt.

Nu skal vi se på dette (underviseren peger på listen over kurser i tavlen) mere bredt - det er en af ​​de metoder, der blev valgt, især på HSE (den dukkede op for nylig, så den er ret moderne). Der er andre måder at stifte bekendtskab på. På andre gode universiteter er rækkefølgen lidt anderledes, og der bliver lagt andre accenter. Men de forsøger også at introducere folk til alt, hvad de har.

Sådan søger du et job som programmør

Du er ( underviseren peger på listen over kurser) gjorde alt, studerede på universitetet, gjorde noget andet i to år mere produktivt, og du skal på arbejde. Hvordan vælger man noget til arbejdet? For det første er du blevet fortrolig med alt, gået dybere et sted og ved allerede, hvad du elsker. Du skal naturligvis vælge, hvad du elsker. For hvis du elsker, gør du en indsats, du vil have motivation og i det hele taget vil alt være godt. For det handler ikke kun om penge, det handler om at gøre det interessant og behageligt for dig. Nå, du vil gerne ind i en cool virksomhed og få et job. Hvilken slags person ville jeg personligt gerne se? Lad os sige, at der kommer hundrede studerende til mig – skal jeg ansætte to eller en. Hvorfor kommer de, jeg forstår slet ikke, hvem de er, hvad de er, hvordan de er? I bedste fald vil de vise mig det diplom, de modtog på universitetet, og jeg vil sige: "Wow!" Det er et fedt diplom, men det er ikke så fedt!" Og jeg kan i øvrigt tage fejl. Måske havde personen meget fritid og lærte meget bedre.

Hvad ville være fantastisk? For det første et open source-projekt, som du skrev fra start til slut. Helst, hvis jeg laver en form for infrastruktur, så data hurtigt kan læses, eller noget andet, så ville jeg selvfølgelig være interesseret i at få skrevet noget open source til mig. De lavede ikke en hjemmeside, men noget om emnet. Hvorfor er jeg interesseret i dette? Jeg kan se på din kode, jeg kan se, hvor ofte du forpligtede dig, jeg kan se, hvordan du reagerede på fejl fra brugere, fejl fra udviklere, der bruger den - alt er optaget, jeg ser på alt og tænker: "Wow, denne fejl har ikke har ikke været der i to år nu." lukket, her svarede du uhøfligt til brugeren, her er noget andet - jeg vil ikke tage det." Det vil sige, at dette er dit personlige projekt.

Dernæst, hvad ville ellers være fedt? Jeg vil gerne se, hvordan du klarede teamarbejdet. Det vil sige, at du kommer til mig til en samtale og siger: ”Fyrene fra universitetet og jeg har lavet en god ansøgning. Jeg lavede en database der, de lavede en slags mobilapplikation der, og vi havde også en fyr, der arbejdede der, en pigedesigner, en dreng på teknisk support. Vi var fem, og vi lavede et fedt projekt." Nå, jeg kan se, at det virkelig er dit projekt, jeg siger: "Hvad er dit?" Jeg kigger på koden igen og forstår, at du ved, hvordan man arbejder i et team med mennesker.

En programmør er ikke en, der sidder alene (indie) i en garage, et sted med slukket lys, ikke taler med nogen, gror skæg og skriver. Der er stadig noget interaktion med mennesker. Med en chef, for eksempel, som nogle gange kan bande dig til (chefer, de er sådan, er ikke altid venlige). Og jeg kan se, at du forstår at arbejde med mennesker, og det gør mig glad, hvis du har en form for godt team. Selvom det ikke er godt, er det bedre end ikke at have en.

Hvad vil jeg ellers personligt have? Hvis du beviste dig selv i store projekter. For eksempel har du begået noget i Linux-kernen, hvis du er til systemprogrammering, og rettet en fejl. Det vil sige, de viste, at du ved, hvordan man læser en andens kode og ved, hvordan man laver nogle ændringer i den. Jeg ser: "Åh, virkelig, du fandt ud af noget kompliceret og fiksede nogle fejl!" Og jeg begynder at blive meget glad for dette. Fordi jeg har... ja, jeg ved det ikke... min programmør sagde op, fordi hans konkurrenter tilbød ham en højere løn, og jeg har akut brug for nogen til at udfylde hans plads - hos dig. Jeg kan se, at du kun skrev fra bunden, men du ved ikke, hvordan man læser og redigerer en andens kode, og jeg bliver ked af det.

Og endelig, afhængig af den specifikke stilling, er der forskellige andre ting. Hvis du får job som analytiker, ser jeg gerne, at du løser dataanalyseproblemer på Kaggle. Hvis du søger om nogle algoritmiske ting, vil jeg gerne have, at du laver nogle algoritmer inden for sportsprogrammering. Og endelig, hvis du har tænkt over faget, læs hvordan interviews foregår, du har set, at nogle mennesker der udtrykker stor utilfredshed: ”Jeg kom, og de spurgte mig, hvad min hobby var. Jeg sidder som en ugle og svarer ikke, fordi jeg ikke har en hobby,” og de tror, ​​at HR’er gør dette. Faktisk forsøger de at forstå, hvor venlig og passende du er. Hvis du er uvenlig og utilstrækkelig, så uanset hvor geni og arbejdsnarkoman du er, en hård specialist med stor viden, vil det være svært for teamet at arbejde sammen med dig, og du vil ikke være i stand til at gennemføre projektet alene. Derudover kan du, selvom du trækker det ud, forestille dig, hvad byrden er for virksomheden. Hvad hvis du kommer i morgen og siger: "Forøg min løn 10 gange, ellers forlader jeg dig." Det er klart, at virksomheder ikke ønsker at komme i sådan en situation. Derfor er det lige så vigtigt (som minimum) at opdyrke tilstrækkelighed og goodwill hos sig selv som at udvikle nogle faglige færdigheder.

For at opsummere, hvad kan vi sige? Hvilke sprog er gode og hvilke er dårlige? Tja, inden for en bestemt gruppe sprog, for eksempel mellem Ruby, Python og PHP, hvad skal du vælge? Selvfølgelig er det rigtige svar Python, men faktisk er forskellen mellem dem i antallet af tilladte fejl, i antallet af noget andet - 5%, ja, måske 10%. Det vil sige, at hvis du allerede har et færdiglavet projekt skrevet i PHP, så ville ingen ved deres rette sind sige: "Lad os omskrive alt i Python." De vil sige: "Lad os ansætte flere PHP-udviklere og fortsætte med at skrive i PHP." Fantastisk, det er et godt valg. Det er klart, at hvis du pludselig beslutter dig for at skrive en form for projekt, så kan det være klogt at vælge Python nu. Selvom det også afhænger af. Måske har du mange billige PHP-udviklere på markedet, og Python-udviklere er dyre, og du tænker: "Ja, teknologien er sejere, men jeg vil spare penge på færdige udviklere." Og alt er fantastisk, du kommer allerede og arbejder der.
Hvordan vælger jeg mellem Java og C++? Ja, der sker nogenlunde det samme. Jeg tror, ​​at når du beslutter dig på hvilket sprog du skal starte et nyt stort projekt på, vil du have opnået viden inden for dit fagområde og vil være i stand til at træffe det rigtige valg. Nu behøver du ikke træffe det valg endnu, og derfor råder jeg dig til at gøre, hvad du har lyst til.

Det grundlæggende, som jeg allerede har sagt, det helt, helt grundlæggende i programmering (hvad er en funktion, hvad er if'ics, for'ics, arrays, noget andet) kan læres på mere eller mindre ethvert sprog. For eksempel i C++, da der er mange ligheder med det, og der er de mindste detaljer i det (på dette niveau), og der er det mindste antal ekstra bogstaver at skrive. Nå, når du lærer nogle komplekse arkitektoniske ting, vil du lære, og du behøver ikke bekymre dig for meget om det. Det vil sige, det vigtigste er at prøve, se efter, hvad du kan lide, og når du indser, at klokken allerede er 4 om morgenen, og du sidder og skriver for sjov, fordi du kan lide det - sikkert i det øjeblik det er tydeligt, at du har fundet din.

Programmeringssprog

Programmeringssprog- et formelt skiltesystem designet til optagelse af computerprogrammer. Et programmeringssprog definerer et sæt leksikalske, syntaktiske og semantiske regler, der definerer programmets udseende og de handlinger, som udøveren (computeren) vil udføre under dens kontrol.

  • Fungere: Et programmeringssprog er beregnet til at skrive computerprogrammer, der bruges til at sende instruktioner til en computer for at udføre en bestemt computerproces og organisere styringen af ​​individuelle enheder.
  • Opgave: Et programmeringssprog adskiller sig fra naturlige sprog ved, at det er designet til at overføre kommandoer og data fra en person til en computer, mens naturlige sprog bruges til at kommunikere mellem mennesker. Vi kan generalisere definitionen af ​​"programmeringssprog" - dette er en måde at overføre kommandoer, ordrer, klare retningslinjer for handling på; hvorimod menneskelige sprog også tjener til at udveksle information.
  • Udførelse: Et programmeringssprog kan bruge specielle konstruktioner til at definere og manipulere datastrukturer og kontrollere beregningsprocessen.

Standardisering af programmeringssprog

Et programmeringssprog kan repræsenteres som et sæt specifikationer, der definerer dets syntaks og semantik.

Der er skabt internationale standarder for mange udbredte programmeringssprog. Særlige organisationer opdaterer og offentliggør regelmæssigt specifikationer og formelle definitioner af det tilsvarende sprog. Inden for rammerne af sådanne udvalg fortsætter udviklingen og moderniseringen af ​​programmeringssprog, og spørgsmål om at udvide eller understøtte eksisterende og nye sprogkonstruktioner løses.

Datatyper

Moderne digitale computere er normalt binære og gemmer data i binær kode (selvom implementeringer i andre talsystemer også er mulige). Disse data afspejler typisk oplysninger fra den virkelige verden (navne, bankkonti, målinger osv.), der repræsenterer begreber på højt niveau.

Det særlige system, som data er organiseret i et program er type system programmeringssprog; udvikling og undersøgelse af typesystemer er kendt som typeteori. Sprog kan klassificeres som systemer med statisk skrivning og sprog med dynamisk skrivning.

Statisk indtastede sprog kan yderligere underinddeles i sprog med obligatorisk erklæring, hvor hver variabel- og funktionserklæring har en påkrævet typeerklæring og sprog med udledte typer. Dynamisk indtastede sprog kaldes nogle gange latent skrevet.

Datastrukturer

Typesystemer i sprog på højt niveau tillader definition af komplekse, sammensatte typer, såkaldte datastrukturer. Typisk er strukturelle datatyper dannet som et kartesisk produkt af basis (atomare) typer og tidligere definerede sammensatte typer.

Grundlæggende datastrukturer (lister, køer, hashtabeller, binære træer og par) er ofte repræsenteret af specielle syntaktiske konstruktioner i sprog på højt niveau. Sådanne data struktureres automatisk.

Semantik af programmeringssprog

Der er flere tilgange til at definere semantikken i programmeringssprog.

De mest udbredte varianter er følgende tre: operationel, afledt (aksiomatisk) og denotationel (matematisk).

  • Når man beskriver semantik indenfor operationelle fremgangsmåde, normalt fortolkes udførelsen af ​​prved hjælp af en imaginær (abstrakt) computer.
  • Afledt semantik beskriver konsekvenserne af at udføre sprogkonstruktioner ved at bruge logikkens sprog og specificere forud- og efterbetingelser.
  • Denoterende Semantik opererer med begreber, der er typiske for matematik - mængder, korrespondance, samt domme, udsagn mv.

Programmeringsparadigme

Et programmeringssprog er bygget i overensstemmelse med en eller anden grundlæggende computermodel og programmeringsparadigme.

På trods af det faktum, at de fleste sprog er fokuseret på den imperative computermodel, defineret af von Neumann-computerarkitekturen, er der andre tilgange. Vi kan nævne sprog med en stack computing-model (Forth, Factor, PostScript, etc.), såvel som funktionel (Lisp, Haskell, etc.) og logisk programmering (Prolog) og REFAL-sproget, baseret på computermodellen introduceret af den sovjetiske matematiker A A. Markov Jr.

I øjeblikket udvikles problemorienterede, deklarative og visuelle programmeringssprog også aktivt.

Måder at implementere sprog

Programmeringssprog kan implementeres som enten kompilerede eller fortolkede.

Et program i et kompileret sprog, ved hjælp af en compiler (et specialprogram), konverteres (kompileres) til maskinkode (et sæt instruktioner) for en given type processor og samles derefter til et eksekverbart modul, som kan startes til udførelse som et separat program. Med andre ord oversætter compileren programkildekoden fra et programmeringssprog på højt niveau til binære koder for processorinstruktioner.

Hvis et program er skrevet i et fortolket sprog, udfører (fortolker) tolken direkte kildeteksten uden forudgående oversættelse. I dette tilfælde forbliver programmet på originalsproget og kan ikke startes uden en tolk. Computerprocessoren kan i denne henseende kaldes en tolk til maskinkode.

Opdelingen i kompilerede og fortolkede sprog er betinget. Så for ethvert traditionelt kompileret sprog, såsom Pascal, kan du skrive en tolk. Derudover udfører de fleste moderne "rene" tolke ikke sprogkonstruktioner direkte, men kompilerer dem til en mellemrepræsentation på højt niveau (for eksempel med variabel dereferencing og makroudvidelse).

En compiler kan oprettes til ethvert fortolket sprog - for eksempel kan Lisp-sproget, som er native fortolket, kompileres uden nogen begrænsninger. Kode genereret under programafvikling kan også kompileres dynamisk under afvikling.

Som regel kører kompilerede programmer hurtigere og kræver ikke yderligere programmer for at udføres, da de allerede er oversat til maskinsprog. Hver gang programteksten ændres, skal den samtidig genkompileres, hvilket bremser udviklingsprocessen. Derudover kan det kompilerede program kun køres på den samme type computer, og normalt under det samme operativsystem, som compileren er designet til. For at oprette en eksekverbar til en anden type maskine kræves en ny kompilering.

Fortolkede sprog har nogle specifikke ekstra funktioner (se ovenfor), derudover kan programmer i dem køres umiddelbart efter ændring, hvilket gør udvikling lettere. Et program i et fortolket sprog kan ofte køres på forskellige typer maskiner og operativsystemer uden yderligere indsats.

Fortolkede programmer kører dog mærkbart langsommere end kompilerede, og de kan ikke køres uden et fortolkerprogram.

Denne tilgang giver dig på en måde mulighed for at bruge fordelene ved både tolke og compilere. Det skal nævnes, at der er sprog, der både har en tolk og en compiler (Forth).

Brugte symboler

Moderne programmeringssprog er designet til at bruge ASCII, det vil sige tilgængelighed for alle grafisk ASCII-tegn er en nødvendig og tilstrækkelig betingelse for at skrive enhver sprogkonstruktion. Ledere ASCII-tegn bruges i begrænset omfang: kun vognretur CR, linjeskift LF og vandret faneblad HT (nogle gange også vertikal faneblad VT og sidefremføring FF) er tilladt.

Tidlige sprog, der dukkede op i æraen med 6-bit tegn, brugte et mere begrænset sæt. For eksempel har Fortran-alfabetet 49 tegn (inklusive mellemrum): 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 = + - * / () . , $ " :

En bemærkelsesværdig undtagelse er APL-sproget, som bruger mange specialtegn.

Brugen af ​​ikke-ASCII-tegn (såsom KOI8-R-tegn eller Unicode-tegn) er implementeringsafhængig: nogle gange er de kun tilladt i kommentarer og tegn/strengkonstanter, og nogle gange i identifikatorer. I USSR var der sprog, hvor alle søgeord blev skrevet med russiske bogstaver, men sådanne sprog vandt ikke meget popularitet (undtagelsen er 1C:Enterprise Built-in Programming Language).

Udvidelse af det anvendte sæt af symboler er begrænset af det faktum, at mange softwareudviklingsprojekter er internationale. Det ville være meget svært at arbejde med kode, hvor navnene på nogle variabler er skrevet med russiske bogstaver, andre på arabisk og atter andre med kinesiske bogstaver. På samme tid, for at arbejde med tekstdata, understøtter den nye generation af programmeringssprog (Delphi 2006, Java) Unicode.

Klasser i programmeringssprog

se også

Noter

Litteratur

  • Hal Abelson, Gerald Jay Sussman. Struktur og fortolkning af computerprogrammer
  • Robert W. Sebesta. Grundlæggende begreber for programmeringssprog = Begreber for programmeringssprog/oversættelse. fra engelsk - 5. udg. - M.: Williams, 2001. - 672 s. - 5000 eksemplarer. - ISBN 5-8459-0192-8 (russisk), ISBN 0-201-75295-6 (engelsk)
  • Wolfenhagen V. E. Konstruktioner af programmeringssprog. Beskrivelsesteknikker. - M.: Center YurInfoR, 2001. - 276 s. - ISBN 5-89158-079-9
  • Paronjanov V.D. Sådan forbedrer du dit sind. Algoritmer uden programmører - det er meget enkelt! - M.: Delo, 2001. - 360 s. - ISBN 5-7749-0211-0
  • F. Biancuzzi, S. Worden. Pionerer inden for programmering. Dialoger med skaberne af de mest populære programmeringssprog. - Sankt Petersborg. : Symbol-Plus, 2010. - 608 s. - ISBN 978-5-93286-170-7

Links

  • Sproglisten (engelsk) - mere end 2500 sprog med korte beskrivelser
  • Computersproghistorie (engelsk) - programmeringssprogs historie (fra 1954 til maj 2004) (indeholder et regelmæssigt opdateret diagram)
  • Eksempler (engelsk) - programmeringseksempler på 162 sprog
  • Programmeringssprog popularitet (engelsk) - undersøgelse af populariteten af ​​programmeringssprog for 2004
  • 10 programmeringssprog, der er værd at lære (2006)
  • Programming Community Index (engelsk) - regelmæssigt opdateret rangering af programmeringssprogens popularitet
  • Computer Language Shootout Benchmarks (engelsk) - sammenligning af programmeringssprog efter effektivitet
  • Programmeringssprog, der er elsket (engelsk) - sammenligning af programmeringssprog ved "kærlighed" og "had" for dem

Wikimedia Foundation. 2010.

Programmeringssprog

Programmeringssprog – et formelt tegnsystem, der er designet til at beskrive algoritmer i en form, der er bekvem for udøveren (f.eks. en computer, dvs. en computer).

Et programmeringssprog definerer et sæt leksikalske, syntaktiske og semantiske regler, der bruges til at komponere et program. Det giver programmøren mulighed for at bestemme præcis, hvilke hændelser computeren vil reagere på, hvordan data vil blive lagret og transmitteret, og hvilke handlinger der skal udføres på disse data under forskellige omstændigheder.

Siden oprettelsen af ​​de første programmerbare maskiner er menneskeheden kommet med mere end 2.500 programmeringssprog. Hvert år fyldes deres nummer op med nye.

Nogle sprog bruges kun af et lille antal af deres egne udviklere, mens andre bliver kendt af millioner af mennesker. Professionelle programmører bruger nogle gange mere end et dusin forskellige programmeringssprog i deres arbejde.

Hvert programmeringssprog kan repræsenteres som et sæt formelle specifikationer, der definerer dets syntaks og semantik - et system af regler for fortolkningen af ​​individuelle sprogkonstruktioner.

Disse specifikationer inkluderer normalt en beskrivelse af:

    datatyper og strukturer;

    operationel semantik (algoritme til beregning af sprogkonstruktioner);

    semantiske konstruktioner af sprog;

    biblioteker af primitiver (for eksempel I/O-kommandoer);

    sprogets filosofi, formål og evner.

Mange udbredte programmeringssprog har internationale standardudvalg, der regelmæssigt opdaterer og offentliggør specifikationer og formelle definitioner af sproget. Inden for rammerne af sådanne udvalg fortsætter udviklingen og moderniseringen af ​​programmeringssprog, og spørgsmål om at udvide eller understøtte eksisterende og nye sprogkonstruktioner løses.

Programmeringssprog er normalt opdelt i lavt niveau Og højt niveau. Denne opdeling sker afhængigt af kommandoernes detaljeringsgrad - jo færre detaljer, desto højere niveau er sproget.

Programmeringssprog på lavt niveau

Et lavniveau programmeringssprog er et programmeringssprog, der er tæt på at programmere direkte i maskinkode. Sprog på lavt niveau bruger typisk funktioner i en specifik processorfamilie.

Et sprog på lavt niveau er sproget samler(fra engelsk assembler - assembler) - navnet på oversætteren (kompilatoren) fra assemblersproget. Monteringssprog kaldes ofte fejlagtigt for kort "samling".

Assembly sprogkommandoer svarer én til én til processorkommandoer og repræsenterer faktisk en praktisk symbolsk form til at skrive kommandoer og argumenter.

Typisk er programmer eller sektioner af kode skrevet i assemblersprog på lavt niveau i tilfælde, hvor det er afgørende for udvikleren at optimere parametre såsom ydeevne (for eksempel ved oprettelse af enhedsdrivere) og kodestørrelse (bootsektorer, software til forskellige enheder) , vira, overheadbeskyttelse osv.) d.).

Programmeringssprog på højt niveau

Et programmeringssprog på højt niveau er et programmeringssprog designet til at være hurtigt og nemt at bruge af programmøren. Udtrykket "højt niveau" betyder her, at sproget er designet til at løse abstrakte problemer på højt niveau og ikke opererer med instruktioner til udstyr, men med logiske begreber og dataabstraktion. Dette giver dig mulighed for hurtigt at programmere komplekse opgaver og giver relativ uafhængighed af hardware. Brugen af ​​en række forskellige oversættere og tolke sikrer, at programmer skrevet på højniveausprog kommunikerer med forskellige operativsystemer og forskellig hardware, mens deres kildekode stort set forbliver uændret.

Et sprog på højt niveau giver ikke mulighed for at skabe præcise instruktioner til hardwaren. Programmer skrevet på højniveausprog er således nemmere for programmøren at forstå, men er meget mindre effektive end deres modstykker skrevet på lavniveausprog. Det er især grunden til, at de fleste professionelle programmeringssprog på højt niveau i dag har indbygget understøttelse af et eller andet lavniveausprog - assemblersprog.

Det første programmeringssprog på højt niveau anses for at være computer Plankalkül sprog, udviklet af den tyske ingeniør Konrad Zuse tilbage i perioden 1942–1946. Imidlertid begyndte den udbredte brug af sprog på højt niveau med fremkomsten af ​​Fortran og oprettelsen af ​​en compiler til dette sprog (1957).

De mest almindelige sprog på højt niveau i øjeblikket er C++, Visual Basic, Delphi, Java, Python, Ruby, Perl, PHP.

De fleste moderne compilere giver dig mulighed for at kombinere kode skrevet på forskellige programmeringssprog i et program. Dette giver dig mulighed for hurtigt at skrive komplekse programmer ved hjælp af et sprog på højt niveau uden at miste ydeevne i tidskritiske opgaver, ved at bruge dele skrevet i assemblersprog til dem. Kombination opnås på flere måder:

    Indsættelse af fragmenter på assemblersprog i programteksten (ved hjælp af særlige sprogdirektiver) eller skriveprocedurer på assemblersprog. Metoden er god til simple datatransformationer, men den kan ikke bruges til at skabe fuldgyldig assemblykode med data og subrutiner, herunder subrutiner med mange input og output, der ikke understøttes af højniveausprog.

    Modulær kompilering. De fleste moderne compilere arbejder i to trin. På det første trin kompileres hver programfil til et objektmodul. Og på det andet linkes (forbundet) objektmoduler til et færdigt program. Skønheden ved modulær kompilering er, at hvert objektmodul i et fremtidigt program fuldt ud kan skrives i sit eget programmeringssprog og kompileres med sin egen compiler.

Delphi visuelt programmeringsmiljø

Den hurtige udvikling af computerteknologi og behovet for effektive softwareudviklingsværktøjer og programmeringssprog har ført til fremkomsten af ​​programmeringssystemer fokuseret på den såkaldte "hurtige udvikling" - RAD (Rapid Application Development) systemer.

Blandt sådanne hurtige applikationsudviklingssystemer kan vi fremhæve Borland Delphi, Borland C Builder og Microsoft Visual Basic. De er baseret på teknologien til visuelt design og begivenhedsprogrammering, hvis essens er, at udviklingsmiljøet påtager sig det meste af det rutinemæssige arbejde, og overlader programmøren til at designe dialogbokse og.

Delphi er et hurtigt udviklingsmiljø, der bruger et objektorienteret sprog som programmeringssprog Objekt Pascal.

Objekt Pascal er resultatet af udviklingen af ​​Turbo Pascal-sproget, som igen udviklede sig fra Pascal-sproget. Pascal, første gang foreslået af den schweiziske videnskabsmand N. Wirth tilbage i 1970, er et fuldstændigt proceduresprog, Turbo Pascal, startende med version 5.5, tilføjede objektorienterede egenskaber til Pascal, og Object Pascal er et objektorienteret programmeringssprog med et unikt egenskab for adgang til klassemetadata (det vil sige til beskrivelsen af ​​klasser og deres medlemmer) i kompileret kode, også kaldet introspektion.

Programmering er en hel videnskab, der giver dig mulighed for at lave computerprogrammer. Det omfatter et stort antal forskellige operationer og algoritmer, der danner et enkelt programmeringssprog. Så hvad er det, og hvad er de forskellige programmeringssprog? Artiklen giver svar og giver også en oversigt over programmeringssprog.

Historien om fremkomsten og ændringerne af programsprog bør studeres sammen med historien om udviklingen af ​​computerteknologier, fordi disse begreber er direkte relateret til hinanden. Uden programmeringssprog ville det være umuligt at lave et hvilket som helst program, som en computer kan betjene, hvilket betyder, at oprettelse af computere ville blive en meningsløs øvelse.

Det første maskinsprog blev opfundet i 1941 af Konrad Zuse, som er opfinderen af ​​den analytiske motor. Lidt senere, i 1943, skabte Howard Aiken Mark 1-maskinen, der var i stand til at læse instruktioner på maskinkodeniveau.

I 1950'erne begyndte efterspørgslen efter softwareudvikling, og maskinsproget kunne ikke håndtere store mængder kode, så en ny måde at kommunikere med computere blev skabt. "Assembler" er det første mnemoniske sprog, der erstatter maskininstruktioner. I årenes løb stiger listen over programmeringssprog kun, fordi omfanget af computerteknologi bliver bredere.

Klassificering af programmeringssprog

I øjeblikket er der mere end 300 programmeringssprog. Hver af dem har sine egne karakteristika og er velegnede til en bestemt opgave. Alle programmeringssprog kan opdeles i flere grupper:

  • Aspektorienteret (hovedideen er adskillelse af funktionalitet for at øge effektiviteten af ​​softwaremoduler).
  • Strukturel (baseret på ideen om at skabe en hierarkisk struktur af individuelle programblokke).
  • Logisk (baseret på teorien om matematisk logiks apparat og opløsningsreglerne).
  • Objektorienteret (i sådan programmering er det ikke længere algoritmer, der bruges, men objekter, der tilhører en bestemt klasse).
  • Multi-paradigme (kombiner flere paradigmer, og programmøren bestemmer selv, hvilket sprog der skal bruges i en given sag).
  • Funktionel (hovedelementerne er funktioner, der ændrer deres værdi afhængigt af resultaterne af beregninger af kildedata).

Programmering for begyndere

Mange mennesker undrer sig over, hvad programmering er? Grundlæggende er det en måde at kommunikere med en computer på. Takket være programmeringssprog kan vi tildele specifikke opgaver til forskellige enheder ved at skabe specielle applikationer eller programmer. Når du studerer denne videnskab i den indledende fase, er det vigtigste at vælge passende (interessant for dig) programmeringssprog. En liste for begyndere er givet nedenfor:

  • Basic blev opfundet i 1964, tilhører familien af ​​højniveausprog og bruges til at skrive applikationsprogrammer.
  • Python er ganske let at lære på grund af dens enkle, læsbare syntaks, men fordelen er, at den kan bruges til at lave både almindelige desktop-programmer og webapplikationer.
  • Pascal er et af de ældste sprog (1969) skabt til at undervise elever. Dens moderne modifikation er strengt typificeret og struktureret, men Pascal er et fuldstændig logisk sprog, der er forståeligt på et intuitivt niveau.

Dette er ikke en komplet liste over programmeringssprog for begyndere. Der er et enormt antal syntakser, som er nemme at forstå og helt sikkert vil blive efterspurgt i de kommende år. Alle har ret til selvstændigt at vælge den retning, der vil være interessant for dem.

Begyndere har mulighed for at fremskynde deres indlæring af programmering og dens grundlæggende elementer takket være specielle værktøjer. Hovedassistenten er det integrerede udviklingsmiljø for programmer og applikationer Visual Basic ("Visual Basic" er også et programmeringssprog, der arvede stilen fra Basic-sproget fra 1970'erne).

Niveauer af programmeringssprog

Alle formaliserede sprog beregnet til at skabe, beskrive programmer og algoritmer til at løse problemer på computere er opdelt i to hovedkategorier: lavniveau programmeringssprog (listen er angivet nedenfor) og højt niveau. Lad os tale om hver af dem separat.

Sprog på lavt niveau er designet til at skabe maskininstruktioner til processorer. Deres største fordel er, at de bruger mnemoniske notationer, dvs. i stedet for en sekvens af nuller og enere (fra det binære talsystem), husker computeren et meningsfuldt forkortet ord fra det engelske sprog. De mest berømte sprog på lavt niveau er "Assembler" (der er flere undertyper af dette sprog, som hver især har meget til fælles, men adskiller sig kun i et sæt yderligere direktiver og makroer), CIL (tilgængelig i .Net platform) og JAVA Bytecode.

Programmeringssprog på højt niveau: liste

Sprog på højt niveau er skabt for bekvemmelighed og større effektivitet af applikationer, de er det stik modsatte af sprog på lavt niveau. Deres karakteristiske træk er tilstedeværelsen af ​​semantiske konstruktioner, der kortfattet og kortfattet beskriver programmernes strukturer og algoritmer. På lavniveausprog ville deres beskrivelse i maskinkode være for lang og uforståelig. Sprog på højt niveau er platformsuafhængige. I stedet udfører compilere oversætterfunktionen: de oversætter programteksten til elementære maskininstruktioner.

Følgende liste over programmeringssprog: C ("C"), C# ("C-sharp"), "Fortran", "Pascal", Java ("Java") - er blandt de mest brugte syntakser på højt niveau. Det har følgende egenskaber: disse sprog arbejder med komplekse strukturer, understøtter strengdatatyper og operationer med fil I/O-information og har også fordelen af ​​at være meget nemmere at arbejde med på grund af læsbarhed og forståelig syntaks.

Mest brugte programmeringssprog

I princippet kan du skrive et program på ethvert sprog. Spørgsmålet er: vil det fungere effektivt og uden fejl? Derfor bør du vælge de mest egnede programmeringssprog til at løse forskellige problemer. Listen efter popularitet kan beskrives som følger:

  • OOP-sprog: Java, C++, Python, PHP, VisualBasic og JavaScript;
  • gruppe af strukturelle sprog: Basic, Fortran og Pascal;
  • multi-paradigme: C#, Delphi, Curry og Scala.

Omfang af programmer og applikationer

Valget af sprog, som et bestemt program er skrevet på, afhænger i høj grad af dets anvendelsesområde. Så for eksempel, for at arbejde med selve computerhardwaren (skrive drivere og understøttende programmer), ville den bedste mulighed være C ("C") eller C++, som er inkluderet i de vigtigste programmeringssprog (se listen ovenfor) . Og for at udvikle mobilapplikationer, herunder spil, skal du vælge Java eller C# ("C-sharp").

Hvis du endnu ikke har besluttet dig for, hvilken retning du skal arbejde i, anbefaler vi at begynde at studere med C eller C++. De har en meget klar syntaks og en klar strukturel opdeling i klasser og funktioner. Derudover kan du, ved at kende C eller C++, nemt lære et hvilket som helst andet programmeringssprog.

Introduktionen af ​​computere i alle områder af menneskelig aktivitet kræver specialister med forskellige profiler for at mestre færdighederne ved at bruge computerteknologi. Uddannelsesniveauet for universitetsstuderende er stigende, som fra første år introduceres til brugen af ​​computere og simple numeriske metoder, for ikke at nævne det faktum, at når de afslutter kurser og diplomprojekter, er brugen af ​​computerteknologi ved at blive normen i langt de fleste universiteter.

Computerteknologi bruges nu ikke kun i ingeniørberegninger og økonomiske videnskaber, men også i sådanne traditionelt ikke-matematiske specialer som medicin, lingvistik og psykologi. I den forbindelse kan det konstateres, at brugen af ​​computere er blevet udbredt. En stor kategori af specialister er opstået - computerbrugere, der har brug for viden om brugen af ​​computere i deres branche - færdigheder i at arbejde med eksisterende software, samt skabe deres egen software tilpasset til at løse et specifikt problem. Og her kommer beskrivelser af programmeringssprog til hjælp for brugeren.

2. Hvad er et programmeringssprog

Programmeringssprog- et formelt tegnsystem designet til at beskrive algoritmer i en form, der er praktisk for udøveren (f.eks. en computer). Et programmeringssprog definerer et sæt leksikalske, syntaktiske og semantiske regler, der bruges til at komponere et computerprogram. Det giver programmøren mulighed for at bestemme præcis, hvilke hændelser computeren vil reagere på, hvordan data vil blive lagret og transmitteret, og hvilke handlinger der skal udføres på den under forskellige omstændigheder.

Siden oprettelsen af ​​de første programmerbare maskiner er menneskeheden allerede kommet med mere end to og et halvt tusinde programmeringssprog. Hvert år fyldes deres nummer op med nye. Nogle sprog bruges kun af et lille antal af deres egne udviklere, mens andre bliver kendt af millioner af mennesker. Professionelle programmører bruger nogle gange mere end et dusin forskellige programmeringssprog i deres arbejde.

Sprogskabere fortolker begrebet forskelligt programmeringssprog. Blandt de almindelige punkter, der anerkendes af de fleste udviklere, er følgende:

· Fungere: Et programmeringssprog er beregnet til at skrive computerprogrammer, der bruges til at sende instruktioner til en computer for at udføre en bestemt computerproces og organisere styringen af ​​individuelle enheder.

· Opgave: Et programmeringssprog adskiller sig fra naturlige sprog ved, at det er designet til at overføre kommandoer og data fra en person til en computer, mens naturlige sprog kun bruges til, at folk kan kommunikere med hinanden. I princippet kan vi generalisere definitionen af ​​"programmeringssprog" - dette er en måde at overføre kommandoer, ordrer, klar vejledning til handling på; hvorimod menneskelige sprog også tjener til at udveksle information.

· Udførelse: Et programmeringssprog kan bruge specielle konstruktioner til at definere og manipulere datastrukturer og kontrollere beregningsprocessen.

3. Stadier af løsning af et problem på en computer.

VT har fundet sin mest effektive anvendelse til at udføre arbejdskrævende beregninger i videnskabelig forskning og ingeniørberegninger. Når man løser et problem på en computer, tilhører hovedrollen stadig personen. Maskinen udfører kun sine opgaver i henhold til det udviklede program. Menneskets og maskinens rolle er let at forstå, hvis processen med at løse et problem er opdelt i nedenstående stadier.

Formulering af problemet. Denne fase består af en meningsfuld (fysisk) formulering af problemet og fastlæggelse af endelige løsninger.

Konstruktion af en matematisk model. Modellen skal korrekt (tilstrækkeligt) beskrive de grundlæggende love for den fysiske proces. Konstruktion eller udvælgelse af en matematisk model fra eksisterende kræver en dyb forståelse af problemet og viden om de relevante grene af matematikken.

Udvikling af VM. Da en computer kun kan udføre de enkleste operationer, "forstår" den ikke formuleringen af ​​problemet, heller ikke i en matematisk formulering. For at løse det skal der findes en numerisk metode, der gør det muligt at reducere problemet til en eller anden beregningsalgoritme. I hvert enkelt tilfælde er det nødvendigt at vælge en passende løsning blandt allerede udviklede standardløsninger.

Algoritme udvikling. Processen med at løse et problem (beregningsproces) er skrevet som en sekvens af elementære aritmetiske og logiske operationer, der fører til det endelige resultat og kaldes en problemløsningsalgoritme.

Programmering. Algoritmen til at løse et problem er skrevet i et maskinforståeligt sprog i form af en præcist defineret sekvens af operationer - et program. Processen udføres normalt ved hjælp af et mellemsprog, og dens oversættelse udføres af selve maskinen og dens system.

Tilpasning af programmet. Det kompilerede program indeholder forskellige slags fejl, unøjagtigheder og skrivefejl. Fejlretning omfatter overvågning af programmet, diagnosticering (søgning efter og bestemmelse af indholdet af) fejl og eliminering af dem. Programmet testes ved at løse kontrol(test)problemer for at opnå tillid til resultaternes pålidelighed.

Udførelse af beregninger. På dette stadium udarbejdes indledende data til beregninger, og beregninger udføres ved hjælp af et veletableret program. På samme tid, for at reducere manuelt arbejde i behandling af resultater, kan praktiske former for udstedelse af resultater i form af tekst og grafisk information, i en form, der er forståelig for mennesker, bruges i vid udstrækning.

Analyse af resultater. Beregningsresultaterne analyseres nøje, og der udarbejdes videnskabelig og teknisk dokumentation.

4. Hvad er programmeringssprog til?

Processen med computerdrift består i at udføre et program, det vil sige et sæt meget specifikke kommandoer i en meget bestemt rækkefølge. Maskinformen for instruktionen, der består af nuller og ettaller, angiver præcis, hvilken handling den centrale processor skal udføre. Det betyder, at for at give computeren en sekvens af handlinger, som den skal udføre, skal du angive en sekvens af binære koder for de tilsvarende kommandoer. Maskinkodeprogrammer består af tusindvis af instruktioner. At skrive sådanne programmer er en vanskelig og kedelig opgave. Programmøren skal huske kombinationen af ​​nuller og ettaller af den binære kode for hvert program, såvel som de binære koder for de dataadresser, der bruges i dets udførelse. Det er meget lettere at skrive et program på et sprog, der er tættere på det naturlige menneskelige sprog, og overlade arbejdet med at oversætte dette program til maskinkoder til en computer. Sådan opstod sprog designet specifikt til at skrive programmer - programmeringssprog.

Der er mange forskellige programmeringssprog tilgængelige. Faktisk kan du bruge enhver af dem til at løse de fleste problemer. Erfarne programmører ved, hvilket sprog der er bedst at bruge til at løse hvert enkelt problem, da hvert sprog har sine egne evner, orientering mod bestemte typer problemer og sin egen måde at beskrive begreber og objekter, der bruges til at løse problemer.

Alle de mange programmeringssprog kan opdeles i to grupper: sprog på lavt niveau Og sprog på højt niveau.

Sprog på lavt niveau inkluderer assemblersprog (fra engelsk toassemble - assemble, assemble). Monteringssprog bruger symbolske kommandoer, der er nemme at forstå og hurtige at huske. I stedet for en sekvens af binære koder af kommandoer skrives deres symbolske betegnelser, og i stedet for binære adresser på data, der bruges ved udførelse af en kommando, skrives symbolske navne på disse data valgt af programmøren. Samlingssprog kaldes nogle gange mnemonisk kode eller autokode.

De fleste programmører bruger sprog på højt niveau til at skrive programmer. Ligesom almindeligt menneskesprog har et sådant sprog sit eget alfabet – et sæt symboler, der bruges i sproget. Disse symboler bruges til at udgøre sprogets såkaldte nøgleord. Hvert af nøgleordene udfører sin egen funktion, ligesom i vores velkendte sprog kan ord, der består af bogstaver i alfabetet i et givet sprog, udføre funktionerne i forskellige dele af talen. Nøgleord er knyttet sammen til sætninger i henhold til visse syntaktiske regler for sproget. Hver sætning definerer en bestemt rækkefølge af handlinger, som computeren skal udføre.

Et sprog på højt niveau fungerer som et mellemled mellem en person og en computer, hvilket giver en person mulighed for at kommunikere med en computer på en måde, der er mere velkendt for mennesker. Ofte hjælper et sådant sprog med at vælge den rigtige metode til at løse et problem.

Før du skriver et program på et sprog på højt niveau, skal programmøren skrive algoritme at løse et problem, det vil sige en trin-for-trin handlingsplan, der skal udfyldes for at løse dette problem. Derfor kaldes ofte sprog, der kræver en foreløbig kompilering af en algoritme algoritmiske sprog.