Moje zmagania z Java w Linuxie

0

Witam. Jak pisalem w innym miejscu https://4programmers.net/Forum/Oceny_i_recenzje/354634-prosty_kalkulator_w_konsoli_tylko_dla_danych_typu_int jestem userem Linuxa i mam cel sprobowac dolaczyc do projektu(projektow) open source kiedy uznam ze jestem wystarczajaco przydatny.
https://github.com/carneades3?tab=repositories - tu mozecie zobaczyc 11 z wielu innych programow w Java jakie napisalem - wybralem te najbardziej ciekawe i nadajace sie do oceny. Aktualnie w Java jestem na etapie przerabiania interfejsow, wyjatkow i JavaFX - wiec nie ma tam zaawansowanych rzeczy, ale mimo wszystko cwicze sie w programowaniu.
Staram sie jak najwiecej uzywac konsoli w Linuxie i jak najmniej pomagac sobie poprzez mysz. Jednak idzie mi to ciezko i nieraz daje za wygrana. Podrecznik man niewiele pomaga. Moje 2 powazne podejscia do vima byly porazka, w nano tez odpuscilem i aktualnie uzywam do programowania edytora tekstu kate badz innego. Wszystkie programy kompiluje i uruchamiam w konsoli, bardzo rzadko uzywam debugera, a kiedy juz uzyje to oczywiscie w konsoli debuguje. Pomaga mi tez System.err.println (w ANSI C i C++ nie uzywam wcale debugera, tylko fprintf(stderr, ) i cerr, a basha czasem uruchomie z -x). Oczywiscie zdaje sobie sprawe ze ma to zwiazek z tym ze moje programiki sa bardzo krotkie i tylko przeze mnie pisane a nie przez kogos innego.

A teraz do sedna sprawy:
Licze na krytyke. Przede wszystkim czy moj kod w Javie dobrze sie czyta dla innej osoby ?

  1. Repozytoria ContactsViewer i DrawingShapes to moje zmagania z GUI i grafika JavaFX.
    Reszta moich repozytoriow to programy konsolowe
  2. ComputerSimulator to prosta symulacja programowania w jezyku maszynowym (programowalem troche w NASM https://www.nasm.us/ i odpuscilem bo poziom trudnosci wzrasta wykladniczo w porownaniu z Java), uzywalem tablic i wyjatkow
  3. HierarchyOfQuadrilaterals - Za pomocą wzorow matematycznych program sprawdza, czy możliwe jest skonstruowanie czworokąta z podanych punktów układu współrzędnych i oblicza parametry tego czworokąta Do obliczen uzywa klasy java.math.BigDecimal, w tym programie po raz pierwszy stosowalem dziedziczenie
  4. CurrencyConverter - konwerter dla walut za pomoca https://javamoney.github.io/ - po raz pierwszy uzylem Mavena i nawet JUnit (ale nie w finalnym commicie) - od tego programu uwierzylem ze moze kiedys dolacze do open source, ale twardo stapam po ziemi i na razie wiem ze jeszcze duzo kodzenia samemu przede mna
  5. TicTacToe - gra w kolo i krzyz z komputerem, ktory ma zaimplementowany algorytm min-max. Nie jestem pewny czy dobrze go zaimplementowalem ale jeszcze nie wygralem z komputerem. W tym programie uzylem wzorca projektowego Model-Widok_Kontroler. Jednak to tylko moje mniemanie ze go uzylem poprawnie.
  6. HugeInteger - klasa probujaca nasladowac BigInteger w niewielkim zakresie, testowana przez asercje i BigInteger. Mam swiadomosc ze moje testy sa slabo czytelne.
  7. KnightsTourChessboard - podroz skoczka po szachownicy z podgladem - czy jest w stanie odwiedzic wszystkie pola i czy jest to podroz zamknieta https://pl.wikipedia.org/wiki/Problem_skoczka_szachowego , implemetacja za pomoca algorytmu heurystycznego
  8. EightQueensChessboard - https://pl.wikipedia.org/wiki/Problem_o%C5%9Bmiu_hetman%C3%B3w , implemetacja za pomoca algorytmu heurystycznego
  9. TurtleGraphics - grafika zolwia https://pl.wikipedia.org/wiki/Logo_(j%C4%99zyk_programowania)
  10. Poker - gra w pokera z komputerem

Programow w ANSI C (ktorego przerobilem w 70-80%) nie chce wrzucac bo sa nieczytelne, w bashu tez slabo czytelne, a w NASMie to nic ciekawego, jedynie mam satysfakcje ze probowalem asembler (nawet z polaczeniuz ANSI C), a w C++ to jestem dopiero na etapie wyrazen i napisalem kalkulator https://github.com/carneades3/CalculatorForInt

Jeszcze jedno pytanie: czy to co robie w efektywny sposob przyblizy mnie do open-source czy moze zmienic swoje postepowanie ?

5

bardzo rzadko uzywam debugera, a kiedy juz uzyje to oczywiscie w konsoli debuguje. Pomaga mi tez System.err.println (w ANSI C i C++ nie uzywam wcale debugera,

iiiiiii uważasz że to są dobre praktyki?

ja wiem że można mieć swoje "podejście" "styl", ale debugger to zwykłe, często bardzo pomocne narzędzie

nie wiem, takie podejście że ktoś na siłę unika używania tego narzędzia zawsze mi się kojarzy z takimi środowiskami, gdzie po prostu debugger jest mierny, ale w Javie chyba tak nie jest?

Dla przykładu w C#/VS możesz evaluować wyrażenia w locie, stawiać conditional breakpointy, modyfikować kod w locie, zmieniać wartości w locie, wykonywać kod line-by-line na konkretnym threadzie(iirc) i pewnie dużo, dużo więcej

4

Nie wiem jak można nie używać debuggera? Przecież to jest właśnie dobra praktyka a nie wyświetlanie randomowych linijek w konsoli...

Kolejna kwestia to używanie vima...Serio? Po co sobie tak utrudniasz życie?
IntelliJ Community!

Pracuje sam na Linuksie i o ile znajomość konsoli się mega przydaje, tak kompletnie nie rozumiem utrudniania sobie życia na aile...

0

@.andy

Kolejna kwestia to używanie vima...Serio? Po co sobie tak utrudniasz życie?
IntelliJ Community!

tzn. inaczej

na pewno warto jest wiedzieć jak zrobić wszystko z poziomu CLI, bo IDE czasem robią zbyt dużo czarów, jednakże do day2day developmentu oczywiście że porządne IDE.

1

@WeiXiao: zgadzam się że warto wiedzieć jak np. zbudować projekt maveva spod cli, tak samo jak warto wiedzieć jak korzystać z gita z linii poleceń, pomimo tego, że IJI ma super wtyczkę.

Jednak na co dzień pracę się ułatwia a nie dodatkowo utrudnia.

4

To co polecam:

  1. Zaczniesz używać porządnego IDE - IntelliJ Community jest za darmo i jest wspaniałe. Ma też wtyczkę do Vim'a IdeaVim więc nic nie stracisz. Inne IDE to Eclipse, NetBeans i Visual Studio Code z wtyczką do Javy.
  2. Zacznij porządnie używać git'a, 1 commit na każde repo, ty tak na poważnie? Gita można używać komfortowo z linii poleceń, dla jednej osoby wystarczą polecenia git {add, commit, diff, diff --cached, status, reset, checkout -b, branch, push}
  3. Naucz się Mavena lub Gradle, compile.sh to... żenada.
    3a) Jak już opanujesz takiego Mavena to się okaże że bardzo łatwo można dodać do projektu UnitTesty
  4. Jak chcesz mieć fest to zintegruj się z GitHubem tak żeby budował Ci projekt po każdym push'u i wysyłał email jak się nie kompiluje.
  5. Skoro bawisz się JavaFX to sprawdź SceneBuilder'a - super narzędzie, ułatwia pracę zwłaszcza na początku. Inne narzędzie warte polecenia to https://github.com/JonathanGiles/scenic-view

Command line'owe narzędzia najbardziej przydają się dla adminów i w pracy ops'owej, czyli jak trzeba wejść na serwer sprawdzić service xyz status czy usługa działa, zrobić tail -F app.log | grep error czy połączyć się z produkcyjną bazą danych za pomocą mysql. Ewentualnie jak setupujesz serwer sam, ale teraz robi się to narzędziami - cała konifguracja (np. programy do zainstalowania) trzymana jest jako kod (np. pliki yaml).

Programista Javy raczej za dużo wspólnego z command line'em nie ma. No może poza mvn clean verify...

Rozumiem że jesteś dopiero na początku przygody z programowaniem. Używanie GitHuba i Linuxa to kroki w dobrym kierunku. Radzę teraz skoncentrować się na punktach 1, 2 i 3.

Popatrz sobie na mojego mini-toola: https://github.com/marcin-chwedczuk/iunrar z przed kilku dni.

Tego typu przykładów jest na GitHubie od zatrzęsienia.

PS. Kodzik generalnie OK jak na początkującego. Widać że OOP masz już opanowane. Powodzenia!

1

Programista javy to programista crud w Springu. Uczenie się JavaFX nie ma żadnego sensu.

2

Moje 2 powazne podejscia do vima byly porazka

Jako osoba, która pracuje praktycznie wyłącznie w Vimie - pokaż na tej lalce gdzie ciebie Stallman dotykał, że stwierdziłeś, że Vim będzie dobrym edytorem do Javy? Zwłaszcza jak to jest twoje pierwsze podejście do Vima?

Ogólnie trolling 2/10 bo odpisałem, ale postaraj się następnym razem bardziej.

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