W dzisiejszym #main wyniki ostatniej ankiety (oraz jej kontynuacja!), parę słów o twórcy C++ i kolejne newsy/ciekawostki ze świata oraz ważną zapowiedź. Zachęcamy do lektury!
Uwaga! Z uwagi na sezon wakacyjny a także inne obowiązki w tym czasie, do końca września seria #main będzie się pojawiać z mniejszą częstotliwością — raz na dwa tygodnie, a nie jak wcześniej raz na tydzień. Mamy nadzieję, że zrozumiesz, i że pomoże nam to uczynić blog jeszcze ciekawszym na przyszłość!
Cykl #main to punkt początkowy Waszego tygodnia, prasówka, w której zbieramy ciekawe linki, dzielimy się informacjami, a także podsyłamy programistyczne zadanie. Mamy nadzieję, że w ten sposób umilimy Wam poniedziałkowy powrót do rzeczywistości ;)
Obrazek w nagłówku pochodzi z serwisu freepik.com
Podsumowanie ankiety z zeszłego tygodnia
Faworytem ankiety okazały się serie związane z konkretnymi projektami — w dzisiejszym #mainie kolejna związana z tym ankieta — jakiego rodzaju projekt chciałabyś zobaczyć w najbliższym czasie opisany na kobietydokodu.pl ? Oczywiście nie porzucamy innych serii, ale w miarę możliwości postaramy się skupić na preferowanych opcjach ;)
Udział IntelliJ rośnie!
Przez długi czas w kwestii wyboru IDE do Javy panowała właściwie hegemonia Eclipse — nie było to idealne środowisko, ale konkurenci byli jeszcze gorsi ;) Odkąd pojawił się IntelliJ IDEA obserwujemy coraz większą migrację i wyrównywanie się udziału obu IDE — wg jednej z ostatnich ankiet proporcja ta wynosi już 48% dla Eclipse do 44% dla IntelliJ! Na szczęście konkurencja ta ma wiele korzyści — oba produkty poprzez walkę o ‘udziały’ stają się lepsze, bardziej uniwersalne i przyjaźniejsze dla użytkownika — oby tak dalej!
Google prawdę Ci powie
Google odświeżyło stronę ‘my activity’ — znajdziesz tam nie tylko informacje o swoich wyszukiwaniach, ale też ogólnie o Twojej aktywności w sieci. Warto zerknąć, co Google o Tobie wie, i być może zastanowić się czy nie warto pomyśleć o większej prywatności na przyszłość.
Bezpłatne (legalne) ebooki i książki
Książki nadal są i pewnie przez długi czas będą jednym z ważniejszych źródeł wiedzy i pomocy w nauce. Portal TradePub to system, w którym możemy otrzymać kompletne, pełnowartościowe pozycje w zamian za pozostawienie swoich danych kontaktowych i informacji o zatrudnieniu — dane te są używane do statystyk ale także do prezentowania celowanych ofert. Mimo wszystko, nie jest to wysoka cena za dobrej jakości materiały!
O tym, jak wygląda studio i jak powstają gry
Nasze rodzime studio CDPROJECT RED (twórcy m.in. serii Wiedźmin) we współpracy z Jackiem Gadzinowskim uchyliło rąbka tajemnicy i pokazało jak wygląda ich miejsce pracy, oraz przede wszystkim jak powstają popularne na całym świecie gry. Oczywiście jest to wideo promocyjne firmy, ale świetnie wykonane i przede wszystkim — ciekawe! Oby więcej takich!
Odpowiedź na pytanie z zeszłego tygodnia
A pytaliśmy o to: jak zaprojektowałabyś klasy do gry w warcaby?
Tego rodzaju pytanie możesz trafić na rekrutacji do większych firm, i nie ma na nie jednej, poprawnej odpowiedzi (o ile rekruter się nie uprze na jakąś konkretną wersję, ale nie o tym mówimy…). Poniższy model jest najprostszą implementacją:
W tym wariancie mamy klasę, która reprezentuje pionek oraz taką, która reprezentuje grę. Plansza jest tutaj reprezentowana jako tablica 8x8, a pola są reprezentowane liczbą (np. w pierwszym rzędzie pola mają numery 1–8, w drugim 9–16 itd — jeśli takie pytanie padło podczas rekrutacji, warto powiedzieć jak numerujesz pola, żeby nie było wątpliwości). Klasa gry ma dwie metody — jedną do poruszania pionkami, drugą do sprawdzenia czy gra się już zakończyła. Pionek ma jedną metodę, która pozwala uczynić z niego ‘króla’.
Ta implementacja ma jednak kilka problemów: teoretycznie ten sam obiekt pionka może się znajdować na kilku polach w tablicy (implementacja musi pilnować, żeby tak się nie stało), reprezentacja tablicowa nie jest też najwydajniejsza w zakresie pamięci.
Alternatywnym podejściem jest przechowywanie pozycji pionków w postaci zbioru (implementacja Set w Javie, alternatywnie mapy pozycja -> pionek), gdzie pozycję pionka przechowujemy w obiekcie typu PiecePosition. W tym wypadku metody by się nie zmieniły.
Jeszcze innym podejściem jest przeniesienie pozycji do klasy Piece — w tym wypadku metoda movePiece może zostać przeniesiona także do tej klasy (ale nie musi), możemy też mieć metodę movePiece w głównej klasie gry (odpowiadającą za sprawdzenie czy ruch jest możliwy, czy pionek nie bije, czy nie zamienia się w króla itp), która wywołuje metodę moveTo w klasie Piece (ta metoda jedynie zmieniałaby zapisaną pozycje pionka).
W każdej z opcji potrzebne są oczywiście dodatkowe metody pomocnicze, które pozwolą nam sprawdzić czy pionek może zostać przesunięty na dane pole, czy nie bije innego pionka, jaki jest obecny wynik, usuwający ‘zbity’ pionek z planszy itp.
Jeśli tego rodzaju pytanie trafi Ci się na rekrutacji, pamiętaj że każda opcja jest prawidłowa, o ile spełnia warunki narzucone przez rekrutera (może on zastrzec, że rozwiązanie np. ‘nie może używać tablic’).
Jak można tworzyć beany w Springu?
Oczywiście zachęcamy do samodzielnego odpowiedzenia na pytanie. Za tydzień nasza odpowiedź.
Więcej pytań technicznych z poprzednich mainów wraz z linkami do odpowiedzi znajdziesz tutaj!
Bjarne Stroustrup
Język C++ być może nie każdy zna, ale na pewno o nim słyszał bądź kiedyś widział. Był on dość przełomowy jeśli chodzi o podejście do tworzenia aplikacji — podczas gdy język C był projektowany i rozwijany ‘równolegle’ do sprzętu i urządzeń, w języku C++ górę wzięło podejście biznesowe do tworzenia aplikacji, obiektowość itp. Sam język jest dziełem jednego człowieka — Bjarna Stroustrup.
Bjarne pochodzi z Danii, gdzie uzyskał tytuł magistra, po czym obronił doktorat na uniwersytecie Cambridge w 1979 roku. Podczas pracy doktorskiej korzystał z C, na podstawie którego stworzył (jak sam to nazwał) “C z klasami”. Była to podstawa do języka C++, który stał się standardem w branży na długie lata (nadal nim jest w niektórych zastosowaniach). Bjarne jest odpowiedzialny za pierwszą specyfikację, określenie i definicje kryteriów, które C++ musiał spełniać, pierwszą implementację oraz doprowadzenie do włączenia rozszerzeń w poczet języka przez komitet standaryzacyjny C++. Stworzył także podręcznik/dokumentację “The C++ Programming reference”.
W późniejszych latach kierował m.in. działem rozwoju projektów wielkoskalowych w labolatorium AT&T Bell, uczestniczył także w pracach organizacji IEEE. Posiada tytuł profesora oraz tytuły honorowe kilku uniwersytetów. Aktualnie kieruje działem technicznym w banku Morgan Stanley oraz gościnnie udziela wykładów na Uniwersytecie Columbia.