czwartek, 25 czerwca 2015

Szok! Pierwszy w historii bloga konkurs...

... który na dodatek organizujemy na Facebooku (w końcu trzeba wpierać pracowadcę Pawła;)).

Do wygrania przewodnik po USA.

A jak go dostać? Zostawić komentarz (na fejsbuku) pod konkursowym postem z informacją, o czym chcielibyście na blogu poczytać.
Będzie nam miło, jak nas przy okazji polubicie, ale nie jest to wymagane.

Czekamy na komentarze do poniedziałku do godz. 22 naszego czasu!

I jeszcze link: KLIK


znalezione na beautyneeds.infiniteinfo.net

wtorek, 16 czerwca 2015

Pokrótce: W Kinie

Jako że trudno nieraz znaleźć motywację i czas na pisanie długich postów, otwieram nową serię złożoną z notek krótkich, zwięzłych i miejmy nadzieję pożytecznych.

USA - tak wysoko rozwinięty kraj, wszystko takie zautomatyzowane! No, prawie wszystko... Bo w kinach nie rezerwuje się miejsc! Kupujesz bilet, a potem pędzisz pod drzwi 30 minut przed seansem, żeby usiąść w lepszej części kina. Skąd to się bierze? Nie wierzę, że kin nie stać na automatyzację, choć tym się tłumaczą. Podejrzewam, że chodzi tu o wymuszenie na widzach wcześniejszego przyjścia na seans. Kino sprzeda więcej jedzenia, wszyscy widzowie obejrzą trailery itd. Znajdą się w Stanach kina z rezerwacją miejsc, ale będą to małe, niezależne lokale, walczące w ten sposób o klienta z wiekimi sieciami.


Z innej beczki... Byłem ostatnio w kinie na Mad Max (polecam!). Ten kto oglądał pamięta na pewno intensywną sekwencję otwierającą film - mocne sceny kończące się gwałtownie ekranem tytułowym filmu. Zauroczony początkiem ucieszyłem się, gdy ludzie w kinie zaczęli klaskać. Klaskali i po filmie. Oklaski słyszałem też na Gravity, na obu zaliczonych projekcjach. Przypomina mi to trochę koncert jazzowy z brawami wyrażającymi podziw i szacunek po solówkach. Przyjemny zwyczaj z którym nie spotkałem się w Polsce, rozprzestrzeniajcie!

środa, 3 czerwca 2015

Jak wyjść zwycięską ręką z rozmowy kwalifikacyjnej z Amazonem, Facebookiem czy Google?

Cieszą nas Polacy, którzy trafiają na bloga szukając informacji o Seattle, gdyż znaleźli tu pracę w Google lub w Amazonie i przygotowują się do wyjazdu. Dzisiejszy post kieruję do podobnej grupy: tych, którzy dopiero tej pracy szukają i zastanawiają się co trzeba zrobić, żeby dostać ofertę od Google. Uwaga! Tylko dla programistów!

Od jakiegoś czasu rekrutuję ludzi dla Amazona, więc wiem jak to wygląda za kulisami. Wiem też jak to wygląda z punktu widzenia kandydata, bo sam przebrnąłem z różnym skutkiem przez rozmowy w kilku amerykańskich korporacjach. Mam wielką nadzieję, że ktoś na moich doświadczeniach skorzysta!

Wszystko co poniżej napiszę odnosi się do modelu rekrutacyjnego stosowanego przez duże amerykańskie firmy: Google, Amazon, Facebook, Microsoft itd. Opowiem tylko o rekrutacji na typowe programistyczne stanowisko, gdzie oczekuje się ogólnego obycia w dziedzinie informatyki, a nie jakiejś wiedzy specjalistycznej typu układy elektroniczne czy sieci komputerowe.

Zanim zacznę, jedna rada, ważniejsza niż cała reszta tej notki razem wzięta. Nie ma lepszego sposobu na przygotowanie się do rozmowy kwalifikacyjnej niż rekrutowanie innych. Stojąc po drugiej stronie, zobaczysz czego oczekuje się od kandydatów i dużo łatwiej będzie ci wpasować się w wymagania rekrutujących. Motywacja do podszlifowania podstaw informatyki to darmowy bonus.

Dorzucę jeszcze jedną, a co! Niezależnie od tego kim jesteś, przyda się odrobina szczęścia. Przygotuj się najlepiej jak potrafisz, ale koniec końców twój los zależeć będzie od rekrutujących. Ludzi których uczy się, że dużo łatwiej kogoś przyjąć do firmy niż zwolnić. Twój sukces będzie zależał m.in. od tego kto w danym dniu będzie cię pytał i jakie zada ci pytanie. Czasem się nie uda. Większość dużych firm pozwala próbować co pół roku, więc startuj co pół roku. Za którymś razem dopisze szczęście! A teraz do rzeczy...

Proces rekrutacji technicznej zaczyna się zwykle od rozmowy lub rozmów telefonicznych (phone screen), trwających około godziny każda. Jeżeli popiszesz się wiedzą, firma zaprosi cię na właściwą rozmowę w swoim biurze (onsite). Ta trwa najczęściej 4 do 6 godzin z przerwą na lunch i upakowana jest po brzegi wyzwaniami, najczęściej z szeroko rozumianych podstaw informatyki. Co trzeba umieć?

1. Algorytmika i struktury danych


Materiał? To czego uczyli cię na pierwszym roku studiów i... tyle. Tu nikogo nie interesuje czy jesteś mistrzem sztucznej inteligencji, systemów rozproszonych czy systemów operacyjnych: nie zwalnia cię to z rozumienia podstaw. Nie interesuje ich jakiego języka programowania użyjesz, ale musisz wiedzieć wszystko o:
  • Iteracji i rekurencji.
  • Analizie algorytmów: złożoność obliczeniowa i pamięciowa.
  • Strukturach danych: tablice, listy, mapy, stosy, kolejki, kopce, kolejki priorytetowe, drzewa, grafy.
  • Rozwiązaniach typowych zagadnień: sortowanie, wyszukiwanie binarne, hashowanie, BFS i DFS w grafach.
  • Rzadziej zapytają cię o operacje na bitach i programowanie wielowątkowe.
Czemu pytają? Bo przy skali na jakiej operują te firmy różnica między algorytmem O(log(n)) a O(n) miewa znaczenie. Przede wszystkim jednak dlatego, że takie zagadnienia poddają się łatwo obiektywnej ocenie. I są dobrym sposobem na oszacowanie zdolności kandydata do rozwiązywania problemów. Jeżeli nie dostałeś oferty, możesz być prawie pewny, że przyczyniła się do tego algorytmika.
Przykładowe zadania:
  • Mając dane repozytorium Git z kodem zawierającym buga oraz API sprawdzające czy dana rewizja posiada ten bug, przedstaw funkcję która odpowie na pytanie: w której rewizji bug pojawił się po raz pierwszy.
  • H-index to numer przypisywany publikującym naukowcom. H-index naukowca to największe h takie, że naukowiec opublikował conajmniej h prac, a każda z jego prac miała conajmniej h przytoczeń. Dana jest lista publikacji naukowca - wyznacz jego h-index.
  • Wyobraź sobie macierz liczb modelującą teren. Liczba w elemencie macierzy reprezentuje jego wysokość nad poziomem morza. Lewa i górna krawędź macierzy to Ocean Spokojny. Prawa i dolna to Ocean Atlantycki. Znajdź wszystkie elementy macierzy takie, że jeśli umieścisz tam źródło rzeki, woda spłynie do obu oceanów. Woda rzecz jasna spływa z elementów macierzy o większej wysokości do sąsiadów o niższej wysokości, nigdy odwrotnie.
Jak wykazać się wiedzą:
  • Upewnij się, że rozumiesz zadanie. Uściślij wymagania pytaniami.
  • Zaproponuj różne rozwiązania, o różnej złożoności obliczeniowej.
  • Zakoduj jedno z zaproponowanych przez siebie rozwiązań. Kod musi być elegancki i łatwy do zrozumienia.
  • Przetestuj swoje rozwiązanie na oczach rekrutującego: sprawdź krok po kroku czy działa na kilku przykładach. Uwzględnij edge cases.
Jak się przygotować? Przeczytaj dobrą książkę o algorytmach (na przykład taką), żeby odświeżyć podstawy. A potem już tylko koduj, koduj, koduj. Im więcej tysięcy linii kodu tym lepiej... Przydadzą się książki z katalogiem problemów i rozwiązaniami, np. dobrze znana i mniej znana. Koniecznie odwiedź też strony z przykładowymi zadaniami od ludzi, którzy przebrnęli przez rozmowy, np. tu.

2. Systemy rozproszone.


Materiał? Znacznie trudniej to usystematyzować... Na pewno przyda się znajomość web services, systemów kolejkowych, modelu publish-subscribe, baz danych, NoSQL, cloud computing, big data, search, cache, REST, uf...

Czemu pytają? Bo tym będziesz zajmował się w pracy. Pytania z tej dziedziny są często ubarwiane odniesieniami do biznesu, żeby sprawdzić jak kandydat radzi sobie z problemami o mniejszym stopniu abstrakcji. Opis problemu jest najczęściej nieprecyzyjny i niejednoznaczy, co wymusza na kandydacie dialog. W ten sposób sprawdzą jak radzisz sobie z wyjaśnianiem innym swoich pomysłów.

Przykładowe zadania:
  • Zaprojektuj web crawler.
  • Zaprojektuj system do wyszukiwania geograficznego: jakie restauracje znajdują się w pobliżu mnie.
  • Zaprojektuj gmail.
  • Zaprojektuj system do renderowania map całego świata z możliwością zoom.
Jak wykazać się wiedzą:
  • Niezbędna jest znajomość klocków, z których buduje się systemy.
  • Pytania z systemów rozproszonych to pytania otwarte - szczególnie ważna jest ciągła interakcja z rekrutującym. Odpowiadaj na pytania, sam zadawaj pytania, wykorzystaj tablicę.
  • Uściślij wszystko co przychodzi ci do głowy: ilu użytkowników, jak często odświeżane będą dane w systemie, ile tych danych, ile zapytań na sekundę, jak szybko system ma odpowiadać na te zapytania.
Jak się przygotować? Na pewno jest jakaś współczesna książka, która zgrabnie podsumowuje systemy rozproszone w dobie klastrów tanich maszyn i cloud computing. Niestety nic mi na jej temat nie wiadomo... Daj znać jeśli wiadomo ci więcej! Wertowanie internetu pomoże, ale jedynym skutecznym nauczycielem tego materiału jest doświadczenie. Najłatwiej zdobyć je w pracy, jeśli ma się to szczęście. W przeciwnym wypadku zamiast projektować prosty web crawler, siądź i go napisz. Napisz "mail na 5 minut" albo nowy Stack Overflow. Cokolwiek! Podepnij się pod AWS i wykorzystaj dostępne tam usługi. Nauczysz się w ten sposób niepomiernie więcej niż z książki.

3. Profesjonalizm i dopasowanie do kultury firmy.

Materiał? Ach, pytania behawioralne! Pora udowodnić firmie, że poza znakomitym warsztatem cechuje cię również profesjonalizm. Oraz znajomość produktów firmy i zasad którymi powinni kierować się jej pracownicy.

Czemu pytają? Bo stosunkowo łatwo (...) znaleźć zdolnego programistę, który zrobi co mu się każe. Dużo trudniej profesjonalistę, który zaangażuje się na sto procent, wykaże innowacyjnością i podniesie ducha w zespole. Bo nikt nie chce pracować z leniem, z arogantem.

Przykładowe zadania:
  • Opowiedz mi o projekcie, z którego jesteś najbardziej dumny.
  • Dlaczego chcesz pracować dla Google? Biuro Facebooka jest zaraz obok.
  • Opowiedz mi o sytuacji, gdy naprawiłeś coś w kodzie, choć nikt cię o to nie prosił.
  • Opowiedz mi o sytuacji, gdy przymuszony nadchodzącym terminem odpuściłeś sobie ścisłą kontrolę jakości.
  • Opowiedz mi o konflikcie ze współpracownikiem.
Jak wykazać się wiedzą:
  • Opowiadaj głównie o sobie i swoich osiągnięciach, nie o swoim zespole.
  • Odpowiadając na pytanie trzymaj się formuły: na czym polegał problem, jak go rozwiązałeś i jaki był efekt twoich wysiłków.
  • Bądź precyzyjny: "system który zaprojektowałem przyspieszył przetwarzanie o 20%" albo "algorytm który zaproponowałem przyniósł 10% więcej zysku".
  • Przygotuj się na pytania o tym czemu chcesz dla nich pracować i czemu powinni cię zatrudnić.
  • Bądź miły, uśmiechnięty i podekscytowany. Nawet po pięciu godzinach rozmów. Twój dobry nastrój udzieli się rekrutującym.
Jak się przygotować? Poszukaj na necie jakimi zasadami kieruje się firma i zastanów się jak wpasowałbyś się w takie środowisko. Dla przykładu, Amazon zawsze myśli o swoich klientach, a Facebook chełpi się swoim hacker culture. Zapoznaj się z produktami firmy i nowinkami na jej temat. Przeczytaj to. Zastanów się które z twoich dotychczasowych osiągnięć ukazują cię w najlepszym świetle i odnoś się do nich odpowiadając na pytania rekrutującego.

4. Programowanie obiektowe.

Materiał? Classes, decomposition, encapsulation, polymorphism, inheritance, composition, design patterns... Wszystko czego uczą na wstępie każdej książki o Javie.

Czemu pytają? Bo w większości dużych firm programowanie obiektowe jest wciąż dominującym paradygmatem i taki kod będziesz pisał na co dzień.

Przykładowe zadania:
  • Rozpisz diagram klas gry w szachy.
  • Rozpisz diagram klas talii kart.
Jak wykazać się wiedzą:
  • Usystematyzuj obiekty i operacje, które będziesz musiał zamodelować. Uściślij założenia z rekrutującym.
  • Przedstaw model za pomocną jasnej notacji, np. UML.
  • Zastanów się jak wzbogacić swoje rozwiązanie o wzorce projektowe. Dla przykładu, dodaj flyweight do twojej talii kart, żeby uniknąć konstrukcji zbyt wielu obiektów.
Jak się przygotować? Jeśli chcesz, przeczytaj dobry podręcznik, ale podobnie jak w przypadku systemów rozproszonych najlepszym nauczycielem jest tu doświadczenie. Jeśli uważasz że masz go za mało, to napisz web crawler. Albo system plików z dwiema implementacjami: lokalną i sieciową. Rozglądnij się za ciekawym projektem open source napisanym w C++ albo Javie i zaangażuj się trochę!

Na koniec link do starszego posta Basi, o rekrutacji odrobinę szerzej: klik.

wtorek, 2 czerwca 2015

Gdzie jesteśmy, jak nas nie ma? Whidbey Island i Deception Pass

Ostatnio trochę zaniedbujemy bloga, ale wraz z piękną pogodą przyszło sporo mniejszych i większych towarzyskich wypadów i generalnie jakoś mniej czasu spędzamy w internetach.
Ale ale, Paweł szykuje już dla Was notkę, a w międzyczasie, przystawka ode mnie.

Dziś zdjęcia z ostatniej, lekko pochmurnej niedzieli, którą spędziliśmy z przyjaciółmi na wyspie Whidbey.
W ogóle to skopiuję patent, który wypatrzyłam na blogu Etzi Travel i wkleję Wam mapkę dla lepszej orientacji, o!


Jednym z pierwszych skojarzeń, jakie przychodzą mi do głowy, kiedy myslę o Wybrzeżu Północno-Zachodnim (nasz polski język jest piękny, ale wolę nazwę Pacific Northwest), są promy.
Wszyscy fani Grey's Anathomy pewnie mi teraz przytakują;)
Załadowaliśmy się na nasz w przeuroczej mieścinie Mukilteo. Tu też odkryliśmy mały skarb - przytulną i uroczo urządzoną kawiarnię, w której zatrzymaliśmy się na obowiązkowy kubek latte.

Przybijamy do brzegu

Pierwszym przystankiem była Plaża Double Bluff, którą nasi przyjaciele chcieli zweryfikować pod katem użyteczności do kite-surfingu. Akurat był odpływ, spacerowaliśmy więc po odkrytym brzegu i obserwowaliśmy czaple i  ludzi zbierających owoce morza.





Wielkie drzewo. Duży Paweł dla skali




Znaleźliśmy tą foczkę na brzegu. Wyglądała na chorą i serca nam pękały, bo myśleliśmy, że umiera. Próbowaliśmy dodzwonić się do jakiegoś stowarzyszenia zajmującego się ochroną zwierząt morskich, ale tubylcy powiedzieli nam, że to nie ma sensu. Jeśli ktoś natknie się na samotną foczkę, oznacza to, że jej matka prawdobodobnie poluje i nie wróci do malucha, jeśli w pobliżu będą kręcić się ludzie. Broń Boże nie należy malucha dotykać! Trzeba zostawić go w spokoju i zapewnić mnóstwo przestrzeni, żeby mama foka nie bała się wrócić.






Akrobata

Drugi, nieplanowany przystanek zrobiliśmy przy Forcie Casey. Fort ten uznawany był za jeden ze strategicznych punktów obrony dostępu do Zatoki Puget i słynął z tzw. "znikających dział" - dział na specjalniej podstawie, która umożliwiała ukrycie go. Dziś to już głównie miejsce pikników i niedzielnych wycieczek. Bo widoki z fortu przepiękne.




A to już po drodze - znaleźliśmy łąkę pełną bielików amerykańskich!


Głównym punktem dnia były odwiedziny Deception Pass - cieśniny oddzielającej wyspy Whidbey i Fidalgo. Nazwa cieśniny oznacza "oszustwo" i została nadana przez Jerzego Vancouvera po tym, kiedy przekonał się, że Widbey nie jest półwyspem a wyspą.
Cieśnina znana jezt z rwących prądów morskich (zwróćcie uwagę na poniższych zdjęciach) i charakterystycznego mostu.
Ciekawostwa - parę scen z horroru The Ring było kręcone w pobliżu;)  









I to by było na tyle.
Ostatnio robiłam małe porządki w zdjęciach, w najbliższym czasie może dorzucę trochę Seattle w obrazach:)