Rozwój osobisty - jak się nie dać zwariować?

2

Witam,

Potrzebuje Waszej rady odnośnie organizacji rozwoju osobistego. Jak do tego podchodzicie?

Przez dłuższy czas pracowałem w małej firmie programistycznej gdzie dostęp do nowych technologii i tematyka były bardzo ograniczone. Mocno mi się to przejadło i postanowiłem zmienić pracę. Zatrudniłem się w dużej korporacji mając nadzieję, że dołącze do większego projektu i będę uczył się od lepszych. Tak się nie stało i trafiłem na bardzo samodzielne stanowisko, więc rozwój technologiczno-zawodowy jest całkowicie w moich rękach. Decyzji nie żałuję bo mam trochę swobody aby uzupełnić braki i projekty są ciekawe. Doznałem jednak małego szoku jeśli chodzi o ofertę technologiczną i możliwości rozwoju. Swoje wątpliwości przedstawię w punktach i prosiłbym żebyście się do nich odnieśli. Dodam tylko jeszcze, że kierunek ogólny mam określony i raczej będę chiał się jego trzymać - programowanie C#.NET (bardziej backend niż frontend) i bazy danych MS SQL

Kanon programisty - czyli co powinie znać progrmaista .NET w dzisiejszych czasach

Trochę się "zapuściłem" w poprzedniej pracy gdzie podejście do programowania było mocno przestarzałe i patrząc po wymaganiach pracodawców trochę wiedzy mi brakuje. Co uważacie za kanon umiejętności programisty .NET czyli takie totalne must-have. Np:

  1. Platforma.NET i język C#
  2. Unit Testing
  3. Znajmość platform desktopowych i webowych (przynajmniej po jednej n. WinForms + ASP.NET MVC)
  4. Podstawowa zajomość baz danych i programowania T-SQL

Uczenie się z wyprzedzeniem czy - on demand?

W poprzedniej firmie używaliśmy głównie .NET 20 i robiliśmy aplikacje desktopowo-serwisowe więc mająć wzgląd na przyszłość sam starałem uczyć się nowych rzeczy typu ASP.NET MVC, WCF itp klepiąc sobie w domu. Nie realizowałem jednak żadnych projektów w tych technologiach i szybko zapomniałem "jak to się robiło" czy jest więc sens uczyć się z wyprzedzeniem? Z drugiej strony jest to spory problem w trakcie zmiany pracy bo wtedy oczywiście konieczna jest znajomość jak najnowszych technologii. Drugie podejście to uczyć się technologii, design patternów dopiero jak są potrzebne a z wyprzedzeniem zdobywać wiedzę o ich istnieniu i możliwościacj zastosowania.Jak wy do tego podchodzicie?

Jak być na czasie i nie zostać w tyle?

Obecnie jest tak wiele źródeł wiedzy, że ciężko się na coś zdecydować. Przez jakiś czas czytałem kanał RSS dotnetomaniaka i było tam całkiem dużo przydatnje wiedzy. Skąd wy czerpiecie wiedzę na temat nowinek technicznych, technologi, nowych design paternów i najważniejsze jak często wykorzystujecie to w codziennej pracy?

Język

Mówię całkiem dobrze po angielsku (kiedyś zrobiłem sobie certyfikacik FCE trochę siedziałem za granicą itp.) Pracuje teraz w środowisku mocno międzynarodowym i widzę spore braki sczególnie w słownictwie technicznym. Korzystacie może z jakiś kursów skierowanych szczególnie dla informatyków czy uczycie się we własnym zakresie? Dodam, że myślę w niedalekiej przyszłości o pracy zdalnej dla za granicą więc język to punkt obowiazkowy.

Książki - jeszcze trochę wiedzy ogólnej przed zaśnięciem :)

Trafiłem kiedyś na spis lektur obowiązkowych dla programisty i powoli je sobie czytam http://webhosting.pl/13_.ksiazek.hakerow.i.nie.tylko.ktore.powinien.przeczytac.kazdy.programista Czytacie takie pozycje? Jeśli tak czy od deski do deski czy czytacie wybrane tematy w razie potrzeby?

Warsztat pracy - czyli znajomość Visual Studio i dodatkowych narzędzi

Jak rozwijacie swój warsztat pracy? Oglądacie prezentację typu tips and tricks podglądacie jak pracują inni? Z jakich dodatkowych narzędzi korzystacie Resharper, nDepend itp. i czy znajdujecie w codzennej pracy czas na zapoznawanie się z możliwościami tych narzędzi?

Certyfikacja?

Odwieczne pytanie... ale pomińmy wątek podejścia pracodawców. Myślałem o ścieżce MCSE http://www.microsoft.com/learning/en-gb/mcse-sql-data-platform.aspx. Dlaczego? Trochę brak mi motywacji i samozaparcia żeby uczyć się samemu dla siebie byłby to wieć dla mnie dodatkowy motywator i systematyzacja wysiłków edukacyjnych. Duzym minusem jest jednak spora dawka wiedzy typowo administracyjnej do przyswojenia. Co wy myślicie o certyfikacji?

**I na koniec priorytety czyli jak nie dać się zwariować? **

Wiadomo, ze na wszystkie powyższe punkty cieżko znaleźć czas jak więc ustalacie priorytety? Co jest dla Was najważniejsze?

Trochę sie rozpisałem ale mam nadzieję, że znajdziecie chwilę aby to przeczytać i będzie to dobry temat do dyskusji.

Pozdrawiam

4

Nie realizowałem jednak żadnych projektów w tych technologiach i szybko zapomniałem "jak to się robiło" czy jest więc sens uczyć się z wyprzedzeniem?

IMHO sens jest, aczkolwiek niewielki i wątpliwy ;) Tzn. jeżeli w krótkiej przyszłości akurat trafi ci się projekt w tym, czego się uczyłeś, to wtedy nie był to czas zmarnowany. W przeciwnym wypadku - organ nieużywany, zanika ;) Dlatego właśnie nie jestem fanką uczenia się z książek, wolę praktykę + dokumentację.

Skąd wy czerpiecie wiedzę na temat nowinek technicznych, technologi, nowych design paternów

4programmers.net? :D
A na serio, to głównie po znajomych wieść się niesie ;) Koledzy często wrzucają ciekawe linki na fejsa, większe geeky potrafią na imprezie się podjarać jakąś nową technologią, czasem w pracy przy kawie ktoś o czymś wspomni...

i najważniejsze jak często wykorzystujecie to w codziennej pracy?

A. To jest trudny temat.
No bo to jest tak. Mamy nowy rok, dobry czas na postanowienia, prawda? No to sobie postanawiam - kurde, w tym roku to już naprawdę zastosuję unit testy w projekcie! Przecież wiem niby o co kaman, pierdyliard prezentacji już o tym widziałam, widziałam przykłady jak w praktyce to robić, sama jakieś tam niby robiłam. Wszyscy wiedzą, że testy są dobre, ja też wiem, że testy są dobre, czemu ciągle moje projekty nie mają testów?

  1. VBA - przekleństwo tego świata, język stworzony jako dowcip na programistach. Mówię wam, twórcy tego języka teraz siedzą i się śmieją, przypominając sobie pokręcone założenia, które wymyślili, zapewne będąc na haju. Możemy udawać, że to są testy jednostkowe, ale tak naprawdę to zbudujemy sobie conajwyżej drabinkę ifów wołąjących Application.Run z różnymi paramterami, opatrzoną Debug.Printami. Do tego język jest pseudoobiektowy.
    Z pewnością da się tu zastosować testy jednostkowe, jednakże dla osoby, która właśnie uczy się robienia tego poprawnie, jest to bardzo nieprzyjazne środowisko.

  2. Webservice w C#. Fajnie, Visual Studio jako IDE daje dużo większe możliwości niż fajdolony Word. Unit testy tworzy się dwoma kliknięciami, więc pozostaje mi tylko dobrze przemyśleć strukturę tego wszystkiego. Projekt dopiero się zaczyna, więc nie powinno być z tym problemu, prawda? Nieprawda. Po przemyśleniu całej misternej, rozbudowanej struktury, po rozrysowaniu diagramu klas, po napisaniu do nich odpowiednich testów, po stworzeniu już niemal działającego programu - słowem, po 3 miesiącach od startu projektu - okazuje się, że... analiza jest w całości do niczego. Projekt był oparty o założenia wynikające z analizy - z dnia na dzień zostaje bez założeń. Nie wiadomo co ma być na wejściu, nie wiadomo co ma być na wyjściu, wszyscy zdziwieni, analityk zmienia pracę i go to nie obchodzi, analityk wchodzący na jego miejsce w totalnym szoku i bez zrozumienia dla poprzedniej analizy. Góra oburzona, bo przecież miało być już zaraz skończone, a my tu właśnie mówimy, że od teraz to chyba jeszcze pół roku... A ja? Ja z rozpiździonym projektem, próbująca łatać to wszystko na szybko, bo przecież już "prawie działało", no i przecież nie będziemy teraz pisać od zera... Do pierwotnie całkiem zgrabnego projektu, dobudowywane są coraz to kolejne piętra, tylko że te piętra pasują do projektu jak wół do karety... Efekt? No jakoś to działa. Proszę, nie patrzcie w kod -_-' Testy jednostkowe w pewnym momencie po prostu usunęłam, bo przestały mieć związek z rzeczywistością.

  3. COM w C#. Dobra, teraz to już naprawdę, jak bum cyk cyk! Będą testy jednostkowe! No, zrobiłam. Na szczęście mały projekcik, założenia proste i nie zmieniające się znienacka, także nawet faktycznie popisałam sobie w TDD. Pokrycie testami 100%, wszystko cacy, wspaniałe uczucie. Commit i poczucie dobrze spełnionego obowiązku.
    Następnego dnia siadam sobie do komputera, robię update - patrzę i dopada mnie rezygnacja. No tak, zapomniałam, że pozostałe osoby w zespole może akurat nie są zainteresowane rozwojem osobistym.

Powyższa historia nie jest prawdziwa, w szczególności osoby tu przedstawione nie istnieją. Problemy jednak są prawdziwe. Bez jakiegoś "mentora", bardzo ciężko o prawidłowy samorozwój. Bo co mi po tym, że napisałam testy jednostkowe, skoro nie wiem, czy zrobiłam to dobrze? Jeśli nie ma kto mnie sprawdzić, a członkowie zespołu nie kontrolują się wzajemnie, to co ja właściwie robię? Błądzę po omacku. Do tego dorzuć problemy życia codziennego - zadania do zrobienia na wczoraj, użytkownicy zgłaszający błąd jako pilny, inni programiści, chcący żebym tylko sprawdziła jedną rzecz, spotkania, maile... Gdzie tu wcisnąć czas na naukę czegoś nowego? :)

Do tego 90% mojej pracy to grzebanie w kodzie już napisanym, często starym i kiepskiej jakości lub w zapomnianych i przeklętych technologiach. Czyli zaprzeczenie poznawania nowych technologii ;)

Także ciężko jest z tym samorozwojem, przynajmniej mi to - w mojej ocenie - wychodzi tak sobie. Ale ten jeden projekcik w TDD w końcu faktycznie udało się napisać ;)

0

Dzięki za pokrzepiającą odpowiedź. Moja sytuacja jest bardzo podobna... projekty toczą się własnym życiem, ciężko znaleźć czas na samodoskonalenie i wprowadzanie innowacji a dobrych mentorów jakoś brak. Również jestem zwolennikiem uczenia się w praktyce i korzystania z dokumentacji. Tylko tu pojawia się problem. Ciężko przekonać polskich pracodawców że dobry programista z doświadczeniem poradzi sobie w każdej technologii a przeglądając ogłoszenia dla programistów .NET to 99% ASP.NET MVC + T-SQL, z którymi nie za wiele miałem do czynienia. Ciężko taki płotek przeskoczyć ....

1
RoyalBandit napisał(a):

Trochę się "zapuściłem" w poprzedniej pracy gdzie podejście do programowania było mocno przestarzałe i patrząc po wymaganiach pracodawców trochę wiedzy mi brakuje. Co uważacie za kanon umiejętności programisty .NET czyli takie totalne must-have. Np:

  1. Platforma.NET i język C#
  2. Unit Testing
  3. Znajmość platform desktopowych i webowych (przynajmniej po jednej n. WinForms + ASP.NET MVC)
  4. Podstawowa zajomość baz danych i programowania T-SQL

Ad 1. To baaaaaaaaaaaardzo szerokie pojęcie. Język na pewno, a z platformy na pewno trzeba znać podstawy, czyli:

  1. obsługa plików (zarówno klasa File, jak i strumienie);
  2. operacje na plikach, katalogach i ścieżkach (żeby nie łączyć nazw plików ręcznie, tylko użyć działającej podstawy.);
  3. klasa string, i nieznane przez niektórych metody Join oraz Format. Także klasa StringBuilder;
  4. operacje na XML;
  5. serializacja XML/binarna;
  6. LINQ
  7. Action, Func, Expression;
  8. refleksja;
  9. atrybuty;
  10. Thread, ThreadPool, Task i Parallel, ogólnie zagadnienia związane z wątkami i ich synchronizacją (jakie klasy do tego służą);
  11. działanie GC, interfejs IDisposable i jego prawidłowa implementacja;
  12. kolekcje generyczne;
  13. no i najważniejsze pytania na rozmowach kwalifikacyjnych - co to jest yield i jakie zastosowania (3) ma using. ;)

Ad. 2. Unit testing - wypada znać różne narzędzia, np. MSTest i NUnit.
Ad. 3. Jak ktoś chce być programistą web, to nie musi znać desktopa i odwrotnie.
Za to powinien znać specyficzne w danym środowisku "problemy". Np. InvokeRequired w WindowsForms, WeakReference w WPF, a w technologiach webowych trzeba co nieco wiedzieć o HTTP (jak ktoś nie odróżnia get i post, to raczej kariery w webie nie zrobi), znać przynajmniej podstawy HTML, CSS, JavaScript i jQuery oraz konfiguracji IIS.
Ad 4. Tworzenie zapytań, procedur, wyzwalaczy. Znajomość pojęcia transakcja, i poziomów izolacji transakcji, umiejętność zakładania indeksów, itp. Oraz mała, ale ważna rzecz - obsługa SQL profilera.

Co by tu jeszcze dodać?

  1. Znajomość ORM - dwa najpopularniejsze to Entity Framework i NHibernate;
  2. WCF/WebServices - bo one występują i w aplikacjach desktopowych i webowych;
  3. Obsługa systemów kontroli wersji (tu niestety króluje TFS :();
  4. Dependecy Injection i kontenery IoC, np. Ninject, Windsor albo Autofac;
  5. Jakieś biblioteki do logowania;
  6. Znajomość UML (niektóre firmy tego naprawdę używają ;));

Drugie podejście to uczyć się technologii, design patternów dopiero jak są potrzebne a z wyprzedzeniem zdobywać wiedzę o ich istnieniu i możliwościacj zastosowania.Jak wy do tego podchodzicie?

Najlepsza nauka jest przez praktykę, nic nie da przeczytanie książki, jeśli nie zrobi się praktycznego projektu w danej technologii.

Z jakich dodatkowych narzędzi korzystacie Resharper, nDepend itp. i czy znajdujecie w codzennej pracy czas na zapoznawanie się z możliwościami tych narzędzi?

Da się w ogóle pracować bez ReSharpera? ;) Nie no, może się da, ale poważne firmy nie pozwalają, aby pracownik tracił czas przez brak takiego dodatku.
A NDepend ssie.

Co wy myślicie o certyfikacji?

Może zrobię kiedyś jakiś certyfikat... jak mi ktoś za to zapłaci. :)

RoyalBandit napisał(a):

Ciężko przekonać polskich pracodawców że dobry programista z doświadczeniem poradzi sobie w każdej technologii a przeglądając ogłoszenia dla programistów .NET to 99% ASP.NET MVC + T-SQL, z którymi nie za wiele miałem do czynienia. Ciężko taki płotek przeskoczyć ....

Jeśli idziesz na rozmowę z panią z HR, i ona ma na swojej karteczce napisane, że MVC i WTF są wymagane, to bez ich znajomości nie przejdziesz. Ale jeśli pójdziesz na rozmowę z programistą lub przyszłym przełożonym, to będziesz miał szansę przekonać ich, że potrafisz programować, i że potrafisz się uczyć nowych technologii.
Mnie np. już dwa razy przyjęto do pracy na programistę WPF, mimo że nie znam tej technologii, co wielokrotnie podkreślałem na rozmowach. Ogólna umiejętność programowania to więcej niż jakaś konkretna technologia GUI.

0

Skąd wy czerpiecie wiedzę na temat nowinek technicznych, technologi, nowych design paternów

Co wy myślicie o certyfikacji?

Nie mam certyfikatów i znam mnóstwo odnoszących sukcesy programistów, którzy też nie mają. Wydaje mi się, że mogą się przydać na początku kariery jako zamiennik doświadczenia. Później to już nie ma znaczenia - liczy się doświadczenie.

Czytacie takie pozycje? Jeśli tak czy od deski do deski czy czytacie wybrane tematy w razie potrzeby?

Kilka z nich przeczytałem, wybrane tematy. Te książki mogą być czasem źródłem inspiracji, niektóre się całkiem lekko czyta (np. Czysty Kod jest IMHO b. dobry), natomiast nie powinno się ich traktować jako zbiór dogmatów, które każdy programista absolutnie musi przestrzegać. No i brakuje na tej liście bardzo ważnej klasycznej pozycji: D. Knuth "The art of computer programming". Lektura trudna, ale - dla programistów, którzy chcą się zajmować czymś bardziej zaawansowanym niż pisaniem aplikacji webowych - bardzo wskazana.

0

Jak rozwijacie swój warsztat pracy? Oglądacie prezentację typu tips and tricks podglądacie jak pracują inni? Z jakich dodatkowych narzędzi korzystacie Resharper, nDepend itp. i czy znajdujecie w codzennej pracy czas na zapoznawanie się z możliwościami tych narzędzi?

Bardzo fajnie sprawdzają się inicjatywy typu coding dojo - raz w tygodniu siadamy na dwie godzinki i rozwiązujemy jakiś prosty problem (typu zamiana liczb rzymskich na arabskie), przy czym staramy się poznać jak najwięcej skrótów visuala, bajerów R#, czasami wprowadzamy utrudnienia typu praca bez myszki itp. Najlepiej jest uczyć się od siebie nawzajem.

Co wy myślicie o certyfikacji?

Jest to jakaś motywacja do nauki, z drugiej strony trzeba nauczyć się trochę niepotrzebnej wiedzy. Jak Ci w firmie zapłacą, to można zrobić, samemu chyba bym się w to nie pchał.

1 użytkowników online, w tym zalogowanych: 0, gości: 1