Wątek przeniesiony 2017-09-27 15:28 z Newbie przez furious programming.

Analiza moich szans na pracę jako programista

0

Cześć, jestem tu nowy, jestem również nowy w temacie programowania (coś tam wiem - a to z uwagi na informatykę w liceum i C++ którego na niej męczyliśmy).
Szukam odpowiedzi na pytanie - czy pomysł, aby zostać programistą jest w moim przypadku dobrym wyborem.
Jestem zafascynowany tematem programowania - można naprawdę się w to wkręcić, ucząc się nowych rzeczy i rozwijać w wielu kierunkach. Można też... myśleć! Od kiedy zacząłem mały kurs programowania, wydaje mi się, że poruszam nowe obszary mojego mózgu, dotąd nieaktywne :) - fajnie było by więc MYŚLEĆ i rozwiązywać problemy podczas czynności jakie wykonuję w pracy.
Okey, wszystko fajnie, ale pojawia się pytanie - czy podołam? Ostatnio za namową znajomego programisty zacząłem się uczyć języka C++. Liznąłem podstawy (na razie bardzo mało, dopiero kilka dni) i zacząłem szperać w sieci rozglądając się za jakimiś zadaniami które mógłbym wykonywać jako ćwiczenia. Natrafiłem na stronkę projecteuler.net i sprawdziłem pierwsze zadanie... no i zacząłem mocno się zastanawiać - przeraziła mnie matematyka i moje zaległości z tej dziedziny. Słyszałem opinie, że programiści pracujący przy aplikacjach dla dużych firm wcale nie muszą być jacyś super z matmy i do pracy zazwyczaj nie wykorzystuje się skomplikowanej matematyki, ale kiedy patrzę na zadania dla początkujących to jest to w większości przypadków matematyka - może nie skomplikowana - ale nie można też być z niej "noga".
Posługując się pierwszym przykładem ze strony projecteuler.net : https://projecteuler.net/problem=1 :
Czy muszę być w stanie zrobić to zadanie "na kartce" nie używając pomocy - tzn nie googlując np "wzór na obliczanie wielokrotności"? czy raczej w ćwiczeniach z tej strony bardziej chodzi o to, żeby znaleźć rozwiązanie i przekuć je na kod?
Wiecie... bo jeżeli miałbym sam dochodzić w każdym zadaniu do wzorów czy metod jego wykonania, to chyba jednak jest za trudne i wcale nie liczy się czas poświęcony na naukę - są ograniczenia których niektórzy nie przeskoczą.

0

Na kartce papieru, albo w wyobraźni jest najłatwiej zrobić takie zadanie.

Chodź czasem lepiej w google wpisać i użyć jakiegoś gotowego narzędzia niż samemu klepać, bo spisywanie rozwiązań z internetu, to trochę kiepsko jak na programistę.
Ale użycie jakiejś biblioteki czy frameworka to nie powinno raczej przekreślać.

0

No dobra, a mógłbyś podać mi przykład jak rozwiązał byś "na kartce" zadanie które podlinkowałem?

0

Nie martwiąc się o nic można przecież zrobić sobie zbiór wszystkich wielokrotności liczby 3 dodając tak długo 3+3 dopóki jest mniejsze od 1000.
i potem dodawać do zbioru, wszystkie wielokrotności 5 też dopóki mniejsze od 1000.

W zbiorze liczby nie mogą się powtarzać czyli np. 3+3+3+3+3 = 15 i 5+5+5 = 15, ale w zbiorze będzie tylko jedna 15.
Potem sumujesz wszystkie liczby w zbiorze.

0

Faktycznie, masz rację. Myślałem tylko, że trzeba użyć jakiejś bardziej zautomatyzowanej metody żeby to obliczyć... coraz bardziej się zastanawiam czy Ja w ogóle mam czego szukać w programowaniu

0
matheuszK napisał(a):

Faktycznie, masz rację. Myślałem tylko, że trzeba użyć jakiejś bardziej zautomatyzowanej metody żeby to obliczyć... coraz bardziej się zastanawiam czy Ja w ogóle mam czego szukać w programowaniu

Czasem są wzory, co pozwalają wykonać dane zadanie szybciej, ale do tego zadania akurat nie znam, więc może być kiepsko rozwiązane.

0

Po prostu samemu rozwiązuj zadania bez użycia google, to się wprawisz.

0

Rozumiem, dzięki za odpowiedź.
To zadanie to tylko przykład - próbuję znaleźć jakąś metodę za pomocą sprawdzę czy mój mózg jest brutalnie mówiąc dość wydajny aby zostać programistą

0

To zadanie można rozwiązać na kilka sposobów. Możesz tu wykorzystać ciągi arytmetyczne. Dla wielokrotności liczby 5 r będzie wynosiło oczywiście 5, a dla 3 analogicznie 3. Później obliczasz ile takich liczb mieści się w 1000 (oczywiście bez 1000). Dla wielokrotności 5 takich liczb jest 199, a dla 3 jest ich 333 (a199 = 995, a a333 = 999). Następnie korzystasz ze wzoru na sumę ciągu arytmetycznego, czyli s199 = 99500, a s333 = 166833. Teraz pojawia się kolejny problem, 5 i 3 mają trochę wspólnych wielokrotności - 15, 30, 45... Czyli teraz musisz wiedzieć ile jest takich wspólnych wielokrotności, ostatnią "wspólną" liczbą jest 990 (to oczywiste), dzielisz ją na 15 co daje nam 66 - tyle jest wspólnych wielokrotności. Dalej robisz bardzo podobnie jak wcześniej, czyli liczysz sumę ciągu arytmetycznego w którym r=15, wychodzi, że s66 = 33165. Teraz nie pozostaje nic innego jak: s199 + s133 - s66 = 233168.

0

jezu, GN - na pierwszy rzut oka w ogóle nie rozumiem. Niestety, więc to chyba nie moja bajka. Ciekawe jak muszą czuć się ludzie którzy idą na jakiś kurs programowania za kilkanaście tys i potem okazuje się, że nie rozumieją takich rzeczy jak mi tu podajecie...

Biały Szczur - wziąłem sobie kolejne zadanie... i nie mam nawet cienia podejrzeń jak można je wykonać. Więc raczej się nie "wyrobię" jak najprostszych rzeczy nie potrafię.

0

hehe, zapomniałem że przecież jest wzór na sumę ciągów arytmetycznych i geometrycznych, nie wiem dlaczego nie znalazłem tego wzoru w swojej głowie jak go znałem, no cóż, czasem tak jest :D

To co GN podał to i tak sama matematyka, czyli źle oceniasz mówiąc o programowaniu jak on podał samą matematykę, czyli słabo u ciebie z matematyki.

0

Liznąłem podstawy (na razie bardzo mało, dopiero kilka dni) i zacząłem szperać w sieci rozglądając się za jakimiś zadaniami które mógłbym wykonywać jako ćwiczenia

To znaczy na jakim jesteś etapie? Pytam, bo może zamiast brać się za tego typu strony (btw. nie mam przekonania co do używania ich przez początkujących ) sensowniej by było się nieco więcej poduczyć.

0

Eh, znowu ci źle powiedziałem, jak nie umiesz rozwiązać nic, to weź najpierw zobacz sobie jakieś zadania i rozwiązania, przeanalizuj rozwiązanie dokładnie, testuj i odpalaj tak długo, aż zrozumiesz każdą linijkę kodu jak działa, potem następne i jak tak kilka przeanalizujesz to sam potem dojdziesz do wniosku jak powinno się mniej więcej cokolwiek budować.

Zwykle jak umiesz jakiś język bez bibliotek i frameworków, to zwykle jak na kartce papieru tak ręcznie coś policzysz jak na lekcji matematyki, to tak samo zrobisz to w programie takie jakby ręczne obliczenia, ale użyjesz lepszych mechanizmów i znacznie szybszych.

0

To podlinkowane zadanie https://projecteuler.net/problem=1 jest bardzo, bardzo proste, wręcz banalne. Wystarczy napisać jedną pętlę for z instrukcją warunkową if w środku. Żeby zrobić te zadanie wystarczy znać podstawową arytmetykę z zakresu szkoły podstawowej. Nie trzeba nawet wiedzieć co to są ciągi arytmetyczne.

Przykładowe rozwiązanie w języku Python:

s = 0
for i in range(1000):
    if not i % 3 or not i % 5:
        s += i

Da się nawet krócej jednolinijkowcem (List Comprehensions). W C++ będzie analogicznie pętla for i jeden if w środku.

Programiści na co dzień mają trudniejsze problemy do rozwiązania.

0

Da się nawet krócej jednolinijkowcem (List Comprehensions)

Potwierdzam:

print( sum ( [i for i in range(1000) if not (i % 3  and i % 5) ] ) )

Jakby ktoś się dziwił czemu "if-y" są różne, niech sobie przypomni lekcje logiki,

0
Haskell napisał(a):

Interesujące, sam tego wcześniej nie widzałem, a wystarczyło sprawdzić, wszystkie możliwe kombinacje i wychodziła bramka nand :)

Podzielne, przez jedno i drugie - true
podzielne tylko przez pierwsze - true
podzielne tylko przez drugie - true
Podzielne przez żadne - false

NAND idealnie odwzorowuje zachowanie

Thx, sam coś zrozumiałem :)

0

Serechiel - podstawy tzn 4 filmy z videotutoriala. Wiem ze podstawy to za duzo powiedziane w tym wypadku :) wiem co to jest zmienna int, float, dwa rodzaje pętli - tyle. Ale rozwiązanie jakie podałeś w pythonie potrafię rozszyfrowac/rozumiem na pierwszy rzut oka - domyślam sie działania funkcji "%"...

To prawda, z matematyka stalem zawsze tragicznie, ale myślenie abstrakcyjne i logiczne ogólnie mam dość rozwinięte ale bardziej w kierunku filozoficznym, ze tak powiem.

Dzieki chłopaki za odpowiedzi. Mocno się zastanawiam czy jezeli nie umiem "na kartce" policzyć takich rzeczy to czy nadaje sie do tego zawodu - traktuje takie decyzje poważnie a nie na zasdzie - pouczę sie bo fajne i potem naaaara

0

Zerknijcie na kolejne zadanie ze stronki - z liczbami Fibonacciego.
Wydaje mi sie ze trzeba stworzyć polecenia które:

  1. Wypisza wartości do 4000000 w ciagu
  2. Sprawdzi czy liczby ze zbioru sa podzielne przez dwa
  3. Zsumuje te liczby.
    No i tyle w zasadzie.

Wiec czy te zadania trzeba umieć zrozumieć i rozwiązać matematycznie czy wystarczy jezeli znam odpowiednie funkcje i umiem je wykorzystać?

To pierwsze zadanie metodą "na kartce" na podstawie wiedzy ze szkoły podstawowej da sie rozwiązać czy miałeś na myśli to ze da sie za pomocą tej wiedzy ogarnac o co chodzi w kodzie który podałeś?

1

Serechiel - podstawy tzn 4 filmy z videotutoriala. Wiem ze podstawy to za duzo powiedziane w tym wypadku :) wiem co to jest zmienna int, float, dwa rodzaje pętli - tyle.

Jeśli to był tutorial autorstwa "słynnego" tu Mirosława Z. (aka Pasja Informatyki), to przeszło 90 % forumowiczów będzie Ci doradzało jak najszybszą rezygnację z tegoż. Powodów wiele znajdziesz na forum.

0

Serechiel, trafiłeś w 10tke z Mirosławem Z., co w takim razie polecasz, o ile oczywiście jestem zdolny do nauki programowania. Jakoś mnie to korci powiem Ci, nawet tak "sam dla siebie".
Bardzo bym Cię również prosił o odpowiedź na zadane przeze mnie pytania, Twoje odpowiedzi mi pomagają więc jeżeli nie masz nic przeciwko chwilę Cię pomęczę :)
Mogę napisać na PW jeżeli się zgodzisz, widzisz już kilka razy zabierałem się za rzeczy o których nie mam pojęcia i dzięki temu zawsze robię reaserch

0
mateuszK napisał(a):

Wiec czy te zadania trzeba umieć zrozumieć i rozwiązać matematycznie czy wystarczy jezeli znam odpowiednie funkcje i umiem je wykorzystać?

Każdy programista powinien potrafić zrobić takie zadanie z wykorzystaniem pętli i instrukcji warunkowych, tzw. metodą brute force czyli sprawdzając każdy możliwy czynnik tak jak pokazałem powyżej jako rozwiązanie do pierwszego zadania.

Z kolei dobry programista powinien dodatkowo wykazać się znajomościa matematyki, algorytmiki i struktur danych. Większość tego typu zadań da się policzyć wzorem lub algorytmem, który zmniejszy znacząco złożoność obliczeniową całego rozwiązania.

0

Haskell - dzięki za odpowiedź :), bardzo przejrzyście to ująłeś, jednak nasuwają mi się kolejne pytania - czy uważasz, że warto w takim razie uczyć się jakiegoś języka, przerabiać przykłady zdobywając tym samym wiedzę jak rozwiązywać za jego pomocą problemy, następnie ćwicząc (np na takiej stronie) a w trakcie/troszkę później uzupełniać braki z matmy (przyznaję, że w moim przypadku ogromne)?

0

Nie jestem programistą (czyt. typowo software developerem), ale na pewno warto programować - przynajmniej dla mnie okazało się to wielką frajdą, a na początku miałem też duże wątpliwości co do powodzenia tego przedsięwzięcia. Moim zdaniem ocena tego, czy ma się na coś szanse w tak wczesnym stadium, może być z góry obarczona dużym błędem (na niekorzyść sukcesu). To co teraz wydaje się Tobie bardzo trudne, zapewne jeżeli będziesz ćwiczył za jakiś czas będzie banalne.

By the way, tam wyszło 234168 ? Nie wiem jak sprawdzić odpowiedź...
Początek listy wyszedł mi: [3, 5, 6, 9, 10, 12, 15, 18, 20, 21, 24, 25, 27, 30, 33, 35, 36, 39 ...
https://projecteuler.net/problem=1

Edit:

W odpowiedzi na powyższe pytanie o to jak się uczyć:

The best way to learn any language, (...) is to use it to make progress toward something you care about (https://www.quora.com/How-do-I-learn-SQL-What-are-some-good-online-resources-like-websites-blogs-or-videos#!n=12) - np. ja zaczynałem robiąc skrypt który śledzi serwis aukcyjny i wysyła mi maila gdy pojawi się dobra okazja

0
matheuszK napisał(a):

Haskell - dzięki za odpowiedź :), bardzo przejrzyście to ująłeś, jednak nasuwają mi się kolejne pytania - czy uważasz, że warto w takim razie uczyć się jakiegoś języka, przerabiać przykłady zdobywając tym samym wiedzę jak rozwiązywać za jego pomocą problemy, następnie ćwicząc (np na takiej stronie) a w trakcie/troszkę później uzupełniać braki z matmy (przyznaję, że w moim przypadku ogromne)?

Pytaniem jest czy CHCESZ programować i czy to LUBISZ. Jeżeli chcesz i lubisz to czemu jakieś tam braki w matematyce mają Ci blokować tą możliwość?

0

GN - oczywiście to jest sedno tego "problemu". Na te pytania odpowiem sobie kiedy troszkę w tym posiedzę, ale na tą chwilę chcę tylko i wyłącznie zmierzyć moje siły na zamiary. Bo widzisz, do tej pory sprawa wyglądała tak: spróbowałem ciut ciut C++ i myślę sobie "ale to zajebi***, to jest to czego mi brakowało - myślenie, rozkminianie", no i rzucam się na stronkę z zadaniami a tu lipa - matma leży. Widzisz to nie są nawet braki, to chyba jest tragedia :D Co myślisz o moim rozumowaniu jeżeli chodzi o drugie zadanie z wymienionej strony? Kilka postów wstecz.
Pozdrawiam ;)

1
matheuszK napisał(a):

GN - oczywiście to jest sedno tego "problemu". Na te pytania odpowiem sobie kiedy troszkę w tym posiedzę, ale na tą chwilę chcę tylko i wyłącznie zmierzyć moje siły na zamiary. Bo widzisz, do tej pory sprawa wyglądała tak: spróbowałem ciut ciut C++ i myślę sobie "ale to zajebi***, to jest to czego mi brakowało - myślenie, rozkminianie", no i rzucam się na stronkę z zadaniami a tu lipa - matma leży. Widzisz to nie są nawet braki, to chyba jest tragedia :D Co myślisz o moim rozumowaniu jeżeli chodzi o drugie zadanie z wymienionej strony? Kilka postów wstecz.
Pozdrawiam ;)

Jest szansa, że podczas swojej (ewentualnej) kariery programistycznej nie będziesz używał niczego poza dodawaniem, odejmowaniem, dzieleniem, potęgowaniem - to, że programista musi być dobry z matmy to mit.
A co do Twojego podejścia to na początku nie rozwiązuj problemów matematycznych, zrób coś co bardziej działa na wyobraźnię - jakiś prosty program okienkowy, cokolwiek co chciałbyś zrobić.

0

Serechiel, trafiłeś w 10tke z Mirosławem Z., co w takim razie polecasz, o ile oczywiście jestem zdolny do nauki programowania. Jakoś mnie to korci powiem Ci, nawet tak "sam dla siebie".

C++ to nie do końca moja bajka (czyt. trochę go liznąłem), zatem nie daję gwarancji czy to, co znam jest dobre na 100%:

  1. Się podliżę ;-) - http://fasadin.4programmers.net/2016/02/blog-post.html
    2 - http://en.cppreference.com/w/cpp, http://www.cplusplus.com/
    3 - jeśli lubisz videotutoriale, https://www.edx.org/course/introduction-c-microsoft-dev210x-5#! i https://www.edx.org/course/intermediate-c-microsoft-dev210-2x#!

Inna sprawa, że wybrałeś sobie trudny język do nauki - https://images.techhive.com/images/article/2015/06/which-programming-language-should-i-learn-first-infographic-100593938-orig.png

Bardzo bym Cię również prosił o odpowiedź na zadane przeze mnie pytania, Twoje odpowiedzi mi pomagają więc jeżeli nie masz nic przeciwko chwilę Cię pomęczę :)

Przeceniasz mnie, a poza tym o pytanie:

To pierwsze zadanie metodą "na kartce" na podstawie wiedzy ze szkoły podstawowej da sie rozwiązać czy miałeś na myśli to ze da sie za pomocą tej wiedzy ogarnac o co chodzi w kodzie który podałeś?

... powinieneś raczej męczyć Haskella.

0
GN napisał(a):

Co myślisz o moim rozumowaniu jeżeli chodzi o drugie zadanie z wymienionej strony? Kilka postów wstecz.

Twoje rozumowanue jest poprawne i przedstawia rozwiązanie metodą brute-force. Na sumowanie ciągu Fib. też są wzory, algorytmy czy "sposoby" i da się zrobić to nieco szybciej. Tutaj fajny filmik na ten temat

Jest szansa, że podczas swojej (ewentualnej) kariery programistycznej nie będziesz używał niczego poza dodawaniem, odejmowaniem, dzieleniem, potęgowaniem - to, że programista musi być dobry z matmy to mit.

To nie jest do końca prawda. Matma z pewnością nie jest potrzebna juniorowi, który klepie crudy, ale im dalej w las tym bardziej taka wiedza może się przydać. Bez ogarniania matmy i algorytmów nie przeskoczysz pewnego poziomu i nie będziesz mógł się zajmować czymś bardziej ambitnym. Na pracę klepaczy też jest zapotrzebowanie, podobnie jak jest zapotrzebowanie na pracę Janusza który wykopie rów, albo przeniesie coś ciężkiego, więc można sobie być takim miernym ale wiernym klepaczem. To od Twojej ambicji zależy czy ta matma będzie kiedyś narzędziem, które chciałbyś posiadać w swoich rękach. Sky is the limit.

0

GN - dzięki za rady - w takim razie nie poddaję się bez walki i zaczynam na nowo ;)
Serechiel - Okey, obrazek który wrzuciłeś odpowiada na niezadane jeszcze pytania, dzięki! ale żeby nie było tak prosto, wybierając Jave - skąd polecasz się uczyć ?
Haskell - To pierwsze zadanie metodą "na kartce" na podstawie wiedzy ze szkoły podstawowej da sie rozwiązać czy miałeś na myśli to ze da sie za pomocą tej wiedzy ogarnac o co chodzi w kodzie który podałeś? - bo pytałem nie tą osobę co trzeba ;)

Dzięki za cierpliwość i odpowiedzi Panowie :D

Panowie, zapytam jeszcze przy okazji: jak rozwijać swoją ogólną wiedzę informatyczną - taką która potrzebna jest np na stanowisku osoby pracującej w firmie typu "obsługa informatyczna dla firm" np. http://www.lemonpro.pl/".

Pozdrawiam ;)

Haskell - to co piszesz wydaje się być rozsądne i zapewne sytuacja jest taka jak opisujesz. To jest właśnie mój problem - nie chcę być przeciętny , ale jednocześnie tego właśnie się obawiam.
Dzięki za zainteresowanie. Na razie zdecydowałem "poklepać" w Javie. Polecasz jakieś kursy? Będę dawał znać jak mi idzie ;)

0
matheuszK napisał(a):

Panowie, zapytam jeszcze przy okazji: jak rozwijać swoją ogólną wiedzę informatyczną - taką która potrzebna jest np na stanowisku osoby pracującej w firmie typu "obsługa informatyczna dla firm" np. http://www.lemonpro.pl/".

Obsługa informatyczna to pojęcie bardzo ogólne, a w tej firmie stanowisk jest na pewno więcej niż jedno - z tego co widzę to są tam ludzie od helpdesku, serwerów, baz danych, bezpieczeństwa... Jak taką wiedzę rozwijać? Przez praktykę, tak jak ze wszystkim, jak chcesz być ekspertem od rowerów to poza wiedzą teoretyczną warto się również nauczyć na nim jeździć, wymieniać opony, zakładać łańcuch. Chcesz być ekspertem od programowania? Programuj. Chcesz być dobry w administrowaniu serwerami? Postaw jakiś serwis, popsuj go, postaw go jeszcze raz, zrób backupy, wgraj backupy...

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