Come configurare smartphone e PC. Portale informativo
  • casa
  • Programmi
  • Livelli di linguaggi di programmazione. Linguaggi di programmazione di alto e basso livello: quali dovresti imparare

Livelli di linguaggi di programmazione. Linguaggi di programmazione di alto e basso livello: quali dovresti imparare

Linguaggio di programmazione

Linguaggio di programmazione- un sistema di segni formale progettato per registrare i programmi per computer. Un linguaggio di programmazione definisce un insieme di regole lessicali, sintattiche e semantiche che definiscono l'aspetto del programma e le azioni che l'esecutore (computer) eseguirà sotto il suo controllo.

  • Funzione: un linguaggio di programmazione è progettato per scrivere programmi per computer utilizzati per trasmettere istruzioni a un computer per eseguire un particolare processo di elaborazione e organizzare il controllo dei singoli dispositivi.
  • Un compito: Un linguaggio di programmazione differisce dai linguaggi naturali in quanto è progettato per trasferire comandi e dati da una persona a un computer, mentre i linguaggi naturali vengono utilizzati per comunicare tra le persone. Puoi generalizzare la definizione di "linguaggi di programmazione": questo è un modo per trasmettere comandi, ordini, una guida chiara all'azione; mentre le lingue umane servono anche per lo scambio di informazioni.
  • Esecuzione: Un linguaggio di programmazione può utilizzare costrutti speciali per definire e manipolare strutture di dati e controllare il processo di calcolo.

Standardizzazione dei linguaggi di programmazione

Un linguaggio di programmazione può essere rappresentato come un insieme di specifiche che ne definiscono la sintassi e la semantica.

Sono stati creati standard internazionali per molti linguaggi di programmazione ampiamente utilizzati. Organizzazioni speciali aggiornano e pubblicano regolarmente le specifiche e le definizioni formali della lingua corrispondente. Nell'ambito di tali comitati, lo sviluppo e la modernizzazione dei linguaggi di programmazione continuano e vengono risolti i problemi relativi all'espansione o al supporto di costrutti linguistici esistenti e nuovi.

Tipi di dati

I moderni computer digitali sono generalmente binari e i dati sono archiviati in codice binario (binario) (sebbene siano possibili implementazioni in altri sistemi numerici). Questi dati in genere riflettono informazioni del mondo reale (nomi, conti bancari, misurazioni, ecc.) che rappresentano concetti di alto livello.

Un sistema speciale con cui i dati sono organizzati in un programma è sistema di tipo linguaggio di programmazione; lo sviluppo e lo studio dei sistemi dei tipi è noto come teoria dei tipi. Le lingue possono essere classificate come sistemi con digitazione statica e lingue da digitazione dinamica.

Le lingue di tipo statico possono essere ulteriormente suddivise in lingue con dichiarazione obbligatoria, dove ogni dichiarazione di variabile e funzione ha una dichiarazione di tipo obbligatoria e le lingue con tipi dedotti. A volte vengono chiamate lingue digitate dinamicamente digitato in modo latente.

Strutture di dati

I sistemi di tipi nei linguaggi di alto livello consentono la definizione di tipi complessi e compositi, le cosiddette strutture dati. Tipicamente, i tipi di dati strutturali sono formati come prodotto cartesiano di tipi di base (atomici) e tipi compositi precedentemente definiti.

Le strutture di dati di base (elenchi, code, tabelle hash, alberi binari e coppie) sono spesso rappresentate da speciali costrutti di sintassi nei linguaggi di alto livello. Tali dati sono strutturati automaticamente.

Semantica dei linguaggi di programmazione

Esistono diversi approcci per definire la semantica dei linguaggi di programmazione.

Le varietà più diffuse delle tre seguenti: operazionale, derivazionale (assiomatica) e denotazionale (matematica).

  • Quando si descrive la semantica all'interno del framework operativo approccio, l'esecuzione dei costrutti del linguaggio di programmazione viene solitamente interpretata con l'aiuto di un computer immaginario (astratto).
  • Derivato la semantica descrive le conseguenze dell'esecuzione di costrutti linguistici utilizzando il linguaggio della logica e impostando pre e postcondizioni.
  • denotativo la semantica opera con concetti tipici della matematica - insiemi, corrispondenze, nonché giudizi, affermazioni, ecc.

Paradigma di programmazione

Un linguaggio di programmazione è costruito secondo l'uno o l'altro modello di calcolo di base e paradigma di programmazione.

Nonostante il fatto che la maggior parte dei linguaggi sia orientata verso il modello imperativo di calcolo definito dall'architettura del computer von Neumann, esistono altri approcci. Si possono citare linguaggi con modello di stack computing (Forth, Factor, PostScript, ecc.), oltre a programmazione funzionale (Lisp, Haskell, ecc.) e logica (Prolog) e il linguaggio REFAL, basato sul modello di calcolo introdotto dal matematico sovietico A.A. Markov Jr.

Attualmente si stanno sviluppando attivamente anche linguaggi di programmazione specifici del dominio, dichiarativi e visivi.

Modi per implementare le lingue

I linguaggi di programmazione possono essere implementati come compilati e interpretati.

Un programma in un linguaggio compilato con l'aiuto di un compilatore (un programma speciale) viene convertito (compilato) in codice macchina (un insieme di istruzioni) per un determinato tipo di processore e quindi assemblato in un modulo eseguibile che può essere avviato per l'esecuzione come programma separato. In altre parole, il compilatore traduce il codice sorgente del programma da un linguaggio di programmazione di alto livello in codici binari di istruzioni del processore.

Se il programma è scritto in un linguaggio interpretato, l'interprete esegue (interpreta) direttamente il testo di partenza senza traduzione preventiva. Il programma rimane nella sua lingua originale e non può essere eseguito senza un interprete. Il processore di un computer, a questo proposito, può essere chiamato interprete del codice macchina.

La divisione in linguaggi compilati e interpretati è condizionale. Quindi, per qualsiasi linguaggio compilato tradizionalmente, come Pascal, puoi scrivere un interprete. Inoltre, la maggior parte degli interpreti "puri" moderni non eseguono direttamente i costrutti del linguaggio, ma li compilano in una rappresentazione intermedia di alto livello (ad esempio, con dereferenziazione variabile ed espansione macro).

Per qualsiasi linguaggio interpretato, puoi creare un compilatore, ad esempio il linguaggio Lisp, originariamente interpretato, può essere compilato senza alcuna restrizione. Il codice generato in fase di esecuzione può anche essere compilato dinamicamente in fase di esecuzione.

Di norma, i programmi compilati funzionano più velocemente e non richiedono programmi aggiuntivi per essere eseguiti, poiché sono già tradotti in linguaggio macchina. Allo stesso tempo, ogni volta che il testo del programma viene modificato, deve essere ricompilato, il che rallenta il processo di sviluppo. Inoltre, un programma compilato può essere eseguito solo sullo stesso tipo di computer, e solitamente con lo stesso sistema operativo, per il quale è stato progettato il compilatore. Per creare un eseguibile per un diverso tipo di macchina, è necessaria una nuova compilazione.

I linguaggi interpretati hanno alcune caratteristiche aggiuntive specifiche (vedi sopra), inoltre, i programmi in essi contenuti possono essere eseguiti immediatamente dopo la modifica, il che semplifica lo sviluppo. Un programma in linguaggio interpretato può spesso essere eseguito su molti tipi diversi di macchine e sistemi operativi senza ulteriore sforzo.

Tuttavia, i programmi interpretati vengono eseguiti notevolmente più lentamente dei programmi compilati e non possono essere eseguiti senza un programma interprete.

Questo approccio, in un certo senso, consente di utilizzare i vantaggi sia degli interpreti che dei compilatori. Va detto che ci sono linguaggi che hanno sia un interprete che un compilatore (Forth).

Simboli utilizzati

I moderni linguaggi di programmazione sono progettati per utilizzare ASCII, ovvero la disponibilità di tutti grafico I caratteri ASCII sono una condizione necessaria e sufficiente per scrivere qualsiasi costrutto di linguaggio. Gestori I caratteri ASCII vengono utilizzati in misura limitata: sono consentiti solo il ritorno a capo CR, l'avanzamento riga LF e la scheda orizzontale HT (a volte anche la scheda verticale VT e la pagina successiva FF).

Le prime lingue, emerse durante l'era dei caratteri a 6 bit, utilizzavano un set più limitato. Ad esempio, l'alfabeto Fortran ha 49 caratteri (incluso lo spazio): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + - * / () . , $" :

Un'eccezione notevole è il linguaggio APL, che utilizza molti caratteri speciali.

L'uso di caratteri non ASCII (come caratteri KOI8-R o caratteri Unicode) dipende dall'implementazione: a volte sono consentiti solo nei commenti e nelle costanti di carattere/stringa, e talvolta sono consentiti anche negli identificatori. In URSS c'erano lingue in cui tutte le parole chiave erano scritte in lettere russe, ma tali lingue non hanno guadagnato molta popolarità (l'eccezione è il linguaggio di programmazione integrato 1C: Enterprise).

L'espansione del set di caratteri utilizzato è vincolata dal fatto che molti progetti di sviluppo software sono internazionali. Sarebbe molto difficile lavorare con un codice in cui i nomi di alcune variabili sono scritti in lettere russe, altre in arabo e altre ancora in caratteri cinesi. Allo stesso tempo, i linguaggi di programmazione di nuova generazione (Delphi 2006, Java) supportano Unicode per lavorare con i dati di testo.

Corsi di linguaggio di programmazione

Guarda anche

Appunti

Letteratura

  • Hal Abelson, Gerald Jay Sussman. Struttura e interpretazione dei programmi per computer
  • Robert W. Sebesta. Concetti di base dei linguaggi di programmazione \u003d Concetti di linguaggi di programmazione / Per. dall'inglese. - 5a ed. - M.: Williams, 2001. - 672 pag. - 5000 copie. - ISBN 5-8459-0192-8 (russo), ISBN 0-201-75295-6 (inglese)
  • Wolfenhagen V. E. Disegni di linguaggi di programmazione. Metodi di descrizione. - M.: Centro YurInfoR, 2001. - 276 pag. - ISBN 5-89158-079-9
  • Parondzhanov V.D. Come migliorare il lavoro della mente. Algoritmi senza programmatori: è molto semplice! - M.: Delo, 2001. - 360 pag. - ISBN 5-7749-0211-0
  • F.Biancuzzi, S.Worden. Pionieri della programmazione. Dialoghi con i creatori dei linguaggi di programmazione più diffusi. - San Pietroburgo. : Symbol-Plus, 2010. - 608 p. - ISBN 978-5-93286-170-7

Collegamenti

  • L'elenco delle lingue (inglese): più di 2500 lingue con una breve descrizione
  • Computer Languages ​​​​History (inglese) - storia dei linguaggi di programmazione (dal 1954 a maggio 2004) (contiene una tabella regolarmente aggiornata)
  • Esempi (inglese) - esempi di programmazione in 162 lingue
  • Popolarità del linguaggio di programmazione (eng.) - Sondaggio sulla popolarità del linguaggio di programmazione 2004
  • 10 linguaggi di programmazione da imparare (2006)
  • Programming Community Index (eng.) - una classifica regolarmente aggiornata della popolarità dei linguaggi di programmazione
  • Computer Language Shootout Benchmarks (inglese): confronto dei linguaggi di programmazione in termini di efficienza
  • Linguaggi di programmazione che sono amati (inglese): un confronto tra linguaggi di programmazione per "amore" e "odio" per loro

Fondazione Wikimedia. 2010.

Classificazione dei linguaggi di programmazione

All'alba dell'era dei computer, il codice macchina era l'unico mezzo di comunicazione tra umani e computer. Il grande risultato dei creatori di linguaggi di programmazione è stato che sono stati in grado di far funzionare il computer stesso come traduttore da questi linguaggi al codice macchina.

I linguaggi di programmazione esistenti possono essere divisi in due gruppi: procedurali e non procedurali (vedi Figura 4.1).

I programmi procedurali (o algoritmici) sono un sistema di prescrizioni per la risoluzione di un problema specifico. Il ruolo del computer si riduce all'esecuzione meccanica di queste prescrizioni.

Le lingue procedurali sono divise in lingue di basso livello e di alto livello.

Diversi tipi di processori hanno diversi set di istruzioni. Se il linguaggio di programmazione è focalizzato su un tipo specifico di processore e tiene conto delle sue caratteristiche, allora viene chiamato linguaggio di programmazione di basso livello.
Ciò significa che gli operatori del linguaggio sono vicini al codice macchina e si concentrano su istruzioni specifiche del processore.

Riso. 4.1. Classificazione generale dei linguaggi di programmazione

I linguaggi di basso livello (orientati alla macchina) consentono di creare programmi da codici macchina, solitamente in forma esadecimale. Sono difficili da utilizzare, ma i programmi creati con il loro aiuto da un programmatore altamente qualificato occupano meno spazio di memoria e funzionano più velocemente. Utilizzando questi linguaggi, è più conveniente sviluppare programmi di sistema, driver (programmi per il controllo di dispositivi informatici) e alcuni altri tipi di programmi.

Il linguaggio di basso livello (specifico della macchina) è assemblatore, che rappresenta semplicemente ogni istruzione di codice macchina, non come numeri, ma con convenzioni simboliche chiamate
mnemonici.

Con l'aiuto di linguaggi di basso livello, vengono creati programmi molto efficienti e compatti, poiché lo sviluppatore ha accesso a tutte le capacità del processore.

Linguaggi di programmazione di alto livello molto più vicino e comprensibile per una persona di un computer. Non tengono conto delle caratteristiche di specifiche architetture di computer, quindi i programmi creati a livello di codice sorgente sono facilmente portabili su altre piattaforme per le quali è stato creato un traduttore di questo linguaggio. È molto più facile sviluppare programmi in linguaggi di alto livello con l'aiuto di comandi chiari e potenti e ci sono molti meno errori nella creazione di programmi.

Il principale vantaggio dei linguaggi algoritmici di alto livello è la capacità di descrivere programmi per la risoluzione di problemi nella forma più conveniente per la percezione umana. Ma poiché ogni famiglia di computer ha il suo specifico linguaggio interno (macchina) e può eseguire solo quei comandi scritti in questo linguaggio, speciali programmi di traduzione vengono utilizzati per tradurre i programmi sorgente in linguaggio macchina.

Il lavoro di tutti i traduttori si basa su uno di questi due principi: interpretazione o compilazione.

Interpretazione implica la traduzione operatore per operatore e la successiva esecuzione dell'operatore tradotto del programma sorgente. A questo proposito, si possono notare due carenze del metodo di interpretazione: in primo luogo, il programma di interpretazione deve essere nella memoria del computer durante l'intero processo di esecuzione del programma originale, ovvero occupare una certa quantità di memoria; in secondo luogo, il processo di traduzione della stessa istruzione viene ripetuto tutte le volte che questo comando deve essere eseguito nel programma, il che riduce drasticamente le prestazioni del programma.

Nonostante queste carenze, traduttori-interpreti hanno ricevuto una distribuzione sufficiente, poiché sono convenienti nello sviluppo e nel debug dei programmi sorgente.

In compilazione i processi di traduzione ed esecuzione sono separati nel tempo: in primo luogo, il programma sorgente viene completamente tradotto in linguaggio macchina (dopo di che la presenza di un traduttore nella RAM diventa superflua), quindi il programma tradotto può essere eseguito ripetutamente. Pertanto, per lo stesso programma, la traduzione per metodo di compilazione fornisce prestazioni più elevate del sistema di elaborazione riducendo la RAM richiesta.

La grande difficoltà nello sviluppare un compilatore rispetto ad un interprete della stessa lingua è dovuta al fatto che la compilazione di un programma prevede due azioni: analisi, ovvero determinare la correttezza del programma sorgente secondo le regole per la costruzione dei costrutti linguistici dell'input linguaggio e sintesi - generando programmi equivalenti in codice macchina. La traduzione per metodo di compilazione richiede la "visualizzazione" ripetuta del programma in fase di traduzione, ad es. traduttori-compilatori sono multipasso: durante il primo passaggio, controllano la correttezza della sintassi dei costrutti linguistici dei singoli operatori indipendentemente l'uno dall'altro, durante il passaggio successivo, la correttezza delle relazioni sintattiche tra gli operatori, ecc.

Viene chiamato il programma ottenuto a seguito della traduzione con il metodo di compilazione modulo oggetto, che è il programma equivalente in codice macchina, ma non "legato" a indirizzi RAM specifici. Pertanto, prima dell'esecuzione, il modulo oggetto deve essere elaborato da un apposito programma del sistema operativo (link editor - Link) e convertito in modulo di avvio.

Insieme ai traduttori-interpreti e ai traduttori-compilatori discussi sopra, nella pratica vengono utilizzati anche i traduttori. interpreti compilatori, che combinano i vantaggi di entrambi i principi di traduzione: nella fase di sviluppo e debug dei programmi, il traduttore lavora in modalità interprete e, una volta completato il processo di debug, il programma sorgente viene ritradotto nel modulo oggetto (cioè già dal metodo di compilazione). Ciò consente di semplificare e velocizzare notevolmente il processo di compilazione e debug dei programmi e, grazie al successivo ottenimento di un modulo oggetto, di garantire un'esecuzione più efficiente del programma.

La programmazione procedurale classica richiede al programmatore di descrivere in dettaglio come risolvere il problema, ovvero la formulazione dell'algoritmo e la sua notazione speciale. In questo caso, le proprietà attese del risultato di solito non sono specificate. I concetti base dei linguaggi di questi gruppi sono operatore e dati.
Nell'approccio procedurale, gli operatori sono raggruppati in gruppi - procedure. La programmazione strutturale nel suo insieme non va oltre questa direzione, ma risolve solo alcuni trucchi utili.
tecnologie di programmazione.

Una direzione fondamentalmente diversa nella programmazione è associata alle metodologie (a volte chiamate "paradigmi") di programmazione non procedurale. Questi includono la programmazione orientata agli oggetti e dichiarativa. Un linguaggio orientato agli oggetti crea un ambiente sotto forma di molti oggetti indipendenti. Ogni oggetto si comporta come un computer separato, possono essere utilizzati per risolvere problemi come "scatole nere", senza approfondire i meccanismi interni del loro funzionamento. Tra i linguaggi di programmazione a oggetti diffusi tra i professionisti, il C++ dovrebbe essere nominato prima di tutto; per una gamma più ampia di programmatori si preferiscono ambienti come Delphi e Visual Basic.



Quando si utilizza un linguaggio dichiarativo, il programmatore specifica le strutture informative iniziali, le relazioni tra di esse e quali proprietà dovrebbe avere il risultato. Allo stesso tempo, il programmatore non costruisce la procedura per ottenerlo ("algoritmo") (almeno idealmente). Queste lingue non hanno il concetto di "operatore" ("comando"). Le lingue dichiarative possono essere divise in due famiglie: logiche (tipicamente Prolog) e funzionali (Lisp).

Caratterizziamo i linguaggi di programmazione più famosi.

1.Fortran(Sistema di traduzione FORmula - sistema di traduzione di formule); il linguaggio più antico e ancora attivamente utilizzato nella risoluzione di problemi di orientamento matematico. È un linguaggio classico per la programmazione informatica di problemi matematici e ingegneristici.

2.DI BASE(Codice di istruzione simbolica per tutti gli usi del principiante - un codice di istruzione simbolica universale per principianti); nonostante molte carenze e l'abbondanza di versioni scarsamente compatibili, è il più popolare in termini di numero di utenti. È ampiamente utilizzato durante la scrittura di programmi semplici .

3.ALGOL(ALGOrithmic Language - linguaggio algoritmico); ha svolto un ruolo importante in teoria, ma ora non viene quasi mai utilizzato per la programmazione pratica.

4.PL/1(PL / 1 Programming Language - il primo linguaggio di programmazione); linguaggio multiuso; ormai quasi mai usato.

5.Pasquale(Pascal - dal nome dello scienziato Blaise Pascal); estremamente popolare sia nello studio della programmazione che tra i professionisti. Creato nei primi anni '70 dallo scienziato svizzero Niklaus Wirth. Il Pascal è stato originariamente sviluppato come linguaggio educativo e, infatti, ora è uno dei principali linguaggi per l'insegnamento della programmazione nelle scuole e nelle università. Tuttavia, le sue qualità nel complesso si sono rivelate così elevate che anche i programmatori professionisti sono disposti a usarlo. Non meno impressionante, anche finanziario, successo è stato ottenuto da Philip Kahn, un francese che ha sviluppato il sistema Turbo-Pascal. L'essenza della sua idea era di combinare le fasi successive dell'elaborazione del programma - compilazione, modifica dei collegamenti, debugging e diagnosi degli errori - in un'unica interfaccia. Le versioni di Turbo Pascal hanno invaso quasi tutte le istituzioni educative, i centri di programmazione e le aziende private. Diverse lingue più potenti (Modula, Ada, Delphi) sono state create sulla base del linguaggio Pascal.

6.cobolo(Common Business Oriented Language - una lingua focalizzata sul business generale); è in gran parte caduto in disuso. È stato concepito come il linguaggio principale per l'elaborazione di dati di massa nelle aree di gestione
e affari.

7.ADA; è la lingua vincitrice (maggio 1979) dell'Universal Language Design Competition del Pentagono dal 1975. Gli sviluppatori sono un gruppo di scienziati guidati da Jean Ihbia. La lingua vincitrice è stata battezzata ADA, in onore di Augusta Ada Lovelace. Il linguaggio ADA è il diretto successore del linguaggio
Pasquale. Questo linguaggio è destinato alla creazione e alla manutenzione a lungo termine (a lungo termine) di grandi sistemi software, consente la possibilità di elaborazione parallela, controllo di processo in tempo reale e molto altro, che è difficile o impossibile da ottenere utilizzando linguaggi più semplici .

8.Xi(C - "si"); ampiamente utilizzato nella creazione di software di sistema. Ha lasciato una grande impronta sulla programmazione moderna (prima versione - 1972), è molto popolare tra gli sviluppatori di sistemi software (compresi i sistemi operativi). C combina le caratteristiche sia di un linguaggio di alto livello che di un linguaggio orientato alla macchina, consentendo al programmatore l'accesso a tutte le risorse della macchina in un modo che linguaggi come BASIC e Pascal non forniscono.

9.C++(C++); un'estensione orientata agli oggetti del linguaggio C creata da Bjarne Stroustrup nel 1980. Molte nuove potenti funzionalità che hanno aumentato notevolmente la produttività dei programmatori sono state sovrapposte a una certa natura di basso livello ereditata dal linguaggio C.

10.Delfi(Delfi); linguaggio di programmazione "visivo" orientato agli oggetti; estremamente popolare in questo momento. Creato sulla base del linguaggio Pascal dagli specialisti Borland, il linguaggio Delphi, avendo la potenza e la flessibilità dei linguaggi C e C++, li supera in termini di praticità e semplicità dell'interfaccia nello sviluppo di applicazioni che forniscono interazione con database e supporto per vari tipi di lavoro all'interno di reti aziendali e Internet.

11.Giava(Giava); linguaggio di programmazione orientato agli oggetti indipendente dalla piattaforma, estremamente efficace per la creazione di pagine web interattive. Questo linguaggio è stato creato da Sun nei primi anni '90 basato su C++. È progettato per semplificare lo sviluppo di applicazioni basate su C++ eliminando da esso tutte le funzionalità di basso livello.

12.Liscio(Lisp) è un linguaggio di programmazione funzionale. Si concentra sulla struttura dei dati sotto forma di elenco e consente di organizzare un'elaborazione efficiente di grandi quantità di informazioni testuali.

13.Prologo(Programmazione in LOGica - programmazione logica). Lo scopo principale del linguaggio è lo sviluppo di programmi e sistemi intelligenti. Prolog è un linguaggio di programmazione progettato specificamente per lavorare con basi di conoscenza basate su fatti e regole (uno degli elementi dei sistemi di intelligenza artificiale). Il linguaggio implementa un meccanismo di backtracking per eseguire una catena inversa di ragionamento, in cui si presume che alcune conclusioni o conclusioni siano vere, e quindi queste ipotesi sono verificate in una base di conoscenza contenente fatti e regole di inferenza.
Se l'ipotesi non è confermata, viene effettuato un reso e viene effettuata una nuova ipotesi. Il linguaggio si basa su un modello matematico della teoria del calcolo dei predicati.

Linguaggi di programmazione per il web:

1. HTML. Una lingua ben nota per le scartoffie. È molto semplice e contiene comandi elementari per la formattazione del testo, l'aggiunta di immagini, l'impostazione di caratteri e colori, l'organizzazione di collegamenti e tabelle.

2. PERL.È stato concepito come uno strumento per l'elaborazione efficiente di file di testo di grandi dimensioni, la generazione di report di testo e la gestione delle attività.
Perl è molto più potente di linguaggi come C. Ha introdotto molte funzioni utilizzate di frequente per lavorare con stringhe, array, controllo del processore e lavorare con le informazioni di sistema.

3. tcl/tk. Questo linguaggio è focalizzato sull'automazione dei processi di routine e consiste in potenti comandi. È indipendente dal sistema e allo stesso tempo permette di creare programmi con interfaccia grafica.

4. VRML. Progettato per organizzare interfacce 3D virtuali su Internet. Ti permette di descrivere in forma testuale varie scene tridimensionali, luci e ombre, trame.

La scelta di un linguaggio di programmazione dipende da molti fattori: lo scopo, la comodità di scrivere programmi sorgente, l'efficienza dei programmi oggetto risultanti, ecc. La varietà di compiti risolti da un computer determina la varietà di linguaggi di programmazione.

domande di prova

1. Cosa sono i sistemi di programmazione ea quale classe di programmi appartengono?

2. Cosa è incluso nei sistemi di programmazione?

3. In quale linguaggio di programmazione sono stati creati i primi programmi?

4. In quali lingue sono divise le lingue procedurali?

5. Descrivi le lingue di basso livello.

6. Quale lingua è una lingua di basso livello?

7. Vantaggi delle lingue di basso livello.

8. Descrivi le lingue di alto livello.

9. Vantaggi delle lingue di alto livello.

10. Fornisci esempi di linguaggi di alto livello.

11. A cosa servono i traduttori?

12. Qual è la differenza tra un compilatore e un interprete?

13. Mancanze di interpretazione (come una sorta di traduttore).

14. Qual è il processo di compilazione di un programma?

15. Quali azioni vengono eseguite durante la compilazione?

16. Qual è la differenza tra un modulo di carico e un modulo oggetto?

17. Qual è la differenza tra programmazione procedurale e programmazione non procedurale?

18. Quali tipi di programmazione non sono procedurali
programmazione?

19. Caratteristica delle lingue dichiarative.

20. Descrivi brevemente i linguaggi di programmazione: Fortran, BASIC, Pascal, Cobol.

21. Descrivi brevemente i linguaggi di programmazione: Ada, C, C++, Delphi, Java.

22. Fornisci esempi di linguaggi orientati agli oggetti.

23. A quale classe di lingue appartiene il Lisp?

24. A quale classe di lingue appartiene la lingua Prolog?

Zalina 13 gennaio 2016 alle 15:42

Diversi linguaggi di programmazione e i loro ambiti di applicazione. Lezione a Yandex

  • blog aziendale Yandex,
  • Sviluppo del sito web ,
  • programmazione,
  • Programmazione industriale

Abbiamo deciso di dedicare il nostro primo post quest'anno a un argomento molto basilare, una conferenza su cui è stata tenuta allo Small ShAD. È frequentato da studenti delle scuole superiori interessati alla tecnologia, da qui la specificità della presentazione: la lezione sarà particolarmente interessante per coloro che stanno appena iniziando a programmare e stanno pensando a quale direzione sviluppare. Per loro, Yandex ha un corso "Introduzione alla programmazione (C++)", che può essere seguito sulla piattaforma Stepic.org.

Docente Mikhail Gustokashin - curatore dei programmi accademici presso Yandex, direttore del Center for Student Olympiads della Facoltà di Informatica dell'HSE. Mikhail ha preparato dozzine di vincitori e vincitori delle Olimpiadi della programmazione tutta russa.

La lezione racconta cosa sono i linguaggi di programmazione, come differiscono, come sono apparsi e quali sono i migliori e quali sono i peggiori. All'inizio parleremo un po' della storia delle lingue: come sono apparse, come le persone hanno iniziato a programmare, come si è sviluppato tutto, cosa sta succedendo ora. La seconda parte toccherà quali compiti per quale lingua è adatta, come "scegliere la tua lingua preferita e goderti la vita". Il docente parlerà anche un po' di come, secondo lui, imparare tutto questo e poi trovare un lavoro.

Come sempre, sotto il taglio c'è una trascrizione dettagliata della lezione in modo che tu possa navigare nel suo contenuto.

Storia dei linguaggi di programmazione

Cominciamo proprio dall'inizio. All'inizio i computer non avevano nemmeno le tastiere! Cioè, era tutto molto brutto: non avevano né una tastiera né uno schermo, avevano schede perforate (queste sono piccole cose con o senza buchi). Di conseguenza, o gli spilli erano stati spinti lì, o lì brillavano di luce. Se c'è un buco (o viceversa no), significava zero o uno. E i programmi a quel tempo venivano scritti usando codici macchina: ogni operazione in un computer (addizione, sottrazione, alcune operazioni più complesse) aveva una sorta di codice macchina. Le persone stesse hanno scelto questo codice dalla targa, tutti i tipi di indirizzi in memoria, lo hanno eliminato tutto con le mani e lo hanno inserito nel lettore - ed è stato tutto considerato. Certo, il lavoro di un programmatore probabilmente non era molto interessante allora - fare buchi - e con lo sviluppo della scienza e della tecnologia, ovviamente, hanno iniziato a inventare ogni sorta di cose più "interessanti". Ad esempio, assembler (Assembler), che ha già semplificato la vita.

Bene, come ha reso la vita più facile? Invece di ricordare che c'era una sorta di codice "magico" per il comando, sono stati usati tutti i tipi di parole simili all'inglese "umano" - alcuni add o mov - beh, e quindi sono stati elencati i registri o le aree di memoria, variabili con cui questi eseguire le operazioni. Ma è chiaro che questo, in generale, richiedeva anche uno sforzo mentale sufficientemente grande per tenere a mente in quale registro abbiamo cosa si trova, dove sono le variabili e cosa sta succedendo in generale. Perché è successo? Perché i computer erano "stupidi" e non capivano niente di più "intelligente". In effetti, ci vuole anche tempo e memoria per assemblare il codice macchina dall'assembler (a quel tempo, ovviamente, non ce n'era abbastanza).

A poco a poco, è diventato chiaro che era molto difficile sviluppare programmi così grandi e complessi. La produttività del programmatore in questi comandi era estremamente bassa - cioè scriveva diverse righe al giorno (significative) e ogni riga non faceva nulla di speciale - alcune semplici operazioni aritmetiche. E le persone volevano rendere le lingue molto più simili alla lingua umana, l'inglese in particolare, in modo che fosse più facile e conveniente scrivere programmi. E si parte!

Lingue antiche e morte

Una delle prime lingue fu il Fortran. A proposito, è stato battuto anche sulle schede perforate: c'erano speciali schede perforate per eliminare i programmi Fortran. Ma se ora prendi questo Fortran, secondo me, è anche tra i 50 e i 60 anni. è apparso - e prova a scriverci qualcosa, sarà molto spiacevole per te, te lo garantisco! Il moderno Fortran è ancora vivo, ma già abbastanza diverso da quello che era prima.

Altre lingue - ora scriverò una cosa, di cui probabilmente hai sentito parlare, ma solo in tutti i tipi di eventi in cui parlano della storia della programmazione - questo è COBOL. Era un linguaggio per scrivere applicazioni aziendali. Cosa sono le applicazioni aziendali? Alcune transazioni nelle banche, qualcos'altro, tutto questo è stato scritto in Cobol. Ovviamente non siamo molto popolari. Penso che troverai un programmatore Cobol a Mosca con grande difficoltà. E da qualche parte non a Mosca - con difficoltà ancora maggiori. Ma, sorprendentemente, anche 10 anni fa, più della metà di tutto il codice scritto dall'umanità era scritto in Cobol. E fino ad ora, una parte significativa di tutte le transazioni bancarie avviene con l'aiuto di programmi scritti su di esso (COBOL) e le persone ci scrivono ancora qualcosa.

Esiste anche una lingua “divertente”, si chiamava Algol (68a versione, che caratterizza l'anno della sua creazione). È un linguaggio algoritmico. In generale sapevano qualcosa lì, ma ora non siamo molto interessati a quello che possono fare. E su questo, la nostra escursione nell'antichità e nelle lingue relativamente inutilizzate può essere completata e possiamo passare a ciò che è ancora vivo (e vive attivamente).

Lingue antiche ma vive

Algol è stato inventato in Europa e Fortran è stato utilizzato principalmente negli Stati Uniti: non ci sono grandi differenze. Quale tendenza è visibile? All'inizio era tutto difficile e per scrivere bisognava essere quasi un ingegnere, un ingegnere elettrico, per capire dove si chiudevano i contatti e qualcos'altro per programmare. Anche allora era necessario sedersi con le foglie e contare la memoria, prendersene cura. E gradualmente tutto è diventato più semplice, più semplice, più semplice e ancora più facile per il programmatore: il meno possibile per una persona da pensare, per quanto possibile da fare automaticamente. Verso la fine di questo periodo (il docente indica Algol e Kobol), iniziano ad apparire lingue che, in un certo senso, sono “sopravvissute” fino ai giorni nostri.

DI BASE. Forse alcune persone ci scrivono ancora qualcosa, almeno ho visto che in alcune istituzioni insegnano in QBasic - una tale finestra blu dove è scritto "1989". In generale, vite "con potenza e principale"! È stato concepito come un linguaggio per non programmatori. A quel tempo il programmatore era una professione molto specializzata. E qui ti dicono: "Qui abbiamo un fantastico linguaggio di base e qualsiasi persona ragionevole prenderà e scriverà un programma in esso - è facile". Ancora una volta, quel BASIC e il BASIC moderno sono un'enorme differenza. Tutte queste righe numerate fino a 10, tutti i tipi di GOTO e altri orrori: non hanno più nulla a che fare con il BASIC moderno e persino hanno poco a che fare con il BASIC dell'89° anno.

Un'altra storia divertente è la lingua Pascal, ampiamente conosciuta negli ambienti universitari, principalmente in Russia e nei paesi dell'ex Unione Sovietica. È stato e continua ad essere usato sorprendentemente come lingua di insegnamento. Nel resto del mondo è meno comune, ma è anche vivo e vegeto. C'è una tale persona Wirth - qui è uno scienziato, un teorico. Ha partecipato alla discussione su Algol, non gli è piaciuto quello che è successo e ha inventato la sua lingua: Pascal. E poi l'azienda Borland (e prima ancora molte altre società - Apple in particolare era coinvolta) l'ha presa e ha rovinato tutto. Aveva una bella teoria, snella - "andrà tutto bene" - e l'hanno presa e l'hanno riempita con ciò di cui le persone hanno bisogno per lavorare. Beh, non è andata bene come avrebbe voluto.

E infine, . C è stato inventato dagli ingegneri. Se Pascal è stato inventato da uno scienziato, allora C è stato inventato da Kernighan e Ritchie, hanno lavorato come ingegneri alla Bell. Come è successo? A quel tempo, in queste lingue (il docente indica Fortran, COBOL, Algol), era impossibile scrivere qualcosa di sistemico. Che cos'è "sistemico"? Ad esempio, un sistema operativo, alcuni driver, qualcos'altro. Questi linguaggi erano pensati per i calcoli matematici, per i calcoli aziendali, per tutto. E tutto il resto è stato scritto in assembler. C'erano dei linguaggi, ora sono morti, cioè il linguaggio C non è apparso subito da Assembler, ma attraverso alcune cose intermedie.

Qual è il punto? A Kernighan e Ritchie piaceva giocare al giocattolo Asteroids: un'astronave sta volando e ci sono asteroidi, lui spara loro e cadono a pezzi. Avevano un server dove giocavano, ma c'erano molte persone lì e il giocattolo ha rallentato. E hanno scoperto da qualche parte nel loro ufficio che hanno una specie di computer che nessuno usa. Ma c'era un problema: era di un'architettura diversa e il gioco era scritto in assembler.

Lo hanno riscritto, ovviamente, hanno anche aggiunto alcune funzionalità su cui giocarci. Ma questo li ha portati all'idea che riscrivere ogni volta per una nuova architettura non è molto intelligente. E decisero di scrivere un linguaggio di alto livello che fosse adatto alla programmazione di sistema, cioè in cui fosse possibile gestire la memoria, in cui fosse possibile capire dove si trova qualcosa e come accedere a questi pezzi di memoria . E così è apparso il linguaggio C, che ha avuto un enorme impatto su tutto ciò che è seguito. Tutti loro (il docente indica Algol, Fortran e altre lingue menzionate) hanno avuto una grande influenza, ma C - giusto, sì ...

Di conseguenza, era la lingua principale in Unix, un sistema operativo che era ancora più popolare allora di quanto non lo sia ora. E intorno agli anni '80, la situazione era qualcosa del genere (il docente mostra in Basic, C e altre lingue citate). Supponiamo che tutto questo sia già lentamente morto con noi (il docente cancella la menzione di Assembler, Fortran e Algol) ... E negli anni '80 i computer sono diventati più piccoli, più intelligenti, più economici e la gente voleva ogni sorta di stranezza per poter vivi ancora meglio, per vivere ancora più divertente.

Lingue degli anni '80

Una delle prime stranezze è stata il linguaggio C++. Il linguaggio C ha un numero enorme di carenze (beh, solo un enorme): puoi fare tutto in esso, incluso spararti al piede, spararti al piede con la finzione, nell'altro piede, sparare con un piede dentro l'altro piede, in generale, qualunque cosa tu voglia fare. Ma allo stesso tempo, alcune cose architettoniche sono rese piuttosto difficili lì - anche in questo caso, come in Assembler, dobbiamo tenere traccia di dove siamo, quale e che tipo di memoria abbiamo allocato; è sempre lì che "scorre" da qualche parte questa memoria - cioè, abbiamo allocato, dimenticato di eliminare, cancellato la cosa sbagliata, esaurito la memoria, in generale - ha rastrellato molti problemi.

C++ è stato originariamente creato come un insieme di estensioni del linguaggio C che avrebbero facilitato lo sviluppo. A quel tempo, la programmazione orientata agli oggetti è diventata di moda e la gente ha deciso che tutto può essere descritto come una gerarchia, cioè hai una palla (astratta), ne eredi un pallone da calcio, una pallavolo, un'altra palla astratta. Allora era di moda che "ora scriviamo tutto sotto forma di una sorta di gerarchia, e tutto andrà bene, la vita migliorerà, tutto andrà bene e basta". C++ in un certo senso ha implementato questo approccio agli oggetti: non è stato il primo linguaggio di programmazione orientato agli oggetti, ma è diventato piuttosto popolare e tutti i tipi di funzionalità hanno cominciato ad apparire in esso. Allo stesso tempo, C ++ manteneva una compatibilità quasi completa (a quel tempo) con il linguaggio C, un programma scritto in C veniva compilato con successo come C ++ nel 99% dei casi e funzionava anche allo stesso modo. Questo aveva lo scopo di semplificare la migrazione da C a C++.

Oltre all'approccio a oggetti (in C++), la Standard Template Library (STL) è apparsa abbastanza rapidamente. Penso che a scuola, coloro che hanno ancora studiato Pascal hanno scoperto che, in primo luogo, non hai l'ordinamento integrato (nell'antico Borland Pascal blu, ora è già nelle versioni moderne) - c'è un esempio (fonte) di ordinamento , può essere copiato e incollato. Ma se vuoi ordinare gli interi qui, vuoi numeri reali qui, e qui vuoi stringhe che possono essere confrontate tra loro, devi scrivere tre diversi tipi che fanno esattamente la stessa cosa, hanno solo tipi di dati diversi. Questo non è molto buono e i modelli, che non sono apparsi immediatamente in C ++, hanno notevolmente facilitato questo problema. Cioè, avevi un programma astratto che ha ordinato con successo qualcosa che poteva essere confrontato tra loro.

Linguaggi di scripting degli anni '90

Ma il tempo non si è fermato, negli anni '80 sono successe molte cose interessanti. Ma da qualche parte intorno alla fine degli anni '80 e '90, i computer sono diventati così buoni che era già possibile fare cose molto strane e molto inefficienti. In particolare si trattava di linguaggi di scripting che non venivano compilati in codice macchina, ma interpretati. Anche il BASIC è stato interpretato in qualche momento, ma questi linguaggi di scripting erano principalmente destinati all'elaborazione di testi - ad esempio Perl, Python (allora non era molto famoso), PHP, Ruby - questi sono i linguaggi di scripting ​​che in una o in una certa misura, vivono ancora (sono riusciti a comparire tutti prima del 2000, anche molto prima).

Esaminiamole un po', perché queste sono cose specifiche e ora sono usate in molti posti. Qual è l'idea? Se non compiliamo, possiamo consentire molto di più. Ad esempio, un programma può guardare il suo codice e in qualche modo usarlo; sa cosa sta succedendo in lei e per questo puoi fare molte cose interessanti.

Perl è stato progettato per l'elaborazione di testi: a quei tempi c'era già così tanta memoria nei computer che potevi inserire del testo e fare qualcosa di utile con questo testo (ad esempio, contare le parole, cercarne alcune). Ma, secondo me, è stato progettato da persone un po' matte, perché c'è una tale battuta al riguardo: "Ogni set di caratteri scritto è un programma corretto in Perl". Secondo me, puoi solo scriverci sopra, non puoi leggerlo. Quando guardo il codice Perl e provo a capire qualcosa, non capisco niente. Forse se lo conoscessi meglio, capirei qualcosa, ma come ho sentito da quelle persone che ancora sanno come, dicono che è più facile riscrivere. Cioè, i programmi sono brevi e davvero più facili da riscrivere che capire cosa c'è e risolverlo.

In quel periodo, a metà degli anni '90, apparve Internet. All'inizio si trattava di posta, siti con HTML statico, ma la gente voleva aggiungere una sorta di dinamica lì, in modo che tutto accadesse in modo dinamico, si potessero compilare alcuni moduli, si potessero fare i libri degli ospiti, qualcos'altro. Di conseguenza, ciò ha richiesto una sorta di interazione, hanno escogitato un protocollo per il modo in cui interagisce e, soprattutto, la generazione di queste pagine statiche (condizionalmente) che verranno "sputate" all'utente in risposta alla sua richiesta.

In generale, nient'altro che Pearl in quel momento non si adattava. Scrivere in puro C o C++ handler era una cattiva idea. E in mancanza di uno migliore all'epoca (e abbastanza a lungo), Pearl era il linguaggio di riferimento per lo sviluppo web. Naturalmente, la scala non può essere paragonata a ciò che sta accadendo ora.

PHP è apparso come ... per caso. Una persona ha smesso abbastanza rapidamente di farlo: ha creato una specie di pagina personale, aveva una specie di libro degli ospiti, qualcos'altro, qualcosa del genere. E ha scritto una serie di alcune macro per Perl che sembravano C, perché sapeva come usare C, semplicemente perché era così conveniente per lui. E l'ho chiamata HomePage personale. Lo ha condiviso e ha detto: "Persone, guardate cosa ho scritto, tutto è molto più chiaro qui che su Perl e potete modificarlo". E alla gente è piaciuto.

Poi ha abbandonato la questione. In generale, di conseguenza, questo PHP ha iniziato a vivere e nel tempo è diventato molto più popolare di Perl. Ma questo suo "trauma alla nascita" (l'idea come set di macro per Pearl) ha giocato con lui uno scherzo piuttosto crudele. La lingua è strana. Cioè, si è sviluppato da solo, nessuno lo ha progettato, nessuno ha amministrato il processo di sviluppo (né l'azienda, né alcuna persona), ma c'erano molti gruppi, ognuno dei quali segava ciò che gli piaceva. Di conseguenza, lì le funzioni sono chiamate diversamente, non c'è nemmeno uno stile, tutto è da sottolineare, in generale, comunque, le impostazioni sono qua e là, e come funzionerà tutto questo non è molto chiaro. Ma puoi sederti e scrivere in PHP in due ore, perché lui la pensava così.

Python e Ruby: Ruby è meno popolare ora, Python è in qualche modo più "piallato", ne parliamo più tardi. È chiaro che a quei tempi si trattava (il docente indica Perl, Python, Ruby, PHP) linguaggi altamente specializzati per scopi altamente specializzati. Nel caso generale, nessuno ha scritto alcuna programmazione di sistema, nessuna logica di business su di loro in quel momento, e ora non lo fanno molto.

Lingue compilate degli anni '90

Andremo più o meno negli stessi orari, ma in una direzione diversa. A quel tempo, il C++ veniva utilizzato per quasi tutto ciò che doveva essere scritto non per il Web, non per l'elaborazione di testi, ma solo per applicazioni, per sistemi operativi, per giocattoli - in generale, per qualsiasi cosa. Ma il C++ è un linguaggio inquietante, davvero. Come mai? Perché, in primo luogo, ha ereditato tutti i problemi di C dovuti alla compatibilità con le versioni precedenti. Lì potresti ancora ucciderti in un milione di modi diversi, gli stessi che erano in C (naturalmente, in C ++ sono stati aggiunti nuovi modi). Allo stesso tempo, se scrivi tutto bene e correttamente, come previsto dagli autori di C ++, ovviamente era già impossibile ucciderti nei vecchi modi C-ish, e sembra che ci sia erano meno di loro. Tuttavia, aveva un proprio modello a oggetti molto strano. Dividere il programma in moduli, in pezzi, in qualche modo proveniva da C (se puoi scrivere include in C o C ++ - infatti, è stato concepito semplicemente come inserire il testo della libreria nel tuo programma, di conseguenza, quando scrivi un mucchio di include, hai tutto - se è "primitivo", come lo era all'inizio - tutto viene inserito in un file e poi ci vuole un tempo terribilmente lungo per essere compilato, perché va più volte. lo stesso Pascal, Virtovsky, è stato molto più premuroso a questo proposito, le versioni successive sono anche migliori.

In generale, C++ ha molte carenze. Le qualifiche di un programmatore dovevano essere elevate per poter scrivere in C++ e tali programmatori erano costosi (sia la formazione che qualcos'altro, cioè è difficile trovare programmatori sul mercato, devono pagare molto, beh, in generale, questa non è una cosa ... ). E i nostri computer contano sempre più velocemente, stanno diventando più economici, le persone acquistano nuovi computer per se stesse e vogliono più applicazioni, più giocattoli per i loro telefoni, in generale, più gioia.

È così che è nato Java. C'è anche una storia piuttosto divertente su come questa lingua ha preso il nome. Ci sono programmatori, bevono caffè tutto il tempo ea quel tempo era di moda bere il caffè, che cresceva sull'isola di Java. Il linguaggio è stato concepito come un linguaggio per dispositivi embedded, in particolare per una macchina da caffè. Così è nato il nome...
Che cosa in generale è iniziato con lei, cosa c'era di buono in lei e perché ha guadagnato una grande popolarità? In primo luogo, si sono sbarazzati dell'eredità di Sishnoi, completamente. Nessun suggerimento, tanto meno modi per spararti a una parte del corpo e rompere tutto. In secondo luogo, hanno introdotto idee molto più recenti in termini di modello a oggetti, ovvero C++ è apparso molto prima di Java e ha utilizzato un modello a oggetti più arcaico e "selvaggio". Ebbene, qui (il docente indica Java) allora era già più ponderato, e in teoria la gente pensava, applicava in pratica e rendeva tutto molto più interessante.

E infine, il terzo. I nostri programmi in Java sono stati assemblati non in codice macchina, ma in codice per una macchina virtuale. Cioè, avevi una macchina virtuale (VM) JVM - Java. I tuoi programmi sono stati assemblati in una sorta di rappresentazione intermedia e poi, con l'aiuto di questa macchina, sono stati già eseguiti. Cosa ha dato? In primo luogo, ha rallentato, in secondo luogo, ha mangiato la memoria con una forza terribile, in terzo luogo, era portatile ovunque (teoricamente) - persino su una caffettiera, persino su un macinacaffè, persino su un computer, persino su un telefono cellulare. Da un lato, questo va bene, cioè hai appena scritto l'implementazione di una macchina virtuale, quindi avvii i tuoi programmi Java ovunque. Ma, d'altra parte, è un peccato che ci fosse poca memoria sullo stesso telefono in quel momento, le prestazioni erano basse e tutto questo ha anche iniziato a smussare e rallentare.

Ma anche questa non è la cosa principale per cui è stata inventata la lingua in generale. Il linguaggio Java è stato inventato per ridurre i requisiti per le qualifiche dei programmatori. Cioè, i programmatori peggiori possono scrivere buoni programmi in Java, perché non ti consente di scrivere programmi cattivi - non ci sono mezzi per scrivere programmi male. Lì puoi solo scrivere buoni programmi. Bene, nella comprensione dei creatori della lingua.

Cioè, se in C, in C ++, in Python, su qualsiasi cosa possiamo generare una specie di terribile discarica di rifiuti dal nostro progetto, dove abbiamo tutto confuso, andando per ore e c'è qualcos'altro. In Java è anche possibile allevare un bidone della spazzatura, ma per questo è già necessario fare uno sforzo. Cioè, per impostazione predefinita, non risulta essere una "discarica", risultano altri problemi, che qualcosa è stato ereditato, ereditato lì - in generale, dieci non molto significativi risultano essere una riga significativa. Ma forse un programmatore così esperto può scrivere codice di qualità piuttosto alta.
Siamo quasi arrivati ​​alla fine. Per noi, la prossima cosa che è apparsa è .Net (dotnet), e in particolare ci interessa C# (quasi lo stesso [il docente indica Java], cioè ci sono differenze nei dettagli, se scegli tra di loro - vedi dove pagare più soldi).

E un'altra cosa: JavaScript. Non ha nulla a che fare con il linguaggio Java, è apparso nello stesso anno: la parola era di moda, hanno concesso in licenza l'uso del marchio.

Qual è la cosa più importante a cui prestare attenzione? (Il docente disegna frecce da C++ a Java, .Net, C#, JavaScript e PHP). Per scrivere un semplice programma in uno di questi linguaggi, e in molti altri - se conosci C++, generalmente non hai bisogno di sapere nient'altro - prendi e scrivi in ​​C++, e poi aggiungi dollari all'inizio , qualcos'altro fa le piccole cose e inizia a lavorare per te su qualsiasi cosa (il docente indica le lingue a cui sono state assegnate le frecce del C++). Cioè, sono estremamente simili in alcune cose semplici. Se stai risolvendo alcuni problemi scolastici, problemi educativi, qualcos'altro (non stai progettando un grande progetto: hai un file che legge i numeri, visualizza i numeri nella console, fa qualcos'altro), allora non c'è quasi alcuna differenza tra queste lingue . È chiaro che JavaScript e PHP sono specializzati, hanno tutto in modo leggermente diverso. E qui (il docente indica Java e C#) c'è davvero poca differenza.

Da allora sono apparse ogni sorta di altre cose interessanti, ma non è chiaro se vivranno o moriranno con successo. E adesso, per quali compiti lo usano?

Scelta di una lingua a seconda dell'attività

Supponiamo di dover affrontare il compito di scrivere un driver per una scheda video. Che lingua userai oggi? (Grida dal pubblico: Java!) Perché... Java è fantastico, ma perché non in Ruby o PHP? (Il docente parla sarcasticamente.)

programmazione di basso livello

Se stai scrivendo qualcosa di basso livello, C è la scelta migliore, ma ho sentito (ma non visto) che C++ è usato per questo. Ma ho poca fiducia in questo, perché in C puoi controllare chiaramente - dal momento che hai dato così tanti byte di memoria, significa che ce ne saranno così tanti. E in C++ (STL), come viene implementata una stringa? Bene, in qualche modo implementato. E alla fine, non sappiamo come e cosa succede lì, forse esauriremo la memoria sulla nostra scheda video o succederà qualcos'altro. Pertanto, C vive ancora e non muore, ci sono ancora tali compiti di programmazione del sistema: scrivere un sistema operativo, scrivere driver, scrivere qualcos'altro - C è ottimo per questo. Inoltre, ora stanno comparendo tutti i tipi di dispositivi (l'Internet delle cose promette che sta per arrivare) che vivono a batterie (e, ovviamente, ce ne saranno milioni, tutto sarà appeso a questa Internet delle cose) , devono essere molto economici e consumare pochissima elettricità. Di conseguenza, ci saranno 2 KB di memoria, un processore a 5 kHz e, ovviamente, non funzionerà per rovinare qualche tipo di macchina virtuale o linguaggio di scripting nel prossimo futuro, il che significa che dovrai scrivere qualcosa in c. E anche ora, ad esempio, i calcoli su una scheda video (OpenCL o qualche altra tecnologia) - non escogitano un nuovo linguaggio per scrivere programmi per loro - fanno C con alcune grandi restrizioni. Solo perché le persone sanno già come, perché imparare qualcosa di nuovo? Formalmente, questo è probabilmente anche, in un certo senso, C.

Programmazione web

Diciamo che vuoi scrivere un nuovo Facebook (social network). Su cosa lo scriverai? (Dal pubblico parlano di HTML e CSS.) HTML, CSS è design e vogliamo che sia possibile aggiungere foto, fare amicizia, lasciare commenti lì.

Per la parte dello script, ovvero cosa accadrà sul lato client, questo è JavaScript. Inoltre, a volte JavaScript viene generato in un'altra lingua e inviato (capita che lo script venga generato... perché a volte è più facile gestire alcune modifiche nella logica).

Sorprendentemente, è scritto in PHP - e Facebook e molti altri grandi progetti. Ovviamente, ho dovuto scrivere le mie cose in modo che funzionasse ancora bene, e non come era stato fatto, ma l'hanno fatto. In linea di principio, non importa in cosa scrivi, ma non consiglio Perl. Qui e ora, ovviamente, nessuno scrive nulla da zero per il web. Tutti scrivono una sorta di struttura o qualcos'altro. Negozio online? Abbiamo scaricato un framework per un negozio online: tutto qui, abbiamo scritto un negozio online.

Programmazione aziendale

Successivamente, vuoi scrivere una noiosa domanda bancaria. Oppure, ad esempio, hai qualcuno che vende sim card? Forse hai mai comprato un telefono o qualcosa del genere e ti hanno detto: "Ecco il sistema sospeso, non c'è niente che possiamo fare". Su cosa scriverai un'applicazione del genere? (Un grido dal pubblico su Python) Non puoi scrivere queste cose in Python, cosa sei?! Niente per gli affari dovrebbe essere scritto in Python. Come mai? Perché quando scrivi qualcosa in Python, non puoi trovare un numero significativo di bug nel processo di scrittura. Python è digitato dinamicamente in ogni modo possibile e, in generale, puoi nascondere un bug in modo tale che venga visualizzato in una situazione tale che non sarai nemmeno in grado di capire cosa hanno fatto lì questi utenti disonesti, che tutto rotto per te. Cioè, è meglio scrivere in Python per te, piccoli script: capisci cosa sta succedendo lì e cosa viene fatto. Bene, o qualcosa che non ti dispiace buttare via: vuoi lanciare qualcosa prima dei tuoi concorrenti, quindi cosa succede se si rompe ogni volta. Hai scritto in Python e basta: hai conquistato il mercato. E se scrivi qualcosa per molto tempo, ad esempio, una sorta di applicazione bancaria (in modo che approvi i prestiti, qualcos'altro), lo scrivi in ​​Java. Perché è una cosa seria lì, carte, denaro, documenti, qualcos'altro, ma non puoi rovinare così tanto che tutto si rompe, altrimenti le persone si offenderanno - i loro soldi sono andati via e non sono arrivati ​​da nessuna parte, perché hai in qualche momento la stringa si è trasformata in un numero o viceversa. Quindi, significa che prendi metodicamente e scrivi in ​​Java, scrivi ... Bene, o su .Net, in linea di principio si verificano anche situazioni del genere. Lì, ovviamente, puoi anche incontrare problemi, ma la probabilità che ciò sia leggermente inferiore.

Programmazione per l'esercito, l'industria aerospaziale

Ora immagina che abbiano deciso di mandarti sulla luna su un razzo. Cosa preferiresti per scrivere il codice che controlla i motori del razzo? Vediamo. Questo, probabilmente (il docente indica Perl, Python, PHP, Ruby), non ne vale la pena: rallenta, sta succedendo qualcos'altro, beh, in generale, non accetterei di volare su un razzo del genere. In C++? Ad essere onesti, nemmeno io lo farei, perché ci sono troppi modi per ucciderti in C++. Quando sei là fuori da qualche parte nello spazio, non va molto bene.

Forse in Java? Tutto sembra essere abbastanza affidabile lì e l'architettura è buona, nessun tipo selvaggio, nessun sovraccarico di memoria extra. Diciamo che è arrivato il momento più cruciale e il nostro Java ha deciso di raccogliere immondizia per noi. Dobbiamo atterrare, rallentare e lei dice "No, l'immondizia sta andando". In generale, neanche tanto.

Ad essere onesto, preferirei che questo programma fosse scritto in Pascal. Certo, non mi piace molto Pascal, ma in qualche modo in queste cose sarebbe molto bello.

Utilizzo di più linguaggi per lo sviluppo software contemporaneamente

Bene, cosa si dovrebbe dire delle lingue moderne in generale. Ora molti progetti non vivono in nessuna lingua, cioè alcuni di loro vivono in una lingua, alcuni in un'altra e altri ancora in una terza. Ad esempio, se hai un qualche tipo di applicazione web che elabora enormi quantità di informazioni, gli accessi ai dischi (nemmeno ai database, sono così enormi che anche un database già scritto lì non può nemmeno tirare) sono probabilmente scritti in alcuni quindi bassi -level C, per scrivere su disco molto velocemente e tutto il resto. Naturalmente non vale la pena scrivere l'intero progetto in C. Forse c'è una logica intermedia scritta in Java che chiama funzioni C per chiamate rapide. Ebbene, il frontend (quello che sta guardando l'utente), ovviamente, è già scritto su qualcosa, su alcuni script, su ciò che viene eseguito direttamente dal browser (JavaScript). E tutto questo convive e interagisce con successo.

Nello sviluppo di alcune applicazioni, anche di grandi dimensioni, a volte le persone fanno cosa? Lo prendono e scrivono un prototipo in Python (come funzionerà), lo abbozzano, pensano a una sorta di architettura. Scriverci sopra è davvero molto veloce: hanno lanciato un prototipo, lo hanno sperimentato e hanno detto: “Wow! È così fico! E completamente riscritto. Sembrerebbe che abbiano svolto il lavoro due volte, il che ha richiesto il doppio del tempo (beh, uno e mezzo). Ma no! Spesso si scopre che in questo modo non è male, perché se scrivi subito qualcosa, ad esempio in Java, e poi decidi: "No, facciamo il refactoring, cambiamo completamente l'architettura e tutto il resto", allora spenderai 10 volte più tempo. Anche queste cose esistono e vivono.

Condizioni per il successo di qualsiasi linguaggio di programmazione

Ora parliamo del motivo per cui alcune lingue di bell'aspetto non sono sopravvissute, o vivono in uno spazio molto limitato. Quando Wirth ha visto cosa avevano fatto le cattive compagnie Apple, Borland e tutto ciò che avevano fatto con il suo Pascal, ha escogitato un linguaggio ancora migliore: Oberon. Era semplicemente selvaggiamente minimalista, cioè c'erano pochissimi comandi (stringhe? Perché abbiamo bisogno di stringhe? Creeremo una serie di caratteri!). Bene, qualcosa non gli andava bene, nella misura in cui poteva andare.

Un'altra cosa. L'esercito americano ha chiesto loro di sviluppare un linguaggio interessante in cui tutto funziona e tutto può essere scritto. Il risultato è stato un linguaggio Ada piuttosto mostruoso, in cui, tuttavia, qualcosa è ancora scritto, ma ancora una volta - solo per i militari.

Qual è il problema? Perché alcuni linguaggi come Python, che nessuna azienda supportava all'inizio, hanno preso il controllo del mercato. PHP, anch'esso mal progettato, ha anche preso il controllo del mercato (la maggior parte) da solo. E ogni sorta di miliardi di dollari sono stati investiti (il docente indica Ada) e non sono andati da nessuna parte, non è successo niente. Con cosa è collegato? Questo perché non esiste alcuna infrastruttura attorno a queste lingue. Cioè, il linguaggio può essere ottimo, ma finché non c'è documentazione, finché non c'è una comunità in grado di rispondere alle domande (su Stack Overflow) e, infine, cosa più importante, finché non ci sono grandi numero di biblioteche, la lingua non spara. Cioè, tu, ad esempio, volevi scrivere un sito Web su Oberon. E che cos'è, perché no? E iniziano i guai ... Non puoi configurare il tuo server web su Oberon per testarlo alla leggera, non puoi collegare nessuna libreria, perché non sono su Oberon. E tutto questo viene fatto attraverso una specie di stampelle, le forze se ne vanno e in generale sputi e scrivi il tuo sito in C puro invece che in Oberon. E quelle lingue che sono in grado di utilizzare librerie di altre lingue vivono bene. Lo stesso Python in quei posti dove rallenta. Bene, in generale, tutti i tipi di cose standard come l'ordinamento e qualcos'altro sono scritti in C, e lui (Python) sa come interagire con loro.

Java ha anche un'interfaccia nativa Java. Questo è essenzialmente C, cioè lì (secondo me vogliono sempre bannare, ma sembra che non l'abbiano ancora bannato) questi linguaggi possono interagire con le librerie esistenti (principalmente Cs). E per questo prendono e lavorano. Capisci l'idea che sto cercando di trasmetterti, vero? Non scrivere in quelle lingue che non sanno collegare la libreria C. Bene, se vuoi usare qualcosa di interessante. Bene, e gradualmente (lingue) acquisiscono una sorta di infrastruttura. E vivono bene.

Linguaggio di programmazione e orientamento professionale

Ora parliamo di come capire cosa vuoi nella vita. Cosa succede dalle cose belle? Puoi fare un po' di programmazione di sistema, giusto? È fantastico contare questi byte lì, vuoi lanciare quadricotteri, una specie di fotocamera, fare qualcos'altro. Allora C è probabilmente la tua scelta.

Se vuoi scrivere, forse non le applicazioni più interessanti della vita, ma è bello per te progettarle, pensarci e guadagnare un sacco di soldi sedendoti e annoiandoti per la maggior parte del tempo (devi pagare per questo se sei bravo a mancarti), eccoli qui - Java, .Net. Vai a lavorare in qualche banca, scrivi, vai a lavorare alle nove in camicia bianca, prendi un buon stipendio e scrivi secondo i consigli dei migliori sviluppatori Java, .Net pecore e tutto il resto...

Se vuoi scrivere alcune applicazioni, alcuni browser, alcuni giocattoli, qualcos'altro, allora C++ è fantastico. Se vuoi scrivere siti web, allora eccoli qui, i linguaggi che preferisci (il docente mostra Perl, Python, PHP, Ruby), non c'è molta differenza. L'unica cosa è che PHP morirà prima di Python, quindi se sei troppo pigro per imparare cose nuove, allora impara Python. Non noterai una grande differenza, ma durerai più a lungo.

Anche cosa succede a Ruby non è chiaro. Bene, puoi anche PHP, se l'hai già imparato, dato che sono così semplici che non ci vuole molto tempo per impararli di nuovo lì.

E infine, c'è un'altra area di applicazione dei linguaggi di programmazione: questo è quando un non programmatore li usa. Diciamo che sei un matematico, fisico, chimico, analista, chiunque, e devi calcolare rapidamente qualcosa, analizzare alcuni dati (per i biologi, ad esempio, quante volpi vivono sulle Isole Commander). Puoi inserire tutto questo in una tabella in Excel o analizzarlo con qualcosa. Python è adatto anche per questo, può funzionare con il testo e le librerie sono piene di tutti i tipi, statistiche e tutto il resto. Se vuoi fare una sorta di Machine Learning, elaborare alcuni dati, prevedere, allora Python lo fa anche il più veloce ora. È vero, va notato che i compiti sono molto diversi. Ad esempio, se vuoi fare trading in borsa istantaneamente in condizioni in cui le quotazioni cambiano continuamente, non importa quanto sia interessante il Machine Learning che scrivi in ​​Python, le persone che lo hanno scritto in qualcosa di più veloce avranno il tempo di acquistare tutto prima, finché non verrai contato, anche se i loro algoritmi sono peggiori. Pertanto, anche queste attività di apprendimento automatico (alcune di esse) richiedono prestazioni elevate (ed estremamente elevate) e, di conseguenza, altri linguaggi.

L'unico modo per capire cosa vuoi è provare di tutto. Ora dirò come una delle visioni di come puoi provare tutto. Come diventare un programmatore e felice? Così. Iniziamo da zero. Qui stai studiando matematica, lingua russa e altre materie obbligatorie e facoltative a scuola e le tue conoscenze nel campo della programmazione si riflettono sulla lavagna (il docente indica una lavagna vuota) al momento. E vuoi diventare una persona felice, fare ciò che ami, guadagnare molti soldi e non negarti nulla ed essere felice.

Uno dei modi per raggiungere questo obiettivo. Ci sono, naturalmente, ogni sorta di storie stimolanti su persone che non hanno frequentato affatto le università, o che hanno abbandonato gli studi e sono diventate miliardarie, proprietari di aziende e così via. Ma va notato che la maggior parte delle persone che potrebbero non essere diventate miliardarie, ma vivono anche bene, a un certo punto si sono laureate all'università.

Qual è la nostra situazione con l'ingresso all'università (ora studi a scuola)? Mentre sei a scuola, devi capire che il prossimo passo è iscriverti e prendertene cura. Supera l'esame o vinci le Olimpiadi. All'esame, puoi usare Pascal, C++ (incluso il C puro), Python (non li menzionerò ulteriormente). Alle Olimpiadi - lo stesso Pascal, lo stesso C ++, lo stesso Python (parleremo dei suoi problemi ora) e, molto spesso, c'è Java. Tutto il resto succede a seconda delle Olimpiadi, ma non è questo il punto.

Che aspetto ha il programma per la distribuzione delle lingue alle Olimpiadi di tutta la Russia in informatica? Le persone che partecipano all'Olimpiade tutta russa e più cool, su cosa scrivono? Sembra così (qui significa Pascal, e qui è circa 2000, e qui è circa zero, qui è C++, e qui è 2015).

Nel 2000 quasi nessuno scriveva C++. Sono passati 15 anni e quasi nessuno scrive in Pascal, nonostante Pascal sia moderno. È un linguaggio che può fare più o meno la stessa cosa. È solo che tutti sono diventati troppo pigri per imparare questo, con ogni sorta di nuove tendenze, e tutti continuano a scrivere in Borland Pascal, che, ovviamente, non può fare nulla. In C++, le persone scrivono alcuni algoritmi (STL) per ordinare: fantastico, hanno scritto sort() e il gioco è fatto. Su Pascal, sul solito, sul vecchio: questo è un problema. Hanno scritto qualche set (necessario) - eccellente, l'hanno scritto in C ++, di nuovo in Pascal puro tormento. Sui nuovi Pascal, ovviamente, puoi farlo, ma in generale costano denaro. Potresti non averlo notato, ma lo è.

C'è anche Java, ma ci sono molte lettere in Java. È per grandi progetti, ma per piccoli programmi occasionali risulta piuttosto negativo, perché ci sono molte lettere in più. Ma anche alcune persone scrivono, puoi imparare a scriverci sopra. Ma non è disponibile presso l'USE e l'USE dovrà comunque essere preso per la maggior parte.

Qual è il migliore per l'esame? Per l'esame, è meglio (se non sai niente e non ti insegnano niente a scuola) imparare Python. Alcune delle domande d'esame sono ben risolte su di esso. Alle Olimpiadi, in generale, si scopre che C++ è (usato), perché Python è molto lento, non tutto è risolto su di esso.

Quindi hai imparato qualche piccolo sottoinsieme della lingua e alcuni algoritmi (forse) e hai risolto molti problemi per ottenere un diploma dalle tue Olimpiadi e andare all'università per ottenere un'istruzione superiore.

Parlerò ora di come costruiamo il corso all'HSE, in quale ordine vengono insegnate le lingue, come vengono studiate in matematica applicata e informatica della Facoltà di scienze applicate, cosa che stiamo facendo con Yandex. Nel primo semestre - Python (non per intero, su come dovrebbe essere insegnato a scuola) e C ++ (già più ampio, molto più ampio di quello che di solito viene insegnato nelle scuole). Diciamo subito per non spaventarti, se all'improvviso hai voglia di farlo, dici: “Cosa, so già tutto questo, perché dovrei andare da qualche parte a studiare? Preferirei andare da qualche altra parte". Per chi sa già programmare bene, c'è l'occasione per passare subito allo studio degli algoritmi, e in una preparazione piuttosto teorica. Non li guardiamo ora, questo (indica la lavagna) è per chi programma mediamente o per niente.

Il primo semestre ti insegna le basi di Python, solo così le persone possono imparare a programmare e così nessuno si offenda troppo. Python viene insegnato raramente nelle scuole, per lo più le persone hanno conoscenza di Pascal o C++. In fondo anche Pascal, se è una scuola di massa. Bene, in modo che nessuno si offenda, tutti stanno imparando una nuova lingua (come se fossero alla pari). E C++, semplicemente perché da C++ puoi andare ovunque.

Poi arriva il corso "Algoritmi" e un progetto di corso separato. Algoritmi classici con implementazione. Non che in teoria abbiamo preso qualcosa, calcolato la complessità. Alla lezione abbiamo preso, calcolato la complessità, al seminario abbiamo preso, implementato l'algoritmo. Un progetto sono gli studenti che fanno qualcosa di finito. Ad esempio, uno dei progetti era: calcolare ... Diciamo che hai molti appartamenti a Mosca e capisci: “Oh, ho molte cose in più, ne affitterò uno. E hanno fissato un prezzo, e nessuno vuole affittare un appartamento da te - probabilmente troppo costoso. Oppure hanno messo un prezzo, te l'hanno subito tolto e tu pensi: "Oh, probabilmente l'ho passato a buon mercato" - e anche tu sei arrabbiato. Cioè, era necessario calcolare quanto costa affittare un appartamento? Tu guidi nei dati - costruisce una stima per te. Un sito del genere che consisteva in diverse cose: prendere frasi, analizzare, applicare una sorta di algoritmo di apprendimento automatico (probabilmente) semplice e creare una bella faccia web in cui puoi scegliere qualcosa, guidare qualcosa, alcuni metri, un certo numero di stanze, numero di saune, numero di jacuzzi nel tuo appartamento e stima approssimativamente il costo. Cioè, una cosa finita, non molto complicata. Qui significa (il docente indica un corso sugli algoritmi) un C++ così vigoroso, con I/O di console. Bene, e qui (il docente indica la scritta “progetto”) qualcosa sotto la guida di un mentore, forse con database, forse con analisi del testo e qualcos'altro.
Poi arriva il terzo semestre - un corso chiamato "Sistemi informatici". C'è un bel po' di assembler da capire (pochissimo) e poi, qualcosa di simile al C puro e all'interazione con i sistemi operativi, la programmazione di sistema in sostanza. E il progetto per il seminario è anche qualcosa sull'argomento di tutti i tipi di interazioni di rete, di livello piuttosto basso: sviluppa qualche utilità, ad esempio rsync (sincronizzazione, probabilmente lo sai. In C puro, più o meno, scrivi un analogo di rsync, che avrai sulle cartelle di sincronizzazione di rete con tutti gli accessi ai file e così via).

E infine, il quarto. Non so nemmeno come chiamarlo, è un tale miscuglio di tecnologie necessarie per un vero sviluppo, come lo sviluppo web. Cioè, questa è l'applicazione pratica dei database, ancora una volta qualcosa di simile a quanto fatto nel progetto (il docente mostra 2 corsi sul progetto), ma già più approfondito. Cioè già cose più o meno concrete, programmazione pratica. Parallelamente a questo, c'è una teoria, beh, qui stanno ancora facendo scienza.

E dopo due corsi, le persone si disperdono per fare ciò che gli interessa, perché questa cosa copre abbastanza ampiamente queste basi della programmazione, e in questo momento le persone capiscono già che non vogliono in nessun caso avere a che fare con i sistemi informatici (ad esempio , non amavano la programmazione di sistema), ma vogliono affrontare alcuni algoritmi teorici, la difficoltà di contare, inventare cose nuove, distribuite o altro. O, al contrario, pensano di non avere molto qui ( il docente indica la linea del primo corso con Python e C++) è andato, poi ( il docente indica la linea del terzo corso, con programmazione di sistema) - come non ti piace, contare i byte e impostare tutti i tipi di restrizioni di lettura-scrittura, creare flussi, thread e qualcos'altro. E in accordo con questo, le persone scelgono una direzione e studiano. Cioè, in linea di principio, in modo da non sviluppare la "sindrome dell'anatroccolo" - sei stato il primo a vedere il tuo Pascal e ora dici "Pascal è forza"; o più avanzato - hai visto C ++ e hai iniziato a parlare di tutti che C ++ è la forza e tutto il resto non è molto buono lì.

Qui devi guardarlo in modo più ampio (il docente indica l'elenco dei corsi sulla lavagna) in modo più ampio: questo è uno dei metodi scelti, in particolare all'HSE (è apparso di recente, quindi è abbastanza moderno) . Ci sono altri modi per incontrarsi. Altre buone università hanno un ordine leggermente diverso e accenti diversi. Ma cercano anche di far conoscere alle persone tutto ciò che hanno.

Come trovare lavoro come programmatore

Sei ( docente indica l'elenco dei corsi) ha fatto tutto, ha imparato all'università, ha fatto qualcosa di più produttivo per altri due anni e devi andare a lavorare. Come scegli qualcosa con cui lavorare? In primo luogo, hai imparato tutto, sei andato in profondità da qualche parte e sai già cosa ami. Devi scegliere quello che ti piace in modo naturale. Perché se ami, investirai i tuoi sforzi, avrai motivazione e in generale andrà tutto bene. Perché non si tratta solo di denaro, si tratta di renderlo interessante e piacevole per te. Bene, e se vuoi entrare in una bella compagnia, trova un lavoro. Che tipo di persona mi piacerebbe vedere personalmente? Diciamo che un centinaio di studenti vengono da me - devo prenderne due per lavorare o uno. Perché vengono, non capisco affatto chi sono, cosa sono, come sono? Nella migliore delle ipotesi mi mostreranno il diploma che hanno ricevuto all'università e io dirò: “Wow! Questo è un bel diploma, ma non è così figo! E potrei sbagliarmi, comunque. Forse la persona aveva molto tempo libero e ha imparato molto meglio.

Cosa sarebbe fantastico? Innanzitutto, alcuni progetti open source che hai scritto dall'inizio alla fine. Preferibilmente, se sto realizzando una sorta di infrastruttura in modo che i dati vengano letti rapidamente, o qualcos'altro, allora, ovviamente, sarei interessato a scrivere qualcosa di open source per me. Non hanno creato una sorta di sito Web, ma qualcosa sull'argomento. Perché questo è interessante per me? Posso guardare il tuo codice, posso vedere quanto spesso ti impegni, posso vedere come hai reagito ai bug degli utenti, ai bug degli sviluppatori che lo usano - tutto è registrato, guardo tutto e penso: "Wow, questo bug ha è stato chiuso per due anni, poi hai risposto in modo scortese all'utente, c'è qualcos'altro - non lo prendo. Quindi questo è il tuo progetto personale.

Quindi, cos'altro sarebbe bello? Mi piacerebbe vedere come hai fatto il lavoro di squadra. Cioè, vieni da me per un colloquio e dici: "Io e i ragazzi dell'università abbiamo annaffiato una buona domanda. Lì ho creato un database, lì hanno creato una specie di applicazione mobile e c'era anche un ragazzo che lavorava lì, una ragazza designer, un ragazzo del supporto tecnico. Eravamo in cinque e abbiamo realizzato un bel progetto". Bene, guardo qual è veramente il tuo progetto, dico: "Qual è il tuo?" Guardo di nuovo il codice e capisco che sai come lavorare in una squadra con le persone.

Un programmatore non è quello che sta da solo (un tale indie) in garage, da qualche parte con le luci spente, non parla con nessuno, si fa crescere la barba e scrive. Tuttavia, c'è una sorta di interazione con le persone. Con un capo, per esempio, che a volte può imprecare contro di te (i capi sono così, non sempre gentili). E vedo che sai come lavorare con le persone e mi rende felice se hai una specie di buona squadra. Anche se non va bene, è meglio di niente.

Cos'altro mi piacerebbe personalmente? Se ti sei mostrato in grandi progetti. Ad esempio, hai commesso qualcosa nel kernel Linux, se sei nella programmazione di sistema, hai corretto alcuni bug. Cioè, hanno dimostrato che puoi leggere il codice di qualcun altro e sapere come apportarvi alcune modifiche. Guardo: "Oh, davvero, hai scoperto qualcosa di complicato e hai corretto alcuni bug!" E sto iniziando a divertirmi davvero. Perché ho... beh, non lo so... quindi il mio programmatore si è licenziato perché i suoi concorrenti gli hanno offerto uno stipendio più alto, e ho urgente bisogno di qualcuno che metta sotto controllo il suo posto - tu. Sembra che tu abbia scritto solo da zero e non sai leggere e modificare il codice di qualcun altro e mi arrabbio.

E infine, a seconda della posizione specifica, ci sono altre cose diverse. Se stai facendo domanda per un lavoro come analista, vorrei che risolvessi i problemi di analisi dei dati su Kaggle. Se trovi un lavoro in alcune cose algoritmiche, vorrei che facessi alcuni algoritmi nella programmazione sportiva. E infine, se hai pensato al mestiere, leggi come vanno le interviste, hai visto che lì alcune persone esprimono grande insoddisfazione: “Sono venuto e mi chiedono qual è il mio hobby. Mi siedo come un gufo e non rispondo perché non ho un hobby", e pensano che le risorse umane lo facciano. In effetti, stanno cercando di capire quanto sei amichevole e adeguato. Se sei ostile e inadeguato, non importa quanto geniale e maniaco del lavoro tu sia, un bravo specialista con una grande conoscenza, sarà difficile per il team lavorare con te e non puoi portare a termine il progetto da solo. Inoltre, anche se lo tiri fuori, puoi immaginare quale onere sta affrontando l'azienda. E cosa verrai domani e dirai: "Aumenta il mio stipendio di 10 volte, altrimenti ti lascio". Naturalmente, le aziende non vogliono entrare in una situazione del genere. Pertanto, coltivare l'adeguatezza e la buona volontà in se stessi è importante (almeno) quanto sviluppare alcune abilità professionali.

Riassumendo, cosa si può dire? Quali lingue sono buone e quali cattive? Ebbene, all'interno di qualche gruppo di linguaggi, ad esempio tra Ruby, Python e PHP, cosa scegliere? Naturalmente, la risposta corretta è Python, ma in realtà la differenza tra loro è nel numero di bug consentiti, nella quantità di qualcos'altro: 5%, beh, forse 10%. Cioè, se hai già un progetto finito scritto in PHP, nessuno sano di mente dirà: "Riscriviamo tutto in Python". Diranno: "Assumiamo più sviluppatori PHP e continuiamo a scrivere in PHP". Ok, è una buona scelta. Naturalmente, se improvvisamente inizi a scrivere un qualche tipo di progetto, allora potrebbe essere saggio scegliere Python ora. Anche se dipende anche. Forse hai molti sviluppatori PHP economici sul mercato e quelli Python sono costosi e pensi: "Sì, la tecnologia è più interessante, ma risparmierò denaro sugli sviluppatori già pronti". E va tutto bene, vieni già a lavorare lì.
Come scegliere tra Java e C++? Sì, accade esattamente la stessa cosa. Penso che quando deciderai in quale lingua iniziare un nuovo grande progetto, acquisirai conoscenze nella tua area professionale e sarai in grado di fare la scelta giusta. In questo momento non devi ancora fare quella scelta, quindi ti consiglio di fare ciò che ti piace.

Le basi, come ho detto, le basi stesse della programmazione (cos'è una funzione, cosa sono se, per, array, qualcos'altro) possono essere apprese più o meno in qualsiasi linguaggio. Ad esempio, in C ++, poiché molte cose sono simili ad esso e le specifiche in esso (a questo livello) sono le lettere meno necessarie e meno inutili da scrivere. Bene, allora, quando imparerai alcune cose architettoniche complesse, imparerai e non devi preoccuparti molto di questo. Cioè, la cosa principale è provare, cercare quello che ti piace, e quando ti rendi conto che sono già le 4 del mattino e sei seduto e scrivi per divertimento, perché ti piace, probabilmente è chiaro in questo momento in cui hai trovato il tuo .

Qualsiasi persona che decida di padroneggiare le basi del processo di creazione di programmi per computer si chiede quali sono i linguaggi di programmazione più popolari oggi e quali sono i migliori da imparare. E se è molto facile rispondere alla prima domanda, lo studente stesso dovrà cercare la risposta alla seconda, in base ai suoi piani e alle sue esigenze.

Diamo una rapida occhiata ai linguaggi di programmazione più popolari in modo da poter scegliere quello che ti piace e iniziare ad impararlo.

programmazione?

Prima di smontare i principali linguaggi di programmazione e descriverli, è necessario smontare il concept stesso.

Un linguaggio di programmazione è un sistema di segni formale utilizzato per scrivere programmi per computer. Come ogni altra lingua, ha le sue regole lessicali, semantiche e sintattiche.

Assegna linguaggi di basso e alto livello di programmazione. Ad oggi, quest'ultimo è principalmente utilizzato.

Linguaggi di programmazione di alto e basso livello

Un linguaggio di programmazione di basso livello ha una struttura vicina alla struttura, in questo caso i comandi sono indicati non con zeri e uno, ma con l'ausilio della notazione mnemonica. Il linguaggio di programmazione low più conosciuto è il linguaggio assembly.

Lavorare con una qualsiasi delle lingue richiede qualifiche elevate, la comprensione, inoltre, la scrittura di programmi richiede molto tempo. Allo stesso tempo, con l'aiuto di quelli bassi, puoi creare programmi piccoli ma allo stesso tempo efficaci. Si sconsiglia ai programmatori principianti di iniziare a conoscerli.

I linguaggi di programmazione di alto livello sono caratterizzati dalla presenza di strutture semantiche per la descrizione delle operazioni. Il loro studio richiede molto tempo e la loro applicazione nella pratica richiede attenzione e comprensione delle strutture e delle regole di base della sintassi e del vocabolario. Ma allo stesso tempo, la conoscenza di linguaggi di alto livello permette di realizzare progetti grandi, colorati e multifunzionali in tempi record.

Il livello alto include Pascal, Java, C, C++, C#, Delphi e molti altri. Sono usati per scrivere software e programmi applicativi.

I linguaggi di programmazione più diffusi

Quali sono i linguaggi di programmazione più diffusi oggi?

Negli ultimi anni, Java, C, C++, Python, C#, che sono tra i principali linguaggi di programmazione, sono considerati i più popolari e richiesti. Costituiscono la base dei programmi moderni e vengono utilizzati quando si scrivono progetti di grandi dimensioni. Più del 70% dei programmatori lavora con questi linguaggi. Si prevede che nei prossimi 10 anni saranno ancora nella stessa domanda di oggi.

Ruby, PHP, JavaScript non sono considerati meno popolari. La maggior parte degli esperti si concentra su di loro.

In generale, indipendentemente dalla popolarità, qualsiasi specialista più o meno che si rispetti deve conoscere almeno più lingue di diverso livello. Ciò è dovuto al fatto che la maggior parte dei grandi progetti sono sviluppati in lingue diverse. Ad esempio, alcuni moduli sono scritti in C, altri sono sviluppati in Java e altri ancora sono scritti in Delphi.

C, C++ e C#

Cominciamo con la famiglia C.

Il linguaggio C viene compilato e sviluppato negli anni '70. Sulla sua base, sono stati successivamente creati linguaggi come C ++ e C #, Java.

C++ è un linguaggio potente, progettato per creare sia utilità e driver di basso livello, sia applicazioni e pacchetti software davvero impressionanti.

C# è un moderno linguaggio orientato agli oggetti basato su C e C++. Ha un sistema di tipo sicuro. Una delle sue caratteristiche distintive è che è anche molto simile a un altro linguaggio di programmazione popolare: Java.

Uno degli svantaggi del linguaggio è che consente di creare applicazioni solo per il sistema operativo Windows e, inoltre, è molto pesante, il che significa che i programmi in esso scritti occupano molto spazio.

Si può notare che per molti versi C, C++ e C# sono linguaggi di programmazione per principianti. Dopo averli padroneggiati, puoi essere certo che l'apprendimento di una nuova lingua richiederà un minimo di tempo.

Puoi conoscerli e scrivere le tue prime applicazioni in un ambiente speciale Borland o Visual Studio.

JavaScript

JavaScript è un linguaggio con capacità orientate agli oggetti. Sviluppato nel 1996 e oggi uno dei più popolari. Il linguaggio è utilizzato principalmente negli script web e funziona nei principali browser come Internet Explorer, Firefox, Opera. È anche strettamente correlato a HTML e CSS, quindi prima di iniziare ad impararlo, devi padroneggiare le basi di questi linguaggi.

Vale la pena notare che, nonostante la somiglianza nel nome, JavaScript e Java sono due linguaggi completamente diversi.

Questo linguaggio è adatto a coloro che sono concentrati sulla creazione di browser e script, applicazioni e componenti aggiuntivi. Se hai intenzione di creare i tuoi siti, devi anche conoscerlo meglio.

Giava

Considerando i linguaggi di programmazione più diffusi, non si può non citare Java. È un linguaggio di programmazione orientato agli oggetti in uso dal 1995. È molto leggero e funziona su qualsiasi macchina Java di qualsiasi architettura. Viene utilizzato per sviluppare applicazioni per Android e iOS.

Pitone

Python: il cui compito principale è aumentare la produttività dello sviluppatore, rendere il codice più leggibile. Ha un piccolo elenco di costrutti di sintassi e una libreria standard di funzioni davvero impressionante. Lo sviluppo della lingua è iniziato negli anni '90 e continua ancora oggi. Viene utilizzato per sviluppare vari progetti, estensioni e integrazioni di applicazioni sviluppate in precedenza.

Le basi del linguaggio Python possono essere apprese sia come inizio per la programmazione che come secondo linguaggio aggiuntivo.

rubino

Ruby è un linguaggio di programmazione di alto livello che include parti di Perl, Smalltalk, Eiffel, Ada e Lisp. Usato dal 1995. I principali vantaggi della lingua sono la sua semplicità e flessibilità. Adatto sia per la scrittura di piccole applicazioni che per lo sviluppo di programmi seri.

linguaggio PHP

PHP è un linguaggio di scripting abbastanza popolare progettato per la creazione di applicazioni web. Molto spesso, è anche incluso nell'elenco dei "Lingue di programmazione per principianti" e consigliato per lo studio.

Con esso, puoi creare applicazioni web di alta qualità in brevissimo tempo. La lingua ha una struttura semplice e comprensibile, che ti permette di impararla in pochi giorni.

Conclusione

Abbiamo esaminato i linguaggi di programmazione più popolari, il cui studio ti aiuterà a creare con successo i tuoi progetti in futuro e guadagnare denaro come programmatore. Non c'è consenso su quale lingua studiare, ma allo stesso tempo, gli esperti notano che è auspicabile conoscere diversi linguaggi di programmazione, poiché ciò amplierà ulteriormente il campo di attività e faciliterà il lavoro su vari progetti di gruppo.

La programmazione è un'intera scienza che ti permette di creare programmi per computer. Include un numero enorme di diverse operazioni e algoritmi che formano un unico linguaggio di programmazione. Allora, cos'è e quali sono i linguaggi di programmazione? L'articolo fornisce risposte, nonché un elenco generale dei linguaggi di programmazione.

La storia dell'emergere e del cambiamento dei linguaggi di programmazione dovrebbe essere studiata insieme alla storia dello sviluppo della tecnologia informatica, perché questi concetti sono direttamente correlati. Senza linguaggi di programmazione, sarebbe impossibile creare qualsiasi programma per il funzionamento di un computer, il che significa che la creazione di computer diventerebbe un esercizio senza senso.

Il primo linguaggio macchina è stato inventato nel 1941 da Konrad Zuse, inventore del motore analitico. Poco dopo, nel 1943, Howard Aiken creò la macchina Mark-1, in grado di leggere istruzioni a livello di codice macchina.

Negli anni '50 c'era una domanda attiva per lo sviluppo di software e il linguaggio macchina non poteva sopportare grandi quantità di codice, quindi è stato creato un nuovo modo di comunicare con i computer. "Assembler" è il primo linguaggio mnemonico a sostituire le istruzioni macchina. Nel corso degli anni, l'elenco dei linguaggi di programmazione è solo in aumento, perché la portata della tecnologia informatica sta diventando più ampia.

Classificazione dei linguaggi di programmazione

Al momento ci sono più di 300 linguaggi di programmazione. Ognuno di loro ha le sue caratteristiche ed è adatto per un compito specifico. Tutti i linguaggi di programmazione possono essere suddivisi in diversi gruppi:

  • Orientato all'aspetto (l'idea principale è la separazione delle funzionalità per aumentare l'efficienza dei moduli del programma).
  • Strutturale (basato sull'idea di creare una struttura gerarchica dei singoli blocchi del programma).
  • Logico (basato sulla teoria dell'apparato di logica matematica e regole di risoluzione).
  • Orientato agli oggetti (in tale programmazione non vengono più utilizzati algoritmi, ma oggetti che appartengono a una determinata classe).
  • Multiparadigma (combina diversi paradigmi e il programmatore stesso decide quale linguaggio usare in questo o quel caso).
  • Funzionale (gli elementi principali sono funzioni che cambiano valore a seconda dei risultati dei calcoli dei dati iniziali).

Programmazione per principianti

Molte persone chiedono cos'è la programmazione? Fondamentalmente, è un modo per comunicare con un computer. Grazie ai linguaggi di programmazione, possiamo impostare determinati compiti per vari dispositivi creando applicazioni o programmi speciali. Quando si studia questa scienza nella fase iniziale, la cosa più importante è scegliere linguaggi di programmazione adatti (interessanti per te). L'elenco per i principianti è di seguito:

  • Basic è stato inventato nel 1964, appartiene alla famiglia dei linguaggi di alto livello e viene utilizzato per scrivere programmi applicativi.
  • Python ("Python") è abbastanza facile da imparare grazie alla sua sintassi semplice e leggibile, ma il vantaggio è che può essere utilizzato per creare sia normali programmi desktop che applicazioni web.
  • Pascal ("Pascal") - una delle lingue più antiche (1969) creata per insegnare agli studenti. La sua moderna modifica ha una tipizzazione e una struttura rigorose, ma "Pascal" è un linguaggio completamente logico comprensibile a livello intuitivo.

Questo non è un elenco completo di linguaggi di programmazione per principianti. Ci sono un numero enorme di sintassi che sono facili da capire e saranno sicuramente richieste nei prossimi anni. Ognuno ha il diritto di scegliere autonomamente la direzione che sarà interessante per lui.

I principianti hanno l'opportunità di accelerare l'apprendimento della programmazione e delle sue basi grazie a strumenti speciali. L'assistente principale è l'ambiente di sviluppo integrato Visual Basic per programmi e applicazioni (“Visual Basic” è anche un linguaggio di programmazione che ha ereditato lo stile del linguaggio Basic degli anni '70).

Livelli di linguaggio di programmazione

Tutti i linguaggi formalizzati progettati per creare, descrivere programmi e algoritmi per la risoluzione di problemi su computer sono divisi in due categorie principali: linguaggi di programmazione di basso livello (l'elenco è riportato di seguito) e quelli di alto livello. Parliamo di ciascuno di essi separatamente.

I linguaggi di basso livello sono progettati per creare istruzioni macchina per i processori. Il loro principale vantaggio è che usano la notazione mnemonica, cioè, invece di una sequenza di zeri e uno (dal sistema numerico binario), il computer ricorda una parola abbreviata significativa dalla lingua inglese. I linguaggi di basso livello più famosi sono "Assembler" (esistono diverse sottospecie di questo linguaggio, ognuna delle quali ha molto in comune, ma differisce solo per un insieme di direttive e macro aggiuntive), CIL (disponibile in .Net piattaforma) e JAVA Bytecode.

Linguaggi di programmazione ad alto livello: elenco

I linguaggi di alto livello sono progettati per comodità ed efficienza delle applicazioni, sono l'esatto opposto dei linguaggi di basso livello. La loro caratteristica distintiva è la presenza di costruzioni semantiche che descrivono in modo sintetico e sintetico le strutture e gli algoritmi dei programmi. Nei linguaggi di basso livello, la loro descrizione in codice macchina sarebbe troppo lunga e incomprensibile. Le lingue di alto livello, d'altra parte, sono indipendenti dalla piattaforma. Invece, i compilatori svolgono la funzione di traduttore: traducono il testo del programma in istruzioni macchina elementari.

Il seguente elenco di linguaggi di programmazione: C ("C"), C# ("C-sharp"), "Fortran", "Pascal", Java ("Java") - è tra le sintassi di alto livello più utilizzate. Ha le seguenti proprietà: questi linguaggi funzionano con strutture complesse, supportano tipi di dati stringa e operazioni di I/O su file e hanno anche il vantaggio di essere molto più facili da lavorare grazie alla leggibilità e alla sintassi comprensibile.

Linguaggi di programmazione più utilizzati

In linea di principio, puoi scrivere un programma in qualsiasi lingua. La domanda è: funzionerà in modo efficiente e senza errori? Ecco perché dovrebbero essere scelti i linguaggi di programmazione più adatti per risolvere vari problemi. L'elenco di popolarità può essere riassunto come segue:

  • Linguaggi OOP: Java, C++, Python, PHP, VisualBasic e JavaScript;
  • gruppo di linguaggi strutturali: Basic, Fortran e Pascal;
  • multiparadigma: C#, Delphi, Curry e Scala.

Ambito di programmi e applicazioni

La scelta della lingua in cui è scritto questo o quel programma dipende in gran parte dall'area di applicazione. Quindi, ad esempio, per lavorare con l'hardware del computer stesso (scrittura di driver e programmi di supporto), l'opzione migliore sarebbe C ("C") o C++, che sono inclusi nei principali linguaggi di programmazione (vedi elenco sopra). E per lo sviluppo di applicazioni mobili, inclusi i giochi, dovresti scegliere Java o C# ("C-sharp").

Se non hai ancora deciso in quale direzione lavorare, ti consigliamo di iniziare ad imparare con C o C++. Hanno una sintassi molto chiara, una chiara divisione strutturale in classi e funzioni. Inoltre, conoscendo C o C++, puoi facilmente imparare qualsiasi altro linguaggio di programmazione.

Articoli correlati in alto