Învață să scrii programe de calculator. Alegerea unui mediu de programare

Nu vă faceți griji prea mult în legătură cu ce limbă ar trebui să alegeți să învățați. Mulți programatori începători le este dificil să aleagă o limbă atunci când învață pentru prima dată cum să scrie cod. Limbajul în sine, pe care îl alegeți, nu contează când vine vorba de studiul structurilor și logicii informațiilor de construcție. Aceste abilități sunt mult mai importante și pot fi învățate cu orice limbaj de programare.

  • Atunci când alegeți o limbă, concentrați-vă pe scopul pentru care doriți să creați coduri de program și abia apoi alegeți limba inițială. De exemplu, dacă doriți să dezvoltați site-uri web, atunci ar trebui să începeți prin a învăța HTML și apoi să îl extindeți cu CSS, JavaScript și PHP. Dacă doriți să creați programe pentru computere, atunci începeți să învățați C++ sau orice alt limbaj de programare major.
  • Dacă devii un programator profesionist, vei realiza rapid că nu vei folosi niciodată limbajul pe care l-ai învățat inițial pentru munca ta. În schimb, vei continua să înveți noi limbi tot timpul prin documentare și experimentare.

Găsiți resurse online gratuite pentru limba aleasă. Internetul este un cufăr de comori de tutoriale, cursuri și videoclipuri gratuite despre limba pe care alegi să o înveți. Puteți învăța elementele de bază ale aproape oricărei limbi introductive într-o zi.

  • Iată doar câteva site-uri populare: Bento, CodeAcademy, Code.org, html.net, Khan Academy, Udacity, W3Schools și multe altele.
  • wikiHow are, de asemenea, o mare varietate de tutoriale introductive pentru diferite limbi.
  • Puteți găsi videoclipuri cu instrucțiuni pentru aproape orice limbă pe YouTube.
  • Stack Exchange este unul dintre cele mai populare forumuri în care programatorii profesioniști răspund la orice întrebări ale utilizatorilor.
  • Descărcați un editor de text bun. Multe limbaje de programare permit utilizarea unor editori de text externi pentru a scrie programe. Găsiți un editor de text care va afișa indentarea și marcarea codului.

    • Programele populare includ Notepad++ (Windows), TextWrangler (OS X) și JEdit (orice sistem).
  • Descărcați orice compilatoare necesare. Unele limbaje de programare necesită un compilator pentru a afișa codul sursă pe care l-ați scris. Compilatorii traduc codul sursă într-un program de limbaj echivalent de nivel scăzut, care este apoi procesat de computer. Multe compilatoare sunt open source și freeware. Limbile care necesită utilizarea compilatoarelor includ:

    • DE BAZĂ
    • Fortran
    • Pascal
  • Începe primul tău proiect. Alegeți un proiect introductiv bun care vă va permite să vă încercați noile abilități. Există multe sugestii și tutoriale pe Internet pe această temă; de exemplu, puteți începe prin a crea site-uri web simple cu HTML, baze de date și funcții simple cu PHP sau programe simple în oricare dintre limbile care necesită utilizarea compilatoarelor.

    Pentru a efectua o varietate de sarcini folosind un computer, este necesar un anumit set de programe. Majoritatea programelor sunt create de programatori profesioniști, dar oricine poate învăța să programeze. Există o mulțime de manuale și site-uri pe Internet pentru învățarea limbajelor de programare, care includ mediul PascalABC.

    Sistemul de programare PascalABC este excelent pentru început și vă permite să treceți fără probleme la o programare mai complexă. Acest program este distribuit gratuit (include o carte electronică de probleme cu un număr mare de exemple, iar sistemul de documentație și ajutor este disponibil în limba rusă). De exemplu, să încercăm să scriem un program pentru un computer folosind PascalABC.

    Navigare rapidă în articole

    Introducere în PascalABC

    După pornirea programului, apare fereastra mediului de programare PascalABC. Interfața este simplă și include mai multe elemente:

    • Bara de meniu - conține toate elementele necesare pentru editarea, editarea și rularea programului;
    • Bara de instrumente - comenzile utilizate frecvent sunt situate pe ea;
    • Domeniul de lucru - principalul domeniu de lucru al programului.

    Crearea programului

    Toate programele scrise în PascalABC au un șablon de design comun. Fiecare program este format din mai multe blocuri:

    • Descrierea variabilelor - ce tip sunt datele de intrare;
    • Introducere date - sunt introduse datele necesare pentru rezolvarea sarcinii;
    • Blocul principal - sunt îndeplinite sarcinile atribuite;
    • Ieșire date - afișează rezultatul programului.

    Algoritmul programului arată astfel:

    • Introducem variabila a, care este un număr;
    • Începutul programului;
    • Introducere a datelor;
    • Operarea programului;
    • Ieșire de date;
    • Sfârșitul programului.

    Exemplu de cod de program:

    Intrarea programului;
    var a:intger;
    ÎNCEPE
    readln(a);
    writeln("Ați introdus un număr", a);
    Sfârşit.

    Analizând acest program linie cu linie

    • Intrarea programului; - numele programului (se folosesc doar alfabetul latin, cifrele sau semnul „_”). Fiecare linie se termină cu punct și virgulă;
    • var a:intger; — există o enumerare a variabilelor. În acest exemplu, este folosită o variabilă - „a”, în timp ce cuvântul „var” este un cuvânt de serviciu (variabilele sunt setate cu ajutorul acestuia). În cele ce urmează se descrie tipul de variabile (întreg - numere întregi și real - fracțional);
    • începe - acest cuvânt denotă începutul programului (nu există punct și virgulă după el);
    • readln(a); - introducere a datelor. În timp ce programul rulează, se introduce valoarea variabilei (în acest exemplu se folosește orice număr întreg);
    • writeln("Ați introdus un număr", a); - ieșire de date. Ceea ce este scris între paranteze este ceea ce ar trebui să arate computerul. Dacă urmează să fie scos orice text, acesta trebuie inclus între ghilimele simple;
    • Sfârşit. - programul este finalizat (se pune un punct la final).

    Acest exemplu arată că orice utilizator de computer poate scrie un program simplu. Examinând exemplele incluse în sistemul de programare PascalABC, puteți învăța cum să scrieți programe care vă ajută să lucrați.

    Mulți consideră acest meșteșug atât de neînțeles încât nu există nicio șansă de a înțelege principiile chiar și teoretic.
    Voi încerca să explic cum se întâmplă acest lucru, după cum se spune, pe degete.

    Pentru a scrie programe, se folosesc limbaje de programare, care sunt împărțite în nivel scăzut, nivel înalt și nivel super-înalt, iar care dintre ele și care diferă va deveni clar puțin mai târziu. Dar privind în viitor, voi adăuga că fiecare limbă este creată pentru anumite sarcini și nu este întotdeauna posibilă implementarea aceleiași sarcini în limbi diferite.
    Pentru claritate, voi da exemple despre aparatele de uz casnic și sarcinile cu care ne confruntăm în fiecare zi.
    Deci, sarcina este să tăiați pâinea pentru cină. Pentru o persoană, cea mai simplă sarcină - de ce o tăiați acolo, să o luați și să o tăiați, nu?
    Cea mai importantă abilitate a unui programator, fără de care nimic nu va funcționa, este abilitatea de a împărți o sarcină într-o secvență de acțiuni. Cu cât nivelul limbajului de programare este mai scăzut, cu atât este mai detaliat necesară descrierea acestei secvențe.

    Voi da un exemplu despre cum ar arăta un program de tăiere a pâinii pentru corpul nostru

    Sarcina de a „tăia pâinea” într-un limbaj de programare de nivel înalt

    1. Deschide cutia de pâine cu mâna dreaptă;
    __2. Ia o pâine cu mâna dreaptă;
    __3. Pune pâinea pe o masă de tăiat; (presupunând că tabla era deja pe masă)
    __4. Deschideți sertarul de sus al mesei cu mâna dreaptă;
    __5. Găsiți un cuțit lucios, de 20 cm lungime, cu mâner negru;
    __6. Ia un cuțit în mâna dreaptă;
    __7. Aduceți cuțitul la pâine;
    __8. Fixează pâinea cu mâna stângă, ținând marginea stângă a ruloului;
    __9. Așezați cuțitul strict peste marginea dreaptă a pâinii;
    __10.Repetați următorii pași de 5 ori:
    _____10.1 Înapoi la stânga cu un centimetru;
    ____10.2 Repetați următorii pași până când lama cuțitului atinge placa:
    ________ 10.2.1 Apăsați cuțitul pe pâine;
    ________ 10.2.2 Faceți o mișcare alternativă înainte și înapoi cu un cuțit;
    ____10.3 Ridicați cuțitul în sus;
    __11. Pune cuțitul în cutie;
    __12. Eliberează pâinea cu mâna stângă.
    Gata, programul pentru tăierea pâinii în cantitate de cinci bucăți este gata, îl puteți continua descriind ștergerea firimiturii de pe masă, așezând bucățile feliate pe o farfurie etc.

    Depanare program

    Rulați programul și vedeți cum funcționează:
    Oh... împreună cu a cincea bucată, și-a tăiat degetul...
    rahat! opriți programul!
    Nu am scris exact cum să fixez pâinea cu mâna stângă, am apucat-o la întâmplare și mi-a ieșit degetul mare în lateral...
    Revenim la linia „Fixați pâinea cu mâna stângă, ținând marginea stângă a ruloului;”
    Dupa el scriem:
    „Strângeți degetul mare al mâinii stângi spre stânga, spre palmă;”
    Începem programul
    Hopa... pe linia „Pune cuțitul în sertar”; cuțitul a căzut pe podea...
    La naiba! Se pare că masa este ușor înclinată și sertarul s-a închis singur...
    Revenim la cod și înainte de rândul „Pune cuțitul în cutie”; scriem „Deschide sertarul de sus al mesei cu mâna dreaptă”;
    Ați observat o eroare? Nu?!
    Cum putem deschide cutia cu mâna dreaptă dacă există un cuțit în acea mână? Deci, mai întâi trebuie să puneți cuțitul pe masă, apoi să deschideți sertarul, să luați din nou cuțitul etc.
    Și facem asta până când pâinea este tăiată corespunzător, fără a deteriora mobila și degetele.
    Așa funcționează depanarea
    Cu experiență, începi să scrii programe care funcționează prima dată, permițând un minim de erori, iar verificarea dacă caseta este deschisă înainte de a pune ceva în ea devine un obicei.

    Când unele operații sunt efectuate în mod constant, cum ar fi tăierea pâinii, spălarea vaselor etc., programatorii le descriu drept proceduri.
    O procedură este un set de acțiuni specifice ascunse sub o singură comandă.
    Astfel, textul programului pe care l-am citat mai sus poate fi plasat într-o procedură numită Cut Bread (parametru), unde vom specifica numărul de bucăți ca parametru

    ca urmare, programul care utilizează proceduri va arăta astfel:
    __GotoKitchen();
    __CutBread(5);
    __PutBreadOnTable();
    __A spăla vesela();
    și nu există limită pentru perfecțiune

    Acum despre limbajul de nivel scăzut

    ar trebui să descrie această sarcină și mai detaliat, până la ce degete și cu ce efort trebuie să țineți cuțitul, că „deschiderea cutiei” înseamnă să efectuați o secvență de acțiuni cu aceeași mână folosind mâna, degetele, muschii antebratului, eforturi in kilograme pe centimetru etc. Chiar ar trebui să descriu ce este mâna dreaptă, unde se află și nu uita să verific dacă este disponibilă deloc...
    Dar odată, nu existau limbaje de programare de nivel scăzut și era scris în coduri de mașină, adică. programul arăta ca șiruri de unu și zero, acestea erau vremuri întunecate.

    Merită să spunem puțin despre ce este o limbă de nivel înalt și de ce este nevoie de o limbă de nivel scăzut, dacă este mai ușor să scrii într-una de nivel înalt?
    Limbajul de nivel înalt a fost scris într-unul de nivel scăzut, iar comenzile au fost încorporate în el, sub formă de proceduri, implicând o succesiune de acțiuni, precum „deschide o cutie”, „ia un cuțit în mână”, etc. . dar dacă dintr-un motiv oarecare este necesar să luați cuțitul doar cu două degete, deoarece mânerul este rupt sau lipsește, de exemplu, atunci acest lucru nu va fi posibil, deoarece comanda de „a lua cuțitul în mână” implică utilizarea toate cele cinci degete. Pentru astfel de situații, limbile de nivel înalt au capacitatea de a introduce cod într-un limbaj de nivel scăzut și, în loc de comanda standard „ia un cuțit în mână”, codul de nivel scăzut este scris sub un cuțit cu mânerul rupt. .
    O persoană face toate aceste operațiuni fără să se gândească, dar o mașină nu știe cum, trebuie explicat în detaliu ce, cum și în ce secvență.
    Limbile de nivel super-înalt sunt concentrate îndeaproape pe anumite sarcini, de exemplu, pentru lucrul în bucătărie, includ un set de comenzi speciale și codul din ele ar arăta ceva ca un program folosind procedurile descrise mai sus.

    Trebuie să fi dat peste faptul că unele programe funcționează doar sub Windows, de exemplu, și nu funcționează sub Android sau invers, deși funcțiile par a fi obișnuite și de ce nu poate fi instalat Android pe un Windows Phone ?
    Voi explica folosind exemplul aceluiași program pentru bucătărie: textul programului spune „Găsiți un cuțit strălucitor, lung de 20 cm, cu mâner negru în sertarul de sus al mesei”, de exemplu, acesta este pentru Windows . Cu toate acestea, nu există un sertar superior în androyd, cuțitele sunt depozitate acolo într-un dulap de perete, de exemplu. procedura de deschidere a sertarului ar trebui înlocuită cu procedura de deschidere a dulapului, trebuie să recunoașteți - sunt diferite! Dar cuțitul de acolo nu are 20 cm lungime, ci 25 cm lungime, nu este deloc strălucitor și mânerul său nu este negru, ci albastru. Prin urmare, pentru a tăia pâinea, trebuie să rescrieți în mod semnificativ programul, deși rezultatul va fi același. Pentru a face acest lucru, există programe multiplatformă care pot funcționa sub diferite sisteme, de exemplu. în bucătării diferite, deoarece programatorii au prevăzut ambele opțiuni. Acest lucru, desigur, este grozav, dar au și dezavantaje: dacă folosești întotdeauna doar o bucătărie cu sertare în mese, atunci de ce ai nevoie de cod care poate funcționa cu dulapuri? Și îi ia locul. Este ca și cum ai cumpăra un cuptor cu microunde care vine cu două uși, una concepută pentru a se deschide spre stânga și cealaltă spre dreapta, iar această sobă are și o nișă în care poți pune o ușă inutilă, dar din cauza acestei nișe, cuptorul cu microunde este 10 ms mai mare. Pui ușa potrivită, iar nișa va ocupa spațiu.

    Un program pentru PC este una dintre componentele principale ale software-ului, un set de comenzi. Mulți utilizatori îl folosesc pentru a efectua sarcini specifice aplicației, cum ar fi diverse documente, diverse calcule matematice, procesare de imagini și multe altele. Programarea poate fi împărțită în 6 etape:

    • a analiza;
    • proiectăm;
    • codifica;
    • testare;
    • experimentăm;
    • însoțim.

    Algoritm de programare

    Un algoritm computerizat este o indicație și o secvență absolut precisă, specifică și de înțeles de acțiuni care vizează rezolvarea sarcinilor. Fiecare algoritm are următoarele proprietăți:

    • discretie;
    • precizie;
    • intelegere;
    • rezultat excelent;
    • caracter de masă.

    Scopul programarii:

    • fiabilitate;
    • universalitate;
    • compatibilitate;
    • lizibilitatea;
    • Efect.

    Cum se fac programe pe computer?

    Compilarea unui program pe un computer într-o singură zi este nerealistă. Ele evoluează constant, se dezvoltă și se îmbunătățesc în timp. Este nevoie de mult timp pentru a introduce anumite comenzi. În acest caz, apar adesea diverse întrebări și probleme care sunt rezolvate mai bine imediat, dar acest lucru nu funcționează întotdeauna rapid și corect.

    Pentru a crea programe corect, scriitorul trebuie să cunoască 2 lucruri - algoritmul și setul de mecanisme prin care aveți ocazia să implementați toți algoritmii într-un limbaj de programare ușor de înțeles.

    Un exemplu de scriere a unei sarcini:

    Elaborarea unui algoritm pentru găsirea celui mai mare număr dintr-o anumită secvență de cifre:

    • notează toate numerele ca n, a1, a2 și așa mai departe;
    • max- număr maxim;
    • i - numărul de ordine.

    Secvența și pregătirea acțiunilor:

    • introduceți numere;
    • atribuim valoarea a1 cifrei variabilei;
    • variabila i - valoarea 2;
    • când a1 este mai mare decât max, în acest caz atribuim valoarea lui a1 variabilei max;
    • crește valoarea variabilei i;
    • când i este mai mare decât n - atunci tipărim max, altfel revenim la al patrulea punct.

    De asemenea, puteți afișa algoritmul rezultat sub forma unei diagrame bloc speciale:

    Revenind la întrebarea cum să scrieți programe pe un computer, trebuie să înțelegeți că, după compilarea algoritmului necesar, ar trebui să fie transferat și în limbajul algoritmic. Când compilați programe, nu trebuie să vă limitați la doar 2 instrucțiuni (IF și GOTO). Trebuie înțeles că, dacă utilizați nu unul, ci mai mulți operatori pentru diferiți algoritmi, acest lucru va face programul mult mai bun și mai compact.

    Concluzie

    Când înveți deja cum să conduci un anumit dialog cu dispozitivul, atunci vei avea mai multe oportunități de a lucra cu el. Odată ce înțelegi cum să scrii programele potrivite, îți va deveni mult mai ușor. Software-ul este actualizat, actualizat și dezvoltat în mod constant. Sistemul de programare modernă este un instrument pentru munca unui programator. Există mai multe tipuri de programe:

    • sistemic;
    • aplicat;
    • sisteme noi.

    Sperăm că acest articol vă va oferi noi oportunități și vă va oferi câteva cunoștințe în lumea modernă a computerizării. Soluțiile elementare și simple prezentate la problemele de scriere a programelor pe un computer vor deveni cu siguranță asistenții tăi.

    Ca preșcolar, începi să te distrezi cu jocuri pe un calculator sovietic și în curând te trezești gestionând zeci de miliarde de înregistrări în baze de date. Mons Anderson, cunoscut și sub numele de „Vladimir Perepelitsa”, ne-a răspuns la întrebările-despre-cum-de-deveniți-programatori.

    Nu-mi amintesc cine îmi doream să fiu în copilărie, dar când eram foarte mic am citit o enciclopedie pentru copii, iar volumele mele preferate erau Materie și energie, Numere și cifre, totul despre chimie, astronomie. Am avut un laborator acasă unde am făcut explozibili înainte să încep să studiez chimia la școală.

    Și am dat peste ceva programabil așa: tatăl meu avea „Electronics MK-52”, „MK-61”, calculatoare programabile. În consecință, prima carte este un program de joc, tip și joacă. Îmi amintesc exact „Tic-Tac-Toe”, „Battleship” și era și un fel de gunoi logic.

    Îmi amintesc și acum combinația de butoane V / O S / P, deși nu mai țin minte ce înseamnă.

    Într-o zi, am luat calculatorul tatălui meu și i-am stricat un program de inginerie bun. Calculatorul avea o memorie și l-am șters cu un fel de jucărie. M-a forțat să reintroduc programul. Apoi am luat un Sinclair, lipit manual de unul dintre prietenii tatălui meu. Sinclair non-standard: nu avea o unitate de dischetă, așa că toate programele mele erau doar de scriere. Adică a pornit-o, a scris-o, a testat-o, l-a condus, l-a oprit.

    Primul computer x86 - al 200-lea Pentium MMX cu Windows 95 OSR2 - mi-a fost cumpărat în decembrie 1997, pentru că m-am mutat la o școală de informatică și matematică în clasa a X-a și era greu fără computer. L-am pus pe Pascal, Delphi acolo, am spionat pe cineva cum să scrie inserții de asamblare. Așa că am scris în Pascal cu inserții de asamblare și i-am înfuriat pe vecini nefiind ieșit de pe internet - tariful modemului era de 400 de ore pe lună, iar telefonul era pe linie asociat cu vecinii.

    Învățământul superior este obligatoriu?

    Am avut o grămadă de diplome în clasa a XI-a: chimie - locul 2 pe țară, astronomie - locul 2, informatică la nivel regional (programarea sportivă nu a fost niciodată calea mea), fizică - tot așa ceva. Am decis împreună cu părinții mei că trebuie să intru într-un institut cool și am ales MIPT. Asta în ciuda faptului că am locuit în Nikolaev. Dar - o cunoștință a unei cunoștințe a fost decanul Facultății de Electronică Fizică și Cuantică a Institutului de Fizică și Tehnologie din Moscova, iar eu, cu toții olimpiade, am fost la Moscova pentru a susține examenele de admitere. Nu a trecut.

    Dar, din moment ce am mers devreme la școală, mai era un an până la armată, așa că m-am dus la departamentul de corespondență al Institutului de Fizică și Tehnologie din Moscova. A studiat, a rezolvat probleme, iar ziua a lucrat la șantierul de cabane pentru „noii ruși”. A tăiat pietre, a pus cărămizi, s-a întâlnit cu racket - sfârșitul anilor 90!

    La a doua încercare, a intrat, a studiat doi ani și a renunțat la a treia. Nu m-am împrietenit cu matematica.

    De la primul curs, de la prima prelegere de analiză matematică, când spun lucruri absolut evidente și spun că acum o vor dovedi. Nu pot face asta. Aici este fizica, chimia - le iubesc, înțeleg, percep. Pot să vin, fără să citesc absolut nimic, să stau vizavi de fizician și să discut cu el orice subiect dorește. Dacă nu știu ceva, nu-mi amintesc, o să întreb, să clarific. Și matematică și matan, toate aceste dovezi, teoremele lui Cauchy și altele asemenea... Până la sesiunea de iarnă, am avut trei eșecuri și o interdicție la examene. Desigur, aș putea promova, dar am decis că am fost învățat să studiez și nu a fost interesant să continui asta.

    În acel moment făceam deja programare personalizată, așa că răspunsul evident este da, nu ai nevoie de o diplomă pentru a câștiga bani programare sau chiar să devii un programator bun. În programarea de la universitatea noastră, profesorul era destul de „freeloader”, iar conform programului era necesar să înveți Pascal, pe care îl cunoșteam deja.

    Pentru cei cărora le-a ratat această epocă frumoasă: așa arată Turbo Pascal

    Pentru ce companie sa lucrezi si pe care sa o eviti?

    Am renunțat la începutul anului 2003, iar după facultate timp de patru ani am lucrat ca administrator de sistem și am scris diverse site-uri web. De exemplu, site-ul anterior al Opora Rossii a fost depus de unul singur, începând cu codul și baza de date și terminând cu aspectul / designul.

    Apoi m-am angajat la furnizorul de găzduire „Agave” ca dezvoltator Perl (nu aveam Perl pe CV, așa că toată lumea a fost surprinsă când am rezolvat 4 sarcini groase de testare pe care nimeni nu le rezolvase vreodată). Am început să mă ocup de facturare, am început să studiez simultan noile tehnologii care erau folosite acolo. Am găsit și am remediat absurdități în cod, cum ar fi trimiterea a 1500 de interogări SQL pentru a reda o pagină. Am învățat ce este ORM, am scris singur ORM. Am învățat ce sunt cadrele, am scris chiar eu un cadru.

    Aici a avut loc criza din 2008. Agave a început să concedieze dezvoltatori (pentru că costă mai mult) și să angajeze manageri. Managerii acumulați și din ce în ce mai conflictuali între ei, ceea ce nu este surprinzător când există 5-7 manageri per dezvoltator.

    Aveam o rezervă de bani, și deci timp, pentru noi interviuri. Am fost la Yandex, nu mi-a plăcut. Am fost pe Mail.ru. Nu prea mi-a plăcut Mail.ru atunci. Am fost la Rambler, mi-a plăcut tehnologia pe care o foloseau, mi-au plăcut oamenii. Eram altundeva, în birouri ca Ashmanovskaya, dar până la urmă am ales Rambler.

    Atunci Olga Turishcheva tocmai venise la Rambler. Au avut bani în ciuda crizei: au concediat „manageri eficienți” și au angajat dezvoltatori. După părerea mea, totul a mers bine. Am supraviețuit crizei cu brio și am început să dezvoltăm noi proiecte. Au scris, au lansat, uneori au decis că, nu, trebuie să facă altceva. În memoria mea, am lansat, am condus și am îngropat Rambler Friends. A existat un astfel de agregator RSS, pentru care am scris și întreținut un cod care adună știri pe serverul nostru.

    Dezvoltarea acestui lucru m-a determinat să folosesc tehnologii de evenimente asincrone, la care lucrez acum ca direcție principală.

    Apoi am scris Rambler-Photo și a fost un exemplu grozav de utilizare a metodologiilor agile. Am dezvoltat-o ​​clar conform Scrum, începând cu prescrierea tuturor, managerul s-a așezat cu noi, am făcut scrum-uri zilnice. Proiectul s-a dovedit, după părerea mea, foarte bun atât din punct de vedere tehnologic, cât și din punct de vedere al produsului. Când toți dezvoltatorii și aproape toată administrația au fost ulterior îndepărtați de la el, a lucrat încă doi ani fără nicio interferență. Nu știu de ce a fost închis, nefericiții opt servere au mâncat atât de mulți bani? După cum au spus cei care au avut acces la panoul de administrare, sms-urile utilizatorilor (adică bani) au venit până în ultima zi.

    Nu știu ce a fost în mintea celor care au reușit. Asta era deja pe vremea lui Afisha-Rambler, „compania unită”. Apoi au înlăturat conducerea Rambler-ului tehnologic și au pus conducerea media a Afisha. A fost o perioadă dificilă când toată această companie combinată încerca să se regăsească. Ea s-a trezit în faptul că acum nu este o companie de tehnologie, ci o companie media, iar cursul dezvoltării va fi adecvat.

    Până în acest moment, majoritatea programatorilor (și nu numai ei) erau complet demoralizați. Dezvoltatorii au spus: „Nu știm ce facem, de ce o facem și când vor renunța la ceea ce facem acum.”

    Pentru că chiar în fața ochilor lor niște proiecte care au fost discutate, realizate și închise, Rambler-Avia, de exemplu.

    În același mod - nu-mi amintesc cât timp, se pare, aproximativ un an - am condus proiectul Rambler-Contacts, a existat un astfel de mesager.

    Manual tehnic, arhitectura, plus scris cateva componente. Și proiectul nostru a fost închis în același mod. Deși am avut un client cu un design bun și funcționalitate interesantă. Am avut recenzii grozave. Au venit recenziile utilizatorilor: „Client grozav, design grozav, face mai mult”, etc.

    Îmi amintesc o poveste foarte amuzantă. La un moment dat, ni s-a spus că ne-am lovit de „tavan”. Conform orarului, a fost o creștere a utilizatorilor, iar undeva s-a oprit. Am început să investigăm, am găsit acest lucru: unul dintre agenții de publicitate a aruncat în aer anunțul „Descărcați ICQ „Contacte””. Am intrat în jurnale, în jurnalele sunt mii de autentificări cu cheie înghețată. Au încercat să se conecteze la ICQ ca client, iar Rambler nu i-a putut lăsa să intre. Desigur, ei nu au devenit utilizatorii noștri.

    În general, acestea au fost ultimele zile. Unii dintre cei de la manageri au spus: poate se va putea salva proiectul. Cineva a spus: nu, proiectul este în curs de închidere. Mai mult, acest lucru s-a spus chiar înainte de a fi clarificate toate detaliile - ce s-a întâmplat, de ce a încetinit creșterea audienței. „14 oameni au văzut proiectul de doi ani, dar îl închidem oricum.” Nu au încercat să salveze sau să adopte expertiză în niciun fel, pur și simplu au scos serverele, aruncând toate resursele cheltuite.

    Concluzia este simplă: managementul prost poate ucide orice proiect.

    Conducerea companiei sau cel puțin departamentul ar trebui să aibă un scop clar și de înțeles, care cel puțin trebuie comunicat angajaților. Dar ar trebui să fie și clar vizibil faptul că deciziile sunt luate pe baza acestui obiectiv.

    Desigur, am părăsit Rambler - la Mail.ru, unde am fost chemat de mult. A venit singur, dar a fost trecut ca șef de catedra, a primit autoritatea de a scrie ce vreau și cum vreau. A început să scrie și să recruteze oameni, departamentul aproape imediat a crescut la cinci persoane.

    Formal, aparțin „mailului”, dar mai ales fac proiecte de integrare. De exemplu, API-ul pentru Mail care îl conectează cu lumea exterioară. Când erau scrise mai mult sau mai puțin avatare, link-uri cu tot felul de rețele sociale, mi s-a cerut să ajut rapid cu proiectul Cloud. M-am implicat în muncă și de 2 ani lucrez cu [email protected].

    Lucrez pe Perl într-o zonă destul de îngustă - mă ocup de aplicații de rețea asincrone. Sunt utilizate de orice software foarte încărcat, unde există un număr mare de solicitări sau un număr mare de conexiuni simultane, o mulțime de acțiuni „exterior”, a căror parte principală este în așteptare. Accesați API-ul altor servicii, actualizați sute de mii de chei și altele asemenea.

    În principiu, sunt angajat în multe tehnologii pe parcurs, identificând și eliminând diverse probleme. Nivelul de încărcare pe un server ajunge la 30-40 de mii de solicitări pe secundă și de obicei mă deranjez cu subiectul performanței înalte a codului. Sunt un adept destul de convins al abordării că programele sunt scrise pentru computere, și nu pentru oameni care apoi le vor citi sau le vor sprijini. Scriem programe pentru computere, computerele trebuie să le poată citi și să le execute eficient.

    De exemplu, la un moment dat, când am venit aici, am dat peste o listă de corespondență cu teste de performanță ale serverelor HTTP în Perl și mi-am dat seama că pierd mult (o dată și jumătate!) față de soluțiile existente în Python, Node. Și s-a supărat.

    M-am așezat, am făcut un plan despre cum să fac totul, ce trebuie să scriu, am planificat optimizarea folosind C. Dar, în practică, m-am oprit chiar înainte de a bloca piesele C, pentru că deja depășisem toate soluțiile de perle, python și cele noduri. Îmi amintesc că soluția anterioară era la nivelul de 2500-3000 de solicitări pe secundă, Python a luat 5000, Node - 6000, pe Perl pur am primit 8000 pe un nucleu de procesor.

    În orice sarcină, se poate aplica următoarea abordare:
    1. Ne-am stabilit un scop: realizarea unei anumite solutii.
    2. Alegem mijloacele care pot satisface solutia.
    3. Daca produsul este potrivit - PROFIT
    4. Dacă nu se potrivește (și de obicei se întâmplă), atunci fie rafinăm soluția cu un fișier, fie, dacă nu se potrivește foarte bine, o facem pe a noastră.
    5. Realizam o descriere comparativa a noii solutii si a celei existente.
    6. Dacă cel existent se dovedește brusc a fi mai rapid, atunci identificăm locul sau metoda prin care se obține un astfel de rezultat și facem modificări noii soluții.

    Este ușor să devii programator?

    Mi se pare că acum este mult mai ușor să intri în meseria de programator decât acum 15 ani.

    Fierul de călcat a devenit mai accesibil. Pe vremea mea, un computer costa destul de mult, cumpărarea lui pentru un copil era o decizie serioasă pentru părinți.

    Mediile de dezvoltare erau atât de așa și nu existau limbaje populare, implementate rapid... Acum instrumentele au devenit mai inteligente, există lucruri educaționale în care doar vii și rezolvi probleme - Codeacademy, HTML Academy.

    Codeacademy, cel mai popular proiect educațional de codificare din lume, oferă să scrie cod imediat, sărind peste pregătirea teoretică.

    Competiție? Concurența a fost întotdeauna la un nivel scăzut. Era suficient ca cineva să schițeze o pagină HTML, să pună o etichetă cu paranteze unghiulare și întrebări și a început deja să se considere un programator PHP pe partea de server. Neștiind deloc ce este cgi, ce sunt anteturile, HTTP. Există întotdeauna concurență la acest nivel. Când o persoană crește deja nivelul, începe să înțeleagă arhitectura aplicațiilor și cum funcționează totul, chiar și limba de lucru devine lipsită de importanță.

    Verificarea cât de interesat ești de programare este foarte simplu: trebuie să deschizi orice proiect de formare și să încerci să faci ceva.

    Și dacă vrei ceva atât de plin de viață, divers, orice, dar, totuși, și bine plătit, acesta este Perl și C. Și dacă vrei ceva atât de start-up: adună rapid ceva, lansează-l și arată-l investitorilor, atunci aici , probabil merită să aruncați o privire la Ruby, Go, poate Python. Iată cum vă place. Cuiva ar putea să-i placă Javascript cu Angular și MongoDB.

    O persoană trebuie să accepte organic sintaxa și abordările limbajului în care urmează să scrie. Dacă unei persoane nu îi place să scrie, scrie cod prost.

    Am văzut javaisști scriind în Perl. Acest lucru este groaznic. Sunt constant nemulțumiți, sunt mereu indignați, nu le place totul și se străduiesc să facă totul în felul lor. Ei tind să facă tot acest munte de clase, fabrici abstracte de care Perl nu are nevoie. Acolo se poate face, dar este vorba despre altceva. În general, puteți face multe în Perl, care este în alte limbi, dar nu este organic pentru această limbă.

    Perl este un limbaj destul de ciudat. Autorul său este lingvist, iar atunci când a dezvoltat însăși sintaxa limbii, a folosit tot felul de abordări, să spunem, lingvistice. Principiul de bază - TIMTOWTDI - „orice lucru poate fi făcut în mai multe moduri” (există mai multe moduri de a face acest lucru).

    Când cineva spune despre Pearl că este complex, că este imposibil de citit, nu pot să răspund decât la un singur lucru: poți să iei chineza și să spui că limba este groaznică, este imposibil să o citești, nimic nu este clar.

    Orice limbă, orice tehnologie pe care o întâlniți trebuie mai întâi învățată. Există un nivel de citire, există un nivel de scriere - un nivel în care poți scrie în limbă. Majoritatea oamenilor învață de obicei o cantitate mică, încep să creadă că cunosc limba și când dau peste programe scrise cu sintaxă complexă, pur și simplu nu le pot citi și încep să pretindă că limbajul este prost.

    Singurul lucru pentru care nu cred că Pearl este bun este să scrie drivere. Îmi este greu să-mi imaginez cum să scriu drivere în Perl. Matematica este, de asemenea, partea sa slabă, este de 20-30 de ori mai lentă decât în ​​C. Adică, dacă trebuie să calculăm determinantul unei matrice de 100 * 100, pentru aceasta trebuie să luăm C sau unele limbi \u200b\ u200b ascuțit special pentru această chestiune.

    Am scris în Java și pot spune că JVM-ul este un lucru grozav, foarte rapid, poți scrie un lucru foarte performant pe el. Am avut un proiect „Rambler-Contacts” cu un jabber-server în Java. Și Javaștii nu au putut face corect un parser XML, fie au încetinit tot timpul, fie l-au analizat strâmb. Prin urmare, am luat analizatorul meu din seria C, pe care îl scrisesem pentru Perl, și l-am depășit în Java. Tocmai l-am notat. S-a analizat poate de câteva ori mai repede decât înainte. Și nu s-a defectat.

    În general, fac cunoștință cu limbi noi, dar nu încep să scriu în ele, pentru că încă nu mi-a plăcut nici una dintre ele mai mult. Perl mă face să mă simt ca un magician.

    Pot face orice: trimite astfel de solicitări, analizează orice, compila, conectează C și așa mai departe. Cu o altă limbă, îmi va lua foarte mult timp să ajung la același nivel.

    Dacă nu ar fi fost Perl, probabil că m-aș fi hotărât pe Ruby. Dar Ruby nu ar putea exista fără Pearl, de la care a împrumutat foarte mult.

    Oamenii mă întreabă de ce nu am învățat Python pe vremea mea? Sunt mai multe posturi vacante Python. Și în ultimii ani nu am căutat locuri libere - deja mă sună: „Vino să vorbești cu noi”, „Te interesează să mergi mai departe?” Unul atârnă constant: ei invită jucăriile să scrie, dar eu tot refuz.

    Din ce să te inspiri?

    Personal, îmi place să creez și să schimb ceva creat. În lumea reală cu materiale reale... Am făcut o mulțime de lucruri: prelucrarea materialelor, turnarea metalelor - este foarte greu să copiezi ceva, să modifici ceva. A devenit interesat de turnarea de bijuterii, dar până la urmă sunt necesari bani exorbitanti pentru a obține echipament. Puteți, desigur, în mod veche, așa cum făceau cu mulți ani în urmă, dar acum există dispozitive grozave pentru realizarea de bijuterii. Doar prețul de a încerca este mare. Și în programare, te poți încerca aproape gratuit, doar cu prețul timpului. Și este foarte distractiv.

    Totuși, poate, ambiția joacă un rol aici. Sunt mulțumit când unele dintre componentele, produsele sau alte module ale mele sunt mai rapide decât toate celelalte, în aceeași limbă sau în limbi diferite.

    Din când în când se întâmplă așa: mă așez și scriu module noi folosind niște abordări noi, metode de optimizare. Le scriu, le compar cu restul, mă mulțumesc că sunt cele mai rapide și le folosesc de ceva timp. Timpul trece – apar tehnologii noi, module noi, cineva îmi ia aceleași idei, sau din altundeva (sau se folosesc alte biblioteci), mă ajung din urmă, mă depășesc și mă uit la ce să mai optimizez.

    Adevărat, acest lucru este legat de faptul că sunt un întreținător prost. Postez tot ce scriu pe github și CPAN, dar reconstruirea modulelor vechi este leneșă (deși încerc). Exemplu - Am un stil XML Parser - un modul plugin pentru XML Parser. Aceasta este prima versiune. Apoi găsesc ceva mai bun, mai convenabil, mai interesant, scriu următorul modul. Apoi nu le mai folosesc și îmi scriu propriul analizator XML, foarte tare, rapid. Și problema este că îmi trimit patch-uri la acele module pe care nu le mai folosesc. Intri în codul vechi de trei ani și te uiți: „La naiba, asta e ineficient, am scris asta? Oh, da, totul trebuie rescris. Și rescrierea a ceva vechi nu este interesantă - de ce?

    Cum să (auto)învățați?

    Nu am citit o singură carte de IT în toată istoria mea - așa că de la început până la sfârșit. Cu excepția lui Norton și a asamblatorului lui. Și puțin din Kernighan și Ritchie, pe care le-am citit când am scris deja multe în C. A fost doar interesant să-l deschid și să-l citesc așa: știu asta, știu aici, o, asta este interesant, știu, știu, știu.

    Materialul principal al pregătirii mele este documentația, acestea sunt articole, acestea sunt coduri sursă. Îmi place să citesc sursele. Există încă experimente în practică, și competiții și, în principiu, încerc să urmăresc ce se întâmplă în general în mediu, în contextul „ce se întâmplă dacă aduci ceva din alte limbi în Perl”.

    Am trecut certificarea pe Scrum, am studiat, dar nu a fost urgent necesar. Nu că mi-am dat seama brusc: la naiba, ar trebui să învăț! Mi-a lipsit întotdeauna interesul personal. Când la un moment dat nu erau suficiente cunoștințe de arhitectură, m-am așezat și am citit: despre baze de date, despre rețele.

    Am predat putin la MIPT... inainte sa fiu dat afara de acolo. În primul semestru de informatică, Pascal era deja studiat în sus și în jos. 10 minute per sarcină, în restul timpului stați pe aceeași mașină, scrieți niște fractali în assembler. Profesorul nostru a văzut asta și a spus: „Ei bine, asta este!”. Și îmi spune (mie și unui alt tip care a scris în C ++ în loc de asamblator): „Din moment ce sunteți ca voi aici și nu vă interesează, aici citiți un curs C ++ colegilor de șase luni, iar tu citești assembler. Și îți dau un credit pentru întregul an, este în regulă? Bine.

    Am predat așa ceva: cartea lui Norton, într-o zi stau singură, rezolv toate aceste probleme, studiez, vin cu 14 sarcini diferite, vin, spun, dau sarcini. În mod surprinzător, grupul meu a trecut destul de bine de asamblare la ieșire.

    Recent, am predat un curs de programare Perl la Universitatea de Stat din Moscova împreună cu alți doi dezvoltatori Perl. O experiență foarte interesantă, care a arătat că într-un eșantion mare de oameni cu siguranță vor fi mulți cărora le va plăcea această limbă.

    În general îmi place să vorbesc. Când am lucrat în Agave și am dezgropat câteva lucruri interesante, mi s-a cerut să spun. Am vorbit la un mic hangout intra-pearl pe Moscow.pm. S-a dovedit că toată lumea era interesată de acest lucru și au cerut să spună la o conferință mare. Am fost la cel mare - YAPC::Russia 2008 - povestit timp de patruzeci de minute plus tot prânzul. Imi place. Am vorbit la conferința Highload și în altă parte (cred că la devcon).

    Apoi m-am gândit: tot ce știu, am spus. Dar practica a arătat că oamenii încă nu știu nici măcar ceea ce am spus deja de mai multe ori. Și asta se poate repeta. Și apoi a apărut ocazia de a spune asta studenților. Mai mult decât atât, creierul studenților nu este derutat de gândurile că Perl este secolul trecut. Sunt gata să se uite la o varietate de tehnologii, totul este interesant pentru ei.

    La ce să te aștepți de la viitor?

    Trebuie să mă gândesc unde se duce totul, din moment ce o fac. De fapt, nu văd premisele pentru schimbări fundamentale în programare. Ei bine, în 20-30 de ani, limbile se vor schimba: vom scrie nu doar programe, ci și programe care scriu programe.

    Se va dezvolta în direcția reducerii operațiunilor de rutină, în direcția repetării aceluiași lucru. Poate că undeva va exista o schimbare în tehnologie, cum ar fi „vom trece de la cristale la optică”.

    De fapt, totul se află într-o logică binară, matematică. Poate că vor apărea lucruri mai adaptate la ceea ce se numește „logica neclară”. Apoi vom vedea alte limbaje de programare și dispozitive adaptate pentru aceasta. Tot felul de logici neclare de recunoaștere a imaginilor, de exemplu, se află în această zonă. Dar mie însumi nu-mi plac astfel de aplicații matematice și nu prea mă ocup de ele, îmi place să scriu în logică binară: când există un algoritm, o dimensiune clară... Cred că acest model va rămâne pentru majoritatea noștri. vieți.

    În cele din urmă, am decis să jucăm o rundă blitz de întrebări și răspunsuri cu domnul Anderson.

    - Îmi poți spune o poveste amuzantă din zilele tale de programare a liceului?

    Când m-am mutat la școala de informatică și matematică în clasa a X-a, colegii mei scriau deja în pascal, li s-a dat din clasa a VIII-a. I-am stăpânit rapid sintaxa, dar am încercat să predau programe pentru o lecție. Pentru că nu am putut salva! Nicio infecție nu mi-a spus cum să salvez pe această dischetă blestemată. S-ar părea, ia-l și află, dar cumva nu am reușit să economisesc, nu-mi amintesc exact de ce. Primul semestru al clasei a X-a - nota mea abia este 3, pur și simplu pentru că nu știam să economisesc. Părinții mei s-au gândit și s-au gândit, au hotărât că într-o astfel de situație nu va dura mult să studiez la această școală și și-au cumpărat un computer de acasă.

    - Și care a fost prima jucărie de pe computerul tău de acasă?

    - crede că fiecare programator ar trebui să lucreze într-un startup... Ai avut o astfel de experiență?

    Am plecat de la Agava pentru a face site-uri. Ne-am adunat cu mai multe persoane, ne-am dat seama, erau deja destul de multe comenzi la acea vreme - fiecare treime dintre cunoscuții mei (așa era mediul) întrebau: pot să-i fac un site web? Am început cumva să fac site-uri web, dar din punct de vedere pur al programării am săpat: m-am gândit că acum voi face un cadru universal. Ideea a fost următoarea: voi depune un constructor și apoi voi colecta site-uri pe el.

    Practica a arătat că abilitățile pe care le aveam atunci nu puteau decât să îmi ofere. Nu am văzut cum să mă extind. Aș putea lua mai mulți oameni, dar ei, după părerea mea, fie ar face la fel, fie mai rău în același ritm, așa că am împărți acești bani. Nu am văzut nicio creștere. Am predat site-urile, am decis să renunț la această afacere și m-am întors la Agava cu o creștere salarială față de cea anterioară. S-a dovedit că la acea vreme munca cu normă întreagă era mai profitabilă decât munca independentă.

    Mi se pare că sunt un startupper prost, pentru că vreau să fac mai bine, chiar dacă este nevoie de timp. Orice student care își ia libertatea de a nitui rapid un prototip și de a-l arăta unui investitor poate fi un startup mai de succes decât mine.

    Folosește-ți timpul

    „Gestionarea timpului” este cel mai popular nume pentru această abilitate. Mulți oameni sunt preocupați de utilizarea timpului: timpul este singura resursă cu adevărat de neînlocuit pentru noi. Și sunt tot mai multe distrageri în jur. Vă oferim tehnici și instrumente dovedite de gestionare a timpului.

    Abilitate aferentă - .

    - Regreți ceva din biografia de lucru?

    Regret că am petrecut primii ani pe tot felul de gunoaie, aceste site-uri, administrarea sistemului. A oferit ceva experiență, dar aș fi primit această experiență în mult mai puțin timp. Cred că mi-ar plăcea să merg pe Mail.ru plus sau minus imediat ce am plecat din institut și am realizat că repararea calculatoarelor nu e treaba mea.

    Pentru cei mai tineri, vă sfătuiesc să vă amintiți că timpul este singura resursă valoroasă.

    De obicei, o schimbăm în experiență și, de asemenea, experiența nu este rea. Pur și simplu devine mai dificil mai târziu, sunt mai multe responsabilități, se pierde libertatea de acțiune. Fiind student și putând trăi cu o mie și jumătate de ruble pe lună (începutul anilor 2000), vă puteți permite orice, orice startup. Dar când ai o familie și o ipotecă mare, lucrurile se complică.

    • Serghei Savenkov

      un fel de recenzie „rare”... parcă s-ar grăbi undeva