Tycker det är svårt att bygga "lätta program"

Permalänk

Tycker det är svårt att bygga "lätta program"

Hej,

Jag har gått igenom många Youtube videos (Thenewbostons java beginner) och läst lite i böcker angående programmering.
Jag har lärt mig grunderna om t.ex loops, arrays, konstruktor, this, getter och setters, metoder osv..När jag väl ska sätta mig och skapa något litet program så fastar jag alltid och upplever att jag är mitten i ett j*vla spindelnät. Jag hade som exempel tänk att göra ett bokningssystem för flygplan där man ska kunna boka en sittplats samt se vilka platser som finns tillgängliga via en meny. Borde inte vara så svårt tänkte jag. När jag väl sätter mig börjar jag typ kallsvettas. Har ni några knep på hur man kan tänka? Kan det här kanske bara bero på det mest uppenbara - att jag inte praktiskt kodat tillräckligt mycket? Så fort jag snurrar in mig börjar jag svettas. Vill bara att den här jävla poletten ska trilla ner nu

Min tanke gällande bokningssystemet är iaf att jag behöver en switch, en 2d array, någon metod med en loop som kollar ifall platser är upptagna,

Med vänlig hälsning,

Permalänk
Vila i frid

Det blir alltid en tröskeleffekt med nya saker. Lek, gör fel och lär. För saker som skall "kommas ihåg", låta java använda en databas t.ex. MySQL.

Kan du inte beskriva processen i ditt huvud, som flödesdiagram eller som skrivet ord kan du inte heller knacka dess kod.

Permalänk
Medlem

Min första tanke är; behövs verkligen en tvådimensionell array för platserna? Du kanske blandar ihop gränssnitt och datastruktur? Räcker ju om listan med platser är endimensionell där vardera objekt i arrayen håller platsbeteckning, om det är ekonomi/business class och om den redan är bokad eller ej.

Visa signatur

Windows 11 Pro | Intel i7 8700 | ASUS Prime Z370-P | Corsair 16GB 3000MHz | ASUS GTX 1080 | Fractal Design Define S | Corsair RM750x | Hyper 212 EVO

Permalänk
Medlem

Jag håller också på men just nu blir det att programmera en egen app.
Det är svettigt men bryt ner problemet så mycket det går.

Min första tanke var att göra varje plats till ett eget objekt.
Sedan kan du spara dom i en array och ge objekten olika värden.
Som klass, platsnummer, gång, fönster eller mitten.
Sedan har du en boolean i objektet om den är bokad, sant eller falskt.

Det vara bara min första tanke men som sagt bryt ner problemen och lös en liten del i taget.
Till slut har du löst stora komplexa problem genom små steg.

Visa signatur

Man made the electrolyte to make us see the horrors in the dark.

Permalänk

@Joppis:

Jag tänker mig att det t.ex finns 40st platser, 10 rader med A-B-C-D. Kanske fungerar med en vanlig array med?

Permalänk

Det bara att öva. Ibland kan det vara en god ide att pröva att programmera i ett annat språk. Läs böcker, trådar och kolla hur andra har gjort. Läs någon annans kod och försök förstå vad den gör och hur den kommer bete sig. Kopiera någon annans kod och modifiera och kolla vad som händer. Ju, mer du utsätter dig för programmering desto bättre komner du bli.

Skickades från m.sweclockers.com

Permalänk
Medlem

jag har svår Microsoft Bias har oxo jobbat som utvecklare i mer än 20 år o hållit på med programmering som hobby nästa lika länge till... så jag mitt råd är, släpp java och kör .NET

Mycket större community i Sverige än java - betydligt bättre utv miljö(Visual studio, finns gratis i community version). c# i NET är det enklaste programmeringsspråk som finns IMHO

o ja, jag körde Java på sent 90-tal

// LZ

Permalänk
Medlem
Skrivet av Tea42BBS:

jag har svår Microsoft Bias har oxo jobbat som utvecklare i mer än 20 år o hållit på med programmering som hobby nästa lika länge till... så jag mitt råd är, släpp java och kör .NET

Mycket större community i Sverige än java - betydligt bättre utv miljö(Visual studio, finns gratis i community version). c# i NET är det enklaste programmeringsspråk som finns IMHO

o ja, jag körde Java på sent 90-tal

// LZ

Spelar ju inte så stor roll om han använder C# eller Java när han fastnar i designprocessen.
Du har ju i stort sett precis samma design oavsett vilket språk du skriver i.

Visa signatur

Ny signatur!

Permalänk

@lodarletarn:

Jag har skrivit detta i flera trådar, men vi tar det väl en gång till

Som ovan programmerare måste du ha klart för dig hur du skall lösa problemet innan du sätter dig vid tangentbordet. Som nybörjare behöver du ha tre verktyg i din mentala verktygslåda för att angripa problem: sekvens, selektion och iteration. Om vi tar dem ett verktyg i taget:

Sekvens: Gör först A sedan B. Detta kan tyckas självklart att man först skall göra en sak och sedan nästa, men det är den vanligaste uppdelningen av ett problem i mindre delar. Först gör vi en sak och sedan gör vi nästa sak.

Selektion: Gör antingen A eller B beroende på ett villkor.

Iteration: Gör A tills ett villkor är uppfyllt. Detta är typiskt en loop. Man kan köra ett fixt antal varv eller tills ett visst villkor blir uppfyllt, exempelvis att du hittar en nolla i en array.

Dessa kan kombineras i det oändliga och selektionen kan välja mellan en sekvens och en iteration, man itererar typiskt över en sekvens av operationer och sekvensen kan innehålla både iterationer och selektioner. Som en hjälp att tänka i dessa former kan man använda forna tiders flödesscheman.

Stäng nu editorn och hämta penna och papper. Fundera på hur du skulle lösa platsbokningen för hand. Hur skulle du göra? Utan dator!

När du har mer rutin kommer du undermedvetet bryta ner problemet i sekvens, selektion och iteration och du kommer kunna ta lite genvägar, men jag tycker fortfarande att hjälper att ställa mig vid whiteboarden och rita lite när det är komplexa problem att lösa.

Först och främst handlar det om att bryta ner problemet i mer behändiga delar. Hur skulle du göra om du satt bakom en disk och folk kom och ville boka platser på buss?

1) Jag tror att du skulle göra en tabell med alla platser där du höll reda på om platsen var bokad eller inte.
2) När någon kommer fram till disken skulle du presentera dig och förklara vilka tjänster du erbjuder. Besökaren kan list lediga platser, boka plats, avboka plats, eller göra ingenting.
3) Du frågar vad besökaren vill göra.
4a) Om hen ville se vilka platser som fanns att boka, lista lediga platser.
4b) Om hen ville boka en plats, hantera detta.
4c) Om hen ville avboka en plats, hantera detta.
5) Så länge bussen inte har gått hoppa tillbaka till punkt 2

Nu har vi brutit ner problemet i lite mer behändiga bitar. I högnivålösningen har vi exempel på
Iteration: Punkt 2 till 5 upprepas till bussen går eller du stänger för kvällen.
Selektion: Beroende på besökarens val väljer du antingen 4a, 4b eller 4c.
Sekvens: Här har du två fall av sekvens, först skapar du din tabell (1) och sedan körs iterationen (2-5) och inuti iterationen gör du först 2, sedan 3, sedan selektionen 4 och till sist 5.

Verkar detta vettigt? Nästa steg är att titta på de olika delmomenten och bryta ner dessa i mindre operationer och göra dessa steg för steg och sedan bryta ner dessa steg i ännu mindre steg. "Hantera bokning" låter som ett stort steg, vad består det av?

Låt oss säga att Pelle Petterson vill boka plats nummer Plats på rad Rad.
1) Kolla om bokningen är rimlig. Om besökaren försöker boken en plats som inte finns (rad 12 i din 10-radiga buss) skulle du säga till.
2) Om platsen redan är bokad,
2a) Säg att platsen är upptagen
2) annars
2b) Notera att säte[Rad][Plats] är bokat av Pelle Petterson och säg att bokningen gick bra.

När du har så detaljerade instruktioner så att din polares korkade lillebrorsa skulle kunna sitta bakom disken och hantera bokningen, då är det oftast en lätt sak att översätta dessa till programkod. Nu är det dags att öppna editorn och översätta instruktionerna till polarens lillebror till ett program.

TL;DR Du måste själv veta hur du skulle lösa problemet innan du försöker skriva ett program som skall lösa problemet.

Permalänk
Medlem

Håller helt och hållet med @Ingetledigtnamn om att det är mycket enklare om man löser så mycket man kan innan man sätter sig ner och programmerar. Sen delar man upp uppgiften i delmoment och avverkar dem en åt gången, så det inte blir för snurrigt.

Lös det logiska förloppet först, som demonstrerat ovan.

Sen kan man börja fundera på vilka datatyper som kan tänkas vara bäst lämpade för innehållet i programmet.
Ska man köra ett antal arrayer där en innehåller bokningsstatus för varje stol och någon annan som innehåller resenärinformation för varje stol? Eller ska man ha en array av arrayer? Eller är det kanske bäst att ha en array eller lista av objekt, som i sin tur innehåller all möjlig information om stolen och resenären som sitter i den? Eller ska man ha separata objekt för både stol respektive resenär, där stolobjektet innehåller ett resenärobjekt? Ska man använda sig av klassobjekt eller structs ?

Det finns många sätt att flå en katt, huvudsaken är att man får ner det logiska flödet först, så faller resten av pusselbitarna på plats lättare.

Permalänk
Medlem

Det låter som att du behöver läsa på lite om arkitektur. Du kan kolla t ex på MVC patterns. Men rent allmänt (åtminstone inom OOP) är att man försöker använda sig av olika lager. En erkänd bra approach är att försöka skilja på logiken och UI:t och ha delarna så löst kopplade som möjligt.

Permalänk
Medlem
Skrivet av lodarletarn:

@Joppis:

Jag tänker mig att det t.ex finns 40st platser, 10 rader med A-B-C-D. Kanske fungerar med en vanlig array med?

När du lagrar platserna så behöver de inte heta precis så som användaren ser dem. Du kan jobba med dem som plats 1-40 och när de väl ritas ut på skärmen får de 1A 1B osv.

Permalänk
Medlem

Du kan ju spara varje plats i en enda lista men sedan ange i varje platsobjekt vilket nummer och vilken sida etc platsen har.

Permalänk
Medlem
Skrivet av DanTheManSwe:

Spelar ju inte så stor roll om han använder C# eller Java när han fastnar i designprocessen.
Du har ju i stort sett precis samma design oavsett vilket språk du skriver i.

med bättre och tydligare verktyg och struktur så blir det lättare att mappa tanken till kod.

Samt att det finns mer exempel och tutorials att ta del av för att få inspiration och se hur andra löst liknande problem.

Så jag håller inte med

Med vänlig hälsning Lazze

Permalänk
Medlem

Tänk så enkelt du kan är mitt tips.

Skapa en klass som representerar flygplan som i sin tur har en lista med kunder.

Sedan en annan klass som representerar en kund.

Sedan när en person vill boka så kolla du upp den lista av flygplan som har platser lediga, de lediga platserna kan du sedan visa honom så han kan boka.

Tex. enligt

1. Iterera över listan över flygplan och sätt vilkoret att endast visa lediga platser.
2. När han har bestämt sig för en plats på ett visst plan så uppdaterar du det flygplanet i listan genom att lägga till honom som resenär (genom att använda klassen kund. Då har du massor av information om vem har har bokat en viss plats. Exempelvis namn, ålder, man/kvinna, vikt, längd, personnummer osv...)

Det behövs inte så många steg för att får den enklaste varianten att fungera

Den lågbegåvade unga tjejen som är granne kan nog hantera det sedan när hon står bakom disken.

Permalänk
Hedersmedlem

Börja med att specificera vad programmet ska göra och hur.

Vilket indata tar programmet, vad gör programmet med datat, vad är det för utdata, och vilka fel kan uppstå.

Konkretisera din definition av vad programmet ska göra och hur i mer och mer detalj. Medan du gör det kommer du upptäcka de tankevurpor som du gjort och funktioner som saknas. Fokusera på vad, inte hur. T.ex. tänk: "Givet ett stolsnummer så ska programmet registrera att en viss stol är upptagen. Om man försöker boka en stol som redan är upptagen eller som är ogiltig så är det fel." Tänk inte: "Indexera in i en array och sätt en flagga för att boka stolen." Inte än i alla fall. Det gör du när du väl skriver koden i fråga.

Implementera sedan de funktionerna. I det här stadiet är det rimligt att tänka datastrukturer och algoritmer. Garanterat kommer du här också upptäcka tankevurpor eftersom du kanske missat något när du tänkt mer abstrakt. Gå isåfall tillbaka ett steg och fixa din design innan du går vidare.

Debugga och upprepa tills du har ett fungerande program.

Permalänk

@Ingetledigtnamn: wow vilket svar! Såhär ska jag börja tänka i framtiden. Tack!

Permalänk
Medlem
Skrivet av lodarletarn:

@Ingetledigtnamn: wow vilket svar! Såhär ska jag börja tänka i framtiden. Tack!

Är man ny och osäker på klasser och objekt mm så prova att skippa dessa och lös på enklaste sätt.
Klasser mm är bra vid lite mer komplexa problem, sen när man blir lite mera varm i kläderna så kan man prova med olika varianter och se ifall man kan lösa sitt problem enklare eller ej.

Visserligen skämtsamt, men ändå rätt belysande:

http://www.ariel.com.au/jokes/The_Evolution_of_a_Programmer.h...

Permalänk

@lodarletarn: Första steget är alltid att sitta ner med papper och penna och planera. Efter det borde det vara lättare att skriva koden!

Permalänk
Medlem

Planera och lös ett problem i taget, hur ska du spara data t.ex. börja med spar funktionen så du vet att den funkar, försök göra den lite modulär om möjligt.
Sedan bygg vidare steg för steg och se till att testa varje del både individuellt och med andra delar, det kan kännas larvigt med mindre program men kommer vara guld värt i längden om du lär dig programmera med lite inbyggda tester etc.

Visa signatur

"One is always considered mad, when one discovers something that others cannot grasp."
- Ed Wood

Permalänk
Medlem

@Ingetledigtnamn: Vilket inlägg, pedagogiskt och strukturerat!

good karma for you

Permalänk
Medlem
Skrivet av RaynizM:

jobbar själv som utvecklare och säger som så många andra innan mig: gör det enkelt för dig, ta reda på vad problemet är. försök att konkretisera problemet, dela upp det och sedan gör en del i taget. ett litet lätt program kan faktiskt bli riktigt stort och avancerat om du gör allting som en "skillad" programmerare. och det finns inget skamligt med att googla efter svar. först lär man sig av att härma, sedan börjar man lära sig det utantill, sedan börjar man modifiera det och till slut kommer steget där man faktiskt förstår vad man gör och därifrån kan skriva om koden hur man vill och ändå få den att lösa ens problem.

skillnaden på en garagekodare och en som har det som yrke är koden de skriver.

du kan koda ihop sjuka program men det gör dig inte till en riktig kodapa.
KISS och DRY är två saker du kan försöka följa som kodare.
keep it stupid simple och don't repeat yourself är två bra meningar haha.

Way to bump en 2 år gammal tråd.