Problem z nauką C++

Odpowiedz Nowy wątek
2019-06-01 17:29
0

Hej, piszę, bo już sama nie wiem, co mam myśleć. Od końca października zeszłego roku rozpoczęłam naukę C++ (wcześniej technologie webowe: html, css, odrobinę js i php z naciskiem na odrobinę). Poszłam na studia podyplomowe z C++ z nastawieniem, żeby nauczyć się programowania i zostać programistą zawodowo. Jestem w takim momencie mojego życia, że inna opcja nie wchodzi w grę (obecnie wykonuję pracę nauczyciela, której nie cierpię). Mam jednak wrażenie, że się do tego nie nadaję. Że chcieć to nie móc. Obecnie kończymy drugi semestr, gdzie przerabialiśmy algorytmikę, bibliotekę standardową, zaawansowane programowanie obiektowe (dziedziczenie i polimorfizm). Ale mam wrażenie, że dalej jestem trąba. Niby robiliśmy różne algorytmy, np. sortowanie bąbelkowe, rekurencyjne, ale jakbym miała teraz zadanie, by takowe napisać, to wątpię, że potrafiłbym bez ponownego przeanalizowania swojego kodu i dłuuugiej chwili na to. Tworzenie list mnie zabiło, a Tetris (chciałam taki wykonać na sfml'u) mnie pokonał. Wskaźniki w końcu zrozumiałam, choć mam wrażenie, że to jakiś łut szczęścia i że zaraz wyjdzie, że jednak tylko wydaje mi się, że rozumiem. Zresztą w projekcie zaliczeniowym i tak mam stosować inteligentne wskaźniki zamiast zwykłych, więc znowu pod górkę. Czy mam się martwić postępami? Czy zaczynając od "wtf, jak ludzie rozróżniają cin od cout" czy "do czego służy include", to te 7 miesięcy nauki to już postęp sam w sobie? Uczyłam się dużo, choć musiałam zrobić dłuższą przerwę między semestrami. Całkiem nieźle mi wychodzi programowanie funkcyjne, gorzej obiektowka, a jeszcze gorzej używanie biblioteki standardowej (iteratory, mapy). Co byście poradzili? Bardzo chciałabym załapać się na staż, choćby za psie pieniądze, żeby nie tracić kontaktu z programowaniem. Boję się, że jeśli będę tkwić w obecnej pracy, to będę skupiać się na niej, zamiast na nauce i zajmie mi lata, zanim w końcu ogarnę na sensownym poziomie, ale trochę wątpię, że się załapię przy obcnym poziomie wiedzy i umiejętności. A przede wszystkim boję się, że może jednak się nie nadaję :/ Wykładowcy wymagają od nas opanowania materiału, jakby ilość obecnego czasu była wystarczająca do tego, żeby sobie spokojnie poradzić. Sprawia mi przyjemność, gdy napiszę fajnie działający kod, ale zniechęca mnie to, z jakim trudem wszystko mi przychodzi. Co byście poradzili? Nie zniechęcać się? To normalne? Może po prostu więcej kodzić i będzie dobrze?

edytowany 1x, ostatnio: cerrato, 2019-06-16 22:56

Pozostało 580 znaków

2019-06-01 18:18
0

Niestety czy stety nie jest łatwo. Współczuję z powodu obecnej sytuacji. Co dalej - to już Twoja decyzja. Ale powinnaś mieć świadomość, że najprawdopodobniej trzeba będzie poświęcić na programowanie jeszcze wiele czasu. I to bez gwarancji sukcesu. Nie jestem pewny jak wygląda rynek IT w C++. Trzeba próbować do skutku. Wysyłać CV z myślą, że i tak mnie nie przyjmą. Dowiadywać się dlaczego nie i co muszę poprawić.

Pozostało 580 znaków

2019-06-01 18:26
1

C/C++ jest na początku trudny. Radzę przerzucić się na coś przyjaźniejszego, i nowszego. Może nauka Kotlin'a na platformę Android.

Pozostało 580 znaków

2019-06-02 14:04
0

Nie ma łatwej drogi, trzeba przesiedzieć kilkadziesiąt, kilkaset godzin przy kodzie i tyle. To co jest dzisiaj trudne jutro będzie łatwe bo się tego nauczysz. Mam wrażenie, że tobie coś nie wyjdzie w 10min i już się poddajesz zamiast analizować kawałek po kawałku dany problem. Na studiach uczą samych podstaw danych zagadnień natomiast książka jest tego rozszerzeniem. Trzeba po prostu siedzieć i być wytrwałym...... Jeżeli np nie potrafisz przesiedzieć nad czymś główkując się czemu to nie działa to niestety, ale tak właśnie wygląda programowanie. Trzeba umieć przesiedzieć nie odrywając się od monitora:D

edytowany 1x, ostatnio: Johny123, 2019-06-02 14:05
A nie powiedziałbym, że tak wygląda programowanie. To znaczy – może podczas nauki. - Silv 2019-06-18 03:59

Pozostało 580 znaków

2019-06-15 20:31
0

#Johny123 Raczej to wygląda tak, że siedzę tydzień i stwierdzam, że nie jestem w stanie tego zrobić, bo a) b) c) d), a czas goni, więc zwyczajnie nie zdążę... Nie mam problemu z siedzeniem nad czymś dniami przy komputerze. Wręcz powiedziałabym, że powinnam ograniczyć ten czas, bo to już zaczyna być niezdrowe. Po prostu nie wiem, czy to ja słabo ogarniam czy po prostu to normalne, że te kilka miesięcy to za mało czasu.

edytowany 3x, ostatnio: Midi, 2019-06-15 20:34

Pozostało 580 znaków

2019-06-15 22:34
2

Spokojnie, programowania człowiek uczy się długo. Oj długo. Patrz, programuję już 20 lat, a cały czas się uczę. Hehe :) Choć oczywiście to jak z nauką szachów, zawsze można wejść w problem jeszcze głębiej, niemniej jednak pierwsze owoce w programowaniu przychodzą po dłuższym czasie, tak więc nie ma co się załamywać. W dużym stopniu myślę, że wąskim gardłem może być sposób uczenia. Przede wszystkim C++ w dzisiejszych czasach dosyć średni pomysł. C++ jest mało strawny i obecnie już nie tak popularny. Już Java byłaby lepsza. Chociaż jeśli lubisz funkcyjne to może Scala — to jest bardzo fajny język. Rozważyłbym też javascript i uderzyć we frontend i od razu mieć dobre wyjście na node.js.
Poza tym, zmagając się ze wskaźnikami i tym podobnymi rzeczami to prędko czegoś użytecznego nie zrobisz, bo cały czas będziesz się martwić, że nie ogarniasz. Patrz, boisz się smart poiterów, choć z nimi przecież jest łatwiej programować, ale ty po prostu chyba nie nadążasz. I to jest normalne, taki jest wzorzec uczenia, choć moim zdaniem dosyć niezdrowy. Inny nauczyciel, bardziej nowoczesny język. To może pomóc. ;)
A najważniejsze pytanie jest czy lubisz programować. Bo jeśli nie sprawia ci to przyjemności to nie ma co. Ale jak mówisz, że siedzisz długo to chyba cię to jara, to dobry znak. :)

edytowany 2x, ostatnio: elwis, 2019-06-23 21:22
Może siedzi, bo lubi, jak w końcu działa (= rozumie zagadnienie na tyle, by napisać działający kod), a nie lubi pisać. To byłoby trochę jak ja. ;) - Silv 2019-06-18 04:01
OPka pisząc "funkcyjnie" miała zapewne na myśli programowanie przy użyciu funkcji (czyli de facto proceduralne). - enedil 2019-06-21 00:41

Pozostało 580 znaków

2019-06-15 22:49
2019-06-16 17:55
4

Czytam forum z doskoku, a jednak dość często trafiam na podobne listy.
Wg mnie robisz błąd polegający na tym, że dla Ciebie celem jest nauka C, a środkiem są ćwiczenia, zajęcia itp.
Odwróć sytuację. C ma być środkiem do czegoś, a nie celem samym w sobie.

Kiedyś podjąłem tu na forum próbę zaangażowania uczących się do wspólnej zabawy
(https://4programmers.net/Forum/1569600)
Założeniem było postawienie celu do zrealizowania. Wtedy postawiłem na grę zrobioną w JS, ale to nie wypaliło.

Teraz mam inną propozycję :-).
Założenia:

  1. Działamy w systemie Windows.
  2. Używamy dowolnego kompilatora zdolnego do wygenerowania kodu pracującego pod systemem Windows.
  3. Celem ogólnym jest napisanie kilku filtrów rastrowych (tzn. procedur manipulujących obrazem).
  4. Nie używamy gotowych bibliotek, które realizowałyby implementowane przez nas filtry.
  5. Pierwszym celem szczegółowym jest napisanie filtru konwertującego obraz kolorowy w monochromatyczny.

Ogólnie jak działają filtry w fotografii tradycyjnej (analogowej) można zobaczyć np. tu:
https://pl.wikipedia.org/wiki/Filtr_(fotografia)

Naszym celem będzie przeniesienie filtrów analogowych w świat cyfrowy. Kiedy będziemy już mieli jeden taki filtr, to potem od naszej inwencji będzie tylko zależało co i jak będziemy filtrować.

Na początek program nie musi mieć żadnego interfejsu.
Program musi mieć trzy procedury:

  1. Procedurę wczytująca zdjęcie.
  2. Procedurę filtrująca (to - o co nam chodzi).
  3. Procedurę zapisującą przetworzone zdjęcie.

Żeby maksymalnie uprościć sprawę przyjmiemy, że otwieramy pliki *.bmp zapisane w trybie trueColor (24 bity/piksel) i w takim samym trybie będziemy je zapisywać.

No to zaczynamy. Poniżej jest kod otwierający bitmapę i wyświetlający ją wprost na ekranie.
Kod jest napisany w VS 2017, ale powinien zadziałać w każdym kompilatorze generującym kod pod Windows.
Spróbuj to uruchomić i daj znać czy działa. Wtedy zrobimy procedurę zapisującą i przejdziemy do filtrowania.
Jak stworzysz jakiś super filtr - to kto wie - może kasa popłynie strumieniem :-).
(Oczywiście - jeśli coś jest nie jasne - to pytaj).

#include "stdafx.h"
//#include "windows.h" w innych kompilatorach być może trzeba zamiast stdafx.h dać windows.h

BYTE* LoadBmp(const char* filename, DWORD& offBits) {
    BITMAPFILEHEADER bfh; //nagłówek pliku
    HANDLE h = CreateFileA(filename, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    DWORD cRead;
    ReadFile(h, &bfh, sizeof(bfh), &cRead, 0);
    offBits = bfh.bfOffBits;
    BYTE* data = new BYTE[bfh.bfSize];
    ReadFile(h, data, bfh.bfSize, &cRead, 0);
    CloseHandle(h);
    return data;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){
    DWORD offBits;
    BYTE* data=LoadBmp("NAZWA_ZDJECIA", offBits); //w data jest załadowana bitmapa, NAZWA_ZDJECIA musi być pełną ścieżką do pliku *.bmp

    //Teraz wyświetlę bitmapę wprost na ekranie, Wiem, ze to nieładnie :-), ale co tam :-)
    BITMAPINFOHEADER* bih = (BITMAPINFOHEADER*)data;    //zrzutowałem data na nagłówek BITMAPINFOHEADER
    BYTE* bits = (BYTE*)(data + offBits);   //w miejscu data + offBits zaczynają się dane bitmapy

    //funkcja poniżej wyświetla bitmapę wprost na kontekście urządzenia
    HDC hdc = GetDC(0);//pobieram kontekst urządzenia dla ekranu
    StretchDIBits(hdc, 0, 0, bih->biWidth, bih->biHeight, 0, 0, bih->biWidth, bih->biHeight, bits, (BITMAPINFO*)bih, DIB_RGB_COLORS, SRCCOPY);
    delete[] data;  //usuwam dane
    ReleaseDC(0, hdc);  //zwalniam DC
    return 0;
}

edytowany 4x, ostatnio: Stefan_3N, 2019-06-17 18:28
Pokaż pozostałe 4 komentarze
Cd. A filtr można docelowo łatwo zamknąć w klasę. Jest tu też możliwość poćwiczenia współpracy z innymi programami (np. filtry do Photoshopa, gdzie przy okazji poznamy API innego - komercyjnego - programu). Więc jest to moim zdaniem dobry dydaktycznie temat, a i potencjał komercyjny by się tu znalazł (sam bym być może kupił jakiś ciekawy filtr do mojego programu). - Stefan_3N 2019-06-24 10:56
@Stefan_3N: Mnie się wydawało, że raczej chce się uczyć C++. - Silv 2019-06-24 16:22
Trochę bez sensu ta dyskusja :-). Mi to ćwiczenie naprawdę do niczego nie jest potrzebne :-). Skoro ktoś opisuje sytuację i prosi o wskazówki, to ja w dobrej wierze dzielę się swoimi doświadczeniami. Można skorzystać z tej propozycji lub nie - i dalej ćwiczyć coś tam w konsoli. Nikogo do niczego na siłę nie przekonuję. Mogę jedynie napisać, że zajmuję się grafiką od wielu, wielu lat i że jest to ciekawa (i wciągająca) działka, którą można uprawiać i w C i w C++, ale od czegoś trzeba zacząć. - Stefan_3N 2019-06-24 17:05
W porządku, tylko chciałem uściślić. - Silv 2019-06-24 17:06
Dodam, że przetwarzanie obrazów - to jedna z ważniejszych i przyszłościowych dziedzin rynku IT. AI, rozpoznawanie obrazów (medycyna), gry, VR. Tu zawsze będzie liczyła się wydajność i szybkość (więc i C i C++ wg mnie jeszcze przez jakiś czas będą w użyciu w tej dziedzinie). Uważam, że jeśli ktoś nie wie jeszcze co konkretnie chciałby programować, to warto spróbować tej działki. Ale każdy jest kowalem swojego losu :-). I to chyba byłoby wszystko ode mnie w tym temacie. - Stefan_3N 2019-06-24 17:40

Pozostało 580 znaków

2019-06-16 20:59
1

Nie wiem po co się teraz uczyć C++ skoro są łatwiejsze języki programowania takie jak Rust, Swift, a również szybkie. Do tego w Rust i Swift możesz pisać ciężki backend strony.

Na przykład programista silnika graficznego bez znajomości Cpp za daleko nie zajdzie? - Sunnydev 2019-06-17 13:10
Teraz tak silnik graficzny to C++, ale za parę lat może w Rust będziesz to pisał. - light 2019-06-17 21:03
@light: Słowo klucz: może - Burdzi0 2019-06-17 21:08
Mnie się widzi, że rozdrobnienie technologiczne postępuje. - Silv 2019-06-18 04:05
@Sunnydev: "Na przykład programista silnika graficznego" Już to widzę jak nauczyciel weekendowy programista pisze silniki graficzne. Ludzie litości. - mechanix 2019-06-18 05:59

Pozostało 580 znaków

2019-06-17 02:00
0

@light, @elwis: W moim mieście jest hub C/C++ Wszystkie poważne firmy robią właśnie w tym. Patrzyłam zapotrzebowanie na Javę czy web development, ale bieda. Co najwyżej jakieś małe firemki, które słabo płacą (słabo mam na myśli 3.5k nawet jeśli masz kilka lat stażu) i start-upy. W sumie tylko jedna duża firma robi web (PHP), ale warunki pracy są tam słabe. Podobnie jest z edukacją. Jedyne na co można liczyć to C++/Python, ewentualnie Java, ale koszt mnie zabił (10k). W sumie zależy mi, żeby jakoś zacząć i zdobyć doświadczenie, a co będzie potem, to będzie potem, język to tylko narzędzie. Nie wykluczam jednak, że będę ostatecznie zmuszona do emigracji do innego miasta, jeśli będę chciała się rozwijać w czymś innym :/

edytowany 2x, ostatnio: Midi, 2019-06-17 02:05
skąd jesteś? - belzebub269 2019-06-17 12:36
z zadupia - Pijak 2019-06-17 12:44
@Pijak: lepiej z zadupia niz z comarchu :D - belzebub269 2019-06-17 12:46
Wolę publicznie nie mówić :P - Midi 2019-06-18 03:10

Pozostało 580 znaków

2019-06-17 13:08
0

To taki w sumie normal stuff, że C++ ciężko wchodzi. Jakoś półtora roku temu zacząłem się uczyć Cpp na poważnie i dopiero teraz jestem na takim poziomie, że pisanie w nim jest dość komfortowe i mogę się zabierać za poważniejsze rzeczy (haha).

Na programowanie trzeba czasu, a śpieszenie się z nauką czy kucie na blachę mija się z celem - szczególnie w Cpp. Jeśli z resztą utkniesz na jakimś temacie, np. wskaźniki czy chociażby coś ze standardowej biblioteki, to nie próbuj się uczyć na siłę, tylko pomiń ten temat na razie i zajmij się czymś innym. Dużo pisz kodu, a po czasie jakoś sama przyjdzie Ci ta wiedza z którą miałeś problem wcześniej. A no i Tetris w zasadzie to trochę rzucanie się z motyką na słońce, jeśli nie jesteś pewien swoich umiejętności - dobierz sobie trochę mniejsze projekty i stopniowo zwiększaj poziom zaawansowania.

Powodzenia.


𝓜𝓮𝓷𝓽𝓪𝓵
𝓐𝓫𝓾𝓼𝓮
𝓣𝓸
𝓗𝓾𝓶𝓪𝓷𝓼
edytowany 2x, ostatnio: Sunnydev, 2019-06-17 13:12

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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