Ştiri:

Vă rugăm să citiţi Regulamentul de utilizare a forumului Scientia în secţiunea intitulată "Regulamentul de utilizare a forumului. CITEŞTE-L!".

Main Menu

Limbaje de programare

Creat de alina.d, Octombrie 26, 2009, 07:01:24 PM

« precedentul - următorul »

0 Membri şi 1 Vizitator vizualizează acest subiect.

gheorghe1800

#60
Citat din: HarapAlb din Martie 17, 2010, 11:52:26 PM
E "prost" sa inveti un limbaj fara obiecte inaintea unui orientat pe obiecte, asa cum este la fel de prost sa inveti un limbaj care te face sa gandesti ca o masina (C/C++ si restul...) inaintea unui limbaj in care poti scrie programele urmand gandirea umana (de exemplu LISP).

Lisp nu urmeaza gandirea umana ci gandirea matematica(functionala). Un limbaj care incearca sa emuleze intr-o oarecare masura gandirea umana este CLIPS (limbaj bazat pe reguli de productie).

Daca vrei sa fii programator este necesar sa gandesti ca masina pe care o programezi, altfel te va eluda. Nu exista o masina Lisp (s-a incercat sa se faca de baietii de la emacs, dar au lasat-o balta, nu mai stiu din ce motiv). Este emulat pe PC evident, dar merge destul de greu si nu e folosit in productie (in afara de Emacs, evident). In plus Lisp nu este un "lambda machine" pur, ci se bazeaza intr-o masura semnificativa si pe chestii imperative.

P.S. Un link interesant:
http://www.youtube.com/watch?v=WVTWCPoUt8w

HarapAlb

#61
Citat din: gheorghe1800 din Martie 18, 2010, 01:49:53 AM
Daca vrei sa fii programator este necesar sa gandesti ca masina pe care o programezi, altfel te va eluda. Nu exista o masina Lisp (s-a incercat sa se faca de baietii de la emacs, dar au lasat-o balta, nu mai stiu din ce motiv). Este emulat pe PC evident, dar merge destul de greu si nu e folosit in productie (in afara de Emacs, evident). In plus Lisp nu este un "lambda machine" pur, ci se bazeaza intr-o masura semnificativa si pe chestii imperative.
Astea nu-s argumente pentru a nu invata/studia un anumit limbaj de programare. In particular, invitatia de a invata LISP trebuie inteleasa ca o deschidere spre lucruri mai putin intalnite. Cred ca asta  cel mai important la inceput de drum, nu sa-i spui omului "invata limbajul X si cu el de gat o sa mori pentru ca nu-i altul mai bun".

PS: Inca un documentar despre GNU, Linux, open source si free software: Revolution OS

radhoo

#62
Citat din: HarapAlb din Martie 17, 2010, 11:52:26 PM
CitatDar cum am spus de la inceput, nu se invata un limbaj doar de dragul unei preocupari, ci se identifica necesitatea si apoi se alege limbajul care o poate rezolva cel mai bine. Dezvoltarea de aplicatii nu este un hobby, este o meserie care necesita o pregatire temeinica si apoi, experienta.
Tocmai ca intrebarea initiala nu se referea la nici o necesitate de a rezolva ceva concret, nu era vorba de meseria de programator, ci mai degraba de activitati in timpul liber.
Ok, dar atunci hai sa dam un sens, o utilitate acestei discutii. Putem propune multe exemple, unul mai exotic ca altul, iar cei ce vor citi prin ochii incepatorului vor ramane in ceata.

Care credeti ca ar fi cerintele pentru un limbaj de programare din perspectiva novicelui?
- sa aiba o sintaxa usor de inteles/ asimilat
- sa permita citirea datelor usor (de la tastatura, din fisiere)
- sa ofere suficiente tipuri de date, pentru a servi un set minim de probleme (intreg, real, boolean)
- sa acopere un minim de operatii matematice si logice
- sa ofere o modalitate cat mai usoara de a afisa rezultatele (atat in mod text, dar si in mod grafic), uite Adi  se plangea mai sus ca intampina greutati la afisarea rezultatelor programului, pentru ca in mod consola nu poate desena planetele.

Apoi un alt set de cerinte, care vin cu pretentiile crescute pe masura invatarii ar fi:
- portabilitatea codului sursa
- programare procedurala
- programare orientata pe obiect

Pentru prima categorie, sunt cateva exemple pe care le recomand:
Basic , Pascal, C (http://zanasi.chem.unisa.it/download/C.pdf )
si variantele "Click&Go":
Visual Basic, Delphi, Visual C

In a doua categorie ar intra:
C++ , Java, C#, cele 3 visuale de mai sus inca o data

Lisp/CLISP/CLIPS nu mi se pare o alegeri bune pentru un incepator.
Sunt interesante pentru a exemplifica notiuni de inteligenta artificiala, dar pe zidar nu-l invatam despre macarale decat cand are orizonturile largite.



gheorghe1800

Citat din: radhoo din Martie 18, 2010, 11:50:41 AM
Ok, dar atunci hai sa dam un sens, o utilitate acestei discutii. Putem propune multe exemple, unul mai exotic ca altul, iar cei ce vor citi prin ochii incepatorului vor ramane in ceata.

Corect!

Nu as vrea sa repet ce am spus deja mai sus. Recomand C pentru ca:
- este un limbaj foarte flexibil
- este foarte rapid
- are o sintaxa mai dificila, dar asta as zice ca nu conteaza foarte mult pentru un incepator (daca faci lucrurile grele la inceput o sa fie usor mai tarziu)
- forteaza intr-o masura programatorul sa-si structureze mai bine programul si sa faca multe lucruri "de mana" (spre deosebire de C++ sau Java care ofera multe lucruri "de-a gata")
- este (probabil) cel mai portabil limbaj (de la microcontrollere, sisteme embedded, routere, placi video pana la pc-uri, console, super calculatoare)
- sta la baza multor limbaje de nivel inalt (C++, Java, C#, etc.)

Si ar mai fi multe de spus, dar ideea de baza e simpla. Prin comparatie, unui sculptor i se pune pentru prima data in mana o dalta. Daca ii pui in mana un flex (disc de taiat electric) s-ar putea ca foarte repede sa se indrepte catre curentul cubist pentru ca nu va putea face aceleasi lucruri de finete ca si ucenicul care a fost invatat cu dalta.

P.S.: Nu as recomanda Kernigan & Richie. E o carte care descrie limbajul, e pentru programatori experimentati care vor sa faca trecerea de la fortran sau alte limbaje, sau poate servi ca un "reference book".

radhoo

Asa mai merge :)

Ai dreptate si cu cartea, dar hai sa vedem ce alte resurse mai potrivite ar fi, sa punem altceva pt cei interesati.

gheorghe1800

#65
Oricat de ironic ar parea, sincer sa fiu nu stiu sa dau example de carti bune in C. Stiu ca exista la un moment dat cartea lui Tudor Sorin, Algoritmi si limbaje de programare, clasa a X-a, varianta C (eu am varianta Pascal).

L-am intrebat totusi pe prietenul Google si iata ceva rezultate (se pare ca intr-adevar nu exista multe carti de C):

C Primer Plus, 5th ed, http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326965/ref=sr_1_1?ie=UTF8&s=books&qid=1268939828&sr=1-1, pare o carte foarte buna si pentru incepatori (pentru "xerox" mesaj pe privat  ;) )

Kernigan & Ritchie, The C Programming Language, clasica, nerecomandata incepatorilor in ale programarii, un link dat mai sus de radhoo

Limbajul C, editura Albastra, Cluj-Napoca, autor Liviu Negrescu; o carte destul de greu de citit si plictisitoare (parere proprie), dar care totusi expune toate conceptele programarii (iarasi nu sunt foarte sigur, am doar varianta C++)
http://www.gmi.ro/librarie/catalog/

Internetul, tutoriale + exemple, nu este modul ideal de a invata ceva, dar poate fi mai "fun"



P.S.: radhoo avea dreptate cateva posturi mai sus. Invatarea e cel mai bine sa fie "application driven". Intai iti setezi un scop "vreau sa fac programul X" si apoi cauti metodele prin care sa ajungi la rezultat. Un exemplu foarte simplu pe care personal il folosesc: programul "devtodo" este o aplicatie de consola care iti permite sa iti faci foarte rapid o lista de todo-uri.

Comenzile pentru adaugare si afisare sunt foarte simple:
     tda (todo add) - adauga o intrare todo
     todo - afiseaza toate intrarile curente colorate si aranjate in functie de prioritate
     tdr - remove entry, sterge intrarea
     tdd - mark as done, marcheaza ca terminata, etc.

Programul am inceput sa-l folosesc cand mi-am dat seama ca nu exista o alternativa foarte simpla in Gnome (Tomboy notes - prea multe butoane de apasat pentru a adauga ceva, sticky notes - se pierd prea usor pe ecran si sunt greu de manage-uit). Asa in terminal nu apesi decat 3 taste si incepi sa scrii. Se gaseste in repository in mai toate distributiile de Linux: Ubuntu, Fedora, etc.

AlexandruLazar

Cu ceva întârziere -- nu știu dacă o să mai folosească neapărat cuiva răspunsul meu, dar poate pe viitor vor fi și alții care vor să știe lucrurile astea.

1. Pentru oricine care este interesat de vreo formă de programare pentru aplicații științifice, C este la momentul ăsta practic obligatoriu. Există încă o baza importantă de cod Fortran 77 și Fortran 90, dar e vorba mai ales de aplicatii "legacy" (i.e. cod scris acum 10, 20, 30 de ani, optimizat foarte bine și pentru care nu există cine știe ce interes să fie rescris într-un alt limbaj, mai ales că există compilatoare fortran foarte bune), dar practic orice are de-a face cu calculul de înaltă performanță este la momentul actual cod C. Asta e ceva ce spun din experiență pentru că lucrez în domeniu. Acolo unde există interes pentru avantajele programării orientate pe obiecte (adică unde e nevoie de modularitate sporită sau aplicații de foarte mari dimensiuni), există biblioteci de clase C++ care oferă o interfață orientată pe obiecte pentru biblioteci scrise în C (MPI și OpenMP au asemenea binding-uri, plus diverse biblioteci de nivel mai înalt -- solvere pentru sisteme de ecuații ș.a.m.d.)

Sunt mai multe motive pentru asta, dar cele mai importante sunt 1. faptul că C, fiind apropiat de structura mașinii, permite să obții o eficiență foarte bună fără a scrie cod neportabil și 2. faptul că C++ are unele imperfecțiuni enervante; http://yosefk.com/c++fqa/ detaliază unele din ele pentru cine e interesat.

Părerea mea proprie și personală: după ce am interacționat cu C++ dincolo de nivelul cursurilor de facultate, e groaznic. Arată bine pe hârtie și arată bine ca și cod, dar numai dacă trebuie să-l folosești fără să-l integrezi într-un sistem mare. Adaugă cinci-șase biblioteci la sursa cărora nu ai acces, multithreading și exigențe portabilitate și o să stai mai mult cu debugger-ul decât cu prietena.

2. Programarea funcțională este o paradigmă bună pentru unele tipuri de probleme. Aplicatiile de data mining sunt un exemplu în sensul acesta. Nu cred că e potrivită ca paradigmă pentru orice -- dar sunt de părere că integrarea acestea cu programarea imperativă e foarte utilă. Exemplu doțent, cred că și pentru cineva care nu e programator, e destul de evident ce face:


x = [1:N];
map( (lambda (i) = (x(i-1)+x(i)+x(i+1))/3 ), x);


pentru că e mult mai apropiat de expresia matematică asociată (e vorba de un filtru medie alunecătoare).

3. În particular legat de Lisp: e folosit în producție dar numai în câteva locuri. Utilizatorii AutoCAD de exemplu ajung să-l știe destul de bine imediat ce au de lucrat cu modele mai complicate, la fel cei care lucrează în AI.

florin_try

#67
Citat din: radhoo din Martie 18, 2010, 11:50:41 AM

Care credeti ca ar fi cerintele pentru un limbaj de programare din perspectiva novicelui?
- sa aiba o sintaxa usor de inteles/ asimilat
- sa permita citirea datelor usor (de la tastatura, din fisiere)
- sa ofere suficiente tipuri de date, pentru a servi un set minim de probleme (intreg, real, boolean)
- sa acopere un minim de operatii matematice si logice
- sa ofere o modalitate cat mai usoara de a afisa rezultatele (atat in mod text, dar si in mod grafic), uite Adi  se plangea mai sus ca intampina greutati la afisarea rezultatelor programului, pentru ca in mod consola nu poate desena planetele.


Toate punctele enuntate mai sus sunt irelevante chiar si din perspectiva novicelui. Le-am privit ca amuzament. Ce limbaj de programare nu iti ofera un "minim de operatii matematice si logice"? Pina si un limbaj de scriptare elementar (ex: windows powershell - dar chiar si batrinul cmd din dos) iti ofera suficiente operatii matematice (restul le poti compune). Cit despre cele logice tot ce iti trebuie e AND , OR , negatie si cam atit ca pe restul le compui din astea. Nu serios, ar fi ridicol sa nu....
Sau stie cineva vre-un limbaj dedicat computerelor care nu permite citirea "de la tastatura si fisiere?"  (nu ma refer la chestii BIOS sau ASM, dar si astea au IO)

Citat din: radhoo din Martie 18, 2010, 11:50:41 AM
Apoi un alt set de cerinte, care vin cu pretentiile crescute pe masura invatarii ar fi:
- portabilitatea codului sursa
- programare procedurala
- programare orientata pe obiect

Pentru prima categorie, sunt cateva exemple pe care le recomand:
Basic , Pascal, C (http://zanasi.chem.unisa.it/download/C.pdf )
si variantele "Click&Go":
Visual Basic, Delphi, Visual C

In a doua categorie ar intra:
C++ , Java, C#, cele 3 visuale de mai sus inca o data


Probabil e prea general pentru a fi util.  Ultimul lucru de care are nevoie un incepator in programare sunt principiile enuntate de tine mai sus; iti spun asta in modul cel mai respectos - si te asigur ca pot respecta pe cineva chiar daca nu sunt de acord cu el.

Iata ce cred eu ar trebui unui incepator in programare: UN PROIECT CONCRET si STIMULENT! Adica sa defineasca clar : Vreau sa scriu un program care sa faca cutare operatiune.
Exemplu sa fie cit mai concret si problema cit mai clar definita. Iar proiectul sa nu fie ceva plictisitor ci cit mai aproape de un joculet daca s-ar putea, sau ceva care sa-i dea motivatie incepatorului.
Iata o problema concreta: Ne propunem sa facem un software care sa imite functionalitatea unui calculator de buzunar si pe care sa il pot folosi la urmatoarele (schitez si o posibila motivatie)
1) din web-browser via ruta clasica (html/css/javascript) - in speranta ca o extra-utilitate in pagina de web poate aduce un surplus de clicuri ad-sense
2) dintr-un java aplet  - in speranta de a invata java asa incit sa imi vina mai usor pe viitor cu java si de a-l transforma in executabil dos cu probabil cel mai mic efort de programre (de asemeni sper sa monetizez din executabiluk dos).
3) in Adobe flash-player. - in speranta de a invata programare in flash-player asa incit sa pot folosi flash-playerul in aplicatii mai complexe
4) in C++   - in speranta de a scoate un exectabil in DOS pe care sa-l vind dar care sa nu ma duca pe ruta mai lenta (dar probabil mai usor de programat) numita java.
5) pentru telefoane gen Android si/sau iphone.  - in speranta de a le vinde si a face bani din Apple store sau Andriod store.

SI pe urma incep cu javascript.  Nu trebiue nici un compilator nimic - doar un browser. Si parcurg pas cu pas de la interfata la implementarea functiilor sau a parserului matematic (daca eval() din javascript nu ma satisface)

Dupa ce termin repet acelasi proiect in java, actionscript, C++, C#. Surpriza va fi ca de indata ce un incepator invata cum sa il scrie intr-un limbaj (NU CONTEAZA CARE) apoi ii va veni f.f.f usor sa il scrie in alt limbaj/script mai sus mentionat caci toate au la baza sintaxa C.

Ce carte sa studiez? Aventurile lui Robun Hood e suficient deoarece programarea nu se studiaza din carti ci scriind in mod concret un cod si cautind de fiecare data pe googlesi/sau helpul limbajului  care sunt comenzile.

Citat din: radhoo din Martie 18, 2010, 11:50:41 AM
Lisp/CLISP/CLIPS nu mi se pare o alegeri bune pentru un incepator.
Sunt interesante pentru a exemplifica notiuni de inteligenta artificiala, dar pe zidar nu-l invatam despre macarale decat cand are orizonturile largite.

HUH???? Eu zic ca LISP e o alegere excelenta pentru un informatician/matematician care are nevoie de calcul simbolic, nu conteaza cit de incepator sau neincepator este. Limbajul e o ustensila, importanta cu adevarat este PROBLEMA de rezolvat si alegerea limbajului protrivit pentru problema propusa. Si asta e valabil indiferent cit de incepator sau avansat esti.

AlexandruLazar

Părerea mea -- contează cât de începător ești când începi să ai nevoie de tail recursion, CLOS, și mai ales când trebuie să mai folosești biblioteci externe sau să îți distribui tu codul cu drăcia aia de ASDF.

Adi

Sunt de acord ca plecand de la un proiect real, interesant, captivant, sa invata cel mai bine.
Pagina personala: http://adrianbuzatu.ro

radhoo

Citat din: florin_try din Aprilie 07, 2010, 01:17:02 PM
Ce carte sa studiez? Aventurile lui Robun Hood e suficient deoarece programarea nu se studiaza din carti ci scriind in mod concret un cod si cautind de fiecare data pe googlesi/sau helpul limbajului  care sunt comenzile.
Google, helpul limbajului? Fii serios, ce spui tu e superficial. Merge pentru un proiect facut noaptea, dar o astfel de aplicatie nu o vei putea niciodata pune in productie/comercializa pentru ca va pica la primele teste de calitate. Nu e programarea chiar asa de simplista cum o descrii. Se invata ani multi pana se ajunge la un nivel profesional acceptabil.  Am vazut cativa care invatasera programare dupa ureche, multi nici nu aveau facultatea macar, se descurcau, dar la un nivel destul de redus.

Citat din: radhoo din Martie 18, 2010, 11:50:41 AM
HUH???? Eu zic ca LISP e o alegere excelenta pentru un informatician/matematician care are nevoie de calcul simbolic, nu conteaza cit de incepator sau neincepator este. Limbajul e o ustensila, importanta cu adevarat este PROBLEMA de rezolvat si alegerea limbajului protrivit pentru problema propusa. Si asta e valabil indiferent cit de incepator sau avansat esti.
Da, problema e importanta, ca uneltele le alegem dupa, cam asta spuneam si eu mai sus.
Statistic vorbind, cat la suta din cei ce au ca meserie programarea crezi tu ca merg dimineata la servici si incep sa codeze in LISP - Si oare care ar fi procentul pt C++/ C# ? Nu de alta dar vorbesti despre chestii concrete (android/iphone si incurajezi vanzarea pe APPstore) ca apoi sa spui ca LISP e bun pentru incepatori. Bun sa faca ce?

Tu crezi ca pentru a fi ce se numeste " fizician " , e destul sa ai asa niste idei despre una alta? Programarea tine de domeniul stiintific si rigurozitatea se impune si aici. De asta avem o anumita structurare a cunostintelor, si e bine ca un incepator sa se tina de scoala informaticii si poate pe urma de Google si alte surse rapide de informare.


florin_try

Citat
Statistic vorbind, cat la suta din cei ce au ca meserie programarea crezi tu ca merg dimineata la servici si incep sa codeze in LISP

Nu stiu care e procentul, dar daca un matematician are nevoie de nu stiu ce calcule simbolice si vrea sa foloseasca motorul lisp in acest sens, atunci va coda in lisp.

Nu procentul e important ci faptul ca cei care au nevoie de lisp folosesc lisp, cei care au nevoie de C++ folosesc C++ iar cei care doresc fortran folosesc fortran. Fiecare cu ce are nevoie functie de jobul si specialitatea sa. Nu vad care-i problema.

Citat
spui ca LISP e bun pentru incepatori. Bun sa faca ce?

Concret: Profesorul XXX de matematica din Romania vrea sa testeze un algoritm de integrare symbolica care el crede ca e cel mai bun.
Insa nu stie prea multa programare, ci doar asa un pic un ciclu for o conditie if si niste IO elementar.
Ce ii recomanzi respectivei persoane? Sa invete C++ si sa programeze in C++ o biblioteca intreaga de operatii cu graphuri si arbori pe care sa construiasca algoritmi simbolici, sau sa foloseasca LISP-ul care deja are in el ce tine de calcul simbolic?

Eu zic ca chiar daca nu stie C++, tot LISP-ul ramine mai potrivit genului sau de aplicatie, indiferent cit de incepator sau avansat este. Nu vad de ce nu ar avea sanse sa reuseasca in LISP by-pasind C-ul.

Citat
Google, helpul limbajului?
Da. Helpul interactiv al limbajului e tot ce am nevoie. TU daca descarci un  API si incepi sa vezi ce functii are, vrei sa spui ca te vei descurca mai bine cu orele de programare din scoala decit cu helpul concret ce vine cu acel API? Pai in scoala inveti citeva 10-30 comenzi, un API poate avea 500+ functii, cum poti sa stii ce face fiecare fara helpul limbajului si un pic de google?

Citat
Merge pentru un proiect facut noaptea, dar o astfel de aplicatie nu o vei putea niciodata pune in productie/comercializa
De acord ca e diferenta mare intre un proiect de o noapte si .. comercializare, diferenta poate fi de munca de luni intregi,
insa eu ce voiam sa spun este ca programarea nu se invata "din carti" si programe mici scrise pe tabla sau hirtie, ci "cu compilatorul in mina" corectind eroare dupa eroare in cod. 
Parerea mea este ca proiectele de o noapte (care mai tirziu devin de o saptamina, o luna, etc) sunt cele mai utile. Inveti la fata locului ce si cum.


 

radhoo

Citat din: florin_try din Aprilie 10, 2010, 07:58:57 AM
Citat
Statistic vorbind, cat la suta din cei ce au ca meserie programarea crezi tu ca merg dimineata la servici si incep sa codeze in LISP

Nu stiu care e procentul, dar daca un matematician are nevoie de nu stiu ce calcule simbolice si vrea sa foloseasca motorul lisp in acest sens, atunci va coda in lisp.

Nu procentul e important ci faptul ca cei care au nevoie de lisp folosesc lisp, cei care au nevoie de C++ folosesc C++ iar cei care doresc fortran folosesc fortran. Fiecare cu ce are nevoie functie de jobul si specialitatea sa. Nu vad care-i problema.
Da fiecare cu limbajul lui, problemele se rezolva cu uneltele potrivite, asta e clar.
Ti-am zis de procent pentru ca o sa vezi ca LISP e foarte putin utilizat, poate ceva mai mult in mediile universitare.
Si daca vorbim despre alegerea unui limbaj pentru incepatori, poate ar fi bine sa-i indrumam inspre ceva mai uzual, care eventual le va folosi si pe viitor.
Cate job-uri ai vazut tu sa caute programatori LISP? E chiar hilara intrebarea. In schimb alta e situatia pentru pt C++, JAVA, C#.
Si de ce aceasta diferenta, daca nu pentru faptul ca din multimea mare a problemelor care se cer rezolvate prin tehnica computationala, aceste limbaje se preteaza cel mai bine (unelte general utilizabile)

Citat din: florin_try din Aprilie 10, 2010, 07:58:57 AM
Citat
spui ca LISP e bun pentru incepatori. Bun sa faca ce?
Concret: Profesorul XXX de matematica din Romania vrea sa testeze un algoritm de integrare symbolica care el crede ca e cel mai bun.
Insa nu stie prea multa programare, ci doar asa un pic un ciclu for o conditie if si niste IO elementar.
Ce ii recomanzi respectivei persoane? Sa invete C++ si sa programeze in C++ o biblioteca intreaga de operatii cu graphuri si arbori pe care sa construiasca algoritmi simbolici, sau sa foloseasca LISP-ul care deja are in el ce tine de calcul simbolic?

Eu zic ca chiar daca nu stie C++, tot LISP-ul ramine mai potrivit genului sau de aplicatie, indiferent cit de incepator sau avansat este. Nu vad de ce nu ar avea sanse sa reuseasca in LISP by-pasind C-ul.
Profesorul XXX de matematica de abia stie sa opereze calculatorul. Si asta entru ca matematica e o stiinta, informatica e alta, sa nu facem confuzie. Daca ar fi fost asa de inrudite , ar fi fost ceva nativ ca din insusirea matematicii sa rezulte o buna cunoastere a informaticii, dar nu e asa.
Daca profesorul XXX vrea doar asa un pic un ciclu for o conditie if si niste IO elementar le poate face fara sa programeze in C++ o biblioteca intreaga de operatii cu graphuri si arbori pe care sa construiasca algoritmi simbolici , sa nu exageram (cu bold am citat cuvintele tale).

Citat din: florin_try din Aprilie 10, 2010, 07:58:57 AM
Eu zic ca chiar daca nu stie C++, tot LISP-ul ramine mai potrivit genului sau de aplicatie, indiferent cit de incepator sau avansat este.
Asta de unde ai mai scos-o? Ai vreun argument, sau sustii idei proprii dupa bunul plac?

Citat din: florin_try din Aprilie 10, 2010, 07:58:57 AM
Nu vad de ce nu ar avea sanse sa reuseasca in LISP by-pasind C-ul.
N-am zis ca nu are sanse, cred ca nu m-ai urmarit cu atentie. Poate folosi si Basic si Fortran si orice vrei tu pentru probleme uzuale. Am spus ca pentru un incepator (daca tii mitne, despre asta se discuta aici) sunt cateva alegeri in ce priveste limbajul cel mai indicat (pentru ca un incepator nu are asa mult timp sa invete de toate, el venind dinspre o alta specializare), si nu are sens sa dam indicatii "exotice" care includ si LISP-ul, pt ca (vezi mai sus) statistic vorbind, LISP nu e cel mai permisiv limbaj.
Cum spuneau si altii mai sus C poate fi folosit pt a programa microcontrolere, PDA-uri,sisteme embedded, calculatoare personale, etc.

Citat din: florin_try din Aprilie 10, 2010, 07:58:57 AM
Citat
Google, helpul limbajului?
Da. Helpul interactiv al limbajului e tot ce am nevoie. TU daca descarci un  API si incepi sa vezi ce functii are, vrei sa spui ca te vei descurca mai bine cu orele de programare din scoala decit cu helpul concret ce vine cu acel API? Pai in scoala inveti citeva 10-30 comenzi, un API poate avea 500+ functii, cum poti sa stii ce face fiecare fara helpul limbajului si un pic de google?
Ok in punctul asta incep sa realizez ca-mi pierd timpul.
Ce spui tu suna ca si cum un "practicant in ale fizicii" (ce descrii tu este un practicant in ale informaticii), ar zice ce nevoie are el sa invete despre vectori, forte, transformari ale energiei, cand vede si el ca marul pica de sus in jos.
Ca sa-ti raspund pe scurt, diferenta o face rigurozitatea.  Iar calitatea e direct proportionala cu rigurozitatea, si dorim o calitate a muncii, altfel ce faci tu nu va folosi la nimeni.
Ca sa-ti raspund cu mai multe detalii, in scoala inveti tehnici de programare. Apoi vine experienta si ajungi sa programezi mai eficient, cod mai scurt, mai robust, cu cat mai putine defecte, si cat mai usor de inteles si depanat.
Nu stiu ce vrei sa spui cu
CitatPai in scoala inveti citeva 10-30 comenzi,
, dar cum formularea  este "dupa ureche" , ma gandesc ca esti inca in liceu. Sa raspund pentru a ajuta:
Dupa cum vezi nu e destul o noapte in care cauti exemple pe Google si dai Copy/Paste in codul tau, sa ai nu stiu ce efecte de animatie in aplicatia ta, e nevoie de ani in care iti perfectionezi stilul de programare.
E nevoie de ani sa intelegi sa aloci in mod eficient resursele si sa scrii o aplicatie care functioneaza optim.
Si vorbind de asta, poti folosi cam orice unelete pentru problemele uzuale, dar nu in mod optim.

Citat din: florin_try din Aprilie 10, 2010, 07:58:57 AM
Citat
Merge pentru un proiect facut noaptea, dar o astfel de aplicatie nu o vei putea niciodata pune in productie/comercializa
De acord ca e diferenta mare intre un proiect de o noapte si .. comercializare, diferenta poate fi de munca de luni intregi,
insa eu ce voiam sa spun este ca programarea nu se invata "din carti" si programe mici scrise pe tabla sau hirtie, ci "cu compilatorul in mina" corectind eroare dupa eroare in cod. 
Parerea mea este ca proiectele de o noapte (care mai tirziu devin de o saptamina, o luna, etc) sunt cele mai utile. Inveti la fata locului ce si cum.
E parerea ta. Mediul academic utilizeaza foarte mult "cartile", si "programele mici scrise pe tabla" in scop didactic. Si apoi le diseca pentru o intelegere profunda, de pe urma careia tinerii discipoli vor putea infrunta probleme mai serioase.
Poate o sa vrei sa intelegi ca cu o asa o gandire nu te vei numi niciodata programator pentru ca lipseste rigurozitatea.
Daca ai fi fizician, erorile te-ar costa in lumea reala. In cea virtuala...merge cum merge. Dar eu nu as indrazni sa incredintez niciodata dezvoltarea unui modul dintr-un software serios unui student, sau unui licean care codeaza noaptea, "dupa ureche", pentru ca as plati mult in imagine si incredere datorita calitatii scazute.

Iar daca e sa ii indrumam pe incepatori inspre ale informaticii, sa o facem la modul serios. Dupa cum vezi pe acest forum si problemele elementare de fizica sunt analizate cu maximum de atentie.
Ce te face sa crezi ca in informatica poti sa scapi mai usor?

florin_try


Eu ma refeream la faptul un incepator (ca de la asta pornisem) ar putea gasi mult mai mult stimulent pornind de la proiecte proprii de o noapte, si invata pe cont propriu mult mai multe in acest mod, decit din orele de la scoala.
In acelasi fel, un kit de chimie (cu citeva chimicale ce isi schimba culoarea la amestecare) pote stirni curiozitatea unui cpil in ale chimiei mai mult decit o poate face un prof.
Sau tot la fel, un telescop, poate atrage un copil catre fizica/astronomie mai mult decit lectiile scolaresti o pot face.
Iar cineva care gaseste motivatie e mult mai probabil sa fie riguros.

Bineinteles ca e imposibil de avut succes de exemplu academic in ale informaticii fara rigoarea mentionaata de tine.
Bineinteles, ca elev nu va avea succes la olimpiadele de informatica fara rigoarea necesara.
Insa poti avea pe cont propriu succes comercial in scriere de programe fara sa fi facut facultatea de informatica.

Iar eu cred ca un olimpic in ale informaticii a gasit motivatia in propriile lui proiecte (fie ele si de o noapte) si o multime de munca individuala, mai degraba decit din orele de informatica/programare de la scoala, care din pacate se cam fac pe hirtie si tabla.

astan

Cred ca se discuta doua lucruri diferite.
Invatarea prin practica este eficienta in multe domenii, nu numai in informatica.
Pentru a motiva un incepator este important ca acesta sa simta ca obtine rezultate rapid. Se simte incurajat de faptul ca realizeaza ceva concret.
Practicarea meseriei de informatician este cu totul altceva. In realitate, informatica, ca stiinta, se bazeaza pe matematica. De exemplu, analiza algoritmilor presupune cunostinte bune de matematici discrete (cine a citi cartile lui Donald Knuth stie cam care este nivelul).
Din acest moment, se trece la un alt nivel. Astfel de cunostinte nu sunt necesare doar in mediul academic, ci si in cazul multor aplicatii reale (atat comerciale cat si open-source).

In cazul dezvoltarii de software profesional, nu prea mai merge practicarea ideii conform careia e de ajuns sa stii doar sintaxa unui limbaj ca sa scrii cod de o calitate rezonabila in acel limbaj.
De exemplu, sa presupunem ca cineva cunoaste bine limbajul Visual Basic si scrie un program de calitate folosind acest limbaj. Sa presupunem ca respectiva persoana trebuie sa scrie un program C++ echivalent, dar nu cunoaste limbajul C++. Presupunem ca i se pune la dispozitie documentatie privind limbajul C++ si ca invata sintaxa limbajului. Cu toate acestea, probabil ca implementarea C++ va fi de foarte proasta calitate.
De ce ? Pentru ca un limbaj are "logica" lui si scrierea unui cod de calitate presupune mult mai mult decat simpla cunoastere a sintaxei limbajului.

In privinta limbajelor recomandate unui incepator: recomand Python ca prim limbaj pentru dezvoltarea de aplicatii desktop. Are o sintaxa clara si vine cu o gramada de module incluse in distributie, care permit realizarea de task-uri practice scriind relativ putin cod (de exemplu conectarea la baze de date, programare client-server, etc).
Nu recomand C++ decat daca vrea sa urmeze ulterior o cariera in programare. Cred ca e un limbaj prea complex, care necesita destul de multa experienta pentru a scrie cod de calitate si cat mai bug-free, in cazul unui proiect non-trivial.