Showing posts with label Programarea vizuală. Show all posts
Showing posts with label Programarea vizuală. Show all posts

Monday, October 2, 2017

Programarea structurată


Deși s-a făcut multă vâlvă cu programarea structurată, ea nu a prins mult timp la noi pentru că limbajul FORTRAN nu era făcut pentru așa ceva. A scrie un program structurat în FORTRAN era ca și cum programatorul s-ar scărpina în nas ducând mâna pe la ceafă.
Cartea de programare a lui Stelian NICULESCU referită prin:
Stelian NICULESCU - FORTRAN, inițiere în programare structurată, Editura Tehnică, București, 1979, 278 pg,
excelent scrisă dealtfel, a dat o metodologie, un mod de gândire, dar nu ceva care să fie transpus imediat în texte sursă, căci limbajul FORTRAN avea un mod de-a dreptul bizar de a implementa structura alternativă, el neavînd acel magnific else în structura prea simplificată if (expresie)eticheta1,eticheta2,eticheta3.

Structura alternativă, frumoasă în schema logică, are o rezolvare de tot râsul în textul sursă FORTRAN prin introducerea de comentarii și de GO TO spe un CONTINUE.

Structura repetitivă de tip DO-UNTIL este superbă în schema logică.


Arată rău ca secvență de FORTRAN prin artificiile de dragul a nimic drăguț și simplu. Aceste exemple sunt din cartea:


În facultăți s-a predat programarea structurată, în cursurile de pregătire făcute peste tot pentru programatorii aflați în funcție s-au predat cursuri și s-a făcut practică de analiză și de dezvoltare de structuri software după principiile programării structurate. Ideia fundamentală era să se elimine din programe instrucțiunea GO TO despre care teoreticienii din programare aveau o părere foarte proastă căci ea distrugea liniaritatea programelor. Eu cred că dacă ne gândim ceva mai bine vom vedea că la nivel de text assembler instrucțiunea BRU este de neocolit, dar aceasta este o altă poveste.
dacă programele FORTRAN erau mai puțin structurate, știu că multe dintre programele scrise în limbajul COBOL au fost scrise structurat, ceea ce este mare lucru, dacă se are în vedere că peste 60% dintre programele aflate în uz curent în centrele de calcul erau scrise în COBOL.
În centrele teritoriale de calcul sau în oricare altă entitate unde se elabora software, faza de elaborare a diagramelor - schemelor logice, evidenția utilizarea cerințelor programării structurate, lucru deosebit de important pentru lizibilitatea lor și pentru asigurarea corespondenței aproape 1:1 a blocurilor de acolo cu instrucțiunile din textele sursă.
(02 octombrie 2017)

Programarea standard


În anul 1980 am publicat la Editura Litera din București cartea Programmarea standard în a cărei bilbiografie nu se află niciun document de partid sau cuvântare a lui Nicolae CEAUȘESCU așa cum se obișnuia, care se referă prin:
Ion IVAN - Programare standard, Editra litera, București, 1980, 123 pg..
Am ales un design al copertilor care să sugereze ceea ce se utiliza atunci în informatica aplicată - cartela perforată Față de cum arata acum textele de la imprimantele laser, ceea ce se tipărea prin anii '70 - '80, după cum se vede pe ultima copertă, este o diferență de la cer la pământ. Nu are referiri in nota introductivă la politica partidului așa cum aveau toate carțile.
Bibliografia nu contine lucrari politice, cuvântări ale lui Nicolae Ceaușescu și nici documente de partid. O astfel de abordare, în anul 1980 așa cum rezulta din coperta interioară, nu este un lucru oarecare, din moment ce toată lumea făcea altfel, pentru a ușura publicarea de lucrări care nu erau nici de economie politică, nici de socialism științific, nici de filosofie, care justificau într-o oarecare masură abateri de la rigorile științifice.
Am zis ca analiștii sunt mai întâi excelenți programatori, iritând colegi care făceau analiză de sistem informatic fără să fi scris vreodată o linie sursă de program.
Pe cele 123 pagini sunt:
- cuprinsul în limba română, rusă, engleză și germană
- nota introductiva
- două anexe
Lucrarea are nouă capitole, după cum urmează:
- consacrarea unei terminologii
- complexitatea sistemelor de programe
- calitatea sistemelor de programe
- productivitatea muncii programatorilor
- gestiunea resurselor în unitațile de informatică
- premisele programării standard
- proceduri, secvenîe și programe standard
- programarea standard este....
- două instrumente utile pentru programarea standard.
Cartea era rezultatul unei experiențe intense de soluționare de probleme complexe prin reutilizare de proceduri și secvențe de program orientate pe prelucrări matriceale. Construisem o bibliotecă de proceduri FORTRAN pentru calcule matriceale care permitea:
- citirea de pe cartele a matricelor pe linii, pe coloane, dar și a matricelor rare
- afișarea de matrice pe linii, pe coloane, integrale, pe blocuri
- efectuarea de calcule matriceale
- calcul determinanți
- aflarea inversei
- generarea de matrice după reguli
- calcule cu linii ale matricelor
- calcule cu coloane ale matricelor
- extragerea de submatrice
- inversarea matricelor folosind blocuri
- agregări de matrice
- însumari pe linii
- însumari pe coloane
- aflarea de minime și maxime pe linii/ coloane
- interschimb linii/coloane/elemente
- concatenări de matrice.
Testele au vizat estimările prin metoda celor mai mici pătrate clasic dar și în două și trei trepte, precumși tot felul de calcule statistice, analiza dispersională. Chiar și calculele de bilanț se efectuau folosind aceste proceduri, scrise omogen în raport cu un stil de programare și de compunere a listelor de parametri. Procedurile erau autodocumentate și ocupau cam o cutie de cartele perforate. Ele erau gândite încat multe dintre proceduri apelau proceduri considerare că efectuează operații elementare de prelucrări matriceale.
Programarea standard s-a practicat dar nu sub acest nume, ci pur și simplu au fost scrise programe reutilizând componente de bibliotecă în proporție de peste 80%.


(02 octombrie 2017)

Programarea în cod mașină

Fără să mă dau rotund în anul al III-lea de studenție chiar am făcut programare în cod mașină, lucru care nu era deloc foarte simplu, dar era așa de frumos încât nu regret nicio clipă că am făcut acest exercițiu fabulos. Pentru a scrie programe în cod mașină se specificau:
- structura programului ca fiind o succesiune de instrucțiuni scrise una sub alta;
- structura instrucțiunilor ca fiind formată din cod ioerație și listă de operanzi;
- lista de operații și cpdurile numerice asociate fiecăreia;
- modul de definire a adreselor absolute pentru instrucțiuni și operanzi;
- sistemul de gestionare a adreselor absolute;
- delimitatorii de instrucțiuni și de program;
- modul de perforare și de operare;
- obținerea rezultatelor.
Să zicem că totul într-un limbaj cod mașină ipotetic este cu patru cifre, adică pentru codurile operațiilor se asociază patru cifre, pentru adresele operanzilor adresele au patru cifre. Să zicem că adunarea are codul 0001, scăderea are codul 0002, memorarea are codul 0003. Să zicem că dorim să evaluăm expresia e=a+b+c-d-f+g cu  a = 7, b= 200, c=13, d=27, f=18 și g=33Să zicem că instrucțiunea de start are codul 0000, iar instrucțiunea de stop are codul 9999. Mașina are un singur registru notat 8888. Pentru tipărire se flosește codul 7777. Să zicem că se definesc mai întâi operanzii, iar prima adresă fizică este 4444. Să zicem că ceea ce acum se cheamă cuvânnt de memorie are 4 bytes și că reprezentarea este astfel gândită încât orice instrucțiune și orice operand să fie reprezentate pe un astfel de cuvânt. Programul va fi:
4444   0007
4448   0200
4452   0013
4456   0027
4460   0018
4464   0033
4468   9999
4472   0002, 8888,8888
4476   0001, 8888,4444
4480   0001, 8888,4448
4484   0001, 8888,4452
4488   0002, 8888,4456
4492   0001, 8888,4460
4496   0001, 8888,4464
4500   7777, 8888
4504   9999
Lucrrurile în cod mașină nu au stat așa de simplu pentru că acolo erau câteva zeci de coduri de instrucțiuni elementare și lipsa posibilității de a pune comentarii decât pe foaia de hârtie a programatorului ducea la mai dificultăți în a gestiona programe de câteva zeci sau sute de instrucțiuni. Și totuși așa au fost rezolvate probleme comolicate precum inversarea de matrice sau soluționarea de sisteme lineare de ecuații prin metoda Gaus-Seidel.
Programarea în cod mașină a avut misterul ei și nu trebuie sărit peste ea, căci în vremuri de restriște depanarea de programe revine la a lucra chiar pe cod mașină dacă dorim să soluționăm științific o problemă, mergând tot științific de la cauză la efect după un algoritm determinist, deși eroarea are caracter aleator, cred alții, noi nu.
Programarea în cod mașină a avut farmecul ei, dar ca orice mâncare dacă este mâncată în fiecare zi omul se satură și vrea să treacă la felul doi, adică o programare în limbaj de asalnlare, apoi la deser, programarea în FORTRAN sau COBOL.


(02 octombrie 2017)

Sunday, October 1, 2017

Tehnici de programare

Tehnicile de programare trebuie văzute ca seturi de reguli generate de noile resurse pe care le introduc limbajele de programare, astfel încât construcțiile software să fie realizate:
- eficient;
- optimal;
- în timp cât mai scurt;
- de înaltă calitate;
- cu costuri minime;
- în regim industrial.
La început fiecare a scris programe cum a crezut, adică după felul cum s-a priceput. Unii au căutat să învețe să scrie programe așa cum erau cele din cărțile de unde ei înșiși citiseră primele noțiuni de limbaje de programare. Alții mai inventivi căutau să îmbunătățească programele lor construind propriile reguli. Problemele cele mai complicate au apărut atunci când calculatoarele au avut resurse mai mari și s-au impus rezolvări ale unor probleme de mare complexitate cărora le corespundeau bucăți de programe scrise de mai mulți programatori, care puse cap la cap trebuiau să dea un întreg numit produs program sau software al unui sistem informatic. Obținerea acelui grad de omogenitate a părților de program care să dea întregul de la două sau cel mult cinci încercări a devenit posibilă numai prin definirea de tehnici de programare și scrierea de programe folosind aceste tehnici de programare.
De-a lungul timpului au apărut tehnici de programare foarte diferite, unele mai speciale decât altele, dar de fiecare dată s-a văzut progresul pe care acestea îl aduceau mai ales în zona creșterii productivității programatorilor și cea a creșterii calității produselor software.
Programarea în limbaj mașină a reprezentat exact ceea ce reprezintă culorile din tuburi pentru un pictor care și-a propus să facă o frescă imensă, fără să aibă altceva decât imaginea din mintea sa, peretele tuburile, pensule, penelul și bineînțeles talentul său genial dacă-l posedă. programatorul are doar câteva materii prime, câteva principii și restul trebuie el să facă și încă foarte bine.
Programarea ca artă este folosită și azi, mai ales de programatorii care lucrează programe pentru ei, fără a se gândi la ceea ce se întâmplă cu produsele lor finite, mai ales dacă ei înșiși recunosc că nu sunt interesați nici de reutilizabilitate și nici de integrabilitate.
Programarea structurată s-a dorit ceva absolut special, dar nu a prins pentru că a fost dusă acolo unde nu se potrivea, adică spre limbajul FORTRAN, limbaj prin excelență care folosea instrucțiunea GO TO, ceea ce programarea structurată interzicea categoric. Cred că limbajul COBOL ar fi fos mai nimerit pentru a implementa cerințele programării structurate, asigurând linearitatea prin instrucțiunea PERFORM folosită la maximum și inteligent.
Programarea orientată obiect a venit o dată cu limbajele Pascal și C++, dar chiar și acum sunt mulți programatori care sunt în stare să vorbească ore în șir despre obiecte și funcții virtuale, dar care se vede de la o poștă că mimează programarea orientată obiect pentru că nu o simt în sânge.
Programarea vizuală se adresează celor care doresc să realizeze construcții software cât mai complexe și care au la dispoziție resurse pe care le construiesc singuri și pe care sunt ajutați să le reutilizeze, cu o gestionare foarte bună a redundanței. Cine stă pe lângă un programator care folosește acestă tehnică are impresia că stă în fața unui vraci care face știință.
Programarea industrială este asemeni comunismului, visul de aur al programatorilor care doresc să dezvolte programe în regim indistrial, așa încât programele să nu mai pară chestii individuale, ci rezultatul unei munci de rutină. Acum limbajele de programare îi ajută foarte mult și nu va trece timp îndelungat când vor fi introduși in 100 de săli 100 de programatori și vor fi puși să scrie independenți unii de ceilalți, soluția unei probleme fără să li se dea alte detalii decât textul problemei - specificațiile deci, iar ei vor scrie cele 100 de texte sursă care nu vor diferi între ele decât cu cel mult 5%, ceea ce dacă s-ar face azi, diferențele ar fi cred eu de cel puțin 40%, programatorii lucrând azi tot independent unii de ceilalți.
În opinia mea, programatorii sunt un fel de poeți ai calculatoarelor și sunt foarte greu de strunit, iar a-i forța să scrie programe toți în același fel este un eșec, exact așa cum Școala de literatură din anii proletcultismului a eșuat, căci nu există nici linii tehnlogice de a scrie poezi și nici linii tehnologice de a scrie programe așa cum sunt linii tehnologice în industrie pentru a face șuruburi.
Tehnicile  de programare reprezintă în istoria informaticii exact ceea ce reprezintă periodizarea după modurile de producție în istorie. Comunei primitive  îi corespunde programarea în cod mașină. Sclavagismului îi corespunde programarea empirică. Pentru capitalism este programarea structurată. Imperialismului îi corespunde POO. Sorry, comunismului nu-i corespunde nimic.



(02 octombrie 2017)