Programmeringsspråk og hvorfor de trengs. Ulike programmeringsspråk og deres bruksområder

Programmering for nybegynnere

Til å begynne med vil jeg si at hvem som helst kan betjene en datamaskin og lage programmer. For å skape dataprogrammer Du trenger ikke ha en utrolig intelligens eller en grad i matematikk. Alt du trenger er et ønske om å finne ut av noe og tålmodighet for ikke å slutte.

Evnen til å skrive programmer er den samme ferdigheten som evnen til å svømme, danse eller sjonglere. Noen mennesker gjør det faktisk mye bedre enn andre, men hvem som helst kan oppnå visse resultater med riktig øvelse. Det er av denne grunn at barn blir programmerings-ess i en tidlig alder. Barn er ikke nødvendigvis genier; de er rett og slett tilbøyelige til å lære nye ting og er ikke redde for å gjøre feil.

Selv om datamaskiner virker som svært komplekse elektroniske monstre, slapp av. Svært få mennesker vet nøyaktig hvordan de fungerer søkemotorer, som lar deg raskt finne nødvendig informasjon på Internett, og noen mennesker har ikke funnet ut hvordan du kjører bil. På samme måte kan nesten alle lære å lage programmer uten å måtte gå i detalj om nøyaktig hvordan en datamaskin fungerer.

Generelt sett forteller et program datamaskinen hvordan den skal løse et bestemt problem. Fordi verden er full av problemer, er antallet programmer som folk kan skrive uendelig.

Men for å fortelle datamaskinen hvordan den skal løse ett stort problem, må du vanligvis fortelle datamaskinen hvordan den skal løse en hel rekke små problemer som utgjør det store problemet.
Faktisk er programmering slett ikke vanskelig og er ikke noe mystisk eller overnaturlig. Hvis du er i stand til å skrive trinnvise instruksjoner, som lar en person finne huset ditt, kan du skrive et dataprogram.

Den vanskeligste delen av programmering er å identifisere de små problemene som utgjør problemet du må løse. Siden datamaskiner er helt dumme, må du fortelle dem hvordan de skal gjøre alt.

Hvis du synes det er morsommere å lage et program enn å bruke det, har du alt du trenger for å lage dataprogrammer. Hvis du vil lære å skrive dataprogrammer, trenger du følgende tre egenskaper.

Forfølgelse. Hvis du vil ha noe vondt nok, får du det (men gjør du noe ulovlig risikerer du å tilbringe mye tid i fengsel). Hvis du ønsker å lære å programmere, vil ønsket ditt definitivt hjelpe deg, uansett hvor mange hindringer som står i veien.

Nysgjerrighet. En sunn dose nysgjerrighet kan gi næring til ønsket om å eksperimentere og fortsette å forbedre dine programmeringsferdigheter selv etter å ha lest denne boken. Nysgjerrighet vil gjøre programmering mindre kjedelig og mer interessant. Og hvis du er interessert, vil du definitivt studere og huske mer informasjon enn noen helt uinteressert person (for eksempel sjefen din).
Fantasi. Å lage dataprogrammer er en ferdighet, men fantasi kan bidra til å gjøre den ferdigheten mer raffinert og fokusert. En nybegynner programmerer med en god del fantasi vil alltid lage mye mer interessante og nyttige programmer enn en god programmerer uten fantasi. Hvis du ikke vet hva du skal gjøre med programmeringsferdighetene dine, vil talentet ditt ganske enkelt dø uten fantasi.

Drivkraft, nysgjerrighet og fantasi er de tre viktigste egenskapene enhver programmerer bør ha. Hvis du har dem, trenger du bare å bekymre deg for de små tingene: hvilket programmeringsspråk du skal lære (for eksempel C++), hva skjer med matematikk osv.

Blant mange programmeringsspråk kan du alltid finne akkurat det språket som passer for å løse et gitt problem. Når en ny type problemer oppstår, skaper folk nye språk.

Selvfølgelig forstår en datamaskin faktisk bare ett språk, som består av enere og nuller, kalt maskinspråk. Vanligvis ser et program skrevet på maskinspråk omtrent slik ut:

0010 1010 0001 1101

UN 1100 1010 1111

0101 IT 1101 0101

1101 1111 0010 1001

Videre er det svært viktig for hvilket formål språket er valgt - for undervisning i programmering eller for å løse et spesifikt applikasjonsproblem. I det første tilfellet skal språket være lett å forstå, strengt og om mulig fritt for fallgruver. I det andre - om enn komplekst, men et effektivt og uttrykksfullt verktøy for en profesjonell som vet hva han vil.

Nå vil jeg gjerne forklare deg at et programmeringsspråk (Basic, Pascal) bør skilles fra implementeringen, som vanligvis presenteres som en del av et programmeringsmiljø (Quick Basic, Virtual Pascal) - et sett med verktøy for redigering av kildetekster , generere kjørbar kode, feilsøke, administrere prosjekter, etc. Syntaksen og semantikken til et programmeringsspråk er fastsatt i språkstandarden. Hvert programmeringsmiljø gir sin egen tolk eller kompilator for dette språket, som ofte tillater bruk av konstruksjoner som ikke er fikset i standarden.

La oss se på de viktigste og populære programmeringsspråkene

Monter Dette den flinkeste representanten lavnivåspråk, hvor konseptsettet er basert på maskinvareimplementering. Dette er et automatiseringsverktøy for programmering direkte i prosessorkoder. Maskinkommandoer er beskrevet i form av mnemoniske operasjoner, som gjør det mulig å oppnå ganske høy kodemodifiserbarhet. Siden settet med kommandoer på forskjellige prosessorer er forskjellig, er det ikke nødvendig å snakke om kompatibilitet. Bruk av assembler er tilrådelig i tilfeller der det er nødvendig å samhandle direkte med maskinvaren, eller for å oppnå større effektivitet for en del av programmet på grunn av større kontroll over kodegenerering.

COBOL- Programmeringsspråk høy level, utviklet på slutten av 1950-tallet. foreningen CADASIL for å løse kommersielle og økonomiske problemer. Den har avanserte verktøy for å jobbe med filer. Siden kommandoer i programmer skrevet på dette språket aktivt bruker vanlig engelsk vokabular og syntaks, regnes Cobol som et av de enkleste programmeringsspråkene. Brukes for tiden til å løse økonomiske, informasjons- og andre problemer.

Fortran- Et programmeringsspråk på høyt nivå utviklet av IBM i 1956 for å beskrive algoritmer for å løse beregningsproblemer. Tilhører kategorien prosedyreorienterte språk. De vanligste versjonene av dette språket er Fortran IV, Fortran 77 og Fortran 90. Det brukes på alle klasser av datamaskiner. Den nyeste versjonen brukes også på datamaskiner med parallell arkitektur.

Ada- Et programmeringsspråk på høyt nivå, orientert for bruk i sanntidssystemer og designet for å automatisere oppgaver med å administrere prosesser og/eller enheter, for eksempel i datamaskiner ombord (skip, luftfart, etc.). Utviklet på initiativ fra det amerikanske forsvarsdepartementet på 1980-tallet. Oppkalt etter den engelske matematikeren Ada Augusta Byron (Lovelace), som levde fra 1815 til 1851.

GRUNNLEGGENDE(Beginner's All-purpose Symbolic Instruction Code) BASIC ble født på 60-tallet i Amerika, og ble tenkt som et enkelt språk for rask utvikling. BASIC har blitt de facto-standarden for mikrodatamaskiner nettopp på grunn av dens lette både læring og implementering. For å oppnå denne kvaliteten ble det imidlertid tatt en rekke avgjørelser (manglende skriving, linjenummerering og ikke-strukturell GOTO, etc.), som påvirker stilen til programmeringsstudenter negativt. I tillegg har mangelen på uttrykksfulle midler ført til fremveksten av et stort antall dialekter av språket som er uforenlige med hverandre. Moderne, spesialiserte versjoner av BASIC (som Visual Basic), til tross for den ervervede "strukturen", har fortsatt de samme manglene, først og fremst uaktsomhet i forhold til typer og beskrivelser. Egnet for bruk på det første stadiet opplæring, som et middel for automatisering (i tilfeller der det er innebygd i de aktuelle systemene) eller som et middel for raskt å lage applikasjoner.

Pascal Pascal ble utviklet av den berømte teoretikeren N. Wirth basert på ideene til ALGOL-68, og var først og fremst ment for å undervise i programmering. Bygget på "nødvendig og tilstrekkelig"-prinsippet, har den streng typekontroll, konstruksjoner for å beskrive vilkårlige datastrukturer, og et lite, men tilstrekkelig sett med strukturerte programmeringsoperatører. Dessverre er baksiden av enkelhet og stringens besværligheten i beskrivelser av språkkonstruksjoner. Den mest kjente implementeringen - Turbo/Borland Pascal - til tross for forskjellene fra Pascal-standarden, er et miljø og et sett med biblioteker som har gjort det til et pedagogisk språk industrielt system for utvikling av programmer i MS-DOS-miljøet.

C og C++ C-språket er basert på krav systemprogrammerer: full og effektiv tilgang til alle dataressurser, programmeringsverktøy på høyt nivå, programportabilitet mellom ulike plattformer og operativsystemer. C++, mens den opprettholder kompatibilitet med C, introduserer objektorienterte programmeringsmuligheter ved å uttrykke ideen om en klasse (objekt) som en brukerdefinert type. Takket være disse egenskapene har C/C++ tatt posisjonen som et universelt språk for enhver oppgave. Men bruken kan bli ineffektiv der det er nødvendig for å oppnå et resultat som er klart til bruk så snart som mulig, eller hvor selve den prosessuelle tilnærmingen blir ulønnsom.

Delphi- dette er ikke en etterfølger til Borland Pascal / Borland C, dens nisje er dvs. rask opprettelse applikasjoner (Rapid Application Developing, RAD). Slike verktøy lar deg raskt lage et arbeidsprogram fra ferdige komponenter, uten å kaste bort mye krefter på bagateller. En spesiell plass i slike systemer er okkupert av evnen til å jobbe med databaser.

Lisp- Et algoritmisk språk utviklet i 1960 av J. McCarthy og beregnet på å manipulere lister over dataelementer. Det brukes først og fremst i amerikanske universitetslaboratorier for å løse problemer knyttet til kunstig intelligens. I Europa foretrekker de å bruke Prolog til arbeid med kunstig intelligens.

Prolog- Deklarativt programmeringsspråk på høyt nivå designet for utvikling av systemer og programmer kunstig intelligens. Tilhører kategorien femte generasjons språk. Det ble utviklet i 1971 ved universitetet i Marseille (Frankrike), og er et av de mye brukte og stadig utviklende språkene. Den siste versjonen er Prolog 6.0

LOGO- Et programmeringsspråk på høyt nivå utviklet ved Massachusetts Institute of Technology rundt 1970 med det formål å undervise i matematiske konsepter. Den brukes også på skoler og av PC-brukere når de skriver programmer for å lage tegninger på en skjerm og styre en pennplotter.

Java Hvordan lysende eksempel spesialisering, dukket Java-språket opp som svar på behovet for et ideelt bærbart språk der programmer effektivt kan kjøres på WWW-klientsiden. På grunn av det spesifikke miljøet kan Java være et godt valg for et system bygget på Internett/Intranett-teknologi.

ALGOL- Et programmeringsspråk på høyt nivå fokusert på å beskrive algoritmer for å løse beregningsproblemer. Den ble opprettet i 1958 av spesialister fra vesteuropeiske land for vitenskapelig forskning. ALGOL-60-versjonen av dette språket ble tatt i bruk av den internasjonale konferansen i Paris (1960) og ble mye brukt på 2. generasjons datamaskiner. Versjon ALGOL-68, utviklet av en gruppe spesialister fra International Federation for Information Processing (IFIP) i 1968, fikk status som et internasjonalt universelt programmeringsspråk fokusert på å løse ikke bare beregningsmessige, men også informasjonsproblemer. Selv om Algol foreløpig praktisk talt ikke brukes, fungerte det som grunnlag eller hadde en betydelig innflytelse på utviklingen av mer moderne språk, for eksempel Ada, Pascal, etc.

Det finnes ikke noe beste språk. Hvis du ønsker å bli en profesjonell programmerer, må du lære et av programmeringsspråkene på høyt nivå (det mest populære programmeringsspråket er C++) samt et av databaseprogrammeringsspråkene (for eksempel SQL) . Når du først har lært programmeringsspråket C++, kan du ikke gå galt. Når du kan dette språket, kan du alltid finne en jobb i et hvilket som helst programmeringsselskap.
Til tross for den store populariteten til programmeringsspråket C++, brukes også ofte andre språk. På mange utdaterte datamaskiner programmer skrevet i programmeringsspråket COBOL fungerer fortsatt. Derfor trenger vi programmerere som kan forbedre disse programmene og også skrive nye. Svært ofte betaler store selskaper slike programmerere høye lønninger.
Hvis du skal jobbe på egen hånd, er det best å lære hvordan du lager dine egne databaseprogrammer. For å gjøre dette, må du lære programmeringsspråk som SQL eller VBA som brukes i programmet Microsoft Access. For å lage websider må du kunne HTML, samt litt kunnskap om Java, JavaScript, VBScript og andre programmeringsspråk på Internett. Det mest nødvendige programmeringsspråket vil være et som lar deg løse oppgavene som er tildelt deg enkelt og raskt. Dette kan være et programmeringsspråk som C++, BASIC, Java, SQL eller assembly-språk.

Avslutningsvis bemerker vi at fra et profesjonelt synspunkt er det ikke så viktig på hvilket språk og i hvilket miljø programmereren jobber, men hvordan han utfører arbeidet sitt. Maskinvare og operativsystemer er i endring. Nye utfordringer oppstår fra en rekke fagområder. De blir en ting fra fortiden og nye språk dukker opp. Men folk forblir - de som skriver og de som det skrives nye programmer for og hvis kvalitetskrav forblir de samme uavhengig av disse endringene.
Så vi så på det grunnleggende om programmering og de viktigste programmeringsspråkene.

Jeg ønsker deg lykke til med å mestre programmering!

2) Hva er et programmeringsspråk side 2

3) Hva er programmeringsspråk for? side 3

4) Hvilke programmeringsspråk finnes s. 4 – 7

5) Hva er en kompilator og tolk side 8

6) Referanser side 9

Introduksjon

Frem til midten av 60-tallet var datamaskiner altfor dyre maskiner som kun ble brukt til spesielle oppgaver, og utførte bare én oppgave om gangen (den såkalte. batchbehandling).

Programmeringsspråkene i denne epoken, som datamaskinene de ble brukt på, ble designet for spesifikke oppgaver, som f.eks. vitenskapelig databehandling. Siden maskiner var dyre og bare én oppgave ble utført om gangen, var maskintid dyr - så hastigheten på programutførelse kom først.

Men i løpet av 60-tallet begynte prisen på datamaskiner å falle slik at selv små selskaper hadde råd til dem; Hastigheten på datamaskiner fortsatte å øke og tiden kom da de ofte begynte å stå stille uten oppgaver. For å forhindre at dette skulle skje begynte de å innføre systemer med tidsdeling(tidsdeling).

I slike systemer ble prosessortiden "skåret opp", og alle brukere fikk på sin side korte deler av denne tiden. Maskinene var raske nok til å få hver bruker på terminalen til å føle at de opererte systemet alene. Maskinen var på sin side mindre inaktiv, siden den utførte ikke én, men mange oppgaver samtidig. Tidsdeling reduserte kostnadene for maskintid radikalt fordi én maskin kunne deles av hundrevis av brukere.

Under disse forholdene - da strøm ble billig og tilgjengelig - begynte skaperne av programmeringsspråk i økende grad å tenke på enkel skriving programmer, og ikke bare hastigheten på deres utførelse. "Små" (atomære) operasjoner utført direkte av maskinenheter har blitt kombinert til "større", høynivåoperasjoner og hele strukturer som er mye enklere og mer praktisk for mennesker å jobbe med.

Hva er et programmeringsspråk

Programmeringsspråk- et formelt skiltsystem designet for å beskrive algoritmer i en form som er praktisk for utøveren (for eksempel en datamaskin). Et programmeringsspråk definerer et sett av leksikalske, syntaktiske og semantiske regler, brukt til å kompilere et dataprogram. Den lar programmereren bestemme nøyaktig hvilke hendelser datamaskinen vil reagere på, hvordan data skal lagres og overføres, og hvilke handlinger som skal utføres på den under ulike omstendigheter.

Siden opprettelsen av de første programmerbare maskinene har menneskeheten allerede kommet opp med mer enn to og et halvt tusen programmeringsspråk. Hvert år fylles nummeret deres på med nye. Vet kun hvordan man bruker noen språk lite antall sine egne utviklere, andre blir kjent for millioner av mennesker. Profesjonelle programmerere bruker noen ganger mer enn et dusin forskjellige programmeringsspråk i arbeidet sitt.

Språkskapere tolker konseptet ulikt programmeringsspråk. Blant lokalsamfunnene som er anerkjent av de fleste utviklere, er følgende:

  • Funksjon: Et programmeringsspråk er ment for å skrive dataprogrammer som brukes til å overføre instruksjoner til en datamaskin for å utføre ett eller annet. databehandlingsprosess og organisere administrasjonen av individuelle enheter.
  • Oppgave: Et programmeringsspråk skiller seg fra naturlige språk ved at det er designet for å overføre kommandoer og data fra en person til en datamaskin, mens naturlige språk kun brukes for at folk skal kommunisere med hverandre. I prinsippet kan vi generalisere definisjonen av "programmeringsspråk" - dette er en måte å overføre kommandoer, ordre, klar veiledning for handling på; mens menneskelige språk også tjener til å utveksle informasjon.
  • Henrettelse: Et programmeringsspråk kan bruke spesielle konstruksjoner for å definere og manipulere datastrukturer og kontrollere beregningsprosessen.

Hva er programmeringsspråk for?

Prosessen med datamaskindrift består i å utføre et program, det vil si et sett med veldig spesifikke kommandoer i en veldig spesifikk rekkefølge. Maskinformen til instruksjonen, bestående av nuller og enere, indikerer nøyaktig hvilken handling sentralprosessoren skal utføre. Dette betyr at for å gi datamaskinen en sekvens av handlinger som den må utføre, må du spesifisere en sekvens med binære koder for de tilsvarende kommandoene. Maskinkodeprogrammer består av tusenvis av instruksjoner. Å skrive slike programmer er en vanskelig og kjedelig oppgave. Programmereren må huske kombinasjonen av nuller og enere av den binære koden til hvert program, så vel som de binære kodene til dataadressene som ble brukt i utførelsen. Det er mye lettere å skrive et program på et språk som er nærmere det naturlige menneskelige språket, og overlate arbeidet med å oversette dette programmet til maskinkoder til en datamaskin. Dette er hvordan språk designet spesielt for å skrive programmer oppsto - programmerings språk.

Det er mange forskjellige programmeringsspråk tilgjengelig. Faktisk kan du bruke hvilken som helst av dem til å løse de fleste problemer. Erfarne programmerere vet hvilket språk som er best å bruke for å løse hvert spesifikt problem, siden hvert språk har sine egne evner, orientering mot visse typer problemer og sin egen måte å beskrive konsepter og objekter som brukes til å løse problemer.

Alle de mange programmeringsspråkene kan deles inn i to grupper: språk på lavt nivå Og språk på høyt nivå.

Språk på lavt nivå inkluderer monteringsspråk (fra engelsk toassemble - assemble, assemble). Monteringsspråk bruker symbolske kommandoer som er enkle å forstå og raske å huske. I stedet for en sekvens av binære koder av kommandoer, skrives deres symbolske betegnelser, og i stedet for binære adresser til data som brukes når du utfører en kommando, skrives symbolske navn på disse dataene valgt av programmereren. Monteringsspråk kalles noen ganger mnemonisk kode eller autokode.

De fleste programmerere bruker språk på høyt nivå for å skrive programmer. Som vanlig menneskespråk har et slikt språk sitt eget alfabet – et sett med symboler som brukes i språket. Disse symbolene brukes til å lage de såkalte nøkkelordene for språket. Hvert av nøkkelordene utfører sin egen funksjon, akkurat som i vårt velkjente språk, ord som består av bokstaver i alfabetet av dette språket, kan utføre funksjoner forskjellige deler tale. Nøkkelord er knyttet sammen til setninger i henhold til visse syntaktiske regler for språket. Hver setning definerer en bestemt rekkefølge av handlinger som datamaskinen må utføre.

Et språk på høyt nivå fungerer som et mellomledd mellom en person og en datamaskin, slik at en person kan kommunisere med en datamaskin på en måte som er mer kjent for mennesker. Ofte hjelper et slikt språk å velge riktig metode for å løse et problem.

Før du skriver et program på et språk på høyt nivå, må programmereren skrive algoritme løse problemet, altså trinn for trinn plan handlinger som må utføres for å løse dette problemet. Derfor kalles ofte språk som krever en foreløpig kompilering av en algoritme algoritmiske språk.

Hvilke programmeringsspråk finnes det?

Fortran

Programmeringsspråk begynte å dukke opp på midten av 50-tallet. Et av de første språkene av denne typen var Fortran-språket (engelsk FORTRAN fra FORmulaTRANslator - formeloversetter), utviklet i 1957. Fortran brukes til å beskrive en algoritme for å løse vitenskapelige og tekniske problemer ved hjelp av en digital datamaskin. Akkurat som de første datamaskinene, var dette språket hovedsakelig ment for å utføre naturvitenskapelige og matematiske beregninger. I en forbedret form har dette språket overlevd til i dag. Blant moderne høynivåspråk er det et av de mest brukte i vitenskapelig forskning. De vanligste variantene er Fortran-II, Fortran-IV, EASICFortran og deres generaliseringer.

ALGOL

Etter Fortran i 1958-1960 dukket Algol-språket (Algol-58, Algol-60) (engelsk ALGOL fra ALGOrithmicLanguage - algorithmic language) opp Algol ble forbedret i 1964-1968 - Algol-68. Algol ble utviklet av en komité der inkludert europeiske og amerikanske forskere. Det er et språk på høyt nivå og lar deg enkelt oversette algebraiske formler til programkommandoer. Algol var populær i Europa, inkludert USSR, mens den sammenlignbare Fortran var vanlig i USA og Canada. Algol hadde en betydelig innflytelse på alle senere utviklede programmeringsspråk, og spesielt på Pascal-språket. Dette språket, som Fortran, var ment for å løse vitenskapelige og tekniske problemer. I tillegg ble dette språket brukt som et middel til å lære det grunnleggende om programmering - kunsten å skrive programmer.

Vanligvis betyr begrepet ALGOL språket ALGOL-60, samtidig som ALGOL-68 regnes som et selvstendig språk. Selv da Algol-språket nesten sluttet å brukes til programmering, forble det fortsatt offisielt språk for publiseringsalgoritmer.

COBOL

I 1959 - 1960 ble COBOL-språket utviklet (engelsk COBOL fra Commom Business Oriented Language - gjensidig språk forretningsorientert). Dette er et tredje generasjons programmeringsspråk, primært beregnet på utvikling av forretningsapplikasjoner.Cobol var også ment for å løse økonomiske problemer, behandle data for banker, forsikringsselskaper og andre institusjoner av denne typen. Utvikleren av den første enhetlige Cobol-standarden var Grace Hopper ( bestemor Cobola).

COBOL blir vanligvis kritisert for å være omfattende og tungvint, siden et av målene til språkets skapere var å gjøre strukturene så nærme det engelske språket som mulig. (Cobol regnes fortsatt som det programmeringsspråket der flest kodelinjer ble skrevet). Samtidig hadde COBOL utmerkede fasiliteter for å jobbe med datastrukturer og filer for sin tid, noe som sikret dens lange levetid i forretningsapplikasjoner, i hvert fall i USA.

Maskinen forstår ikke menneskelig språk. Vi snakker selvfølgelig ikke om Siri og andre stemmegjenkjennere – vi snakker om å lage ny programvare. For å lage en kalkulator må maskinen få en oppgave på samme måte som en arbeidsleder forklarer arbeiderne hvordan man legger en murstein. Men "Vasya, pokker, du må være jevnere!" må beskrives på et programmeringsspråk. Hvor kom disse språkene fra?

Utgangspunktet for den moderne datamaskinen er Babbage's Analytical Engine, men språk ble oppfunnet tidligere: på 1800-tallet ble det mekaniske pianoet og vevstolen oppfunnet, som ingeniører beskrev operasjonslogikken for. Dette settet med instruksjoner er en prototype av det programmerere skriver i i dag.

På midten av 1900-tallet dukket Turing-maskinen opp, deretter de første datamaskinene og det første moderne programmeringsspråket Plankalkül. Det første spranget i utvikling skjedde da militæret trakk oppmerksomheten til datamaskiner - DARPA og andre som dem begynte å investere aktivt i den unge industrien. Den andre kom med spredningen av Internett - jo dypere folk dykker inn i den digitale tidsalderen, desto mer etterspurte er hovedskaperne av miljøet i denne epoken - programmerere. Og flere og flere ønsker å bli med dem.

Ønsket er rimelig og forståelig, men det første spørsmålet i hodet blir ofte en uoverkommelig barriere – hvilket språk skal jeg begynne å lære programmering med? Frykten for å ta feil valg er basert på frykten for å kaste bort tid. Som et resultat søker en nybegynner programmerer etter "sitt" språk i flere år, uten å gjøre noen fremskritt mot sitt kjære mål. Så for helvete, hvilket språk skal du velge?

Kriterier for valg av første programmeringsspråk

Valget av språk avhenger av problemene som programmereren ønsker å løse. For internettprosjekter er Python populær, som Google og Facebook bruker i sine prosjekter; for mobilapplikasjoner for Android er Java den beste vennen, og for iOS Swift.

Det sanne problemet med valg er mangelen på en spesifikk oppgave. Dette er normalt, fordi du først kan forstå hva du vil gjøre når du er inne i miljøet. Derfor anbefaler eksperter å ta som førstespråk det som du kan løse det bredeste spekter av problemer med.

Selvfølgelig løser høyt spesialiserte språk bedre problemene de er designet for, men dette er neste trinn. En nybegynner trenger fortsatt valgfrihet.

I tillegg allsidighet, det er også kriterier:

  • Enkelhet— Å snuble over kompleks syntaks og bli sittende fast i jungelen av uleselig kode er ikke den hyggeligste starten på å lære.
  • Popularitet— språket må oppdateres ofte, ha et stort fellesskap av utviklere, og være etterspurt i store selskaper. Et annet pluss er at jo mer populært språket er, jo lettere er det å finne svar på arbeidsspørsmålet som har oppstått.

Disse tre beskrivelsene passer best Python-språk, C#, Java og Ruby.

Utviklet på 80-tallet av den nederlandske programmereren Guido van Rossum. Store teknologiselskaper jobber med Python: Yandex, Google, Facebook og YouTube. Dette er et såkalt skriptspråk – det som står under panseret på programmet er skrevet i det. Den brukes til webapplikasjoner, spillutvikling, serverprogramvare...

Enkelhet Popularitet Allsidighet

Koden er lett å lese og har en oversiktlig struktur. Standardverktøy er nok til å begynne å lære.

Rangert som nr. 1 i programmeringsprogrammer på startnivå ved amerikanske universiteter.

Oppdateres regelmessig – hvert 2.5 år. Det er et av de fem mest populære språkene ifølge analyseselskapet TIOBE Software for januar 2016.

Nesten alt er skrevet i Python: systemadministrasjonsskript, nettsteder, maskinlæringssystemer, spill.

Språket ble utviklet på slutten av 90-tallet basert på C++ og Java. Brukes hovedsakelig til store bedriftsprosjekter, men ikke begrenset til dem. For eksempel er skript i Unity-spillmotoren skrevet i C#.

Enkelhet Popularitet Allsidighet

Strukturelt nær C++ og Java - syntaks (struktur programkode) er vanskeligere enn Python og Ruby, men det vil ta mindre tid å lære relaterte språk. Bibliotekets grensesnitt passer godt inn i designmønstre, noe som gjør dem enkle å lære.

Den siste oppdateringen var i 2015.

C# er skrevet for Windows Phone, iOS og Android. Det er en stor mengde dokumentasjon, men det er ikke mange biblioteker med en gratis lisens - dette betyr at en programmerer kan bruke andres kode for opplæring, men for å bruke den i et kommersielt produkt må du betale.

Språket ble oppfunnet av programmerere fra Microsoft for å utvikle Windows-applikasjoner. Til tross for dette brukes den også i andre systemer. Fungerer også på innebygde, skrivebords- og serverplattformer.


Rubin

Laget av en japansk utvikler påvirket av Perl språk. Lansert i 1995. Ruby er skrevet av: Shopify, Github, Groupon, Yellow Pages, Twitter og Slideshare. Det blir stadig mer populært, men er mer vanlig i startups enn i store selskaper. Godt egnet for å lage et enkelt internettprosjekt.

Enkelhet Popularitet Allsidighet

Som Python er koden lett å lese. Strukturen er også identisk med Python. Sammenlignet med andre språk er valget av standardbibliotek dårligere – du må bruke tid på å søke.

Stort og lojalt fellesskap av utviklere - rangerer blant de ti mest populære språkene ifølge TIOBE Software. Mange bibliotek er fritt tilgjengelig.

Den minst universelle av de fire - hovedsakelig egnet for webutvikling. På den annen side, innenfor internettprosjekter kan du gjøre veldig forskjellige og veldig kule ting med det.


Java

Den første versjonen av språket ble utgitt i mai 1995. Java brukes av Amazon, eBay, LinkedIn og Yahoo!

Enkelhet Popularitet Allsidighet

Som nevnt tidligere har Java og C# svært lik syntaks - når du først har lært den ene, kan du nesten den andre. Men som i det første tilfellet er syntaksen mer kompleks enn for Ruby og Python.

Det er 3 milliarder Android-smarttelefoner i verden, noe som betyr at Java vil være etterspurt i lang tid. Først i popularitet ifølge TIOBE Software.

Oftest brukt til bedriftsutvikling og Android-applikasjoner.


Resultatet av forberedelsen

Det er vanskelig å trekke en konklusjon. På den ene siden lokker muligheten til å slå to fluer i en smekk og ta Java eller C#, men Python tiltrekker seg med sin allsidighet, og Ruby med sin enkelhet.

Vi tvilte på det og gikk for å snakke med erfarne utviklere - de rådet oss fortsatt til å holde oss til Python. Her er hva Grigory Petrov, profesjonell utvikler og VoxImplant-evangelist, sier:

"Python-programmeringsspråket kalles ofte "kjørbar pseudokode" fordi språkets syntaks og standardbiblioteker legger vekt på lesbarhet og forståelighet. La oss legge til dette bredeste utvalget utviklingsverktøy, biblioteker, opplæringsmateriell - og vi får et av de beste programmeringsspråkene for nybegynnere."

Konklusjon: Selv om det ikke er noen klare oppgaver og klare mål, men bare et ønske om å kode, er det verdt å stoppe ved Python - det er enkelt, populært og universelt. Nikita Sobolev, en programmeringslærer for nybegynnere ved #tceh, anser også valget av dette språket som optimalt for en nybegynner - utdanningsprogram Det viste seg å være vanskeligere og lengre enn Ruby-banen, men friheten til å velge retning er verdt det.

Zalina 13. januar 2016 kl. 15:42

Ulike programmeringsspråk og deres bruksområder. Forelesning i Yandex

  • Yandex bedriftsblogg,
  • Utvikling av nettsider,
  • programmering,
  • Industriell programmering

Vi bestemte oss for å vie vårt første innlegg i år til et veldig grunnleggende emne, et foredrag om som ble holdt på Small ShAD. Det blir deltatt av videregående elever som er interessert i teknologi, derav spesifisiteten til presentasjonen - forelesningen vil være spesielt interessant for de som akkurat har begynt å programmere og tenker på hvilken retning de skal utvikle. For dem har Yandex et kurs "Introduksjon til programmering (C++)", som kan tas på Stepic.org-plattformen.

Foreleser Mikhail Gustokashin er kurator for akademiske programmer ved Yandex, direktør for senteret for studentkonkurranser ved Fakultet for informatikk ved Higher School of Economics. Mikhail har trent dusinvis av vinnere og prisvinnere av de all-russiske programmeringsolympiadene.

Foredraget snakker om hvilke programmeringsspråk som finnes, hvordan de skiller seg, hvordan de dukket opp, og hvilke som er bedre og hvilke som er dårligere. I begynnelsen vil vi snakke litt om språkens historie - hvordan de dukket opp, hvordan folk begynte å programmere, hvordan alt utviklet seg, hva som skjer nå. Den andre delen vil berøre hvilke oppgaver hvilket språk passer for, hvordan du "velger ditt favorittspråk og nyter livet." Foreleseren vil også snakke litt om hvordan man etter hans mening kan lære seg alt dette for så å få jobb.

Som alltid, under kuttet er en detaljert utskrift av forelesningen slik at du kan navigere i innholdet.

Historien om programmeringsspråk

La oss starte fra begynnelsen. I begynnelsen hadde ikke datamaskiner engang tastaturer! Det vil si at alt var veldig dårlig - de hadde verken tastatur eller skjerm, de hadde bare hullkort (dette er småting med hull eller ingen hull). Følgelig stakk de enten pinnene der, eller de lyste et lys der. Hvis det er et hull (eller omvendt ikke) - betydde dette en null eller en. Og programmer på den tiden ble skrevet ved hjelp av maskinkoder - hver operasjon på en datamaskin (addisjon, subtraksjon, noen mer komplekse operasjoner) hadde en slags maskinkode. Folk valgte selv denne koden fra et skilt, alle mulige adresser i minnet, de slo det hele ut med hendene og la det inn i leseren - og alt ble talt. Selvfølgelig var arbeidet til en programmerer sannsynligvis ikke spesielt interessant da - å lage hull - og med utviklingen av vitenskap og teknologi begynte de selvfølgelig å komme opp med alle slags mer "interessante" ting. For eksempel assembler, som allerede gjorde livet noe enklere.

Vel, hvordan gjorde han livet lettere? I stedet for å huske at det var en slags "magisk" kode for teamet, ble alle slags ord som ligner på "menneske" brukt engelske språk- noen add eller mov - og deretter registre eller minneområder, variabler som disse operasjonene må utføres med ble listet opp. Men det er klart at dette generelt sett også krevde ganske mye mental innsats for å holde i hodet i hvilket register vi har hva, hvor hvilke variabler er og hva som skjer generelt. Hvorfor skjedde dette? Fordi datamaskiner var "dumme" og ikke kunne forstå noe mer "smart". Å sette sammen maskinkode fra assembler krever faktisk også tid og minne (den gangen var det selvfølgelig lite av det).

Etter hvert ble det klart at det var svært vanskelig å utvikle så store komplekse programmer. Programmererens produktivitet i disse teamene var ekstremt lav - det vil si at han skrev flere linjer om dagen (meningsfylt), og hver linje gjorde ikke noe spesielt - noen enkle aritmetiske operasjoner. Og folk ønsket å gjøre språk mye mer lik menneskelig språk, spesielt engelsk, for å gjøre skriveprogrammer enklere og mer praktisk. Og vi går!

Gamle og døde språk

Et av de første språkene var Fortran. Det ble forresten også stanset ut på hullkort - det fantes spesielle hullkort for å stanse ut Fortran-programmer. Men hvis du tar denne Fortran nå, er den etter min mening til og med et sted mellom 50-60. dukket opp - og hvis du prøver å skrive noe på det, vil du bli veldig ubehagelig, jeg garanterer deg! Moderne Fortran lever fortsatt, men er ganske annerledes enn det det var før.

Andre språk - nå skal jeg skrive en ting som du sannsynligvis bare har hørt om på forskjellige arrangementer der de snakker om programmeringshistorien - dette er COBOL. Det var et språk for å skrive forretningsapplikasjoner. Hva er forretningsapplikasjoner? Noen transaksjoner i banker, noe annet, alt dette ble skrevet i Cobol. Selvfølgelig er det ikke veldig populært her. Jeg tror du vil finne det veldig vanskelig å finne en Cobol-programmerer i Moskva. Og et sted ikke i Moskva - med enda større vanskeligheter. Men overraskende nok, for bare 10 år siden, ble mer enn halvparten av all koden skrevet av menneskeheten skrevet i Cobol. Og til i dag utføres en betydelig del av alle banktransaksjoner ved å bruke programmer skrevet i den (COBOL), og folk skriver fortsatt noe i den.

Det er også et "morsomt" språk, det ble kalt Algol (den 68. versjonen, som karakteriserer etableringsåret). Dette er et algoritmisk språk. Generelt klarte de å gjøre noe der, men nå er vi lite interessert i hva de kan. Og med dette kan vi avslutte vår utflukt til antikken og til relativt ubrukte språk og gå videre til det som fortsatt lever (og aktivt lever).

Gamle, men levende språk

Algol ble oppfunnet i Europa, og Fortran ble hovedsakelig brukt i USA - det er ingen store forskjeller. Hvilken trend er merkbar? Til å begynne med var alt komplisert og for å skrive måtte man nesten være ingeniør, elektroingeniør, for å forstå hvor hvilke kontakter er koblet og noe annet for programmering. Da måtte man også sitte med papirlappene og telle minnet, passe på det. Og etter hvert ble alt enklere, enklere, enklere og deretter enda enklere for programmereren - å tenke minst mulig for en person, å gjøre så mye som mulig automatisk. Rundt slutten av denne perioden (foreleseren peker på Algol og Kobol), begynner det å dukke opp språk som på en måte har "overlevd" til i dag.

GRUNNLEGGENDE. Kanskje noen mennesker fortsatt skriver noe i den, i det minste så jeg at i noen institusjoner underviser de i QBasic - det er et blått vindu der "1989" er skrevet. Generelt «lever han med all sin makt»! Det ble oppfunnet som et språk for ikke-programmerere. På den tiden var en programmerer et så veldig spesialisert yrke. Og her forteller de deg: "Vi har et kult grunnleggende språk, og enhver fornuftig person kan skrive et program i det - det er enkelt." Igjen, at BASIC og moderne BASIC er en enorm forskjell. Alle disse linjene nummerert etter 10, alle slags GOTO-er og andre grusomheter - de har ikke lenger noe med moderne BASIC å gjøre, og selv til BASIC fra 1989 har de lite med det å gjøre.

En annen morsom historie er Pascal-språket, viden kjent i universitetskretser, hovedsakelig i Russland og landene i det tidligere Sovjetunionen. Det har vært og blir fortsatt brukt overraskende som undervisningsspråk. I resten av verden er den mindre vanlig, men den lever også i beste velgående. Det er en slik person som Wirth - han er en vitenskapsmann, en teoretiker. Han deltok i Algol-diskusjonen, han likte ikke det som skjedde, og han kom opp med sitt eget språk - Pascal. Og så tok Borland-selskapet (og før det mange andre selskaper - Apple var involvert, spesielt) det og ødela alt. Han hadde en vakker, sammenhengende teori - "alt vil bli bra" - og de tok den og fylte den med det folk trengte for å jobbe. Vel, det ble ikke så vakkert som han ønsket.

Og endelig... C ble oppfunnet av ingeniører. Hvis Pascal ble oppfunnet av en vitenskapsmann, så ble C oppfunnet av Kernighan og Ritchie, de jobbet som ingeniører hos Bell. Hvordan skjedde dette? På den tiden var det umulig å skrive noe systemisk på disse språkene (foreleseren peker på Fortran, COBOL, Algol). Hva er "systemisk"? For eksempel et operativsystem, noen drivere, noe annet. Disse språkene var ment for matematiske beregninger, for forretningsberegninger, for alt det der. Og alt annet ble skrevet i Assembly. Det var noen språk, de er nå døde, det vil si at C-språket ikke dukket opp umiddelbart fra Assembly, men gjennom noen mellomting.

Hva er poenget? Kernighan og Ritchie elsket å spille Asteroids-leken - et romskip flyr, og det er asteroider, han skyter på dem, og de faller fra hverandre. De hadde en server der de spilte, men det var mye folk der, og leken var treg. Og de oppdaget et sted på kontoret deres at de hadde en slags datamaskin som ingen brukte. Men det var et problem - det var av en annen arkitektur, og spillet ble skrevet i Assembly.

De skrev den om, selvfølgelig, og la til og med noen funksjoner for å spille på den. Men dette førte dem til ideen om at det ikke er særlig smart å omskrive for en ny arkitektur hver gang. Og de bestemte seg for å skrive et språk på høyt nivå som ville være egnet for systemprogrammering, det vil si der det ville være mulig å administrere minne, der det ville være mulig å forstå hvor ting ligger og hvordan man får tilgang til disse minnestykkene . Og slik dukket C-språket opp, som hadde stor innflytelse på alt som fulgte. Alle (foreleseren peker på Algol, Fortran og andre nevnte språk) hadde stor innflytelse, men C - bare ja...

Følgelig var det hovedspråket i Unix, et operativsystem som var enda mer populært på den tiden enn det er nå. Og rundt 80-tallet var situasjonen omtrent slik (foreleseren viser Basic, C og andre nevnte språk). La oss si at alt dette allerede sakte har dødd ut i landet vårt (foreleseren sletter omtale av Assembly Language, Fortran og Algol)... Og på 80-tallet ble datamaskinene mindre, smartere, billigere, og folk ville ha alt mulig rart. å gjøre livet enda bedre, å leve enda morsommere.

Språk fra 80-tallet

En av de første raritetene var at det var et C++-språk. C-språket har stor mengde mangler (vel, bare generelt store) - du kan gjøre alt på det, inkludert skyte deg selv i foten, skyte deg selv i foten med en oppfinnelse, i den andre foten, skyte deg selv med den ene foten i den andre foten, generelt - gjør hva du vil. Men samtidig gjøres det noen arkitektoniske ting der ganske vanskelig - igjen, som i Assembly, må vi holde styr på hvor vi er, hva og hvilket minne vi har tildelt; Det er der hele tiden "flyter" et sted, dette minnet - det vil si at vi tildelte det, glemte å slette det, slettet feil ting, gikk utover minnegrensene, generelt - vi fikk inn en haug med problemer.

C++ ble opprinnelig laget som et sett med tillegg til C-språket som ville gjøre utviklingen enklere. På den tiden ble objektorientert programmering mote og folk bestemte at alt kunne beskrives i form av et hierarki, det vil si at du har en ball (abstrakt), du arver fra den en fotball, en volleyball, en annen abstrakt ball . Det var på moten da at "vi skriver nå alt i form av et slags hierarki, og alt vil bli bra, livet vil bli bedre, alt vil bli bra og det er det." C++ implementerte på en måte denne objektbaserte tilnærmingen - det var ikke det første objektorienterte programmeringsspråket, men det ble ganske populært og alle slags funksjoner begynte å dukke opp i det. Samtidig beholdt C++ nesten full kompatibilitet (på det tidspunktet) med C-språket; et program skrevet i C ble vellykket kompilert som C++ i 99% av tilfellene og fungerte til og med på samme måte. Dette var ment for å gjøre det enkelt å bytte fra C til C++.

I tillegg objekttilnærming(i C++) dukket opp ganske raskt standard bibliotek maler (STL). Jeg tror at på skolen oppdaget de som fortsatt lærte Pascal at du for det første ikke har innebygd sortering (i den eldgamle, blå Borland Pascal, nå er den allerede i moderne versjoner) - det er et eksempel (kilde kode) sortering, kan den kopieres og limes inn. Men hvis du vil sortere heltall her, reelle tall her, og strenger her som kan sammenlignes med hverandre, måtte du skrive tre forskjellige sorteringer som gjør akkurat det samme, de har bare forskjellige datatyper. Dette er ikke veldig bra, og malene som ikke umiddelbart dukket opp i C++ lindret dette problemet i stor grad. Det vil si at du hadde et abstrakt program som vellykket sorterte noe som kunne sammenlignes med hverandre.

Skriptspråk fra 90-tallet

Men tiden sto ikke stille, på 80-tallet skjedde det mye interessant. Men et sted rundt begynnelsen av 80- og 90-tallet ble datamaskinene så gode at det var mulig å gjøre veldig rare og veldig ineffektive ting. Spesielt var dette skriptspråk som ikke ble kompilert til maskinkode, men snarere tolket. BASIC ble også tolket på et tidspunkt, men disse skriptspråkene var hovedsakelig ment for tekstbehandling - disse er for eksempel Perl, Python (det var ikke særlig kjent da), PHP, Ruby - dette er skriptspråkene at i en eller annen i ulik grad lever de fortsatt (de rakk alle å dukke opp før 2000, enda mye tidligere).

La oss gå litt over dem, for dette er spesifikke ting og brukes nå mange steder. Hva er ideen? Hvis vi ikke kompilerer, kan vi tillate mye mer. For eksempel kan et program se på koden sin og på en eller annen måte bruke den; hun vet hva som skjer i henne og på grunn av dette kan hun gjøre mye interessant.

Perl var ment for tekstbehandling - på den tiden var det så mye minne i datamaskiner at man kunne stappe litt tekst der og gjøre noe nyttig med denne teksten (for eksempel telle ord, gjøre en slags søk). Men etter min mening ble det designet av folk som var litt gale, fordi det er en vits om det: "Ethvert sett med karakterer skrevet er et gyldig Perl-program." Etter min mening kan du bare skrive på den, du kan ikke lese den. Når jeg ser på Perl-koden og prøver å forstå noe, forstår jeg ingenting. Kanskje hvis jeg kjente ham bedre, ville jeg forstått noe, men som jeg hørte fra folk som fortsatt vet hvordan, sier de at det er lettere å skrive det om igjen. Det vil si at programmene viser seg å være korte, og det er virkelig lettere å skrive dem om fra bunnen av enn å finne ut hva som er der og fikse det.

Rundt den tiden, på midten av 90-tallet, dukket Internett opp. Først var det post, nettsider med statisk HTML, men folk ville legge til en slags dynamikk der, slik at alt skulle skje dynamisk, noen skjemaer kunne fylles ut, gjestebøker kunne lages og noe annet. Følgelig krevde dette en slags interaksjon, de kom opp med en protokoll, hvordan den samhandler, og viktigst av alt, genereringen av disse statiske (betinget) sidene som vil bli "spyttet ut" til brukeren som svar på forespørselen hans.

Generelt var ingenting annet enn Pearl egnet på den tiden. Å skrive en handler i ren C eller C++ var en dårlig idé. Og i mangel på noe bedre, på den tiden (og i ganske lang tid) var Pearl det populære språket for webutvikling. Skalaen kan selvsagt ikke sammenlignes med det som skjer nå.

PHP dukket opp som... ved et uhell. En person sluttet raskt med dette - han laget sin egen side, det hadde han Gjestebok noen, noe annet, noen ting. Og han skrev et sett med noen makroer for Perl som lignet C, fordi han visste hvordan han skulle bruke C, rett og slett fordi det var så praktisk for ham. Og jeg kalte det personlig hjemmeside. Han delte det og sa: "Folk, se på hva jeg skrev, alt her er mye klarere enn i Perl, og du kan redigere det." Og folk likte det.

Så ga han opp denne virksomheten. Generelt, som et resultat, begynte denne PHP å leve og ble over tid mye mer populær enn Perl. Men dette "fødselstraumet" hans (uttenkt som et sett med makroer for Pearl) spilte en ganske grusom spøk på ham. Språket viste seg merkelig. Det vil si at det utviklet seg av seg selv, ingen designet det, ingen administrerte utviklingsprosessen (verken et selskap eller noen person), men det var mange grupper som hver så det de likte. Som et resultat er funksjonene navngitt annerledes, det er ikke engang en stil, alt er understreket, i utgangspunktet tilfeldig, innstillingene er her og der, og hvordan alt dette vil fungere er ikke veldig klart. Men du kan sette deg ned og skrive i PHP på to timer, for det var slik det var ment.

Python og Ruby: Ruby er mindre populær nå, Python er på en eller annen måte bedre "høvlet", la oss snakke om det senere. Det er klart at i disse dager var dette (foreleseren peker på Perl, Python, Ruby, PHP) høyt spesialiserte språk for høyt spesialiserte formål. Generelt var det ingen som skrev noen systemprogrammering, ingen forretningslogikk i dem på den tiden, og nå er det ikke mye som gjør det.

Samlede språk fra 90-tallet

Vi skal gå rundt de samme tidene, men i den andre retningen. På den tiden brukte vi C++ for nesten alt som skulle skrives, ikke for nettet, ikke for tekstbehandling, men for bare applikasjoner, for operativsystemer, for leker - generelt, for hva som helst. Men C++ er faktisk et forferdelig språk. Hvorfor? Fordi han for det første arvet pga bakoverkompatibilitet alle problemer med C. Du kan fortsatt drepe deg selv der med en million forskjellige måter, de samme som var i C (naturligvis ble nye metoder lagt til i C++). Samtidig, hvis du skriver alt godt og riktig, slik det var meningen av forfatterne av C++, så var det selvfølgelig ikke lenger mulig å drepe deg selv ved å bruke de gamle C-kodemetodene, og det virker som det er færre av dem. Imidlertid hadde den en veldig merkelig, særegen objektmodell. Å dele opp et program i moduler, i deler av et eller annet slag, kom vanligvis fra C (hvis du vet hvordan du skriver inkludere i C eller C++ - faktisk var det ment som en måte å sette inn bibliotekteksten i programmet, i slutt, når du skriver en haug med inkluderer, har du alt - hvis det er "primitivt", som det var helt i begynnelsen - blir alt satt inn i en fil og så tar det alt fryktelig lang tid å kompilere, fordi det går rundt flere ganger. Den samme Pascal, Virtovsky, var mye mer gjennomtenkt i denne forbindelse, senere versjoner har blitt enda bedre.

Generelt har C++ mange ulemper. Programmereren måtte være høyt kvalifisert for å skrive i C++, og slike programmerere var dyre (og opplæring, og noe annet, det vil si at det er vanskelig å finne programmerere på markedet, de må betales mye, vel, generelt det er ikke slik det er... ). Og datamaskinene våre teller raskere og raskere, de blir billigere, folk kjøper nye datamaskiner og vil flere apper, mer leker til telefonen, generelt - mer glede.

Slik så Java ut. Det er også en ganske morsom historie om hvordan dette språket fikk navnet sitt. Det er programmerere der, de drikker kaffe hele tiden og på den tiden var det mote å drikke kaffe, som vokste på øya Java. Språket ble tenkt som et språk for innebygde enheter, spesielt for en kaffemaskin. Slik ble navnet til...
Hva startet med henne, hva var bra med henne og hvorfor fikk hun så mye popularitet? Først ble de kvitt Sishnois arv, fullstendig. Det er ingen tegn, mye færre måter å skyte av en del av kroppen din og bryte alt. For det andre introduserte de mye nyere ideer når det gjelder objektmodellen - det vil si at C++ dukket opp mye tidligere enn Java og brukte en mer arkaisk, "vill" objektmodell. Vel, her (foreleseren peker på Java) var det allerede mer gjennomtenkt da, og i teorien tenkte folk, og i praksis søkte de og gjorde alt mye kulere.

Og til slutt, tredje. Java-programmene våre ble ikke kompilert til maskinkode, men til kode for en virtuell maskin. Det vil si at du hadde en virtuell maskin (VM) JVM - Java. Programmene dine ble satt sammen til en slags mellomrepresentasjon og deretter, ved hjelp av denne maskinen, ble de allerede utført. Hva ga det? For det første bremset den opp, og for det andre spiste den opp hukommelsen fra forferdelig kraft, for det tredje var den bærbar hvor som helst (teoretisk sett) - til og med til en kaffetrakter, til og med til en kaffekvern, til og med til en datamaskin, til og med til en mobiltelefon. På den ene siden er dette bra, det vil si at du nettopp skrev en implementering av en virtuell maskin, så kjører du Java-programmene dine overalt. Men på den annen side er det ille at den samme telefonen da hadde lite minne, det var det lav ytelse og alt dette begynte videre å sløve og bremse.

Men dette er ikke engang hovedsaken som språket ble oppfunnet for i utgangspunktet. Java-språket ble oppfunnet for å redusere kvalifikasjonskravene til programmerere. Det vil si at dårligere programmerere kan skrive gode programmer i Java fordi det ikke tillater deg å skrive dårlige programmer - det er ingen verktøy der for å skrive dårlige programmer. Der kan du bare skrive gode programmer. Vel, i forståelsen av skaperne av språket.

Det vil si at hvis i C, i C++, i Python, i noe, kan vi lage en slags forferdelig søppelfylling ut av prosjektet vårt, der vi har alt blandet sammen, satt sammen i timevis og noe annet. I Java kan du også lage en søppelplass, men for dette må du gjøre litt innsats. Det vil si at det som standard ikke er en "søppelplass", andre problemer oppstår, at noe har blitt arvet og arvet - generelt, for en meningsfull linje, er det ti ikke veldig meningsfulle. Men en slik moderat kvalifisert programmerer kan skrive kode av ganske høy kvalitet.
Vi er nesten i mål. For oss var det neste som dukket opp .Net (dotnet), og spesielt er vi interessert i C# (nesten det samme [foreleseren peker på Java], det vil si at det er forskjeller i detaljer, hvis du velger mellom dem , se hvor de betaler mer penger).

Og en ting til - JavaScript. Har ingenting å gjøre med Java-språket, dukket opp samme år - ordet var moteriktig, de lisensierte varemerket til å bruke det.

Hva er det viktigste du må være oppmerksom på? (Foreleseren trekker piler fra C++ til Java, .Net, C#, JavaScript og PHP). For å skrive et enkelt program på et av disse språkene, og på mange andre - hvis du kan C++, trenger du vanligvis ikke å kunne noe annet - du skriver i C++, og legger så til dollar i begynnelsen, noe annet gjør småting og det begynner å jobbe med hva som helst (foreleseren peker på språkene som pilene fra C++ ble tildelt). Det vil si at de er ekstremt like på noen måter enkle ting. Hvis du løser noen skoleproblemer, pedagogiske oppgaver eller noe annet (ikke designe stort prosjekt- du har én fil som leser tall, viser tall i konsollen og gjør noe annet), så er det nesten ingen forskjell mellom disse språkene. Det er tydelig at JavaScript og PHP er spesialiserte, alt er litt annerledes for dem. Men her (foreleseren peker på Java og C#) er det veldig liten forskjell i det hele tatt.

Siden den gang har alle mulige andre interessante ting dukket opp, men det er ikke klart om de vil leve eller dø med hell. Hva bruker de nå, til hvilke formål?

Velge et språk avhengig av oppgaven

La oss si at du står overfor oppgaven med å skrive en driver for et skjermkort. Hvilket språk vil du bruke i dag? (Rop fra salen: Java!) Hvorfor... Java er flott, men hvorfor ikke Ruby eller PHP? (Foreleseren snakker sarkastisk.)

Programmering på lavt nivå

Hvis du skriver noe på lavt nivå, da det beste valget- dette er C, men faktisk hørte jeg noe (men så ikke) at C++ brukes til dette. Men jeg har liten tro på dette, for i C kan du helt klart kontrollere - siden du ga så mange byte med minne, betyr det at det blir så mange. Og i C++ (STL) hvordan implementeres en streng? Vel, på en eller annen måte ble det implementert. Og til slutt vet vi ikke hvordan og hva som skjer der; kanskje vi går tom for minne på skjermkortet eller noe annet vil skje. Derfor lever C fortsatt og dør ikke, slike systemprogrammeringsoppgaver eksisterer fortsatt - skriv et operativsystem, skriv drivere, skriv noe annet - C er flott for dette. I tillegg, nå dukker det opp alle slags enheter (tingenes internett er lovet å komme snart) som går på batterier (og det vil naturligvis være millioner av dem, alt vil være dekket med dette tingenes internett), de burde være veldig billig og ha svært lite strømforbruk. Følgelig vil det være 2 KB minne, en 5 kHz prosessor, og det er klart at du må skru inn en slags virtuell maskin eller et skriptspråk vil ikke fungere i nær fremtid - noe som betyr at du må skrive noe i C. Og selv nå, for eksempel, er databehandling på et skjermkort (OpenCL eller annen teknologi) ikke oppfunnet der nytt språkå skrive programmer for dem - de gjør C der med noen store begrensninger. Bare fordi folk allerede vet hvordan, hvorfor lære noe nytt? Formelt sett er dette sannsynligvis også, på en måte, C.

Web programmering

La oss si at du vil skrive nye Facebook (sosialt nettverk). Hva vil du skrive dette på? (Folk fra publikum snakker om HTML og CSS.) HTML og CSS er design, og vi ønsker at det skal være mulig å legge til bilder, venner og legge igjen kommentarer der.

For skriptdelen - det vil si hva som vil skje på klientsiden - er dette JavaScript. Noen ganger genereres dessuten JavaScript på et annet språk og sendes (det hender at skriptet genereres... fordi det noen ganger er lettere å behandle noen endringer i logikken).

Overraskende nok er det skrevet i PHP – og Facebook, og mange andre store prosjekter. Selvfølgelig måtte de skrive noen av tingene sine for at det fortsatt skulle fungere normalt, og ikke på en "klumpete" måte, men de klarte det. I prinsippet spiller det mer eller mindre ingen rolle hva du skriver i, men jeg anbefaler ikke Perl. Her og nå er det selvsagt ingen som skriver noe for nettet fra bunnen av. Alle skriver en slags rammeverk eller noe annet. Online-butikk? Vi lastet ned et rammeverk for en nettbutikk - og det var det, vi skrev en nettbutikk.

Programmering for bedrifter

Deretter vil du skrive en kjedelig søknad til en bank. Eller har du for eksempel noen som selger SIM-kort? Kanskje du noen gang har kjøpt en telefon eller noe annet og blitt fortalt: "Systemet henger, vi kan ikke gjøre noe." Hva vil du bruke for å skrive en slik søknad? (Rop fra publikum om Python) Du kan ikke skrive dette i Python, hva er det du sier?! Det er ikke nødvendig å skrive noe for virksomheten i Python. Hvorfor? For når du skriver noe i Python, er det umulig å oppdage et betydelig antall feil under skriveprosessen. Python er dynamisk skrevet på alle mulige måter, og generelt kan du skjule en feil på en slik måte at den dukker opp i en slik situasjon at du ikke en gang vil kunne forstå hva disse skjeve brukerne gjorde der, at alt er ødelagt for deg. Det vil si at i Python er det bedre å skrive små skript for deg selv - du forstår hva som skjer der og hva som gjøres. Vel, eller noe du ikke har noe imot å kaste: du vil rulle ut noe før konkurrentene dine, så hva om det går i stykker nå og da. Du skrev i Python og det var det – du fanget markedet. Og hvis du skriver noe over lengre tid, for eksempel bankapplikasjon noe slag (slik at den godkjenner lån, noe annet) - du skriver det på Java. For det er en alvorlig sak, papirer, penger, dokumenter, noe annet, men du kan ikke skru det så mye sammen at alt går i stykker, ellers blir folk fornærmet - pengene deres gikk bort og kom ingen vei, for på en eller annen måte i øyeblikket ble strengen til et tall eller omvendt. Så, det betyr at du metodisk tar det i Java og skriver, skriver... Vel, eller på .Net, slike situasjoner skjer i prinsippet også. Der kan du selvfølgelig også støte på problemer, men likevel er sannsynligheten for dette noe lavere.

Programmering for hæren, romfartsindustrien

Tenk deg nå at de bestemte seg for å sende deg til Månen på en rakett. Hva vil du helst bli brukt til å skrive koden som styrer rakettmotorene? La oss ta en titt. Dette (foreleseren viser Perl, Python, PHP, Ruby), er sannsynligvis ikke verdt det - det bremser ned, noe annet skjer, og generelt ville jeg ikke gå med på å fly på en slik rakett. I C++? For å være ærlig, ville jeg heller ikke stole på det, for i C++ er det for mange måter å drepe deg selv på. Når du er der ute et sted i verdensrommet, er det ikke særlig bra.

Kanskje i Java? Det ser ut til at alt der er ganske pålitelig og arkitekturen er god, ingen ville typer, ingen unødvendige turer utover minnegrensene. La oss si at det mest avgjørende øyeblikket har kommet, og vår Java har bestemt seg for å samle søppel for oss. Vi må lande, senke farten, og hun sier: "Nei, det går søppel." Generelt sett ikke veldig bra heller.

Ærlig talt foretrekker jeg at dette programmet ble skrevet i Pascal. Selvfølgelig liker jeg ikke Pascal, men på en eller annen måte i slike saker ville det vært veldig kult.

Bruke flere språk for programvareutvikling

Vel, hva må sies om moderne språk. Nå lever mange prosjekter ikke på ett språk, det vil si at noen av dem lever på ett språk, noen på et annet og noen på et tredje. For eksempel, hvis du har en slags nettapplikasjon som behandler store mengder informasjon, blir anrop til disker (ikke engang til databaser, de er så store at selv en database der ikke kan håndtere noen allerede skrevet) sannsynligvis skrevet i en slags så lavt nivå C, for å skrive vilt raskt til disk og alt det der. Naturligvis er det ikke verdt å skrive hele prosjektet i C. Kanskje det er en slags mellomlogikk, skrevet i Java, som kaller C-funksjoner for raske samtaler. Vel, frontend (det brukeren ser på), er selvfølgelig allerede skrevet i noe, i noen skript, i noe som kjøres direkte av nettleseren (JavaScript). Og alt dette lever sammen og samhandler med suksess.

Når man utvikler noen applikasjoner, til og med store, hva gjør folk noen ganger? De tar det og skriver en prototype i Python (hvordan det hele vil fungere), skisserer det, tenker gjennom en slags arkitektur. Å skrive på den er virkelig veldig rask - de kastet sammen en prototype, eksperimenterte med den og sa: "Wow! Det er så kult!" Og de skrev det helt om. Det ser ut til at de gjorde jobben to ganger, noe som gjorde at det tok dobbelt så lang tid (vel, en og en halv). Men nei! Det viser seg ofte at denne metoden ikke er dårlig, for hvis du skriver noe med en gang, for eksempel i Java, og deretter bestemmer deg: "Nei, la oss refaktorere, endre arkitekturen fullstendig og alt det der," så vil du bruke 10 ganger mer tid . Slike ting finnes også og lever.

Forutsetninger for suksess for ethvert programmeringsspråk

La oss nå snakke om hvorfor noen pene språk ikke overlevde, eller bodde i et veldig begrenset rom. Da Wirth så hvilke dårlige selskaper Apple, Borland og alt det gjorde med Pascal hans, kom han på et enda bedre språk – Oberon. Det var bare vilt minimalistisk - det vil si at det var veldig få kommandoer (strenger? Hvorfor trenger vi strenger? Vi lager en rekke tegn!). Vel, noe fungerte ikke for ham, i den grad det kunne ha fungert.

En ting til. Det amerikanske militæret ba dem utvikle et kult språk der alt fungerer og alt kan skrives. Resultatet ble et ganske monstrøst Ada-språk, der de imidlertid fortsatt skriver noe, men igjen, kun for militæret.

Hva er problemet? Hvorfor noen språk som Python, som ingen selskap støttet i begynnelsen, tok over markedet. PHP, som også er dårlig designet, tok også over markedet (det meste) på egen hånd. Og alle slags milliarder av dollar ble investert (foreleseren peker på Ada) og gikk ingen steder, ingenting skjedde. Hva henger dette sammen med? Dette skyldes at det ikke er noen infrastruktur rundt disse språkene. Det vil si at språket kan være utmerket, men det er ingen dokumentasjon ennå, det er ingen fellesskap som kan svare på spørsmål (på Stack Overflow), og til slutt, viktigst av alt, det er ingen stor kvantitet bibliotekene skyter ikke tungen ut. Det vil si at du for eksempel ønsket å skrive en nettside på Oberon. Hva er det, hvorfor ikke? Og bryet begynner... Du kan ikke sette opp din egen webserver på Oberon for å teste den lett, du kan ikke koble til noen biblioteker, fordi Oberon ikke har dem. Og alt dette gjøres gjennom noen krykker, styrken går bort, og generelt gir du opp og skriver nettsiden din i ren C i stedet for Oberon. Og de språkene som lever godt er de som vet hvordan de skal bruke biblioteker fra andre språk. Den samme Python på de stedene hvor den bremser ned. Vel, generelt er alle slags standard ting som sortering og noe annet skrevet i C, og det (Python) kan samhandle med dem.

Java har også et Java Native Interface. Dette er i hovedsak C, det vil si der (etter min mening vil de alltid forby det, men det ser ut til at de ikke har forbudt det ennå) disse språkene kan samhandle med allerede eksisterende biblioteker (hovedsakelig C). Og på grunn av dette tar de det og jobber. Ideen jeg prøver å formidle til deg er klar, ikke sant? Ikke skriv på språk som ikke støtter C-biblioteket. Vel, hvis du vil bruke noe kult. Vel, gradvis skaffer de (språkene) sin egen infrastruktur. Og de lever på en måte godt.

Programmeringsspråk og karriereveiledning

La oss nå snakke om hvordan du forstår hva du vil i livet. Hva er de kuleste tingene? Du kan gjøre noe systemprogrammering, Ja? Det er flott for deg å telle disse bitene, du vil starte quadcopters, en slags kameraer og gjøre noe annet. Da er sannsynligvis C ditt valg.

Hvis du vil skrive, kanskje ikke de mest interessante applikasjonene i livet, men det er kult for deg å designe dem, tenke på alt og tjene mye penger på å sitte og kjede deg mesteparten av tiden (du må betale for dette hvis du er flink til å savne), her er de - Java, .Net. Du går på jobb i en eller annen bank, skriver, går på jobb klokken ni i hvit skjorte, får god lønn og skriver etter anbefalingene fra de beste Java-utviklerne, .Net sauer og alt det der...

Hvis du vil skrive noen applikasjoner, en slags nettleser, en slags leker eller noe annet, så er C++ flott. Hvis du vil skrive nettsider, så er de her, språk du velger (foreleseren viser Perl, Python, PHP, Ruby), det er ikke mye forskjell. Det eneste er at PHP vil dø før Python, så hvis du er lat for å lære nye ting, så lær deg Python. Du vil ikke merke stor forskjell, men du vil vare lenger.

Hva som skjer med Ruby er også uklart. Vel, du kan gjøre PHP hvis du allerede har lært det, heldigvis er det så enkelt at det ikke tar så lang tid å lære seg på nytt.

Og til slutt, det er et annet bruksområde for programmeringsspråk - dette er når en ikke-programmerer bruker dem. La oss si at du er matematiker, fysiker, kjemiker, analytiker, hvem som helst, og du må raskt beregne noe, analysere noen data (for biologer, for eksempel, hvor mange fjellrever lever på Commander Islands). Du kan legge alt dette inn i en tabell i Excel eller analysere det med noe. Python er også bra for dette, det kan fungere med tekst og det er mange biblioteker, statistikk og alt det der. Hvis du vil gjøre en slags maskinlæring, behandle noen data, lage spådommer, så gjøres dette også i Python på den raskeste måten nå. Riktignok bør det bemerkes at oppgavene er veldig forskjellige. For eksempel, hvis du ønsker å handle på børsen umiddelbart under forhold der kursene endrer seg hele tiden, så uansett hvor kult Machine Learning du skriver i Python, vil folk som har det skrevet i noe raskere ha tid til å kjøpe alt før Everything vil bli regnet for deg, selv om algoritmene deres er dårligere. Derfor krever selv disse maskinlæringsoppgavene (noen av dem) høy ytelse (og ekstremt høy ytelse), og følgelig andre språk.

Den eneste måten å forstå hva du vil er å prøve alt. Nå vil jeg si det som en av visjonene om hvordan du kan prøve alt. Hvordan bli en programmerer, og en lykkelig en? Så. MED blanke ark begynne. Her studerer du matematikk, russisk språk og andre obligatoriske og valgfrie fag på skolen, og dine kunnskaper innen programmering gjenspeiles på tavlen (foreleseren peker på en tom tavle) på dette øyeblikket. Og du vil bli en lykkelig person, gjøre det du elsker, tjene mye penger og ikke nekte deg selv noe og være lykkelig.

En måte å oppnå dette på. Det finnes selvfølgelig alle mulige inspirerende historier om folk som ikke gikk på universitetet i det hele tatt, eller droppet ut og ble milliardærer, bedriftseiere og så videre. Men det skal bemerkes at de fleste som kanskje ikke har blitt milliardærer, men som også lever godt, likevel ble uteksaminert fra universitetet på et tidspunkt.

Hvordan er situasjonen med opptak til universitetet (studerer du på skolen nå)? Mens du er på skolen, må du forstå at neste trinn er å melde deg på og ta vare på det. Bestå Unified State-eksamenen eller vinn Olympiaden. På Unified State Exam kan du bruke Pascal, C++ (inkludert ren C), Python (jeg vil ikke nevne dem ytterligere). På Olympiaden er det den samme Pascal, den samme C++, den samme Python (vi skal nå snakke om problemene) og som oftest er det Java. Det er andre ting som skjer avhengig av OL, men det er ikke poenget.

Hvordan ser grafen over språkfordelingen ved den all-russiske olympiaden i informatikk ut? Folk som deltar i det allrussiske, kuleste OL, hva skriver de i? Det ser slik ut (her betyr det Pascal, og her er det omtrent 2000, og her er det omtrent null, her er det C++, og her er det 2015).

I 2000 var det nesten ingen som skrev C++. 15 år har gått, og nesten ingen skriver i Pascal, til tross for at Pascal er moderne. Dette er et språk som kan gjøre nesten alt likt. Det er bare det at alle har blitt for late til å lære dette, hver nye trend, og de fortsetter å skrive alt i Borland Pascal, som selvfølgelig ikke kan gjøre noe. I C++ skriver folk noen algoritmer (STL) for å sortere - flott, de skrev sort() og det er det. På Pascal, på vanlig, på den gamle - dette er et problem. Vi skrev et slags sett (det var nødvendig) - flott, vi skrev det i C++, men i Pascal var det igjen en fullstendig smerte. Selvfølgelig kan du gjøre dette med nye Pascals, men de koster vanligvis penger. Du har kanskje ikke lagt merke til dette, men det er sant.

Det finnes også Java, men Java har mange bokstaver. Det er for store prosjekter, men for små engangsprogrammer slår det veldig dårlig ut, fordi det er mange ekstra bokstaver. Men noen skriver også, du kan lære å skrive på det. Men det er ikke på Unified State-eksamenen, og flertallet vil fortsatt måtte ta Unified State-eksamenen.

Hva er best for Unified State-eksamenen? For Unified State-eksamenen er det best (hvis du ikke kan noe og de ikke lærer deg noe på skolen) å lære Python. Noen eksamensoppgaver kan løses perfekt på den. På Olympiaden generelt viser det seg at C++ brukes, fordi Python er veldig treg, ikke alt er løst der.

Dermed har du studert en liten delmengde av språket og noen algoritmer (muligens) og løst mange problemer for å motta et diplom fra Olympiaden din og komme inn på universitetet for å få høyere utdanning.

Jeg skal nå snakke om hvordan vi strukturerer kurset ved HMS, i hvilken rekkefølge språkene undervises, hvordan de studeres i anvendt matematikk og informatikk ved Det anvendte fakultet, som vi gjør sammen med Yandex. I første semester - Python (ikke i sin helhet, omtrent som du burde lære på skolen) og C++ (allerede bredere, mye bredere enn det vanligvis undervises på skolene). La meg fortelle deg det med en gang, slik at du ikke blir redd, hvis du plutselig vil melde deg på, vil du si: "Hva, jeg vet allerede alt dette, hvorfor skal jeg gå et sted for å studere? Jeg vil heller dra et annet sted." For de som allerede vet hvordan man programmerer godt, er det en mulighet til å umiddelbart gå videre til å studere algoritmer, og i en ganske teoretisk forberedelse. Vi ser ikke på dem nå, dette (peker på tavlen) er for de som er middels programmerere eller ikke i det hele tatt.

I det første semesteret undervises det grunnleggende i Python, bare for at folk skal lære å programmere og slik at ingen blir for fornærmet. Python blir sjelden undervist på skoler; de fleste kommer med kunnskap om Pascal eller C++. Mest til og med Pascal, hvis dette er en masseskole. Vel, slik at ingen blir fornærmet, lærer alle et nytt språk (som om de er under like forhold). Og C++ ganske enkelt fordi fra C++ kan du gå hvor som helst.

Deretter kommer Algoritme-kurset og et eget kursprosjekt. Klassiske algoritmer med implementering. Det er ikke det at vi tok noe i teorien og beregnet kompleksiteten. På forelesningen tok vi det, regnet ut kompleksiteten, på seminaret tok vi det og implementerte algoritmen. Et prosjekt er der elevene gjør noe komplett. For eksempel var et av prosjektene: telle... La oss si at du har mange leiligheter i Moskva og du forstår: «Å, jeg har mange ekstra ting, jeg skal leie ut noen. Og de setter en viss pris, og av en eller annen grunn vil ingen leie en leilighet av deg - det er sannsynligvis for dyrt. Eller de satte en pris, de tok den umiddelbart fra deg og du tenker: "Å, jeg har sikkert solgt den billig" - og du blir også lei deg. Det vil si at det var nødvendig å beregne hvor mye det koster å leie en leilighet? Du legger inn dataene - det lager et estimat for deg. Et slikt nettsted, som besto av flere ting: ta setninger, analysere dem, bruke en slags (sannsynligvis) enkel maskinlæringsalgoritme og lage et vakkert nettfjes der du kan velge noe, skrive inn noe, noen meter, et visst antall rom , antall badstuer, antall boblebad i leiligheten din og grovt anslå kostnaden. Det vil si en slags ferdig, ikke særlig komplisert ting. Her betyr det (foreleseren peker på kurset om algoritmer) en slik kjerne C++, med konsoll input-output. Vel, her (foreleseren peker på inskripsjonen «prosjekt») er det noe under veiledning av en mentor, kanskje med databaser, kanskje med tekstparsing og noe annet.
Så er det tredje semester - dette er et kurs som heter "Datasystemer". Det er ganske mye assemblerspråk å forstå (veldig lite) og så noe som ligner på ren C og interaksjon med operativsystemer, systemprogrammering i hovedsak. Og prosjektet for seminaret er også noe om temaet alle slags nettverksinteraksjoner, ganske lavt nivå: utvikle en slags verktøy, for eksempel rsync (synkronisering, kanskje du vet. I ren C, mer eller mindre, skriv en analog med rsync, som du vil ha over nettverket til å synkronisere mapper med alle filtilganger og så videre).

Og til slutt den fjerde. Jeg vet ikke engang hva jeg skal kalle det, det er en slik vinaigrette av teknologier som er nødvendige for reell utvikling, for eksempel webutvikling. Det vil si dette praktisk bruk databaser, igjen noe tilsvarende det som ble gjort i prosjektet (foreleseren peker på 2. årsprosjektet) men mer utdypende. Det vil si at dette er mer eller mindre spesifikke ting, praktisk programmering. Parallelt med dette er det all teori, og her driver de også med vitenskap.

Og etter to kurs drar folk for å gjøre det som interesserer dem, fordi denne tingen dekker det grunnleggende om programmering ganske bredt, og på dette tidspunktet forstår folk allerede at de ikke vil gjøre det datasystemer ikke i noe tilfelle (de likte ikke systemprogrammering, for eksempel), men de vil jobbe med noen teoretiske algoritmer, beregne vanskeligheter, komme opp med noen nye ting, distribuert eller noe annet. Eller tvert imot, de tror at de ikke har mye her ( foreleseren peker på linjen til det første kurset med Python og C++) gikk, så ( foreleser peker på tredje kurslinje, med systemprogrammering) - Jeg liker det ikke, å telle bytes og sette alle slags restriksjoner på lesing og skriving, lage strømmer, tråder og noe annet. Og i samsvar med dette velger folk en retning og studerer. Det vil si i prinsippet slik at du ikke utvikler "andungesyndrom" - du var den første som så din Pascal og nå sa "Pascal er makt"; eller mer avansert - du så C++ og begynte å snakke om alle at C++ er sterkt, men alt annet er ikke veldig bra.

Nå må vi se på dette (foreleseren peker på listen over emner i styret) bredere - dette er en av metodene som ble valgt, spesielt ved HMS (den dukket opp nylig, så den er ganske moderne). Det finnes andre måter å bli kjent på. På andre gode universiteter er rekkefølgen litt annerledes og andre aksenter er plassert. Men de prøver også å introdusere folk til alt de har.

Hvordan se etter en jobb som programmerer

Du er ( foreleseren peker på listen over emner) gjorde alt, studerte på universitetet, gjorde noe annet i to år mer produktivt, og du må gå på jobb. Hvordan velge noe for jobben? For det første har du blitt kjent med alt, gått dypere et sted og allerede vet hva du elsker. Du må velge hva du elsker, naturligvis. For hvis du elsker, anstrenger du deg, du vil ha motivasjon og generelt vil alt gå bra. Fordi det ikke bare handler om penger, det handler om å gjøre det interessant og hyggelig for deg. Vel, du ønsker å komme inn i et kult selskap og få en jobb. Hva slags person ville jeg personlig likt å se? La oss si at hundre studenter kommer til meg – skal jeg ansette to eller en. Hvorfor kommer de, jeg forstår ikke i det hele tatt, hvem de er, hva de er, hvordan de er? I beste fall vil de vise meg vitnemålet de mottok på universitetet, og jeg vil si: "Wow!" Dette er et kult diplom, men dette er ikke så kult!» Og jeg kan forresten ta feil. Kanskje personen hadde mye fritid og lærte mye bedre.

Hva ville vært flott? For det første et åpen kildekode-prosjekt som du skrev fra start til slutt. Helst, hvis jeg lager en slags infrastruktur slik at data raskt kan leses, eller noe annet, så vil jeg selvfølgelig være interessert i å få skrevet noe åpen kildekode for meg. De laget ikke et nettsted, men noe om emnet. Hvorfor er jeg interessert i dette? Jeg kan se på koden din, jeg kan se hvor ofte du forpliktet deg, jeg kan se hvordan du reagerte på feil fra brukere, feil fra utviklere som bruker den - alt er registrert, jeg ser på alt og tenker: "Wow, denne feilen har ikke har ikke vært der på to år nå.» lukket, her svarte du uhøflig til brukeren, her er noe annet - jeg tar det ikke.» Det vil si at dette er ditt personlige prosjekt.

Neste, hva annet ville vært kult? Jeg vil gjerne se hvordan du gjorde det teamarbeid. Det vil si at du kommer til meg for et intervju og sier: «Gutta fra universitetet og jeg har sendt inn en god søknad. Jeg laget en database der, de laget en slags mobilapplikasjon der, og vi hadde også en fyr som jobbet der, en jentedesigner, en gutt på teknisk støtte. Vi var fem og vi laget et kult prosjekt.» Vel, jeg ser at det virkelig er ditt prosjekt, jeg sier: "Hva er ditt?" Jeg ser på koden igjen og forstår at du vet hvordan du jobber i team med mennesker.

En programmerer er ikke en som sitter alene (indie) i en garasje, et sted med lysene av, ikke snakker med noen, vokser skjegg og skriver. Det er fortsatt noe interaksjon med mennesker. Med en sjef, for eksempel, som noen ganger kan banne til deg (sjefer, de er sånn, er ikke alltid snille). Og jeg ser at du vet hvordan du jobber med mennesker og det gjør meg glad hvis du har et slags godt team. Selv om det ikke er bra, er det bedre enn å ikke ha en.

Hva annet vil jeg personlig ha? Hvis du beviste deg selv i store prosjekter. For eksempel, du har begått noe i Linux-kjernen, hvis du er interessert i systemprogrammering, og fikset en feil. Det vil si at de viste at du vet hvordan du leser andres kode og vet hvordan du gjør noen endringer i den. Jeg ser: "Å, virkelig, du fant ut noe komplisert og fikset noen feil!" Og jeg begynner å bli veldig glad for dette. Fordi jeg har ... vel, jeg vet ikke ... programmereren min sluttet fordi konkurrentene hans tilbød ham en høyere lønn, og jeg trenger snarest noen til å fylle plassen hans - hos deg. Jeg ser at du bare skrev fra bunnen av, men du vet ikke hvordan du leser og redigerer andres kode, og jeg blir opprørt.

Og til slutt, avhengig av den spesifikke stillingen, er det forskjellige andre ting. Hvis du får jobb som analytiker, vil jeg gjerne at du løser dataanalyseproblemer på Kaggle. Hvis du søker på noen algoritmiske ting, vil jeg gjerne at du gjør noen algoritmer innen sportsprogrammering. Og til slutt, hvis du har tenkt på yrket, les hvordan intervjuer gjennomføres, har du sett at noen der uttrykker stor misnøye: «Jeg kom, og de spurte meg hva hobbyen min var. Jeg sitter som en ugle og svarer ikke fordi jeg ikke har en hobby,» og de tror at HR gjør dette. Faktisk prøver de å forstå hvor vennlig og tilstrekkelig du er. Hvis du er uvennlig og utilstrekkelig, så uansett hvor geni og arbeidsnarkoman du er, en tøff spesialist med stor kunnskap, vil det være vanskelig for teamet å jobbe med deg, og du vil ikke klare å fullføre prosjektet alene. I tillegg, selv om du trekker det ut, kan du forestille deg hva belastningen er for selskapet. Hva om du kommer i morgen og sier: «Øk lønnen min 10 ganger, ellers forlater jeg deg.» Det er tydelig at bedrifter ikke ønsker å komme i en slik situasjon. Derfor er det å dyrke tilstrekkelighet og velvilje hos seg selv like viktig (i det minste) som å utvikle noen faglige ferdigheter.

For å oppsummere, hva kan vi si? Hvilke språk er gode og hvilke er dårlige? Vel, innenfor en viss gruppe språk, for eksempel mellom Ruby, Python og PHP, hva bør du velge? Selvfølgelig er det riktige svaret Python, men faktisk er forskjellen mellom dem i antall tillatte feil, i antall noe annet - 5%, vel, kanskje 10%. Det vil si hvis du allerede har ferdig prosjekt skrevet i PHP, ville ingen ved sitt rette sinn si: "La oss omskrive alt i Python." De vil si: "La oss ansette flere PHP-utviklere og fortsette å skrive i PHP." Flott, det er et godt valg. Det er klart at hvis du plutselig bestemmer deg for å skrive et slags prosjekt, kan det være lurt å velge Python nå. Skjønt, det kommer også an på. Kanskje du har mange billige PHP-utviklere på markedet, og Python-utviklere er dyre, og du tenker: "Ja, teknologien er kulere, men jeg vil spare penger på ferdige utviklere." Og alt er flott, du kommer allerede og jobber der.
Hvordan velge mellom Java og C++? Ja, omtrent det samme skjer. Jeg tror at innen du bestemmer deg for hvilket språk du skal starte et nytt stort prosjekt på, vil du ha fått kunnskap innen ditt fagfelt og være i stand til å ta det riktige valget. Nå trenger du ikke ta det valget ennå, og derfor råder jeg deg til å gjøre det du liker.

Det grunnleggende, som jeg allerede har sagt, det aller, aller grunnleggende innen programmering (hva er en funksjon, hva er if'ics, for'ics, arrays, noe annet) kan læres på mer eller mindre hvilket som helst språk. For eksempel i C++, siden det er mange likheter med det, og det er de minste detaljene i det (på dette nivået), og det er minst mulig ekstra bokstaver å skrive. Vel, da, når du lærer noen komplekse arkitektoniske ting, vil du lære og du trenger ikke å bekymre deg for mye om det. Det vil si, det viktigste er å prøve, se etter det du liker, og når du innser at klokken allerede er 4 om morgenen, og du sitter og skriver for moro skyld, fordi du liker det - sannsynligvis i det øyeblikket det er tydelig at du har funnet ditt.

Programmerer William W. Vold forteller historien

I løpet av de siste seks månedene har jeg jobbet med å lage et programmeringsspråk (PL) kalt Pinecone. Jeg vil ikke våge å kalle det komplett, men du kan allerede bruke det – det inneholder nok elementer til dette, som variabler, funksjoner og tilpassede datastrukturer. Hvis du vil sjekke det ut før du leser, foreslår jeg at du besøker den offisielle siden og depotet på GitHub.

Introduksjon

Jeg er ingen ekspert. Da jeg begynte å jobbe med dette prosjektet ante jeg ikke hva jeg gjorde, og det har jeg fortsatt ikke. Jeg har aldri målrettet studert prinsippene for å lage et språk - jeg leste bare noen materialer på Internett, og selv i dem fant jeg ikke nesten noe nyttig for meg selv.

Jeg skrev imidlertid et helt nytt språk. Og det fungerer. Jeg må gjøre noe riktig.

I denne artikkelen skal jeg prøve å vise hvordan Pinecone (og andre programmeringsspråk) gjør kildekoden til det mange anser som magi. Jeg vil også fokusere på situasjoner der jeg måtte inngå kompromisser og forklare hvorfor jeg tok de avgjørelsene jeg gjorde.

Teksten hevder absolutt ikke å være en fullverdig guide til å lage et programmeringsspråk, men for den nysgjerrige vil den være et godt utgangspunkt.

Første steg

"Hvor skal jeg begynne?" er et spørsmål som andre utviklere ofte stiller når de får vite at jeg skriver mitt eget språk. I denne delen skal jeg forsøke å svare i detalj.

Kompilert eller tolket?

Kompilatoren analyserer hele programmet, gjør det om til maskinkode og lagrer det for senere kjøring. Tolken analyserer og utfører programmet linje for linje i sanntid.

Teknisk sett kan et hvilket som helst språk både kompileres og tolkes. Men for hvert språk er en av metodene mer egnet enn den andre, og valget av paradigme avhenger av tidlige stadier bestemmer videre utforming. I en generell forstand er tolkning fleksibel og kompilering gir høy ytelse, men dette er bare spissen av et veldig komplekst tema.

Jeg ønsket å lage et enkelt, men kraftig språk, som er sjeldent, så jeg bestemte meg for å lage Pinecone helt fra begynnelsen. Imidlertid har Pinecone også en tolk - til å begynne med var lansering bare mulig med dens hjelp, senere vil jeg forklare hvorfor.

Merk oversettelse Det har vi forresten kort anmeldelse er en flott øvelse for de som lærer Python.

Språkvalg

Et slags meta-trinn: selve programmeringsspråket er et program som må skrives på et eller annet språk. Jeg valgte C++ på grunn av ytelse, stort sett funksjonalitet, og bare fordi jeg liker ham.

Men generelt kan følgende råd gis:

  • tolkbart språk sterkt anbefaltskrive på et kompilert språk (C, C++, Swift). Ellers vil ytelsen overhead snøballe mens metatolken tolker tolken din;
  • kompilert språk du kan skrive på tolket språk (Python, JS). Kompileringstiden vil øke, men ikke programkjøringstiden.

Arkitektur design

Strukturen til et programmeringsspråk har flere trinn fra kildekode til kjørbar fil, som hver formaterer data på en bestemt måte, samt funksjoner for overgang mellom disse stadiene. La oss snakke om dette mer detaljert.

Leksikalanalysator/lexer

Kildekodelinjen sendes gjennom lexeren og gjøres om til en liste over tokens.

Det første trinnet på de fleste språk er leksikalsk analyse. Enkelt sagt representerer det inndelingen av tekst i tokens, det vil si språkenheter: variabler, funksjonsnavn (identifikatorer), operatorer, tall. Derfor, ved å mate lexeren en streng med kildekoden som input, vil vi motta som utdata en liste over alle tokens som den inneholder.

Kildekoden vil ikke lenger være tilgjengelig i påfølgende stadier, så lexeren må gi all nødvendig informasjon for dem.

Flex

Da jeg lagde språket, var det første jeg gjorde å skrive en lexer. Senere har jeg utforsket verktøy som kan gjøre leksikalsk analyse enklere og redusere antall feil som oppstår.

Et av de viktigste slike verktøyene er Flex - en leksikalsk analysatorgenerator. Den tar som input en fil som beskriver språkgrammatikken, og lager deretter et C-program, som igjen analyserer strengen og gir det ønskede resultatet.

Mitt valg

Jeg bestemte meg for å beholde analysatoren jeg skrev. Til slutt så jeg ingen spesielle fordeler med Flex, og bruken av den ville bare skape ytterligere avhengigheter som ville komplisere byggeprosessen. I tillegg tillater mitt valg mer fleksibilitet - for eksempel kan du legge til en uttalelse til språket uten å måtte redigere flere filer.

Parser/parser

Listen over tokens går gjennom parseren og blir til et tre.

Det neste trinnet er parseren. Den forvandler kildeteksten, det vil si en liste over tokens (som tar hensyn til parenteser og rekkefølge av operasjoner), til et abstrakt syntakstre, som lar deg strukturelt representere reglene for det opprettede språket. Selve prosessen kan kalles enkel, men med en økning i antall språkkonstruksjoner blir den mye mer komplisert.

Bison

På dette trinnet tenkte jeg også å bruke et tredjepartsbibliotek, og se på Bison for å generere parseren. Det er mye som Flex - en tilpasset fil med syntaksregler er strukturert ved hjelp av et C-program. Men igjen, jeg bestemte meg for automatiseringsverktøy.

Fordeler med tilpassede programmer

Med lexeren var beslutningen min om å skrive og bruke min egen kode (omtrent 200 linjer lang) ganske åpenbar: Jeg elsker gåter, og denne er også relativt triviell. Parseren er en annen historie: nå er kodelengden for den 750 linjer, og dette er allerede det tredje forsøket (de to første var rett og slett forferdelige).

Imidlertid bestemte jeg meg for å lage parseren selv. Her er hovedårsakene:

  • minimer kontekstbytte;
  • forenkling av montering;
  • ønske om å takle oppgaven selvstendig.

Jeg ble overbevist om gjennomførbarheten av løsningen ved uttalelsen til Walter Bright (skaperen av D-språket) i en av artiklene hans:

Jeg vil ikke anbefale å bruke lexer- og parsergeneratorer, samt andre såkalte "kompilatorkompilatorer". Å skrive en lexer og parser vil ikke ta mye tid, og bruk av generatoren vil binde deg fast til den videre arbeid(som betyr noe når du porterer kompilatoren til ny plattform). I tillegg er generatorer preget av å gi irrelevante feilmeldinger.

Abstrakt semantisk graf

Overgang fra et syntakstre til en semantisk graf

I denne delen implementerte jeg en struktur som i hovedsak er nærmest "mellomrepresentasjonen" i LLVM. Det er en liten, men viktig forskjell mellom et abstrakt syntakstre (AST) og en abstrakt semantisk graf (ASG).

ASG vs ASD

Grovt sett er en semantisk graf et syntaktisk tre med kontekst. Det vil si at den inneholder informasjon som hvilken type funksjonen returnerer eller på hvilke steder den samme variabelen brukes. Fordi grafen trenger å gjenkjenne og huske all denne konteksten, trenger koden som genererer den støtte i form av mange forskjellige forklarende tabeller.

Lansering

Når grafen er tegnet, er det en ganske enkel oppgave å kjøre programmet. Hver node inneholder en implementering av en funksjon som tar litt input, gjør det den er programmert til å gjøre (inkludert mulige kall til hjelpefunksjoner), og returnerer et resultat. Dette er tolken i aksjon.

Kompileringsalternativer

Du lurer kanskje på hvor tolken kom fra, siden jeg opprinnelig definerte Pinecone som et kompilert språk. Poenget er at kompilering er mye vanskeligere enn tolkning - jeg nevnte tidligere at jeg fikk noen problemer med dette trinnet.

Skriv din egen kompilator

Først likte jeg denne ideen – jeg liker å gjøre ting selv, og jeg har lenge hatt lyst til å lære assemblerspråk. Men å lage en kompilator på tvers av plattformer fra bunnen av er vanskeligere enn å skrive maskinkode for hvert element i språket. Jeg fant denne ideen helt upraktisk og ikke verdt ressursene som ble brukt.