12. april 2006

Agilni projekti - osebna varnost

Osebna varnost pomeni zmožnost izražanja svojih pogledov brez strahu pred kakršnimikoli povračilnimi ukrepi.

Projektno delo v skupini običajno živi v hierarhičnem okolju sodelavcev, vodij skupin, menedžerjev, naročnikov, strank in še koga. Varnost pomeni, da smo sposobni v oči povedati menedžerju, da je njegov rok za predviden dan izida daleč preoptimističen.

Pomeni to, da smo sposobni povedati sodelavcu, da nas moti njegova smrdljiva srajca. Pomeni to, da lahko sodelavcu brez strahu povemo, da njegov načrt ali izvedba nista za nikamor. Brez takih odprtih pogovorov škodujemo celotni ekipi.

Ali ste že imeli sodelavca ali sodelavko, ki pri jedi sendviča tako cmoka, da ga (jo) je slišati v sosednji volilni okraj? Pa ste mu (ji) kaj rekli? Ali se je sploh vredno za nekaj minut trpljenja dnevno izpostavljati in potem poslušati ego obrambne protinapade? Kakor kdo, kakor kje, kakor za kaj. Bolj moteči so hrup ali celo konstantno tresenje mize, ker ima sodelavec "v riti mravljince". Verjetno ima vsakdo od vas še bolj pikantne primere!

Osebna varnost je pot do izgradnje timskega zaupanja. Zaupanje pomeni, da nekomu damo moč nad nami in pri tem tvegamo, da nas rani. Nekateri smo po naravi bolj odprti kot drugi, ravno tako kot nekateri gledamo na svet bolj optimistično kot drugi. Nezaupanje v delovni skupni povzroča celo vrsto negativnih posledic - prikrivanje ali celo laganje, slabše opravljeno delo zaradi pomanjkanja informacij, izdajanje poslovnih informacij in še kaj. Za povečanje zaupanja se moramo odpreti, to pomeni priznavati svoje šibkosti, a pri tem vedeti, da nam drugi zaradi tega ne bodo škodovali. Priznanje, da česa ne znamo, da smo kaj naredili narobe, ali da česa ne bomo zmogli je pogoj. Takoj za tem pa mora biti na voljo pomoč ostalih v skupini - neavtoritativna in dobrovoljna!

Živali se ob nesporazumih pogrizejo. Koliko krvavi končujemo izmenjavo mnenj, je tudi stopnja zrelosti posameznikov v skupini. Mogoče sam boj ni tako sporen, kot pa njegov zaključek. Bolj pomemben se mi zdi zaključek - ali lahko končamo vedro, prijateljsko, inteligentno!

Ali ste imeli kdaj sodelavca, ki ni poslušal, ali če rečem, ni poslušal v dobri volji? Tak človek je "natural party braker".

Druga plat komunikacije pa je prevelika vljudnost - kar z vsem se strinjamo, samo da ne bi "škodili" sogovorniku. Zombi ekipa.

3. april 2006

Jakarta Commons

Računalništvo in njena poddomena - programiranje - je, sedaj že lahko rečemo, zrela veda. Z leti se izoblikujejo določeni vzorci. Načrtovalski vzorci so rešitev nekega ponavljajočega problema pri razvoju programske opreme. Takega vzorca ne moremo direktno prenesti v kodo, lahko rečemo celo, da so agnostični na programski jezik. Dve knjigi, ki jih imam na spisku na temo objektno orientiranih vzorcev sta: Design Patterns Explained: A New Perspective on Object-Oriented Design in Head First Design Patterns.

Če problem še nadalje drobimo, pridemo do faze realizacije, ko moramo za določen podproblem napisati kodo. Ker si hočemo prihraniti čas, je najbolje, da si pogledamo, če je kdo pred nami že rešil naš problem in nam tudi dovoli uporabiti znanje, ki je običajno v obliki programskih knjižnic ali ogrodij. Najbolj znano "zatočišče" za programerje v jeziku Java je jakarta commons.

Cilj odprokodnega projekta jakarta commons je pod eno streho združiti Java komponente, ki so na voljo pod Apache 2.0 licenco. Namen je združitev znanja in preprečevanje redundantnega dela. Komponente so narejene tako, da so minimalno odvisne od drugih zaradi lažjega nameščanja. Sledi se tudi stabilnosti programskih vmesnikov (API), tako da so nadgradnje manj boleče.

Prej omenjene komponente so jar datoteke, ki jih samo damo na razpolago Java virtualnemu stroju, ki pa imajo priložene tudi izvorne datoteke, dokumentacijo in običajno Ant build skript. To pomeni, da lahko sami po potrebi kakšno funkcionalnost tudi dodamo, če jo potrebujemo. Kar je še bolje, v projekt lahko tudi prispevamo naše znanje in tako drugim olajšamo razvoj.

Po funkcionalnosti se med seboj zelo razlikujejo saj pokrivajo zelo široko problemsko področje. 32 komponent je produkcijske kvalitete in še nadaljnih 10 je v tako imenovanem peskovniku. Naj jih nekaj omenim samo na kratko - mogoče jih bom podrobneje predstavil vsako posebej v prihodnjih zapisih v tem blogu.

Collections Nadgradi funkcionalnost java.util.Collection.
Configuration Splošen dostop do konfiguracijskih virov.
DBCP DataBase Connection Pool
HttpClient Nadgradi java.net z veliko nove funkcionalnosti.
Lang Veliko uporabnih metod, nekakšna splošna razširitev jezika.

Gotovo se splača pregledati metode posameznega API-ja, saj nam uporaba že izdelanih rešitev skrajša število vrstic naše kode, vsi pa vemo, da to pomeni manjšo možnost napake in lažje vzdrževanje produkta. Še kako pomebno je, da bo nekomu za
nami, ki bo moral vzrževati kodo, znan uporabljen API, ki ga je mogoče že uporabljal na prejšnji firmi. V težavah se vedno lahko zatečemo na liste za razvojnike ali uporabnike, kjer nam uporabniki ali avtorji posamezne komponente odgovorijo na naše vprašanje. V veliki skupnosti zagotovo lažje rešimo problem.