Att bygga programvara från grunden

By John SonmezFebruary 23, 2017

En hel del programvaruutvecklare gillar att göra saker komplicerade. De får något som skulle kunna vara enkelt och lätt och på grund av vad de flesta berättar på internet gör de det komplicerat.

Mjukvara ska vara enkel. Med det sagt är det lätt att förstå varför så många utvecklare har svårt att bygga programvara från grunden. I deras huvuden är det en helt komplex och svår sak och de fastnar helt och hållet mitt i processen.

Så, frågan är… Hur bygger man mjukvara från grunden?

Transkription från videon

John Sonmez:

Hej, hur är läget? John Sonmez från simpleprogrammer.com. Idag har jag en fråga om att bygga programvara från grunden. Detta är en fråga som jag har fått många gånger från många olika människor eftersom detta är något som är svårt att göra när man är nybörjare, att räkna ut hur man någonsin skulle kunna göra detta.

Denna fråga kommer från Akash och han säger: ”Hej John, dina videoklipp är fantastiska och jag värdesätter verkligen dina råd. Ett problem jag står inför är att när det gäller att bygga en stor programvara kan jag inte komma på hur jag ska designa det hela från grunden. Hur jag ska dela upp det hela i små deluppgifter och sedan genomföra varje deluppgift och sätta ihop dem för att få det att fungera. Det skulle vara mycket trevligt om ni kan vägleda mig om hur jag ska lösa detta problem. Tack i förväg.”

Vad jag skulle vilja säga här, Akash, är att du vill tänka – i stället för att tänka på att ta ett helt system, denna typ av uppifrån-och-ned-strategi, bryta ner det till alla dessa bitar, sätta ihop alla dessa bitar och se hur de passar ihop och bygga denna enorma Transformator eller Lego från – dessa enorma Lego. Man vill se mjukvaruutveckling mer som evolution.

Vad jag menar med det är att börja med något riktigt enkelt. Börja med det enklaste som kan fungera och som inte har så många funktioner och sedan utveckla det till vad du vill uppnå, i stället för att göra vad man kallar stor design i förväg. Det betyder inte att man aldrig ska tänka på den övergripande arkitekturen och att man inte ska ha designen och vissa saker i förväg. I många fall behöver du inte göra så mycket av det som du tror att du behöver.

Om du utformar en programvara som ska integreras i en elektronisk enhet och en hårdvaruingenjör måste utveckla kretsarna eller ett specialanpassat chip eller något annat för att det ska fungera, kommer du förmodligen att behöva utforma en hel del av dessa saker i förväg och du kommer förmodligen att behöva göra det. Du kanske till och med är begränsad där. För de flesta programvaror som vi bygger idag, särskilt webbapplikationer och liknande eller mobilapplikationer, kan vi bygga något som är mycket, mycket grundläggande och sedan utveckla det, göra ändringar för att öka det och lägga till komplexitet efter behov.

En sak – en av anledningarna till att detta är så viktigt är att komplexiteten är en av de värsta sakerna inom programvaruutveckling. Den här kanalen heter Simple Programmer och min verksamhet handlar om att göra det komplexa enkelt, för det är vad vi behöver göra. Som mjukvaruutvecklare är en av era viktigaste uppgifter att bekämpa komplexiteten eftersom komplexiteten kommer in i systemet och gör det svårt att underhålla och gör det svårt att förstå. Det gör det mer troligt att det kommer att ha buggar och misslyckas. Vi vill minska komplexiteten så mycket som möjligt. Vi vill förenkla. Vi måste börja så enkelt som möjligt, vad är den enklaste möjliga sak som kan fungera?

I entreprenörsvärlden kallar man ofta detta för MVP eller minimal viable product. Vad kan man göra när man försöker bygga ett stort programvarusystem eller vad man kan göra är att börja riktigt litet. Börja med en mycket, mycket liten sak. Jag försöker komma ihåg boken, men jag läste en riktigt bra bok om något, jag tror att det var testdriven utveckling steg för steg eller något liknande. I boken designade han en Notepad-app eller något liknande. Han började med mycket, mycket inkrementella – han gjorde detta på ett mycket inkrementellt sätt och han började med, jag tror att hans applikation behövde en databas, men han började med att inte ha någon databas. Istället lagrade han data i textfiler som han läste från textfilerna. Sedan kom han till den punkt där han faktiskt behövde lägga in dem i en databas, och sedan ändrade han programmet och fick det att läsa samma data, förutom att han skapade en abstraktion för att läsa från databasen.

Det är den naturliga utvecklingen av saker och ting och det är så man kan bygga denna komplexa mjukvara. Jag garanterar dig att de flesta komplexa programvaror som byggs i dag byggs på detta sätt. Mycket av den är inte utformad i förväg och sedan bygger man alla dessa delar och hoppas och ber att de ska fungera. Annars slutar det med att budgeten och tidsplanen överskrids kraftigt. Tyvärr händer det. Om du vill lyckas, om du vill kunna göra detta, börja med något litet. Det finns ingenting som är svårt i den här världen. Det finns ingenting som är komplicerat. Det är bara det att det består av en massa enkla saker som gör att det verkar komplext.

Du kan bygga den mest komplexa arkitektur. Du kan bygga en enorm sak, men du måste börja med det enkla. Allt är sammansatt av det enkla. Istället för att försöka ta alla dessa delar, kan man börja. Utveckla saken. Börja. Bygg något. Vad är den minsta enklaste sak som du kan skapa och som har en funktionalitet som är i närheten av den? Börja sedan lägga till funktioner. När du lägger till funktionerna lägger du till arkitekturen för att stödja dem och skapar abstraktioner.

En bok som jag vill rekommendera och som förmodligen skulle hjälpa dig att göra det heter Clean Code. Det är en av mina favoritböcker av Robert Martin. Jag rekommenderar definitivt den boken, men du vill utveckla din arkitektur. En annan sak som jag skulle vilja säga om detta är att när du utvecklar saker och ting kommer du att skapa abstraktioner för att hålla det enkelt så att du aldrig får denna enorma, enorma komplexitet. Ibland kan det till och med innebära att man måste skriva om hela eller delar av det, men det är okej. Det är så utvecklingen av programvara fungerar. Det är bättre än att lägga till komplexitet.

Många gånger vill programvaruutvecklare optimera i förtid. De vill göra saker och ting extremt flexibla. De optimerar programvaran i förtid eftersom de försöker bygga detta mycket, mycket robusta system. Det misslyckas ofta eftersom vi inte vet vad vi inte vet. Vi vet inte vad vi kommer att behöva, så det är bättre att inte försöka förutse det, utan bara säga: ”Okej. Nu måste jag lägga till den här nya funktionen eller få det här att fungera på det här sättet. Hur kan jag utveckla det?”

Håll dig i minnet att mjukvaruutveckling inte är som en bro. Det är inte som om du har lagt betong och nu ska du ändra husets arkitektur. Programvara är formbar. Den är som lera. Du kan ändra på den. Det är inte dyrt för dig att modifiera den och ändra den. Du måste använda fördelarna med detta medium så mycket som möjligt, vilket lämpar sig för en evolutionär process för att utveckla programvara, i motsats till en stor design i förväg.

Jag hoppas att det hjälper dig Akash. Bra fråga. Jag tror att många har frågat om detta tidigare. Om du har en fråga till mig kan du skicka ett e-postmeddelande till [email protected]. Om du gillar den här videon, gå vidare och klicka på den stora Subscribe-knappen nedan om du inte redan har prenumererat. Om du redan har gjort det uppskattar jag dig. Håll dig uppdaterad till nästa gång. Ta hand om dig.

Lämna ett svar

Din e-postadress kommer inte publiceras.