Szoftverépítés a semmiből

By John SonmezFebruary 23, 2017

A szoftverfejlesztők nagy része szereti bonyolítani a dolgokat. Kapnak valamit, ami egyszerű és könnyű lehetne, és a legtöbb ember által az interneten elmondottak miatt bonyolulttá teszik.

A szoftvereknek egyszerűnek kell lenniük. Ezt mondva könnyű megérteni, hogy miért esik olyan sok fejlesztőnek nehezére a semmiből szoftvereket építeni. A fejükben ez egy teljesen összetett és nehéz dolog, és teljesen elakadnak a folyamat közepén.

A kérdés tehát az… Hogyan építhetsz szoftvert a semmiből?

Transcript From The Video

John Sonmez:

Hé, mi a helyzet? John Sonmez a simpleprogrammer.com-tól. Ma a nulláról való szoftverépítéssel kapcsolatban lenne egy kérdésem. Ez egy olyan kérdés, amit már sokszor kaptam sok különböző embertől, mert ez egy olyan dolog, amit nehéz megcsinálni, ha kezdő vagy, kitalálni, hogyan tudnád ezt valaha is megcsinálni.

Ez a kérdés Akash-tól érkezett, és azt mondja: “Hé John, a videóid nagyszerűek, és nagyra értékelem a tanácsaidat. Az egyik problémám az, hogy amikor egy nagy szoftver építéséről van szó, nem tudom kitalálni, hogyan tervezzem meg az egészet a semmiből. Mondjuk, hogyan lehet az egészet mini részfeladatokra bontani, majd az egyes részfeladatokat megvalósítani, és mindegyiket összerakni, hogy működjön. Nagyon jó lenne, ha tudna nekem útmutatást adni, hogyan lehet leküzdeni ezt a problémát. Köszönöm előre is.”

Azt mondanám itt, Akash, hogy amit tenni akarsz, az az, hogy gondolkodni akarsz – ahelyett, hogy egy egész rendszerre gondolsz, ez a fajta felülről lefelé megközelítés, lebontani az összes darabra, összerakni az összes darabot és megnézni, hogyan illeszkednek egymáshoz, és felépíteni ezt a hatalmas Transformert vagy Legót – ezekből a hatalmas Legókból. A szoftverfejlesztésre inkább úgy kell gondolni, mint az evolúcióra.

Azt értem ez alatt, hogy kezdjük valami nagyon egyszerűvel. Kezdd a legegyszerűbb dologgal, ami működhet, ami nem rendelkezik sok funkcióval, és aztán fejleszd azt oda, ahová menni akarsz, ahelyett, hogy azt csinálnád, amit úgy hívnak, hogy nagy előzetes tervezés. Ez nem azt jelenti, hogy soha nem szabad gondolkodni a dolog általános felépítésén, és hogy nem kell előre megtervezni bizonyos dolgokat. Sok esetben nem kell annyit tervezned, amennyit gondolsz, hogy szükséged van rá.

Na most, ha olyan szoftvert tervezel, amely egy elektronikus eszközbe lesz beágyazva, és egy hardvermérnöknek kell kifejlesztenie az áramkört vagy egy egyedi chipet vagy valamit ahhoz, hogy ez működjön, akkor valószínűleg sok mindent előre meg kell tervezned, és valószínűleg meg is kell tenned. Lehet, hogy ott még korlátozva is van. A legtöbb szoftver esetében, amit ma építünk, különösen a webes alkalmazások és hasonló dolgok vagy a mobil alkalmazások esetében, építhetünk valamit, ami nagyon-nagyon egyszerű, és aztán fejleszthetjük, változtathatunk rajta, hogy növeljük és komplexebbé tegyük, ha szükséges.

Az egyik dolog, amiért ez olyan fontos, az az, hogy a szoftverfejlesztés átka, az egyik legrosszabb dolog a szoftverfejlesztésben a komplexitás. Ez a csatorna a Simple Programmer nevet viseli, és az én üzletem arról szól, hogy a bonyolultat egyszerűvé tegyük, mert ez az, amire szükségünk van. Szoftverfejlesztőként az egyik fő feladatotok a komplexitás elleni küzdelem, mert a komplexitás bekerül a rendszerbe, és ez megnehezíti a karbantartást és megnehezíti a megértést. Nagyobb valószínűséggel lesznek benne hibák és hibák. A lehető legnagyobb mértékben csökkenteni akarjuk a komplexitást. Egyszerűsíteni akarjuk. A lehető legegyszerűbben kell kezdenünk, mi a lehető legegyszerűbb dolog, ami működhet?

A vállalkozói világban ezt sokszor MVP-nek vagy minimálisan életképes terméknek hívják. Mit tehetsz, amikor egy nagy szoftverrendszert próbálsz felépíteni, vagy mit tehetsz, ha nagyon kicsiben kezded. Kezdj egy nagyon-nagyon kicsi dologgal. Próbálok visszaemlékezni a könyvre, de olvastam egy nagyon jó könyvet valamiről, azt hiszem, a tesztvezérelt fejlesztés lépésről lépésre vagy valami ilyesmi volt. A könyvben egy Notepad alkalmazást vagy ilyesmit tervezett. Nagyon, nagyon fokozatosan kezdte – nagyon fokozatosan csinálta, és úgy kezdte, azt hiszem, hogy az alkalmazásnak szüksége volt egy adatbázisra, de úgy kezdte, hogy nem volt adatbázisa. Ehelyett az adatokat szöveges fájlokban tárolta, amelyeket a szöveges fájlokból olvasott be. Aztán eljutott arra a pontra, amikor ténylegesen adatbázisba kellett helyeznie az adatokat, majd módosította a programot, és ugyanezeket az adatokat olvasta be, kivéve, hogy létrehozott egy absztrakciót az adatbázisból való olvasáshoz.

Ez a dolgok természetes fejlődése, és így lehet felépíteni ezt a komplex szoftvert. Garantálom, hogy a legtöbb összetett szoftver, amit manapság ténylegesen megépítenek, így épül fel. A legtöbbet nem tervezik meg előre, és nem építik meg ezeket a darabokat, és csak remélni és imádkozni kell, hogy működjenek. Máskülönben a végén jóval a költségvetés és az ütemterv fölé kerül. Sajnos ez megtörténik. Ha sikeresek akarnak lenni, ha képesek akarnak lenni erre, csak kezdjenek valami kicsivel. Nincs semmi, ami nehéz lenne ezen a világon. Nincs semmi, ami bonyolult lenne. Csak az, hogy egy csomó egyszerű dologból áll, ami miatt bonyolultnak tűnik.

A legösszetettebb építészetet is felépítheted. Építhetsz hatalmas dolgot, de az egyszerűvel kell kezdened. Minden az egyszerűből áll össze. Aztán ahelyett, hogy megpróbálnád mindezeket a darabokat összeszedni, csak kezdd el. Fejleszd a dolgot. Kezdjétek el. Építs valamit. Mi a legkisebb, legegyszerűbb dolog, amit ki tudsz hozni, ami akár csak megközelíti a funkcionalitást? Aztán kezdje el hozzáadni a funkciókat. Ahogy hozzáadod a funkciókat, add hozzá az architektúrát, hogy támogasd őket, és hozz létre absztrakciókat.

Egy könyv, amit ajánlok, valószínűleg segítene neked ebben a Clean Code. Ez az egyik kedvenc könyvem Robert Martin tollából. Mindenképpen ajánlom ezt a könyvet, de az architektúrádat is fejleszteni akarod. Aztán a másik dolog, amit ezzel kapcsolatban mondanék, hogy ahogy fejleszted a dolgokat, absztrakciókat fogsz létrehozni, hogy egyszerű legyen, hogy soha ne legyen ez a hatalmas, hatalmas komplexitás. Néha még az is lehet, hogy újra kell írni az egészet vagy egyes részeit, de ez rendben van. Így működik a szoftverek fejlődése. Ez jobb, mint a komplexitás növelése.

Sokszor a szoftverfejlesztők idő előtt akarnak optimalizálni. Rendkívül rugalmassá akarják tenni a dolgokat. Elhamarkodottan optimalizálják a szoftvert, mert megpróbálnak egy nagyon-nagyon robusztus rendszert építeni. Ez gyakran nem sikerül, mert nem tudjuk, hogy mit nem tudunk. Nem tudjuk, hogy mire lesz szükségünk, ezért jobb, ha nem próbáljuk meg előre látni, hanem egyszerűen azt mondjuk: “Oké. Most hozzá kell adnom ezt az új funkciót, vagy így kell ezt működtetnem. Hogyan fejleszthetem?”

Ne feledd, a szoftverfejlesztés nem olyan, mint egy híd. Nem olyan, mintha már lebetonoztad volna, és most megváltoztatnád a ház architektúráját. A szoftver alakítható. Olyan, mint az agyag. Meg lehet változtatni. Nem kerül sokba a módosítás és a változtatás. A lehető legnagyobb mértékben ki kell használnod ennek a közegnek az előnyeit, ami egy evolúciós folyamatot tesz lehetővé a szoftverfejlesztéshez, szemben egy nagy, előzetes tervezéssel.

Remélem, ez segít neked, Akash. Nagyszerű kérdés. Azt hiszem, sokan kérdeztek erről a múltban. Ha kérdésed van hozzám, írj a [email protected] e-mail címre. Ha tetszett ez a videó, menj előre, és kattints arra a nagy feliratkozás gombra alul, ha még nem iratkoztál fel. Ha már feliratkoztál, nagyra értékelem. Maradjatok velünk a következő alkalomig. Vigyázz magadra.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.