Programozási módszertan - a jó, és a rossz kód
2012-11-17T15:44:28+01:00
2012-11-19T12:07:55+01:00
2022-07-23T19:01:14+02:00
  • Kommenteles: ha egy HL kodot 5-10 soronkent kommentelni kell, hogy az ertheto legyen, az legalabbis "code smell". Kommentek (szvsz) kellenek librarik publikus interfeszehez es a trukkosebb reszekhez. Utobbibol ugye nem szabadna hogy sok legyen egy jo kodban, tekintve, hogy az erthetoseget es karbantarthatosagot csokkenti. Amikor pedig van egy-egy "trukkos" algoritmus, akkor majdnem biztosan nem te talaltad fel a legjobb megoldast arra a problemara, szoval van neve a megoldasodnak, kommentbe be lehet irni, hogy
    /// Knuth–Morris–Pratt algorithm for pattern matching
    (ha mar nem kinal a framework egy beepitett megoldast ra persze)
    Mutasd a teljes hozzászólást!
  • Ha mar a teljesitmeny ekkora szerepet jatszik szerintetek a "jo kod" definiciojaban, akkor a parhuzamosithatosag a legfontosabb feature ma. Tobb gep kozott eloszthato adatok es tobb procimag vagy gep kozott megoszthato algoritmusok. Konkretan valaki itt emlitette a Google-t: ha valasztania kene a ketszer-haromszor-tizszer tobb szamitast igenylo, de eloszthato algoritmus es egy gyorsabb, de egyaltalan nem parhuzamosithato algoritmus kozott, akkor az elobbit valasztana.

    A for/if/while mikrooptimalizalasoknak semmi ertelme, attol a kod nem lesz jobb. Mellesleg max az adott fordito adott verziojara optimalizalsz csak vele egy jo esestben 0.01% elonyert.

    Amugy szerintem esszeru hatarok kozott a kod minimalizalasa/egyszerusitese az egyik legfontosabb feature az olvashatosag megtartasa mellett. A programozo legnagyobb ellensege a kod - minel tobb van belole, annal tobbet kell karbantartani, atfutni, megerteni. De csak esszeru hatarok kozott, azaz a tipikus jajdeugyesvagyok a for ciklus fejeben megirtam a char[] tartalmat megfordito C kodot nem tartozik ide. Mivel a kod az ideje legalabb 90%-ban olvasva/modositva lesz, megirva csak egyszer, igy az olvashatosagra/erthetosegre optimalizalas megintcsak fontosabb, mint szinte barmi mas.
    Mutasd a teljes hozzászólást!
  • Nagyon érdekes, hogy nem egyformán látjátok, hogy mi a jó és mi a rossz. :)
    Mutasd a teljes hozzászólást!
  • Mutasd a teljes hozzászólást!
  • A service packokat en sem tiltom le, mindig hagyom felinstallalodni azokat!! (vagy ha felreertheto volt, akkor bocs a dupla negacios 'irodalmi' fordulatert az elso mondatban lol)
    Mutasd a teljes hozzászólást!
  • Eléggé öngyilkosság


    Igen, tényleg az. Nálam még a linux is folyamatosan frissítve van, olyan pedig hogy a windows ne húzza le mindig az utolsó frissítéseket automatikusan elképzelhetetlen.
    Mutasd a teljes hozzászólást!
  • Service packokat nem merek nem felrakni, szoval az XP az latest. Illetve ugy 350 mega, hogy .Net még nem lett inditva, szerintem a win7 mar alapbol azt is beroffenti. Viszont ami meg sporol: a virus detection-t meg a virusirtast manualisan vegzem. Amint indokolatlanul felvillan a winyo (nincs swapfile ugye) vagy a wan_activity led(nincsenek online widget bizbaxok), máris gyanút fogok Eléggé öngyilkosság, de ugy mukodik, hogy rohadtul bizalmatlan vagyok
    Mutasd a teljes hozzászólást!
  • Az az XP ami 351 mega melyik service pack volt ? Esetleg nem valami lite-os cucc ?
    Mutasd a teljes hozzászólást!
  • Szerintem a válasz általánosítható: Attól függ

    A cél szentesíti az eszközt?

    Igen, szerintem minden ettől függ. A konkrét feladat ismeretében kell megtalálni a megfelelő arányokat, ehhez pedig az kell, hogy a lehető legtöbb kérdés meg legyen válaszolva a fejlesztő(k) számára.
    Mutasd a teljes hozzászólást!
  • A 4giga meg a 64bit a videókártyák miatt kell, mert a kütyük, amiket ki akartam próbálni sajnos leszavazásra kerültek.
    A program 1 videókártyával simán fut egy mezei xp32 alatt is

    a kódban már kevesebbet kommentelek mint régen.
    Leginkább csak akkor, amikor valami olyasmit csinálok, amit még soha és nagy a valószínűsége, hogy hónapokig nem is nyúlok hozzá
    Mutasd a teljes hozzászólást!
  • Oupsz, nem ilyen tobbkilometeres technologiai veszekedesre gondoltam, tenyleg tulzo volt a veszekedes kifejezes. Ha olyan lenne koztetek, abbol eleg jol meg lehetne josolni, hogy kozeleg a vilagvege

    A topiknyitora adott elso 3 valaszon meg oblosen rohogtem. Egy alapvető másnaposságra kifejezetten üt

    dante: Igen, a 4 giga ram már alap, de ha vennék, akkor mindig azzal haritom el, hogy minek vegyek ilyen elavult ramokat, csak azert, hogy a win7 se docogjon ugyanazon programok futtatasa kozben? Majd ha veszek uj gepet, akkor kimaxolom haha.

    Az meg hogy nem irsz dokumentaciot az olyan dolgokhoz, ahol nem fizetnek erte ES nem kell evek mulva elovenned, az teljesen ok :D
    En egy ideje 5-10 soronkent rakok egy commentet az olyan helyekre, ahol tudom, hogy kesobb is bele kell majd neznem.
    Regebben csak asm kodba kommenteltem (hogy melyik regiszterben mikor milyen dolog van), de ujabban mar a high level kodba is kommentezek, mert lusta vagyok ujrafelfedezni, hogy mit csinaltam elozoleg.

    ProgServ: Az alap kerdes amugy remek es kb. megvalaszolhatatlan (mi a jo kod)
    Régen a google maps elotti idokben pl. jo volt az a terkepprogramom, ami egy Budapest es egy Magyarorszag terkepet egyszerre jelenitett meg 10 fps-el egy 200-333MHz-s gepen... Aztan ez elég nak tunt, de kesobb atirtam opengl-re. Egy kisebb vga is brutalisat gyorsitott rajta. Ez szinten nak tunt, de aztan felfedeztem a spatialis adattarolast (quadtree), na ez megintcsak huzott rajta rendesen. Ekkor már egy teljes Magyarorszagnyi utca/hsz szintu terkep volt egyszerre megjelenitve 1.5GHz-s celeronokon (+extra effektek, mint pl. lakotomb polygonok hasábbá alakítása, azokra vetett arnyek :D)... Es tuti, hogy van ennel is jobb megoldas is, csak ma már minek erolkodni, jo gepek vannak.
    Mutasd a teljes hozzászólást!
  • Nem veszekszünk, csak ha egy szakmai fórumon két embernek más a véleménye, akkor azt megvitatja.

    Ráadásul tényleg nem volt egyértelmű, amikor a procira hárított feladatot írtam akkor a akkor a proci emiatti foglaltságára, pontosabban a végrehajtási időre gondoltam.

    Tehát kisJ-nek igaza volt, hogy így rákérdezett.

    Mutasd a teljes hozzászólást!
  • A clean code szerintem elsősorban ügyviteli szoftverek fejlesztéséhez való, ahol vannak bizonyos szempontok, például a biztonság, robusztusság, rugalmasság terén. Más területen viszont nem számít se a biztonság, se a robusztusság, sem pedig a rugalmasság, inkább a sebesség a lényeg. Utóbbinál teljesen mások a játékszabályok (pl.: 3D fizikai engine).
    Mutasd a teljes hozzászólást!
  • off
    Nálam az alaprendszer meg win7 64bit.
    A célhardverben alapból 4giga van, 2 vagy 3 videókari.
    A cpu meg valami jobb fajta - valójában a konkrét konfigról fogalmam sincs.
    Eddig még nem melegedett

    on
    minden kódom (sajnos) pont olyan, amennyi időm volt rá
    a folyamatos fejlesztés során állandóan refactorizálom, szépen változik és alakul olyanná, amit elképzelek.

    A pontos dokumentáció hozzá meg csak álom marad.
    Egy szöveges doksiba írom, mi merre hány méter.


    on2
    a flash-ben írt programjaim meg olyanok amilyenek
    amikor megírom még értem.
    ha két hónap múlva elő kell vennem, akkor meg pislogok mint a béka.
    Azt a rendszert nem nekem találták ki - nem is ismerem :(

    Összességében a kódod kinézete nagyban függ az általad használt IDE/programnyelv kombótól valamint a rendelkezésre álló időtől és nem utolsó sorban a felhalmozott tapasztalattól


    Mutasd a teljes hozzászólást!
  • Dehogy veszekszünk.
    Majd pont egy MICU-val állok le feszekedni...
    Mutasd a teljes hozzászólást!
  • Nem beszélve a DMA vezérlőről ami a CPU "háta mögött" tölti a RAM-ot, tovább tehermentesítve a CPU-t.
    Mutasd a teljes hozzászólást!
  • Jajj neveszekedjetekmár lol

    Nekem az alap rendszerem az még mindig egy XP es kemeny 2 giga ramom van. Namost ez elindul 350mega fogyasztassal es a swapfile-t letiltom. Tehat ha egy jatek ugy megdolgozza a gepet, hogy 350 mega+ jatek > 2 giga, akkor fagyas van. Ilyen jatek az ritka, mert mostanaban mindet a konzolokra meretezik :p
    Ugyanez win7-en ugy megy, hogy a rendszer zabal 900 megat es ekozben alapbol daralja a winyot, de meg akkor is, ha az egesz cucc beleferne 1.9 gigaba.
    Szal a pcben van vagy 4 cache szint, ebbol az utolso a winyo, es operencias rendszertol fugg, hogy melyik szint mennyire van megfingatva :D (az L1 cache meg a programozotol hehe)
    Mutasd a teljes hozzászólást!
  • Hisz nem tud haladni, mert várni kell az adatokra.


    Éppen ezért pazarolja az időt, tehát a procit "munkaidejét" jobban terheli, mintha minden a memóriában lenne.

    De akkor olvass a proci helyett "feldolgozási időt".
    Remélem így megfelel.

    "akkor a proci számára sok a döglött idő."

    Így van. Éppen ezért ez a proci számára rosszabb, mint ha sok a memória.

    De mivel nincs mit csináljon közben (a felhasználó passziánsz partiját ne számoljuk bele ) de ugye a proci ilyenkor is dolgozik, még ha "nem is csinál semmit", tehát a memória "megtakarítással" több feladatot adsz a procinak.

    Ráadásul önmagában is többet dolgozik (ha a várakozást nem nézzük), hiszen az adatokat be kell töltenie, illetve a betöltöttet menteni kell, amit esetleg a nagy memóriát használó program közben nem kellene tennie.

    Mutasd a teljes hozzászólást!
  • Nálam az szokott belső feszültséget okozni, hogy hogyan írjam a kódot.
    - Olvasmányosra, hogy én is más is idő elteltével is értse.
    - Tömör, hatékony kód legyen.

    Ez nem mindig ugyanaz.
    Sőt mostanában azt nézem, hogy a VC CPP, hogyan tud jobb kódot fordítani. Emiatt szoktam variálni while/for/if szerkezeteket.

    Mutasd a teljes hozzászólást!
  • A memóriából kevesebb kell, de a proci többet dolgozik, mintha minden már benne lenne a memóriában.


    Pont hogy nem.
    Hisz nem tud haladni, mert várni kell az adatokra.
    Ha bent van minden a ramban akkor tudsz csinálni 100 kihasználtságot.
    De ha egy lassabb perifériáról olvasol, akkor a proci számára sok a döglött idő.
    Mutasd a teljes hozzászólást!
  • Jobban átlátod majd ezeket a kérdéseket, ha először konkrét feladatokon át szerzel gyakorlatot.
    Mutasd a teljes hozzászólást!
  • pl: olvasol egy blokkot, feldolgozol, olvasol egy blokkot feldolgozol, ...

    A memóriából kevesebb kell, de a proci többet dolgozik, mintha minden már benne lenne a memóriában.

    De a hozzászólásomba ott a példa:
    Ha egy kereséshez minden bent van a memóriában, akkor sok memória kell, de kevesebb a proci munkaideje, mintha állandóan olvasnia is kell.

    Miért is gyorsabb egy Windows 2M-al, mit 512K memóriával?
    Mert nem (illetve kevesebbet) kell a procinak lapozni, így kevesebb a művelet (és persze nem lassít a HDD)
    Mutasd a teljes hozzászólást!
  • Ja, hogy a memóriába nem fér bele az összes adat? Akkor máris lehet a memória megtakarítás rovására a procit dolgoztatni.


    Azt meg hogyan?
    Mutasd a teljes hozzászólást!
  • Az se rossz.
    Mutasd a teljes hozzászólást!
  • 1. A jó kód gyorsabb mint az előző!

    És ha "csak" többet tud?
    Mutasd a teljes hozzászólást!
  • Hogy értékeljük az erőforrásokat? A memória a drága? A CPU a drága? Az én időm a drága?


    Szerintem nincs egyértelmű meghatározás.
    Elvileg mindig a legjobbat kellene megtalálni, de egy nagy terhelésű rendszer (pl. egy google) esetén ugyebár az a cél, hogy a szerver/program minél kevesebbet dolgozzon. a proci idő minimalizálása a cél.

    Éppen ezért érdemes a gép bekapcsolásakor mindent betölteni a memóriába és utána ott végezni a munkát.

    Ja, hogy a memóriába nem fér bele az összes adat? Akkor máris lehet a memória megtakarítás rovására a procit dolgoztatni.

    És persze a jó arányt csak tesztekkel lehet eldönteni, ez meg programozói munkaóra igény.
    ---
    Persze az az olcsó, ha erős procit és sok memóriát veszünk, és a programozó rosszul (de gyorsan, így az idejét kifizetve olcsón) megírja a programot.
    Csak kérdés, hogy hosszú távon megéri-e?

    Ha ugye a program sokat kommunikál a felhasználóval, akkor a feldolgozás sebessége elenyésző a felhasználóra várakozáshoz képest, nagyon nem érdemes procira optimalizálni.
    Ha a program csak adatot dolgoz fel, akkor már érdemesebb procira optimalizálni.

    ---
    És akkor kérdés, hogy sok memória vagy sok lemezművelet?
    Mutasd a teljes hozzászólást!
  • Hogyne lenne jó kód!

    1. A jó kód gyorsabb mint az előző! 2. A jó kódot 10 év múlva, ha előveszed akkor is megérted

    Ennyi a többi csak rizsa
    Mutasd a teljes hozzászólást!

  • De van, csak nem lehet lőni vele...
    Mutasd a teljes hozzászólást!
  • nincs ezüst puskagolyó
    Mutasd a teljes hozzászólást!
  • Ti hogy látjátok ezt a kérdéskört?


    Logikatlannak.
    Mutasd a teljes hozzászólást!
abcd