Chirurgia cranio-cerebrală minim invazivă
Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne. Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale. www.neurohope.ro |
Cati programatori stiu sa programeze?
Last Updated: Jul 04 2018 21:29, Started by
Shinji
, Jul 03 2018 20:48
·
0
#37
Posted 04 July 2018 - 07:38
! nu afecteaza miliardele de operatii pe care orice smartphone le poate face intr-o secunda. Nu va mai copilariti cu microoptimizari d-astea.
Locurile din cod in care ! sau ne-! conteaza sunt izolate si impachetate in metode, izolate in arhitectura in intregimea sa. n <= 0 are cu siguranta o semnificatie mai adanca, deci trebuie pus intr-o metoda, si acea metoda reutilizata. dani.user, on 03 iulie 2018 - 22:47, said:
Pana la urma, din atatea moduri de a scrie if castiga ... pattern maching. Presupun ca afirmatia vine dupa ce ai citit din rust: ai nevoie de disciplina ca sa nu folosesti _ => in mod abuziv, daca vrei sa profiti de pattern matching. In C++, chiar daca pattern matching e posibil, codul tot compileaza. |
#38
Posted 04 July 2018 - 08:19
Pe sistemul pattern matching atunci ar putea sa iti spuna compilatorul tau daca ai facut cod eficient sau nu, daca are acces la o baza de date cu coduri pe care sunt puse n programe. Pur si simplu ruleaza un program si calculeaza timpul de raspuns pentru fiecare sectiune in parte a codului, apoi compara cu timpii altor softuri
Si tot pe sistemul asta , conectezi compilatorul la stackflow sau superuser si iti da automat n variante de cod pentru fiecare bucata scrisa....Daca ai si ceva gen AI atunci ai rezolvat si problema Ai-ului care sa scrie singur cod. Avand o baza de date uriasa de coduri organizate pe specializari si pe categorii. Et voila , practic tocmai ce am inlocuit programatorii.. |
#39
Posted 04 July 2018 - 09:43
Chestia e ca trebuie sa aplici machine learning la AI-ul ala. Adica pe sistemul daca la x,y,z codul se foloseste asa la a,b,c cum se va folosi? Si in felul asta separa ceea ce este user imput de ceea ce este structura , ca la schelele de la santierul de lucru, pe care se construieste un program. Si invata unde sa aplice fiecare structura ,schela. Pe modelul unor site cum ar veni care separa ce e rau de ce bun.
Dar asta e nitel OFF ...sa teminam cu asta... |
#40
Posted 04 July 2018 - 10:23
StefanSC, on 03 iulie 2018 - 22:26, said:
Nu prea. Astia ne-autodidacti (daca prin asta intelegem cu studii formale) au habar de un minim de coding standard. Ca sa ai habar de asa ceva, pornesti cu ceva standarde/recomandari oficiale(daca exista) si termini cu ceva carti gen code complete - pe care nu cred ca le-am vazut in bibliografii de facultati. Adica tot autodidact trebuie sa fii. |
#41
Posted 04 July 2018 - 11:50
Da dar examenele si mai apoi angajarea la firma se fac pe programa oficiala aia de la scoala.....acuma ca tu spui pe forum ceva si altcineva tot de pe forum zice altceva pai pe cine sa mai crezi? Pai daca te iei dupa sfaturi de pe net te duci la angajare la locul de munca si faci ce ai invatat de pe forum si te pomenesti ca trebuia fix invers. Eu de multe ori nu stiu pe cine sa mai cred pe forum. Tocmai de aia poate cea mai buna metoda de a vedea ce mesaj e corect si ce nu e sa vezi cate persoane au dat like si sunt de aocrd pentr ca mergem pe principiul acolo unde mai multi ochi au vazut acelasi lucru asa inseamna ca este.
|
#42
Posted 04 July 2018 - 11:56
#43
Posted 04 July 2018 - 12:11
OriginalCopy, on 04 iulie 2018 - 07:09, said:
Nu e absolut deloc OK. !(a && ar trebui impachetat intr-o metoda privata, numita cum trebuie, si folosita in if(), iar codul mutat din else in if. De multe ori, daca ai cod in productie , de care depind alte programe, si tu trebuie sa updatezi o sectiune de cod facuta fie acum cativa ani sau chiar de alt coleg, tu trebuie sa citesti sectiunea respectiva de cod repede si bine. De aceea codul trebuie scris ca efectiv "sa-ti sara in ochi ", doarece patchul trebuie elaborat si implementat in cateva ore maxim, pt a fi pus in productie ASAP. De aceea la o scriere de genul if(!(afirmatie)) {}acel (!) poate trece neobservat foarte usor. Nici implementarea cu metoda privata nu ma ajuta pentru ca trebuie sa fac salturi intr-un cod de mii de linii, apoi sa revin inapoi si tot asa. pe cand o sciere de genul : if (afirmatie) { /*JUMP*/ }else { ....... }intr-un cod de mii de linii pentru care trebuie sa faci patch , testare si deployment in cateva ore , sare imediat in ochi. Una este sa cauti albina in lanul de floarea soarelui si alta este cauti ditamai camionul. |
#44
Posted 04 July 2018 - 12:42
Iar nu vii cu afirmatii de programator serios.
In primul rand, sunt de acord cu evitarea negatiei - acolo unde ea are sens. In al doilea rand, in majoritatea cazurilor, conditii de forma !(a && ascund in spate o poveste, o regula de business, ceva. Indiferent de cum exprimi acea formula, intentia sa, valoarea sa semantica, e aceeasi. De aceea cel mai bine e sa pui acea decizie (!(a && ) in spatele unei metode. Doar asa in treacat, inlining functioneaza extraordinar de bine in mai toate compilatoarele si limbajele. De exemplu, sa luam afirmatia n <= 0; ar putea insemna "daca nu sunt produse in depozit". Afirmatia insasi e o negatie, corect? Corect. Astfel de afirmatii pot fi usor facute pozitive: "daca depozitul este gol". if(this->empty()) { //else-code moved here }E un cod mult mai usor de citit, citesti practic povestea din spatele codului, fara sa fii fortat sa parsezi vizual tot felul de alambicari gen && sau alte lucruri. Ba mai mult, un astfel de cod iti permite sa schimbi regulile de business intr-un loc central, consistent. Poate de exemplu adaugi un model de forecasting care trebuie luat in calcul. Nu te apuci sa ghicesti pe unde prin cod aveai decizia aia (si sigur vei uita unde se facea acea verificare), ci modifici doar metoda empty e "Warehouse" si pac, modificare consistenta in tot proiectul. Nu am spus niciodata ca nu sunt de acord cu faptul ca negarea nu face codul dificil de parsat, am spus: OriginalCopy, on 04 iulie 2018 - 07:09, said:
Nu e absolut deloc OK. !(a && b ) ar trebui impachetat intr-o metoda privata, numita cum trebuie, si folosita in if(), iar codul mutat din else in if. Da, il ai pe ! in acel one-liner: bool empty() { return !(a && ; } e adevarat ca acel ! poate fi usor trecut cu vederea, dar aia se intampla cand e prea mult alambicat codul, cand e mult de tinut minte. Dar cand ai antetul metodei cu nume foarte clar ("empty"), cand toata metoda are 3 linii cu tot cu acolade, cand presiunea cognitiva e extrem de redusa, e foarte usor de parsat vizual codul de catre programator, de inteles, de adaptat. Ai putin de presiune congnitiva concentrata intr-o linie de cod, dar ai redus presiunea cognitiva peste tot in restul codului. Ba mai mult, o metoda separata ofera oportunitatea de a reconcilia vocabularul de business cu cel tehnic. Vezi despre ubiquitous language. |
#45
Posted 04 July 2018 - 12:48
Quote
De exemplu, sa luam afirmatia n <= 0; ar putea insemna "daca nu sunt produse in depozit". Afirmatia insasi e o negatie, corect? Corect. Afirmatia n<=0 inseamna ca o valoare este negativa sau egala cu zero atata tot. Quote
ar putea insemna "daca nu sunt produse in depozit". if (existaProduseInDepozit) { ........ } else { ....... } Quote
"daca nu sunt produse in depozit". De aici se pot trage o serie de concluzlie gresite mai ales intre developeri si business care duc la confuzii, confuzii care se regasesc in cod. Intotdeauna managerii de business cauta sa gaseasca ceva(adica afirmatie) si nu ( sa nu gasesca ceva) adica negatie. Caut daca produsul este in stoc (adica afirmatie) si nu "caut daca produsul nu este stoc" =>dpdv al business nu are nici o logica sa cauti ceva ce nu ar exista ci are logica sa cauti ceva ce ar exista, Intotdeauna use-case-urile de business se fac pe afirmatii si nu pe negatii, iar in codul joburile acest lucru trebuie sa se reflecte vadit. Edited by WinstonMontana, 04 July 2018 - 12:56. |
#46
Posted 04 July 2018 - 12:57
Esti pedant si intri in discutii contradictorii de amorul discutiei, vorbind despre forma, nu despre fondul celor expuse de mine.
Toate adjectivele au un antonim. Daca un adjectiv e negativ, il inversezi si aia e. Shinji, on 03 iulie 2018 - 20:48, said:
Exemplu de azi: if (a && b ) { } else { *do stuff here* } |
|
#47
Posted 04 July 2018 - 13:02
Intre business si programele care executa cerintele de business trebuie sa existe sinergie. Acesta este cel mai important criteriul si trebuie sa fie
respectat. Cerintele de business trebuie sa se regaseasca exact cum au fost formulate si in joburile pe care le executa. Abaterea de la aceasta conformitate , intr-un ecosistem de business complicat, pot genera surse de confuzii si probleme => genereaza timp pierdut pt explicarea acestor probleme=> timp pierdut inutil => pierdere de bani. Edited by WinstonMontana, 04 July 2018 - 13:04. |
#48
Posted 04 July 2018 - 13:07
WinstonMontana, on 04 iulie 2018 - 13:02, said:
Intre business si programele care executa cerintele de business trebuie sa existe sinergie. Acesta este cel mai important criteriul si trebuie sa fie respectat. Cerintele de business trebuie sa se regaseasca exact cum au fost formulate si in joburile pe care le executa. Abaterea de la aceasta conformitate , intr-un ecosistem de business complicat, pot genera surse de confuzii si probleme => genereaza timp pierdut pt explicarea acestor probleme=> timp pierdut inutil => pierdere de bani. |
#49
Posted 04 July 2018 - 13:25
[ https://www.youtube-nocookie.com/embed/4F72VULWFvc?feature=oembed - Pentru incarcare in pagina (embed) Click aici ]
Am mai recomandat in trecut aceasta prezentatie. Cazurile in care if-urile sunt if-uri, tot if-uri raman, dar daca aplici ce se spune in prezentatie, ar trebui sa te alegi cu cod fara if-uri de business, deciziile rezultand "automat" din polimorfism. In cazul nostru particular ar fi doua clase, EmptyWarehouse (ca null object) si WarehouseWithProducts. if-ul e practic eliminat din acel loc din cod. |
#50
Posted 04 July 2018 - 14:38
OriginalCopy, on 04 iulie 2018 - 12:57, said: Posteaza mai elaborat despre ce fel de decizie e luata acolo si numele concrete ale variabilelor, si daca sunt membri ai clasei, parametri ai metodei, sau variabile locale. bool AppNameChangedForObviousReasons::eventFilter(QObject* obj, QEvent* event) { if (event->type() == QEvent::KeyPress) { QKeyEvent* key = static_cast<QKeyEvent*>(event); if ((key->key() == Qt::Key_Enter) || (key->key() == Qt::Key_Return)) { //Enter or return was pressed } else { return QObject::eventFilter(obj, event); } return true; } else { return QObject::eventFilter(obj, event); } return false; } Si asta a fost sugestia mea de refactorizare a codului: bool AppNameChangedForObviousReasons::eventFilter(QObject* obj, QEvent* event) { if (event->type() == QEvent::KeyPress) { QKeyEvent* key = static_cast<QKeyEvent*>(event); if ((key->key() == Qt::Key_Enter) || (key->key() == Qt::Key_Return)) { return true; } } return QObject::eventFilter(obj, event); } |
#51
Posted 04 July 2018 - 14:54
bool AppNameChangedForObviousReasons::eventFilter(QObject* obj, QEvent* event) { bool chestie = false; if (event->type() == QEvent::KeyPress) { QKeyEvent* key = static_cast<QKeyEvent*>(event); chestie = (key->key() == Qt::Key_Enter) || (key->key() == Qt::Key_Return); } return chestie; }fara dublu (sau multiplu) return O functie (in orice limbaj) are N intrari si o singura iesire. O procedura poate avea N intrari si M iesiri( doar ca in C/C++ nu exista, dar exista in alte limbaje) Care este diferenta (in acest framework) intre Key_Enter si Key_Return ? Nu sunt asemenea ? Daca da atunci de ce am acel sau logic ?
Edited by MarianG, 04 July 2018 - 15:04.
|
|
#52
Posted 04 July 2018 - 15:00
daca tot vorbiti de "pattern matching", cati dintre voi nu sunteti deranjati de (zambicili) ?
if (b && a) Edited by MarianG, 04 July 2018 - 15:04. |
#53
Posted 04 July 2018 - 15:23
pe mine ma enerveaza disperatii aia care tin sa formateze codului dupa niste standarde imbecile.
de exemplu acolada singura pe linie noua, sau acolade pentru o singura declaratie, si 4 spatii indentare: if(plm) { return QObject::eventFilter(obj, event); } in loc de if(plm) return QObject::eventFilter(obj, event); si invoca ratiuni de lizibilitate sau consistenta. adica umfli codul cu 30% mai multe linii inutile ca sa menajezi niste orbeti. Edited by alx42, 04 July 2018 - 15:24. |
#54
Posted 04 July 2018 - 15:29
@winstonmontana:
Care e diferenta intre o functie si o procedura? De asemenea, vezi ca pe tastatura ai tasta (Carriage) Return si tasta Enter . Doua gaste in doua traiste separate. @Shinji Sper ca realizezi ca refactorizarea ta (a unui exemplu oferit de QTFoundation) schimba comportamentul codului si il face mai nesigur... |
Anunturi
▶ 1 user(s) are reading this topic
0 members, 1 guests, 0 anonymous users