Skocz do zawartości
PACIK19

C++ czy C# i od czego zacząć? (kursy, itp.)

Rekomendowane odpowiedzi

Witam,

naszła mnie ogromna chęć zdobycia wiedzy i poszerzenia swoich horyzontów o właśnie dziedzinę "programowania".
Zacząłem się już zabierać do programowania, ale mam jeden zasadniczy problem. Nie zwróciłem uwagi, że kurs z którego się uczyłem został utworzony w 2006roku.
Dotyczył on oczywiście C++, z tego też powodu, mam do was pytanie...

1.Czy przez ten czas bardzo się zmienił sposób programowania?

2.Polecicie jakieś kursy dla zielonych(nowe), najlepiej w PDF-ie lub na stronie? (wideoporadniki mile widziane)
3.Może dopóki mam czas jednak zacząć się uczyć C#?
4.Jakie są różnice między C++, a C#, co jest lepsze na start i bardziej przyszłościowe?
Mam nadzieję, że moje pytania są dosyć jasne.
Pozdrawiam.
 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Na studiach uczyłem się C++ i jak dla mnie to chyba najlepszy język żeby poznać jak to programowanie działa (dziś przydaje mi się wiedza z programowania do pisania prostych skryptów perl/bash) ale na co dzień nie zajmuję się programowaniem.

 

Książka jaka mi dużo pomogła to Symfonia C++ od Grębosza

  • Upvote 1

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

1.Czy przez ten czas bardzo się zmienił sposób programowania?

Bardzo nie, ale trochę tak. W sensie na początku i tak nie wykorzystasz/zauważysz tych różnic.

 

2.Polecicie jakieś kursy dla zielonych(nowe), najlepiej w PDF-ie lub na stronie? (wideoporadniki mile widziane)

J/w. Symfonia. Masz zajebisty poradnik od Zelenta po polsku.

 

3.Może dopóki mam czas jednak zacząć się uczyć C#?

Zacząć od C#? Ogólnie możesz zacząć od czegokolwiek bo w programowaniu język jest na drugim miejscu, na pierwszym jest technika, jakieś koncepcje, struktury itp, a te w każdym języku są identyczne. C# jest podobny do C++ ale jest w pełni obiektowy. Jak nigdy wcześniej nie programowałeś to lepiej zacząć od C++ strukturalnie, i stopniowo przejść do obiektowego.

 

4.Jakie są różnice między C++, a C#, co jest lepsze na start i bardziej przyszłościowe?

Nie można powiedzieć że coś jest bardziej lub mniej przyszłościowe. C++ i C# to dwa różne języki i moim zdaniem oba jeszcze przez dłuuuuugi czas nie "spadną" z podium zainteresowania. Ale tak jak wyżej. Na początek C++ strukturalnie, później obiektowo, a na końcu jak już ogarniesz wystarczająco to C#/Java.

 

Po prostu poznaj podstawy, rozkmiń jak to działa samemu, napisz to sam, a później jak przejdziesz do C# zobaczysz że on już większość ma "wbudowane" i koduje się szybciej większe aplikacje.

  • Upvote 1

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Visual Studio? A co za różnica? To tylko IDE, na każdym IDE taki prosty kod będzie działał tak samo. Nie wiem czy dla początkującego lepszy jest Visual Studio niż taki CodeBlocks, ale fakt, jest lepszy (nawet najlepszy moim zdaniem).

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

MSVC do nauki c++ jest świetne - przede wszystkim podkreśla składnię, co eliminuje irytujące błędy typu brak średnika, nawiasu, czy literówki.

c++ jest dobrym wyborem na początek, żeby zrozumieć mechanikę programowania. Potem zająłbym się javą - podobna składnia, prosty do nauki język, ale już obiektowy.

Znając javę i c++, c# przyswoisz bez problemu, a jest to dużo mniej uniwersalny język, więc nie zaczynałbym od niego.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Każde IDE posiadające(a praktycznie każde posiada) "code completions" się nada. Drugą istotną rzeczą jest prosty i wygodny debugger. Visual Studio to przeładowana kobyła posiadająca wszytko, ale z każdą kolejną wersją coraz gorzej działająca. Wsparcie dla C++ jest w VS też coraz gorsze.

PACIK19 - zacznij od książek. Jeżeli zdecydujesz się na naukę C++ to skorzystaj z jakiegoś prostego IDE. Bo ważne w tym języku jest też abyś zrozumiał zasady działania kompilacji i jej etapy.

Dodatkowo C++ posiada kilka elementów z C jak choćby wskaźniki(nieobecne w C# czy javie)i samo to może go czynić nieco trudniejszym w nauce, lecz nie będzie to czas zmarnowany.

Ważne żebyś zdecydował co właściwie chcesz tworzyć, C++(natywny) nadaje się bardziej do stricte systemowych aplikacji. W C# z kolei stworzysz wiele innych rzeczy.

 

Jave bym jednakowoż odradzał, dni tego języka są policzone. Trzyma się tylko dzięki zastosowaniom korporacyjnym, a te z czasem zostaną wyparte przez otwarcie .netu przez Microsoft na inne platformy i społeczność. Oracle już by chętnie porzucił wsparcie dla javy. Nie mówiąc już o tym że C# to taka ewolucja javy nie posiadająca wielu jej wad.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

W sumie z java nie masz zbytnio racji, bo juz jest usmiercana od dluzszego czasu. Niestety za duzo softu na tym smiga i ma srodowisko uruchomieniowe dostepne na wszystkie liczace sie platformy (ms, linux, android). Chociaz w czasach 'chmur' dostaje po tylku - sami devowie to przyznaja. Jednak w rozwiazaniach korporacyjnych i tak liczy sie przede wszystkim bezpieczenstwo.

 

C# narazie byl tylko na winde, ale zaczyna inwazje na linuxa. Zobaczymy jak sie to potoczy ;) Dodatkowo mozna w nim skrypty pisac do takiego Unity.

 

C++ w sumie dlugo nie bedzie wyparty w rozwiazaniach stricte wydajnosciowych. Jedyna wada to... brak wbudowanych narzedzi do tworzenia aplikacji okienkowych jak w C# czy java. W czasach krolowania 'chmur' niektore firmy zaczyna nawracac sie na c++ i zdziwieni, ze to smiga lepiej niz java :D Nowe standardy c++ (11/14) daja sporo fajnych rzeczy, ale... trudno znalezc dobrze wytlumaczone te mechanizmy (a wiki ma to po lebkach opisane).

  • Upvote 1

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

W sumie z java nie masz zbytnio racji, bo juz jest usmiercana od dluzszego czasu.

(...)

Możliwe że nie mam, przyznam bez bicia, że javie po prostu chętnie wróże koniec :). Jednocześnie faktem jest, Oracle już oficjalnie nie dba o rozwój  już tej platformy, a wraz z końcem wsparcia dla wersji 7 porzucono też wsparcie dla "lubianych" appletów.

 

W standardzie C++ fajnie się piszę, a sam standard jest rozwijany jednak dosyć powoli. W czystym C++ bez użycia zewnętrznych bibliotek nie da się wszystkiego napisać, wciąż (C++14) brakuje ujednoliconego interfejsu do obsługi sieci. W C++17 planowane jest dodanie biblioteki do obsługi sieci na podstawie tej z Boosta(Asio). Wtedy będzie można uznać, że standard jest kompletny i na rynku może namieszać. :D

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Java to z wersji na wersje ma bardziej okrojona dokumentacje. Co do c++ to ma ogromne zaplecze bibliotek, wiec nie jest tez az tak zle. W sumie w tym jezyku lepiej mi sie pisze niz w c#/java. Jedyny minus ciezko gdzies praktyke podlapac z c++ :/

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Temat troche już stary ale...

 

Polecam Stephen Prata Język C++ Szkoła programowania. Obszerna i jak dla mnie świetnie napisana, w sposób zrozumiały dla każdego (teoria od razu popierana przykładami). Osobiście mam wydanie VI zawierające elementy C++11. Niestety nigdzie nie znalazłem wersji PDF (gdyby ktoś miał proszę o info =]) ale zamiast tego polecam też cpp0x. Nie czytałem akurat działu poświęconego C++ tylko winsock/winapi w celu nauki o gniazdach i wątkach. Również napisane w sposób bardzo dosępny.

 

Co do IDE to korzystam z CodeBlocks. Na początku używałem Visuala ale jak dla początkującego wydawał mi się zbyt przeładowany, dodaje zbyt wiele od siebie przez co początkujący może się pogubić. CodeBlocks jest "czysty", przyjemny i przejrzysty.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

To ja też dołożę cegełkię, bo temat chociaż stary to wciąż popularny. Większość książek, które polecali poprzednicy znam. Dla kogoś kto dopiero zaczyna karierę jako programista polecałbym mniej Symfoni C++ (a jeśli już to koniecznie najnowsze wydania), a więcej książek/stron www promujących nowy standard C++0x czy jak kto woli C++11. Dlaczego? Ponieważ książka promuje trendy, które są przestarzałe, a programy pisane zgodnie z nimi mogą być mniej bezpieczne (głównie chodzi o złe korzystanie ze wskaźników, NULL'i itd.). Mówię to z własnego doświadczenia, żeby młodsi koledzy, którzy zaczynają dopiero studia/technikum nie musieli marnować czasu na dodatkowe doszkalanie się za kilka lat. Warto też zainteresować się materiałami o STL (Standard Template Library), która zawiera dużo popularnych struktur danych, napisanych przez profesjonalistów, co dodatkowo zwiększa wydajność - na pewno ją docenicie, gdy zaczniecie implementować algorytmy dla problemu komiwojażera, plecakowego itd. Podobnie polecam poczytać coś o Boost - tam również jest masa gotowych algorytmów i struktur, które wykorzystywane są nie tylko przez profesjonalnych programistów z korpo, ale także naukowców pracujących nad AI, NLP, itp.

Jeśli chodzi o IDE - trzeba się trochę namęczyć z MS Visual Studio, ale doceni to każdy pracodawca. To naprawdę może być dodatkowy (ale oczywiście nie najważniejszy) atut w waszym CV. To samo dotyczy Javy - lepiej przejść z NetBeansa na Eclipse.

Co do wyboru Java/C#/C++ - fajnie jest znać każdy język, bo każdy z nich służy do czegoś innego, ale ostatecznie trzeba 
oczywiście wybrać jeden, w którym chcemy się rozwijać dalej. Z moich studiów i obecnego doświadczenia zawodowego wywnioskowałem, że:

C/C++ - używany jest w programowaniu krytycznych elementów systemów informatycznych, takich które muszą działać naprawdę wydajnie. Często ten język łączy się ze wstawkami asemblera (oczywiście tylko krytyczne funkcje). Tworzenie aplikacji dialogowych wymaga znajomości zewnętrznych bibliotek (od MS albo open-source). Tworzenie rozbudowanych aplikacji sieciowych z interfejsem graficznym może być ciężkie dla początkującego.
Java - język używany głównie w aplikacjach biznesowych, gdzie potrzebna jest skalowalność, load-balancing i bezpieczeństwo (kod Javy często uruchamia się w tzw. kontenerach, poza tym sam kompilator nie generuje bezpośredniego kodu maszynowego, tylko kod bajtowy uruchamiany na JVM). Prędzej czy później będziecie zmuszeni poznać JavęEE, która nieco różni się od popularnej JavySE, w której tak łatwo się wszystkim programuje. Molochów typu Spring, Hibernate prawdopodbnie nie unikniecie, jeśli wybierzecie sciężkę kariery związaną z Javą. Wielką zaletą jest multiplatformowość. Ponadto ucząc się Javy, uczymy się pośrenio programowania appek na Androida (niższe warstwy systemu pisane są już w C/C++).
C# - podobnie jak Java (bo C# czerpie z niej garściami), używany jest głównie w szeroko pojętych aplikacjach biznesowych, chociaż bardziej przyziemnych. C# spotykany jest głównie w tworzeniu aplikacji dialogowych na systemy z rodziny Windows służacych do ogólnego użytku przez typowego Kowalskiego oraz większych serwisach internetowych (ASP.NET). Zdecydownie szybciej jest w nim stworzyć rozbudowany program początkującemu, jednak podobnie jak w Javie - obarczone jest to mniejszą wydajnością od C/C++.

Oczywiście każdy program można napisać w dowolnym języku programowania. Wymieniłem tylko typowe zastosowania, gdy już się go nauczymy, bazując na tym, które firmy, jakich języków zazwyczaj wymagają.

Edytowane przez airwaves

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Gość <account_deleted>

Dżizas, dawno mnie tu nie było, więc tak tragicznie niski poziom nieco mnie przeraził - really? - to jest wszystko co mozna znaleźć na tym forum?

1. 100% dokumentacji dot. nowych rozwiązań powstaje w j. angielskim (nawet jesli są to polskie rozwiązania) - bez znajomości angielskiego technicznego z branży programowania/IT - lipa.

2. Jedyny realnie funkcjonujący on-line support dla programistów <stackoverflow, serverfault> jest po angielsku...

3. Niestety polskie szkoły/uczelnie kształcą idiotów - angielski techniczny = zero, ale co gorsza, absolwenci nie mają bladego pojęcia o programowaniu czegokolwiek poza czasem podgrzewania pizzy w mikrofalówce...

 

Żeby nie było głupich "ale", prosty test:

1. Co to jest kontekst procesora?

2. Czym się różni przerwanie od wyjątku?

3. Dlaczego liczba 1.1 powoduje błędy w obliczeniach i jakie są znane rozwiązania tego problemu?

 

To są trywialne pytania, ale 99.9999% absolwentów polskich uczelni nie jest w stanie udzielić poprawnej odpowiedzi - niestety.

Nie liczę na to że znajdzie się ktoś na tym forum...

 

... ale przecież wystarczy powiedzieć że Visual jest super - nawet kiedyś go widziałem jak działa...

Edytowane przez <account_deleted>

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Kontekst czyli aktualnie wykonywany fragmant programu. Systemy przelaczaja wykonywanie programow aby dac wrazenie wielozadaniowosci na 1 rdzeniowych procesorach.

 

Przerwanie jest sprzetowe, a wyjatek programowy (obarczony duzym kosztem obslugi).

 

Co do 3. jesli sie nie myle to chodzi Ci o sposob zapisu czesci ulamkowej na komputerach, przez co jest problem z precyzja/dokladnoscia liczb. I problem nie dotyczy jedynie 1.1 ale i wielu innych liczb. Jak sobie z tym radzic? Nie wiem, ale jakbym potrzebowal z tym pomocy to szukalbym na overflow :D

 

Co do ide to zamiast codeblocks polecam codelite. Tworzy to jeden czlowiek a dziala lepiej niz CB. Do tego podpowiadanie kodu dziala poprawnie.

 

 

Tyle ze co to ma do tematu?

Edytowane przez Quave
  • Upvote 1

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Gość <account_deleted>

Hmm, tak jak myślałem... słabiutko...

Kontekst czyli aktualnie wykonywany fragmant programu. Systemy przelaczaja wykonywanie programow aby dac wrazenie wielozadaniowosci na 1 rdzeniowych procesorach.

Kontekst procesora, to nie jest "fragment programu", tylko:

a) Stan procesora w danej chwili, gdzie poprzez "stan" rozumie się zbiór wartości wszystkich rejestrów, w szczególności wskaźnika stosu, wskaźnika instrukcji oraz rejestru statusowego.

b) Kontekstem procesora nazywa się również strukturę przechowującą stan procesora. Struktura ta jest używana przez jądro systemu operacyjnego do przełączania zadań (procesów/wątków), co sprowadza się właśnie do "podmiany" stanu procesora. Ilość rdzeni czy procesorów nie ma tu nic do rzeczy.

Przerwanie jest sprzetowe, a wyjatek programowy (obarczony duzym kosztem obslugi).

No... nie. Przerwanie jest również wyjątkiem. Mówiąc inaczej wyjątki można sklasyfikować jako sprzętowe (przerwania) i jako programowe, gdzie nadal nazywane są wyjątkami. Główna różnica polega na tym, że procedury obsługi przerwań są wykonywane w przestrzeni jądra systemu, natomiast wyjątki niekoniecznie (zazwyczaj w przestrzeni użytkownika).

Stwierdzenie że "wyjątek jest obarczony dużym kosztem obsługi" świadczy że nie masz waść bladego pojęcia o czym mówisz.

Co do 3. jesli sie nie myle to chodzi Ci o sposob zapisu czesci ulamkowej na komputerach, przez co jest problem z precyzja/dokladnoscia liczb. I problem nie dotyczy jedynie 1.1 ale i wielu innych liczb. Jak sobie z tym radzic? Nie wiem, ale jakbym potrzebowal z tym pomocy to szukalbym na overflow :D

No nie, zdecydowanie nie chodzi o "sposób zapisu czesci ulamkowej na komputerach", tylko o ograniczenia wynikające ze stosowania standardu IEEE-754.

Najbardziej znanym sposobem obejścia problemu dokładności jest rozszerzenie formatu IEEE-754 z 64 do 80-bitów, co w wielu przypadkach jest całkowicie wystarczające.

Inne rozwiązania to np. "poczwórna" precyzja zapisu liczb (np: libquadmath: 128bit).

 

Może zamiast rozwodzić się nad wyższością C# nad C++ albo nad tym, które IDE ładniej koloruje składnię, warto by jednak zacząć od (albo wrócić do) podstaw...

Co to ma wspólnego z tematem? - wszystko.

Edytowane przez <account_deleted>

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

A podobno to PClol ma toksyczną społeczność. Może jeszcze zaczniemy dyskutować o algebrze Boole'a i architekturze CISC, bo to też ma związek z programowaniem? I to w temacie dla osób, które dopiero zaczną się uczyć... Give me a break.

 

W każdym języku programowania można osiągnąć zamierzone cele, ale trzeba być totalnym amatorem/teoretykiem, żeby nie zauwazyć, iż każdy język został różne przyjęty przez rynek w danych sektorach.

 

Więc jeśli chcemy komuś doradzić na jakim języku programowania ma się skupić to trzeba się najpierw spytać, co chce programować.

 

Rozmowa o IDE jest bezsensowna, to fakt. Jednak znajomość profesjonalnych narzędzi nikomu nie zaszkodzi, zwłaszcza gdy za kilka lat autor tematu będzie chciał wejść na rynek pracy. Więc hejt i wywyższanie się są de facto nieuzasadnione w tym przypadku.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Gość <account_deleted>

(...) Może jeszcze zaczniemy dyskutować o algebrze Boole'a i architekturze CISC, bo to też ma związek z programowaniem? I to w temacie dla osób, które dopiero zaczną się uczyć... Give me a break.

Bardzo by się to przydało, bo cała masa "speców" nie jarzy dlaczego sizeof(bool) jest niezdefiniowany...

...i jak obliczyć rozmiar dynamicznie alokowanej tablicy bitów...

 

Naukę zaczyna się od podstaw - a w programowaniu komputerów podstawą jest zrozumienie "jak działa komputer" - tymczasem, większość "lolków" zaleca rozpoczęcie nauki od zainstalowania VisualStudio...

 

Bez podstaw, zdolność pojmowania kończy się zazwyczaj na jednym 2 etapów:

- aplikacje sterowane zdarzeniami

- synchronizacja wątków, czyli rozwiązywanie problemów z wyścigami logicznymi przy dostępie do zasobów.

 

... albo wcześniej.

 

(Oczywiście to jest hejt - nienawidzę głupoty.)

 

Moja rada: zacząć od jakiegoś prostego assemblera i prostej architektury, np. 8-bitowy AVR, który ma masę ciekawych możliwości, dobre narzędzia, w pełni otwartą, powszechnie dostępną dokumentację + bardzo dobre wsparcie ze strony użytkowników.

Edytowane przez <account_deleted>

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Hmm, tak jak myślałem... słabiutko...

Tak, u Ciebie z wiedza.

 

Kontekst procesora, to nie jest "fragment programu", tylko(...)

To, ze odpisalem w skrocie, nie oznacza, ze tego nie wiem. Okroilem odpowiedz do minimum, bo to nie miejsce do rozmowy o tym, tym bardziej, ze osoba tutaj dopiero zaczyna swoja przygode z programowaniem. Ale ty chyba tego nie rozumiesz.

 

Stwierdzenie że "wyjątek jest obarczony dużym kosztem obsługi" świadczy że nie masz waść bladego pojęcia o czym mówisz.

Jakby bylo jak twierdzisz, to w grach komputerowych, gdzie liczy sie maks. wydajnosc nie odrzucaloby tego rozwiazania. A dlaczego tak jest? Bo generuje ono dodatkowy kod obslugi co przeklada sie tez na szybkosc aplikacji (tworzenie potrzebnych do tego zmiennych itd). Wiec przestan pie***yc glupoty, chyba ze jestes javowcem, milosnikiem try-catchowania na kazdym kroku.

 

Druga sprawa to przerwania sa sprzetowe i sie tu nie pomylilem, problem jest z wyjatkami, ktore dotycza 3 roznych sytuacji i opisalem jedna, ta zwiazana z tematem, tj. uzywana w programach. Jak bedzie chcial programowac OS to wtedy sobie ogarnie to pojecia, ale po co mu teraz mieszac?

 

No nie, zdecydowanie nie chodzi o "sposób zapisu czesci ulamkowej na komputerach", tylko o ograniczenia wynikające ze stosowania standardu IEEE-754.

Najbardziej znanym sposobem obejścia problemu dokładności jest rozszerzenie formatu IEEE-754 z 64 do 80-bitów, co w wielu przypadkach jest całkowicie wystarczające.

Lol, padlem. A wiesz, ze nie kazda liczba ma skonczona czesc ulamkowa? Np. 1/3 ( 0.333(3) ) i mozesz w nich precyzje zwiekszac ile chcesz, a i tak nadal bedzie jakis blad w obliczeniach. Dodatkowo twoje rozwiazanie nie nadaje sie do zastosowania w systemach finansowych, gdzie nawet 1 grosz, wiec sa inne rozwiazania jak liczby staloprzecinkowe (uzytkownik sam ustala ilosc bitow na czesc calkowita i ulamkowa, obie przechowywane np. jako long). Co do 80 bitow to kolejna niewiedza z twojej strony, ze nie kazdy procesor to wspiera. Na pewno Intel, amd nie wiem i nie szukalem.

 

 

Może zamiast rozwodzić się nad wyższością C# nad C++ albo nad tym, które IDE ładniej koloruje składnię, warto by jednak zacząć od (albo wrócić do) podstaw...

Co to ma wspólnego z tematem? - wszystko.

Nie ma nic wspolnego z tematem, bo osoba ta zaczyna zabawe w programowanie i nie wiadomo czy zajdzie dalej niz obiektowka, bo moze to nie bedzie dla niego. A IDE wbrew pozorom ma znaczenie - ulatwia znalezenie bledow, reformatowanie kodu itd, itp.

 

A podobno to PClol ma toksyczną społeczność. Może jeszcze zaczniemy dyskutować o algebrze Boole'a i architekturze CISC, bo to też ma związek z programowaniem? I to w temacie dla osób, które dopiero zaczną się uczyć... Give me a break.

Po prostu przylecial taki napalony i chce zablysnac czego to sie on dowiedzial, zwiekszajac ego o +5.

 

Więc jeśli chcemy komuś doradzić na jakim języku programowania ma się skupić to trzeba się najpierw spytać, co chce programować.

Niekoniecznie. Jak zaczyna to jednak C++ jest dobrym rozwiazaniem. Zrozumie podstawowe petelki, poslugiwanie sie funkcjami i obiektami. A wszystko to krok po kroku.

 

Bardzo by się to przydało, bo cała masa "speców" nie jarzy dlaczego sizeof(bool) jest niezdefiniowany...

...i jak obliczyć rozmiar dynamicznie alokowanej tablicy bitów...

Jest zdefiniowany, ale zalezy od kompilatora. Wszystko rozbija sie o to czy kompilator pakuje po 8 booli do bajta, czy w inny sposob.

 

Naukę zaczyna się od podstaw - a w programowaniu komputerów podstawą jest zrozumienie "jak działa komputer" - tymczasem, większość "lolków" zaleca rozpoczęcie nauki od zainstalowania VisualStudio...

Na pewno nie na poziomie przeplywu impulsow w pc. Programujesz sterowniki, to moze Cie to interesuje, ale nie reszte.

 

Bez podstaw, zdolność pojmowania kończy się zazwyczaj na jednym 2 etapów:

(...)

- synchronizacja wątków, czyli rozwiązywanie problemów z wyścigami logicznymi przy dostępie do zasobów.

Wiele jezykow ma juz wbudowana obsluge podstawowych mechanizmow do tego, wiec znowu pudlo. Wystarczy wiedza ogolna o dzialaniu, o tym kiedy potrzeba stosowac te mechanizmy.

 

(Oczywiście to jest hejt - nienawidzę głupoty.)

A sam ja powielasz :(

 

Moja rada: zacząć od jakiegoś prostego assemblera i prostej architektury, np. 8-bitowy AVR, który ma masę ciekawych możliwości, dobre narzędzia, w pełni otwartą, powszechnie dostępną dokumentację + bardzo dobre wsparcie ze strony użytkowników.

Nie kazdy potrzebuje assemblera :D Jedynie w kilku zastosowaniach sie nim optymalizuje kod, a i tak to baaaaardzo rzadko.

  • Upvote 1

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Gość <account_deleted>

 

To, ze odpisalem w skrocie, nie oznacza, ze tego nie wiem.

Nie odpisałeś w skrócie, tylko udzieliłeś błędnej odpowiedzi.

 

"Dobrze wiedziałem, tylko mi się napisać nie chciało" ... i wszystko jasne ...

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jesli wykonuje jakis fragment kodu to chyba oczywiste, ze dotyczy to stanu procesora i przechowywanych w rejestrach danych? Chyba, ze dla Ciebie wszystko szczegolowo opisywac wraz z tym co gdzie w procesorze sie znajduje i z czym i po co sie laczy, bo "udziles blednej odpowiedzi". Ty swoja tez nie zablysles w kilku miejscach sie mylac.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Gość <account_deleted>

Jesli wykonuje jakis fragment kodu to chyba oczywiste, ze dotyczy to stanu procesora i przechowywanych w rejestrach danych? Chyba, ze dla Ciebie wszystko szczegolowo opisywac wraz z tym co gdzie w procesorze sie znajduje i z czym i po co sie laczy, bo "udziles blednej odpowiedzi". Ty swoja tez nie zablysles w kilku miejscach sie mylac.

Pytania były jasno sformułowane - zła dpowiedź to po prostu zła odpowiedź.

Powyższy komentarz kompromiutuje Cię totalnie - tyle że jesteś zbyt głupi żeby to zrozumieć...

Jesteś waść również zbyt głupi, żeby zrozumieć, że wspomniałem o języku assembler jako o "wstępie do podstaw" - oczywiście tylko w bardzo niewielu/extremalnych przypadkach używa się dzisiaj assemblera - ale też, znajomość języka maszynowego jest podstawą do zrozumienia "jak działa komputer" - o czym wspomniałem wcześniej...

 

Rozumiem, że Twój debilny komentarz (odnośnie systemów "finansowych") został wykopany z google'a - i na tej podstawie postanowiłeś wyrazić samozadowolenie w postaci stwierdzenia, że "przecież też się pomyliłem" - tylko że sytuacja jest raczej kompletnie przeciwna - jesteś debilem do kwadratu, ponieważ właśnie libquadmath (o której wspomniałem) gwarantuje dokładność na poziomie conajmniej 10^-8, podczas gdy systemy bankowe używają co najwyżej dokładności na poziomie 10^-4.

 

Spodziewam się kolejnego "ataku" spreparowanego przez debila ukrywającego się pod nickiem (aktualnie) - Małpożer - ale z drugiej strony, mam nadzieję że ludzie realnie zainteresowani nauką programowania są w stanie odróżnić forumowego trolla od gościa, który od ~15 lat programuje systemy produkcyjne...

 

Pozdrawiam.

Edytowane przez <account_deleted>

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ojoj juz sie tak nie unos, bo ci zylka peknie. Po pierwsze zmien ton, bo nie chce mi sie prowadzic dyskusji z nadetym bufonem. Po drugie nie moj problem, ze masz tak ciasny mozdzek, ze nie rozumiesz skrotow myslowych. Po trzecie sam zaczales jakies wyjazdy o assemblerze itd. gosciowi, ktory zaczyna zabawe z programowaniem. Czas na lizniecie assemblera itp bedzie jeszcze,mial jak sie w to wkreci. A jak pojdzie w c# lub jave to bedzie mial gdzies calego assemblera - wiekszosc z javowcow ma gdzies wydajnosc, tylko aby dobrze dzialalo.

Po czwarte siwlki znaffco zwiekszanie precyzji nic nie daje przy duzej ilosci obliczen, w szczegolnosci bankowosci, wiec przestan piep****yc o 15 latach doswiadczenia, ktore oznacza ni mniej ni wiecej, ze szybciej rozwiazujesz problemy/piszesz kod, bo robisz to dluzej. A to ze banki na stronach o walutach wyswietlaja 4 liczby po przecinku, nie znaczy, ze tak je przechowuja. Ogolnie jest cos 10-6 czy nawet wiecej. I nie, nie przechowuja tego na doubl czy long double, ale maja specjalne biblioteki matematyczne od tego - im az tak nie zalezy na szybkosci dzialania, co dokladnosci obliczen. Chcesz miec lepsza dokladnosc bez wzgledu na platforme to zastosuj liczby staloprzecinkowe - tyle ze znow wydajnosc gorsza, szczegolnie funkcje tryg.

 

A tekst, ze assembler do zrozumienia jak dziala komputer... smiechlem i tyle w tym temacie. W sumie mozna zakonczyc ta dyskusje bo nie ma nic wspolnego z pierwotnym zapytaniem. A jak chcesz dalej to ciagnac to zapraszam na priv.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Gość <account_deleted>

Ojoj juz sie tak nie unos, bo ci zylka peknie. Po pierwsze zmien ton, bo nie chce mi sie prowadzic dyskusji z nadetym bufonem. Po drugie nie moj problem, ze masz tak ciasny mozdzek, ze nie rozumiesz skrotow myslowych. Po trzecie sam zaczales jakies wyjazdy o assemblerze itd. gosciowi, ktory zaczyna zabawe z programowaniem. Czas na lizniecie assemblera itp bedzie jeszcze,mial jak sie w to wkreci. A jak pojdzie w c# lub jave to bedzie mial gdzies calego assemblera - wiekszosc z javowcow ma gdzies wydajnosc, tylko aby dobrze dzialalo.

Po czwarte siwlki znaffco zwiekszanie precyzji nic nie daje przy duzej ilosci obliczen, w szczegolnosci bankowosci, wiec przestan piep****yc o 15 latach doswiadczenia, ktore oznacza ni mniej ni wiecej, ze szybciej rozwiazujesz problemy/piszesz kod, bo robisz to dluzej. A to ze banki na stronach o walutach wyswietlaja 4 liczby po przecinku, nie znaczy, ze tak je przechowuja. Ogolnie jest cos 10-6 czy nawet wiecej. I nie, nie przechowuja tego na doubl czy long double, ale maja specjalne biblioteki matematyczne od tego - im az tak nie zalezy na szybkosci dzialania, co dokladnosci obliczen. Chcesz miec lepsza dokladnosc bez wzgledu na platforme to zastosuj liczby staloprzecinkowe - tyle ze znow wydajnosc gorsza, szczegolnie funkcje tryg.

 

A tekst, ze assembler do zrozumienia jak dziala komputer... smiechlem i tyle w tym temacie. W sumie mozna zakonczyc ta dyskusje bo nie ma nic wspolnego z pierwotnym zapytaniem. A jak chcesz dalej to ciagnac to zapraszam na priv.

Mój poprzedni post był niepotrzebny - szkoda czasu, bo testy już się skończyły - anyway - ludzie czytający ze zrozumienim będą w stanie zrozumieć o co chodzi, a tylko tacy są warci uwagi.

 

Pozdrawiam.

Edytowane przez <account_deleted>

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Gość <account_deleted>

Szczerze to nie wiem nawet po co odpisywales. Przyszedles, poplules jadem i nic konstruktywnego do tematu nie wniosles.

W zasadzie powiedziałem już wszystkto... Ale, jako że jest jeszcze trochę czasu do "wyrwania" - czy sformułowanie "test przesiewowy" <screening test> coś Panu mówi, czy "nie bardzo"?

...pytanie w sumie retoryczne - ale spróbujmy...

 

Pozdrawiam.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Pierwszy raz o tym slysze (poczytalem na wiki, wiec wiem o co mniej wiecej kaman). Teraz czekam na oswiecenie z Twojej strony, bo nijak nie widze powiazania z dotychczasowa rozmowa i mam nadzieje, ze nie bedzie to kolejna rzucona na 'wiatr' nazwa.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Gość <account_deleted>

Pierwszy raz o tym slysze (poczytalem na wiki, wiec wiem o co mniej wiecej kaman). Teraz czekam na oswiecenie z Twojej strony, bo nijak nie widze powiazania z dotychczasowa rozmowa i mam nadzieje, ze nie bedzie to kolejna rzucona na 'wiatr' nazwa.

No własnie ... Wikipedia ... - podaje, że test przesiewowy to pojęcie związane z medycyną - co tylko częściowo jest prawdą - to jest pojęcie z zakresu statystki...

 

Niestety, poprzednie pytania testowe były niedoskonałe, ponieważ odpowiedzi są łatwe do znalezienia w sieci - co jednak nie przeszkodziło w uzyskaniu prawidłowych wyników - wręcz przeciwnie - pojawiła się wartość dodana w postaci przykładu pokazującego, że niektórzy nie odróżniają przypadku ogólnego od szczególnego ;)

 

Interesuje mnie jeszcze jedna kwestia, mianowicie uzasadnienie/wykazanie dlaczego znajomość zasady działania/budowy komputerów i języka maszynowego (czyli podstawy) są niezbędne dla każdego, kto chce kiedyś nazywać się programistą...

 

Proponuję więc quiz:

(wstęp do podstaw, ale większość nawet nie zajarzy o co chodzi - powodem jest brak podstaw właśnie...)

 

Jak optymalnie (minimum kodu wynikowego, maksymalna szybkość działania) sprawdzić prawdziwość nastepującego wyrażenia:

(a * b) <= 0x7FFFFFFF

gdzie:

a,b są zmiennymi typu int (integer) i do dyspozycji mamy 32-bitowy procesor?

 

Są tylko 2 *optymalne* rozwiązania tego problemu - jedno portowalne i jedno nie (ale za to ultra-szybkie ;) ).

 

Rozwiązania da się znaleźć w sieci - ale żeby je znależć, najpierw trzeba wiedzieć o co chodzi w tym przykładzie.

 

Z tego co sprawdziłem, większość rozwiązań w sieci jest błędna - co mam nadzieję wyeliminuje "cwaniaczków" i trolle...

 

Panie "Małpożer": proponuję najpierw dać ze 2 dni forów dla mniej ogarniętych - potem śmiało może Pan zniszczyć mnie swoim profesjonalizmem i doświadczeniem ;)

 

(swoją drogą jestem naprawdę ciekawy co z tego wyjdzie...)

 

Pozdrawiam.

Edytowane przez <account_deleted>

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Edyt posta. Mialem isc spac, ale... musialem pomyslec nad tym. Wiec to cos ma wspolnego z operatorem <= i porownywaniem do stalej, a nie 0. A ten nieprzenosny sposob to pewnie jakas magiczna optymalizacja poprzez assembler, ktory... stosowany jest przewaznie przez programistow piszacych drivery i zalezny jest od procka ;) Ogolnie co do assemblera to sa male dzisla sztuki na necie, animacje kilkunasto kilobajtowe czy megabajtowe w assemblerze.

 

Co do doswiadczenia nie pisalem, ze posiadam jakies ogromne. Ot ciagle sie ucze i szukam czegos nowego powiazanego z programowaniem w C++. O liczbach zmiennoprzecinkowych czytalem przy artach zwiazanych z gamedev i problemach przechowywania danych w grach multi na roznych platformach.

 

Co do przesiewowego czasem to wlasnie nie do konca mi cos pasowalo z ta medycyna. Pewnie cos w rodzaju wzorow na obliczenie ile probek potrzeba na sprawdzenie partii towaru ;)

Edytowane przez Małpożer

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Gość <account_deleted>

Mialem isc spac, ale... musialem pomyslec nad tym. Wiec to cos ma wspolnego z operatorem <= i porownywaniem do stalej, a nie 0.

Zimno, ciekły azot, -273.15 ...

 

0x7FFFFFFF to jest po prostu maksymalna wartość jaką da się zapisać w 32-bitowej wersji typu <int> (bo <int> niekoniecznie musi być 32-bitowy).

 

Nie ma tu większego znaczenia czy będziemy mnożyć czy sumować a i b - ale wiecej przykładów w sieci dotyczy operacji sumowania - więc chodziło o "zmylenie przeciwnika" - ostateczne rozwiązanie jest takie samo: chodzi po prostu o sprawdzanie czy doszło do przepełnienia zmiennej typu <int> - "integer overflow".

 

Pozdrawiam.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Czyli to co pisalem poniekad jest prawda, bo:

1° operator < lub > sa szybsze od <= lub >= na niektorych platformach

2° porownanie z zerem szybsze niz ze stala

 

Chociaz i tak dalem ciala z maks. wartoscia... Poniekad pewnie przez slabe obycie z systemem 16 - dotychczas maks co potrzebowalem to 0xffff i tylko na programowaniu mikrokontrolerow xD

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.


×
×
  • Dodaj nową pozycję...