Co by měl umět dobrý vývojář
Petr Adámek Home Credit International a.s.
Co je vlastně vývoj software? Vývoj software je – Kreativní činnost – Umění – Věda – Řemeslo Vývoj software je průmyslová disciplína prováděná týmy vysoce kvalifikovaných odborníků – softwarových inženýrů.
2
Čím jsou charakteristické dnešní projekty? Současné projekty jsou často – Složité a rozsáhlé – Vyvíjené v týmu (týmů bývá i více) – Propojeny s jinými systémy – Používají řadu technologií a nástrojů – Je nutná zpětná vazba a komunikace s analytiky nebo se zákazníkem – Někdy se používají agilní metodiky Klíčem k dobrému software je dobrý tým kvalitních lidí – analytiků, designérů, architektů, vývojářů, databázových specialistů, testerů, projektového manažera, tým leaderů, release manažerů, produkt manažerů, zástupců zákazníka, apod.
3
Co je důležité u vývojáře ►
Technické znalosti a zkušenosti – Programovací jazyky a platformy – Knihovny a technologie – Nástroje – Doporučené postupy – Obecné koncepty a principy
►
Sociální a tzv. měkké dovednosti – Spolehlivost (dodržet termín a kvalitu) – Spolupráce a práce v týmu – Komunikace a jednání s lidmi (zákazníkem, kolegy, nadřízenými, …) – Umět prodat výsledky své práce
►
Motivace 4
Spolehlivost Schopnost dodržet termín, zadání a kvalitu je velmi důležitá – Závisí na tom úspěch celého týmu – Závisí na tom osobní úspěch vývojáře a jeho další motivace (pocit z dobře odvedené práce, odměny, spokojenost nadřízeného) Jak na to? – Mít zvládnuté sebeřízení a time management – Disciplína (pozor na homeoffice) – Trvat na SMART zadání – Neslibovat nesplnitelné, krotit své nadšení. – Provádět reálné odhady, nepřeceňovat se, ani se nepodceňovat – Pokud je problém, včas ho řešit nebo o něm informovat kolegy v týmu a nadřízené – Zaměřit se na důležité věci, neplýtvat časem a úsilím na věcech nedůležitých, pozor na perfekcionismus. 5
Komunikace a jednání s lidmi Jednání s lidmi – Komunikace s kolegy v rámci týmu i mimo tým – Komunikace s nadřízenými – Komunikace se zákazníkem – Komunikace s partnerskými organizacemi – Komunikace s dodavateli integrovaných systémů U některých špičkových IT odborníků nepatří schopnost jednání s lidmi k jejich silným stránkám.
6
Spolupráce a práce v týmu Tým – Tým je skupina lidí pracujících společně na dosažení společného cíle – Složený z různých lidí s různými vlastnostmi – Přínosem pro tým může být i člověk s určitou slabinou, pokud je to kompenzováno jinou přidanou hodnotou. Jak na to – Vyzkoušet si práci v týmu (školní projekt, projekt s kamarády, apod.) – Zmapovat své znalosti, schopnosti a dovednosti. – Identifikovat své silné a slabé stránky – Zamyslet se nad tím, jaká role a pozice v týmu by byla pro vás nejvhodnější
7
Umění prodat výsledky své práce Marketing je důležitý – U přijímacích a hodnotících pohovorů, při jednání se zákazníkem, s nadřízeným, apod. – Dobrá práce by se měla prodat sama, ale často je potřeba tomu trochu pomoci – Přehnaná skromnost není na místě Jak na to? – Především je důležitém mít co prodat – Rozvíjet své prezentační dovednosti – Trénovat (obhajoby projektů a závěrečných prací) – Důležitá je dobrá příprava – Nezveličovat svoji práci ani si nepřivlastňovat výsledky jiných – Prokázat své znalosti (např. certifikace, školení, apod.)
8
Jazyky, nástroje, technologie Vývojové technologie a frameworky – Webové technologie (JSP, HTML, CSS, AJAX, JQuery, GWT) – Webové frameworky (Struts, JSF, Stripes, Spring MVC) – Business logika (Spring, EJB) – Persistence dat, ORM (JPA, Hibernate, Spring JDBC, iBatis) – Integrace, webové služby (JMS, JAX-WS, RCP, IIOP) Další technologie – Middleware – Aplikační servery (Tomcat, Jetty, JBoss, Glassfish, Websphere AS, Weblogic) – Business Inteligence (Datové sklady, reporting, OLAP, apod.)
Toto je jenom velmi stručný přehled zaměřený na platformu Java EE. 9
Nástroje Správa verzí (SCM) – Klasické (Subversion) – Distribuované (Git, Mercurial) Sestavování projektů – Jednoduché skriptovací nástroje (Make, Ant, bash) – Komplexní systémy pro správu projektu (Maven) Správa úkolů a požadavků (Issue Tracking) – Obecná správa úkolů (různá proprietární řešení) – Groupware (MS Exchange, Lotus Notes, Google Apps) – Specializované systémy (Jira, Bugzilla)
10
Nástroje Systémy pro spolupráci a sdílení znalostí – Tvorba dokumentů (MS Office, Open Office, Google Docs) – Sdílení dokumentů (Google Docs, sdílený filesystém) – Blogy a diskuse – Wiki (Confluence, MediaWiki) – Podnikové portály (Liferay, Websphere Portál, Sharepoint) – Systémy pro revize kódu Vývojové nástroje – IDE (NetBeans IDE, Eclipse, IntelliJ Idea) – Debuggery – Profilery
Je důležité dobře ovládat své nástroje, věnovat svůj čas řešení problému a neztrácet jej psaním kódu a ovládáním nástroje. 11
Doporučené postupy Jedná se zejména – Konvence – Doporučené postupy (best practices) – Návrhové vzory a antivzory (design patterns and antipatterns) – Testování (jednotkové a integrační) Znalost a uplatňování doporučených postupů je důležitá – Udržovatelný kód (opravy, úpravy, údržba, optimalizace, refaktoring, doplňování nové funkcionality, apod.) – Sdílení kódu a spolupráce v rámci týmu
12
Obecné principy a koncepty Jedná se o – Architektury počítačů – Architektura a principy operačního systému – Principy a vlastnosti počítačových sítí – Principy a koncepty, na nichž jsou založeny používané technologie a nástroje – Znalost běžných algoritmů, matematiky a teoretické informatiky – Schopnost řešit abstraktní problémy – Metodiky (např. agilní) Znalost principů a konceptů je velmi důležitá; jsou situace, kdy je metoda pokus – omyl efektivním nástrojem, ale neměla by být hlavní metodou vývojáře.
13
Závěr Pro dobrého vývojáře jsou důležité technické znalosti i sociální a komunikační dovednosti. Je dobré si včas zmapovat své schopnosti a dovednosti a naplánovat si své další vzdělávání, kariéru a cílovou pozici.
14
Otázky
? 15