Zadanie rekrutacyjne do oceny

0

Aplikowałem na juniora desktop .net, w cv zaznaczyłem ze ms sql jest moja najsłabszą strona, dostałem zadanie o treści jak niżej do sprawdzenia progu wejścia na stanowisko juniora, niestety nie otrzymałem odpowiedzi stąd domyślam się ze mój próg wejścia jest zbyt niski na juniora.
Prośba o sprawdzenie rozwiązania i o wypunktowanie obszarów w których widzicie ze są dziury do załatania.

Treść zadania:

Proszę utworzyć aplikację z interfejsem użytkownika używając WPF i języka C#.
Celem aplikacji będzie połączenie się z bazą danych MS SQL Server (może być Express) używając
loginu oraz hasła i odczytanie z tabel systemowych nazw kolumn należących do tabel znajdujących się
w bazie DevData.
Należy pobrać informacje tylko o kolumnach typu int.
Definicja bazy danych wygląda następująco:
CREATE DATABASE [DevData];
GO
CREATE TABLE [DevData].dbo.Table_A (Col_A1 int, Col_A2 varchar(10, Col_A3 date);
CREATE TABLE [DevData].dbo.Table_B (Col_B1 int, Col_B2 nchar(10, Col_B3 int);
CREATE TABLE [DevData].dbo.Table_C (Col_C1 varchar (10, Col_C2 timestamp, Col_C3
int, Col_C4 char(10) );
Pobrane dane dotyczące powyższych obiektów pokazać w DataGridzie lub podobnej kontrolce na
oknie głównym aplikacji.
Na oknie głównym aplikacji powinny się też znaleźć pola loginu i hasła do połączenia z bazą danych
oraz przycisk Testuj połączenie. Po jego naciśnięciu ma się wyświetlić informacja czy połączenie się
udało.
W przeciwnym przypadku należy wyświetlić stosowną informację o błędzie.
Poniżej, w przypadku udanego połączenia, ma się uaktywnić przycisk Załaduj dane, który wywoła
operację pobrania danych z bazy i umieszczenia w obiekcie DataGrida.

moje rozwiązanie:
Rozwiązanie zadania na moim GitHub

Z tego co się sam domyślam, ale nie mam pewności, odnośnie błędów w moim rozwiązaniu zadania to:

  • najprawdopodobniej źle zrozumiałem skąd i gdzie mam się logować, najprawdopodobniej trzeba było dodać tabelkę z użytkownikami i na jej podstawie weryfikować poprawność logowania a w connectionsting ustawić 'Trusted_Connection=True',
  • najprawdopodobniej chodziło o zastosowanie EF albo innego ORM'a?
  • mało testów i małe pokrycie testami, pewnie słaba jakość testów tych jakie mam? No i pewnie widać ze TDD nie mam zaszczepionego, chyba widać ze najpierw pisze kod potem dopisuje testy?
  • opakowanie kontrolki PasswordBox aby zbindować jej właściwość 'Password' to jedno jawnie zerżnięte z netu, to chyba widać i tu wyłazi mój brak znajomości dependencypropoerties, behaviors i attached properties, tu trzeba było korzystać z 'SecurePassword' i zaangażować 'NetworkCredential' (nigdy tego nie używałem więcej rzeczy już nie chciałem zrzynać rozwiązań z netu)
  • 'RelayCommand' zamiast oddelegowania do oddzielnego folderu Poleceń?
  • nie jestem pewien czy podejście do wyjątków jest ok, bo raz korzystam z tego co przyniósł wyjątek i wyświetlam na oknie (ViewModel od wyświetlania danych z bazy), a drugi raz tylko pośrednio informuje co się stało poprzez zaszyty komunikat w maszynie stanów (ViewModel strony logowania).
  • najprawdopodobniej trzeba było pobrać jednym zapytaniem wszystkie dane zamiast iterować po tabelach sekwencyjnie w repozytorium?
  • polskie nazwy? określiłem w cv znajomość angielskiego tylko na poziomie czytania dokumentacji, wiec nie naciągałem faktów

powiązane wątki na forum które wygenerowałem próbując rozwiązać to zadanie:

3

Merytorycznie co do samego kodu się nie wypowiem ale:

  • polskie nazwy, a co gorsza zlepek polskiego z angielskim może cię skreślić już na starcie. Umiejętność nazywania klas i zmiennych wymaga mniejszej znajomości angielskiego niż czytanie dokumentacji, więc pokazałeś że pewnie dokumentacji tym bardziej nie przeczytasz
  • nie ma nic złego w "zrzynaniu z netu" pod warunkiem że wiesz co, jak i po co i nie robisz tego bezmyślnie. Wymyślanie koła na nowo nie ma sensu
  • w zadaniu chyba nie było testów? Jak nie umiesz pisać testów to nie pokazuj że nie umiesz
0

Jednak rekruter się odezwał, miałem rozmowę online, więc dostałem feedback.

Mam takie spostrzeżenia:

  • mix polsko-angielskich nazw klas/metod nie był w ogóle tematem
  • otrzymałem info że mam zbyt mocno rozdrobnione klasy, dziwne bo do tej pory budowałem sobie obraz z książek i for, że klasy i metody powinny być małe
  • 20 min rozmowy z osobą techniczna momentalnie wykryła moje dziury w znajomości gita i programowania asynchronicznego ale taka żywa rozmowa momentalnie rozjaśniła mi parę zagadnień z którymi tłukę się po forach od kilku wątków już.
  • wydaje mi się że co firma to inna kultura podejścia do pisania, nie ma jednego dogmatu, patrz m.in. polsko jezyczne nazwy, mam już 2 firmy które zupełnie nie zwróciły na to uwagi a np. na forum jest to żelazny pierwszy punkt jako uwaga do kodu

Podsumowując, roboty raczej nie dostanę ale wniosek jest taki że nie będę teraz wysyłał w ogole CV do firm ze swojego miasta i będę skubał rekrutację zdalne z dalszych miast w których nie szkoda będzie się spalić na rekrutacji, ile się da choćby po to żeby wyciągnąć parę odpowiedzi od osób technicznych. To są naprawdę fajnie kolesie, gaduły niesamowite ale momentami można to wykorzystać, zamienić się rolami, dopytać o różne swoje problemy i wątpliwości co do kodu a oni odpowiedzą! ;)

1

Te polskie nazwy to tragedia, są okropne conajmniej z dwóch powodów:

  • Po pierwsze, nie sądzę żeby żaden szanujący się programista pracował z kimś, kto wstawia nazwy jakiekolwiek inne niż angielskie.
  • Po drugie, można powiedzieć że wystawiłeś się na odstrzał, bo nawet ktoś kto nie jest technicznie obeznany jest w stanie rozpoznać że to polskie nazwy, i już na starcie Cię wykopać.

Co do pozostałych błędów:

Varran napisał(a):

Z tego co się sam domyślam, ale nie mam pewności, odnośnie błędów w moim rozwiązaniu zadania to:

  • najprawdopodobniej źle zrozumiałem skąd i gdzie mam się logować, najprawdopodobniej trzeba było dodać tabelkę z użytkownikami i na jej podstawie weryfikować poprawność logowania a w connectionsting ustawić 'Trusted_Connection=True',

Moim zdaniem to nie byłoby na tyle istotne, żeby Cię nie przyjąć.

  • najprawdopodobniej chodziło o zastosowanie EF albo innego ORM'a?

Dla mnie to nie byłby dealbreaker, bo to tylko szczegół implementacyjny persystencji, ale są tacy co uznają to za bycie neandertalczykiem.

  • mało testów i małe pokrycie testami, pewnie słaba jakość testów tych jakie mam? No i pewnie widać ze TDD nie mam zaszczepionego, chyba widać ze najpierw pisze kod potem dopisuje testy?

To czy najpierw czy nie najpierw nie widać, ale widać że są słabe i jest ich bardzo mało. Ten TestProjekt.DomainTest.StateMachineTests.NazwyTabel to w ogóle jest pusty.

  • opakowanie kontrolki PasswordBox aby zbindować jej właściwość 'Password' to jedno jawnie zerżnięte z netu, to chyba widać i tu wyłazi mój brak znajomości dependencypropoerties, behaviors i attached properties, tu trzeba było korzystać z 'SecurePassword' i zaangażować 'NetworkCredential' (nigdy tego nie używałem więcej rzeczy już nie chciałem zrzynać rozwiązań z netu)
  • 'RelayCommand' zamiast oddelegowania do oddzielnego folderu Poleceń?

Tutaj się nie wypowiem.

  • nie jestem pewien czy podejście do wyjątków jest ok, bo raz korzystam z tego co przyniósł wyjątek i wyświetlam na oknie (ViewModel od wyświetlania danych z bazy), a drugi raz tylko pośrednio informuje co się stało poprzez zaszyty komunikat w maszynie stanów (ViewModel strony logowania).

Trzeba dobrze rozumieć o co chodzi w Dependency Inversion, żeby taki "błąd" wykryć, moim zdaniem powinieneś nigdy nie pokazywać userowi wyjątków z niższych warstw; ale nie sposób przewidziec co ten rekruter sobie pomyślał. Może kierował się swoimi uprzedzeniami.

  • najprawdopodobniej trzeba było pobrać jednym zapytaniem wszystkie dane zamiast iterować po tabelach sekwencyjnie w repozytorium?

Szczegół implementacyjny. Dla mnie nie ma znaczenia, ale rekruter mógł pomyśleć że Cię nie obchodzi performance.

  • polskie nazwy? określiłem w cv znajomość angielskiego tylko na poziomie czytania dokumentacji, wiec nie naciągałem faktów

No to już pisałem wyżej, nic Cię nie usprawiedliwia. Przestań robić polskie nazwy teraz zaraz, i zmień wszystkie na angielskie.

1
Varran napisał(a):
  • polskie nazwy? określiłem w cv znajomość angielskiego tylko na poziomie czytania dokumentacji, wiec nie naciągałem faktów

Słaba wymówka. Np. masz tam klasę BindowalnyPasswordBox. Czemu ma służyć tutaj słowo "Bindowalny", skoro to nawet nie jest po polsku? Albo rzeczy, które są oczywiste typu zamiast Odswiez, mógłbyś napisać Refresh, Update czy coś podobnego. Ogólnie prezentujesz bardzo niedbałe podejście mieszając w ten sposób (co rozumiem, też tak kiedyś pisałem, jeszcze kiedy czasami ciężko było wymyśleć angielską nazwę. Co nie zmienia tego, że nie jest to profesjonalne).

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