Co by měl umět dobrý vývojář Petr Adámek Home Credit International a.s.
2 Vývoj software je Kreativní činnost Umění Věda Řemeslo Co je vlastně vývoj software? Vývoj software je průmyslová disciplína prováděná týmy vysoce kvalifikovaných odborníků softwarových inženýrů.
3 Čí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.
4 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
5 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.
6 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.
7 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ší
8 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.)
9 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.
10 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)
11 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.
12 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
13 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.
14 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.
15 Otázky?