Filozofija programerja. Povzetek: Filozofski vidiki programiranja
Se splača učiti programiranja?
"Programiranje" je zelo širok pojem. Nekateri programski jeziki so veliko lažji od drugih. Nekateri jeziki zahtevajo razumevanje, kako se program "pogovarja" z računalnikom. Najpomembnejši del učenja kod je vzdrževanje prava poteza razmišljanje. Bistvo ni v tem, da si rečete "jaz to zmorem" ali da preberete potrebno literaturo ...
Bistvo je to ...
Učiti se ali ne programirati?
Pismenost v katerem koli računalniškem jeziku, od preprostega HTML do zapletenega C++, ne zahteva samo predanosti tehnologiji, ampak njenim neskončnim spremembam. HTML5 se z razlogom konča s številko. Ko bo dovolj spletnih brskalnikov podpiralo HTML6, se bodo morali razvijalci znova učiti novih stvari.
Možni razlogi, zakaj bi se želeli vključiti v nov učni proces:
- Pridobite zaupanje: Imel sem več strank, ki so mislile, da jih bodo računalniki manj bali, če obvladajo programski jezik.
- Nujnost: tehnične težave se lahko pojavijo kadarkoli.
- Vznemirjenje: nekateri ljudje se samo želijo naučiti novih veščin.
- Da bi razumeli, kaj je mogoče: ko razvijalec reče: "To je nemogoče narediti!" Ali s tem misli, da to res ni mogoče, ali preprosto noče prevzeti tega glavobola?
Vedno bodi radoveden
Nihče ne želi biti hrošč na svojem vetrobranskem steklu. Kar se mene tiče, ljudi ne straši strah pred neuspehom, ampak strah pred možnostjo izgube. Prevladujoči brezup spodbuja občutke manjvrednosti. Pogum in vztrajnost nista protistrup proti preobremenjenosti, a pravočasen postanek, preden vas ta občutek prevzame, bo najboljše zdravilo.
Imam tri pristope k reševanju težave pri katerem koli projektu:
- Poiščite temo, ki vas moti
Čas in plačilo sta dobra. Toda nič vam ne bo dalo večjega zagona kot srbečica, ki je ni mogoče doseči. V obetavni prihodnosti programiranje ne bi smelo biti samo sebi namen. Služiti mora kot vaša "mast za škripajoča vrata."
- Za dodatni trud bi morali biti nagrajeni
Po odkritju pregovorne srbečice bi se morali sprostiti tudi ljudje, ki študirajo programiranje. Nobena navodila, nobeno orodje, nobena pohvala ne bo nikomur pomagala postati mojster CODE. Šele po besedah "To sem napisal in ... poglejte, kaj sem naredil!" čutili boste, da ste premagali oviro. Slišalo se bo neumno, dokler ne poskusite sami. Preizkušena koda, ki deluje, vam bo dvignila adrenalin in se boste počutili, kot da ste postali mojster računalniškega programiranja.
- Vaš projekt bi moral biti narejen, dokler imajo vaši možgani apetit.
Vadite svoje možgane. Pri polnjenju trenerji spodbujajo ljudi, naj se nekoliko presežejo svojo mejo. Učenje je lakota. Vaši možgani imajo vedno apetit po novem znanju.
Vadite vsak dan
Edini način, da se naučite programiranja in si ga za vedno zapomnite, je vsak dan vaditi. Tako kot pri učenju katere koli nove veščine bo dosleden delovni urnik z novimi cilji postopoma izpilil vaše sposobnosti do meje.
Immanuel Kant, prevarant filozofije, se je domislil velike stvari za Angosticizem. Tako imenovana "stvar sama po sebi". Izredno zanimiva zadeva.
Čip je naslednji: v običajnem epistemološkem procesu obstaja povezava objekt-subjekt. Tisti. vedno obstaja predmet, ki ga subjekt pozna.
Obstaja veliko pogledov, ki se jih naučimo (idealizem, materializem in njihovi poznejši tokovi), eden je tukaj Kant presegel vse.
Po njegovem razumevanju lahko stvar spoznaš le, če ti to omogoča. Na primer, če se stvar noče odpreti, ne boste nikoli vedeli, da je lesena, tudi če jo razrežete.
Tisti. daje voljo objektu tako, da ga enači s subjektom. Torej, dokler ti poznaš stvar, bo stvar poznala tebe. Odnosi na različnih ravneh so se preselili na isto raven.
Zdi se noro, a potrditev te hipoteze je mogoče najti povsod. Na primer Malevičev črni kvadrat. Mnogi menijo, da je le črni kvadrat, medtem ko drugi vidijo globok pomen.
Povsem mogoče je, da se vam trg preprosto ni odprl, ampak je nekdo našel vpogled v njem. In takih primerov je veliko. Navsezadnje pogosto veliko ljudi gre mimo nečesa, potem pa ena oseba nenadoma naredi odkritje / izum dobesedno naprej preproste stvari ki so ležali okoli nas, pa jih »nismo opazili«. Mogoče ni bistvo v tem, da jih nismo opazili, ampak da se nam stvari niso odprle? Ta izjemno kontroverzen in zanimiv položaj ima zelo realne možnosti za obstoj v resnici.
Na primer, če bi bilo vesolje ogromen program, ali bi ustvarjalec želel ustvariti različne razrede za opis različnih predmetov? Kako ne, ker vse teži k minimalni porabi energije, vsak je len, kolikor more. Da se torej ne bi preveč mučili, bo univerzalni programer ustvaril samo en razred za vse objekte. In obravnavati mora samo eno vrsto interakcije med objekti. In čisto možno je, da prav zaradi tega objekt drugega objekta razume šele takrat, ko se mu odloči odpreti.
Druga zanimiva ugotovitev je pogled na svet in vrednote.
Vrednote ta svet, oblikujejo naš pogled na svet, ta pa oblikuje naše vrednote.
Ta začarani krog se zlahka odraža v programiranju:
Funkcija Poravnava(Vrednosti) Vrednosti = Algoritem za izračun vrednosti() Povratne vrednosti Končne funkcije Glavna programska zanka (neomejeno ponavljanje)( Vrednosti = Algoritem(Vrednosti) ) Končni program
Med filozofijo in programiranjem je veliko podobnih zanimivih povezav.
Kot veste, lahko računalnik zapisuje besede (besedilo) in predmete (3D modele, slike). Edina vrzel, ki stoji na poti ustvarjanja AI, je koncept. Tisti. tisto, kar povezuje besedo in predmet. Če lahko nekdo ugotovi, kako v stroj potisniti sistem konceptov, potem bo umetna inteligenca ustvarjena.
Dmitrij Jakušev
"filozofija"
C++ programiranje
druga izdaja, povečana in popravljena
UDK 004.43 BBK 32.973.202
Jakušev D.M.
Ya49 "Filozofija" programiranja v C++. / D. M. Jakušev. - 2. izd. - M .: Buk press, 2006. - 320 str.
ISBN 5 9643 0028 6
Avtor jezika C++ je Bjarne Stroustrup, uslužbenec znanega podjetja AT&T. C++ (oziroma njegov predhodnik, C z razredi) je nastal pod vplivom jezika Simula (moram reči, da se je ta programski jezik pojavil leta 1967). Pravzaprav si je do takrat, ko se je pojavil C++, C že prislužil popularnost; poklicni programerji ga častijo, ker lahko izkoristi prednosti določene arhitekture, medtem ko ustvarja programe v jeziku, ki je relativno visoka stopnja.
C++ je danes eden najbolj priljubljenih (če ne celo najbolj priljubljen) programskih jezikov. Prav C++ omogoča pisanje programa z uporabo objektno usmerjenih pristopov (in programi, ki to zahtevajo, so običajno zelo veliki) in hkrati dovolj "hitri".
Ta knjiga bo bralca seznanila s "filozofijo" in osnovami programiranja C++. Knjiga vsebuje veliko primerov, ki jih je sestavil in preveril avtor.
UDK 004.43 BBK 32.973.202
1. del.
Poglavje 1. C++ je splošni programski jezik. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3
Poglavje 2. Besedišče. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6 Poglavje 3. Sintaksa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 Poglavje 4. Obseg. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11 Poglavje 5. Definicije . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12 Poglavje 6. Postavitev . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 Poglavje 7. Razredi spomina. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 Poglavje 8. Osnovni tipi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 Poglavje 9. Izpeljani tipi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14 Poglavje 10. Objekti in LVALUE (naslovi) . . . . . . . . . . . . . . . . . . . . . . . . .15 Poglavje 11. Simboli in cela števila. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15 Poglavje 12. Transformacije. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17 Poglavje 13. Izrazi in operacije . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18 Poglavje 14. Opisi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31 Poglavje 15. Specifikatorji pomnilniških razredov. . . . . . . . . . . . . . . . . . . . . .31 Poglavje 16. Deskriptorji. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34 Poglavje 17. Opisi razredov . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39 Poglavje 18. Inicializacija. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51 Poglavje 19. Preobremenjena imena funkcij. . . . . . . . . . . . . . . . . . . . .58 Poglavje 20. Opis naštevanja. . . . . . . . . . . . . . . . . . . . . . . . . . . . .59 Poglavje 21. Opis Asm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60 Poglavje 22. Operatorji. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61 23. poglavje Zunanje definicije. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66
24. poglavje Ukazne vrstice prevajalnik. . . . . . . . . . . . . . . . . . . . .68 Poglavje 25. Pregled vrst. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .70 Poglavje 26. Premisleki glede mobilnosti. . . . . . . . . . . . . . . . . . . . . . . . . .75 Poglavje 27. Prosti pomnilnik. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76
Del 2. Turbo C++
Poglavje 1. Integrirano razvojno okolje. . . . . . . . . . . . . . . . . . . .78 Poglavje 2. Menijska vrstica in meniji. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79 Poglavje 3. Okna TURBO C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79 Poglavje 4 Delovanje zaslonskega menija . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80
Poglavje 5. Struktura datoteke, tipi podatkov in V/I operaterji. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
Poglavje 6. Aritmetične, logične operacije ter operacije relacije in prirejanja. . . . . . . . . . . . . . . . . . . . . . .91
Poglavje 7. Logična organizacija programa in najenostavnejša uporaba funkcij. . . . . . . . . . . . . . . . . . . . . . . . . .95
Poglavje 8. Logična organizacija preprostega programa. . . . . . . . . . .95 Poglavje 9. Uporaba konstant različne vrste. . . . . . . . . . . . .96 Poglavje 10. Nadzorne strukture . . . . . . . . . . . . . . . . . . . . . . . . . . . .98
11. poglavje
pri delu z nizi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .100
Del 3. Od teorije do prakse
Poglavje 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .103 Poglavje 2. STLport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104 Poglavje 3. Microsoftov programski jezik: C# . . . . . . . . . . . . . .106 Poglavje 4. C++ Builder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .108 Poglavje 5. Uporaba "pametnih" kazalcev. . . . . . . . . . . . . . . . . . . . . .111 Poglavje 6. Razmišljanje o "pametnih" kazalcih. . . . . . . . . . . . . .116 Poglavje 7. Virtualni destruktorji . . . . . . . . . . . . . . . . . . . . . . . . . . . .122 Poglavje 8. Zapis podatkovnih struktur v binarne datoteke. . . . . . . . . . . .126
9. poglavje . . . . . . . . . . . . . . . . .132 Poglavje 10. Virtualni konstruktor. . . . . . . . . . . . . . . . . . . . . . . . . . .136 Poglavje 11. Branje izvornih besedil. . . . . . . . . . . . . . . . . . . . . . . . . . . .141 Poglavje 12. Funkcija gets() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .143 Poglavje 13. Lastnosti. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146 Poglavje 14. Komentarji. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .149 Poglavje 15. Spletno programiranje . . . . . . . . . . . . . . . . . . . . . . . . . . . . .154 Poglavje 16. Napake pri delu s pomnilnikom. . . . . . . . . . . . . . . . . . . . . . . . . .158 Poglavje 17. Ustvarjanje risb s plotikusom . . . . . . . . . . . . . . .161 Poglavje 18. Avtomatizacija in motorizacija aplikacij. . . . . . . . . . .164 Poglavje 19. Pregled prevajalnikov C/C++ EMX in Watcom . . . . . . . . . .183 Poglavje 20. Uporaba direktive #import. . . . . . . . . . . . . . . . . . .188
21. poglavje
Windows na Borland C++Builder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .204 Vprašanja in odgovori. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .214
S znanstvena in poljudna publikacija
Jakušev Dmitrij Mihajlovič
"FILOZOFIJA" PROGRAMIRANJA C++
Glavni urednik B. K. Leontiev
Glavni urednik A. G. Benetashvili
Izvirna postavitev I. V. Tsarika
Umetnik O. K. Alekhin
Likovni urednik M. L. Mishin Tehnični urednik K. V. Šapiro
Lektorji L. S. Zimina, K. V. Tolkacheva
Podpisano za objavo 07.05.2006. Format 60x90/16. Slušalke "Newton". Ofsetni papir. Offset tisk. Peč. l. 20. Naklada 3000.
Uvod v programski jezik C++ | ||
1. del. Uvod v jezik
programiranje c++
C++ - splošni programski jezik
Avtor jezika C++ je Bjorn Stroustrup, uslužbenec znanega podjetja AT&T. C++ (natančneje njegov predhodnik C z razredi) je nastal pod vplivom Simule (treba je reči, da se je ta programski jezik pojavil že leta 1967). Pravzaprav si je do takrat (ko se je pojavil C ++) C že prislužil popularnost; običajno je zelo spoštovan, ker lahko izkorišča značilnosti določene arhitekture, medtem ko še vedno uporablja jezik na relativno visoki ravni. Res je, običajno ga ravno zaradi tega ne marajo. Seveda so s tem izgubljeni (ali popačeni) nekateri principi gradnje programa; na primer, v C praktično ni možnosti ustvarjanja modularnih programov. Ne, seveda so ustvarjeni, vendar s pomočjo nekaterih "bergel" v obliki uporabe predprocesorskih direktiv - ni takšne modularnosti kot na primer v Moduli 2 ali Adi v C. Mimogrede, v C++ še vedno ni tako.
Že na samem začetku je bilo poudarjeno, da je C++ razvoj jezika C, morda katerega od njegovih dialektov. To dokazuje dejstvo, da je bil prvi (še vedno obstoječ) prevajalnik cfront, ki je opravil prevajanje izvorne kode C++ v izvorno kodo C. To mnenje še vedno obstaja in moram reči, da še vedno ni neutemeljeno; vendar C in C++ - različnih jezikih programiranje.
Glavna razlika med C++, ko se je prvič pojavil, je bila njegova izrecna podpora za objektno usmerjen pristop k programiranju. Razumeti morate, da lahko programirate z uporabo OOP in OOA kjer koli, tudi če ga komplet orodij izrecno ne podpira; kot primer lahko vzamete knjižnico uporabniškega vmesnika
Uvod v programski jezik C++ |
||
face GTK+, ki je napisan v "čistem" C in uporablja načela objektno usmerjenega "dizajna". Uvedba orodij za podporo OOP v programskem jeziku pomeni, da bo na stopnji prevajanja (in ne na stopnji izvajanja programa) preverjanje združljivosti tipov, prisotnosti metod itd. Načeloma je zelo priročno.
Še enkrat, tako kot C ni čisti programski jezik na visoki ravni (ker vam omogoča preveč trikov), C++ ni, strogo gledano, objektno usmerjen programski jezik. To ovirajo značilnosti, kot je prisotnost navideznih funkcij (ker ko govorimo o polimorfizmu, nihče nikoli ne določa, da bodo nekatere metode pri tem sodelovale, nekatere pa ne), prisotnost glavne () funkcije doslej itd. . Prav tako v C++ ni entitet, kot so metarazredi (čeprav verjetno niso zelo potrebni) in vmesniki (namesto tega se uporablja večkratno dedovanje). Kljub temu je C++ trenutno eden najbolj priljubljenih (če ne najbolj priljubljen) programskih jezikov. Zakaj? Da, saj vse te "grdote" omogočajo, da sčasoma napišete program z uporabo objektno usmerjenih pristopov (in programi, ki to zahtevajo, so običajno zelo veliki) in hkrati precej "hitro". To je omogočeno prav s prisotnostjo virtualnih funkcij (tj. tistega, kar programer sam deli v času načrtovanja, kjer potrebuje polimorfizem in kjer bo dovolj, da nekatere funkcije združimo v skupino po nekem atributu), obvezna prisotnost optimizatorja itd. Vse to omogoča, da ob pravilni uporabi še vedno napišete delujoč program. Res je, pogosto obstajajo primeri nepismene uporabe, zaradi česar se izbira C ++ za izvedbo projekta spremeni v mučenje za programerje in vodstvo.
Trenutno obstaja standard za programski jezik C++, ki med drugim vključuje standardno knjižnico predlog. Posebna razprava je o predlogah, formalno so tudi »bergle« za tako rekoč polimorfizem v fazi prevajanja (in kot take zelo uporabne), a knjižnica
Nedvomno pravilna inovativnost z vseh strani. Nenazadnje so standardni načini za razvrščanje seznama na prenosljiv (kar pomeni, od prevajalnika do prevajalnika) način (razen pisanja vseh ustreznih podprogramov in podatkovnih struktur sami) zelo olajšali življenje programerja. Res je, še vedno je veliko ljudi, ki imajo slabo predstavo o tem, kako STL deluje in kako ga uporabljati (razen za std::cin in std::cout).
Uvod v programski jezik C++ | ||
Pomemben mejnik v razvoju programiranja je bil nastanek in široka uporaba jezika C++. Ta jezik, ki je ohranil sredstva jezika C (proceduralno usmerjeni jezik), ki je postal splošno priznan standard za pisanje sistemskih in uporabniških programov, je bil uveden v
praksa programiranja možnost novega tehnološkega pristopa k razvoju programsko opremo imenovano "objektno usmerjeno programiranje".
Programski jezik C++ je C* razširjen z uvedbo razredov, vgrajenih funkcij, preobremenjenih operatorjev, preobremenjenih imen funkcij, tipov konstant, referenc, operacij upravljanja prostega pomnilnika, preverjanja parametrov funkcij.
Uvedba objektno usmerjene paradigme v prakso pisanja programov vodi v razvoj novih področij informatike, znatno povečanje stopnje izdelave ustvarjenih programskih orodij, zmanjšanje stroškov razvoja in vzdrževanja programov, njihovo ponovno uporabo, vključevanje v proces širjenja intelektualnih zmožnosti računalnikov.
Objektni pristop informacijskega modeliranja predmetnih področij se vse bolj uspešno uporablja kot podlaga za strukturiranje njihovih informacijskih refleksij in še posebej baz znanja.
C++ je splošni programski jezik. Ta jezik je znan po svoji učinkovitosti, ekonomičnosti in prenosljivosti.
Te prednosti C ++ zagotavljajo dobro kakovost razvoja skoraj vseh vrst programskih izdelkov.
Uporaba C++ kot orodnega jezika vam omogoča, da dobite hitre in kompaktne programe. V mnogih primerih so programi, napisani v C++, po hitrosti primerljivi s programi, napisanimi v zbirnem jeziku.
Tukaj je nekaj bistvenih lastnosti jezika C++:
C++ ponuja celoten nabor strukturiranih programskih operaterjev;
C++ ponuja nenavadno velik nabor operacij;
Uvod v programski jezik C++ |
||
Različne operacije vam omogočajo, da izberete njihove različne nize, da zmanjšate nastalo kodo;
C++ podpira kazalce na spremenljivke in funkcije;
Kazalec na programski objekt ustreza strojnemu naslovu tega objekta;
S premišljeno uporabo kazalcev je mogoče ustvariti programe, ki se izvajajo učinkovito, npr kazalci vam omogočajo, da se sklicujete na predmete na enak način kot to počne računalnik;
C++ podpira aritmetiko kazalcev in tako omogoča neposreden dostop in manipulacijo pomnilniških naslovov.
Poglavje 2. Besedišče
Obstaja šest razredov žetonov: identifikatorji, ključne besede, konstante, nizi, operatorji in druga ločila. Presledki, tabulatorji in znaki za novo vrstico ter komentarji (s skupnim imenom "presledki"), kot je opisano spodaj, so prezrti, razen če služijo kot ločila žetonov.
Nekaj praznega prostora je potrebno za ločevanje identifikatorjev, ključnih besed in konstant, ki bi sicer bile sosednje. Če je vhodni tok razčlenjen na žetone do danega znaka, se domneva, da naslednji žeton vsebuje najdaljši niz znakov, ki lahko sestavljajo žeton.
Komentarji
Znaki /* začnejo komentar, ki se konča z znaki */. Komentarjev ni mogoče ugnezditi.
Znaki // začnejo komentar, ki se konča na koncu vrstice, v kateri se pojavijo.
Identifikatorji (imena)
Številne operacije C++ ustrezajo strojnim navodilom in zato omogočajo neposredno prevajanje v strojno kodo;
Identifikator - zaporedje črk in številk poljubne dolžine; prvi znak mora biti črka; podčrtaj "_" šteje kot črka; velike in male črke se razlikujejo.
Podpisani in nestanovitni identifikatorji so rezervirani za prihodnjo uporabo.
Konstante
Obstaja več vrst konstant. Sledi povzetek značilnosti strojne opreme, ki vplivajo na njihove velikosti.
Celoštevilske konstante
Celoštevilska konstanta, sestavljena iz zaporedja števk, velja za osmiško, če se začne z 0 (števka nič), drugače pa za decimalno. Števki 8 in 9 nista osmiški števili.
Zaporedje števk, pred katerimi je 0x ali 0X, se obravnava kot šestnajstiško celo število.
Šestnajstiške številke vključujejo črke od a ali A do f ali F, ki imajo vrednosti od 10 do 15.
Decimalna konstanta, katere vrednost je večja od največjega strojnega celega števila s predznakom, velja za dolgo; osmiška in šestnajstiška konstanta, katere vrednost je večja od največje
Uvod v programski jezik C++ | ||
ovratnik s predznakom strojno celo število, velja za dolgo ; sicer se celoštevilske konstante obravnavajo kot int.
Eksplicitno podane dolge konstante
Decimalna, osmiška ali šestnajstiška konstanta, ki ji takoj sledi l (latinska črka "el") ali L, velja za dolgo konstanto.
Simbolične konstante
Znakovna konstanta je sestavljena iz znaka v enojnih narekovajih (apostrofih), kot je "x". Vrednost znakovne konstante je številčna vrednost znaka v strojnem nizu znakov (abeceda).
Znakovne konstante se štejejo za podatke tipa int. Nekatere negrafične znake, enojni narekovaj " in nazaj poševnico \, je mogoče predstaviti v skladu z naslednjim seznamom ubežnih zaporedij:
znak za novo vrstico NL(LF) | ||
vodoravni jeziček NT | ||
navpični jeziček VT | ||
vrnitev na korak BS | ||
vrnitev na začetek CR | ||
Prevod formata FF | ||
poševnica nazaj \ | ||
enojni narekovaj (apostrof) " | ||
bit nastavljen na 0ddd | ||
bit nastavljen na 0xddd |
Ubežno zaporedje \ddd je sestavljeno iz poševnice nazaj, ki ji sledijo 1, 2 ali 3 osmiške številke, ki določajo vrednost želenega znaka. Poseben primer te konstrukcije je \0 (sledi nobena števka), ki določa ničelni znak.
Ubežno zaporedje \xddd je sestavljeno iz poševnice nazaj, ki ji sledijo 1, 2 ali 3 šestnajstiške številke, ki določajo vrednost želenega znaka. Če znak, ki sledi poševnici nazaj, ni eden od navedenih znakov, se poševnica nazaj prezre.
Uvod v programski jezik C++ |
||
Konstante s plavajočo vejico
Konstanta s plavajočo vejico je sestavljena iz celega dela, decimalne vejice, mantise, e ali E in celega eksponenta (izbirno, vendar ne nujno s predznakom). Celo število in mantisa sta sestavljena iz zaporedja števk. Celo število ali mantisa (vendar ne oboje) se lahko izpustita; ali decimalno vejico ali (E) skupaj s celotnim eksponentom (vendar ne z obema deloma hkrati) lahko izpustimo. Konstanta s plavajočo vejico je tipa double.
Naštete konstante
Imena, deklarirana kot oštevalci, so konstante tipa
na medn.
Opisane konstante
Objekt katere koli vrste je mogoče definirati tako, da ima konstantno vrednost v celotnem obsegu svojega imena. V primeru kazalcev se za dosego tega uporablja deklarator *const; za objekte, ki niso kazalci, se uporablja deskriptor const.
Niz je zaporedje znakov v dvojnih narekovajih: "..." . Niz ima vrsto znakov in razred shranjevanja static, inicializiran je z danimi znaki.
Prevajalnik postavi ničelni (prazen) bajt \0 na konec vsake vrstice, tako da lahko program, ki pregleduje vrstico, najde konec vrstice.
V nizu mora biti znak dvojnega narekovaja " vedno pred znakom \ ; poleg tega se lahko uporabijo enaka ubežna zaporedja, kot so opisana za konstante znakov.
In končno, znak za novo vrstico se lahko pojavi samo takoj za \ ; potem sta oba -\ in znak za novo vrstico prezrta.
3. poglavje Sintaksa
Vnos sintakse
V skladu s skladenjskimi pravili zapisovanja so skladenjske kategorije v poševnem tisku, dobesedne besede in znaki pa v pisavi konstantne širine.
Uvod v programski jezik C++ | ||
Alternativne kategorije so zapisane v različnih vrsticah. Izbirni končni ali neterminalni simbol je označen z indeksom "opt", tako da (izraz opt) označuje, da je izraz v zavitih oklepajih neobvezen.
Imena in vrste
Ime označuje (označuje) predmet, funkcijo, vrsto, vrednost ali oznako. Ime je vpisano v opis programa. Ime je mogoče uporabiti samo znotraj področja programskega besedila, imenovanega njegov obseg. Ime ima vrsto, ki določa njegovo uporabo.
Objekt je območje pomnilnika. Objekt ima razred shranjevanja, ki določa njegovo življenjsko dobo. Pomen vrednosti, najdene v objektu, je določen z vrsto imena, uporabljenega za dostop do njega.
Območje vidnosti
Obstajajo štiri vrste obsegov: lokalno, datoteka, program in razred.
Lokalno
Ime, deklarirano v bloku, je lokalno za ta blok in ga je mogoče uporabiti samo v tem bloku za mestom deklaracije in v zaprtih blokih.
Izjema so oznake, ki jih je mogoče uporabiti kjerkoli v funkciji, v kateri so opisane. Imena formalnih funkcijskih parametrov se obravnavajo, kot da bi bila deklarirana.
V najbolj oddaljeni blok te funkcije.
Ime, ki je deklarirano zunaj katerega koli bloka ali razreda, se lahko uporabi v datoteki, kjer je deklarirano za mestom deklaracije.
Ime člana razreda je lokalno za njegov razred in se lahko uporablja samo v funkciji člana tega razreda, potem ko je bila operacija uporabljena za objekt njegovega razreda ali potem, ko je bila operacija > uporabljena za kazalec na predmet svojega razreda.
Na statične člane razreda in članske funkcije se lahko sklicujete tudi z uporabo operatorja ::, kjer je njihovo ime razreda v obsegu.
Uvod v programski jezik C++ |
||
Razred, deklariran znotraj razreda, se ne šteje za člana in njegovo ime pripada obsegu, ki ga zajema.
Ime je mogoče skriti z eksplicitnim opisom istega imena v bloku ali razredu. Ime v bloku ali razredu je lahko zakrito samo z imenom, deklariranim v bloku ali razredu, ki ga obdaja.
Skrito nelokalno ime je mogoče uporabiti tudi, če je njegov obseg določen z operacijo ::.
Ime razreda, skrito z imenom, ki ni ime tipa, je še vedno mogoče uporabiti, če je pred njim razred, struktura ali zveza. Ime enum enum, skrito z imenom, ki ni ime tipa, je še vedno mogoče uporabiti, če je pred njim enum.
Poglavje 5. Definicije
Deklaracija je definicija, razen če opisuje funkcije brez podajanja telesa funkcije, če vsebuje specifikator extern(1) in nima inicializatorja ali telesa funkcije ali če je deklaracija razreda.
6. poglavje Postavitev
Ime v obsegu datoteke, ki ni izrecno deklarirano kot statično, je skupno vsaki datoteki v programu z več datotekami. To je tudi ime funkcije. Za takšna imena pravimo, da so zunanja.
Vsak opis zunanje ime v programu se nanaša na isti predmet, funkcijo, razred, enum ali vrednost enum.
Tipi, navedeni v vseh deklaracijah zunanjih imen, morajo biti identični. Obstaja lahko več kot en tip, enum, vgrajena funkcija ali nekompozitna definicija const, če so definicije enake, se pojavljajo v različnih datotekah in so vsi inicializatorji konstantni izrazi.
Uvod v programski jezik C++ | ||
V vseh drugih primerih mora obstajati natanko ena definicija za zunanje ime v programu.
Izvedba lahko zahteva, da mora biti sestavljena const, uporabljena tam, kjer ni definicije const, izrecno deklarirana s strani extern in imeti natanko eno definicijo v programu. Enaka omejitev se lahko naloži za vgrajene funkcije.
7. poglavje
Obstajata dva opisana razreda pomnilnika:
avto
statična.
Samodejni objekti so lokalni za vsak klic bloka in se ponastavijo, ko blok zapusti.
Statični objekti obstajajo in ohranijo svojo vrednost med trajanjem celotnega programa.
Nekateri objekti niso poimenovani in njihovo življenjsko dobo izrecno nadzirata operatorja new in delete.
8. poglavje
Objekti, deklarirani kot znaki (char), zadostujejo za shranjevanje katerega koli elementa strojnega nabora znakov, in če je znak, ki pripada temu naboru, shranjen v znakovni spremenljivki, potem je njegova vrednost enaka celotni kodi tega znaka.
Trenutno obstajajo tri velikosti celih števil, opisane kot short int, int in long int. Daljša cela števila (long int ) ne zagotavljajo nič manj prostora za shranjevanje kot krajša cela števila (short int ), toda po implementaciji lahko dolgo ali kratko ali oboje postane enakovredno običajnemu celemu številu.
"Navadna" cela števila imajo naravno velikost, ki jo določa arhitektura osrednjega stroja; druge dimenzije so prilagojene posebnim potrebam.
Uvod v programski jezik C++ |
||
Vsak enum je niz poimenovanih konstant. Lastnosti enuma so enake lastnostim int. Cela števila brez predznaka, opisana kot nepredznačena, upoštevajo pravila aritmetike po modulu 2n, kjer je n število bitov v njihovi predstavitvi.
Enojna ( float ) in dvojna ( double ) števila s plavajočo vejico so lahko sinonimi v nekaterih strojnih izvedbah.
Ker je objekte zgoraj naštetih vrst mogoče interpretirati kot števila, jih bomo imenovali aritmetični tipi.
Tipi char, int vseh velikosti in tipi enum bodo skupaj imenovani celoštevilski tipi. Tipi float in double bodo skupaj imenovani lebdeči tipi.
Podatkovni tip void (prazno) definira prazen niz vrednosti. (Neobstoječe) vrednosti predmeta void ni mogoče uporabiti na noben način, uporabiti ni mogoče niti eksplicitnih niti implicitnih pretvorb.
Ker prazen izraz označuje neobstoječo vrednost, je tak izraz mogoče uporabiti le kot izrazni operator ali kot levi operand v izrazu s podpičjem. Izraz je mogoče eksplicitno pretvoriti v void.
Poglavje 9 Izpeljani tipi
Poleg osnovnih aritmetičnih tipov obstaja konceptualno neskončno veliko izpeljanih tipov, zgrajenih iz osnovnih tipov, kot sledi:
nizi predmetov te vrste;
funkcije, ki sprejmejo argumente danega tipa in vrnejo objekte danega tipa;
kazalci na objekte te vrste;
konstante, ki so vrednosti danega tipa;
Uvod v programski jezik C++ | ||
strukture, ki so razredi brez omejitev dostopa;
sindikatov, ki so strukture, ki lahko drugačen čas vsebujejo predmete različnih vrst.
IN na splošno lahko te metode konstruiranja objektov uporabimo rekurzivno.
Objekt tipa void* (kazalec na void) se lahko uporablja za kazanje na objekte neznanega tipa.
Objekti in LVALUE (naslovi)
Objekt je območje pomnilnika; lvalue (naslov) je izraz, ki se nanaša na predmet. Očiten primer naslovnega izraza je ime predmeta.
Obstajajo operacije, ki dajejo naslovne izraze: na primer, če je E izraz kazalca, potem je *E izraz naslova, ki se nanaša na objekt, na katerega kaže E .
Izraz "lvalue" izhaja iz izraza dodelitve E1=E2, v katerem mora biti levi operand E1 izraz vrednosti.
Naslednja razprava o vsakem operatorju kaže, ali zahteva operande naslova in ali vrne vrednost naslova.
11. poglavje
Uporabi se lahko znak ali kratko celo število, če je mogoče uporabiti celo število. V vseh primerih se vrednost pretvori v celo število.
Pretvarjanje kratkega celega števila v dolgo celo število vedno vključuje razširitev predznaka; cela števila so količine s predznakom. Ali znaki vsebujejo predznakovni bit ali ne, je odvisno od stroja. Bolj eksplicitni tip unsigned char omejuje spremembo vrednosti z 0 na strojno odvisen maksimum.
Na strojih, kjer se znaki obravnavajo kot predpisani (podpisani), so znaki kodnega niza ASCII pozitivni.
Uvod v programski jezik C++ |
||
Vendar je znakovna konstanta, podana z oktalnim zaporedjem esc, podvržena predznaku in lahko postane negativno število; tako ima na primer "\377" vrednost 1 .
Ko je dolgo celo število pretvorjeno v kratko celo število ali v char, je prirezano na levo; odvečni biti se preprosto izgubijo.
Lebdenje in dvojno
Za izraze s plavajočo vejico je mogoče izvesti aritmetiko s plavajočo vejico z enojno natančnostjo. Pretvorbe med števili z enojno in dvojno natančnostjo se izvajajo tako matematično pravilno, kot to omogoča strojna oprema.
lebdeče in cele
Pretvorbe plavajočega v integral so običajno odvisne od stroja. Zlasti se smer, v kateri so negativna števila okrnjena, razlikuje od stroja do stroja. Če za vrednost ni na voljo dovolj prostora, je rezultat nedefiniran.
Pretvorba integralne vrednosti v plavajočo vrednost deluje dobro. Če strojna izvedba nima potrebnih bitov, pride do določene izgube natančnosti.
Kazalci in cela števila
Izraz tipa celega števila je mogoče dodati ali odšteti od kazalca; v takem primeru se prvi pretvori, kot je navedeno v razpravi o operaciji dodajanja.
Odštejete lahko več kot dva kazalca na predmete iste vrste; v tem primeru se rezultat pretvori v tip int ali long, odvisno od stroja.
Kadarkoli je nepredznačeno celo število kombinirano z navadnim celim številom, se navadno celo število pretvori v tip nepredznačeno in rezultat je tipa nepredznačeno.
Vrednost je najmanjše celo število brez predznaka, ki je enako celemu številu s predznakom (mod 2** (dolžina besede)) (tj. modulo 2** (dolžina besede)). V komplementarni binarni predstavitvi je ta transformacija prazna in v binarni predstavitvi ne pride do prave spremembe.
Naši programi modelirajo svet. Kdor si je postulate OOP vzel k srcu, bo hitro naletel na dejstvo, da je proces modeliranja v okviru te metode v osnovi nedoločen. Pogovorimo se podrobneje.
V nadaljevanju bom obravnaval običajen knjižni primer z zaposlenimi v podjetju, napisali bomo nekaj podobnega SI. Izpeljava razreda Employee iz razreda Person je odlična ideja, še posebej, če podatke shranjujete izključno v pomnilnik: SQL ima nekaj težav z dedovanjem tabel, vendar to ni bistvo - OOP s svojo hierarhijo, agregacijami, kompozicijami in dedovanjem ponuja idealno način organiziranja podatkov. Težave z metodami.
Za vsako metodo poslovne logike je dejstvo sveta, ki ga ta metoda (pogosto ne sama) modelira. Programska dejstva so operacije: tako jih bomo imenovali v nadaljevanju. Če metodo naredimo za člana razreda, OOP zahteva, da operacijo povežemo z objektom, kar je nemogoče, ker je operacija interakcija objektov (dveh ali več), razen v primeru unarne operacije, čiste refleksije. Metodo PaySalary lahko pripišemo razredom Employee (Zaposleni), Cashier (Cash), Bančni račun (Account) - vsi so enakovredni v pravici do lastništva. Dilema o lokaciji metode spremlja celoten razvojni proces: njena nerodna rešitev je lahko kritična in celo usodna.
V knjigah o programiranju pošteni avtorji sramežljivo priznavajo, da "objekti v resnici niso predmeti" in da je OOP samo način organiziranja kode, ne mehanizem modeliranja. Toda bistvo je, da je "svet zbirka dejstev, ne stvari" - od tod temeljna nezmožnost zgraditi ustrezen model z uporabo OOP v obliki, ki jo zahtevajo pisci učbenikov. Pomembno je razumeti, da je možno modelirati svet v kodi, vendar morajo biti atomi modela dejstva, ne predmeti.
Američani so precej vlagali v svetovno in predvsem angleško književnost. Bolje je reči, da je tako imenovana zlata doba ameriške leposlovja eden zadnjih obratov v razvoju svetovne književnosti, če ne zadnji.
V letu 2015 ste morda opazili spremembo v načinu razvoja aplikacij JavaScript. Razvijalci se odmikajo od nepredvidljive arhitekture spremenljivih stanj k bolj predvidljivi arhitekturi nespremenljivih aplikacij.
Z okviri, kot je Backbone, je bilo običajno sinhronizirati same podatke in predstavitev podatkov - za to ste se morali ročno naročiti na potrebne dom dogodke. Ta metoda je bila nagnjena k napakam in je prisilila uporabo preveč splošne kode. Prišel je Angular in ga popravil z avtomatsko dvosmerno vezavo.
Zdaj pa gre vse v drugo smer.
… ampak normalno. Vsak dizajn je zanič. In vedno bo zanič.
Če mi ne verjamete, naj razložim...
Noben projekt ne preživi srečanja z izvedbo
Ko začnete uresničevati to, kar ste zasnovali, boste v realnosti neizogibno naleteli na stvari, ki ne ustrezajo vašim začetnim pričakovanjem.
Podatki, za katere ste pričakovali, da jih boste potrebovali v odgovoru zunanje storitve, morda manjkajo (ali so neveljavni). Pričakovana edinstvenost v praksi morda sploh ni edinstvena (celo sha1 ima včasih trke). Procesi, ki naj bi bili zanesljivi, se bodo zrušili veliko pogosteje, kot ste pričakovali.
To je v redu.
V nekaterih primerih lahko preprosto prekinete, vržete izjemo ali se na kakšen drug način glasno zrušite. V drugih primerih morate omiliti zahteve sistema. Ali dodajte dodatno filtrirno plast, ki se bo že ukvarjala s "čiščenjem" in prenosom pravilna možnost vhodni podatki.
Manjkajoči podatki so lahko neobvezni ali privzeto zamenjani.
Nepravilne podatke je mogoče obravnavati kot manjkajoče ali pa jih zapišete "kot so" in dodate dodatno preverjeno različico, ki je prisotna le, če je izvirnik veljaven.
Omejitev edinstvenosti lahko
Tudi ko sem bral, sem se spomnil Edsgerja Dijkstre z njegovim slavnim stavkom: »Dan in noč molim, da čim več mojih kolegov programerjev najde način, da prekine prekletstvo združljivosti« (»Vsak dan molim, da bi več mojih soprogramerji lahko najdejo način, da se osvobodijo prekletstvo združljivosti") iz The Humble Programmer (1972 sic!!!). In kasneje Eric Raymond s svojo Katedralo in bazarjem (1997). Toda Vingejevo besedilo ne govori le o prekletstvu združljivosti, na treh straneh se postavlja cela plast vprašanj (in na splošno ostane brez odgovora):
- Problem združljivosti v širšem smislu;
- Problem vzdrževanja stare kode;
- Problem odvisnosti človeško življenje»od neobčutljivih robotov« (c), ki se jim naglo približujemo;
- Problem podatkovnega rudarjenja nasploh in še posebej iskanje pripravljene rešitve v sodu brez dna receptov (github, stack overflow?);
- Problem "ponovnega pisanja" stare kode (tako slabe kot dobre) - ta trenutek vas spodbudi k ponovnemu branju :);
- Problem neizmernosti IT tehnologij. Včasih pravijo, da je zadnji univerzalni fizik živel sredi prejšnjega stoletja, kar pomeni Lev Landau. Zdi se, da prihaja (ali je že prišel) čas, ko univerzalnega programerja ni več mogoče najti;
- Besedilo ne vsebuje besede heker, ne v pozitivnem ne v negativnem pomenu. Piše pa se tudi o raziskovalcih in o koristih, ki jih lahko prinese poznavanje teh ali onih zakulisij in o tem, kakšno moč lahko to daje.
- In morda to še ni vse... :)
Človek dobi vtis, da je to pisala oseba, ki je na lastni koži občutila prav te težave.
Naj opozorim, da je bila Globina neba napisana leta 1999, ko marsikaj od tega, o čemer Vinge piše, še ni bilo problem ali se je celo šele pojavilo na obzorju.
Kot kritiko bi rad omenil, da je Vinge prešel mimo umetne inteligence (tako močne kot šibke, na splošno je tekel mimo, niti se ni dotaknil nevronskih mrež) in zmanjšal prednosti IT na zmogljivost. Tudi v besedilu ni čutiti prisotnosti mega-korporacij (čeprav seveda "Deep in the Sky" ne velja za cyberpunk), razen Qeng-Hoja kot takega. Patentnih vojn ni, vprašanja avtorskih pravic in problema zaprtih lastniških razvojev, katerih izvorne kode niso bile objavljene, se niso dotaknili.
Ne o programiranju, ampak o standardih
Kasneje v istem poglavju, zanimivo vprašanje galaktično oddajanje za distribucijo lastnih tehnologij. Za kaj? Standardizacija. Širjenje lastnega jezika ter lastnih standardov in tehnologij, ki bodo po eni strani pripeljale zaostale civilizacije na trgovinsko sprejemljivo raven, po drugi strani pa znižale stroške komunikacije in zagotavljanja kompatibilnosti ter posledično , olajšati trgovino in povečati marginalnost. Zanima me, ali je Vinge v času pisanja vedel za standardizacijo ladijske opreme angleške flote v času velikih osvajanj, ki je omogočila znižanje stroškov popravil in vzdrževanja? Kar se tiče distribucije v angleščini kot poslovno, znanstveno itd.? Angleži so domačine učili (prisilili učiti?) njihovega jezika. Enako so storili Španci in Francozi. In zdaj so angleščina, španščina, francoščina, portugalščina zelo razširjene. Toda Nizozemci so verjeli, da domačinov ni treba učiti njihovega jezika. Ali obstaja veliko krajev na svetu, kjer se govori nizozemsko poleg same Nizozemske?
Zdaj je poučevanje angleščine v teku po vsem svetu. Uporaba standardiziranih metodologij in učbenikov, standardiziranih izpitov in ocenjevalnih lestvic. Je to samo zasebni posel?
Spodaj je najbolj zanimiv odlomek iz besedila. V romanu je še marsikaj zanimivega, ki ni povezano s programiranjem, ni zaman prejel več nagrad. Zato priporočam branje, v originalu pa prevod, ki mi je prišel na misel, ni ravno dober.
Prijetno branje :)
Nikogar ne zanima moja koda. Bil sem šokiran, ko sem to spoznal, ko sem delal kot programer. Veliko časa sem pilil svojo kodo, dokler nisem ugotovil, da to nikogar ne zanima, saj ne šteje sama koda, ampak izdelek. Če programer sprejme to dejstvo, bo povečala produktivnost in vrednost njegovega dela.
Razlika med produktom in projektom je v tem, da pri razvoju produkta obstaja načrt, pri razvoju projekta pa raziskava. Če imate kakšno nerešeno težavo, recimo, da se še niste odločili, katero bazo podatkov boste uporabili v svojem projektu, potem boste morali to težavo preučiti, torej raziskati. To se imenuje tehnološka raziskava. Raziskovanje, to sploh ni potrebno, nekaj povsem novega v svetovnem merilu, če gradiš most, potem moraš raziskati zemljo na tem mestu in dokler ta zemlja ni raziskana, most kot produkt ni še obstaja, zaenkrat je - projekt. Ne ve se še, kakšna je zemlja, kar pomeni, da se ne ve, iz česa narediti most, kako ga utrditi, nemogoče je izračunati predračun in načrtovati terminski načrt del.
Kdor zna kopirati, zna DELATI. Leonardo da Vinci je rekel. Vidite, izhajate iz svojih idej o tem, kaj so XP, Windows, OS. Kako ljudje govorijo:
Bil sem še mlad, imel sem XP, to so bili zlati časi, zdaj pa ni več kot zdaj. Novi časi, sodobna programska oprema. Ne razumem, zakaj kopati po smeti? Naredil bi vsaj klon desetega Windowsa, kam pa s svojo hitrostjo, ti bo uspelo v 100 letih.
Toda samo zato, ker ljudje kopirajo staro programsko opremo, še ne pomeni, da so retrogradni ali nekrofilni. Prvič, to počnejo zdaj, ko so notri sodobne razmere poznavanje vseh trendov in smeri. Drugič, zastarelost programske opreme na splošno je izjemno kontraintuitivna stvar. Na primer, v najsodobnejših aplikacijah so delčki kode, napisani pred več kot dvajsetimi leti, in pozor, nihče jih ne bo prepisal. To je informacija, ne obrabi se, kot se obrabita kovina ali les. Toda ljudje svoje vsakdanje dojemanje ponavadi prevedemo v stvari, ki so neoprijemljive in zahtevajo popolnoma drugačen pogled. Ali razumeš? Informacije. To ni stvar. Primerjaj s Puškinovimi pesmimi.
Ljudje so vse pogosteje začeli govoriti, da se je filozofija izgubila kot znanost. Da je bil čas Aristotela, Demokrita in Sokrata konec razvoja filozofije in da se zdaj ljudje ukvarjajo z eksaktnimi znanostmi, za filozofijo pa ni več prostora. Filozofija pa je pogled na okolico in opredelitev samega sebe v tem svetu. Zaradi tehnični napredekČlovek je dobil nove načine proučevanja sveta okoli sebe, pa tudi nove načine vplivanja na svet in samega sebe. Ljudje moramo razumeti, kakšno mesto zavzemamo med tehnološkim napredkom, saj tehnologije odpirajo nove priložnosti v razvoju celotnega človeštva, hkrati pa skrivajo veliko nevarnost.
Programiranje pogosto primerjajo z umetnostjo. To utemeljuje z dejstvom, da se s povečevanjem kompleksnosti programov pojavlja potreba po ljudeh s posebno izobrazbo in, kar je še pomembneje, s posebnim načinom razmišljanja, ki lahko »vdahne življenje« vedno bolj kompleksnim elektronskim možganom. Koncept "informacije" igra pomembno vlogo pri razumevanju globokih procesov programiranja. Informacija je znanje, ki ga je človek prenesel iz svojih možganov na materialni ali elektronski medij.
Prav tako je težko ne upoštevati obratnega vpliva računalnikov na človeško mišljenje. Kako se človekovo življenje in njegove duhovne vrednote spreminjajo pod vplivom tehnološkega napredka.
Zanimivo dejstvo je, da programi ne vplivajo samo na vas in mene - potrošnike elektronskih izdelkov, temveč tudi na same programerje. Ustvarjalec programa med delom razmišlja v strojnih kategorijah in to začne prenašati na ljudi, ki ga obkrožajo. Programer ob dolgotrajni uporabi računalnika razvije poseben način razmišljanja. Računalniki potrebujejo natančna navodila za izvajanje teh operacij.
Računalniško razmišljanje
Pri slikanju slike ima umetnik tak trenutek, ko nanese zadnjo potezo in s tem zaključi sliko. Enako velja pri pisanju programa. In od trenutka, ko programer pošlje program v "veliko" življenje, začne živeti samostojno. Tukaj lahko prinesete tak koncept kot "umetna inteligenca", povezan je s pojmom "možgani", pa tudi "razmišljanje". Seveda človeški možgani in računalnik navzven nimajo nič skupnega, vendar je mogoče najti podobnosti. .
Edinstvene človeške sposobnosti, kot sta sluh za govor in glasbo, sposobnost za abstraktno mišljenje so funkcije nevrodinamičnih možganskih struktur z relativno stabilnostjo. Vidimo lahko popolno podobnost med delom človeških možganov in aktivnostjo procesov računalniške programske opreme. Računalniki uporabljajo električne impulze, ki prehajajo skozi milijone tranzistorjev (pa tudi impulze, ki prehajajo skozi nevrone). Toda ali lahko temu procesu rečemo mišljenje? Navsezadnje je razmišljanje aktiven proces odseva objektivnega sveta v konceptih, sodbah, teorijah itd., Povezanih z rešitvijo določenih problemov.
obstaja dober primer vrste, imenovane samoučeči se sistemi. Ti sistemi zbirajo informacije o pozitivni odločitvi s poskusi in napakami ter te podatke nato uporabijo za pravilen izhod iz podobne situacije. Lahko sklepamo, da samoučeči se sistemi "poznajo" svet, toda ali so nagnjeni k sklepanju? Seveda ne. Sistem deluje na podlagi pridobljenih izkušenj in če je situacija vsaj malo drugačna od tiste, v kateri so bili, potem bo »šel« v slepo ulico. Nimajo možnosti, da bi se izognili določeni situaciji in ne glede na to, kako dobro je program napisan, le izbere rešitev in če situacija računalniku ni znana, se sesuje.
Iz tega sledi sklep, da zdaj računalniški programi, pa tudi računalniki, ne morejo misliti.
Moralna stran programiranja
Besedna zveza "računalniški virusi" je trdno vstopila v naša življenja. Oseba, ki se je srečala z računalnikom, je slišala ta izraz, nekdo pa se je neposredno srečal z njegovimi uničujočimi učinki. In vendar, kaj so ti računalniški virusi? To so posebej napisani programi, ki spreminjajo algoritem drugih programov, brišejo podatke in onemogočajo uporabniku normalno delovanje.
Te programe pišejo ljudje, a vprašanje je: kaj žene to osebo?
Večino virusov, glede na prakso, sploh ne ustvarijo teroristi, to so ljudje, ki želijo dokazati svojo premoč, pokazati, da zmorejo tisto, česar drugi ne morejo. Ti ljudje so sposobni delati, a pogosto to počnejo iz brezdelja. Ti ljudje so iz vrste tistih, ki se ukvarjajo z vandalizmom. Vodi jih nasprotujoča si želja. Če ima ta oseba potrebna znanja, potem lahko napiše računalniški virus.
Etične norme družbe, v kateri se ustvarjajo moralne izkušnje osebe, imajo negativen odnos do vandalizma in s tem do računalniških virusov kot manifestacije vandalizma. In seveda, če je oseba z visokimi moralnimi načeli, bo pred kakršno koli programsko kodo večkrat premislil, ali bo ta program koristen drugim ljudem, ali bo ta računalniški program ljudem prinesel nasmehe in kdaj bo programer odgovoril nanje. vprašanja, se loti dela. In samo taki ljudje bodo zrasli v profesionalne programerje, ki bodo ustvarili nekaj dobrega.
Zaključek.
Vidiki, obravnavani v tem članku, so obsežni in jih v enem članku ne bo mogoče v celoti zajeti. Programiranje kot razvijajoča se in mlada veda potrebuje filozofski pogled. Probleme, opisane v tem članku, je mogoče obravnavati kot del filozofskih vprašanj, povezanih z znanstvenim in tehnološkim napredkom. Ta in številna druga filozofska vprašanja, ki nam jih postavlja znanstvena in tehnološka revolucija, še vedno zahtevajo filozofsko refleksijo, veliko pozornost sodobnih filozofov.
Bibliografski seznam
- Varfolomeeva T.N., Ovchinnikova I.G. Vadnica programiranje. [Besedilo]: študije. dodatek / Magnitogorsk: MaGU, 2005. Pod naslovom UMO. – 104 str.
- Varfolomeeva T.N., Ovchinnikova I.G., Platonova O.I. programske metodologije. [Besedilo]: študije. dodatek / Magnitogorsk: MaGU, 2007. - 204 str.
- Varfolomeeva, T.N. Laboratorijska delavnica objektno orientiranega programiranja. [Besedilo]: študije. dodatek / T.N. Varfolomeeva, I.Yu. Efimova - Moskva, 2014. (2. izdaja, stereotipna)
- Varfolomeeva, T.N. Laboratorijska delavnica strukturnega programiranja na primeru jezika PASCAL [Besedilo]: učbenik. dodatek / T.N. Varfolomeeva, S.A. Povituhin. - Magnitogorsk: MaGU, 2013. - 123 str.
- Varfolomeeva, T.N. Priročnik za pripravo na izpit in Srednjo šolo za informatiko [Besedilo]: učbenik. dodatek v 2 delih, Zv. Del 1. Algoritmizacija in programiranje / T.N. Varfolomejeva, I.G. Ovčinnikov. - Magnitogorsk: MaSU, 2006. - 128 str.
- Varfolomeeva, T.N. Učbenik za pripravo na centralizirano testiranje iz informatike [Besedilo]: učbenik. dodatek / T.N. Varfolomejeva, I.G. Ovčinnikova, N.G. Korneshchuk Magnitogorsk: MaSU, 2002. - 205 str.
- Varfolomeeva, T.N. Učna pomoč za pripravo na sprejemne izpite iz računalništva [Besedilo]: učbenik. dodatek / T.N. Varfolomejeva, I.G. Ovčinnikova, E.N. Guseva Magnitogorsk: MaSU, 2002. - 116 str.
- Efimova, I.Yu. Računalniško modeliranje [Besedilo]: zbirka praktično delo 2. izdaja, stereotipna / I.Yu. Efimova, T.N. Varfolomejev. - Moskva: LLC "Flinta", 2014. - 67 str. ISBN: 978-5-9765-2039-4
- Efimova, I.Yu. Metode in tehnologije poučevanja računalništva v izobraževalne ustanove poklicno izobraževanje[Besedilo]: izobraževalna metoda. dodatek 2. izdaja, stereotipna / I.Yu. Efimova, T.N. Varfolomejev. - Moskva: LLC "Flinta", 2014. - 41 str. ISBN 978-5-9765-2040-0
- Movchan I.N. Inovativni pristopi pri poučevanju računalništva na univerzi // Modern Znanstvena raziskava in inovativnost. - 2014. - št. 5-2 (37). – S. 45.
- Movchan I.N. Nekateri vidiki informacijskega usposabljanja študentov // Zbirka znanstvenih člankov svet. - 2008. V.18. - Št. 1. - S. 34-36.
- Movchan IN Pedagoški nadzor informacijske dejavnosti študenta v procesu strokovnega usposabljanja: dis. … kand. ped. Znanosti / Movchan Irina Nikolaevna; Državna univerza Magnitogorsk. - Magnitogorsk, 2009, - 205 str.
- Ovčinnikova I.G. Ocena učinkovitosti vzgoje osebnosti [Besedilo] / I.G. Ovčinnikova, V.A. Belikov, L.V. Kurzaeva // Socialno partnerstvo v poklicnem izobraževanju Zbornik vseslovenske znanstvene in praktične konference. FGOU SPO "Magnitogorsk State Vocational Pedagogic College", Laboratorij za preučevanje problemov vodenja kakovosti v osnovnem in srednjem poklicnem izobraževanju Uralske podružnice Ruske akademije za izobraževanje: sob. znanstveni Umetnost. Magnitogorsk, 2010. - S. 178-187.
- Ovčinnikova, I.G. Naloga-delavnica o programiranju [Besedilo]: učbenik.-metoda. dodatek. / I.G. Ovčinnikova, T.N. Varfolomejev. - Magnitogorsk: MaSU, 2009. - 77 str.
- Sakhnova T.N., Ovchinnikova I.G. Iskalni algoritmi pri tečaju računalništva Srednja šola[Besedilo] // Informatika in izobraževanje. - 2010 - št. 11 - S. 79-83.
- Sakhnova T.N., Ovchinnikova I.G. Razvrščanje algoritmov za reševanje problemov programiranja [Besedilo] // Informatika in izobraževanje. - 2011. - št. 2 - str. 53-57
- Sahnova, T.N. Osnove algoritmizacije [Besedilo]: učbenik. dodatek, 2. izd., popr. in dodatno / T.N. Sahnova, I.G. Ovčinnikov. - Magnitogorsk: MaGU, 2002. pod naslovom UMO. – 131 str.
- Sahnova, T.N. Pedagoški pogoji za oblikovanje poklicnega informacijskega mišljenja študentov [Besedilo]: dis. …kand. ped. znanosti: 13.00.08 / T.N. Sakhnov. - Magnitogorsk, 2003.
- Sahnova, T.N. Priročnik za pripravo na izpit in Srednjo šolo za informatiko [Besedilo]: učbenik. dodatek v 2 delih, Zv. Del 2. Osnovni tečaj / T.N. Sahnova, I.G. Ovčinnikov. - Magnitogorsk: MaSU, 2006. - 128 str.
- Čusavitina, G.N. Razvoj modela za obvladovanje tveganj, ki jih povzroča uporaba daljinskega upravljalnika izobraževalne tehnologije na univerzi [Besedilo] / G.N. Čusavitina, M.O. Chusavitin, T.N. Varfolomeeva // Izboljšanje usposabljanja IT-strokovnjakov v smeri "Uporabna informatika" za inovacijsko gospodarstvo: Sat. znanstveni tr. Moskva, 2008. - S. 216-218.
Morda bi bilo koristno prebrati:
- Kako se počutite v 17 tednu nosečnosti?;
- Ali je uporaba spazmalgona upravičena med nosečnostjo Spasmalgon v drugem trimesečju;
- Četrti teden nosečnosti: znaki, simptomi, fotografija, ultrazvok;
- Ali lahko nosečnice "Stodal" kašelj;
- Simptomi in zdravljenje faringitisa pri otrocih: nasvet pediatra Akutni faringitis pri dojenčkih 7 mesecev;
- Ta "grozen" hemoglobin;
- Od kod je Mihail Sergejevič Gorbačov?;
- Kako preživeti postne dneve za zdravje in hujšanje Kako si pravilno razporediti postne dneve;