Nauka C# i problemy z nauką


#1

Dzień dobry,
Chciałbym zapytać czy jest ktoś w stanie podać jakieś dobre kursy na C#? Próbowałem znaleźć jakieś na yt i jak już znalazłem to nie zrozumiałem zupełnie nic. Osoba prowadząca te lekcje na yt tłumaczy bardzo starannie, powoli i dokładnie ale mimo to nie wszystko rozumiem. A jeśli dochodzi do pisania jakiegokolwiek pisania programu to jest “ALE DLACZEGO TAK?! SKAD ON TO WGL WZIĄŁ?!?!?!”. Nie chce się poddawać zanim zacznę bo to naprawdę wydaje się czymś dla mnie i chciałbym się tego nauczyć ale po prostu nie umiem. Nawet siedziałem nad poradnikami, które były napisane łopatologicznie wrecz żeby zrozumieć ale ja i tak nic nie rozumiem. Jest mi ktoś w stanie powiedzieć co miałbym zrobić? Później chciałem zacząć coś więcej działac w Unity (je już trochę ogarniam). Z góry dziękuję bardzo za pomoc.


#2
  1. Nie każdy może się nauczyć programować tak jak nie każdy może nauczyć się śpiewać czy prowadzić samochód (niektórym się tylko wydaje, ze umieją)
  2. Jeśli nie przeraża cię punkt 1 to próbuj dalej, z obserwacji wiem, że może z tym trochę zejść, ale w pewnym momencie mózg ‘zaskoczy’ a ty poczujesz coś w rodzaju olśnienia.
  3. Poszukaj płatnych na Udemy albo kup książkę. Nie wystarczy być specjalistą w danej dziedzinie, trzeba jeszcze mieć tego konkretnego skilla, dzięki któremu w łatwy sposób przekazuje się wiedzę. Na YT może wrzucić każdy, na Udemy już chyba nie bardzo a wydanie książki to jeszcze trudniejsza sprawa. Można się więc spodziewać, że jakościowo przeciętna książka będzie lepsza od losowego kursu z jutuba.
  4. Jeśli wszystko zawiedzie to poszukaj w sobie innych talentów, gdyby programowanie było takie łatwe to każdy na świecie był by programistą (analogicznie mieli bysmy swiat pełen sławnych piosenkarzy - a tak nie jest)

#3

@frozenshade kompletnie się z Tobą nie zgadzam. Mam inny pogląd na ten temat :slight_smile:

Każdy może się nauczyć programowania. Niektórym to będzie przychodziło prościej, innym trudniej, ale się da. Sam prowadziłem wewnętrzne szkolenia w firmie i to widać czy ktoś ma predyspozycje czy nie, ale nawet tych najbardziej opornych szło nauczyć.

Kosztowało to o wiele więcej czasu i nerwów niż w przypadku tych ze “statami programisty” ale dawało radę.

Szkoląc innych zauważyłem kilka blokad, które skutecznie uniemożliwiają pojęcie programowania. Głównie z podstaw inżynierii m.in:

-cyfrowa reprezentacja danych: co to jest bit i bajt? Jak można zapisać dane na bajtach? Czym się różnią dane cyfrowe od analogowych?

-podstawy logiki: co to jest prawda i fałsz? Jakie operacje można na nich wykonywać? Podstawy algebry booleowskiej

-podstawy elektroniki i architektury komputerów: jak działa prąd? Co się składa na komputer? Co to jest procesor i po co jest? Co to jest pamięć?

-podstawy matematyki: dzielenie, liczby zmiennoprzecinkowe, funkcje

-podstawy rozumienia abstrakcji: tu głównie inteligencja abstrakcyjna i wiedza, którą też da się ćwiczyć (przenoszenie uogólnienie, wyszukiwanie wzorców, uszczegółowianie- poruszanie się pomiędzy warstwami abstrakcji)

itp

Było kilka takich rzeczy, które wydawały się oczywiste i niewarte tłumaczenia, ale okazywało się, że nie każdy jest na tym samym poziomie wiedzy w podstawach. To zazwyczaj one sprawiają, że przyswajanie kolejnych informacji przy nauce programowania jest trudne :slight_smile:


#4

Może mylisz nauczenie z przyuczeniem, ewentualnie nauczeniem się pisania kodu. Wracając do prowadzenia samochodu - czasem widać jak pewne panie, niby nauczone, ale jednak wyczyniają cuda w miejscach do parkowania.

Jeśli potraktować, że jak ktoś umie przejechać samochodem od punktu A do punktu B już jest kierowcą, mimo, ze po drodze potrącił psa, wjechał na trawnik, jechał kawałek pod prąd, wszystko na jedynce bo nie umie zmienić biegów i jeszcze miał stłuczkę to tak, każdy może być kierowcą.
Tak samo osoba programująca: wyuczy się pewnych rozwiązań, napisze pętlę for, zrobi klasę, w niej funkcje. I teoretycznie będzie w stanie rozwiązać problem, tj napisać kod, który wykonuje daną czynność. Ale przyrównując ten kod do jazdy samochodem może to być większa zagłada niż to, co opisałem powyżej.
Piszę to z doświadczenia. Znam ludzi, którzy piszą kod, ba, nawet zarabiają jakoś na tym, czasem kompletnie nie rozumiejąc co robią, widziałem projekty takich ‘programistów’, poważnie, im lepiej by pewnie śpiewanie poszło albo inne występy artystyczne. Ich programistyczny rozwój zatrzymał się na etapie parsowania stringów albo czymś równie podstawowym. Tam, gdzie trzeba zdeserializować obiekt, pisząc własną bibliotekę lub używając gotowej, w zależności od potrzeb, ktoś taki ręcznie wyszuka interesujący go kawałek w stringu, powielając te czynności poprzez copy-paste w dziesiątkach miejsc w programie, bo nie rozumie, że można lepiej. Działa? Działa. Dojechał na miejsce. To jeden z autentycznych przykładów, osoba ‘programująca’ ponad 5 lat.

EDIT: jeśli takiemu powiesz, ze tu jest biblioteka, na guthubie, ściągnij sobie, zamiast wrzucać tego stringa wszędzie i tam go przeglądać to zdeserializuj sobie obiekt i jego dalej przekazuj, on to zrobi. Przyuczy się, będzie następnym razem (bezmyślnie) robił to, co się mu powie. Ja programowanie traktuję jako specyficzny rodzaj myślenia, podchodzenia do problemów. I tego właśnie brakuje niektórym, w rożnym stopniu.


#5

Może poczytaj sobie ten ( https://www.w3schools.com/js/DEFAULT.asp ) tutorial.
Wprawdzie odnosi się do JavaScriptu, ale są w nim fajnie pokazane podstawowe zagadnienia (funkcje, pętle, warunki…), które potem łatwo przeniesiesz na inne języki podczas ich nauki (o ile przyswoisz to co jest tam napisane) :smiley:

Odnosząc się do waszej rozmowy @frozenshade @ByerN
Myślę, że predyspozycje odgrywają dużą rolę w nauce programowania.
Z drugiej strony jeżeli są ludzie, którzy “klepią” kod nie rozumiejąc go, to wychodzi na to, że można “nauczyć” każdego :stuck_out_tongue:


#6

zaproponowałbym Tobie Construct 2/3 dla ogólnego zrozumienia programowania. Kompletnie nie rozumiałem nic z tej dziedziny, a dopiero Construct otworzył mi oczy. Tez próbowałem c# i było koszmarnie. Musisz ogarnąć podstawy, a Construct świetnie to tłumaczy. Dzięki temu i w Godot’ cie moge teraz troszke podłubać…
Tutoriali jest masa na yt, a i całkiem ciekawe gry mozna robić.


#7

Jako osoba, która rozpoczęła przygodę z programowaniem od C# - Unity mogę doradzić - Nie zaczynaj od C# i od Unity. Zacznij od czegoś bardziej przyjaznego JavaScript / Python - jak ogarniesz podstawy to możesz się przesiadać na C#. Jak już będziesz myślał, że umiesz programować - przeczytaj “Czysty Kod” i zacznij się uczyć od nowa :smiley:


#8

Programuje już 15 lat i nie ma nic gorszego niż programista korzystający non stop z gotowych bibliotek, bo mu się nie chce zastanowić i dwóch klas napisać. Sztuką jest umiejętność samodzielnego myślenia i umiejętność stworzenia czegoś poprawnie działającego.
Kopiowanie czyjchś rozwiązań czy bibliotek by wykorzystać tylko 1% tego co oferuje. Mam awersję do takich pseudoprogramistów co jedyne co umie to polaczyc gotowe rozwiazania. Zdecydowanie bardziej cenie kogos kto 15 razy napisze ten sam kod nawet przez kopiuj wklej i nie jest tego świadom że to źle niż bezmozga co uwaza ze jak cos jest gotowe to nie warto sie meczyc i napisac cos swojego.

Przez takich co uwazali podobnie ze jest biblioteka to korzystam to grozilo mi jako firmie 2 mln zlotych kary. Zlecenie na 500 tysiecy zlotych zatrudnilem 5 programistow i dwoch takich zdolniakow sie znalazli co oni to biblioteke do tego widzialo. Efekt wykorzystanie nielegalnie źrodel co wykryto przez zlecajacego. Po pol roku udalo sie dogadac ze projekt zostanie przepisany bez tych zrodel ale bez jakiejkolwiek zaplaty. W efekcie poplynela moja firma na 250 tysiecy zlotych.

Każdy może nauczyć się programować, trzeba mieć czasem więcej cierpliwości. Nikt nie musi byc wybitnie uzdolniony, w programowaniu liczy sie przede wszystkim dobre dzialanie. W mojej karierze spotkalem moze kilku programistów, których porównałbym do swojego poziomu. Ktorzy potrafia napisac wszystko. 80% z nich pracuje u mnie regularnie. Zdecydowanie wieksza czesc programistow jest łasych na czyiś kod, twierdzac że przyspieszają pracę, w rzeczywistości kryjąc swój brak umiejętności napisania czegoś. Najmniejsza czesc zajmuja programisci piszacy kilka razy ten sam kod, gubiacy sie w swoich rozwiazaniach i nie umiejący korzystac z modyfikatorów dostępu. Ci programiści albo szybko rezygnuja z programowania albo ucza sie ze szybciej cos zaplanowac niz pisac kilka razy.

U mnie testem na programiste do pracy byl przez dlugi czas napisanie programu do komunikacji sieciowej. Uzycie zewnetrznych bibliotek - u mnie pracy nie dostawał. Jak w C# nie umiesz sobie poradzic z warstwa sieciowa to niestety ale won! Teraz mam bardziej skomplikowany test umiejetnosci. Widzialem juniorow co pisali kilkukrotnie ta sama klase, ale i takich co do napisania tetrisa sciagneli tyle bibliotek ze projekt wazyl 200 MB.

Wracajac do kursow to osobiscie polecam od zera do gier kodera. Sam kiedys prowadzilem szkolenia, dzis na podstawie tych szkolen pisze ksiazke. To tez nie prawda ze wydanie ksiazki jest trudniejsze. Napisanie zajmuje czas wiekszy niz nagranie na youtube, ale w ksiazce nie zawrzesz etapow tworzenia rozwiazania i skupia sie na zrozuminiu elementów programowania. W polskim internecie jest malo dobrych kursow stad widze szanse dla siebie. W angielskim takze. W polskim internecie mozna znalezc bardzo zle przedstawienie chocby wzorca projektowego pyłek, który to w polsce jest tlumaczony na ten znany bardziej z baz danych.

Juz odchodzac znow od tematu, to programiści nie bardzo rozumieja wzorce projektowe. Jedyny wzorzec jaki umieja to singleton. Nawet fasady nie umieja zastosowac bo nie umieja korzystac z modyfikatorow dostepu.

Jeżeli mogę coś doradzić to nigdy ale to nigdy nie korzystaj z bibliotek innych jak nie wykorzystujesz minimum 50% tego co ona oferuje. Znam historie jak goscia wypierniczyli z roboty bo korzystal z bibliotek kiedy tylko cos mial stworzyc. Projekt z 20 MB urosl po roku pod jego opieka do 500 MB i wiekszosc bibliotek z ktorych skorzystal byly jedynie do uzycia niekomercyjnego. Jak znajomy opowiadal to po otrzymaniu wypowiedzenia opowiadal ze on to najlepszy programista i jeszcze beda tego zalowac. Szef sie wkurwil w koncu i mu powiedzial : „Nie przychodz juz wiecej i ciesz sie ze nie zaplacisz za to co zrobiles”. Podobno czerwony sie zrobil i nigdy juz sie w firmie nie pojawil.


#9

Nieumiejętność czytania licencji to jedno, ale z tego co piszesz wynika, ze nie ma nic złego w wyważaniu otwartych drzwi. Rozumując po twojemu to nawet użycie biblioteki do głupich JSONów jest zbrodnią :wink:
Jest masa gotowych, ‘wygrzanych’ bibliotek które ułatwiają pracę, pisząc wszystko od nowa samemu teoretycznie zwiększasz ilość możliwych błędów, twój kod trzeba będzie przecież wytestować. Opisujesz i krytykujesz jedno skrajne podejście a sam popadasz w skrajność po drugiej stronie. IMO rozsądne podejście, takie ‘z głową’ to bycie mniej więcej po środku (± w jedna lub drugą stronę, ale to też zależy od tego co robisz).


#10

Jednocześnie się zgodzę i nie… Faktycznie takie wykorzystanie gotowych bibliotek jest po prostu absurdalne (to tak jakby kupić młot pneumatyczny by wbić gwoździa). Lecz moim zdaniem korzystanie z gotowego kodu nie jest złe dopóki nie próbuje się zarabiać bez licencji na niego i wie co on robi. Jeśli ktoś wie że potrafi wykonać jakieś proste zadanie to czasem po prostu lepiej skorzystać z rozwiązania gotowego i nie wynajdować koła na nowo poświęcając zaoszczędzony czas na polerowanie karoserii, zwłaszcza jeśli jest to projekt non-profit. Lecz nawet w momencie gdy ktoś się dopiero uczy i bawi z językiem ale nie ma pojęcia jak coś wykonać i tkwi z danym problemem dniami i nocami to lepiej jest skorzystać z gotowca niż próbować za wszelką cenę zrobić to samemu lub go zrozumieć od podszewki. Sam się spotykałem z sytuacjami gdy siedziałem tydzień nie rozumiejąc “jak to działa?!” by wrócić po 2 miesiącach i zobaczyć jakie to było jasne.


#11

Radzę przeczytać jeszcze raz to co napisałem. Używanie bibliotek bo coś już jest gotowe jest głupie jeżeli możesz napisać te klasy sam. Json jest akurat slabym przykladem bo parser sam jest 80% takich bibliotek.
Ja skupilem się na głupocie i udawaniu, że jest się dobrym programistą jak na każde zadanie reaguje sie wyszukiwaniem w google rozwiazania. Do narysowania wykresu na ekranie nie potrzebujesz OpenGL albo DirectX.

Ja nie wyważam otwartych drzwi, uwazam ze nie ciągnie się za soba ogromnych bibliotek bo samemu nie chcialo sie poswiecic godziny na napisanie rozwiazania.

Dodatkowo mialem kontakt z duza iloscia takich osob co twierdza ze jak gotowe to czemu nie korzystac. Tylko najczesciej jak stwierdzalem ze nie korzystamy z tego i dasz rade napisac to w 2 dni to nagle sie okazywalo, ze odbierajacy zlecenie ma inne plany albo dostal inna super oferte. Mozesz miec inne doswiadczenia, ja widze ze czesto twierdzenie ze biblioteka jest to wykorzysta jest zapora bo brak umiejetnosci.

W mojej firmie korzysta sie z bibliotek jezeli jest to zasadne. Chcesz zrobic tetris to nie potrzebujesz silnika fizycznego. Wystarczy prosty system kolizji.


#12

Może całego .NETa nie używajmy? :slight_smile: Json to właśnie świetny przykład, owszem, mógł bym napisać serializację i deserializacje samemu, dla prostych danych było by to łatwe, trywialne, dla bardzo złożonych trudniejsze, ale nadal możliwe. Koniec końców skończył bym ze swoją własną dużą, uniwersalną biblioteką do serializacji czegokolwiek, którą pewnie używał bym w tych wszystkich miejscach, gdzie teraz używam tej gotowej, nawet w prostych projektach, bo przecież skoro raz napisałem, wygrzało się i działa to czemu nie. Różnica jest tylko taka, że musiał bym poświęcić czas na wyważenie otwartych drzwi, moja biblioteka na pewno zawierała by więcej błędów niż taka używana i testowana przez tysiące osób. No i zamiast wykonywać faktyczna pracę to skupiał bym się tak na prawdę na pierdołach.

Ja jestem dobrym programistą. Nie waham się czasem odpytać googli bo może ktoś lepszy w danej tematyce ode mnie rozwiązał podobny problem który akurat mam na warsztacie.

To wszystko zależy od skali i aktualnej potrzeby, od czasu i od tego co jest faktycznym celem. Tu, tak jak wszędzie potrzebny jest rozsądek i doświadczenie zamiast zwyczajnego przekreślania zewnętrznych bibliotek.


#13

Oczywiście jak nie wiesz jak coś zrobić możesz skorzystać. Tylko jeżeli się uczysz, to wszystko wymaga od Ciebie wysiłku i przezwyciężenia problemu.
Myślę, że część programistów lepiących biblioteki „wychowało” się na takim podejściu, że trudność to może jest gotowe.
Czasem samo wykorzystanie jakiejs biblioteki wymaga opracowania więcej czasu by ona działała niż napisanie rozwiązania. Wbrew pozorom walka o wynalezienie kola na nowo duzo uczy.

Trzeba wiedzieć kiedy warto biblioteke zaciągnąć a kiedy nie. Umiejętność znalezienia dobrej biblioteki jest cenna, ale to nie sa umiejetnosci programisty. Jak ktos składa meble z IKEI to nie jest stolarzem. Tak samo programista, jeżeli nie umie czegoś stworzyć w podstawowej formie to ciężko nazwać go programista.
Niektore biblioteki ciezko tez napisac samemu jak konstrukcja .docx czy innego microsofskiego oprogramowania.

Absurdy jakie spotkałem w kodach jakie przyszło mi widzieć. Czasem u moich pracowników, w większości zaś w rozwijanych aplikacjach:
a) Biblioteka do zapisu i odczytu plików. Wykorzystana do odczytania pliku tekstowego
b) Wspomniany tetris na silniku fizycznym
c) Strona WWW statyczna wizytówka postawiona na Wordpressie
d) Pingowanie do strony www zrobione na 3 bibliotekach. Cel : pokazanie ogromnego powiadomienia na ekranie gdy strona padnie. Do zrobienia w 2h
Na koniec coś absurdalnego:
e) W pewnym projekcie ktory mial sciagac zrodla z neta w formie pdf, jpeg, zip oraz docx. Znalazło się 8 bibliotek z czego: 2 do odczytu pdf, jedna do odczytu jpeg, jedna do zip oraz dwie do docx. Pozostale do obslugi protokolow sieciowych. Co program robil? Sciagal i pozwalal zapisac plik w dowolnym miejscu. Nie mial podgladu ani niczego takiego. Do projektu to dodano calkowicie bez powodu.

Ja nie jestem przeciwnikiem bibliotek, moje biblioteki pobrano kilka tysiecy razy, moje projekty z okolo tysiac. Boli ze wiekszosc pobralo te biblioteki tylko po to by skorzystac z czegos co mozna zrobic samemu krocej niz znalezienie mojej biblioteki i przeczytanie jej uzycia. Jak ktos sie obawia ze zle napisze no to trzeba popracowac nad planowaniem.

Korzystanie z bibliotek jest dobre w chwili, gdy potrzebujesz dużej części funkcjonalności tej biblioteki lub też nie możesz sam jej stworzyć. Średnio dobre jest to w sytuacji gdy nie chce Ci się i uzywasz gotowca. Lecz gdy czas na napisanie czegos jest rownowazny z zapoznaniem z dokumentacja lub tez wlasnie sie uczysz to z pewnoscia nie jest to czas na uzywanie bibliotek bez potrzeby.

Mozesz wziac biblioteke do komunikacji sieciowej co pozwala przesylac obiekty miedzy komputerami ale nie czyni to Cie kims kto umie to zaprogramowac. Umiesz wykorzystac to co gotowe. Nie jestem programista gier grajac w gry.


#14

Nie rozumiem troszkę Twojej postawy. Ja nie atakuje Ciebie, może poczułeś się urażony tym, że korzystasz. Spoko ja też korzystam, ale dla mnie to ostateczność. Jest pewna zasada zwana KISS, warto ją pamiętać w programowaniu.

Wiesz sprowadzenie problemu do absurdu to pewien rodzaj manipulacji, nie wiem kto się na to łapie ale nie ja. To co zacytowałeś miało swój kontekst i w tym kontekście należy to osadzić. Z mojego doświadczenia korzystanie z bibliotek jest często objawem lenistwa i braku umiejętności, często nie zdając sobie sprawy, że dodawanie biblioteki nie jest obojętne dla oprogramowania.

Jeżeli wstawiasz do swojego kodu obcy kod to bierzesz za niego odpowiedzialność a jednocześnie nie zawsze spełnia on to co chcesz Ty zrobić. Czasem dodanie biblioteki to zabieranie sie do problemu jak pies do jeża, spotkałem takie rozwiązania w stylu, ta biblioteka rozwiazuje taki problem ale by do niej wrzucic dane musze miec jeszcze inna, a tam wymagana jeszcze konwersja danych to jeszcze inna wezme.

Tutaj młody programista pyta czy znamy jakieś kursy dobre. Polecanie mu korzystania z bibliotek nie jest dla niego dobre. Jakieś podstawy musi znac oraz nie powinny jego projekty w portfolio zawierać ze współtwórcami są x, y i z. Bo czesto licencje sa oparte o uwzglednienie autorstwa, o czym pewnie wiesz i z pewnością dodajesz w kodzie i w dokumentacji, ewentualnie creditsach. Jak już się nauczy sam stawiać czoła problemom to wtedy może zacząć zastanawiać się w swoich projektach czy coś wymaga wiecej czasu niz uzycie gotowca, ale do tego trzeba doświadczenia.

Ja nie jestem Tobie ani nikomu tu przeciwny. Biblioteki tak, ale nie z powodu wlasnego lenistwa i minimalnego wykorzystania. Przez minimalne wykorzystanie rozumiem np wykorzystanie biblioteki do odczytu plikow, gdy w C# 4 linijki kodu zalatwiaja odczyt pliku tekstowego.

Mam nadzieję, że kwestia wyjaśniona. Nie róbmy dalej offtopu.

Co do autora tematu:
Mozesz jeszcze sprobowac ze starozytnym juz jezykiem PASCAL. On jest bardzo intuicyjny i w polskim internecie znajdziesz mnóstwo darmowej wiedzy. Bardzo dobrej, bo wiele uczelni wyzszych nadal do 2010 roku uczyła Pascala ( szok, ale tak było ). Popisz w nim proste gierki to przejscie na C# nie powinno stanowic problemu.


#15

Morał z tej bajki jest taki, że do wszystkiego trzeba podchodzić z głową. Zrobisz overkilla używając niepotrzebnej biblioteki, to się może zemścić (np. rozmiarem). Nie jesteś w stanie rozwiązać problemu bez użycia biblioteki? Użyj biblioteki :smiley:

Wszak u podstaw programowania leży rozwiązywanie problemów :smiley:

PS. Z tej konwersacji płynie jeszcze jeden ważny morał:
Jeżeli pracujesz dla kogoś i natrafisz na ścianę, to zanim użyjesz jakiegoś zewnętrznego kodu, skonsultuj się z szefem, bo możesz narobić ambarasu :smiley:


#16

Nie poczułem się urażony, na samym wstępnie zaznaczyłem, że twój problem był spowodowany tym, że programiści nie czytali licencji. Samo używanie bibliotek to inna sprawa i cały czas podkreślam, że trzeba się po prostu kierować rozsądkiem. A argument, ze skoro umiem coś sam napisać to powinienem to zrobić zamiast korzystać z bibliotek nie zawsze jest słuszny, z wielu powodów, nie tylko tych, które wymieniłem.

Co do sprowadzenia do absurdu, po prostu poszedłem w drugą skrajność. Nic więcej. Gdzież bym śmiał manipulować…

A z mojego nie, mamy więc inne doświadczenia i tu można by zakończyć temat bo nie widzę sensu w nawracaniu kogokolwiek na używanie bibliotek w celu zwyczajnego ułatwienia sobie pracy. Skoro nie chce to widocznie tak lubi.


#17

Programista musi być w stanie rozwiązywać problemy :slight_smile: I poruszać się pomiędzy poziomami abstrakcji. Przewinęło się gdzieś tam KISS. Ja dorzucę np DRY. Przeczytałem dyskusję i wydaje mi się, że nie można popadać w takie skrajności. Wciąganie całego internetu po to by sparsować głupiego JSONa to błąd. Pisanie własnego parsera JSONów to jeszcze większy błąd. Wiem, że podane przykłady są absurdalne, no ale bywa różnie. Zazwyczaj frameworki, w których pracujemy mają gotowy zestaw tego co trzeba do danego zadania.

Pisanie własnego parsera JSONów w ramach nauki to ćwiczenie :stuck_out_tongue: Ale gdybym zobaczył, że któryś z moich podopiecznych lub współpracowników pisze sobie sam w produkcyjnym kodzie parser JSONów albo skleja je ręcznie w kodzie, to by nie miał za lekko :stuck_out_tongue:

Negowanie sensowności używania gotowych bibliotek uważam za szkodliwe i wolałbym by żaden młody developer nie wziął sobie takiej myśli do serca. Wszystko trzeba robić z głową, a odpowiedni dobór bibliotek to jedna z cech, która powinna towarzyszyć każdemu programiście.


#18

Ok, widzę że dyskusja poszła zupełnie w kalafiory to może parę zdań dla nowych użytkowników z podobnym problemem.

Przede wszystkim praktycznie nigdy nie uczysz się “C#”
uczysz się

  • konkretnego języka
  • w kontekście konkretnych probelmów
  • najczęściej konkretnych bibliotek / frameworków
    (żadnego sensownej wielkości projektu nie piszesz od zera bo się nie da,
    ale można polegać na różnych bibliotekach w różnym stopniu)
  • i z konkretnym zestawem narzędzi wspomagających typu edytory, debugery itd

Jak już się jakiegoś języka poduczysz to inne są podobne, więc wtedy tylko wiesz ze w języku A coś się robi tak, więc teraz dowiadujesz się jak to samo wygląda w języku B.

Języki, biblioteki i frameworki są bardzo rozbudowane i ciągle się zmieniają, więc nawet profesjonaliści nie znają wszystkich zakamarków.
Każdy zna jakiś fragment który mu jest potrzebny, i możliwie dużo ogólnych często spotykanych wzorów.
Profesjonaliści znają ich naprawdę dużo z racji doświadczenia.

Na start:

  • Znajdź możliwie proste środowisko, jeśli interesuje Cie konkretnie C# Visual Studio Express jest darmowym bardzo dobrym edytorem, najprostsze aplikacje to będą aplikacje konsolowe które po prostu wypisują i wczytują tekst w oknie konsoli - te są najlepsze na start bo nie musisz się bawić z debugowaniem grafiki itd. możesz sobie tam pisać różne programy i się uczyć
  • są też serwisy typu https://www.hackerrank.com/ które maja konkretne zadania do wykonania w takim prostym trybie gdzie możesz poduczyć się algorytmów, które są podstawą akademickiej edukacji programistów bo uczą myślenia

Niestety powyższe są dość nudne i mało praktyczne dla większości zastosowań.
Zwykle lepiej jest postawić sobie jakieś zadanie i próbować je zrealizować różnymi narzędziami.
Jeśli chcesz się nauczyć kodować żeby rozwiązać jakiś problem np zrobić prostą grę musisz nauczyć się nie tyle języka co języka i narzędzi wokół.
Np Unity + C# + losowych bibliotek które akurat się przydadzą.
Tu dobrze się zapytać czy to co próbujesz zrobić da się jakoś sensownie zrobić tymi narzędziami czy lepiej nie próbować.

To jest zupełnie inne podejście gdzie C# to będziesz znał tak sobie, ale umiesz zrobić statek który się rusza i strzela.

Na koniec jest wiele technik organizacji kodu jak masz już go dużo, wolno działa i gubisz się przy rozwijaniu projektu. Żeby to zrozumieć trzeba najpierw doświadczyć jak wygląda bałagan, a potem przejrzeć poradniki jak taki bałagan można posprzątać. Generalnie większość praktycznych projektów am jakiś poziom bałaganu. ale im lepiej umiesz sprzątać tym mniej zwalniają pracę przy nowych funkcjach i tym mniej niezauważonych błędów trzeba co chwilę naprawiać.

I zwykle nie pracujesz sam tylko w zespole, z tym wiąże się kolejna masa różnych technik i poradników jak sprawnie pracować w grupie.

Profesjonalny programista umie połączyć te światy - jak mu klient zleci umie zrobić szybko statek co strzela bo zna różne narzędzia - ale też wie jaki kod chodzi pod spodem żeby ten statek strzelał i umie sobie dopisać coś samemu albo dokleić jakąś bibliotekę jak domyślne rozwiązanie nie działa zgodnie z oczekiwaniami. I wie jak zarządzać dużym projektem żeby nie robił się kompletny bałagan. Wie jak dogadać się z innymi członkami zespołu.

W praktyce jest tego na tyle dużo że nikt nie zna wszystkiego, ale im więcej wiesz tym więcej możesz zrobić. Zwykle specjalizujesz się w jakimś zbiorze tematów.

I poradniki też musisz wybierać pod konkretną rzecz której się uczysz.
Inne poradniki pokażą jak używać języka, inne jak używać danego narzędzia, inne jak organizować kod żeby ograniczać bałagan.
I jak już ogarniasz podstawy z poradników to języki i narzędzia mają oficjalne dokumentacje które warto przeglądać żeby dowiedzieć się u źródła co twórcy udostępnili.
I jest dużo szkół sprzątania każda ma masę tutoriali, konferencji i książek uczących jak sprzątać.


#19

Wracając do pierwszej odpowiedzi o karach za licencję.

Ja tu widzę trochę inny problem - co to za pomysł że junior bez pieczątki seniora czy architekta dodaje do projektu jakiś losowy syf, zwłaszcza nie legalny…

Biblioteki są bardzo pomocne do wielu problemów ale też robią własne problemy.
Akurat rozmiar w MB to jak nie pracujesz na drewnianym kompie nie jest zwykle problemem.
Problemy prawne są dużymi problemami, wypadałoby chociaż rzucić okiem na licencje, a w porządnej dużej firmie mieć jakiś dział prawny czy chociaż prawnika.
I wszystkie problemy z kolizjami wersji na zależnościach. Ukrytych zależnościach. Niewspieranych konfiguracjach w różnych wersjach. Znanych bugach których nikt nie chce naprawić.

Dodanie biblioteki to istotna decyzja projektowa. Trzeba patrzyć co się dodaje i po co.

Pisanie wszystkiego z palca to Januszsoft w drugą stronę. Zajmie za dużo czasu, in-housowe rozwiązanie będzie nie dotestowane, nie wydajne i niewygodne w użyciu i utrzymaniu.

Dlatego senior powinien takie decyzje nadzorować.
Narzekać ze junior jest juniorem to mało profesjonalne.
A skutki opłakane jak widać w przykładzie.


#20

Bardzo dużo napisałeś dodatkowo. Trzeba pamiętać by umieć coś samemu napisać i jest to pierwszy krok. Znam programistów co wrzucają w kod coś co napisać da się szybciej niż w ogóle znaleźć coś gotowego.
Widziałem w kodach wielokrotnie biblioteki open source, ktore wymagaly by i kod wykorzystujacy dana biblioteke byl open source.

Jasne robienie samochodu od zera, czy przytaczanego statku nie ma sensu, lecz jak potrzebujesz tylko z tego koła to jest to glupie.

Nie mogę się zgodzić, że szastanie MB jest ok. Te MB jak i zwykle kolejne po odpaleniu zabieraja pamięć. Tylko ktoś piszący dla siebie lub piszący niewielkie oprogramowanie może stwierdzać, że megabajty nic nie zmacza w obecnych czasach.

Ja np pisałem serwis ktory po uruchomieniu sciagał 1 GB danych, te dane musiały tam zostać i być zorganizowane. Dodanie kolejnych megabajtów może się wydawać nic nie znaczącymi, lecz jak nie wykorzystujesz calego organizatora danych to nie ma sensu wrzucac takiej biblioteki, gdzie kazde dzialanie bedzie uruchamiac ciag zdarzen.

W obecnej pracy np mamy dwa ograniczenia. Serwer pracowniczy, gdzie uruchamia sie okolo 1000 aplikacji kazdego dnia. Poswiecilismy z kolegami miesiac by napisac cos co bylo gotowe ale zajmowalo 30 MB po wgraniu do projektu i 270 MB po uruchmieniu. Każde wrzucone dane były powielane w niewiadomy dla nas sposob, chyba kompresowane z gory, bo 1MB dawal w przeliczeniu 1,4 MB. Jak masz aplikacje juz wazaca 120 MB a serwer ma ograniczona pamiec to musisz sie juz ograniczać. Wynajem wiekszego serwera to czesto ogromne koszta. To nie jest serwer pod stronke WWW.

Z kolei w innym projekcie musislismy wyrzucic rdzen projektu oparty o dziurawa biblioteke. Ta powodowala ze aplikacja po 24h juz potrafila wazyc 200-300%. Zorientowano sie dopiero jak jedna panna napisala ze jej wolno dziala aplikacja i sie przycina gdy po wejsciu zajmowala 1,4GB!! w pamięci. Praca na terminalach taka jest ze mozna zamknac swojego kompa i zostawic otwartw wszystko na serwerze.

W dobie coraz czestszego wykorzystania serwerow myslenie w kategorii co tam kolejne kilka megabajtow moze sie przekladac w jakiejs firmie na setki uruchomionych aplikacji na tym samym kompie.

Spotkalem nawet takie biblioteki ktore wykorzystywaly system by cos przechowywac i nie dalo sie uruchomic dwoch aplikacji z dana biblioteka.

Na poczatek tylko i wylacznie wlasny kod. Dopiero dlugi czas na przygotowanie rozwiazania powinno sklonic do poszukiwan. Biblioteki maja to do siebie ze chca rozwiazywac jak najwiecej problemow na raz. Tym samym sa czesto obciazajace nadto co potrzebuje.