Dzięki, bo faktycznie wykonałem obronę Też spotkałem się z opinią, że w Javie [chyba też w C#] obiektowość jest wymuszona i narzucona. W C++ to jest decyzja programisty [w pythonie też]. Można pisać zarówno obiektowo jak i nie, a nawet pisząc nieobiektowo, korzystać z napisanych obiektowo bibliotek [np STL] Jednak, tak jak to napisał autor, jak [po]zna się więcej języków na początku, to lepiej, potem łatwiej można wybrać i lepiej używać tylko jednego, swojego ulubionego.
W C# i JAVIE można mieć jedną klasę i w niej umieszczać wszystkie metody, czy nawet jedną metodę i mając gdzieś klasy i dziedziczenie. Ale czy to zgodne z jakimkolwiek stylem programowania w tych językach? Oczywiście, że nie.
Klasy są po to, żeby zebrać do kupy powiązane ze sobą metody i zmienne. Są po to żeby pomoc w utrzymaniu porządku w kodzie i łatwiejszym jego zrozumieniu, zwłaszcza przy wracaniu do niego. Sprawiają, że programy są prostsze w rozbudowie. Ułatwiają testowanie. Wiem, że można czuć niechęć do klas, bo zmuszają do myślenia na wyższym poziomie abstrakcji, a i bez tego samo programowanie łatwe nie jest
Wcale nie trzeba stosować hermetyzacji, dziedziczenia, konstruktów, destruktorów... Ale wszystko to można stosować i prawidło zastosowane, naprawdę ułatwia życie, a sumarycznie kod jest porównywalny długością lub krótszy niż przy pisaniu "funkcjonalnie".
Nie jestem programista z wykształcenia więc wiadomo, moje rady ofc są nie profesjonalne. Nie wiem jakie są. Więc napiszę bardziej jak coś ugryźć z programowania.
Zaczynałem od C++ i przez jakiś czas to był mój ulubiony język. Aż w końcu stwierdziłem, że mam dość tego gów.. i pokochałem C.
C++ to język idealny do pisania gier. Chcesz pisać gry? Nic lepszego nie znajdziesz. Książki do C++ to nędza i stracony czas. Nie otwierać dla własnego dobra. Jak już się uczyć to z http://www.learncpp.com/132
Co warto wg mnie przeczytać/zrobić jak celuje się w C?
-tak czy siak zapoznać się z durnym C++ żeby wiedzieć co się "traci". Pooglądać jakieś
wystąpienia Strupa gdzie pokazuje że pointer to zło i odpowiedzią jest modern C++ .
Potem zazwyczaj jest przykład kodu którego nie napisałaby nawet osoba upośledzona i przykład jak styl modern C++ uchroniłby nas przed tym. A między slajdami żeby się nie nudziło co jakiś czas pójdzie charch w stronę C jaki to jest zły język.
Dobra. Dalej.
-Zainstalować linucha. Zainstalować linucha powinno się zawsze. (nie przejdziecie sigalarm bez tego hue)
-Założyć konto IRC na freenode (baza wiedzy)
-libc manual
-gcc manual
-gdb manual
-zapoznać się z valgrindem, strace, ltrace
-Unix Network Programming - Richard Stevens ( bardzo fajna książka, z nieznanych mi powodów uważana za kiepską/za starą )
-pisać w C . Czasami można się pomodlić jak coś za trudne.
-mastering linux kernel zacząłem czytać i nawet jest fajne ale wiadomo. Nie potwierdzam na 100%.
Ok rzuciłem pare haseł fajnie.
Inne języki które warto zgłebić wg mnie. Niektórych nie do końca nazwałbym językami ale olać.
Bash, PHP, JS, HTML/CSS.
Co do IDE? Wg mnie strata czasu ale jak kto woli ja używam kate + gcc i dla mnie starcza.
Wiesz co? Jakieś 10 lat temu może i bym nawet się z tobą zgodził. Bo Twoja wypowiedź wynika nie z braku wiedzy, ale z chęci zrobienia wszystkiego samemu, masz ambicje i nie lubisz korzystać z gotowych bibliotek/komponentów skoro możesz coś zrobić sam.
Tak naprawdę powinieneś uczyć się C tylko w jednym przypadku: chcesz pisać programy na środowiska/urządzenia, które nie znają C++ (np. arduino). W innym przypadku to kompletna strata czasu.
Lubisz pisać sam komponenty, które C++ ma w bibliotece standardowej? Szacun. Ale prawdopodobieństwo, że "nie programista z wykształcenia" napisze je lepiej niż twórcy kompilatora jest znikome.
Tak, dużo książek do C++ jest do niczego. Ale jest też kilka dobrych. Nie można wszystkich od razu skreślać. Polecam poczytać ten wątek: http://4programmers.net/Algorytmy/Ksi%C4%85%C5%BCki_do_algorytmiki93
Ja pracuje w Visual Studio oczywiście na Windows. Czy potrafię napisać kod w notatniku? Oczywiście. Ale w VS trwa to dwa razy krócej, dzięki świetnemu IntelliSense i snippetom. A jak ktoś zna jeszcze Vim'a... Jak ktoś sobie lubi wbijać każdy znak kodu osobiście to nie bronię.
PS. Wiesz czego się warto uczyć żeby znaleźć pracę jako programista? Java/JavaScript/C# ewentualnie Python. Podstawy HTML i CSS powinien znać każdy. Front-end developer powinien znać go dobrze.
PS2. Mam magisterkę z informatyki, oficjalnie pracuje jako programista już 3 lata i jestem na pierwszej stronie rankingu polskiego spoja. Więc tak,moją wypowiedź uważam za profesjonalną.
Do wszystkiego należy podchodzić z odrobiną rozsądku i sceptyzmu. Ksiązki do informatyki to nie tylko, ksiązki do nauki konkretnego jednego języka programowania [c, c++ itd] ale także, może nawet przede wszystkim wszystkie inne ksiązki, które nie uczą posługiwania się tylko konkretnym jednym narzędziem [językiem programowania]. Książki takie trzeba umieć czytać, czy raczej nauczyć się ich właściwie używać i korzystać z nich.
A dyskusje na forum? Mam[y] ten komfort, że [to smutne] ale można po prostu je ignorować:
-- no comments
Jeżeli ktoś chce pracować jako programista to pewnie faktycznie może zapomnieć co napisałem powyżej. nie poczuwam się jako PRAWDZIWY programista. Chciałem pokazać pewną inną ścieżkę
Ja piszę programy ze względu bardziej na hobby bo to nie jest moja praca. Choć w pracy czasem pomaga.
" nie lubisz korzystać z gotowych bibliotek/komponentów skoro możesz coś zrobić sam."
Ja używam bibliotek. Po prostu w pewnym momencie doszedłem do punktu, że stwierdziłem, że wszystkie te rzeczy które daje mi C++ są praktycznie dla mnie nie przydatne.
Operator Overloading? Prowadzi do totalnego chaosu. Rozumiem możliwość przeciążania '=' i copy constructor reszta bez sensu.
Inherit? Chyba tylko warto to poznać ze względu na sam fakt, żeby wiedzieć, że coś takiego istnieje.
Nigdy w C++ nie miałem nawet raz okazji użyć. Zwyczajnie umieszczałem klase w klasie (chyba kompozycja się to nazywa?).
Templates. No to jest nawet fajne ale też nie do końca. Specjalizacja prowadzi do kopiowania kodu (piszesz wszystko od zera, a może chcesz zmienić tylko jedną rzecz). Czasami trzeba przenieść funkcje z dwoma template do headera inaczej kompilator nie da sobie rady. Ostateczne i chyba jedyne sensowne zastosowanie to przy tworzeniu kontenerów.
Klasy. Klasy są bardzo miłe, złego słowa o nich nie powiem. Jednak jakoś wystarcza mi struct w C.
Exceptions. Z tym miałem największy zgrzyt Nie podoba mi się idea obsługi błędów w C++. Rzut z założenia kończy program. jak nie złapałeś to Twój problem. Oczywiście jest terminate czy jakoś tak ale ja nie chcę ustawiac co chwile terminate bo mam kilka procesów komunikujących się i chcę np. Jak by coś poszło nie tak zabić je wszystkie na raz albo przed zabiciem jednego przesłać któremuś coś tam etc. Po prostu obsługa błędu w C++ jest skrajnie nieprzyjazna. Try wadzi.
Smart pointer czy jakoś tak, którym się tak ludzie zachwycają. Ma on o ile kojarzę uwalniać pamięć za Ciebie o ile dobrze pamiętam. Świetny sposób aby wyrobić w sobie nawyk nieuwalniania pamięci;)
Wracając do bibliotek. Otóż biblioteki które używam to biblioteki systemowe. Nie systemowe których czasem użyję -> GMP, curl, ncurses. W standardzie C++ interesujących funkcji czy obiektów za wiele dla mnie nie ma.
Na szczęście nie muszę tykać GUI. Bo bym musiał katować się z Qt i wtedy ok, tylko C++.
Inna pewnie warta zaznajomienia biblioteka dla C++ to Boost. Ale to też nie standard (narazie).
Co do książek jak już poległem na książce Bjarnego (czy jak mu tam) to stwierdziłem, że nie ma dla mnie nadziei.
Ok, nie będę się rozpisywał, ale jak chcesz użyć w programie w C kontenera takiego jak mapa albo nawet algorytmu sortowania to...
a) piszesz je sam
b) wklejasz bo masz już napisane i gotowe kody czekają w plikach, jak nie to a
c) szukasz kodu w internecie i wtedy wklejasz
d) nie wiem o czymś?
Jeśli a, b lub to to czy lubisz jak Twój kod, który robi jakąś tylko pierdołę jest na kilka ekranów?
Do rozwiązywania zadań to biblioteka standardowa jest największą mocą C++.
Te rzeczy, które wymieniłeś są w C++, można ale nie trzeba ich stosować. Mówiąc z grubsza są w kontekście spoja mało przydatne. "Przekładaj kompozycje nad dziedziczenie" - to jedna z głównych zasad pisania dobrego kodu.
Czy tu chodzi o SPOJ'a? Czy tu chodzi o C/C++? Nie, nie, zupełnie nie!. Wystarczy kliknąć w pierwszy link, poczytać i pomyśleć. Wystarczy kliknąć w drugi link, poczytać, pośmiać się i zadumać. I tylko tyle.
PS
Jak by ktoś nie wiedział. Dowolny język programowania [w tym i C i C++] to tylko narzędzia.
Jeżeli nie domyśliłeś się, to SPOJ jest także tylko narzędziem. Dla uczących się, jednym z wielu narzędzi wspomagającym naukę. Dla nauczycieli SPOJ jest dodatkowym narzędziem umożliwiającym i ułatwiającym ocenianie postępu procesu nauczania.
Czy zaglądnąłeś/aś pod te dwa linki [są w moim pierwszym poście].Jeżeli nie, to zrób to koniecznie, chociaż to wcale nie jedyna i nie prosta droga.
Trochę chodzi o SPOJa i trochę o języki.
Na początku tylko napomknę, że nie spotkałem jeszcze prawdziwego programisty, który by szczerze nienawidził jakiegoś języka czy systemu operacyjnego. Tak samo trudno mi sobie wyobrazić rasowego spojowca, który by nienawidził jakiegoś problemu czy kategorii problemów.
Programując dla dużej korporacji rzadko ma się wpływ na to, jakiego języka się używa; z reguły trzeba się szybko dostosować, i potem nieustannie dążyć do absolutnej doskonałości jak Brus Li z Szaolin.
W SPOJu natomiast chodzi o rozrywkę i naukę (w takiej kolejności), więc możemy sobie wybierać co nam się podoba, zakochiwać się i zdradzać wszystkie języki po kolei. I to jest piękne, bo niezależnie od poznawania ich składni niejako niepostrzeżenie uczymy się myśleć!
Mamy w szufladzie śrubokręt, młotek, wiertarkę, pilnik, dłuto, nożyce i gdy nagle potrzebujemy porąbać drewno to okaże się, że będziemy potrafili to jakoś zrobić nawet i bez siekiery.
PS. Przeczytałem już jakiś czas temu oba te artykuły. Na kilka drobnych detali mam nieco inne spojrzenie, ale w ogólności podpisuję się pod nimi wszystkimi rękami i nogami.
OT: Nożesz jasny gwint, ciągle nie mogę ogarnąć tego nowego forum Ileż to trzeba się się naklikać żeby jednego marnego posta wrzucić!
Siema czy ktoś z was mógłby napisać mu oprogramowanie dla restauracji23 ? Podjąłby się z was ktoś? Z góry dzięki za pomoc.
Potraktowałem to jako próbkę lansowania rozwiązania podanego w linku więc podmieniłem link, bo przecież autor postu prosi o pomoc w napisaniu oprogramowania, a nie chce nam wcisnąc już gotowego?
PS
Kto to jest ten anonimowy mu?
PS 2
Takie oprogramowanie [do obsługi restauracji] to kawał dużej pracy dla prawdziwego programisty i z "góry dziękuję za pomoc" to moim skromnym zdaniem dużo za mało.
Pamiętajcie że to nie ilość posiadanych książek tylko wiedza sprawia że jesteście prawdziwym programistą. Samo posiadanie książek bez czytania sprawia że jesteś kolekcjonerem.
https://drive.google.com/file/d/1zyyh42Ejg4dfPSLLrQF19E3Iea9ZWgNe/view?usp=drivesdk24
Tak, to moje, przeczytałem w całości ze 3
Jak na mnie zależy od książki. Nie każda książka jest po to, aby przeczytać ją od deski do deski. Wiele (a z poważnych książek większość) służy jedynie jako pomoc w rodzaju “zapomniałem jakiejś tam złożonej teorii, ale jest ona ładnie opisana w tej książce” albo “wiem co mam zrobić, ale nigdy nie szukałem wiedzy z tego zakresu, a ponieważ problem jest dość złożony to poszukam czegoś kompletnego na ten temat w książce zamiast tracić czas na wertowanie tutoriali, filmików na YT i samouczków”.
Masz oczywiście [sporo] rację[i] i dlatego @j4rooo przeczytał w całości “tylko” 3. Ale z drugiej strony traakie książki nie służą do czytania tylko do “studiowania” i delektowania się zawartym w nim pięknem i oglądaniem perełek programowania. Jednak jeżeli nie czytać, to warto je chociaż przejżeć, aby w razie konieczności, wiedzieć że gdzieś coś takiego jest i gdzie to jest, a nie zawsze spis treści czy indeksy wystarczą.
BTW
Ta półka jest trochę monotematyczna, ale oczywiście zazdroszczę Ci jej i gratuluję. No i jest na pierwszym miejscu pozycja, o której nie tak dawno wspominałem Przy przeprowadzkach to jednak trochę problem, bo przecież takich, nie o algorytmach, półek zapewne masz więcej?
Tak, była specialnie znaleziona przez tamto odwołanie. Godna polecenia, bo pomoga tam gdzie nie pomagają pozostałe, albo wzmacnia ich moc
Jest jeszcze pół matematyczno-fizycznej i pół z jakimiś przypadkowymi książkami infromatycznymi. Pozostałe działy w domu nie są w mojej jurysdykcji Część też została u rodziców ze względu na ograniczoną wielość regałów.
Kim jest prawdziwy programista, pracuję w zawodzie z 7 lat, obecnie pracując dla jednego z największych ecommerce w Europie i się zastanawiam kim jest prawdziwy programista
Czy programista po UW z setkami algorytmów w głowie, czy programista po uczelni technicznej, czy samouk…
Nie ma czegoś takiego jak prawdziwy programista…
A czy kolego przeczytałeś chociaż pierwszy post [łącznie z obu linkami], czy tylko rzuciłeś okiem na temat wątku!?
Sprawdziłem, oba linki nadal działają, a na stronie z pierwszego [linku] jest jeszcze więcej komentarzy. Co do drugiego, próbowałem znaleźć orginał, na razie bez efektów, ale znalazłem trochę inną, nowszą?, wersję: Prawdziwi Programiści4
Jeżeli chcesz wiedzieć, co ja o tym wszystkim sądzę, to może po prostu przeczytaj dokładniej cały ten wątek: “Jak zostać Prawdziwym Programistą” to tylko tytuł. Mógłbym równie dobrze napisać /[nazwać]: “Poradnik początkującego programisty” lub “Jak być lepszym [czystszym, szybszym … etc] programistą” czy jeszcze inaczej. I chodzi tu oczywiści o pisanie czystszego kodu a nie o poranne szybkie wstawanie z łóżka i poranną toaletę.
Suggested Topics
Topic | Category | Replies | Views | Activity |
---|---|---|---|---|
I want Preparation Tips for an Upcoming SPOJ Contest | Tutoriale, poradniki | 2 | 163 | Jun '24 |