To be translated...

Avointen kehitysympäristöjen maailmassa seikkaillessa suurena rikkautena ja ongelmallisuutena on valinnanvaran määrä. Joka ongelmaan löytyy vähintään 10 kehittynyttä ohjelmointikieltä, kullekin on toteutettu 5 suosittua kirjastoa ongelman ratkaisuun ja internet on pullollaan ihmisiä esittämässä enemmän tai vähemmän absoluuttisesia totuuksia valintojensa järkevyyden suhteen. Hyvänä ratkaisuna on olla hukkumatta tähän sanailu-tulvaan, ottaa näppäimistö käteen ja kokeilla itse miten ongelma ratkeaa jollain muiden hyväksi havaitsemalla työkalulla.

Kurssilla ei ole rajoitteita toteutusalusta-valinnan suhteen, mutta suosittelemme Python-ohjelmointikieltä, varsinkin tilanteessa jossa työkalun valintatilanteita ei ole tullut aiemmin vastaan.

Suosimme myös kurssilla käytettäväksi Unixin kaltaisia GNU Linux tai Mac OSX käyttöjärjestelmiä, joilla suurin osa open source -kehityksestä tapahtuu. Mikäli moisen opettelu vaikuttaa suunnattoman vastenmieliseltä, on suotavaa vähintäänkin Git-versionhallinnan käytön osalta opetella ja ottaa käyttöön kunnon Unix-komentorivi (esim. Babun).

Olisi paras hyvä mikäli ryhmien sisällä käytetään yhteistä kehitysympäristöä projektin toteutukseen. Tällöin voitte taistella yhdessä kehitysympäristön kummallisuuksia vastaan. Ero Linuxin ja Macin välillä on senverran pieni että sillä on tuskin merkitystä.

Python

Esim Javan tai C#:n alkeet osaavalle Python aukeaa nopeasti. Avoimen lisenssin omaavia kirjastoja ja esimerkkikoodeja on tarjolla runsaasti, joita yhdistelemällä liikkeelle pääsee vauhdilla.

Kirjastoja ja esimerkkikoodeja löytyy runsaasti tarpeen mukaan hakukoneella. Kannattaa myös hyödyntää Githubin hakutoiminnallisuutta.

python.png

Web Frameworkit

Yleensä sovelluksen käyttäjälle halutaan jotain tietoa näkyviin. Web alusta on yksinkertaisen ja lähes kaikilla päätelaitteilla toimivan yhteinen alusta.

Flask

Miellyttävä web-framework työkalu varsinkin yksinkertaisten web-sovellusten toteutukseen, tai API:en. Micro-frameworkin lähestymistapaan kuuluu että käyttäjän haluamat toiminnallisuudet liitetään mukaan yksitellen laajennoksien avulla. Yksinkertaisin toimiva web sovellus on mahdollista toteuttaa yhdessä tiedostossa muutamalla rivillä koodia.

Flask:n opettelu pääsee hyvin vauhtiin Miquel Grindbergin Flask-tutoriaalilla. Kirjoittaja on tehnyt myös kirjan aiheesta jota voidaan suositella.

Vastaavia mm. Bottle (vielä minimalistisempi). Django

Suosittu Python (mega) web-framework. Raskaampi työkalu joka sisältää enemmän "magic:ia". Oppiessa suuri osa ajasta menee frameworkin konventioiden opetteluun, mutta sen jälkeen varsinkin raskaampien sovellusten vauhdikas toteuttaminen voi olla hyvin miellyttävää.

Raskaiden web-frameworkkien sarjaan kuuluvat myös super-suosittu Ruby on Rails, sekä MS ASP.NET MVC jota kannattaa välttää (ellei ole täysin varma mihin on ryhtymässä).

GUI Frameworkit

PyQT4

Viime vuonna eräs ryhmä teki onnistuneesti (lisenssirajoitteista johtuen) desktop-sovelluksen QT:lla. Huomatkaa että myös GUI-ohjelmointi Pythonilla on eri vuosikymmeneltä kuin Java Swing tai Windows Forms -ohjelmointi ;). Flexx

Tuoreempi GUI-ohjelmointi työkalu joka hyödyntää web-alustaa näkymän luontiin. Terminaali GUI kirjastot

Terminaali-käyttöliittymien ajattomuuteen tykästyneille on tarjolla useita mukavia kirjastoja. Urwid http://urwid.org/examples/index.html Libcotd https://bitbucket.org/libtcod/libtcod Grafiikka/Roguelike -kirjasto

Web Scraping

Screippaus, eli tiedon kaivaminen kolmannen osapuolen web-sivuilta onnistuu mm. seuraavilla työkaluilla:

Perus HTML sivut https://github.com/lorien/grab http://www.crummy.com/software/BeautifulSoup/ lxml Hankalemmat Javascript-höystetyt sivut https://pypi.python.org/pypi/selenium Pidemmälle automoitu screippaus (web spiderit) Scrapy http://scrapy.org/ https://github.com/ssteuteville/scrapyz

Screippaamisen opetteluun löytyy luku python-guidessa, sekä data journalisteille suunnattu laajempi tutoriaali https://github.com/compjour/search-script-scrape.

IDE:t ja editorilaajennokset

Pythonia on täysin mahdollista (jopa miellyttävää) kirjoittaa millä tahansa tekstieditorilla ja ajaa komentoriviltä. Homma voi olla kuitenkin hieman miellyttävämpää lisäämällä avustimia koodia kirjoittaessa, varsinkin isojen projektien kanssa.

Pycharm IDE on eräs hyvä vaihtoehto aloittelijalle joka kaipaa IDE-toiminnallisuuksia koodia kirjoittaessaan. Se on ilmainen käyttää avoimissa projekteissa, ja myös ilmeisesti vähemmän avoimissa.

Enemmän DIY-henkisille saatavilla Jedi documentation lookup / autocomplete -paketti Pythonille.

Emacs anaconda- tai elpy-mode Jedi-vim Sublime Text

Myös MS Visual Studioon saatavilla hyvä Python IDE-laajennos kyseiseen työkaluun tykästyneille.

Debuggeri

Koodin suorituksen pysäyttäminen auttaa monesti ymmärtämään kirjastojen ja oman koodin toimintaa. Opastus Pythonin mukana tulevan PDB debuggerin käyttöön: http://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/

Kun debuggerin peruskäyttö on hallussa, kannattaa vaihtaa perus pdb:n tilalle ipdb joka tarjoaa paremman autocompleten ja muuta kivaa. Pudb on raskaampi debuggeri josta voi olla iloa varsinkin vieraan koodi-spagetin selvittelyyn. Kirjastojen toimintaa selvittäessä kannattaa välillä dokumentaation lisäksi kurkata konepellin alle.

12.2 HTML5 / CSS / Javascript

Mozillan web-ohjelmointi kurssilta on mahdollista opiskella webin alkeita https://developer.mozilla.org/en-US/Learn.

Käyttöliittymän visuaalisuus

Kaikille web-alustaa hyödyntäville yhteisinä työkaluina suosittelemme CSS-kirjastoja Bootstrap tai SkeletonJS jotka tarjoavat runsaan valikoiman valmiita näkymäkomponentteja laiskan web-kehittäjän työkaluarsenaalin jatkeeksi. Käyttöliittymiä höystetään myös monesti iconografisesti Bootstrap Glyphicon-paketin tai Font Awesomen avulla, jotka tarjoavat suuret määrät valmiita vektorimuotoisia ikoneita lähes joka tarpeeseen.

Frontend frameworkit

Web-selaimelle tehtävä templatointi (generoitava ja näytettävä html) on mahdollista (ja jatkuvasti yleisempää) tehdä palvelimen sijaan päätelaitteessa, eli käyttäjän web-selaimessa. Tähän tehtävään on tarjolla frontend-frameworkkeja mm. ReactJS, Meteor, AngularJS, + miljoona muuta.

Javascript-maailma on kehitystahdiltaan ja mentaliteetiltaan senverran villiä, että voi olla selkeämpää käyttää "tylsempää" ja vakiintuneempaa alustaa, kuten aiemmin mainitut Python web-frameworkit. Tarpeen mukaan, varsinkin runsasta interaktiota ja laite-rajapintoja (2D/3D-grafiikka, ääni, kamera, kallistus, websoketit, värinä …) käyttävat sovellukset kuitenkin tehdään yleensä nimenomaan näillä työkaluilla.

Internet of Things

Kurssilla on perinteisesti toteutettu desktop- ja web-sovelluksia, mutta mikään ei estä liittämään sovellukseen mukaan esim. paria moottoria, kameraa, kaijutinta, relettä, jne. Interaktio fyysisen maailman kanssa onnistuu vaivattomasti mm. seuraavilla prototyyppaus-alustoilla:

Versionhallinta ja komentorivin käyttö

Versionhallinnan käyttö on nykypäivää ja ohjelmoijan arkea. Komentorivisovellusten käyttöön ja Unix-käyttöön tottumattomalle oppiminen voi kuitenkin käydä tuskattuttavaksi. Tässä tapauksessa on parempi opiskella/kerrata tovi käyttöä. Hyvänä lähteenä The Art of Command Line.

Git versionhallinnan alkeista kehittyneeseen käyttöön etenevä Git-book on lukemattomien koodareiden digitaalisesta kirjahyllystä löytyvä perusteos. Suosittelemme tutustumaan.

Käyttöjärjestelmävalinnastaan määrätietoisille Window-käyttäjille on tarjolla miellyttäväksi kustomoitu Babun -komentorivi (git tulee mukana). Vähemmän määrätietoisille suositellaan esim. Ubuntu tai Linux Mint distribuution asennusta ;-).

Muita linkkejä:

Deployaaminen virtuaalipalvelimella tai PaaS-palvelussa

Kurssilla ei vaadita sovelluksen julkaisemista julkisessa internetissä, mutta onhan se nyt mukavaa kun voi esitellä kavereille ja sukulaisille itse tehtyä web-sovellusta suoraan vaikkapa kännykän web-selaimella.

Nykyisin pienessä käytössä olevan web-sovelluksen saa pyörimään käytännössä ilmaiseksi, ja lisäksi Platform as a Service -tyyppisten palveluiden (Heroku, Appengine, Azure) kautta sovellusta webbiin julkaistaessa ei tarvitse edes taistella ja näprätä palvelimen asentelun ja konffaamisen kanssa.

Halpoja virtuaalipalvelimia tarjoaa mm. DigitalOcean (ks. opiskelija-kuponki alempana), sekä yksi mini-sovellusten ilmaista PaaS hostausta tarjoava palvelu on Heroku. NSA:n vakoilusta ärsyyntyneet joutuvat kuitenkin valikoimaan palveluntarjoajansa tarkemmin.

Opiskelija-etuja työkaluihin

Github Student Developer pack https://education.github.com/pack

Opiskelijoille ilmaisjakelussa muunmuassa:

Vaatii yliopisto-sähköpostiosoitteen ja opiskelijakortin kuvan lähetyksen tarjouksen aktivointia vastaan.

Oheislukemistoa