Wątek przeniesiony 2022-11-18 15:49 z Edukacja przez cerrato.

Proszę o ocenę projektów

0

Cześć,

Proszę Was o sprawdzenie GitHuba. Zaznaczę, że jest tam tylko mój kod. Niczego nie skopiowałam z Internetu.

GitHub

Staram się o staż/praktyki z Javy

2

@ms_:

Sprawdzenie pod katem ???

Pod rekrutację, czy w celu wydajnej pracy własnej ?

2

https://github.com/neb-dev-i/ ? Sprawdziłem, 404 Page not found.

Poprawna kategoria to bardziej Oceny i recenzje (lub Kosz jak link do githuba nie zacznie działać)

0

W Zookeeper raczej inaczej to powinno być zamodelowane

Prędzej powinna być klasa Animal która zawiera ten string dla każdego zwierzaka i powinieneś mieć kolekcje tych zwierzątek

a osobno powinna być jakaś klasa Game która faktycznie by realizowała tę grę.

Teraz z jakiegoś powodu gra jest w zwierzaku, a obok X stringów dla każdego zwierzaka.

0

Malutkie te projekciki. Powinieneś ustawić je ihmo tak żeby największy był z przodu. Na razie widze że największy to Battleship.


Powiec mi proszę co wnosi taki komentarz:

    /**
     * This is the row getter
     */

    int getRow() {
        return row;
    }

?


WUT?

// Write your code here

Jaki kod?


    void getStart() {

        System.out.print("Please, input start time in HH:MM format: ");

        while (true) {
            String start = SCANNER.next();
            try {
                this.START_TIME = LocalTime.parse(start, DateTimeFormatter.ofPattern("HH:mm"));
                break;
            } catch (DateTimeParseException e) {
                System.out.print("Please, input hour in HH:MM format: ");
            }

        }

    }

kurde, gdzieś już widziałem coś takiego. Getter komunikujący się z użytkownikiem i ustawiający stan. To jest z https://github.com/neb-dev-il/Orange-recruitment-task-lets-meet/blob/main/Orange-recruitment-task-lets-meet/src/Person.java

1

@ms_: Dość malutkie te projekciki.
Szczerze, to osobiście jako rekruter nie byłbym przekonany, brakuje mi czegoś większego.
Na tak małym codebasie nikt nie jest w stanie dostrzec twoich umiejętności planowania architektury/strukturyzowania projektu, nie widać też użycia jakichś najpopularniejszych frameworków - nie wiem co tam w JAVie się używa, pewnie jakiś spring czy coś - które są po prostu must have na pozycji deva.

53

Jak dla mnie to projekty na zasadzie "youtube beginner task" w 1h.

IMO za mało na staż. Zamiast tworzyć 10 tego typu projektów, zrób jeden porządny - większy.

2

Tak jak napisał @ledi12.
Najlepiej zrobisz jak wymyślisz sobie coś, co wydaje ci się w tej chwili trudne do napisania - nie mówię tu o trudności poziomu systemu operacyjnego - albo wejdź w google i wklep sobie "Java project ideas" jeżeli nie masz pomysłu, wybierz coś co wyda ci się najbardziej interesujące i zacznij to implementować.
Nie musisz posiadać od razu całej wiedzy jak coś zrobić, jeżeli czegoś nie wiesz to szukasz w google, czytasz i implementujesz, cały cykl powtarzasz. W ten sposób bardzo dużo się nauczysz zarówno samego języka jak i wyszukiwania informacji, a na dodatek stworzysz coś co będzie atrakcyjne dla rekruterów.

1
ms_ napisał(a):

Cześć,

Proszę Was o sprawdzenie GitHuba. Zaznaczę, że jest tam tylko mój kod. Niczego nie skopiowałam z Internetu.

GitHub

Staram się o staż/praktyki z Javy

Widać, że 90% "kodu tam" to jest praktykowanie jakichś "złotych porad" (jak puste gettery i komentarze), a prawdziwego kodu tam nie ma prawie w ogóle.

1

Kółko i krzyżyk:

Brak podziału na klasy, co za tym idzie SRP violation.
Spaghetti code (SRP again, KISS).
Statics.
If w ifie w pętli w pętli - nieczytelne.
twoDimensionalArray itp - nic niemówiące nazwy.
sumRows == 264 || sumColumns == 264 || sumDiagonal1 == 264 || sumDiagonal2 == 264 - magic values.
is3X/is3O - obie metody robią niemal dokładnie to samo -> DRY violation. Bardzo słabe nazwy tych metod.
isCoordinatesInRange - błędy gramatyczne.
System.out.println("This cell is occupied! Choose another one!"); w "metodzie" mającej tylko coś sprawdzić - SRP violation.

No dobra, może lista braków jest długa, ale jeśli jesteś początkującym, to wydaje mi się, że kod jest całkiem spoko. Tu i ówdzie pojawiają się metody, część z nich jest nazwana dobrze, część elementów (prefiks "is") też jest nazwana dobrze, uwzględniony zmienny rozmiar tablicy - dobry początek!

1

Ooo! Odkryłem zwierzątka:
https://github.com/neb-dev-il/Zookeeper/blob/main/Zookeeper/src/Animal.java
sam zrobiłaś ten ascii-art czy skopiowałaś skądś?

BTW Zookeeper to trochę niefortunna nazwa repo, bo już jest coś takiego: https://en.wikipedia.org/wiki/Apache_ZooKeeper

5

Wszystkie te projekty są samo-podobne do siebie. W normalnym repo programisty-entuzjasty z reguły są różne repo w różnych językach które każde jest inne, i obrazuje w pewnym sensie proces nauki.

Sugeruje to że nie były robione "po coś", a tylko po to żeby były.

Rzeczy na które ja bym zwrócił uwagę:

  1. Zacommitowane .idea/ oraz .iml, mimo że masz .gitignore w projekcie - ❌
  2. ReadMe.md nawet dobre - ✔️
  3. Programowanie statycznymi metodami - ❌❌
  4. Funkcje długie na 20-30 linijek, które aż się proszą żeby je uprościc - ❌
  5. Modyfikacja stanu w getterach - ❌ (nie mają nazwy "get" ale są getterami)
  6. Niepotrzebne else w wielu miejscach, sugeruje brak obycia z programowanie w ogóle - ❌
  7. 0 testów w każdym projekcie - ❌❌❌
  8. Ręczne budowanie JSON'a, i to jeszcze źle zrobione bo bez odpowiedniego enkodowania - ❌
  9. Nic niewnoszące komentarze - ❌
       /**
      * This is the row getter
      */
    
     int getRow() {
         return row;
     }
    
  10. Ta... abominacja?
    @Override
    boolean isMarkNearCell(int row, int column, char symbol, char[][] battlefield) {
        if (row >= 0 && row <= 8 && column >= 1 && column <= 9) {
            return battlefield[row + 1][column - 1] == symbol;
        } else if (row >= 1 && row <= 9 && column >= 0 && column <= 8) {
            return battlefield[row - 1][column + 1] == symbol;
        } else if (row >= 0 && row <= 8 && column >= 0 && column <= 8) {
            return battlefield[row + 1][column + 1] == symbol;
        } else if (row >= 1 && row <= 9 && column >= 1 && column <= 9) {
            return battlefield[row - 1][column - 1] == symbol;
        } else if (row >= 0 && row <= 8) {
            return battlefield[row + 1][column] == symbol;
        } else if (row >= 1 && row <= 9) {
            return battlefield[row - 1][column] == symbol;
        } else if (column >= 1 && column <= 9) {
            return battlefield[row][column - 1] == symbol;
        } else if (column >= 0 && column <= 8) {
            return battlefield[row][column + 1] == symbol;
        }
        return false;
    }
    
1
ms_ napisał(a):

mam pare takich metod, które są takimi właśnie if-elsowymi potworami i nie wiem co z nimi zrobić, jak je dobrze napisać

  1. Pierwsze co mógłbyś zrobić, to nie używać dwóch zmiennych do reprezentowania pozycji, tylko jednej, np:
    boolean isMarkNearCell(Position pos, char symbol, char[][] battlefield) {
    
  2. Po drugie, mógłbyś użyć enuma zamiast char,
    boolean isMarkNearCell(Position pos, Symbol symbol, char[][] battlefield) {
    
  3. Po trzecie, mógłbyś schować swoją podwójną arraykę do klasy Bettlefield
    boolean isMarkNearCell(Position pos, Symbol symbol, Battlefield battlefield) {
    

Co do faktycznych poprawek, to musiałbyś się zastanowić co ta funkcja ma robić dokładnie, nazywa się isMarkNearCell, czyli rozumiem że podajesz jej jakąś pozycję, np 3,7 i ona ma sprawdzić czy dookoła tej pozycji, (czyli 2-4/6-8) są statki w podanym symbol?

Bo jeśli tak, to wystarczyłoby zrobić

@Override
boolean isMarkNearCell(int row, int column, char symbol, char[][] battlefield) {
    int startRow = Math.max(0, row - 1);
    int endRow = Math.min(9, row + 1); 

    int startCol = Math.max(0, column - 1);
    int endCol = Math.min(9, column + 1);  // zakładam że 0 i 9 to największy i najmniejszy index

    for (x = startRow; x < endRow; x++) {
      for (y = startCol; y < endCol; y++) {
        if (battlefield[x][y] == symbol) {
          return true;
        }
      }
    }
    return false;
}

Mając taką implementacje, możesz nawet operować -1 i +1 żeby zwiększyć zasięg szukanego obszaru.

1

Co do projektu Zookeeper - jest to jedynie program wczytujący liczbę i na jej podstawie drukujący jeden z wpisanych na sztywno rysunków ASCII-Art. Nie rozumiem, jak ma się on przydać przy rekrutacji.

2
ms_ napisał(a):

Staram się o staż/praktyki z Javy

Szczerze mówiąc, lepiej wyjdzie dla Ciebie jak nie pokażesz tego pracodawcom.

1

@ms_: Jak piszą wyżej, chyba trzeba sobie stawiać większe wyzwania, powodzenia!

1

@ms_:

Czytałam wiele ogłoszeń o pracę na stanowisku stażysty. Prawie nigdzie nie wymagali Springa.

Wiesz, w statucie uczelni medycznych nie jest nigdzie napisane, że trzeba mieć maturę z rozszerzonej biologii i chemii zdaną na minimum 90+% aby aplikować, ale rzeczywistość wygląda tak, że jeżeli masz mniej to konkurencja cię wygryzie.
Aktualnie parcie na IT ma zbyt wiele osób, aby twój kod zrobił jakiekolwiek wrażenie na kimkolwiek.
Prędzej czy później będziesz zmuszona nauczyć się jakiegoś z popularnych frameworków, więc dlaczego by nie zrobić tego teraz i wyróżnić się?

0

Ja nie wiem, ja się nie znam. Wpadłem na pomysł, poducze znajomego z programowania bo się trafił a ja coś tam obyczajami bo projekty o jakich myślę to ciut przyduże dla jednej osoby. A nawet nie przyduże ale poprzez potrzebę ogarnięcia wszystkiego mniej dopracowane. Doszedłem do etapu gdzie potrzebuje pomocnika mimo, że nic nie robię profesjonalnie. Jak Ty nie masz takich potrzeb to chyba też o czymś świadczy. Może zastanów się, zrób listę swoich potrzeb?

0

Za mało na staż raczej. Każdy z tych projektów do naklepania w max 10 minut. W dodatku brak nazewnictwa, kod nieczytelny.

0

Ja Cię mogę przyjąć na staż. Tylko nie mam firmy. Ale zajęcie Ci mogę znaleźć bez problemu. Oczywiście nieodpłatnie.

4

Zrób jeden duży i porządny projekt. Nie łam się wytkniętymi błędami, bo to jest konstruktywna krytyka. Ja pamiętam, jak zrobiłem pierwszy projekt tj. werbscrapera wyników meczów z GUI, żeby można było to filtrować itd. Dałem gdzieś do oceny, jakiś typ zjechał mnie jak burą sukę, że to jakieś g**no i... miał rację. My tu i tak jesteśmy delikatni XD

Polecam też ustosunkować się do postów, bo zazwyczaj jest tak, że ktoś przychodzi tutaj, prosi o ocenę, dostaje konstruktywną krytykę, następuje syndrom wyparcia i usuwają konto. Nawet jakbyś dostała w tej chwili pracę, to uwierz, że lepiej znaleźć później pracę, niż iść de facto nieprzygotowanym, że ktoś musi za Ciebie kod pisać. No, chyba że ktoś nie odczuwa stresu w takich sytuacjach, to zazdro XD

No i polecam czytać to forum. Ja dużo wyniosłem z czytania dyskusji tutaj.

0

@Riddle: co masz na myśli pisząc o ręcznym budowaniu JASON'a?

1
ms_ napisał(a):

@Riddle: co masz na myśli pisząc o ręcznym budowaniu JASON'a?

https://github.com/neb-dev-il/Orange-recruitment-task-lets-meet/blob/main/Orange-recruitment-task-lets-meet/src/Person.java

void printCalendar(int calendarNumber, LocalTime start, LocalTime end, List<LocalTime> meetingsStartsAndEnds) {
  System.out.printf("\nCalendar %d\n", calendarNumber);
  System.out.print("{\n" +
                   "  working_hours: {\n" +
                   "    start: \"" + start + "\",\n" +
                   "    end: \"" + end + "\"\n" +
                   " },\n" +
                     "planned_meeting: [\n");

  for (int i = 1; i <= meetingsStartsAndEnds.size() - 1; i = i + 2) {

      System.out.print("    start: \"" + meetingsStartsAndEnds.get(i - 1) + "\",\n" +
                       "    end: \"" + meetingsStartsAndEnds.get(i) + "\"\n" +
                       " },\n");
  }

  System.out.print("]\n" +
                 "}\n");
}

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