Programistę .NET z doświadczeniem – zatrudnię…
Jeśli szukasz developera do swojego zespołu programistów to z pewnością nie jesteś zachwycony faktem uczestniczenia w kolejnych rozmowach kwalifikacyjnych z potencjalnymi kandydatami. Dlaczego NIE? Odpowiedź jest prosta – większość otrzymanych aplikacji sprowadzi się do stwierdzeń:
„Niestety nie wiem – ale z chęcią się nauczę, szybko się uczę, może macie Państwo jakieś szkolenia z tej dziedziny?”
„Coś na ten temat na zajęciach było, ale niestety teraz nie mogę sobie przypomnieć”
„Wie Pan – znam dobrze C# ale nie byłem administratorem baz danych, więc SQLa to nie bardzo…”
„VBA??? Proszę Pana! nie zamierzam pisać w tym języku, to prehistoria. Ja tylko C#. VBA do niczego się nie przydaje”
„Metoda Dispose – hmm… nie używałem, ale wydaje mi się, że służy do zamykania pliku”
Ciężko – prawda? Niestety tak wygląda rzeczywistość. Znalezienie odpowiedniego kandydata to nie lada wyzwanie – szczególnie w mniejszych miejscowościach. Z przeprowadzonych rozmów z kandydatami, moim zdaniem wynikają dwa główne problemy:
- Brak logicznego myślenia, który łączy się z uczeniem programowania na pamięć. Programowanie jest praktycznie takie same, bez względu na język programowania, zatem myślący developer powinien z łatwością konwertować kod z jednego języka na inny. Często spotykam się z sytuacją wielkiej niechęci programowania w „nowym” lub „starym” języku przez programistów wybranego jedynie „słusznego” języka. Trzeba pamiętać, iż w wielu projektach zachodzi potrzeba utworzenia komponentu napisanego w innej technologii, który wcale nie musi być z gałęzi .NET.
- Bardzo wysokie oczekiwania finansowe stawiane przez mało doświadczonych (czasami ledwo po studiach) kandydatów. Fakt bycia na zagranicznych praktykach, biegła znajomość obcego języka wcale nie determinuje wysokiej gratyfikacji. Ludzie! – najpierw pokażcie co potraficie zanim zawołacie 6 lub więcej * średnia krajowa.
OK, zatem co wg. mnie taki programista powinien umieć?
Oczywiście zależy co ma programować. Na wielu portalach z ofertami pracy można znaleźć oferty „na omnibusa”: znajomość C#, C++, VB, ASP.NET, SQL, MDX, Java, Python, etc. – najlepiej wszystkich języków i technik programowania. Jest to sytuacja, która skutkuje napływem całej masy aplikacji kandydatów z których bardzo ciężko będzie wyłowić tego jedynego. Doradzając wielu firmą spotykam się ze stwierdzeniem „Potrzebuję osoby do projektu X, ale dobrze by było aby potem developer zajął się tym, i tym, i tym…”. Właśnie takie podejście skutkuje publikacją błędnie sformułowanych ofert pracy.
Spróbujmy ustalić czego moglibyśmy wymagać od kandydata, który będzie zajmował się programowaniem aplikacji okienkowych lub jak ktoś woli „grubego klienta” w środowisku .NET.
Narzędzia:
- MS Visual Studio. Poza wiedzą na temat tworzenia projektu w wybranym języku oraz korzystania z VS jako świetnego edytora kodu źródłowego oraz debuggera dodałbym jeszcze umiejętność korzystania z pre oraz post build-ów, ustawień brekpoint-ów (zwłaszcza warunkowych) oraz korzystanie z wbudowanych snippets-ów.
- SQL Server Management Studio. Oczekiwałbym od kandydata aby wiedział jak założyć, zbackupować, przwrócić oraz podpiąć bazę danych oraz praktycznej wiedzy na temat wykorzystania narzędzia do generowania skryptów i zapytań w języku SQL.
- Inne mini narzędzia związane z grafiką (docięcie, zmiana rozdzielczości plików graficznych) i jeszcze jeśli kandydat opowie nam o innych przydatnych narzędziach to plus dla niego.
Język, technologia:
- C# – w wersji minimum 3.0. Kandydat powinien biegle czytać kod źródłowy – ze zrozumieniem oraz powinien umieć go modyfikować tak aby „nie popsuć” tego co już działa. Programista powinien biegle posługiwać się takimi elementami języka jak: OOP, zdarzenia, delegacje, lambda expressions, etc.
- WPF. Obecnie większość nowych projektów startuje właśnie na bazie WPFa. Zatem znajomość składni XAMLa oraz filozofii budowania GUI aplikacji w tej technologii była by dość kluczowym czynnikiem przy wyborze kandydata. Zwrócił bym uwagę na umiejętność wykorzystania styli, poprawne wiązanie danych oraz wiedzę z zakresu lokalizacji aplikacji.
- T-SQL. Poza podstawowymi operacjami takimi jak: SELECT, INSERT, UPDATE, DELETE oczekiwałbym jeszcze wiedzy z zakresu tworzenie procedur wbudowanych, funkcji tabelarycznych, oraz wyzwalaczy. Jeśli kandydat wie cokolwiek na temat „planu wykonania” lub Profillera – duży plus dla niego.
Wzorce, wzorce, wzorce….
Do całego koszyka umiejętności należy dodać znajomość podstawowych wzorców. Nie możemy wymagać znajomości wszystkich z serii GoF-a (Gang of Four), jednakże kandydat bez wiedzy o minimum singleton-ie oraz fabryce może nam narobić więcej szkód w projekcie niż korzyści. Od kandydata mającego programować z wykorzystaniem WPFa należy oczekiwać biegłości w posługiwaniu się również wzorcem MVVM, który pozwoli zapanować nad rozrastaniem się kodu przechodzącego w typowe spaghetti oraz powinno ułatwić zrozumienie kodu przez innych programistów.
Znajomość innych elementów na plus:
- .NET ściśle wiąże się z refleksją, zatem wiedza na temat aktywatora oraz badania typu obiektu jest bardzo pomocna w wielu sytuacjach
- Posługiwanie się wyrażeniami regularnymi – nieodzowna pomoc przy prasowaniu i walidacji danych
- Umiejętność posługiwania się metodami asynchronicznymi oraz wątkami w podstawowym zakresie. Należy wiedzieć jak wątek poboczny może współpracować z interfejsem użytkownika w celu unikania „martwych aplikacji”.
- Entity Framework – jeden z wielu ORM-ów, który pozwala na dużo szybsze tworzenie projektów w technologii .NET.
- PRISM – oczekiwanie zbyt wygórowanie, jednakże jeśli ma to być osoba, która będzie odpowiedzialna za architekturę aplikacji to uważam, iż jest to wiedza niezbędna.
A co z biegłym j. angielskim? – jeśli developer nie będzie pracował w środowisku międzynarodowym, to uważam, iż stawienie takiego kryterium w ofercie pracy jest powodem braku świetnych kandydatur od osób, które fenomenalnie programują ale mają kłopoty z językiem obcym.
Pamiętajmy, iż odpowiedni wybór programisty jest w wielu projektach jest kluczem do sukcesu, zatem nie śpieszmy się z doborem developera, nie starajmy się na siłę zatrudnić dwóch osób zamiast jednego (co wprowadzi kolejny kłopot w zarządzaniu) oraz starajmy się dawać szansę młodym, ambitnym adeptom polskich studiów informatycznych.
Tomasz Toboła
[email protected]