Programmeringssprog og hvorfor de er nødvendige. Forskellige programmeringssprog og deres anvendelsesområder

Programmering for begyndere

Til at begynde med vil jeg gerne sige, at alle kan betjene en computer og lave programmer. Til at skabe computerprogrammer Du behøver ikke at have en utrolig intelligens eller en grad i matematik. Alt du behøver er et ønske om at finde ud af noget og tålmodighed for ikke at holde op.

Evnen til at skrive programmer er den samme færdighed som evnen til at svømme, danse eller jonglere. Nogle mennesker gør det faktisk meget bedre end andre, men enhver kan opnå visse resultater med ordentlig praksis. Det er af denne grund, at børn bliver programmerings-esser i en tidlig alder. Børn er ikke nødvendigvis genier; de er simpelthen tilbøjelige til at lære nye ting og er ikke bange for at lave fejl.

Selvom computere virker som meget komplekse elektroniske monstre, så slap af. Meget få mennesker ved præcis, hvordan de fungerer søgemaskiner, som giver dig mulighed for hurtigt at finde de nødvendige oplysninger på internettet, og nogle mennesker har ikke fundet ud af, hvordan man kører bil. Ligeledes kan næsten alle lære at lave programmer uden at skulle gå i detaljer om præcis, hvordan en computer fungerer.

Generelt fortæller et program computeren, hvordan den skal løse et bestemt problem. Fordi verden er fuld af problemer, er antallet af programmer, som folk kan skrive, uendeligt.

Men for at fortælle computeren, hvordan man løser ét kæmpe problem, skal man som regel fortælle computeren, hvordan man løser en hel række små problemer, der udgør det store problem.
Faktisk er programmering slet ikke svært og er ikke noget mystisk eller overnaturligt. Hvis du er i stand til at skrive trin for trin instruktioner, som vil give en person mulighed for at finde dit hus, kan du skrive et computerprogram.

Den sværeste del af programmering er at identificere de små problemer, der udgør det problem, du skal løse. Da computere er fuldstændig dumme, skal du fortælle dem, hvordan de skal gøre alt.

Hvis du synes, at det er sjovere at lave et program end at bruge det, har du alt, hvad du behøver for at lave computerprogrammer. Hvis du vil lære at skrive computerprogrammer, har du brug for følgende tre kvaliteter.

Forfølgelse. Hvis du vil noget slemt nok, får du det (men hvis du gør noget ulovligt, risikerer du at bruge meget tid i fængsel). Hvis du vil lære at programmere, vil dit ønske helt sikkert hjælpe dig, uanset hvor mange forhindringer der står i vejen.

Nysgerrighed. En sund dosis nysgerrighed kan give næring til dit ønske om at eksperimentere og fortsætte med at forbedre dine programmeringsevner, selv efter at have læst denne bog. Nysgerrighed vil gøre at lære programmering mindre kedeligt og mere interessant. Og hvis du er interesseret, vil du helt sikkert studere og huske mere information end nogen helt uinteresseret person (for eksempel din chef).
Fantasi. At skabe computerprogrammer er en færdighed, men fantasi kan hjælpe med at gøre denne færdighed mere raffineret og fokuseret. En nybegynder programmør med en god portion fantasi vil altid skabe meget mere interessante og nyttige programmer end en stor programmør uden fantasi. Hvis du ikke ved, hvad du skal gøre med dine programmeringsevner, vil dit talent simpelthen dø uden fantasi.

Drive, nysgerrighed og fantasi er de tre vigtigste egenskaber, som enhver programmør bør have. Hvis du har dem, skal du kun bekymre dig om de små ting: hvilket programmeringssprog du skal lære (for eksempel C++), hvad er der med matematik osv.

Blandt mange programmeringssprog kan du altid finde lige præcis det sprog, der egner sig til at løse et givent problem. Når en ny type problemer opstår, skaber folk nye sprog.

Selvfølgelig forstår en computer faktisk kun ét sprog, der består af etaller og nuller, kaldet maskinsprog. Et program skrevet i maskinsprog ser typisk sådan ud:

0010 1010 0001 1101

UN 1100 1010 1111

0101 IT 1101 0101

1101 1111 0010 1001

Yderligere er det meget vigtigt, til hvilket formål sproget er valgt - til undervisning i programmering eller til at løse et specifikt applikationsproblem. I det første tilfælde skal sproget være let at forstå, strengt og om muligt fri for faldgruber. I det andet - omend komplekst, men et effektivt og udtryksfuldt værktøj for en professionel, der ved, hvad han vil.

Nu vil jeg gerne forklare dig, at et programmeringssprog (Basic, Pascal) skal skelnes fra dets implementering, som normalt præsenteres som en del af et programmeringsmiljø (Quick Basic, Virtual Pascal) - et sæt værktøjer til redigering af kildetekster , generering af eksekverbar kode, fejlretning, styring af projekter mv. Syntaksen og semantikken for et programmeringssprog er fastsat i sprogstandarden. Hvert programmeringsmiljø giver sin egen fortolker eller compiler til dette sprog, som ofte tillader brugen af ​​konstruktioner, der ikke er fastgjort i standarden.

Lad os se på de vigtigste og populære programmeringssprog

Monter Det her den lyseste repræsentant lavniveausprog, hvis begrebssæt er baseret på hardwareimplementering. Dette er et automatiseringsværktøj til programmering direkte i processorkoder. Maskinkommandoer er beskrevet i form af mnemoniske operationer, hvilket gør det muligt at opnå ret høj kodemodificerbarhed. Da sættet af kommandoer på forskellige processorer er forskelligt, er der ingen grund til at tale om kompatibilitet. Brugen af ​​assembler er tilrådelig i tilfælde, hvor det er nødvendigt at interagere direkte med hardwaren, eller for at opnå større effektivitet for en del af programmet på grund af større kontrol over kodegenerering.

COBOL- Programmeringssprog højt niveau, udviklet i slutningen af ​​1950'erne. foreningen CADASIL til at løse kommercielle og økonomiske problemer. Den indeholder avancerede værktøjer til at arbejde med filer. Da kommandoer i programmer skrevet på dette sprog aktivt bruger almindeligt engelsk ordforråd og syntaks, betragtes Cobol som et af de enkleste programmeringssprog. Bruges i øjeblikket til at løse økonomiske, informationsmæssige og andre problemer.

Fortran- Et programmeringssprog på højt niveau udviklet af IBM i 1956 til at beskrive algoritmer til løsning af beregningsproblemer. Tilhører kategorien procedureorienterede sprog. De mest almindelige versioner af dette sprog er Fortran IV, Fortran 77 og Fortran 90. Det bruges på alle klasser af computere. Dens seneste version bruges også på computere med parallel arkitektur.

Ada- Et programmeringssprog på højt niveau, orienteret til brug i realtidssystemer og designet til at automatisere opgaver med styring af processer og/eller enheder, for eksempel i computere om bord (skib, luftfart osv.). Udviklet på initiativ af det amerikanske forsvarsministerium i 1980'erne. Opkaldt efter den engelske matematiker Ada Augusta Byron (Lovelace), som levede fra 1815 til 1851.

GRUNDLÆGGENDE(Beginner's All-purpose Symbolic Instruction Code) BASIC blev født i 60'erne i Amerika og blev udtænkt som et simpelt sprog til hurtig udvikling. BASIC er blevet de facto-standarden for mikrocomputere netop på grund af dens lette både indlæring og implementering. For at opnå denne kvalitet blev der dog truffet en række beslutninger (manglende indtastning, linjenummerering og ikke-strukturel GOTO osv.), som påvirker programmeringsstuderendes stil negativt. Derudover har manglen på udtryksfulde midler ført til fremkomsten af ​​et stort antal dialekter af sproget, der er uforenelige med hinanden. Moderne, specialiserede versioner af BASIC (såsom Visual Basic) har trods den erhvervede "struktur" stadig de samme mangler, først og fremmest uagtsomhed i forhold til typer og beskrivelser. Velegnet til brug på indledende fase træning, som et middel til automatisering (i tilfælde hvor det er indbygget i de relevante systemer) eller som et middel til hurtigt at skabe applikationer.

Pascal Udviklet af den berømte teoretiker N. Wirth baseret på ideerne fra ALGOL-68, var Pascal primært beregnet til undervisning i programmering. Bygget på princippet om "nødvendigt og tilstrækkeligt" har det streng typekontrol, konstruktioner til at beskrive vilkårlige datastrukturer og et lille, men tilstrækkeligt sæt af strukturerede programmeringsoperatører. Desværre er bagsiden af ​​enkelhed og stringens besværligheden i beskrivelser af sprogkonstruktioner. Den mest berømte implementering - Turbo/Borland Pascal - på trods af forskellene fra Pascal-standarden, er et miljø og et sæt biblioteker, der har forvandlet det til et uddannelsessprog industrielt system til udvikling af programmer i MS-DOS-miljøet.

C og C++ C-sproget er baseret på krav systemprogrammør: fuld og effektiv adgang til alle computerressourcer, programmeringsværktøjer på højt niveau, programportabilitet mellem forskellige platforme og operativsystemer. C++, mens den opretholder kompatibilitet med C, introducerer objektorienterede programmeringsfunktioner ved at udtrykke ideen om en klasse (objekt) som en brugerdefineret type. Takket være disse kvaliteter har C/C++ indtaget positionen som et universelt sprog til enhver opgave. Men dets brug kan blive ineffektivt, hvor det er nødvendigt for at opnå et resultat, der er klar til brug så hurtigt som muligt, eller hvor selve den proceduremæssige tilgang bliver urentabel.

Delphi- dette er ikke en efterfølger til Borland Pascal / Borland C, dens niche er dvs. hurtig oprettelse applikationer (Rapid Application Developing, RAD). Sådanne værktøjer giver dig mulighed for hurtigt at oprette et arbejdsprogram fra færdige komponenter uden at spilde en masse kræfter på bagateller. En særlig plads i sådanne systemer er optaget af evnen til at arbejde med databaser.

Lisp- Et algoritmisk sprog udviklet i 1960 af J. McCarthy og beregnet til at manipulere lister over dataelementer. Det bruges primært i amerikanske universitetslaboratorier til at løse problemer relateret til kunstig intelligens. I Europa foretrækker de at bruge Prolog til arbejde med kunstig intelligens.

Prolog- Deklarativt programmeringssprog på højt niveau designet til udvikling af systemer og programmer kunstig intelligens. Tilhører kategorien femte generations sprog. Det blev udviklet i 1971 ved universitetet i Marseille (Frankrig), og er et af de meget brugte og konstant udviklende sprog. Dens seneste version er Prolog 6.0

LOGO- Et programmeringssprog på højt niveau udviklet ved Massachusetts Institute of Technology omkring 1970 med det formål at undervise i matematiske begreber. Det bruges også i skoler og af pc-brugere, når de skriver programmer til at lave tegninger på en monitorskærm og styre en penplotter.

Java Hvordan lysende eksempel specialisering dukkede Java-sproget op som svar på behovet for et ideelt bærbart sprog, hvor programmer effektivt kan udføres på WWW-klientsiden. På grund af det specifikke miljø kan Java være et godt valg til et system bygget på internet/intranet teknologi.

ALGOL- Et programmeringssprog på højt niveau med fokus på at beskrive algoritmer til løsning af beregningsmæssige problemer. Det blev skabt i 1958 af specialister fra vesteuropæiske lande til videnskabelig forskning. ALGOL-60-versionen af ​​dette sprog blev vedtaget af den internationale konference i Paris (1960) og blev meget brugt på 2. generations computere. Version ALGOL-68, udviklet af en gruppe specialister fra International Federation for Information Processing (IFIP) i 1968, modtog status som et internationalt universelt programmeringssprog med fokus på at løse ikke kun beregningsmæssige, men også informationsproblemer. Selvom Algol i øjeblikket praktisk talt ikke bruges, tjente det som grundlag eller havde en betydelig indflydelse på udviklingen af ​​mere moderne sprog, for eksempel Ada, Pascal osv.

Der er ikke noget bedste sprog. Hvis du vil blive professionel programmør, skal du lære et af programmeringssprogene på højt niveau (det mest populære programmeringssprog er C++) samt et af databaseprogrammeringssprogene (for eksempel SQL) . Når du først har lært programmeringssproget C++, kan du ikke gå galt. Når du kender dette sprog, kan du altid finde et job i enhver programmeringsvirksomhed.
På trods af den store popularitet af programmeringssproget C++, bruges andre sprog også ofte. På mange forældede computere programmer skrevet i programmeringssproget COBOL virker stadig. Derfor har vi brug for programmører, der kan forbedre disse programmer og også skrive nye. Meget ofte betaler store virksomheder sådanne programmører høje lønninger.
Hvis du skal arbejde på egen hånd, er det bedst at lære, hvordan du opretter dine egne databaseprogrammer. For at gøre dette skal du lære programmeringssprog som SQL eller VBA, der bruges i programmet Microsoft Access. For at oprette websider skal du kende HTML, samt en vis viden om Java, JavaScript, VBScript og andre internetprogrammeringssprog. Det mest nødvendige programmeringssprog vil være et, der giver dig mulighed for nemt og hurtigt at løse de opgaver, du har fået tildelt. Dette kan være et programmeringssprog såsom C++, BASIC, Java, SQL eller assemblersprog.

Afslutningsvis bemærker vi, at fra et professionelt synspunkt er det ikke så vigtigt i hvilket sprog og i hvilket miljø programmøren arbejder, men hvordan han udfører sit arbejde. Hardware og operativsystemer er under forandring. Nye udfordringer opstår fra en række forskellige fagområder. De bliver fortid og nye sprog dukker op. Men folk forbliver - dem, der skriver, og dem, som der skrives nye programmer til, og hvis kvalitetskrav forbliver de samme uanset disse ændringer.
Så vi så på det grundlæggende i programmering og de vigtigste programmeringssprog.

Jeg ønsker dig held og lykke med at mestre programmering!

2) Hvad er et programmeringssprog side 2

3) Hvad er programmeringssprog til? side 3

4) Hvilke programmeringssprog findes s. 4 – 7

5) Hvad er en compiler og fortolker side 8

6) Referencer side 9

Introduktion

Indtil midten af ​​60'erne var computere alt for dyre maskiner, der kun blev brugt til særlige opgaver, og udførte kun én opgave ad gangen (den såkaldte. batchbehandling).

Denne tids programmeringssprog, ligesom de computere, de blev brugt på, var designet til specifikke opgaver, som f.eks. videnskabelig databehandling. Da maskiner var dyre, og der kun blev udført én opgave ad gangen, var maskintiden dyr - så hastigheden på programafviklingen kom først.

Men i løbet af 60'erne begyndte prisen på computere at falde, så selv små virksomheder havde råd til dem; Hastigheden på computere blev ved med at stige, og tiden kom, hvor de ofte begyndte at stå stille uden opgaver. For at forhindre dette i at ske, begyndte de at indføre systemer med tidsdeling(tidsdeling).

I sådanne systemer blev processortiden "skåret ud", og alle brugere modtog til gengæld korte sektioner af denne tid. Maskinerne var hurtige nok til at få hver bruger på terminalen til at føle, som om de betjener systemet alene. Maskinen var til gengæld mindre inaktiv, da den ikke udførte én, men mange opgaver på én gang. Tidsdeling reducerede omkostningerne ved maskintid radikalt, fordi én maskine kunne deles af hundredvis af brugere.

Under disse forhold - da strøm blev billig og tilgængelig - begyndte skaberne af programmeringssprog i stigende grad at tænke på let at skrive programmer, og ikke kun hastigheden af ​​deres udførelse. "Små" (atomare) operationer udført direkte af maskinenheder er blevet kombineret til "større", operationer på højt niveau og hele strukturer, der er meget nemmere og mere bekvemme for mennesker at arbejde med.

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 af leksikalske, syntaktiske og semantiske regler, brugt til at kompilere 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. Ved kun, hvordan man bruger nogle sprog lille antal deres egne udviklere, 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 fællesskaber af steder, 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 om at udføre det ene eller det andet. 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.

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, ord, der består af bogstaver i alfabetet af dette sprog, kan udføre funktioner forskellige dele tale. 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 problemet, dvs trin for trin plan handlinger, der skal udføres for at løse dette problem. Derfor kaldes ofte sprog, der kræver en foreløbig kompilering af en algoritme algoritmiske sprog.

Hvilke programmeringssprog findes der?

Fortran

Programmeringssprog begyndte at dukke op i midten af ​​50'erne. Et af de første sprog af denne type var Fortran-sproget (engelsk FORTRAN fra FORmulaTRANslator - formeloversætter), udviklet i 1957. Fortran bruges til at beskrive en algoritme til løsning af videnskabelige og tekniske problemer ved hjælp af en digital computer. Ligesom de første computere var dette sprog primært beregnet til at udføre naturvidenskabelige og matematiske beregninger. I en forbedret form har dette sprog overlevet den dag i dag. Blandt moderne sprog på højt niveau er det et af de mest brugte i videnskabelig forskning. De mest almindelige varianter er Fortran-II, Fortran-IV, EASICFortran og deres generaliseringer.

ALGOL

Efter Fortran i 1958-1960 dukkede Algol-sproget (Algol-58, Algol-60) (engelsk ALGOL fra ALGOrithmicLanguage - algoritmisk sprog) Algol blev forbedret i 1964-1968 - Algol-68. Algol blev udviklet af et udvalg, hvori inkluderet europæiske og amerikanske videnskabsmænd. Det er et sprog på højt niveau og giver dig mulighed for nemt at oversætte algebraiske formler til programkommandoer. Algol var populær i Europa, inklusive USSR, mens den sammenlignelige Fortran var almindelig i USA og Canada. Algol havde en betydelig indflydelse på alle senere udviklede programmeringssprog, og især på Pascal-sproget. Dette sprog, ligesom Fortran, var beregnet til at løse videnskabelige og tekniske problemer. Derudover blev dette sprog brugt som et middel til at undervise i det grundlæggende i programmering - kunsten at skrive programmer.

Normalt betyder udtrykket ALGOL sproget ALGOL-60, mens ALGOL-68 betragtes som et selvstændigt sprog. Selv da Algol-sproget næsten holdt op med at blive brugt til programmering, forblev det stadig officielle sprog til publicering af algoritmer.

COBOL

I 1959 - 1960 blev COBOL-sproget udviklet (engelsk COBOL fra Commom Business Oriented Language - gensidigt sprog forretningsorienteret). Dette er et tredje generations programmeringssprog, primært beregnet til udvikling af forretningsapplikationer.Cobol var også beregnet til at løse økonomiske problemer, behandle data for banker, forsikringsselskaber og andre institutioner af denne art. Udvikleren af ​​den første forenede Cobol-standard var Grace Hopper ( bedstemor Cobola).

COBOL bliver normalt kritiseret for at være ordrig og besværlig, da et af målene for sprogets skabere var at gøre strukturerne så tæt som muligt på det engelske sprog. (Cobol betragtes stadig som det programmeringssprog, hvor der blev skrevet flest linjer kode). Samtidig havde COBOL fremragende faciliteter til at arbejde med datastrukturer og filer for sin tid, hvilket sikrede dets lange levetid i forretningsapplikationer, i hvert fald i USA.

Maskinen forstår ikke menneskeligt sprog. Selvfølgelig taler vi ikke om Siri og andre stemmegenkendere – vi taler om skabelsen af ​​ny software. For at lave en lommeregner skal maskinen have en opgave på samme måde, som en værkfører forklarer arbejderne, hvordan man lægger en mursten. Men "Vasya, for fanden, du skal være mere jævn!" skal beskrives i et programmeringssprog. Hvor kom disse sprog overhovedet fra?

Udgangspunktet for den moderne computer er Babbages analytiske motor, men sprog blev opfundet tidligere: i det 19. århundrede blev det mekaniske klaver og væven opfundet, for hvilke ingeniører beskrev operationslogikken. Dette sæt instruktioner er en prototype på, hvad programmører skriver i i dag.

I midten af ​​det 20. århundrede dukkede Turing-maskinen op, derefter de første computere og det første moderne programmeringssprog Plankalkül. Det første spring i udviklingen skete, da militæret henledte opmærksomheden på computere - DARPA og andre som dem begyndte at investere aktivt i den unge industri. Den anden kom med spredningen af ​​internettet - jo dybere folk dykker ned i den digitale æra, jo mere efterspurgte er de vigtigste skabere af miljøet i denne æra - programmører. Og flere og flere vil gerne være med.

Ønsket er rimeligt og forståeligt, men det første spørgsmål i hovedet bliver ofte en uoverstigelig barriere – hvilket sprog skal jeg begynde at lære programmering med? Frygten for at træffe det forkerte valg er baseret på frygten for at spilde tid. Som følge heraf søger en nybegynder programmør efter "sitt" sprog i flere år uden at gøre fremskridt mod sit elskede mål. Så for fanden, hvilket sprog skal du vælge?

Kriterier for valg af det første programmeringssprog

Valget af sprog afhænger af de problemer, som programmøren ønsker at løse. Til internetprojekter er Python populær, som Google og Facebook bruger i deres projekter; til mobilapplikationer til Android er Java den bedste ven, og til iOS Swift.

Det sande problem med valg er manglen på en specifik opgave. Det er normalt, fordi du først kan forstå, hvad du præcis vil gøre, når du er inde i miljøet. Derfor anbefaler eksperter at tage det som dit første sprog, som du kan løse den bredeste vifte af problemer med.

Selvfølgelig løser højt specialiserede sprog bedre de problemer, de er designet til, men dette er næste skridt. En nybegynder har stadig brug for valgfrihed.

Udover alsidighed, der er også kriterier:

  • Enkelhed— at snuble over kompleks syntaks og sidde fast i junglen af ​​ulæselig kode er ikke den mest behagelige start på at lære.
  • Popularitet— sproget skal opdateres hyppigt, have et stort fællesskab af udviklere og være efterspurgt i store virksomheder. Et andet plus er, at jo mere populært sproget er, jo lettere er det at finde et svar på det arbejdsspørgsmål, der er opstået.

Disse tre beskrivelser passer bedst Python sprog, C#, Java og Ruby.

Udviklet i 80'erne af den hollandske programmør Guido van Rossum. Store teknologivirksomheder arbejder med Python: Yandex, Google, Facebook og YouTube. Dette er det såkaldte scriptsprog - det, der er skrevet under programmets hætte, er skrevet i det. Det bruges til webapplikationer, spiludvikling, serversoftware...

Enkelhed Popularitet Alsidighed

Koden er let at læse og har en overskuelig struktur. Standardværktøjer er nok til at begynde at lære.

Rangeret som nr. 1 i programmeringsprogrammer på begynderniveau ved amerikanske universiteter.

Opdateres regelmæssigt - hvert 2,5 år. Det er et af de fem mest populære sprog ifølge analysefirmaet TIOBE Software for januar 2016.

Næsten alt er skrevet i Python: systemstyringsscripts, websteder, maskinlæringssystemer, spil.

Sproget blev udviklet i slutningen af ​​90'erne baseret på C++ og Java. Anvendes hovedsageligt til store virksomhedsprojekter, men ikke begrænset til dem. For eksempel er scripts i Unity-spilmotoren skrevet i C#.

Enkelhed Popularitet Alsidighed

Strukturelt tæt på C++ og Java - syntaks (struktur programkode) er sværere end Python og Ruby, men det vil tage mindre tid at lære relaterede sprog. Bibliotekets grænseflader passer godt ind i designmønstre, hvilket gør dem nemme at lære.

Den sidste opdatering var i 2015.

C# er skrevet til Windows Phone, iOS og Android. Der er en stor mængde dokumentation, men der er ikke mange biblioteker med en gratis licens - det betyder, at en programmør kan bruge en andens kode til træning, men for at bruge den i et kommercielt produkt skal du betale.

Sproget blev opfundet af programmører fra Microsoft for at udvikle Windows-applikationer. På trods af dette bruges det også i andre systemer. Fungerer også på embedded, desktop og server platforme.


Rubin

Skabt af en japansk udvikler påvirket af Perl sprog. Lanceret i 1995. Ruby er skrevet af: Shopify, Github, Groupon, Gule Sider, Twitter og Slideshare. Det vinder popularitet, men er mere almindeligt i startups end i store virksomheder. Velegnet til at skabe et simpelt internetprojekt.

Enkelhed Popularitet Alsidighed

Ligesom Python er koden let at læse. Strukturen er også identisk med Python. Sammenlignet med andre sprog er valget af standardbiblioteker dårligere - du skal bruge tid på at søge.

Stort og loyalt fællesskab af udviklere - rangerer blandt de ti mest populære sprog ifølge TIOBE Software. Mange biblioteker er frit tilgængelige.

Den mindst universelle af de fire - primært velegnet til webudvikling. På den anden side kan man indenfor internetprojekter lave meget forskellige og meget fede ting med det.


Java

Den første version af sproget blev udgivet i maj 1995. Java bruges af Amazon, eBay, LinkedIn og Yahoo!

Enkelhed Popularitet Alsidighed

Som tidligere nævnt har Java og C# meget ens syntaks - når du først har lært den ene, kender du næsten den anden. Men som i det første tilfælde er syntaksen mere kompleks end Ruby og Python.

Der er 3 milliarder Android-smartphones i verden, hvilket betyder, at Java vil være efterspurgt i lang tid. Først i popularitet ifølge TIOBE Software.

Bruges oftest til virksomhedsudvikling og Android-applikationer.


Resultatet af forberedelsen

Det er svært at drage en konklusion. På den ene side lokker muligheden for at slå to fluer med ét smæk og tage Java eller C#, men Python tiltrækker med sin alsidighed, og Ruby med sin enkelhed.

Vi tvivlede på det og gik for at tale med erfarne udviklere - de rådede os stadig til at holde os til Python. Her er hvad Grigory Petrov, professionel udvikler og VoxImplant evangelist, siger:

"Python-programmeringssproget kaldes ofte "eksekverbar pseudokode", fordi sprogets syntaks og standardbiblioteker understreger læsbarhed og forståelighed. Lad os føje til dette bredeste udvalg udviklingsværktøjer, biblioteker, træningsmaterialer - og vi får et af de bedste programmeringssprog for begyndere."

Konklusion: Selvom der ikke er klare opgaver og klare mål, men kun et ønske om at kode, er det værd at stoppe ved Python - det er enkelt, populært og universelt. Nikita Sobolev, en programmeringslærer for begyndere på #tceh, anser også valget af dette sprog for optimalt for en begynder - uddannelsesprogram Det viste sig at være sværere og længere end Ruby-banen, men friheden til at vælge retning er det værd.

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 på 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 for holdet, blev der brugt alle mulige slags ord, der ligner "menneske". engelsk sprog- nogle tilføje eller flytte - og derefter registre eller hukommelsesområder, variabler, som disse operationer skal udføres med, blev listet. 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 stor mængde mangler (nå, bare generelt store) - du kan gøre alt på det, inklusive skyde dig selv i foden, skyde dig selv i foden med en opfindelse, i den anden fod, skyde dig selv med den ene fod i den anden fod, generelt - gør hvad der passer dig. 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++.

Udover objekt tilgang(i C++) dukkede op ret hurtigt standard bibliotek skabeloner (STL). 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. Én person stoppede hurtigt med dette - han lavede sin egen side, det havde han Gæstebog nogle, noget andet, nogle 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? Fordi han for det første arvede pga bagudkompatibilitet alle problemer med C. Du kan stadig slå dig selv ihjel der med en million forskellige veje, de samme som var i C (naturligvis blev der tilføjet nye metoder 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 flere apps, mere legetøj til telefonen, 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, at 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, og for det andet spiste den hukommelse fra frygtelig kraft, for det tredje var den bærbar overalt (teoretisk set) - selv til en kaffemaskine, selv 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, der var lav ydeevne og alt dette begyndte yderligere at sløve og bremse.

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 værre programmører kan skrive gode programmer i Java, fordi det ikke tillader dig at skrive dårlige programmer - der er ingen værktøjer der til at skrive dårlige programmer. Der kan man kun skrive gode programmer. Nå, i forståelsen af ​​skaberne af sproget.

Det vil sige, 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 på nogle måder simple ting. Hvis du løser nogle skoleproblemer, pædagogiske opgaver eller noget andet (ikke designe 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 på 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å det bedste valg- det er C, men faktisk hørte jeg noget (men så ikke), 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. Derfor vil der være 2 KB hukommelse, en 5 kHz processor, og det er klart, at du bliver nødt til at skrue en form for virtuel maskine eller et scriptsprog vil ikke fungere i den nærmeste fremtid - hvilket betyder, at du bliver nødt til at skrive noget i C. Og selv nu, for eksempel, er databehandling på et videokort (OpenCL eller anden teknologi) ikke opfundet der nyt sprog at skrive programmer til dem - de laver C der med nogle store restriktioner. 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 nye 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 man skriver noget i længere tid f.eks bankansøgning en slags (så den godkender lån, noget andet) - du skriver 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 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 en slags mellemlogik, skrevet i Java, som 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, sproget kan være fremragende, men der er ingen dokumentation endnu, der er intet fællesskab, der kan besvare spørgsmål (på Stack Overflow), og endelig, vigtigst af alt, er der ingen stor mængde biblioteker, skyder tungen ikke ud. 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 gøre noget system programmering, Ja? 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å. MED ren tavle begynde. 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) på dette øjeblik. 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, hvordan de studeres i anvendt matematik og datalogi på Det anvendte fakultet, hvilket vi laver sammen med Yandex. I første semester - Python (ikke fuldt ud, omtrent 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. Altså dette praktisk brug databaser, igen noget lignende 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 ganske bredt, og på dette tidspunkt forstår folk allerede, at de ikke vil gøre det computersystemer under ingen omstændigheder (de kunne f.eks. ikke lide systemprogrammering), men de vil gerne arbejde på nogle teoretiske algoritmer, beregne vanskeligheder, 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 gjorde samarbejde. 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%. Altså hvis du allerede har færdigt projekt skrevet i PHP, 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." Godt, 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.

Programmøren William W. Vold fortæller historien

I løbet af de sidste seks måneder har jeg arbejdet på at skabe et programmeringssprog (PL) kaldet Pinecone. Jeg vil ikke turde kalde det komplet, men du kan allerede nu bruge det – det indeholder nok elementer til dette, såsom variabler, funktioner og brugerdefinerede datastrukturer. Hvis du vil tjekke det ud, før du læser, foreslår jeg, at du besøger den officielle side og repository på GitHub.

Introduktion

Jeg er ikke ekspert. Da jeg begyndte at arbejde på dette projekt, anede jeg ikke, hvad jeg lavede, og det gør jeg stadig ikke. Jeg har aldrig målrettet studeret principperne for at skabe et sprog - jeg læste kun nogle materialer på internettet, og selv i dem fandt jeg ikke næsten noget nyttigt for mig selv.

Jeg skrev dog et helt nyt sprog. Og det virker. Jeg må gøre noget rigtigt.

I denne artikel vil jeg forsøge at vise, hvordan Pinecone (og andre programmeringssprog) gør kildekode til det, som mange betragter som magi. Jeg vil også fokusere på situationer, hvor jeg var nødt til at indgå kompromiser og forklare, hvorfor jeg tog de beslutninger, jeg gjorde.

Teksten gør bestemt ikke krav på at være en fuldgyldig guide til at skabe et programmeringssprog, men for de nysgerrige vil det være et godt udgangspunkt.

Første skridt

"Hvor skal jeg overhovedet starte?" er et spørgsmål, som andre udviklere ofte stiller, når de lærer, at jeg skriver mit eget sprog. I denne del vil jeg forsøge at besvare det i detaljer.

Kompileret eller fortolket?

Compileren analyserer hele programmet, omdanner det til maskinkode og gemmer det til senere afvikling. Fortolkeren analyserer og udfører programmet linje for linje i realtid.

Teknisk set kan ethvert sprog både kompileres og fortolkes. Men for hvert sprog er den ene af metoderne mere egnet end den anden, og valget af paradigme afhænger af tidlige stadier bestemmer videre udformning. I en generel forstand er fortolkning fleksibel, og kompilering giver høj ydeevne, men dette er kun toppen af ​​et meget komplekst emne.

Jeg ønskede at skabe et enkelt, men kraftfuldt sprog, hvilket er sjældent, så jeg besluttede at lave Pinecone kompileret helt fra begyndelsen. Pinecone har dog også en tolk - først var lancering kun mulig med dens hjælp, senere vil jeg forklare hvorfor.

Bemærk oversættelse Det har vi i øvrigt kort anmeldelse er en god øvelse for dem, der lærer Python.

Valg af sprog

En slags meta-trin: selve programmeringssproget er et program, der skal skrives på et eller andet sprog. Jeg valgte C++ på grund af ydeevne, stort sæt funktionalitet, og bare fordi jeg kan lide ham.

Men generelt kan følgende råd gives:

  • fortolkeligt sprog højt anbefaletskrive i et kompileret sprog (C, C++, Swift). Ellers vil præstationen overhead snebold, mens meta-tolken tolker din tolk;
  • kompileret sprog du kan skrive i fortolket sprog (Python, JS). Kompileringstiden vil stige, men ikke programudførelsestiden.

Arkitektur design

Strukturen af ​​et programmeringssprog har flere trin fra kildekode til eksekverbar fil, som hver især formaterer data på en bestemt måde, samt funktioner til overgang mellem disse stadier. Lad os tale om dette mere detaljeret.

Leksisk analysator/lexer

Kildekodelinjen føres gennem lexeren og omdannes til en liste over tokens.

Det første trin på de fleste sprog er leksikalsk analyse. Enkelt sagt repræsenterer det opdelingen af ​​tekst i tokens, det vil sige sprogenheder: variabler, funktionsnavne (identifikatorer), operatorer, tal. Ved at tilføre lexeren en streng med kildekoden som input, vil vi således som output modtage en liste over alle de tokens, den indeholder.

Kildekoden vil ikke længere være tilgængelig i efterfølgende trin, så lexeren skal give alle de nødvendige oplysninger for dem.

Flex

Da jeg oprettede sproget, var det første, jeg gjorde, at skrive en lexer. Senere udforskede jeg værktøjer, der kunne gøre leksikalsk analyse lettere og reducere antallet af fejl, der opstår.

Et af de vigtigste sådanne værktøjer er Flex - en leksikalsk analysatorgenerator. Det tager som input en fil, der beskriver sprogets grammatik, og opretter derefter et C-program, som igen analyserer strengen og producerer det ønskede resultat.

Min beslutning

Jeg besluttede at beholde analysatoren, jeg skrev. I sidste ende så jeg ikke nogen særlige fordele ved Flex, og brugen af ​​det ville kun skabe yderligere afhængigheder, der ville komplicere byggeprocessen. Plus, mit valg giver mulighed for mere fleksibilitet - for eksempel kan du tilføje en erklæring til sproget uden at skulle redigere flere filer.

Parser/parser

Listen over tokens går gennem parseren og bliver til et træ.

Næste trin er parseren. Det transformerer kildeteksten, det vil sige en liste over tokens (under hensyntagen til parenteser og rækkefølge af operationer), til et abstrakt syntakstræ, som giver dig mulighed for strukturelt at repræsentere reglerne for det oprettede sprog. Selve processen kan kaldes simpel, men med en stigning i antallet af sprogkonstruktioner bliver den meget mere kompliceret.

Bison

På dette trin tænkte jeg også på at bruge et tredjepartsbibliotek og se på Bison for at generere parseren. Det minder meget om Flex - en brugerdefineret fil med syntaksregler er struktureret ved hjælp af et C-program. Men igen, jeg besluttede mig for at undgå automatiseringsværktøjer.

Fordele ved tilpassede programmer

Med lexeren var min beslutning om at skrive og bruge min egen kode (ca. 200 linjer lang) ret indlysende: Jeg elsker puslespil, og denne er også relativt triviel. Parseren er en anden historie: nu er kodelængden for den 750 linjer, og dette er allerede det tredje forsøg (de første to var simpelthen forfærdelige).

Jeg besluttede dog at lave parseren selv. Her er hovedårsagerne:

  • minimere kontekstskift;
  • forenkling af montering;
  • lyst til at klare opgaven selvstændigt.

Jeg var overbevist om gennemførligheden af ​​løsningen ved udtalelsen fra Walter Bright (skaberen af ​​D-sproget) i en af ​​hans artikler:

Jeg vil ikke anbefale at bruge lexer og parser generatorer, samt andre såkaldte "compiler compilere". At skrive en lexer og parser vil ikke tage meget tid, og brug af generatoren vil binde dig fast til den i videre arbejde(hvilket betyder noget, når compileren overføres til ny platform). Derudover er generatorer kendetegnet ved at udsende irrelevante fejlmeddelelser.

Abstrakt semantisk graf

Overgang fra et syntakstræ til en semantisk graf

I denne del implementerede jeg en struktur, der i det væsentlige er tættest på "mellemrepræsentationen" i LLVM. Der er en lille, men vigtig forskel mellem et abstrakt syntakstræ (AST) og en abstrakt semantisk graf (ASG).

ASG vs ASD

Groft sagt er en semantisk graf et syntaktisk træ med kontekst. Det vil sige, at den indeholder information såsom hvilken type funktionen returnerer eller hvilke steder den samme variabel bruges. Fordi grafen skal genkende og huske hele denne sammenhæng, har den kode, der genererer den, brug for støtte i form af mange forskellige forklarende tabeller.

Lancering

Når først grafen er tegnet, er det en ret simpel opgave at køre programmet. Hver node indeholder en implementering af en funktion, der tager noget input, gør det, den er programmeret til at gøre (inklusive mulige kald til hjælpefunktioner) og returnerer et resultat. Dette er tolken i aktion.

Kompileringsmuligheder

Du undrer dig måske over, hvor tolken kom fra, da jeg oprindeligt definerede Pinecone som et kompileret sprog. Pointen er, at kompilering er meget sværere end fortolkning - jeg nævnte tidligere, at jeg løb ind i nogle problemer med dette trin.

Skriv din egen compiler

Først kunne jeg godt lide denne idé – jeg kan godt lide at lave ting selv, og jeg har længe ønsket at lære samlesprog. Men at skabe en cross-platform compiler fra bunden er sværere end at skrive maskinkode for hvert element i sproget. Jeg fandt denne idé fuldstændig upraktisk og ikke værd at bruge de ressourcer på.