Problem studenta informatyki

0

Wiem, że trochę offtop, ale mam ważne pytanie :D

Jestem studentem informatyki stosowanej (II semestr), własnie do mnie dotarlo, ze na studiach naucze sie podstaw wielu dziedzin informatyki, a zeby odniesc jakis pozytek, trzeba sie rozwijac w tym co mnie zainteresuje...

Najgorsze, ze w sumie nie wiem co mnie interesuje :D

Ale chyba najbardziej interesuje mnie programowanie i algorytmika...

Czego sie uczyc z danego jezyka?
Teraz mam kurs C (juz raczej sporo sam sie z niego nauczylem), ale laborki pewnie jeszcze poszerza moja wiedze, ale na cuda nie ma co liczyc, bo co mozna nauczytc sie na 13-14 spotkaniach...

Co powinienem umiec z C, zeby uznac ze dobrze znam ten jezyk.

Mam tez teraz kurs Algorytmow i struktur danych. Podobne pytanie jak wyżej: Co powinienem umiec z tego, aby uznac ze umiem wystarczajaco duzo?

Czy sens jest sie uczyc np. wszystkich algorytmow, struktur z cwiczen na pamiec, czy nie ma sensu jak zawsze przeciez moge zagladnac do ksiazki?

Jezeli nie, to jakie algorytmy, struktury, powinienm rozumiec i z pamieci je pisac?

0

Sam Ansi C to bez trudu mozesz sie go nauczyc calego.
Struktury tez raczej wiekszosc, a na pewno listy, stos, drzewa, grafy ;)
Algorytmy tak naprawde to mi same przyszly, po prostu trafialem na problem i go rozwiazywalem, poznajac przy tym rozne algo.
Z ksiazek to mozna sie moim zdaniem podstaw tylko nauczyc, dopiero stajac przed jakims problemem poznajesz nowe rzeczy oraz uczysz sie praktycznego wykorzystania zdobytej wiedzy.

Pytanie, uznac ze umiem wystarczajaco duzo jest dla mnie nie na miejsu.
Ja uznam, ze umiem wystarczajaco duzo jak bede umial wszystko z jakiegos scislego tematu, ktory mnie bardzo interesuje.
Oczywiscie z tematu nie tak rozleglego jak algo, ale na przyklad takim tematem moze byc algorytm euklides'a.
Nie stawiam sobie ogromnych celow, tylko ide malymi krokami do przodu.

Co do tego, czy jest sens uczyc sie wszystkich algorytmow i struktur na pamiec to raczej nie, ale poznac do perfekcji podstawy i wiedziec gdzie mozna znalezc jak najszybciej informacje co do trudniejszych rzeczy jak najbardziej.

0

Nie ma co wkuwać na pamięć wszystkich algorytmów i struktur. Biblioteki standardowe i tak z reguly mają je już zaimplementowane.
Warto za to rozumieć te algorytmy i umieć je odpowiednio zmodyfikować w razie potrzeby. Poza tym warto wiedzieć jakie mają własności, złożoność i kiedy należy z nich korzystać. Żeby wiedzieć kiedy np. warto używać LinkedList a kiedy absolutnie nie ;) Warto pobawić sie w zadania na Spoju ;)

Jeśli chodzi o C to najpierw opanuj wszystkie podstawy składniowe, a potem po prostu dużo pisz (W takiej kolejności! Nie odwrotnie!)

0

@owen:
Jest jeszcze jedna bardzo ważna rzecz związana z programowaniem, której nawet nie wymieniłeś: inżynieria oprogramowania.

Zalicza się do niej również planowanie i projektowanie systemu, ale przede wszystkim chodzi w niej o to, by zapewnić naszemu kodowi jak najwyższą jakość. "Nauczenie się języka", szczególnie tak minimalistycznego jak C, to nie jest wcale tak duży problem. Dobrzy programiści muszą jednak tworzyć czytelny, odpowiednio uniwersalny/abstrakcyjny kod. W dodatku nie zawierający zbyt wielu błędów. To już jest znacznie większym wyzwaniem!

Chodzi o takie rzeczy, jak nazewnictwo zmiennych, czy funkcji. Jak zmniejszanie powiązań pomiędzy poszczególnymi modułami, dzięki czemu po zmianie w jednym nie trzeba zmieniać dziesięciu innych. Albo inne zagadnienie: testowanie programu, czy raczej jego składowych. Pisze się automatyczne testy, które można wykonać jednym kliknięciem/jedną komendą i które aplikacja musi przechodzić po każdej zmianie.

W czystym C nie poznasz też programowania obiektowego, a to chyba w nim tworzy się większość współczesnego kodu. No chyba że naprawdę chcesz pracować na niskim poziomie (w sensie: bliskim maszyny; nie mówię że to coś złego).

Tak czy siak, znajomość C bardzo Ci zaprocentuje. Musisz w nim opanować wskaźniki i nie możesz się chronić przed implementacją rzeczy takich jak klasyczne stringi. Naprawdę warto to zrozumieć, bo potem używa się tego w językach wyższego poziomu, tyle że tam jesteśmy już od tej implementacji oddzieleni przez solidną warstwę syntaktycznego cukru. Tymczasem stringi są zwykle zaimplementowane bardzo podobnie do stringów z C i ta wiedza może czasem wiele wyjaśniać.

Można też powiedzieć, że składnia wielu języków opiera się na C. O C++ nie muszę chyba wspominać, ale na C wzorowana była też Java, a także C#, czy nawet PHP. Dobre poznanie tej składni to podstawa.

Ogólnie myślę, że nauczenie się C jak najbardziej zaprocentuje, ale prawdopodobnie będziesz chciał się przenieść na język wyższego poziomu. Znajomość składni C sprawi jednak, że sporo będziesz rozumiał od razu.

Co do algorytmów i struktur to hmm... Ze struktur danych będziesz korzystał praktycznie zawsze i wszędzie. Musisz posiadać więc o nich pewną wiedzę. Listy, mapy, drzewa -- to wszystko trzeba dobrze rozumieć. Ale nie są to skomplikowane rzeczy. W przypadku algorytmów mam wrażenie, że jest odrobinę inaczej. Będziesz pewnie korzystał często np. z sortowania czy przeglądania drzewa. To pierwsze jednak jest zaimplementowane w bibliotekach standardowych i istnieje mała szansa, że zrobiłbyś to lepiej. Przeglądanie drzewa będziesz robił sam, rekurencyjnie, w ten czy inny sposób. Ale to jest dość proste.

Ah, rekurencja. Ją też dobrze by było, żebyś ogarniał. No i złożoność obliczeniowa: powinieneś wiedzieć z czym to się je. Ogólnie uważaj na zajęciach z AiSD, ale prawdopodobnie nie będziesz musiał mieć tego wykutego na blachę w pracy.

0

Teoria teorią, ale praktyka czyni mistrza.

Postaw przed sobą jakiś cel - np stworzenie jakiegoś ciekawego, większego programu. Nie dość, że podszkolisz się w języku programowania, nabędziesz doświadczenia(zetkniesz się z realnymi problemami, a nie czysto akademickimi algorytmami), to będziesz miał całkiem ciekawy program, który może być podstawą Twojej pracy dyplomowej - wystarczy, że wybierzesz sobie temat - :)

Jeśli znasz C to spróbuj z C++ - na czystym C daleko nie zajedziesz - obiektowość daje więcej możliwości.

0

WItam wszystkich mam problem z algorytmem i nie wiem czy mam dobrze rozwiązane

Napisz funkcję, która dla danej tblicy a, liczby n i wartości x
sprawdza, czy x występuje wśród elementów a[1], a[2],...,a[n]. W celu
przyspieszenia wyszukiwania wykorzystaj a[0] jako wartownika

SortWart(int m, int a[])
{
int x, i, min, b;
{
min=0;
for (i=0; i<m;i++)
if (a[i]<a[min])
min = i;
b=a[0];a[0]=a[min];a[min]=b;
}
for (int n=1; n<n-1 ; i++)
{
x=a[n];
while (x<a[n-1])
{
a[n]=a[n-1];
n--;
}
a[n]=x;
}
}

W oparciu o następującą zależność napisz funkcję
rekurencyjną wyznaczającą a^n. Oszacuj koszt czasowy
| 1 n = 0
an | (a2)^n/2 n parzyste
| a*(a2)[n/2] n nieparzyste

int Powr(int a,n,k,m)
{
int l;
k=a^2
if(n%2!=0)
{
m=floor(m/2);
l = a*power(k,m);
}
if(n%2=0)
{
l=power(k,n/2)
}
else
{
return 1;
}
}
Czy ktos moze to sprawdzić i poprawić bo muszę oddac do piątku ;/ a ja nic nie kumam

Pozdrawiam

0

:-D Nie mogłeś założyć nowego wątku?
I nikogo raczej nie obchodzi że do piątku...

0

w przypadku C/C++ NAJWAZNIEJSZE jest DOSWIADCZENIE, rozne kompilatory, rozne platformy itp itd :P

0

Hej MSM. jesli umiesz rozwiązać to czemu nie mozesz mi pomóc :( <prosi>

MSM. napisał(a)

:-D Nie mogłeś założyć nowego wątku?
I nikogo raczej nie obchodzi że do piątku...

1
Gedokawa napisał(a)

Hej MSM. jesli umiesz rozwiązać to czemu nie mozesz mi pomóc :( <prosi>

Fizycznie może być w stanie Ci pomóc, ale czy Ty pomagasz KAŻDEMU komu fizycznie jesteś w stanie pomóc? Nie wydaje mnie się.

Wstawiłeś tutaj kod bez żadnego formatowania. Nie napisałeś nawet w jakim języku programowania jest to napisane (a^2 w sensie "a kwadrat"? brak zadeklarowanej wartości zwracanej dla funkcji SortWart...?). Kod wstawiłeś niesformatowany. Być może miałeś sformatowany, ale nie użyłeś tagów < code >. Jeśli to jest C to przed kodem dodaj "< code=c >" (bez tych spacji), a za kodem "

". I upewnij się, że masz porządnie zrobione wcięcia. Tego, co jest teraz, nie da się nawet czytać i nie dziwię się, że nikomu się póki co nie zachciało.

Poza tym... "muszę oddac do piątku ;/ a ja nic nie kumam". Nic nie kumasz? Więc co, chcesz żeby ktoś odwalił całą robotę za Ciebie? Czy żeby WSZYSTKO -- włącznie z podstawami języka i algorytmów -- Ci wytłumaczył? To pierwsze to do działu Praca (upewnij się, że podałeś proponowane wynagrodzenie:P), tego drugiego raczej nikt się nie podejmie, bo wymaga to za dużo czasu. 

Tutaj naprawdę często ludziom POMAGAMY, jeśli chcą się czegoś dowiedzieć, czy mają problem ze zrozumieniem konkretnej rzeczy. Całkiem za darmo. Ale wykonywanie za kogoś pracy to jest -- z definicji -- wykonywanie pracy. Programiści za darmo raczej nie pracują.
0

Zakładam że to c, chociaż c++ też by uszło. Sformatowałem kod za ciebie (pamiętam jak ktoś kiedyś narzekał że nie może sformatować bo nie miał jeszcze w podręczniku o "białych znakach"...)

napisz funkcję, która dla danej tblicy a, liczby n i wartości x
sprawdza, czy x występuje wśród elementów a[1], a[2],...,a[n]. W celu
przyspieszenia wyszukiwania wykorzystaj a[0] jako wartownika

SortWart(int m, int a[]) // WTF 1 - co to za 'm'? liczba miała być 'n'... Ale nieważne...
{
	int x, i, min, b;  //WTF 2 - deklarujesz x? Nie miałeś przypadkiem sprawdzać czy nie występuje w zbiorze? ...
	{      // WTF 3 -> po co ten blok? :/
		min=0;
		for (i=0; i<m;i++)
			if (a[i]<a[min]) // WTF 4 - min wynosi zawsze 0 - na pewno o to ci chodziło? W sensie wartownik?
				min = i;
		b=a[0];  // \
		a[0]=a[min];// WTF 5 Wiem że nic nie wiem. Co to robi znaczy się. Domyślam się że wartownik?
		a[min]=b; // /
	}      // WTF 3 ends.
	for (int n=1; n<n-1 ; i++) // WTF 6: n < n-1 - powodzenia :D
	{
		x=a[n];
		while (x<a[n-1]) // WTF 7 (prawie jak WIN 7) - masz sporą szansę już nie wyjść z tej pętli.
		{
			a[n]=a[n-1]; // WTF 8 - przesuwasz wszystkie elementy w tablicy w dół? To ma być przyśpieszenie? ;)
			n--;
		}
		a[n]=x;
	}
}

W skrócie nie rozumiem kodu zupełnie ;(

Prościej byłoby napisać wszystko od nowa niż poprawiać...

1

Jeszcze jako taka bardziej ciekawostka. Może też ku przestrodze.

Przypadek stał się dość znany, bo trafił dzisiaj na stronę główną Wykopu. Też ktoś z uczelni technicznej, choć nie z informy, chciał sobie ułatwić zadanie. Niby nawet "uczciwie" chciał kupić projekt, tyle że kupowanie projektów jest na uczelniach zakazane, jakby ktoś nie wiedział. Efekt widać na załączonym zdjęciu:

http://img85.imageshack.us/img85/4368/image524.jpg

Naturalnie nikt by go nawet nie ochrzanił, gdyby do projektu podszedł poważnie i sam chciał go rozwiązać, a specjalistę tylko poprosiłby o jakieś wskazówki. To by były korepetycje. A wykonywanie roboty za kogoś to coś zupełnie innego.

0

Chyba lepiej ,żeby koleś zaproponował komuś zrobienie prawdopodobnie ,bardzo ciężkiej jak dla niego pracy niż miałby znaleźć w necie i oddać to samo co 5 innych osób. Czy sam nigdy nie pisałeś nikomu pracy na zaliczenie ? Rozumiem ,że są studenci idealni (pewnie kilku z was też) ,co jak studiują informatykę to uważają ,że powinni z każdego przedmiotu (od podzespołów cyfrowych,assemblerów do excela, offica, gimpa) mieć najwyższe oceny ,albo przynajmniej sporą wiedzę i umiejętności, ALE czy jeśli powiedzmy mam problemy ze stworzenie jakieś sieci neuronowej w programie ,którego nawet google prawie nie zna i wiem ,że nigdy w życiu tego nie będe robił i mi się to nie przyda, to znaczy ,że nie zasługuję na studiowanie informatyki ??

Najlepiej założyć ,że wyżej wymieniony student to leń na maxa, który pewnie chleje browar za pieniadze mamy i się niczym nie interesuje.

Zgodze się ,że mógł spytać o pomoc ,ale jeśli kompletnie nie ma pojęcia jak do tego się zabrać i ma na głowie prace/inne projekty to byłoby to trochę bez sensu i pewnie by mu nikt pomógł( w sensie wolelibyście napisać prosty program niż odpowiadać na pytani czym się różni for od while).

Nie chcę do końca bronić studenta, bo owszem mógł to być jakiś zwykły totalny leń ,który poszedł na studia ,bo słyszał ,że po nich nieźle zarobi, ale sugerowanie wyrzucenia go ze szkoły w odpowiedzi na jego prośbę o pomoc z projektem jest zdecydowanie przesadą (nazwałbym to inaczej, ale się powstrzymam :) ).

0

Zgodze się ,że mógł spytać o pomoc ,ale jeśli kompletnie nie ma pojęcia jak do tego się zabrać i ma na głowie prace/inne projekty to byłoby to trochę bez sensu i pewnie by mu nikt pomógł( w sensie wolelibyście napisać prosty program niż odpowiadać na pytani czym się różni for od while).

Właściwie to masz rację (zauważ że nie zaczął "rozmowy" od 'zróbcie mi' albo nawet 'jak zrobić', tylko podał swój - mimo że całkowicie błędny - program. Za to samo ma już u mnie +50 do respect). Czekałem na odpowiedź studenta żeby go móc trochę naprowadzić, ale jak widać się nie doczekam chyba.

A może to ja tak po prostu przerażam ludzi?
Właściwie to szkoda, bo naprawdę chętnie bym mu pomógł ;(

0

@mistrz Joda:
Gdy ktoś NAPRAWDĘ jest zawalony lub NA PEWNO nie dotyczy to jego dziedziny (którą sobie dobrze zdefiniował) -- to IMO odpuszczenie jednego projekciku na semestr czy dwa moralną tragedią nie będzie. Ja donosów nie składałem, na pewno nie zrobiłbym tego w takim przypadku jak w tym temacie (póki co). Jeden projekt to nie praca dyplomowa. Chyba większości z nas zdarzało się ściągnąć na egzaminie, czy coś.

Nie podobają mi się jednak sytuacje, że nagle ktoś nie jest w stanie sobie poradzić z programowaniem, mimo że niby w przyszłości może mieć z tym do czynienia. Bo cały semestr nic nie robił, a na końcu okazało się, że programu sam nie napisze. Więc prosi, żeby zrobić to za niego.

Jak jest w tym wypadku -- nie wiem, nie osądzam. Trzeba się jednak liczyć, że jak pozostawimy na piśmie (choćby elektronicznym) dowody na to, że zapłaciliśmy za projekt, to możemy za to beknąć.

0
Mistrz Joda napisał(a)

ALE czy jeśli powiedzmy mam problemy ze stworzenie jakieś sieci neuronowej w programie ,którego nawet google prawie nie zna i wiem ,że nigdy w życiu tego nie będe robił i mi się to nie przyda, to znaczy ,że nie zasługuję na studiowanie informatyki ??

Tak. Nie mogę pojąc po ch*j tyle osób, których nie interesuje programowanie, idzie na informatykę. Do zarządzania serwerami, nawet w dużej korporacji, naprawdę nie trzeba robić magistra z informatyki. Bo potem nagle się okazuje, że 90% przedmiotów "nigdy mi się w życiu nie przyda".

0

A gdzie mają iść. Jak ktoś jest naprawdę mega pasjonatem i zdolny to może iść na turystykę i rekreacje a i tak dostanie potem pracę ,bo będzie dobry. Większość jednak nie czuje się tak pewnie i idzie na informatyke ,bo lubi którąś z jej dziedzin (niekoniecznie programowanie). Studia powinny dawać możliwości rozwoju pasjonatom, tym którzy się przykładają do przedmiotów, żeby poczuli ,że po coś na tą uczelnie poszli. Jednoczesnie nie powinni cisnąć z każdego przedmiotu, bo "spędziłem ostatnie 20 lat w assmeblerze więc i wy musicie go dobrze umieć , bo jak nie to nie nadajecie się na studentów programistów informatyków i w ogole do niczego"... Wiadomo lepiej z każdego przedmiotu coś liznąć ,ale trzeba spojrzeć na studentów chłodnym okiem ,że np na 100 tylko 10 będzie projektować bazy danych i dać im dodatkowe/cięższe projekty ,a reszte nauczyć podstaw i niech skupią się na tym co lubią. To moja wizja idealnej uczelni :)

0
Mistrz Joda napisał(a)

A gdzie mają iść.

Technik informatyk + jakieś tam kursy, certyfikaty czy co tam firmie potrzebne do szczęścia.

Mistrz Joda napisał(a)

Większość jednak nie czuje się tak pewnie i idzie na informatyke ,bo lubi którąś z jej dziedzin (niekoniecznie programowanie).

No i tu jest problem bo utrwaliło się w naszym społeczeństwie błędne znaczenie pojęcia informatyka. Hint: to nie jest nauka obsługi komputera czy innego routera. Sorry, ale nie idzie się na architekturę bo się lubi rysować, a potem narzeka, że cisną z matmy. Jeszcze pół biedy jak tracisz tylko swój czas, ale dzięki tobie znacząco obniża się poziom bo przecież nie wyrzuci się połowy osób, które pomyliły kierunki. Znika jedna z zalet studiowania, bat nad głową. Jak każdy może zaliczyć to po co się starać. Nagle się okazuje, że tak naprawdę nie ma z kim robić projektów zespołowych, bo każdy już swój kupił/dostał/znalazł albo nie wyszedł poza "hello world" bo przecież to mu się w życiu nie przyda.

W skrócie, ten cały syf to już nie tylko jest w prywatnych szkołach zarządzania i marketingu, ale też w technicznych uczelniach państwowych. Ten ujawniony e-mail to nie jest wyjątek, tylko reguła. Przynajmniej tak to wygląda z mojej perspektywy.

1

Technikum + certyfikat raczej dużo ci nie dadza, o ile nie jestes naprawdę dobry a raczej zmotywoany zeby pracowac przez kilka miesiecy za free (chyba ,że masz co pokazać ,ale rzadko ludzie bez doswiadczenia maja sie czym chwalic). Co do reszty to masz rację. Studiuje informatyke na studiach dziennych i jestem przekonany , ze poza szkola programuje moze 5% osob, a reszta sie obija/uczy do kolosow ktore beda za miesiac :) Na ostatniej grupie .NET bylo w sumie 5 osob(z prowadzacym). Z jednej strony to przykre ,bo nie ma z kim pogadac o jakis nowosciach w C# 4.0 i projektu tez wiekszego nie zrobisz. Z drugiej zwieksza to twoje szanse na rynku pracy, bo reszta mysli ze "po studiach sie cos znajdzie" ,a ty mozesz juz na studiach sie skupic na 1 technologi ,rozwijac i pojsc do pracy jesli sie da. Nie uwazam jednak ,ze zwiekszenie ogolnego poziomu by cos zmienilo. Ludzie by sie wiecej uczyli ,ale i tak zeby tylko zaliczyc ,a pasjonatow mogloby byc nawet mniej (nie mozna robic 6 roznych projektow naraz i jednoczesnie jeden duzy w ulubionej technologii).

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