Sunday, February 7, 2010

Conceptele de Algoritm si Proiect

... sau despre lucrul la proiecte si lucrul in echipe. ... DRAFT ...
Proiectul Gutenberg (1971): http://ro.wikipedia.org/wiki/Proiectul_Gutenberg

Concepte ce au revolutionat stiinte si au avut impact deosebit in planificarea, organizarea, executia si controlul activitatilor umane si nu numai.
- daca cineva (amator, specialist sau expert) ar incerca sa defineasca mai complet aceste concepte, cu siguranta nu va obtine o definire completa. Este vorba despre dinamica semnificatiei / semanticii acestor concepte ce se schimba rapid.

O idee de start: Maureen Sprankle and Jim Hubbard, Ploblem Solving and Programming Concepts, Pearson - Prentice Hall, 2009, 8th ed.

O alta idee de start: În etapa actuală de dezvoltare ştiinţifică, tehnică, socială şi economică, rezolvarea unei probleme dintr-un domeniu (matematică, fizică, chimie, economie, medicină etc. ) reprezintă o activitate de creaţie, ce reclamă un raţionament sau mai multe, prin construirea, generarea, şi descrierea următoarelor procese (Link, M. Sudhanshu, 2006):
proces demonstrativ (demonstraţia) care să arate existenţa unei soluţii sau a mai multor soluţii şi/sau să determine efectiv soluţiile exacte; în acest caz, specialistul sau expertul trebuie să aibă cunoştinţe solide de matematică şi implicit cunoştinţe corespunzătoare domeniului; rolul matematicii este esenţial;
proces computaţional (algoritmul) care să codifice un proces demonstrativ, o metodă sau o tehnică de rezolvare în scopul determinării (eventual aproximative) a soluţiilor exacte; în acest caz, specialistul sau expertul trebuie să aibă experienţă în domeniul modelării şi utilizării calculatorului; rolurile informaticii şi ale IT (tehnologiei informaţiei) sunt esenţiale. ("De la teorema lui Green la geometria computaţională", CNIV 2006 )

Deoarece am folosit cuvintele "revolutionar, impact, deosebit", pentru argumentare, vom descrie 3 exemple:

1. Limbajele de programare (Programming Languages). Evolutia si utilizarea conceptelor de Algoritm si Proiect au contribuit la inventarea, conceperea, elaborarea, implementarea si utilizarea limbajelor de programare ce sunt limbaje artificiale (limbajele sunt instrumente ale gandirii, vezi "Limbaje si Cunoastere vs Modelare si Procesare", CNIV 2005, http://marinvlada.googlepages.com/Modelare_vlada.pdf).

Un limbaj de cunoaştere este sistemul virtual/logic
L = ( V, Sin, Sem, O, C, T, Tc) , unde
V = vocabular/alfabet, Sin = sintaxa (reguli), Sem = semantica (reguli), O = obiecte, C = concepte / termeni, T = teorii / metode / tehnici de rezolvare, Tc = tezaurul cunoaşterii (baza de cunoştinţe).

Este vorba de peste 2500 de limbaje de programare vechi si noi. (A Chronology of Influential Languages, Sursa: Maintained by Bill Kinnersley, University of Kansas)
- Complexitatea si varietatea este data de schema ce reprezinta evolutia limbajelor de programare (arborele genealogic). A History of Programming Languages (Programming paradigm):
• 1957 FORTRAN
• 1958 ALGOL • 1960 LISP
• 1960 COBOL • 1962 APL
• 1962 SIMULA • 1964 BASIC
• 1964 PL/I • 1966 ISWIM
• 1970 Prolog • 1972 C
• 1975 Pascal • 1975 Scheme
• 1977 OPS5 • 1978 CSP
• 1978 FP • 1980 dBASE II
• 1983 Smalltalk-80 • 1983 Ada
• 1983 Parlog • 1984 Standard ML
• 1986 C++ • 1986 CLP(R)
• 1986 Eiffel • 1988 CLOS • 1988 Mathematica
• 1988 Oberon • 1989 HTML • 1990 Haskell • 1994 Perl 5 • 1995 Java, Delphi • 1997 JavaScript, PHP • 2000 C# ...
- Dictionary of Programming Languages (Dictionary and script maintained by Neal Ziring)

Ca rezultat al unui "proiect" de cercetare pentru domeniul militar, savantul John von Neumann a conceput arhitectura unui calculator electronic (arhitectura von Neumann din 1945, raport de cercetare) ce ste valabila si astazi. Cu aceasta a inceput aventura construirii calculatoarelor moderne:
a) componentele de baza ale unui calculator: memorie, procesor, sisteme input/output
b) limbaje de programare si sisteme de operare
c) algoritmi de calcul si programe de aplicatii
S-a realizat o competitie intre componenta hardware (partea tehnologica) si componenta software (partea logica) a calculatoarelor. Aceasta evolutie si dezvoltare se poate intelege doar daca se scoate in evidenta evolutia conceptului de Algoritm si inventarea unei noi abordari privind activitatea de cunoastere a omului in aventura sa catre evolutie si dezvoltare: planificare, organizare, activitati, control, verificare, toate acestea reprezentand activitatea omului pe baza de Proiecte.
1950 - se inventeaza "diagrama Gantt" conceputa de Henry Gantt - întemeietorul managementului de proiect si considerat părintele planificării şi al tehnicilor de control.


- Vlada, M., Conceptul de algoritm-abordare modernă, Gazeta de informatică, vol. 13/ 2 si 3, 6 si 7 pp. 25-30, pp. 35-39, pag. 43-48, pag. 42-48 Agora, Cluj Napoca, 2003.
http://www.ginfo.ro/revista/13_2/babel.pdf
http://www.ginfo.ro/revista/13_3/babel.pdf
http://www.ginfo.ro/revista/13_6/babel.pdf
http://www.ginfo.ro/revista/13_7/babel.pdf
- Vlada M., Abordarea modernă a conceptului de algoritm, Conferinta Natională de Învătământ Virtual, editia a II-a, 2004, pag. 231-240 - http://marinvlada.googlepages.com/concept_algoritmi.pdf


2. Proiectul japonez (1981-1990) si proiectele europene (1990-2010).

Lansarea Proiectului japonez în anul 1981

Deceniul 8 al secolului XX-lea a fost unul al marilor succese în domeniul Inteligenţei artificiale, al dezvoltării reţelelor de calculatoare şi al răspândirii limbajelor de programare moderne.
Lansarea Proiectului japonez în anul 1981 pentru construirea calculatorului de generaţia a V-a la începutul anilor ’90; acesta prevedea o revoluţie în domeniul calculatoarelor prin aşa-numitele sisteme de procesare a informaţiei de cunoaştere (KIPS-Knowledge Information Processing Systems); având finanţare guvernamentală de 1 miliard $ şi colaborarea mai multor firme japoneze importante, s-a înfiinţat un institut special ICOT (Institute for New Generation Computer Technology) care a editat revista internaţională "New Generation Computing" (www.ohmsha.co.jp/ngc), astăzi fiind una dintre cele mai prestigioase reviste din lume; proiectul a avut un impact deosebit pe plan mondial; începe să se predea Inteligenţa Artificială ca disciplină a Informaticii în învăţământul superior.

Aparitia produselor software - software engineering
Definiţie. Un produs software este un rezultat/produs obţinut în urma unui proces creativ uman, fiind un obiect/istrument utilitar, distinct şi identificabil individual ca element virtual/logic şi care fizic există în format electronic pe un suport de memorie magnetică/optică de tip FD (floppy disk), HD (hard disk), CD (compact disk) sau Memory Stick. Formatul electronic al produsului poate reprezenta: un program ce rezolvă anumite probleme, un sistem de operare, un compilator, un interpretor, un program convertor, un program utilitar, un mediu de operare, un mediu de programare, un mediu de rezolvare, o platformă, o procedură, un program editor, un generator de programe, un program ativirus, un document HTML/PHP/ASP, un program de e-mail, un browser etc.

Astăzi, există deja dezvoltat un domeniu ingineresc destinat produselor software, şi anume ingineria software (software engineering; R. Pressman, Software Engineering. A Practitioner’s Approach, Mc-Gaw Hill, 1987).

Conform definiţiei moderne a ingineriei software la baza elaborării unui produs software se află următoarele aspecte (I. Jurca, Programarea orientată pe obiecte în limbalul C++, Ed. Eurobit, Timişoara, 1992):
Metode – cunoştinţe de specialitate (« know how ») privind planificarea, analiza cerinţelor, proiectarea, codificarea, testarea, utilizarea şi intreţinerea;
Unelte – diverse tehnologii automate sau semiautomate ce oferă sprijin pentru metode (Exemplu : CASE-Computer Aided Software Engineering);
Proceduri – realizează secvenţele prin care se vor aplica metodele, precum şi produsele ce execută ieşirile (rapoarte, documente, formulare etc.) .
La baza obţinerii produselor software se află evoluţia şi dezvoltarea limbajelor de programare.
În general, la baza evoluţiei societăţii omeneşti se află evoluţia şi dezvoltatea cunoaşterii umane. Cunoaşterea este dependentă de limbajele cunoaşterii (M. Vlada, CNIV 2005-2009).


Proiecte mondiale

Deceniul 9 al secolului XX-lea a fost unul al marilor realizări în domeniul Tehnologiei informaţiei şi comunicaţiei (IT&C) prin dezvoltarea şi răspândirea tehnologiilor WEB şi reţelei Internet, perfecţionarea sistemelor de operare şi a mediilor de programare:
-apariţia sistemului de operare Linux – în anul 1992 apare primul sistem de operare “free software” cu facilităţi deosebite pentru reţeaua Internet care utilizează protocoale de comunicaţii (TC/IP, FTP, IPX etc) pentru serviciile: poşta electronică (E-Mail), zone de informare (WWW, Gopher, FTP), Newsreader (cititor de ştiri); apariţia şi răspândirea site-urilor Web
- apariţia tehnologiei Java – în anul 1995 este lansat mediul de programare Java ce oferă suport dezvoltării de aplicaţii distribuite, independente de platformă; produs software evoluat al firmei Sun Microsystems moşteneşte conceptele de programare obiectuală de la limbajele C++, SmallTalk, Lisp
- lansarea ca sistem de operare a sistemului Windows - în anul 1995 a apărut sistemul de operare Windows 95 urmat de versiunile ulterioare 98, 2000; pentru reţelele de calculatoare a apărut începând cu anul 1992 Windows NT Workstation/Server; s-au dezvoltat sistemele de operare Netware, OS/2
- perfecţionarea şi utilizarea pe scară largă a pachetului Microsoft Office – mediile de programe aplicative Word, Excel, Access, Outlook, Power Point (1998)
- realizări hardware-software-platforme-aplicaţii - proiectare circuite integrate 3D, componente optice, arhitecturi paralele pentru prelucrarea inferenţelor, reţele din fibra optică de mare capacitate, reţele neuronale; sisteme de operare cu interfaţă evoluată cu utilizatorul, limbaje concurente, programare funcţională, prelucrare simbolică (limbaje naturale, recunoaşterea formelor: imagini/voce), Baze de date-Dbase, Foxpro, Oracle, Prolog, baze de cunoştinţe, sisteme expert evoluate, CAD, CAM, CAE, tehnologii multimedia, Realitate Virtuală, Tehnologii Web.

Proiecte europene de cercetare-dezvoltare (1990-2010)

Societatea Informaţiei Globale – iniţiativă lansată în anul 1994 la summit-ul şefilor de state şi de guvern ai ţărilor G7 (azi, există G8, prin aderarea Rusiei), desfăşurat la Napoli; la “Conferinţa pentru Societatea Informaţională” de la Bruxelles din anul 1995, s-a analizat implementarea unei infrastructuri informaţionale competitive la nivel mondial ;
• Comunicaţiile în Societatea Informaţională – Conferinţa desfăşurată în anul 1997 în Estonia la care au participat 19 ţări;
• Proiectele Pilot G8 – în anul 1998 , grupul G7 la care s-a alăturat şi Rusia, a lansat Proiectele Pilot pentru dezvoltarea Societăţii Informaţionale în domeniile educaţiei, culturii, comerţului, mediului înconjurător, sănătăţii şi administraţiei publice;
• EURIDYCE – Technologies de In’formation et de la communication dans les systemes educatifs en Europe, Paris, 2000 (www.euridyce.org)
• eEurope şi eEurope+ – programe de acţiune lansate în anul 2001 la nivel european pentru ţările UE, dar şi pentru ţările în curs de aderare la UE (eEurope+) (www.europa.eu.int) ;
• Global Tera byte Recherche Network (GTREN) – program de acţiune lansat în 2002 pentru dezvoltarea infrastructurii de comunicaţii şi realizarea unei reţele Internet mai rapidă, mai sigură şi mai eficientă;
• eEurope 2005 – lansat în anul 2002, programul de acţiune “An Information Society for All” are două obiective majore: stimularea serviciilor, aplicaţiilor şi conţinutul informaţiei electronice, şi dezvoltarea infrastructurii în bandă largă şi creşterea securităţii informaţiei şi a reţelelor;
• Sixth Framework Programme (FP6)(2002-2006) – Programul cadru 6 al Uniunii Europene (www.cordis.lu/fp6/), lansat în anul 2002 este unul dintre cele mai complexe programe de cercetare, dezvoltare şi inovare. FP6 lansat pentru perioada 2002-2006 are direcţia 2 de prioritate: Information Society Technologies (IST - www.cordis.lu/ist/)
• Seventh Framework Programme (FP7)(2007-2013) – programul FP7 (http://www.cordis.lu/fp7/ ) pentru perioada 2007-2011 cu un buget de EUR 72 726 million - http://cordis.europa.eu/fp7/home_en.html

3. Proiectul Linux - din 1991 si alte proiecte: www.apache.org, http://fedoraproject.org, www.ubuntu.com.

- Linux: A Portable Operating System.
- 1991: studentul Linus Torvalds versus profesor Andrew Tanenbaum + open source
- Software Projects (The Apache Software Foundation Projects)

Nota de start: "Linux este un sistem de operare care a fost iniţial creat ca un hobby de către un tânăr student, Linus Torvalds, la Universitatea din Helsinki, în Finlanda. Linus a avut un interes în Minix, un mic sistem de operare derivat din UNIX, şi a decis să dezvolte un sistem care sa depăşeasca standardele Minix. Şi-a început activitatea sa în 1991, când a lansat versiunea 0.02 şi a lucrat în mod constant până în 1994, când versiunea 1.0 a kernel-ului Linux a fost lansata." + Comentariu (www.linux.ro) ... " ... isi continua calatoria in noul milenium cu acelasi entuziasm cu care a inceput intr-o zi frumoasa in 1991".

- Linus Torvalds: The 100 Most Influential Inventors of All Time as one of the most important and influential inventors.

Nota: "The Apache Software Foundation provides support for the Apache community of open-source software projects. The Apache projects are characterized by a collaborative, consensus based development process, an open and pragmatic software license, and a desire to create high quality software that leads the way in its field". (www.apache.org)
Nota: The Apache HTTP Server Project is a collaborative software development effort aimed at creating a robust, commercial-grade, featureful, and freely-available source code implementation of an HTTP (Web) server. In February of 1995, the most popular server software on the Web was the public domain HTTP daemon developed by Rob McCool at the National Center for Supercomputing Applications, University of Illinois, Urbana-Champaign. However, development of that httpd had stalled after Rob left NCSA in mid-1994, and many webmasters had developed their own extensions and bug fixes that were in need of a common distribution. - http://httpd.apache.org


No comments: