Programowanie 8936 19

O temacie

Autor matekacp

Zaczęty 8.05.2016 roku

Wyświetleń 8936

Odpowiedzi 19

matekacp

matekacp

Użytkownicy
posty136
Propsy81
ProfesjaNierób
  • Użytkownicy

matekacp

Programowanie
2016-05-08, 18:01(Ostatnia zmiana: 2016-05-08, 18:10)
Znacie może jakoś dobrą książkę do nauki informatyki ? Od października będę studiował informatykę, ale chciałbym jakieś podstawy ogarnąć no i jaki język polecacie co jest teraz na czasie itp ? Chciałbym poznać Wasze zdanie, bo wy tu eksperty jesteście w tym temacie  a ja jestem głąb i amator w tych sprawach  :lol2: ( moje jedyne umiejetnosci narazie to stworzenie prostej stronki z html, czyli cos co potrafi kazdy  :F )

Post połączony: 2016-05-08, 18:10
Myślicie że ta książka będzie dobra ? http://aros.pl/ksiazka/jezyk-c-szkola-programowania-2
 

Amand

Amand

Użytkownicy
jestę studentę xD
posty238
Propsy94
ProfesjaGracz
  • Użytkownicy
  • jestę studentę xD
Ja osobiście polecam C++ na początek, jest to bardzo dobry i uniwersalny język programowania (tzn. przeważnie wiele popularnych języków programowania jest całkiem podobnych do C++ w wielu aspektach). Co do nauki polecam na początek poradnik "Od zera do gier kodera" do pobrania za darmo w internecie. Oprócz tego polecam kanał na yt "Pasja informatyki" - są tam w świetny sposób przedstawione podstawy programowania w C++ :)
 
Wystąpił błąd podczas próby wyświetlenia sygnatury

Leinnan

Leinnan

Administrator
torsonic polarity syndrome
posty2671
Propsy3600
ProfesjaProgramista
  • Administrator
  • torsonic polarity syndrome
C++? Jak na razie sprawdza się u mnie "Język C++ Szkoła programowania" Stephena Praty, ważne aby było to nowe wydanie, zawierające nowości z C++11.
 
Mit der Dummheit kämpfen die Götter selbst vergebens

steam | slavic castles |  last.fm | moddb.com | Stary, najlepszy lider Sclavinii

inż. Avallach

inż. Avallach

Administrator
posty7662
Propsy5238
NagrodyV
ProfesjaProgramista
  • Administrator
C++ nie jest ani bardzo dobry na początek ani uniwersalny :|
Wiele języków programowania jest podobnych nie do C++, ale do C. C++ jest jednym z wielu "tych podobnych do C" które przyszły później.
Na początek polecam Javę albo C#. Są znacząco prostsze i wygodniejsze, pozwalają nie wiedzieć o wielu kwestiach związanych z wewnętrznym działaniem programu i nie przejmować się nimi. Chodzi o sprawy typu zarządzanie alokacją pamięci, alignment, adresowanie i wskaźniki itd.
U mnie na studiach nauka programowania była zaczynana od Javy. Obecnie to jeden z najpopularniejszych języków programowania na świecie. Oczywiście nie do wszystkiego się nadaje. Ja używam jej dużo w pracy do tworzenia i rozwoju różnego rodzaju narzędzi. Przede wszystkim programuję w C++, ale z konieczności, a nie preferencji.

Absolutnie odradzam zaczynanie nauki programowania od C++. Jak już musisz, to najpierw pobaw się gołym C żeby ogarnąć podstawy.

Wowoz

Wowoz

Użytkownicy
Wowoźny
posty3699
Propsy4862
NagrodyVV
Profesjabrak
  • Użytkownicy
  • Wowoźny
Nie sluchaj Avallacha, on się gówno zna :F
 

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Od kilku lat poleca się naukę Pythona jako pierwszego języka, a nie żadnego obiektowego. No chyba że się coś zmieniło od moich czasów studiowania. :D Ja na studiach zaczynałem od C, ale mogłem również od innego języka - Javy czy Pythona.
Jeśli chodzi o języki obiektowe to najlepszy i najszybciej rozwijającym się językiem jest C#, zresztą cała platforma .NET się bardzo szybko rozwija. C++ się jeszcze rozwija, nowe standardy, ale jeśli nie jest ci na już potrzebny, to bym odłożył na później. Najwolniej się rozwija Java, jest to w dużej mierze spowodowane "filozofią" Javy i niechęcią do rzeczy nieobiektowych.
Ale prawda jest taka, że możesz zacząć naukę od dowolnego języka, bo i tak będziesz na początku narzekał, że nie chce ci nic działać. :D
Jeśli chodzi ci o książki do informatyki, to nie wiem co ci polecić. Informatyka jest dość rozległą dziedziną nauki. I pytanie jest czy chcesz się uczyć informatyki, jej aspektów, czy tylko się skupić na programowaniu?

Werewolf

Werewolf

Użytkownicy
Zielony goblin - za dnia biznesmen, w nocy złoczyńca
posty6339
Propsy2476
ProfesjaGracz
  • Użytkownicy
  • Zielony goblin - za dnia biznesmen, w nocy złoczyńca
Cytuj
bo i tak będziesz na początku narzekał, że nie chce ci nic działać.

O jezus. Niewiele w zyciu mialem wspolnego z programowaniem (poza pralka xD) ale pare lat temu bawilem sie w modowanie gry zwanej Celtic Kings. Tworzenie nowych kampanii, misji itd itp. Tam chyba sie uzywalo C++, nie jestem pewien bo znalem tylko wycinki kodu (nawet wstawialem tu na tM poradnik modowania Celtic Kings :D). Pamietam, ze raz tworzylem nową kampanie i najebalem kilka kartek a4 kodu, doslownie literki to mi sie juz zlewaly. Zrobilem wszystko dobrze, wchodze do gry - polowa skryptow nie dziala, nie odpala sie :lol2: Wkurwilem sie, wzialem kartke (z tego poradnika co tu zamieszczalem, wydrukowalem sobie :D) i wszystko jeszcze raz posprawdzalem - nie dziala. Wkurwilem sie na bardzo powaznie, zaczalem cos na hura przestawiac w tym skrypcie, rozrzucać, usuwac, dodawac (nawet do konca nie wiedzialem co), potem juz totalnie bez sily wchodze do gry celem sprawdzenia w którym momencie skrypty sie nie odpalaja, patrze, a tu wszystko dziala xD Nie wiedzialem jak, nie wiedzialem gdzie, ale cos zrobilem co ruszylo te skrypty, wiecej tej kampanii nie tknalem xD
 
http://chomikuj.pl/Thorus12/ = Mody do Gothica - Przeznaczenie, Ludzie z Górniczej Doliny i inne! Mody do RimWorlda!

KOMPUTER:
Spoiler
Windows 7 Professional 64-bit SP1
-Intel Core i7 @ 4.00GHz   Technologia Haswell 22nm
-8,00GB 2-Kanałowy DDR3 @ 666MHz (9-9-9-24)
Gigabyte Technology Co., Ltd. Z97X-Gaming 3 (SOCKET 0)   28 °C
-X220W D-sub (1680x1050@60Hz)
-4095MBNVIDIA GeForce GTX 980 (Gigabyte)
-931GB Western Digital WDC WD10EZEX-08M2NA0 SCSI Disk Device (SATA)
-ASUS DRW-24F1ST a SCSI CdRom Device
-Realtek High Definition Audio

matekacp

matekacp

Użytkownicy
posty136
Propsy81
ProfesjaNierób
  • Użytkownicy
Dzięki za opinie. Chcę się skupić głównie na programowaniu, chyba, że polecicie coś innego to się jeszcze zastanowię, jestem otwarty na propozycję :D. Znajomy właśnie polecał mi programowanie bo podobno dobre pieniądze z tego są a wiadomo ja idę na studia żeby mieć dobrze płatną pracę i w miarę łatwą do znalezienia. Najbardziej przekonująco brzmi C#, poszukam jutro jeszcze jakiś źródeł na jego temat. A z skąd polecacie się uczyć, z internetu z jakichś tutiorali czy też z jakiejś książki ? Ogólnie jestem samoukiem także nauka z internetu nie sprawia mi problemu, w taki no i w sumie jedyny sposób uczyłem się do rozszerzonej matmy na mature, którą mam jutro :D
 

Werewolf

Werewolf

Użytkownicy
Zielony goblin - za dnia biznesmen, w nocy złoczyńca
posty6339
Propsy2476
ProfesjaGracz
  • Użytkownicy
  • Zielony goblin - za dnia biznesmen, w nocy złoczyńca
Pieniadze dobre są ze wszystkiego co DOBRZE potrafisz i umiesz to wykorzystac. Mam znajomego, jest grafikiem do tego dobrym, ma wlasny biznes, tworzy reklamy, plakaty, okladki i wszystkie tego typu grafiki (ostatnio nawet widzialem jakies grafiki na kubki do picia) i z tego co wiem ma z tego dobre pieniadze :P

Musisz tylko dobrze to umieć, na czym chcesz zarobić a do tego umieć sie zareklamować i wykorzystac umiejetnosci :P

To są podstawowe zasady biznesu i to nie tylko jesli chodzi o programowanie :P
 
http://chomikuj.pl/Thorus12/ = Mody do Gothica - Przeznaczenie, Ludzie z Górniczej Doliny i inne! Mody do RimWorlda!

KOMPUTER:
Spoiler
Windows 7 Professional 64-bit SP1
-Intel Core i7 @ 4.00GHz   Technologia Haswell 22nm
-8,00GB 2-Kanałowy DDR3 @ 666MHz (9-9-9-24)
Gigabyte Technology Co., Ltd. Z97X-Gaming 3 (SOCKET 0)   28 °C
-X220W D-sub (1680x1050@60Hz)
-4095MBNVIDIA GeForce GTX 980 (Gigabyte)
-931GB Western Digital WDC WD10EZEX-08M2NA0 SCSI Disk Device (SATA)
-ASUS DRW-24F1ST a SCSI CdRom Device
-Realtek High Definition Audio

Leinnan

Leinnan

Administrator
torsonic polarity syndrome
posty2671
Propsy3600
ProfesjaProgramista
  • Administrator
  • torsonic polarity syndrome
Od kilku lat poleca się naukę Pythona jako pierwszego języka, a nie żadnego obiektowego.

Zdajesz sobie sprawę, że ten tekst, niezgodnie z prawdą, sugeruje, że w Pythonie nie można programować obiektowo?
 
Mit der Dummheit kämpfen die Götter selbst vergebens

steam | slavic castles |  last.fm | moddb.com | Stary, najlepszy lider Sclavinii

Kazzmir

Kazzmir

O.D.A.L.
posty1003
Propsy1681
ProfesjaProducent
  • O.D.A.L.
...zaczalem cos na hura przestawiac w tym skrypcie, rozrzucać, usuwac, dodawac (nawet do konca nie wiedzialem co)...

grafik lub programista co chcesz, tylko nie zostawaj werewolfem xD


 
rekrutacja O.D.A.L, po 18:00 gg:10135138

mgr Fartuess

mgr Fartuess

Użytkownicy
Kiedyś to były czasy!
posty1485
Propsy890
ProfesjaProgramista
  • Użytkownicy
  • Kiedyś to były czasy!
Biorąc pod uwagę naukę C++ vs C#/Java. C++'sa można zacząć się uczyć bez obiektowości i potem przejść na C#/Jave.
 
Popisuje się ciągle menda jedna...

inż. Avallach

inż. Avallach

Administrator
posty7662
Propsy5238
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

Programowanie
#12 2016-05-09, 07:12(Ostatnia zmiana: 2016-05-09, 07:26)
Od kilku lat poleca się naukę Pythona jako pierwszego języka, a nie żadnego obiektowego.

Zdajesz sobie sprawę, że ten tekst, niezgodnie z prawdą, sugeruje, że w Pythonie nie można programować obiektowo?
Nie. Python nie jest językiem obiektowym w typowym znaczeniu. To że da się w nim programować obiektowo nic nie zmienia. Jest wieloparadygmatowy i jego przystępność wynika głównie z tego że można programować w nim "skryptowo". Byłbym zdziwiony gdyby ktoś polecał zaczynanie nauki Pythona od strony aspektów obiektowych. To co napisał Adanos ma jak najbardziej sens.
Z drugiej strony programowanie w C# czy Javie też można zacząć nie-obiektowo, definiując jedynie statyczne metody. Ciężko mi powiedzieć czy Python jest lepszym wyborem na początek niż C#. Na pewno nadaje się nieporównywalnie lepiej niż C++ i o wiele bardziej przyda się do robienia malutkich przenośnych narzędzi.

Biorąc pod uwagę naukę C++ vs C#/Java. C++'sa można zacząć się uczyć bez obiektowości i potem przejść na C#/Jave.
Czyli zabrać z niego to co praktyczne i intuicyjne, zostawiając tylko to co złożone i niewygodne? To już lepiej zacząć od C.

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Od kilku lat poleca się naukę Pythona jako pierwszego języka, a nie żadnego obiektowego.

Zdajesz sobie sprawę, że ten tekst, niezgodnie z prawdą, sugeruje, że w Pythonie nie można programować obiektowo?
Fakt, źle się tu wyraziłem. Avallach na szczęście uzupełnił moją wypowiedź.

Wonski

Wonski

Gry (themodders@telegram)
radio engineer
posty256
Propsy91
ProfesjaProgramista
  • Gry (themodders@telegram)
  • radio engineer

Wonski
Gry (themodders@telegram)

Programowanie
#14 2016-05-11, 14:48(Ostatnia zmiana: 2016-05-11, 14:57)
Jeżeli miałbym coś dodać od siebie na temat c++, to był to mój pierwszy jeżyk programowania i wydaje się pozostać tym w którym chciałbym pracować w przyszłości. Programista nie może się ograniczać do znajomości jednego języka, ale to nie temat na tą dyskusję i wątpię by kogokolwiek to obchodziło...

@inż. Avallach
Dlaczego nie polecasz c++ "na start"? Wg mnie to razem z javą są to najlepiej przerobione języki w internecie, zarówno w polskich jaki i zagranicznych źródłach. Powstało od cholery literatury ułatwiającej pracę z tym językiem... Dla osób które zaczynają programowanie c++ jest w sam raz.
Przede wszystkim pozwala poznać jak to wszystko wygląda "od kuchni", tzn od totalnych fundamentów programowania.

Java to czysta obiektówka, natomiast c++ to język wieloparadygmatowy. W trakcie nauki można płynnie przejść z programowania funkcyjnego do obiektowego, bez najmniejszego problemu. W c++ można robić niskopoziomowo (ręczne zarządzanie pamięcią i wstawki w asm) co jest przydatne (choć nie wiem czy tutaj lepiej by się nie sprawdził objective-c)..

Sam zaczynałem od polskojęzycznej strony cpp0x, gdzie istotne rzeczy są z grubsza opisane... niestety jeżeli chcesz bardziej zagłębić sie w temacie to musisz sięgnąć po strony anglojęzyczne np. cppreference albo do dedykowanej literatury, jest tu gdzieś temat gdzie linkowałem do fajnych, w mojej opinii, niezwykle rozwijających podręczników.
Oczywiście jak wiadomo polska strona sieci, nie obfituje w treści zagłębiające się w szczegóły... więc jeżeli język angielski nie jest na poziomie gimnazjum to warto sięgnąć gdzieś dalej.. chociażby na stronie microsoftu jest pięknie opisany c++ wraz z winapi

Wg mnie najważniejsze w nauce jakiegokolwiek języka programowania jest korzystanie z możliwie jak najnowszych źródeł wiedzy. Jeżeli planujesz kupić jakąś książkę to wpierw patrz na rok wydania.

Za rok (może wcześniej, może później) powinien wejść w życie (tzn będzie wspierany przez kompilatory) nowy standard (major standard) c++17. Zostanie wprowadzone dużo nowych rzeczy i udoskonalone to co było w c++14 (minior standard), więc warto od razu zapoznać sie z nową wersją.

Tyle ode mnie..
Oczywiście są tu zawodowi programiści, którzy mają znacznie większe doświadczenia i na pewne sprawy mają swoje własne poglądy, ale ja, jako że nie jestem zielony w temacie to myślę, że mogę dołączyć do dyskusji..
Pozdrawiam

tak z ciekawości
Gdzie będziesz się uczył? :D
 

mathsicist

mathsicist

Użytkownicy
posty209
Propsy269
NagrodyV
Profesjabrak
  • Użytkownicy
C++ nie jest dobrym pomysłem na początek, bo zamiast na programowaniu skupiasz się na niuansach tego języka.Trzeba poświecić dużo czasu na poznanie specyfikacji tego języka, zanim zacznie sie programować.
 

Wonski

Wonski

Gry (themodders@telegram)
radio engineer
posty256
Propsy91
ProfesjaProgramista
  • Gry (themodders@telegram)
  • radio engineer

Wonski
Gry (themodders@telegram)

Programowanie
#16 2016-05-11, 15:13(Ostatnia zmiana: 2016-05-11, 15:30)
C++ nie jest dobrym pomysłem na początek, bo zamiast na programowaniu skupiasz się na niuansach tego języka.Trzeba poświecić dużo czasu na poznanie specyfikacji tego języka, zanim zacznie sie programować.

Jakie konkretnie niuanse trzeba poznać aby móc pracować w tym języku a których nie trzeba znać np w Javie? (od razu mówię, że z Javy znam tylko absolutne podstawy i do niej będę się tylko odwoływał).
Myślę, że można pomniąć ręczne zarządzanie pamięcią i brak np garbage collectora..

i dowalę się jeszcze do jednego zdania autora...
Co to znaczy
Cytuj
Ogólnie jestem samoukiem także nauka z internetu nie sprawia mi problemu
Kto to jest samouk?
Wg mnie takie określenie nie istnieje.. To, że się uczysz z książek zamiast przy pomocy nauczyciela to jesteś samoukiem? To, ze przeczytasz dziesiątki czy nawet setki artykułów w internecie to też czyni Cię samoukiem? W takim przypadku masz dziesiątki czy setki nauczycieli, którzy Ci to tłumaczą niebezpośrednio...
Bo czym się różni np wykład na temat pochodnych na yt od lekcji w szkole na ten sam temat? To przecież ta sama treść tylko podana w inny sposób.

Samoukiem byłbyś wtedy gdybyś przy posiadaniu pewnej początkowej/elementarnej wiedzy wywnioskował coś innego.. np za pomocą dodawania nauczył się mnożenia nie wiedząc, że takie coś wgl istnieje.
Kiedyś na YT oglądałem ciekawy film (do którego linku niestety nie potrafię podać) gdzie gość ładnie tłumaczy, że pojęcie "samouka" nie istnieje.

Ate to oczywiście kwestia typu "BTW", więc spam nie na temat..
 

inż. Avallach

inż. Avallach

Administrator
posty7662
Propsy5238
NagrodyV
ProfesjaProgramista
  • Administrator
C++ nie jest dobrym pomysłem na początek, bo zamiast na programowaniu skupiasz się na niuansach tego języka.Trzeba poświecić dużo czasu na poznanie specyfikacji tego języka, zanim zacznie sie programować.

Jakie konkretnie niuanse trzeba poznać aby móc pracować w tym języku a których nie trzeba znać np w Javie? (od razu mówię, że z Javy znam tylko absolutne podstawy i do niej będę się tylko odwoływał).
Myślę, że można pomniąć ręczne zarządzanie pamięcią i brak np garbage collectora..
Cała masa... Aż ciężko powiedzieć od czego zacząć. To co wypisałeś to kwestie których absolutnie nie można pominąć bo są problematyczne nawet dla bardzo doświadczonych programistów C++. Segmentation faulty i wycieki pamięci to problemy z którymi nieraz zderzam się w pracy. W Javie, C# i innych językach z automatycznym zarządzaniem pamięci to się niemal nie zdarza.
Do tego dochodzą dyrektywy preprocesora, makra, ustawienia kompilacji, podział na headery i implementację, semantyka wartości / referencji / wskaźników, stos i sterta, szablony, przeładowania operatorów, paskudnie zorganizowana biblioteka standardowa (płaska organizacja, w odróżnieniu od drzewiastej w Javie i C#), komunikaty o błędach kompilacji które trzeba przewijać wiele ekranów w bok, nieraz długa kompilacja, dużo gorsze narzędzia deweloperskie niż dla Javy i C#, konieczność pilnowania deklaracji wyprzedzających i includów, zgodności ze sobą różnych deklaracji opisujących ten sam byt, mógłbym tak długo wymieniać.

Wonski

Wonski

Gry (themodders@telegram)
radio engineer
posty256
Propsy91
ProfesjaProgramista
  • Gry (themodders@telegram)
  • radio engineer
W sumie jestem skłonny Ci uwierzyć bo piszesz z perspektywy osoby która zna wiele języków programowania i potrafisz to ocenić pod różnymi kątami.
Jednak aspekty które wymieniłeś, jak wiesz, są wadami lub zaletami w zależności od zastosowania.

Podział na headery rzeczywiście jest cholernie irytujący i czasami dużo trzeba krwi napsuć by wszystko działało tak jak trzeba... jednak, jeżeli widziałeś specyfikę nowego standardu to mają to zmienić... oby.

W tzw. "modern c++" już odchodzi się od makr na rzecz funkcji szablonowych czy deklaracji const.
Niezastąpione zastosowanie makr to m.in. header guardy, jednak jest to rzecz prosta i nie uciążliwa.

Semantyka wskaźników i referencji, owszem jest trudna, ale dla początkujących (mi osobiście zrozumienie działania wskaźników (oraz ich zastosowanie) przyszło z czasem, kiedy zacząłem programować obiektowo).

Nie odczułem by STL był kiepsko zorganizowany. Być może to dlatego, że nie programuję na takim stopniu zaawansowania jak Ty?

Wycieki pamięci jak wiesz można znacząco ograniczyć za pomocą smart pointerów, owszem mechanizm refleksji (chyba dobrze) Javy jest wygodniejszy bo nie zaprząta głowy programiście zarządzaniem pamięcią ale z drugiej strony daje to pewny narzut na pamięć jak i na czas obliczeń. Nowoczesne kompilatory javy pewnie robią robotę ale mimo wszystko nie może to być szybsze od wskaźników w c++ (przypuszczam, nie testowałem).

Kolejna sprawa jeśli idzie o pamięć to typy polimorficzne. W javie każdy typ z automatu jest polimorficzny co daje dwukrotny narzut pamięci w stosunku to typu niepolimorficznego.
W c++ masz wybór. Słowem kluczowym virtual możesz definiować typ polimorficzny lub nie.
Ja osobiście preferuję hierarchię klas opartą na modelu agregacji (bardziej naturalne i intuicyjne) aniżeli opartą na dziedziczeniu i dla mnie ważne jest rozgraniczenie na typy polimorficzne i niepolimorficzne bo przy rozbudowanych klasach daje to zauważalny narzut pamięci.

Kolejna sprawa to maszyna wirtualna javy. Kodu nie uruchomisz nigdzie poza nią. Owszem jest to wada dla jednych i nieoceniona zaleta dla drugich. Dla mnie jest to niestety wada, ponieważ do komunikacji ze "światem" trzeba używać osobnych bibliotek napisanych w innym języku, dobrze mówię (to są chyba wrappery czy jakoś tak)?

W sumie masz rację. Jeżeli ktoś chce po prostu "programować" i nie przejmować się niuansami to lepiej zacząć od javy. Jednak czy c++ może zrazić początkujących to bym tego nie powiedział. C++ oferuje naprawdę ogromną dowolność i elastyczność.

Nie wiem w jakim stopniu konkurencyjności stoi objective-c w stosunku do c++. Trochę irytuje mnie to, że język na który poświęciłem już trochę czasu (i pod który ustawiam sobie ścieżkę zawodową) jest uważany przez sporą rzeszę osób za po prostu chujowy. Do niskopoziomowych zastosowań są czyste C lub asm a do zabaw na wyższym poziomie mamy jave i c#. A sam c++ to takie cholera wie co... Podobno już odchodzi się od tego języka na rzecz objective-c, ale jak czasami przeglądam oferty pracy to znacznie więcej jest ofert dla programistów c++ aniżeli objective-c.
Osobiście raczej ciężko byłoby mi się przerzucić na jave czy c#.. już przywykłem do wskaźników, wycieków pamięci, operatorów new i delete.. na tyle, ze ciężko mi wyobrazić sobie programowanie bez tego :D. Po prostu wszystko musi być zgrane na tip top, nie chcę by żaden bajt poszedł na zmarnowanie :D
To też trochę temat na inną rozmowę, ale takie pierdolenie od czasu do czasu nie zaszkodzi.

Jestem trochę zmęczony, przepraszam za błędy (jeżeli oczywiście jakie kolwiek pojawiły)
 

inż. Avallach

inż. Avallach

Administrator
posty7662
Propsy5238
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

Programowanie
#19 2016-05-12, 10:22(Ostatnia zmiana: 2016-05-12, 10:59)
W sumie jestem skłonny Ci uwierzyć bo piszesz z perspektywy osoby która zna wiele języków programowania i potrafisz to ocenić pod różnymi kątami.
Jednak aspekty które wymieniłeś, jak wiesz, są wadami lub zaletami w zależności od zastosowania.
A mówimy o zastosowaniu którym jest nauka pierwszego języka programowania. Są w niej zdecydowanie wadami. Dla mnie to zamyka temat. To co piszę niżej to już tylko poboczne komentarze.

Podział na headery rzeczywiście jest cholernie irytujący i czasami dużo trzeba krwi napsuć by wszystko działało tak jak trzeba... jednak, jeżeli widziałeś specyfikę nowego standardu to mają to zmienić... oby.
Znam standard i plany co do niego. Takich absolutnie nie ma. Z wielu powodów ten podział nigdy nie zniknie, część jest wyliczona choćby tu: http://stackoverflow.com/questions/752793/should-c-eliminate-header-files

Niezastąpione zastosowanie makr to m.in. header guardy, jednak jest to rzecz prosta i nie uciążliwa.
To rzecz paskudna i uciążliwa, ale na szczęście są tutaj proste do zastąpienia - wszystkie dobre kompilatory wspierają #pragma once.

Semantyka wskaźników i referencji, owszem jest trudna, ale dla początkujących
Ten temat jest właśnie o nauce pierwszego języka programowania przez kogoś absolutnie początkującego.

Nie odczułem by STL był kiepsko zorganizowany. Być może to dlatego, że nie programuję na takim stopniu zaawansowania jak Ty?
Zgaduję że chodzi raczej o to że nie programowałeś w C# czy Javie gdzie ta organizacja jest bardzo dobra.
Przykładowo w C# klasa List jest w przestrzeni nazw System.Collections.Generic, tak samo jak Queue, Stack, Dictionary, Set itd. A klasa File w przestrzeni nazw System.IO, tak samo jak Directory czy StreamReader. W Javie mamy podobne bardzo przejrzyste hierarchie. Nie musimy nic wiedzieć o plikach gdzie znajduje się implementacja. Wystarczy że zaimportujemy odpowiednią przestrzeń nazw albo użyjemy w kodzie kwalifikowanej nazwy (np "System.IO.File").

W C++ klasa List jest w przestrzeni nazw std, a headerze "list". Klasy File będącej odpowiednikiem tej z C# i Javy nie ma w ogóle, jest za to zestaw wolnych funkcji które jej odpowiadają - i wszystkie są w przestrzeni nazw std, w headerze "cstdio". Cała biblioteka standardowa jest upchnięta w jedną przestrzeń nazw, nie ma tutaj żadnej struktury. Do tego żeby czegoś użyć, trzeba wiedzieć w jakim jest headerze, a nie ma żadnego oczywistego mapowania (w C# łatwo zgadnąć że File będzie w System.IO, w C++ trzeba zgadywać że zamiast File potrzebujesz fopen które jest w std w headerze "cstdio").

Wycieki pamięci jak wiesz można znacząco ograniczyć za pomocą smart pointerów, owszem mechanizm refleksji (chyba dobrze) Javy jest wygodniejszy bo nie zaprząta głowy programiście zarządzaniem pamięcią ale z drugiej strony daje to pewny narzut na pamięć jak i na czas obliczeń. Nowoczesne kompilatory javy pewnie robią robotę ale mimo wszystko nie może to być szybsze od wskaźników w c++ (przypuszczam, nie testowałem).
W moim dziale Nokii smart pointery są obowiązkowe, a i tak musiy uważać na wycieki (w ich znajdywaniu pomaga Valgrind który działa na CI). Trywialny przykład: masz obiekt który notyfikuje innych o jakimś wydarzeniu, a listę subskrybentów trzyma jako shared_ptry. Wszystko ok dopóki ten obiekt żyje dłużej niż każdy z klientów. W innym przypadku - masz swego rodzaju ich wyciek. Inny przypadek - cykliczne zależności. I tak dalej.
Refleksja nie ma nic wspólnego z zarządzaniem pamięcią. To mechanizm budowania kodu który jest świadom struktury innego kodu i robi coś według niego (np wybiera jaką metodę z innej klasy zawołać albo co zinstancjonować, zastosowań jest masa ale łatwo tego nadużyć).
Garbage collector ma narzut na pamięć i procesor, ale w masie przypadków zupełnie pomijalny w porównaniu z korzyściami. W wielu przypadkach kod w Javie czy C# będzie dużo szybszy niż analogicznie napisany kod w C++ - bo maszyna wirtualna wprowadza optymalizacje które w C++ trzeba by zaimplementować samemu. Sam przekonałem się o tym kiedy mój algorytm genetyczny sportowany z C# na C++ okazał się działać 10x wolniej dopóki nie zastąpiłem zwykłej alokacji przez "new" przez mój własny alokator oparty o pulę pamięci.

Kolejna sprawa jeśli idzie o pamięć to typy polimorficzne. W javie każdy typ z automatu jest polimorficzny co daje dwukrotny narzut pamięci w stosunku to typu niepolimorficznego.
Pamięć ram jest darmowa w porównaniu z roboczogodzinami pracy programisty. W praktyce i tak w pracy wszystkie klasy których używam oprócz PODów są polimorficzne i oparte o interfejsy. To u nas wymaganie wynikające choćby z tego że wszystko pokrywany testami jednostkowymi wykorzystującymi mocki.
Do tego np w C# nie każdy typ jest polimorficzny - oprócz klas mamy struktury, które są niepolimorficzne i przekazywane domyślnie po wartości a nie referencji.

Kolejna sprawa to maszyna wirtualna javy. Kodu nie uruchomisz nigdzie poza nią. Owszem jest to wada dla jednych i nieoceniona zaleta dla drugich. Dla mnie jest to niestety wada, ponieważ do komunikacji ze "światem" trzeba używać osobnych bibliotek napisanych w innym języku, dobrze mówię (to są chyba wrappery czy jakoś tak)?
To zaleta, bo narzędzia które tworzę są używane zarówno na Windowsach i Linuxach (część ludzi pracuje u nas tak, część tak). Maszyny wirtualne Javy i C# są dostępne na niemal wszystkie systemy. Do komunikacji ze światme używasz bibliotek (zazwyczaj biblioteki standardowej...) napisanych w tym samym języku. Wrappery masz do wołania funkcji napisanych w C++, ale tego właściwie nigdy nie potrzeba. Jak piszesz coś w sposób który zadziała wszędzie, to poleganie na czymś co trzeba osobno rekompilować i utrzymywać na różne platformy to mega problem. Programuję w tych językach od lat i nigdy nie miałem potrzeby robienia czegoś takiego. Gdybyś chciał z C++ wołać funkcje z programów w innych językach też potrzebowałbyś jakiegoś rodzaju wrapperów. Nawet do C trzeba pisać wrappery "extern C"...

objective-c
Jest niefajny i jego jedynym zastosowaniem było programowanie pod MacOS / iOS. Było, bo zastąpił go Swift. Koniec.


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry