Programatorii ar trebui să aibă cunoștințe hardware?

My whole point is that I find it sad when programmers go with the I don't care at all about hardware attitude when most of our programming heroes dabbed into it and yes, excuses can be fabricated for anything, that’s it.

1 Like

Dap - cand mi-am luat ultimul laptop abia asteptam sa compilez un fork de Ruby cu suport pentru instructiunile TSX numai ca sunt disabled in Haswell deoarece Intel au descoperit un bug in ele - daca as fi fost un pic mai informat asteptam Skylake.

1 Like

Absolut.
Front end: trebuie sa optimizezi codul in funcție de device-ul utilizatorului.
In trecut animatiile erau procesate in browser de procesor. Acum sunt procesate mai mult de placa grafică.
La fel si in back end: dacă stii câteva informații despre procesorul si memoria serverului s-ar putea sa optimizezi codul astfel încât sa te coste hosting-ul mai putin. Sau sa nu se blocheze serverul.

Chiar am intalnit asta recent - optimizari front-end pt. mobile insa fara specificatii pe ce hardware animatiile si JS-ul respectiv ar trebui sa ruleze fluent - asta in timp ce optimizarea se realiza in Chrome pe un desktop cu N-ordine de magnitudine peste un device mobil i.e. 90 FPS-uri pe desktop s-ar putea traduce in 15 pe un mobil de acum doi trei ani.

Programatorii ar trebui să aibă cunoștințe hardware?

  • Da
  • Moderat
  • Nu

0 participanți

Depinde ce intelegem prin “hardware”. Consider ca este obligatoriu sa cunosti “hardware” la modul abstract: ce-i ala un registru, ce-i aia magistrala de adrese si de date, ce-i aia intrerupere, ce-i ala cache, ce-i aia big endian / little endian etc. Si conteaza putin spre deloc sa stii care e socket-ul la modă, la ce frecventa functioneaza memoriile la ora actuala samd.

3 Likes

Nici eu nu stiu pe de rost nr-ul pinilor socket-urilor curente sau fix viteza memoriilor - insa stiu diferentele intre DDR, dual vs quad channel, tipul lor, ce impact au in zonele care ma intereseaza etc.

IMO trebuie sa stii care sunt punctele slabe, cum functioneaza toate intr-un sistem specific sau/si ce componenta este mai importanta in functie de ce tip de aplicatie dezvolti sau/si stil de lucru ai etc.

De exemplu daca folosesti un IDE ar fi util sa stii ca un procesor cu SMT iti va aduce un spor in productivitate.

Plus partea teoretica mentionata de tine.


Ca sa fac o analogie foarte proasta e ca si cum ai dezvolta aplicatii pe automobile si tu nu stii aproape deloc cum functioneaza - atat la nivel conceptual cat si minim la partea de ce piese exista.

1 Like

Mi-am luat o carte in Decembrie de pe Packt


spre surprinderea mea discuta mai mult chestii care nu au legatura cu tehnologia asp.net, cum ar fi operatiile de I/O(timpul de acces la baza de date sau la sistemul de fisiere, latenta retelei, prin cate noduri trece un request ca sa ajunga la server), chestii care mi se pare destul de apropiate de partea hardware.

Initial tehnologia a aparut in mediul Business to Business, odata ce ea a patruns in mediu Business to Consumer, numarul de utilizatori a crescut exponential asa ca se incearca sa se faca optimizari, daca inainte predomina close source si dezvoltai o aplicatie pentru o companie, acuma predomina open source si cele mai cunoscute aplicatii se adreseaza mediului business to consumer, oricine are o idee, buget si skill-uri poate veni cu un produs nou pe piata asa a explodat mediul startups in afara .

3 Likes

Can you expand a bit on that? sounds quite interesting in the context of .NET ofc.

1 Like

OK. Urmatoare parere este oarecum subiectiva. Eu lucrez la companie care face hardware + system de operare (Syneto), deci am o perspectiva mai aparte. Dar lucrez si la un proiect web scris in Java (FeedXL) care are mai putina legatura de hardware.

Pe scurt, parerea mea este ca intelegerea hardware-ului este esentiala pentru aplicatii non-triviale. Incerc sa prezint cateva exemple / idei generale pe diferite tipuri de proiecte:

  1. Software gen ERP: Sa zicem ca lucrezi pentru o companie care produce software ERP si esti responsabil cu implementarea unui modul de emitere factura. Adica clientul va sta la ghiseu pana cand, dupa vanzare, vanzatorul (utilizaotrul ERP-ului) emite factura. Va trebui sa intelegi ce hardware (server, procesor, disk, ram si legatura de retea) ai la dispozitie sa tii clientul in asteptare cat mai putin. Iar rezultatul se poate traduce in bani aproape direct.
  2. Software gen system de operare / management: Noi la Syneto scriem un sistem de operare si management pentru echipamente de stocare date. Desigur, noi trebui sa stim intimitatile functionarii controllerelor si diskurilor. Dar hai sa nu mergem asa de jos, sa zicem ca scrii o aplicatie de automatizare taskuri pentru Android, gen E-Robot, va trebui sa intelegi cum functioneaza a groaza de modele de telefoane, ce fel de senzori au, ce servicii de system au, etc.
  3. Sofware gen web application: Sa zicem iti faci o aplicatie web. Decizi sa il rulezi pe Amazon AWS. Ai nevoie sa iti creezi masini virtuale EC2, sa iti setezi reteaua, etc. Pentru asta va trebui sa citesti si sa intelegi fiecare tip instanta ce hardware are (cpu, ram, diskuri/ssd-uri, IOPS, etc) si va trebui sa stii sa dimensionezi corect infrastructura ta pentru aplicatia ta si numarul tau de utilizatori.

Acum, desigur, in functie de tipul aplicatiei nivelul necesar de cunostinte hardware este diferit. Dar cred ca exista foarte putine cazuri in care poti ignora in totalitate acest aspect.

Ramane de vazut ce aduc technologiile noi cum ar Application As a Service si Serverless Architectures (like Amazon Lambda). In cazurile respective nu te va mai interesa direct configurarea hardware-ului. Dar probabil te va interesa consumul de resurse al aplicatiei tale pentru ca se va traduce dinamic in bani.

8 Likes

Cam asta scrie si in cartea pe care am postat-o desi ai totul intr-un datacenter asta nu inseamna ca ai toata infrastractura pe o masina, ca atunci cand dezvolti, de exemplu disk-urile pot fi virtuale si montate din alta parte, desigur vorbeste mult de arhitectura internetului cum e cablat, aceea schema cu structura de fibra optica pe sub ocean, si cum sa masori, optimizezi transferul de date folosind tool-uri de diagnostic bine cunoscute ca ping, traceroute.

Acuma specific pe .NET vorbeste despre importanta folosirii task-urilor asincrone in api-uri pentru a rula call-uri de api in paralel atunci cand acestea sunt independente. El mai zice ca atunci cand un call de api cheama alta call de api si asta se intampla pe mai multe niveluri acesta e un cod smell si ar trebui reactorizat.

Legat de acessul la baze de date vorbeste foarte mult de Dapper, si ca cine stie bine SQL poate optimiza foarte bine accesul la baze de date, fiindca Dapper e modelat apropiat de SQL, si desigur vorbeste cum ORM folosit gresit poate duce la issue-uri mari de performanta.

1 Like

Am vazut ca mai nou tipi care lucreaza in companii mari gen Google, Amazon, etc, isi pun titlu de Software Engineer(inginer software) pe Linkedin, ca sa dezvolti sisteme scalate la un asa nivel trebuie sa ai si cunostinte hardware sa stii ca datele din memoria cache a procesorului se acceseaza mai rapid ,ca accesul in retea poate fi ma rapid decat accesul de pe hard disk sau ca afisarea datelor pe ecran poate dura mai mult decat transferul lor, totul e sa poti diagnostica problema, si pentru asta trebuie sa masori si sa folosesti uneltele potrivite pentru identificare botleneck.

Asta e diferenta intre programator si inginer software, programatorul stie doar programare pe cand un inginer software stie si hardware, e doar o parere personala.

3 Likes

Nu cumva un inginer software ar trebui sa poate scrie “close to the metal” code (C/ASM) gen pentru microcontrolere si alte aplicatii?

Cu siguranta toti am facut C si assembler in facultate, ceea ce nu ar trebui sa fie greu ce spui tu daca ai invatat la materiile respective.

Nu la nivel de invatare doar pentru ca este in programa facultatii - ci la nivel profesional in zone critice - gen firmware pt. un microcontroler la o masinarie industriala unde daca gresesti ceva …

Asa ar fi normal dar din pacate modelul nostru de invatamant e cateva generati in urma fata din afara, dar iti ofere niste baze, cineva care termina ceva de tip-ul Stanford cred ca s-ar descurca fiindca e mai update cu trend-urile si ultimele research-uri in domeniu, desigur acolo calitatea invatamantului e mai avansata, presupun ca sunt niste proceduri standard pentru asa ceva.

Dar ce zici tu are sens, teoretic in studiile de licenta ti se pun bazele, la master ai putea sa te specializezi pe ceva.

Pare o definiție extrem de strictă asta. Ai descalifica oamenii care lucrează la produse extrem de complexe non-C/asm, precum Google Search/Maps, Facebook etc.

Wikipedia are o definiție foarte mișto a ce înseamnă să fii inginer. Tl;dr: measures twice, cuts once. Si cred ca în orice domeniu tehnic e aplicabila separarea intre omul care face inginerie și cel care nu. Doar că in IT e o proporție mai mare de practicanți non-ingineri, fata de un domeniu mai cu tradiție, cum sunt construcțiile, automobile, electrotehnică sau electronică.

2 Likes

I’m sorry what?

EDIT:

Nu am vrut sa exclud Google poate doar pe Facebook pentru ca ei nu trimit chestii pe Marte ci ne folosesc datele personale pentru profit … de fapt stai - asta fac si Google! :laughing:

Da scroll o idee mai jos în articol și dai de software engineering :slight_smile:

1 Like

I stand corrected then :slight_smile: Damn, they even have ISO standard for it: https://en.m.wikipedia.org/wiki/ISO/IEC_JTC_1/SC_7#Published_standards

1 Like