Eli aiheena on varmaan monillekin tuttu projektin suunitteleminen. Itselläni on tässä kuitenkin yleensä pieni ongelma, eli mietin kauan minkä tekisin ja lopulta alan tekemään, niin saan jotain valmiiksi, mutta totetan monta kertaa että saman asian voi tehdä toisinkin paremmin. Tästä seuraa lopulta se, että en jaksa enään tehdä kyseistä projektia. Eli miten voi luoda projektin teosta mielekästä loppuun asti ja niin, että ei jää matkalle säätämään yhtä tai kahta kohtaa ja muu projekti unhoittuu?
Tähän vielä pieni kysymys, eli miten nämä projektinhallintaohjelmat auttavat projektin toteuttamista?
Itselläni on jälleen suunitelmissa projekti ja haluaisinkin teidän mielipiteitä, miten se tulisi toteuttaa. Mitä esivalmisteluja tulisi tehdä ja millälailla pitäisi yleisellä tasolla lähteä projektia lopulta koodaamaan. Eli en hae minkäänlaista koodivihjettä, vaan yleisiä ohjeita mitä tehdä.
Projektinani on tarkoitus luoda ohjelma, jonka avulla voi nivottaa yhteen suuren määrän tietoa maailmasta. Ohjelmassa tulisi olemaan yksi "pääruutu", johon avautuu käsiteltävissä oleva teksti. Lisäksi ruudulta löytyy pieni "kuvagalleria", joka näyttää kuvia, jotka on linkitetty tekstiin mukaan.
Kuvagallerian alapuolella tulee olemaan pieni tekstikenttä, johon avautuu tiivistelmä tekstissä olevia linkkejä painamalla (tiivistelmä on valmiiksi kirjoitettu) tai kuvateksti.
Tämän lisäksi olisi hyvä, jos ohjelmassa tulisi olemaan jonkinlainen oikoluku. Ja jotta projekti olisi hyödyllinen myös myöhemmin, niin haluaisin luoda projetksita mahdollisimman modulaarisen, eli osia voi liittää eri paikkoihin myöhemmin runkoa jne.
Ohjelmointikielenä tulen käyttämään Javaa, koska se toimii melkeinpä millä tahansa koneella ja käyttöjärjestelmällä.
Tässä itselläni on jo jonkinlainen visio miten toteutan ohjelman, mutta lopulta saan vain itseni solmuun. Eli minkälaisilla alkuvalmisteluilla säästyy koodatessa vastaan tulevilta ongelmilta?
Itse tykkään tehdä ensiksi karkeita suunnitelmia, joita sitten tarkennan pikkuhiljaa. Esimerkiksi jos minun pitäisi tehdä tekstieditori, niin ensiksi miettisin, että ohjelman pitäisi osata avata tekstitiedosto, tulostaa se ruudulle ja tulostimelle, sekä tallentaa tiedosto. Seuraavaksi miettisin jotain kohtaa tarkemmin.
Esimerkisi kuvaruudulle tulostettaessa pitää tulostaa tekstiä merkki kerrallaan. Kun merkki on tulostettu, pitää kursori sammuttaa (onko tuo oikea termi), siirtää uuteen paikkaan, laittaa kursori välkkymään ja olla valmiina tulostamaan uusi merkki toiseen kohtaan, joko edellisen oikealle puolelle tai uuden rivin alkuun. Jos taas uusi merkki menisi ruudun yli, niin sitä ei tulostetakaan.
Jos suunnitelmat kirjoittaa muistiin, se auttanee myös ohjelmien debuggaamisessa.
Samalla mietin tietysti järkevää rakennetta ohjelmalle. Miten yleisiä funktioita teen? Millaisia olioita käytän? Ei kai useampi funktio tee samantapaisia asioita, jolloin kyseinen pätkä on järkevämpää muuttaa omaksi funktioksi?
Mutua: Itellä menee lähes järestään projektit solmuun siks, että ruvetaan vääntämään liian tarkasti heti ensimmäistä versiota ja ideoidaan ominaisuuksia nopeammin kuin toteutetaan. Jos kuulostaa tutulta niin suosittelisin kokeilemaan projektin rakentamista nopeasti toteutetuista, pienistä osa-alueista.
Tässä se tarkottaisi sitä, että aluksi teet jonkun framen johon pukkaat nuo komponentit ilman vaikutussuhteita. Toimii, ok. Seuraavaksi lisäät vaikutussuhteet. Toimii, ok. Seuraavaksi väännät vaikka I/O:ta... etc. Oikoluvun voi huoletta unohtaa kokonaan ensimmäisissä versioissa.
Modulaarisuus tulee siinä samalla jos tosiaan suunnittelet ja toteutat osa-alueet eristettyinä systeemeinä, jotka sitten naitat toimivaksi kokonaisuudeksi, josta suihkuaa vaahtokarkkeja ja shamppanjaa. Noita nippeliviilauksia kyllä ehtii miettimään pohjustuksen jälkeen, tavotteena olis saada nopeasti jotain näytölle ja pitää näin kehitys pyörimässä ja motivaatio ylhäällä.
Lisää mutua: Se että toteat monta kertaa, että olisit voinut tehdä jotain toisin tai paremmin johtuu siitä, että mikään maailman tuote ei ole ikinä valmis. Aina on kehitettävää. Tätä varten pitää olla (väli)tavoitteita, jotka määrää milloin tuotetta voidaan sanoa valmiiksi. Ohjelmointiprojektissa tavoitteiden tarkka määritys on kai kohtalaisen helppoa. Jokaiselle oliolle määritetään jo suunnitteluvaiheessa, mistä se on vastuussa, mitä funktioita sillä on, ja minkä olioitten kanssa se on tekemisissä. Dokumentaatio syntyy tässä samassa.
Jaat ohjelman 2...7 osaan kerrallaan ja seuraavaksi osat jaetaan aina pienempiin osiin jne niin kauan, että yksittäisen osan voi suunnitella/koodata itsenäisenä ohjelman pätkänä. Eli näitä pieniä osia voi parhaimmillaan käyttää jatkossa jossain toisessa projektissa.
Projektinhallintaohjelman edut on siinä että tieto on sähköisenä, jolloin sitä on helpompi hallita ja jakaa projektin osapuolille ja tekijöille. Jos teet projektin yksin ilman tiukkoja deadlineja, niin mielestäni ei kannata käyttää. Projektinhallintaohjelmilla voi kohtalaisen helposti tulostaa kaikenlaisia dokumentteja kuten osituksen, aikataulun, resurssikohtaiset työtehtävät, kriittisen polun sun muuta. Tieto kun on tosiaan sähköisenä, ohjelmalla on helppo verrata alkuperäistä suunnitelmaa erilaisiin vaihtoehtoisiin suunnitelmiin projektin edetessä.
Kiitoksia hyvistä tiedoista. Nyt vain kysyn tähän jatkona, minkälainen on hyvä suunitelma ohjelmasta. Mitä kaikkea pitää kirjata siihen ja miten siitä saa selkeän myös muille kuin itselleni?
Tuohon tarvitaan jo vähän laajempi vastaus, esim. tämä: Craig Larman: Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development. Jos asut pk-seudulla, niin yksi lainassa oleva kappale palautuu eräpäivän mukaan loppukuusta Tikkurilan kirjastoon. Varmaan muualla maassakin on mahdollisuus etsiä kirjastojen tarjontaa, ja kirjojahan voi kai tilata kirjastoon pienellä maksulla kauempaakin.
Toinen hyvä vaihtoehto on kirjoittaa kuukkeliin hakusanaksi "ohjelmistojen mallinnus" tai "ohjelmistotekniikan menetelmät". Korkeakoulujen oppimateriaalia on paljon kaikkien nähtävillä netissä.
Projektia ei saa vääntää liian aikaisessa vaiheessa "valmiiksi" asti, koska sitten toteutusvaiheesas tulee jokatapauksessa tilanteita, jossa projektisuunnitelmaa/tavoitteita/aikataulua/
Itse olen värkkäämässä opinnäytetyöksi simppeliä web-pohjaista projektinhallintajärjestelmää Pythonilla ja Djangolla. Suurin osa löytämistäni projektinhallintajärjestelmistä oli joko liian monipuolisia tai liian joustamattomia. Työn pitäisi tässä jouluun mennessä valmistua, mutta näyttäisi menevän keväälle.
kiitoksia jälleen hyvistä vastauksista. Eli jos nyt oikein ymmärsin, niin projekti kannattaisi jakaa pienempiin välitavoitteisiin kuten:
Versio 0.1
- uuden kirjoitelman luominen
- Kirjoitelman tallentaminen ja lataaminen
- Jäsentely tekstissä lukuihin ja osiin
Versio 0.2
- Henkilöiden lisääminen päähenkilöiksi tai sivuhenkilöiksi
- Paikkojen lisääminen
- Paikkojen ja henkilöiden linkittäminen tekstiin
Versio 0.3
- Eri juonikuvioiden seuranta
Versio 0.4
- Kuvien lisääminen henkilöille ja paikoille
Rovaniemen kirjastossa ei näkynyt tuota kirjaa olevan, eli taidan tyytyä nyt netistä löytyvään materiaaliin näin aluksi.
Mikä olisi sitten hyvä kirja XML-kuvauskielen käyttämiseen, sillä olen päätynyt siihen tulokseen, että tuo sopisi parhaiten ohjelman luomien tiedostojen tallennusmuodoksi, koska se on mielestäni selkeää.
mikeful kirjoitti:
Itse olen värkkäämässä opinnäytetyöksi simppeliä web-pohjaista projektinhallintajärjestelmää Pythonilla ja Djangolla.
Itsekin olen tuota Pythonin opiskelua web-sovellusten tekemisen kannalta miettinyt... Kuinka hyvin se mielestäsi sopii webbiä varten, verraten php:hen?
Daih kirjoitti:
Rovaniemen kirjastossa ei näkynyt tuota kirjaa olevan, eli taidan tyytyä nyt netistä löytyvään materiaaliin näin aluksi.
Tokihan sen saa myös ostettua jos vaan rahaa on :P Itsellä on se ja "Ideasta eteenpäin" niminen kirja ja noissa ihan kivasti selitetty projektien tekoa. Tosin jälkimmäistä olen varsinaisesti lukenut, toista vähän selaillut vain :E
Onko tuo Ideasta eteenpäin kirjan koko nimi Pelisuunnittelijan käsikirja - ideasta eteenpäin?
Jos on, niin miten se soveltuu perinteisen ohjelman suunnitteluun, sillä tietääkseni pelisuunnittelussa ja normaalin ohjelman suunnittelussa on joitain selviä eroja. Korjatkaa jos olen väärässä.
Suosittelen kunnon ohjelman hankkimista XML-tiedostojen käsittelyyn, esim. Oxygen.
Tai jos jostain löytyy ilmainen grid-muokkaukseen kykenevä XML-editori, niin sellaisesta saa ehdottomasti kertoa!
Aihe on jo aika vanha, joten et voi enää vastata siihen.