Filosofia programatorului. Rezumat: Aspecte filozofice ale programării
Merită să înveți programarea?
„Programare” este un concept foarte larg. Unele limbaje de programare sunt mult mai ușoare decât altele. Unele limbi necesită înțelegerea modului în care programul „vorbește” cu computerul. Cea mai importantă parte a codurilor de învățare este menținerea mișcarea corectă gândire. Ideea nu este să-ți spui „pot să fac asta” sau să citești literatura necesară...
Ideea este aceasta...
Să înveți sau să nu înveți programarea?
Alfabetizarea în orice limbaj de calculator, de la HTML simplu la C++ complex, necesită dedicare nu numai tehnologiei, ci și schimbărilor sale nesfârșite. HTML5 se termină cu un număr dintr-un motiv. Odată ce suficiente browsere web încep să accepte HTML6, dezvoltatorii vor trebui să învețe din nou ceva nou.
Posibile motive pentru care ai dori să te implici într-un nou proces de învățare:
- Câștigă încredere: am avut mai mulți clienți care au simțit că, dacă ar învăța un limbaj de programare, atunci computerele ar fi mai puțin intimidante pentru ei.
- Necesitate: probleme tehnice pot apărea în orice moment.
- Fior: Unii oameni vor doar să învețe noi abilități.
- Pentru a înțelege ce este posibil: când un dezvoltator spune „Nu se poate face!” Vrea să spună că chiar nu este posibil, sau pur și simplu nu vrea să-și asume această durere de cap?
Fii mereu curios
Nimeni nu vrea să fie un bug pe parbriz. În ceea ce mă privește, nu teama de eșec îi sperie pe oameni, ci teama de posibilitatea de a mă rătăci. Deznădejdea copleșitoare încurajează sentimentele de inferioritate. Curajul și perseverența nu sunt antidotul pentru a te simți copleșit, dar oprirea devreme înainte ca sentimentul să se impună este cel mai bun medicament.
Am trei abordări pentru a rezolva o problemă cu orice proiect:
- Găsește un subiect care te enervează
Condițiile și plata sunt toate bune. Dar nimic nu-ți va da o grabă mai mare decât o mâncărime la care nu poți ajunge. Într-un viitor promițător, programarea nu ar trebui să fie un scop în sine. Ar trebui să servească drept „lubrifiant pentru uși care scârțâie”.
- Ar trebui să fiți recompensat pentru efort suplimentar.
După ce au găsit mâncărimea proverbială, oamenii care învață să codifice ar trebui, de asemenea, să găsească ușurare. Niciun tutorial, niciun instrument, nicio laudă nu va ajuta pe nimeni să devină un maestru CODE. Doar după cuvintele „Am scris asta și... uite ce am făcut!” vei simți că ai depășit un obstacol. Va suna stupid până când îl încerci singur. Codul testat care funcționează vă va oferi o adrenalină și vă va face să vă simțiți ca și cum ați devenit un maestru în programarea computerelor.
- Proiectul tău ar trebui să fie realizat în timp ce creierul tău are poftă de mâncare
Antrenează-ți creierul. Când împinge, antrenorii îi încurajează pe oameni să se împingă un pic mai mult decât limita lor. Învățarea înseamnă foame. Creierul tău are întotdeauna apetit pentru cunoștințe noi.
Practicați zilnic
Singura modalitate de a învăța programarea și de a o aminti pentru totdeauna este să exersezi în fiecare zi. Ca și în cazul învățării oricărei abilități noi, un program consecvent de noi scopuri și obiective vă va șlefui treptat abilitățile până la perfecțiune.
Immanuel Kant, escrocul filosofiei, a venit cu un lucru grozav pentru angosticism. Așa-numitul „lucru în sine”. Un lucru extrem de interesant.
Trucul este acesta: în procesul epistemologic obișnuit există o legătură obiect-subiect. Acestea. Există întotdeauna un obiect pe care subiectul îl cunoaște.
Sunt multe puncte de vedere pe care le cunoaștem (idealismul, materialismul și mișcările lor ulterioare), dar numai Kant le-a depășit pe toate.
În înțelegerea lui, poți cunoaște un lucru doar dacă îți permite să faci asta. De exemplu, dacă un lucru vrea să rămână închis, nu vei ști niciodată că este din lemn, chiar dacă l-ai văzut.
Acestea. el înzestrează obiectul cu voinţă, echivalându-l cu subiectul. Astfel, atâta timp cât știi lucrul, lucrul te va cunoaște. Relațiile cu mai multe niveluri au migrat către cele cu un singur nivel.
Pare o nebunie, dar confirmarea acestei ipoteze se găsește peste tot. De exemplu, pătratul negru al lui Malevici. Mulți îl consideră doar un pătrat negru, dar pentru alții are o semnificație profundă.
Este foarte posibil ca pătratul pur și simplu să nu se fi deschis pentru tine, dar altcineva a găsit o perspectivă în el. Și sunt multe astfel de cazuri. La urma urmei, mulți oameni trec adesea pe lângă ceva și apoi o persoană face dintr-o dată o descoperire/invenție literalmente lucruri simple, care zaceau în jurul nostru, dar noi „nu le-am observat”. Poate nu că nu le-am observat, dar că lucrurile nu ne-au fost dezvăluite? Această poziție extrem de controversată și interesantă are șanse foarte reale de a exista în realitate.
De exemplu, dacă universul ar fi un program uriaș, ar dori creatorul să creeze diferite clase pentru a descrie diferite obiecte? Bineînțeles că nu, pentru că toată lumea se străduiește pentru un minim de energie, fiecare este cât poate de leneș. Prin urmare, pentru a nu deranja prea mult, programatorul universal va crea o singură clasă pentru toate obiectele. Și va trebui să gestioneze doar un singur tip de interacțiune obiect-obiect. Și este foarte posibil ca tocmai din această cauză, un obiect să înțeleagă un alt obiect doar atunci când decide să se deschidă față de el.
A doua observație interesantă constă în viziunea asupra lumii și a valorilor.
Valori a acestei lumi, ne modelează viziunea asupra lumii, care, la rândul său, ne modelează valorile.
Acest cerc vicios se reflectă ușor în programare:
Funcție Vedere asupra lumii(Valori) Valori = Algoritm pentru calcularea valorilor() Valori returnate Sfârșitul funcției Programul principal Buclă (se repetă la nesfârșit)( Valori = Viziunea lumii (Valori)) Sfârșitul programului
Există o mulțime de corelații interesante similare între filozofie și programare.
După cum știți, un computer este capabil să înregistreze cuvinte (text) și obiecte (modele 3D, imagini). Singurul decalaj care stă în calea creării AI este conceptul. Acestea. ceea ce face legătura între cuvânt și obiect. Dacă cineva își dă seama cum să pună un sistem de concepte într-o mașină, atunci va fi creată IA.
Dmitri Yakushev
"Filozofie"
programare în limbaj C++
a doua ediție, extinsă și corectată
UDC 004.43 BBK 32.973.202
Yakushev D. M.
I49 „Filosofia” programării în C++. / D. M. Yakushev. - Ed. a II-a. - M.: Presa Buk, 2006. - 320 p.
ISBN 5 9643 0028 6
Autorul limbajului C++ este Bjarne Stroustrup, angajat al celebrei companii AT&T. C++ (sau mai bine zis, predecesorul său, C cu clase) a fost creat sub influența limbajului Simula (trebuie spus că acest limbaj de programare a apărut încă din 1967). De fapt, până la apariția C++, C câștigase deja popularitate; programatorii profesioniști îl respectă pentru capacitatea sa de a profita de o arhitectură specifică în timp ce scriu programe într-un limbaj relativ nivel inalt.
În prezent, C++ este unul dintre cele mai populare (dacă nu cel mai popular) limbaje de programare. Este C++ care vă permite să scrieți un program folosind abordări orientate pe obiecte (și programele care necesită acest lucru sunt de obicei foarte mari) și, în același timp, să fiți destul de „rapide”.
Această carte va introduce cititorul în „filozofia” și fundamentele programării în C++. Cartea conține multe exemple, compilate și testate de autor.
UDC 004.43 BBK 32.973.202
Partea 1.
Capitolul 1. C++ este un limbaj de programare cu scop general. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3
Capitolul 2. Vocabular. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6 Capitolul 3. Sintaxă. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 Capitolul 4. Domeniul de aplicare. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11 Capitolul 5. Definiții. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12 Capitolul 6. Aspect. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 Capitolul 7. Clasele de memorie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 Capitolul 8. Tipuri de bază. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 Capitolul 9. Tipuri derivate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14 Capitolul 10. Obiecte și LVALUE (adrese). . . . . . . . . . . . . . . . . . . . . . . . .15 Capitolul 11. Simboluri și numere întregi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15 Capitolul 12. Transformări. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17 Capitolul 13. Expresii și operații. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18 Capitolul 14. Descrieri. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31 Capitolul 15. Specificatorii clasei de memorie. . . . . . . . . . . . . . . . . . . . . .31 Capitolul 16. Descriptori. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34 Capitolul 17. Descrierile claselor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39 Capitolul 18. Inițializarea. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51 Capitolul 19. Nume de funcții supraîncărcate. . . . . . . . . . . . . . . . . . . . .58 Capitolul 20. Descrierea enumerarii. . . . . . . . . . . . . . . . . . . . . . . . . . . . .59 Capitolul 21. Descrierea Asm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60 Capitolul 22. Operatori. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61 Capitolul 23. Definiții externe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66
Capitolul 24. Liniile de comandă compilator. . . . . . . . . . . . . . . . . . . . .68 Capitolul 25. Prezentare generală a tipurilor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .70 Capitolul 26. Considerații privind mobilitatea. . . . . . . . . . . . . . . . . . . . . . . . . .75 Capitolul 27. Memoria liberă. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76
Partea 2. Turbo C++
Capitolul 1. Mediul de dezvoltare integrat. . . . . . . . . . . . . . . . . . . .78 Capitolul 2. Bara de meniuri și meniuri. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79 Capitolul 3. Ferestrele TURBO C++. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79 Capitolul 4. Lucrul cu meniul de pe ecran. . . . . . . . . . . . . . . . . . . . . . . . . . . . .80
Capitolul 5. Structura fișierelor, tipuri de date și operatori de intrare/ieșire. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
Capitolul 6. Operații aritmetice, logice, relaționale și de atribuire. . . . . . . . . . . . . . . . . . . . . . .91
Capitolul 7. Organizarea logică a programului și cea mai simplă utilizare a funcțiilor. . . . . . . . . . . . . . . . . . . . . . . . . .95
Capitolul 8. Organizarea logică a unui program simplu. . . . . . . . . . .95 Capitolul 9. Utilizarea constantelor tipuri variate. . . . . . . . . . . . .96 Capitolul 10. Structuri de control. . . . . . . . . . . . . . . . . . . . . . . . . . . .98
Capitolul 11. Tehnici de declarare și accesare a tablourilor, folosind funcții și directiva define
atunci când lucrați cu matrice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .100
Partea 3. De la teorie la practică
Capitolul 1. Regula „dreapta la stânga”. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .103 Capitolul 2. STLport. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104 Capitolul 3. Limbajul de programare de la Microsoft: C#. . . . . . . . . . . . . .106 Capitolul 4. C++ Builder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .108 Capitolul 5. Utilizarea indicatoarelor „inteligente”. . . . . . . . . . . . . . . . . . . . . .111 Capitolul 6. Discuții pe tema indicatoarelor „inteligente”. . . . . . . . . . . . . .116 Capitolul 7. Destructori virtuali. . . . . . . . . . . . . . . . . . . . . . . . . . . .122 Capitolul 8. Scrierea structurilor de date în fișiere binare. . . . . . . . . . . .126
Capitolul 9. Operatorul de salt necondiționat goto. . . . . . . . . . . . . . . . . .132 Capitolul 10. Constructor virtual. . . . . . . . . . . . . . . . . . . . . . . . . . .136 Capitolul 11. Citirea textelor sursă. . . . . . . . . . . . . . . . . . . . . . . . . . . .141 Capitolul 12. Funcția gets(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .143 Capitolul 13. Proprietăţi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146 Capitolul 14. Comentarii. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .149 Capitolul 15. Programare web. . . . . . . . . . . . . . . . . . . . . . . . . . . . .154 Capitolul 16. Erori în lucrul cu memoria. . . . . . . . . . . . . . . . . . . . . . . . . .158 Capitolul 17: Crearea graficelor cu ploticus. . . . . . . . . . . . . . .161 Capitolul 18. Automatizarea și motorizarea aplicației. . . . . . . . . . .164 Capitolul 19. Revizuirea compilatoarelor C/C++ EMX și Watcom. . . . . . . . . .183 Capitolul 20. Utilizarea directivei #import. . . . . . . . . . . . . . . . . . .188
Capitolul 21: Crearea capcanelor de sistem
Windows pe Borland C++ Builder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .204 Întrebări și răspunsuri. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .214
PUBLICAȚIE ȘTIINȚIFICĂ POPULARĂ
Iakusev Dmitri Mihailovici
„FILOZOFIA” PROGRAMĂRII ÎN LIMBAJUL C++
redactor-șef B.K. Leontyev
redactor-șef A. G. Benetashvili
Aspect original de I. V. Tsarik
Artistul O. K. Alekhine
Editor artistic M. L. Mishin Editor tehnic K. V. Shapiro
Corectori L. S. Zimina, K. V. Tolkacheva
Semnat pentru publicare la 05/07/2006. Format 60x90/16. Font Newton. Hartie offset. Imprimare offset. Pech. l. 20. Tiraj 3000.
Introducere în limbajul de programare C++ | ||
Partea 1. Introducere în limbaj
programare C++
C++ - limbaj de programare de uz general
Autorul limbajului C++ este Bjarne Stroustrup, angajat al celebrei companii AT&T. C++ (sau mai bine zis, predecesorul său, C cu clase) a fost creat sub influența Simula (trebuie spus că acest limbaj de programare a apărut încă în 1967). De fapt, până în acel moment (când a apărut C++), C câștigase deja popularitate; Este, în general, foarte respectat pentru capacitatea sa de a exploata capacitățile unei anumite arhitecturi, utilizând totuși un limbaj de nivel relativ înalt. Adevărat, de obicei tocmai acesta este motivul pentru care nu-l place. Desigur, în acest caz, unele prevederi pentru construirea de programe au fost pierdute (sau distorsionate); de exemplu, în C nu există practic nicio capacitate de a crea programe modulare. Nu, bineînțeles că sunt create, dar cu ajutorul unor „cârje” sub forma utilizării directivelor de preprocesor - nu există o astfel de modularitate ca, de exemplu, în Modula 2 sau Ada, în C. Apropo, acest lucru nu este încă cazul în C++.
De la bun început, s-a subliniat că C++ este o dezvoltare a limbajului C, poate o parte din dialectul său. Acest lucru este dovedit de faptul că primul compilator (încă există) a fost cfront, care a tradus codul sursă C++ în cod sursă C. Această opinie încă există și, trebuie spus, încă nu este neîntemeiată; cu toate acestea, C și C++ - limbi diferite programare.
Principala diferență dintre C++ când a apărut pentru prima dată a fost suportul său explicit pentru o abordare orientată pe obiecte a programării. Trebuie să înțelegeți că programarea folosind OOP și OOA se poate face oriunde, chiar dacă setul de instrumente nu o acceptă în mod explicit; ca exemplu, puteți lua biblioteca interfeței cu utilizatorul
Introducere în limbajul de programare C++ |
||
Fața GTK+, care este scrisă în C „pur” și folosind principiile „designului” orientat pe obiecte. Introducerea instrumentelor de sprijinire a OOP într-un limbaj de programare înseamnă că la etapa de compilare (și nu la etapa de execuție a programului) se va verifica compatibilitatea tipurilor, prezența metodelor etc. În principiu, acest lucru este destul de convenabil.
Din nou, la fel cum C nu este un limbaj de programare de nivel înalt (pentru că permite prea multe trucuri), C++ nu este, strict vorbind, un limbaj de programare orientat pe obiecte. Acest lucru este împiedicat de caracteristici precum prezența funcțiilor virtuale (pentru că atunci când vorbim despre polimorfism, nimeni nu prevede niciodată că unele metode vor participa la el, iar altele nu), prezența funcției main() etc. În plus, C++ nu are astfel de entități precum, de exemplu, metaclase (deși probabil că nu sunt atât de necesare) și interfețe (este folosită în schimb moștenirea multiplă). Cu toate acestea, C++ este în prezent unul dintre cele mai populare (dacă nu cel mai popular) limbaje de programare. De ce? Da, pentru că toate aceste „monstrozități” fac în cele din urmă posibilă scrierea unui program folosind abordări orientate pe obiect (și programele care necesită acest lucru sunt de obicei foarte mari) și în același timp destul de „rapide”. Acest lucru este facilitat tocmai de prezența funcțiilor virtuale (adică ceea ce programatorul însuși împarte în timpul proiectării, unde va avea nevoie de polimorfism și unde va fi suficient să combinați unele funcții într-un grup în funcție de anumite caracteristici), prezența obligatorie a un optimizator și așa mai departe. Toate acestea vă permit, dacă sunt utilizate corect, să scrieți în continuare un program de lucru. Adevărat, există destul de des exemple de utilizare analfabetă, în urma cărora alegerea C++ pentru implementarea proiectelor se transformă în tortură pentru programatori și management.
În prezent, există un standard pentru limbajul de programare C++, care include, printre altele, o bibliotecă de șabloane standard. Șabloanele sunt un subiect aparte; din punct de vedere formal, sunt și „cârje” pentru a face, ca să spunem așa, polimorfism la etapa de compilare (și în această calitate sunt foarte utile), dar biblioteca
Fără îndoială o inovație corectă din toate părțile. Având, în sfârșit, modalități standard de a sorta o listă într-un mod portabil (adică, de la compilator la compilator) (pe lângă scrierea personală a tuturor subrutinelor și structurilor de date corespunzătoare) a făcut viața programatorului mult mai ușoară. Adevărat, mulți oameni încă nu înțeleg cum funcționează STL și cum să-l folosească (cu excepția std::cin și std::cout ).
Introducere în limbajul de programare C++ | ||
O etapă importantă în dezvoltarea programării a fost crearea și distribuirea pe scară largă a limbajului C++. Acest limbaj, păstrând instrumentele limbajului C (limbaj orientat pe procedura), care a devenit un standard general recunoscut pentru scrierea programelor de sistem și aplicații, a introdus
oportunități de practică de programare pentru o nouă abordare tehnologică a dezvoltării software, numită „programare orientată pe obiecte”.
Limbajul de programare C++ este C*, extins prin introducerea de clase, funcții inline, operatori supraîncărcați, nume de funcții supraîncărcate, tipuri de constante, referințe, operațiuni de gestionare a memoriei libere, verificarea parametrilor funcției.
Introducerea unei paradigme orientate pe obiecte în practica scrierii programelor conduce la dezvoltarea de noi domenii ale informaticii, o creștere semnificativă a nivelului de fabricabilitate a software-ului creat, o reducere a costurilor de dezvoltare și întreținere a programelor, a acestora. reutilizare, implicarea în procesul de extindere a capacităţilor intelectuale ale calculatoarelor.
Abordarea prin obiect a modelării informaționale a domeniilor de studiu este folosită din ce în ce mai mult ca bază pentru structurarea reflecțiilor lor informaționale și, în special, a bazelor de cunoștințe.
C++ este un limbaj de programare de uz general. Acest limbaj special este bine cunoscut pentru eficiența, economia și portabilitatea sa.
Aceste avantaje ale C++ asigură o bună calitate a dezvoltării aproape oricărui tip de produs software.
Utilizarea C++ ca limbaj instrumental vă permite să obțineți programe rapide și compacte. În multe cazuri, programele scrise în C++ sunt comparabile ca viteză cu programele scrise în limbaj de asamblare.
Să enumerăm câteva caracteristici esențiale ale limbajului C++:
C++ oferă un set complet de operatori de programare structurată;
C++ oferă un set neobișnuit de mare de operații;
Introducere în limbajul de programare C++ |
||
Varietatea operațiunilor vă permite să alegeți diferite seturi ale acestora pentru a minimiza codul rezultat;
C++ acceptă indicatorii către variabile și funcții;
Un pointer către un obiect program corespunde adresei mașinii acelui obiect;
Folosind judicios indicatori, puteți crea programe care rulează eficient deoarece... pointerii vă permit să vă referiți la obiecte în același mod ca un computer;
C++ acceptă aritmetica pointerului și permite astfel accesul direct și manipularea adreselor de memorie.
Capitolul 2. Vocabular
Există șase clase de jetoane: identificatori, cuvinte cheie, constante, șiruri, operatori și alți delimitatori. Caracterele și comentariile de spațiu, tabulator și linie nouă (colectiv, „spații albe”), așa cum este descris mai jos, sunt ignorate, cu excepția cazului în care servesc ca delimitatori de simboluri.
Este necesar un spațiu alb pentru a separa identificatorii, cuvintele cheie și constantele care altfel s-ar atinge reciproc. Dacă fluxul de intrare este tokenizat până la un anumit caracter, se presupune că următorul jeton conține cel mai lung șir de caractere care poate forma jetonul.
Comentarii
Simbolurile /* indică începutul unui comentariu care se termină cu simbolurile */. Comentariile nu pot fi imbricate.
Caracterele // încep un comentariu care se termină la sfârșitul rândului pe care apar.
Identificatori (nume)
Multe operațiuni C++ corespund instrucțiunilor mașinii și, prin urmare, pot fi traduse direct în codul mașinii;
Identificator - o succesiune de litere și numere de lungime arbitrară; primul caracter trebuie să fie o literă; Litera de subliniere „_” este considerată litera wu; literele mari și mici sunt diferite.
Identificatorii semnati și volatili sunt rezervați pentru utilizare ulterioară.
constante
Există mai multe tipuri de constante. Mai jos este un scurt rezumat al caracteristicilor hardware care le afectează dimensiunile.
Constante întregi
O constantă întreagă constând dintr-o succesiune de cifre este considerată octală dacă începe cu 0 (cifra zero), iar zecimală în caz contrar. Numerele 8 și 9 nu sunt cifre octale.
O secvență de cifre precedată de 0x sau 0X este acceptată ca număr întreg hexazecimal.
Cifrele hexazecimale includ literele a sau A la f sau F, cu valori cuprinse între 10 și 15.
O constantă zecimală a cărei valoare este mai mare decât cel mai mare număr întreg de mașină cu semn este considerată lungă; constantă octală și hexazecimală a căror valoare depășește cea mai mare
Introducere în limbajul de programare C++ | ||
gât mașină întreg cu un semn, este considerat lung; în alte cazuri, constantele întregi sunt tratate ca int.
Constante lungi explicite
O constantă zecimală, octală sau hexazecimală urmată imediat de l (litera latină „el”) sau L este considerată o constantă lungă.
Constante de caractere
O constantă de caracter constă dintr-un caracter înconjurat de ghilimele simple (apostrofe), cum ar fi „x”. Valoarea unei constante de caractere este valoarea numerică a caracterului din setul de caractere (alfabet) al aparatului.
Constantele de caractere sunt considerate date de tip int . Unele caractere negrafice, ghilimele simple" și backslash\, pot fi reprezentate conform următoarei liste de secvențe de escape:
caracter nou linie NL(LF) | ||
filă orizontală NT | ||
filă verticală VT | ||
reveniți la pasul BS | ||
retur cărucior CR | ||
Traducere în format FF | ||
bară oblică inversă\ | ||
ghilimele simple (apostrof) " | ||
set de biți 0ddd | ||
set de biți 0xddd |
Secvența de escape \ddd constă dintr-o bară oblică inversă urmată de 1, 2 sau 3 cifre octale care specifică valoarea caracterului dorit. Un caz special al acestui construct este \0 (nu este urmat de nicio cifră), care specifică caracterul gol NULL .
Secvența de escape\xddd constă dintr-o bară oblică inversă urmată de 1, 2 sau 3 cifre hexazecimale care specifică valoarea caracterului dorit. Dacă caracterul care urmează barei oblice inversă nu este unul dintre cei enumerați, atunci bara oblică inversă este ignorată.
Introducere în limbajul de programare C++ |
||
Constante în virgulă mobilă
O constantă în virgulă mobilă constă dintr-o parte întreagă, un punct zecimal, o mantisă, e sau E și un exponent întreg (posibil, dar nu neapărat, cu semn). Partea întreagă și mantisa constau ambele dintr-o succesiune de cifre. Întreaga parte sau mantisa (dar nu ambele) pot fi omise; sau punctul zecimal sau (E) împreună cu întregul exponent (dar nu ambele părți în același timp) pot fi omise. Constanta în virgulă mobilă este de tip double.
Constante enumerate
Numele descrise ca enumeratori sunt constante
na int .
Constante descrise
Un obiect de orice tip poate fi definit ca să aibă o valoare constantă pe toată durata numelui său. În cazul pointerilor, declaratorul *const este folosit pentru a realiza acest lucru; Pentru obiectele non-pointer, este utilizat descriptorul const.
Un șir este o secvență de caractere cuprinsă între ghilimele duble: „...”. Șirul are un tip de matrice de caractere și o clasă de stocare static și este inițializat cu caracterele date.
Compilatorul plasează un octet nul \0 la sfârșitul fiecărei linii, astfel încât un program care scanează linia poate găsi sfârșitul acesteia.
Caracterul ghilimele duble „ trebuie să fie precedat de \ într-o linie; în plus, pot fi folosite aceleași secvențe de escape care au fost descrise pentru constantele de caractere.
Și, în sfârșit, caracterul newline poate apărea numai imediat după \ ; atunci atât -\ cât și caracterul newline sunt ignorate.
Capitolul 3. Sintaxă
Sintaxa de înregistrare
Conform regulilor sintactice de înregistrare, categoriile sintactice sunt evidențiate cu caractere cursive, iar cuvintele și simbolurile literale sunt evidențiate într-un font de lățime constantă.
Introducere în limbajul de programare C++ | ||
Categoriile alternative sunt scrise pe rânduri diferite. Un simbol terminal opțional sau non-terminal este indicat prin indicele „opt”, astfel încât (opt) indică faptul că expresia dintre acolade este opțională.
Nume și tipuri
Un nume denotă (indică) un obiect, funcție, tip, valoare sau etichetă. Numele este introdus în program prin descriere. Un nume poate fi folosit numai într-o zonă a textului programului numită domeniul său. Un nume are un tip care îi determină utilizarea.
Un obiect este o zonă de memorie. Un obiect are o clasă de memorie care îi determină durata de viață. Semnificația valorii găsite într-un obiect este determinată de tipul de nume folosit pentru a-l accesa.
Zona de vizibilitate
Există patru tipuri de domeniu: local, fișier, program și clasă.
Local
Un nume descris într-un bloc este local pentru acel bloc și poate fi folosit numai în acel bloc după locația declarației și în blocurile pe care le acoperă.
Excepție fac etichetele, care pot fi folosite oriunde în funcția în care sunt descrise. Numele parametrilor de funcție formală sunt tratate ca și cum ar fi fost declarați
V blocul exterior al acestei funcții.
Un nume declarat în afara oricărui bloc sau clasă poate fi folosit în fișierul în care este definit, după locul declarației.
Numele unui membru al clasei este local pentru clasa sa și poate fi folosit numai într-o funcție membru a acelei clase, după ce operația > a fost aplicată unui obiect din clasa sa sau după ce operația > a fost aplicată unui pointer către un obiect al clasei sale.
Membrii clasei statici și membrii funcției pot fi, de asemenea, referiți utilizând operatorul :: unde numele clasei lor este în domeniu.
Introducere în limbajul de programare C++ |
||
O clasă declarată în cadrul unei clase nu este considerată membru, iar numele ei aparține domeniului de aplicare.
Un nume poate fi ascuns prin definirea explicită a aceluiași nume într-un bloc sau clasă. Un nume dintr-un bloc sau clasă poate fi ascuns numai de numele descris în blocul sau clasă acoperită.
Un nume non-local ascuns poate fi folosit și atunci când domeniul său este specificat de operatorul ::.
Un nume de clasă ascuns de un nume care nu este un nume de tip poate fi folosit în continuare dacă este precedat de class , struct sau union . Un nume de enumerare enum ascuns de un nume care nu este un nume de tip poate fi folosit în continuare dacă este precedat de enum .
Capitolul 5. Definiții
O declarație este o definiție, cu excepția cazului în care descrie funcții fără a specifica un corp de funcție, când conține specificatorul extern(1) și nu există inițializator sau corp de funcție sau când este o declarație de clasă.
Capitolul 6. Aspect
Un nume de fișier care nu este declarat în mod explicit static este comun pentru fiecare fișier dintr-un program cu mai multe fișiere. Acesta este și numele funcției. Se spune că astfel de nume sunt externe.
Fiecare descriere nume externîntr-un program se referă la același obiect, funcție, clasă, enumerare sau valoare de enumerator.
Tipurile specificate în toate declarațiile de nume externe trebuie să fie identice. Pot exista mai multe definiții de tip, enumerare, funcție inline sau const non-compozit, cu condiția ca definițiile să fie identice, să apară în fișiere diferite și toți inițializatorii să fie expresii constante.
Introducere în limbajul de programare C++ | ||
În toate celelalte cazuri, trebuie să existe exact o definiție pentru numele extern în program.
O implementare poate cere ca o const compusă folosită acolo unde nu este întâlnită nicio definiție a const trebuie să fie declarat explicit extern și să aibă exact o definiție în program. Aceeași restricție poate fi impusă funcțiilor inline.
Capitolul 7. Clasele de memorie
Sunt descrise două clase de memorie:
auto
static.
Obiectele automate sunt locale pentru fiecare apel de bloc și sunt resetate la ieșire.
Obiectele statice există și își păstrează valoarea pe tot parcursul programului.
Unele obiecte nu sunt asociate cu nume, iar durata lor de viață este controlată în mod explicit de operatorii new și delete.
Capitolul 8. Tipuri de bază
Obiectele declarate ca caractere (char) sunt suficiente pentru a stoca orice element al setului de caractere al mașinii, iar dacă un caracter aparținând acelui set este stocat într-o variabilă de caractere, atunci valoarea acestuia este egală cu codul întreg al acelui caracter.
În prezent, există trei dimensiuni întregi, descrise ca short int , int și long int . Inturile lungi oferă cel puțin la fel de multă memorie ca și inții scurte, dar atunci când sunt implementate, fie lungi, scurte sau ambele pot deveni echivalente cu un întreg obișnuit.
Ansambluri „obișnuite” au o dimensiune naturală, determinată de arhitectura mașinii centrale; alte dimensiuni sunt făcute pentru a se potrivi nevoilor speciale.
Introducere în limbajul de programare C++ |
||
Fiecare enumerare este un set de constante numite. Proprietățile enum sunt identice cu proprietățile int. Numerele întregi fără semn, descrise ca nesemnate, respectă regulile aritmeticii modulo2n, unde n este numărul de biți din reprezentarea lor.
Numerele cu virgulă mobilă de precizie simple (float) și duble (duble) pot fi sinonime în unele implementări ale mașinii.
Deoarece obiectele din tipurile enumerate mai sus pot fi interpretate cu ușurință ca numere, ne vom referi la ele ca tipuri aritmetice.
Tipurile char, int de toate dimensiunile și enum vor fi numite colectiv tipuri întregi. Tipurile float și double vor fi numite colectiv tipuri flotante.
Tipul de date void definește un set gol de valori. Valoarea (inexistentă) a unui obiect nu poate fi utilizată în niciun fel și nu pot fi aplicate nici conversiile explicite, nici implicite.
Deoarece o expresie goală denotă o valoare inexistentă, o astfel de expresie poate fi folosită doar ca operator de expresie sau ca operand din stânga într-o expresie punct și virgulă. O expresie poate fi convertită în mod explicit în tipul void.
Capitolul 9. Tipuri derivate
Pe lângă tipurile aritmetice de bază, există conceptual un număr infinit de tipuri derivate, construite din tipurile de bază, după cum urmează:
rețele de obiecte de acest tip;
funcții care primesc argumente de un anumit tip și returnează obiecte de un anumit tip;
pointeri către obiecte de acest tip;
constante care sunt valori de un anumit tip;
Introducere în limbajul de programare C++ | ||
structuri, care sunt clase fără restricții de acces;
asociaţii, care sunt structuri care pot timp diferit conțin obiecte de diferite tipuri.
ÎN În general, aceste metode de construire a obiectelor pot fi utilizate recursiv.
Un obiect de tip void* (un pointer către void) poate fi folosit pentru a indica obiecte de tip necunoscut.
Obiecte și LVALUE (adrese)
Un obiect este o zonă de memorie; lvalue (adresa) este o expresie care se referă la un obiect. Un exemplu evident de expresie de adresă este numele unui obiect.
Există operații care produc expresii de adresă: de exemplu, dacă E este o expresie pointer, atunci *E este o expresie de adresă care se referă la obiectul indicat de E .
Termenul „lvalue” provine din expresia de atribuire E1=E2, în care operandul din stânga E1 trebuie să fie o expresie de valoare.
Discuția de mai jos pentru fiecare operator specifică dacă necesită operanzi de adresă și dacă returnează o valoare de adresă.
Capitolul 11. Caractere și numere întregi
Un caracter sau un întreg scurt poate fi folosit dacă se poate folosi un întreg. În toate cazurile, valoarea este convertită într-un număr întreg.
Conversia unui număr întreg scurt într-un număr întreg lung implică întotdeauna extinderea semnată; numerele întregi sunt mărimi cu semne. Dacă caracterele conțin sau nu un bit de semn depinde de mașină. Tipul de caracter nesemnat mai explicit limitează valoarea de la 0 la un maxim dependent de mașină.
Pe mașinile în care caracterele sunt tratate ca semnate, caracterele setului de cod ASCII sunt pozitive.
Introducere în limbajul de programare C++ |
||
Cu toate acestea, o constantă de caractere specificată de secvența octală esc este supusă extinderii semnelor și poate deveni un număr negativ; deci, de exemplu, „\377” are valoarea 1 .
Când un întreg lung este convertit într-un întreg scurt sau într-un char , acesta este trunchiat la stânga; biții în exces se pierd pur și simplu.
Plutește și dublează
Expresiile flotante pot efectua aritmetică în virgulă mobilă cu precizie unică. Conversiile între numerele cu precizie simplă și dublă sunt efectuate atât de corecte din punct de vedere matematic, pe cât permite hardware-ul.
Plutitor și întreg
Conversiile de tip flotant în integral tind să fie dependente de mașină. În special, direcția de trunchiere a numerelor negative variază de la mașină la mașină. Dacă spațiul oferit pentru valoare este insuficient, rezultatul este nedefinit.
Conversia unei valori integrale într-un tip float funcționează bine. Dacă implementarea hardware nu are biții necesari, apare o oarecare pierdere de precizie.
Indicatori și numere întregi
O expresie de tip întreg poate fi adăugată sau eliminată dintr-un pointer; într-un astfel de caz, primul este transformat, așa cum este indicat în discuția despre operația de adunare.
Puteți efectua scăderea peste două pointeri către obiecte de același tip; în acest caz rezultatul este convertit la tipul int sau long în funcție de mașină.
Ori de câte ori se combină un întreg fără semn și un întreg obișnuit, întregul obișnuit este convertit în tipul nesemnat și rezultatul este de tip nesemnat.
Valoarea este cel mai mic număr întreg fără semn egal cu un număr întreg cu semn (mod 2** (dimensiunea cuvântului)) (adică mod2** (dimensiunea cuvântului)). În reprezentarea binară complement, această conversie este goală și nu are loc nicio schimbare reală în reprezentarea binară.
Programele noastre simulează lumea. Oricine ia în serios postulatele OOP se va confrunta rapid cu faptul că procesul de modelare în cadrul acestei metode este fundamental nedeterminist. Să discutăm mai detaliat.
Aici și mai departe voi lua în considerare un exemplu de carte generală cu angajații unei întreprinderi; vom scrie ceva asemănător SI. Moștenirea clasei Employee din clasa Person este o idee grozavă, mai ales dacă stocați datele exclusiv în memorie: SQL are unele probleme cu moștenirea tabelelor, dar nu acesta este ideea - OOP cu ierarhia, agregările, compozițiile și moștenirile sale oferă idealul mod de organizare a datelor. Probleme cu metodele.
În spatele fiecărei metode de logica de afaceri există un fapt din lume pe care această metodă (de obicei nu singură) o modelează. Faptele de programare sunt operații: de acum înainte le vom numi așa. Făcând o metodă un membru al unei clase, OOP ne cere să legăm o operație la un obiect, ceea ce este imposibil, deoarece o operație este interacțiunea dintre obiecte (două sau mai multe), cu excepția cazului unei operații unare, reflexie pură. . Metoda PaySalary poate fi atribuită claselor Angajat, Numerar și Cont - toate au drept de proprietate egal. Dilema cu privire la localizarea metodelor însoțește întregul proces de dezvoltare: rezoluția sa incomodă poate fi critică și chiar fatală.
În cărțile de programare, autorii onești recunosc cu timiditate că „obiectele nu sunt, așa cum ar fi, cu adevărat obiecte”, iar OOP este doar o modalitate de organizare a codului, și nu un mecanism de modelare. Dar ideea este că „lumea este o colecție de fapte, nu lucruri” - de unde și incapacitatea fundamentală de a construi un model adecvat folosind POO în forma cerută de scriitorii de manuale. Este important de înțeles: este posibil să modelezi lumea în cod, dar atomii modelului ar trebui să fie fapte, nu obiecte.
Americanii sunt pe deplin investiți în literatura mondială și cu atât mai mult în literatura în limba engleză. Este mai bine să spunem că așa-numita epocă de aur a ficțiunii americane este una dintre ultimele runde de dezvoltare a literaturii mondiale, dacă nu ultima.
În 2015, este posibil să fi observat o schimbare în modul în care sunt dezvoltate aplicațiile JavaScript. Dezvoltatorii se îndepărtează de la arhitecturile de stat mutabile imprevizibile către arhitecturi de aplicații mai previzibile imuabile.
Cu cadre precum Backbone, era obișnuit să sincronizați datele în sine și prezentarea datelor - pentru a face acest lucru, trebuia să vă abonați manual la evenimentele dom necesare. Această metodă a fost predispusă la erori și a necesitat prea mult cod boilerplate. Angular a venit și a remediat acest lucru cu legarea automată în două sensuri.
Dar acum lucrurile se mișcă într-o altă direcție.
… dar este normal. Tot designul este nasol. Și va fi întotdeauna nasol.
Dacă nu mă crezi, lasă-mă să explic...
Nici un singur proiect nu supraviețuiește întâlnirii sale cu implementarea
Când începi să implementezi ceea ce ai proiectat, întâlnești inevitabil lucruri în realitate care nu corespund așteptărilor tale inițiale.
Datele despre care te așteptai să fie solicitate în răspunsul de la serviciul extern pot lipsi (sau invalide). Unicitatea așteptată poate să nu fie deloc unică în practică (chiar și în sha1 uneori apar coliziuni). Procesele care trebuiau să fie de încredere vor eșua mult mai des decât v-ați așteptat.
Este în regulă.
În unele cazuri, puteți pur și simplu să expirați, să aruncați o excepție sau, altfel, să eșuați cu voce tare. În alte cazuri, este necesar să se relaxeze cerințele sistemului. Sau adăugați un strat de filtru suplimentar, care va „curăța” și se va transfera deja varianta corecta date de intrare.
Datele lipsă pot fi opționale sau înlocuite implicit.
Datele incorecte pot fi tratate ca lipsă sau le puteți scrie „ca atare” și adăugați o versiune validată suplimentară, care este prezentă numai dacă originalul este valid.
Constrângerea de unicitate poate fi
În timp ce citeam, mi-am adus aminte de celebra frază a lui Edsger Dijkstra: „Mă rog zilnic ca mai mulți dintre colegii mei programatori să găsească mijloacele de a se elibera de blestemul de compatibilitate") din cartea The Humble Programmer (1972 sic!!!). Și mai târziu Eric Raymond cu Catedrala și Bazarul (1997). Dar textul lui Vinge nu este doar despre blestemul compatibilității; pe trei pagini, se ridică un întreg strat de întrebări (și, în general, rămân fără răspuns):
- Problema compatibilității în sens larg;
- Problemă la suportarea codului vechi;
- Problemă de dependență viata umana„de la roboți fără emoții” (c), de care ne apropiem cu repeziciune;
- Problema extragerii de date în general și găsirea unei soluții gata făcute într-un butoi fără fund de rețete în special (github, stack overflow?);
- Problema „rescrierii” codului vechi (atât rău, cât și bun) – acest moment mă face să vreau să-l recitesc :);
- Problema imensității tehnologiilor IT. Uneori se spune că ultimul fizician universal a trăit la mijlocul secolului trecut, adică Lev Landau. Se pare că vine momentul (sau a venit deja) când nu mai este posibil să găsești un programator universal;
- Textul nu conține cuvântul hacker, fie într-o conotație pozitivă sau negativă. Dar este scris și despre cercetători și despre beneficiile care pot fi obținute prin cunoașterea anumitor uși din spate și ce fel de putere poate oferi aceasta.
- si probabil asta nu e tot... :)
Avem impresia că aceasta a fost scrisă de o persoană care s-a confruntat direct cu aceste probleme.
Aș dori să remarc că „Depth in the Sky” a fost scris în 1999, când o mare parte din ceea ce scrie Vinge nu era încă o problemă, sau chiar a apărut la orizont.
Ca o critică, aș dori să observ că Vinge a ignorat AI (atât puternic, cât și slab, i-a ratat-o complet, nici măcar nu a atins rețelele neuronale) și a redus avantajele IT la productivitate. De asemenea, prezența megacorporațiilor nu se simte în text (deși, desigur, „Depth in the Sky” nu aparține cyberpunk-ului), decât dacă îl considerați pe Keng-Ho ca atare. Nu există războaie de brevete, problema drepturilor de autor și problema dezvoltărilor de proprietate închisă, ale căror coduri sursă nu au fost niciodată publicate, nu sunt abordate.
Nu despre programare, ci despre standarde
Mai târziu, în același capitol, vom aborda cea mai interesanta intrebare radiodifuziune galactică în scopul diseminării propriilor tehnologii. Pentru ce? Standardizare. Diseminarea propriei noastre limbi și a propriilor noastre standarde și tehnologii, care, pe de o parte, va aduce civilizațiile înapoiate la un nivel acceptabil pentru comerț și, pe de altă parte, va reduce costurile de comunicare și de a asigura compatibilitatea și, ca rezultat, facilitarea comerțului și creșterea marjelor. Mă întreb dacă Vinge, la momentul scrierii cărții, știa despre standardizarea echipamentelor navelor din flota engleză în timpul marilor cuceriri, ceea ce a făcut posibilă reducerea costurilor de reparații și întreținere? Și despre distribuție în limba engleză ca afacere, științific etc.? Britanicii le-au predat (obligați să predea?) aborigenii locali limba lor. Spaniolii și francezii au făcut la fel. Și acum engleza, spaniola, franceza și portugheza sunt foarte răspândite. Dar olandezii credeau că aborigenii nu trebuie să li se învețe limba. Există multe locuri pe glob unde se vorbește olandeza în afară de Olanda?
În zilele noastre, predarea limbii engleze este introdusă în întreaga lume. Utilizarea de metode și manuale standardizate, examene standardizate și bareme de notare. Este doar afaceri private?
Mai jos este cel mai interesant fragment din text. Există o mulțime de lucruri interesante în roman care nu sunt legate de programare; nu degeaba a câștigat mai multe premii. Așa că recomand să-l citiți, iar în original; traducerea pe care am dat-o nu este foarte bună.
Lectura placuta:)
Nimeni nu este interesat de codul meu. Am fost șocat când mi-am dat seama de asta în timp ce lucram ca programator. Am petrecut mult timp perfecționându-mi codul până mi-am dat seama că nimeni nu este interesat de el, pentru că nu codul în sine a contat, ci produsul. Acceptarea acestui fapt de către programator va duce la creșterea productivității și a valorii muncii sale.
Diferența dintre un produs și un proiect este că în dezvoltarea unui produs există un plan, în timp ce în dezvoltarea unui proiect există cercetare. Dacă aveți o problemă nerezolvată, să spunem că nu ați decis încă ce bază de date să utilizați în proiectul dvs., atunci va trebui să studiați această problemă, adică să o cercetați. Aceasta se numește cercetare tehnologică. Cercetare, acest lucru nu este deloc necesar, ceva complet nou la scară globală, dacă construiți un pod, atunci trebuie să studiați solul în acest loc anume și până când acest sol este studiat, podul, ca produs, nu există încă, deocamdată el - proiect. Nu se știe încă ce fel de sol este, ceea ce înseamnă că nu se știe din ce să facă podul, cum să-l întărească, este imposibil să se calculeze bugetul și să se planifice programul de lucru.
Cine stie sa copieze stie sa faca. Leonardo da Vinci a spus asta. Vezi, pornești de la ideile tale despre ce sunt XP, Windows și un sistem de operare. Oamenii vorbesc așa:
Eram încă tânăr, aveam XP, erau zilele de aur, dar acum nu mai e ca înainte. Vremuri noi, software modern. Nu înțeleg de ce să sapă prin chestii vechi? Ai putea măcar să faci o clonă de Windows 10, dar cu viteza ta, o vei reuși în 100 de ani.
Dar dacă oamenii copiază software vechi, asta nu înseamnă că sunt retrogradi sau necrofili. În primul rând, o fac acum, fiind în conditii moderne, cunoscând toate tendințele și direcțiile. În al doilea rând, învechirea software-ului este în general un lucru extrem de contra-intuitiv. De exemplu, în cele mai moderne aplicații există bucăți de cod scrise cu mai bine de douăzeci de ani în urmă și, rețineți, nimeni nu le va rescrie. Aceasta este o informație, nu se uzează așa cum se uzează metalul sau lemnul. Dar oamenii tind să-și traducă percepțiile de zi cu zi în lucruri intangibile care necesită o viziune complet diferită. Înțelegi? Informație. Nu este un lucru. Comparați cu poeziile lui Pușkin.
Din ce în ce mai des, oamenii au început să spună că filosofia s-a pierdut ca știință. Că timpul lui Aristotel, Democrit și Socrate a fost sfârșitul dezvoltării filozofiei și că acum oamenii sunt ocupați cu științele exacte și nu mai este loc pentru filozofie. Dar filosofia este o privire asupra lucrurilor din jurul nostru și o definiție a sinelui în această lume. Din cauza progres tehnic Omul a primit noi moduri de a studia lumea din jurul lui, precum și noi moduri de a influența lumea și pe sine. Noi oamenii trebuie să înțelegem ce loc ocupăm în rândul progresului tehnologic, deoarece tehnologia deschide noi oportunități în dezvoltarea întregii omeniri și ascunde, de asemenea, un mare pericol.
Programarea este adesea comparată cu arta. Acest lucru este justificat de faptul că, odată cu creșterea complexității programelor, este nevoie de oameni cu pregătire specială și, chiar mai important, cu un mod special de gândire care să poată „respira viața” unui creier electronic din ce în ce mai complex. Conceptul de „informație” joacă un rol important în înțelegerea proceselor profunde de programare. Informația este cunoștințele pe care o persoană le-a transferat din creierul său pe un mediu material sau electronic.
De asemenea, este dificil să nu ținem cont de influența inversă a computerelor asupra gândirii umane. Cum se schimbă viața unei persoane și valorile sale spirituale sub influența progresului tehnologic.
Un fapt interesant este că programele ne influențează nu numai pe tine și pe mine – consumatorii de produse electronice, ci și pe programatorii înșiși. Creatorul programului, în timp ce lucrează, gândește în categorii de mașini și începe să transfere acest lucru oamenilor care îl înconjoară. Când lucrează cu un computer pentru o perioadă lungă de timp, un programator dezvoltă o mentalitate specială. Calculatorul are nevoie de instrucțiuni precise pentru a efectua operațiunile specificate.
Gândirea la computer
Când pictează un tablou, artistul are un moment în care aplică ultima lovitură, terminând astfel pictura. Același lucru este valabil și atunci când scrieți un program. Și din momentul în care programatorul trimite programul în viața „mare”, acesta începe să trăiască independent. Aici putem cita un astfel de concept ca „inteligență artificială”; este legat de conceptul de „creier”, precum și de „gândire”. Desigur, creierul uman și computerul nu au nimic în comun în exterior, dar pot fi găsite asemănări. .
Abilități umane unice, cum ar fi vorbirea și auzul muzical, capacitatea de a gândire abstractă sunt funcții ale structurilor neurodinamice ale creierului care sunt relativ stabile. Există o asemănare completă între activitatea creierului uman și activitatea proceselor programelor de calculator. Când un computer funcționează, se folosesc impulsuri electrice care trec prin milioane de tranzistori (precum și impulsuri care trec prin neuroni). Dar acest proces poate fi numit gândire? La urma urmei, gândirea este un proces activ de reflectare a lumii obiective în concepte, judecăți, teorii etc., asociate cu rezolvarea anumitor probleme.
Există bun exemplu de un fel numit sisteme de autoînvățare. Aceste sisteme, prin încercare și eroare, colectează informații despre o decizie pozitivă și ulterior operează cu aceste informații pentru a ieși corect dintr-o situație similară. Putem concluziona că sistemele de autoînvățare „învață” lumea, dar tind ele să facă inferențe? Desigur că nu. Sistemul funcționează pe baza experienței acumulate, iar dacă situația este chiar puțin diferită de cea în care se aflau, atunci va „ajunge” într-o fundătură. Ei nu au posibilitatea de a evita o anumită situație și, indiferent cât de bine este scris programul, acesta selectează doar o soluție, iar dacă situația nu este familiară computerului, aceasta va eșua.
Acest lucru duce la concluzia că acum programele de calculator, precum și computerele, nu pot gândi.
Partea morală a programării
Expresia „virusuri de computer” a devenit ferm stabilită în viața noastră. O persoană care a întâlnit un computer a auzit acest termen, iar unii au întâlnit direct efectele lui distructive. Și totuși, care sunt acești viruși informatici? Acestea sunt programe special scrise care schimbă algoritmul altor programe, șterg datele și împiedică utilizatorul să funcționeze normal.
Aceste programe sunt scrise de oameni, dar întrebarea este: ce motivează această persoană?
Majoritatea virușilor, bazați pe practică, nu au fost creați de teroriști, ci de oameni care vor să-și demonstreze superioritatea, să arate că pot face ceea ce alții nu pot. Acești oameni sunt capabili să muncească, dar adesea o fac din lenevie. Acești oameni sunt genul de oameni care se angajează în acte de vandalism. Sunt conduși de dorințe conflictuale. Dacă această persoană are abilitățile necesare, atunci s-ar putea să scrie un virus de computer.
Standardele etice ale societății, în care se generează experiența morală umană, au o atitudine negativă față de vandalism și, în consecință, față de virușii informatici ca manifestare a vandalismului. Și, desigur, dacă o persoană cu principii morale înalte, atunci înainte de orice cod de program, el se va gândi de mai multe ori că acest program va beneficia alți oameni, dacă acest program de calculator va aduce zâmbete oamenilor și când programatorul va răspunde la acestea. întrebări, se va pune la treabă. Și numai astfel de oameni vor deveni programatori profesioniști care se îndreaptă spre crearea a ceva bun.
Concluzie.
Aspectele discutate în acest articol sunt ample și nu pot fi acoperite pe deplin într-un singur articol. Programarea, ca știință tânără și în curs de dezvoltare, are nevoie viziune filozofică. Problemele descrise în acest articol pot fi considerate ca parte a problemelor filozofice legate de progresul științific și tehnologic. Acestea și multe alte întrebări filozofice pe care ni le pune revoluția științifică și tehnologică încă necesită înțelegere filozofică și atenția sporită a filosofilor moderni.
Bibliografie
- Varfolomeeva T.N., Ovchinnikova I.G. Tutorial asupra programarii. [Text]: manual. manual / Magnitogorsk: MaSU, 2005. Clasificat ca UMO. – 104 s.
- Varfolomeeva T.N., Ovchinnikova I.G., Platonova O.I. Metodologii de programare. [Text]: manual. manual / Magnitogorsk: MaSU, 2007. – 204 p.
- Varfolomeeva, T.N. Atelier de laborator de programare orientată pe obiecte. [Text]: manual. indemnizatie / T.N. Varfolomeeva, I.Yu. Efimova - Moscova, 2014. (ediția a II-a, stereotip)
- Varfolomeeva, T.N. Atelier de laborator de programare structurată folosind exemplul limbajului PASCAL [Text]: manual. indemnizatie / T.N. Varfolomeeva, S.A. Povitukhin. – Magnitogorsk: MaSU, 2013. – 123 p.
- Varfolomeeva, T.N. Un manual pentru pregătirea pentru examenul de stat unificat și CT în informatică [Text]: manual. manual în 2 părți, vol. Partea 1. Algoritmizare și programare / T.N. Varfolomeeva, I.G. Ovchinnikova. – Magnitogorsk: MaSU, 2006. – 128 p.
- Varfolomeeva, T.N. Manual de pregătire pentru testarea centralizată în informatică [Text]: manual. indemnizatie / T.N. Varfolomeeva, I.G. Ovchinnikova, N.G. Korneshchuk Magnitogorsk: MaSU, 2002. – 205 p.
- Varfolomeeva, T.N. Manual educațional și metodologic pentru pregătirea examenelor de admitere în informatică [Text]: manual. indemnizatie / T.N. Varfolomeeva, I.G. Ovchinnikova, E.N. Guseva Magnitogorsk: MaSU, 2002. – 116 p.
- Efimova, I.Yu. Modelare computerizată [Text]: colecție munca practica Ediția a II-a, stereotipă / I.Yu. Efimova, T.N. Varfolomeeva. – Moscova: Flinta LLC, 2014. – 67 p. ISBN: 978-5-9765-2039-4
- Efimova, I.Yu. Metode și tehnologii de predare a informaticii în institutii de invatamant învăţământul profesional[Text]: metodă educațională. manual ediția a 2-a, stereotip / I.Yu. Efimova, T.N. Varfolomeeva. – Moscova: Flinta LLC, 2014. – 41 p. ISBN 978-5-9765-2040-0
- Movchan I.N. Abordări inovatoare ale predării informaticii la universități // Modern Cercetare științificăși inovație. – 2014. – Nr 5-2 (37). – P. 45.
- Movchan I.N. Câteva aspecte ale formării informaționale pentru studenții universitari // Colecție lucrări științifice Sworld. – 2008. T.18. – Nr 1. – P. 34-36.
- Movchan I.N. Controlul pedagogic al activităţii informaţionale a unui universitar în procesul de formare profesională: dis. ...cad. ped. Științe/Movchan Irina Nikolaevna; Universitatea de Stat Magnitogorsk. – Magnitogorsk, 2009, – 205 p.
- Ovchinnikova I.G. Evaluarea eficacității educației personalității [Text] / I.G. Ovchinnikova, V.A. Belikov, L.V. Kurzaeva // Parteneriatul social în învățământul profesional Procesele conferinței științifice și practice din întreaga Rusie. FGOU SPO „Colegiul Pedagogic Vocațional de Stat Magnitogorsk”, Laborator pentru cercetarea problemelor managementului calității învățământului profesional primar și secundar al Filialei Ural a Academiei Ruse de Educație: colecție. științific Artă. Magnitogorsk, 2010. – P. 178-187.
- Ovchinnikova, I.G. Cartea de probleme-atelier de programare [Text]: metodă educațională. indemnizatie. / IG. Ovchinnikova, T.N. Varfolomeeva. – Magnitogorsk: MaSU, 2009. – 77 p.
- Sakhnova T.N., Ovchinnikova I.G. Algoritmi de căutare în cursurile de informatică liceu[Text] // Informatică și educație. – 2010 – Nr. 11 – P. 79-83.
- Sakhnova T.N., Ovchinnikova I.G. Algoritmi de sortare pentru rezolvarea problemelor de programare [Text] // Informatică și educație. – 2011. – Nr 2 – P. 53-57
- Sakhnova, T.N. Bazele algoritmizării [Text]: manual. manual, ed. a 2-a, revizuit. si suplimentare / T.N. Sakhnova, I.G. Ovchinnikova. – Magnitogorsk: MaSU, 2002. sub ștampila UMO. – 131 p.
- Sakhnova, T.N. Condiții pedagogice pentru formarea gândirii informaționale profesionale a studenților universitari [Text]: dis. ...cad. ped. Științe: 13.00.08 / T.N. Sahnova. – Magnitogorsk, 2003.
- Sakhnova, T.N. Un manual pentru pregătirea pentru examenul de stat unificat și CT în informatică [Text]: manual. manual în 2 părți, vol. Partea 2. Curs de bază / T.N. Sakhnova, I.G. Ovchinnikova. – Magnitogorsk: MaSU, 2006. – 128 p.
- Chusavitina, G.N. Dezvoltarea unui model de gestionare a riscurilor generate de utilizarea telecomenzii tehnologii educaționale la universitate [Text] / G.N. Chusavitina, M.O. Chusavitin, T.N. Varfolomeeva // Îmbunătățirea pregătirii specialiștilor IT în direcția „Informatică Aplicată” pentru economia inovatoare: colectare. științific tr. Moscova, 2008. – P. 216-218.
Ar putea fi util să citiți:
- Cum să găsesc copii pe Aliexpress?;
- Cum să mărești o imagine fără a pierde calitatea;
- Revizuirea mai multor dispozitive Comparați tabletele după caracteristici;
- Revizuirea jocurilor pe ps3. Cele mai bune jocuri pentru PS3. Top #10 cele mai bune jocuri pentru PS3;
- Tastatura implicită pe Android: cum să o configurați;
- Continuăm să conectăm dispozitivele USB-Host la placa de sunet Android pentru un telefon Android;
- Efectul cafelei asupra acneei și stării pielii;
- Botezul unui copil - efectuarea sacramentului;