Nauka programowania bez algorytmiki

0

Mam trochę dziwne pytanie.
Jestem właśnie w technikum na kierunku technik programista. Szczerze nie wiem co robić w mojej sytuacji. Chodzi o to że nie radzę sobie z algorytmiką szeroko
pojętą. Na lekcjach informatyki rozszerzonej jak piszemy jakieś programy dajmy na to szyfrujące tekst szyfrem cezara nie umiem w głowie wyobrazić sobie jak to ma wszystko działać od tej strony matematycznej, na jakiej podstawie wyciągnąć jakieś wnioski, w którą stronę iść. Natomiast gdy robię zadania np. z programowania obiektowego w Javie czy C# idzie mi bardzo dobrze. Uważam również że zasób mojej wiedzy jest dużo większy niż innych osób na moim kierunku. Bardzo często kierują się do mnie po pomoc gdy coś sprawia im problem. Pytanie brzmi: Czy jeśli mam takie trudności z tą algorytmiką, rozwiązywaniem problemów od tej strony matematycznej to
programowanie jest dla mnie? Czy opłaca się robić cokolwiek w tym kierunku? Od razu informuję że matematykę w szkole lubię (nie wiem co będzie na studiach).

3

Tak.

When it comes to writing code, the number one most important skill is how to keep a tangle of features from collapsing under the weight of its own complexity.

https://prog21.dadgum.com/177.html

1

W szeroko pojetym web-dev'ie jak najbardziej. "Pare" lat siedze w tym interesie i do tej pory nie spotkalem sie z najmniejszym zakresem algorytmiki. Gdyby nie prywatne projekty w tej chwili nie mialbym pojecia o podstawowych zagadnieniach zwiazanych z algorytmami.

Natomiast gdy robię zadania np. z programowania obiektowego w Javie czy C# idzie mi bardzo dobrze.

I tego sie trzymaj. Jesli skupisz sie na web-dev'ie to przekonasz sie ze tu najwazniejsza jest struktura i czytelnosc aplikacji, jezyk angielski i umiejetnosc integracji w kodzie gotowych rozwiazan, ktore w wiekszosci wypadkow z powodu fatalnej dokumentacji nie raz stana sie dla Ciebie calkiem sporym wyzwaniem.

Porownujac prace w web-dev'ie do serwisu samochodowego: potrzebny jest lakiernik (front) potrzebny jest mechanik (backend). Ale mechanik sam sobie czesci nie produkuje, od tego jest ktos inny, chociaz na upartego sam moze odczasu do czasu odpalic sobie tokarke.

No i najwazniejsze 😀 w web-dev'ie zarabia sie znacznie lepiej niz gdzie indziej.

4

Ziomek ja już z 15 lat programuję i w życiu żadnego szyfru cezara nie robiłem ... nie przejmuj się tym kompletnie w codziennej pracy raczej nie będzie Ci to potrzebne lub po prostu będziesz korzystał z gotowych bibliotek. Fakt zdarzają się takie firmy jak ta gdzie robiłem dla wojska i tam projekty były mocno algorytmicznie złożone i wykraczały daleko poza sferę do znalezienia na google/SO ale to jest niewielki procent całej branży IT. Rób swoje rozwijaj się w obiektówce, poznawaj narzędzia, biblioteki, a algorytmy ... postaraj się zdać czy to w szkole czy na studiach aby cię nie przyblokowały ale nie przejmuj się tym kompletnie.

2

Powiem tak. Jak w tym wieku masz już styczność z takimi rzeczami to masz lepszy start niż 95% branży.

Algorytmika to kwestia wykucia. Skup się, powtarzaj zadania i je przyswoisz, aczkolwiek nie są to problemy na które trafisz w przeciętnej pracy. Jedynie się przydają na niektóre rekrutacje do firm.

3
Adam Korin napisał(a):

Na lekcjach informatyki rozszerzonej jak piszemy jakieś programy dajmy na to szyfrujące tekst szyfrem cezara nie umiem w głowie wyobrazić sobie jak to ma wszystko działać od tej strony matematycznej

Kartka i długopis/ołówek i jedziesz.
Poza tym czasem nie wyobrazisz sobie, dopóki nie napiszesz programu błędnie i nie zaczniesz go powoli przerabiać tak, żeby robił to, co chcesz.

Czy jeśli mam takie trudności z tą algorytmiką, rozwiązywaniem problemów od tej strony matematycznej to programowanie jest dla mnie?

To jest technikum, ciężko żebyś ogarniał rzeczy na nie wiadomo jakim poziomie (zresztą do większości prac programistycznych nie potrzeba zaawansowanej algorytmiki, z drugiej strony jednak trochę myślenia algorytmicznego jest potrzebne). Też trzeba uważać, żeby się nie porównywać zbytnio z innymi, bo w szkołach średnich i na studiach jest pełno mądrali, którym wszystko dobrze idzie, bo się np. wykuli po nocach albo są zdolni po prostu.

No ale na tym etapie, to przyłożyłbym się przede wszystkim do angielskiego. Im lepszy angielski, tym lepiej. Kiedyś wystarczyło znać tylko na poziomie czytania dokumentacji, teraz płynny angielski jest standardem, programista często musi pracować z ludźmi z innych krajów.

Czy opłaca się robić cokolwiek w tym kierunku? Od razu informuję że matematykę w szkole lubię (nie wiem co będzie na studiach).

Działając powoli ale systematycznie w wybranym kierunku przez lata możesz więcej osiągnąć niż ktoś, komu idzie dobrze na początku.

Natomiast gdy robię zadania np. z programowania obiektowego w Javie czy C# idzie mi bardzo dobrze. Uważam również że zasób mojej wiedzy jest dużo większy niż innych osób na moim kierunku.

No i dobrze, trzeba umieć dostrzec swoją przewagę (chociaż z drugiej strony też jest to pułapka, że się osiądzie na laurach).

4

Mam wrażenie, że źle pojmujesz pojęcie algorytmu i rozumiesz to jedynie jako jakiś matematyczny wzór. Kawałek kodu, który coś robi jest również algorytmem. Programowanie to rozwiązywanie problemów a "algorytmika" jako taka jednym z narzędzi. Tylko tyle i aż tyle.

Narzędzia dobiera się na podstawie problemu a nigdy nie było tak łatwo to zrobić jak dzisiaj -> Mnóstwo dokumentacji, SO, GPT.

0

Zechcesz się dostać kiedyś do firmy w której praca nie polega na robieniu crudów, gdzie stawki są o wiele większe i będzie zonk.

Mi znajomość zaawansowanej matematyki wydawała się bez sensu. Natomiast taka wiedza płaci jak chcesz się zająć świadomie choćy machine learningiem.

0

Może Ci się przyda na rekrutacji, jak Cię ktoś poprosi o odwrócenie tablicy, albo jakiegoś searcha szybkiego, ale generalnie na co dzień to nie.
Kluczem jest dowiezienie wartości dla biznesu i każdy patrzy na tą wartość dodaną, a nie na time complexity.

2

Kluczem jest dowiezienie wartości dla biznesu i każdy patrzy na tą wartość dodaną, a nie na time complexity.

Co? Złożoność czasowa nieważna? Słaba złożoność szybko cię uwali.

2

Algorytmika nie jest potrzbna w większości zadań programistów. Duża część programistów nawet nie umie myśleć abstrakcyjnie. Tak więc nie musisz się tym zrażać (tym bardziej, że jesteś jeszcze w technikum). Czy warto rozwijać? Absolutnie, te umiejętności możesz stosować nawet w gównopracy, a nawet w zwykłych problemach życiowych. Nie przejmuj się tym, że nie potrafisz sobie wyobrazić szyfru cezara (byłby problem gdybyś nie rozumiał na jakiej zasadzie działa, bo to banał). W algorytmach kluczowe jest doświadczenie, obserwacja i wyciąganie wniosków. Szczęśliwie, nie musisz robić tego na papierze. Możesz sobie napisać program, który krok po kroku zwizualizuje ci algorytm i łatwiej będziesz mógł go zrozumieć. I wreszcie nie przejmuj się, że masz problem z matematyką, bo w szkole jest wykładana jak dla gamoni (żeby umieć użyć, ale nigdy nie zrozumieć). Pójdziesz na studia, poznasz rachunek różniczkowy i całkowy i wiele rzeczy stanie się jasne. Również to, że to co jest na ogół kojarzone z matematyką to może 1%, zupełnie niereprezentatywny dla tej dziedziny..

1
lion137 napisał(a):

Kluczem jest dowiezienie wartości dla biznesu i każdy patrzy na tą wartość dodaną, a nie na time complexity.

Co? Złożoność czasowa nieważna? Słaba złożoność szybko cię uwali.

A w polskich firmach stawia się programistom takie problemy, żeby rozważać złożoność obliczeniowa i szukać specjalnych algorytmów pod to? Raczej bym nie powiedział.

1
Adam Korin napisał(a):

Na lekcjach informatyki rozszerzonej jak piszemy jakieś programy dajmy na to szyfrujące tekst szyfrem cezara nie umiem w głowie wyobrazić sobie jak to ma wszystko działać od tej strony matematycznej, na jakiej podstawie wyciągnąć jakieś wnioski, w którą stronę iść.

Można też się zastanowić, czy znaliście wszystkie potrzebne zagadnienia do stworzenia algorytmu, czyli

  • jakiś wstępny opis jak działa szyfr cezara
  • wyjaśnienie czym jest kod ascii
  • jak korzystać z kodu ascii w technologii X
  • podstawowa znajomość pętli i warunków
    itd

Tak, żeby nie "walczyć" ze składnią języka, a zająć się samą implementacją algorytmu

1
Adam Korin napisał(a):

Pytanie brzmi: Czy jeśli mam takie trudności z tą algorytmiką, rozwiązywaniem problemów od tej strony matematycznej to programowanie jest dla mnie? Czy opłaca się robić cokolwiek w tym kierunku? Od razu informuję że matematykę w szkole lubię (nie wiem co będzie na studiach).

Tym bardziej jest dla ciebie? Widziałeś kiedyś języki programowania pisane przez algorytmików? Albo matematyków (Haskell ekhm)? Algorytmy i matematyka jest dla tych co zależy im na czasie i szybkości.

Normalni myślą wolno i żyją powoli - jeśli wszystko byśmy zalgorytmizowali to kto by kupował nowe produkty? Dlatego Java i C# wyglądają jak projektowane przez grafomana dla grafomanów. Dzięki temu generują zajęcie dla milionów leworęcznych i dają im poczucie spełnienia w pracy. To jest dobre w gospodarce dobrobytu. Ci ludzie później generują popyt.

Tak więc ucz się programowania a nie algorytmów. Zresztą, pośmiejmy się dalej - na algorytmach będą cię pewnie katować notacją duże O. Wiesz jaką złożoność ma najpowszechniej używany w optymalizacji różnego rodzaju procesów Simplex? No właśnie... A działa!

0

Algorytmy to kwestia ćwiczeń, może warto będzie kupić jakąś książkę z przykładami i rozwiązaniami, żebyś nauczył się w "ten" sposób myśleć (powinny wystarczyć filmiki na YT, tego jest tam pełno razem z przykładami na tablicy i w kodzie).

Jeśli nie ogarniesz takich rzeczy, to będzie ci ciężko znaleźć pierwszą pracę, bo praktycznie zawsze trafiają się pytania o jakieś algorytmy. Trudno mi sobie wyobrazić, żeby przeszedł rekrutację na juniora ktoś, kto się na nim wyłoży, żeby chociaż o takim rozwiązaniu opowiedzieć słownie - tam wystarczy pętla, nie ma żadnej filozofii.

Pewnie nie będzie ci to przeszkadzało w robieniu swoich projektów do szuflady, ale będziesz sobie pluł w brodę po każdej uwalonej rekrutacji na takich głupotach

3

Podiósł bym fakt, że CHYBA przedmiot algorytmika zawiera sporo o strukturach danych, bo trudno tego razem nie poruszyć.

O ile 90% klepaczy nie będzie zawowodo robić finezyjnych algorytmów, to bez solidnych podstaw nt struktur danych to tylko klikanie w Delphi zostaje

0
AnyKtokolwiek napisał(a):

Podiósł bym fakt, że CHYBA przedmiot algorytmika zawiera sporo o strukturach danych, bo trudno tego razem nie poruszyć.

O ile 90% klepaczy nie będzie zawowodo robić finezyjnych algorytmów, to bez solidnych podstaw nt struktur danych to tylko klikanie w Delphi zostaje

Jeszcze w C można pisać bo tam wszystko jest tablicą charów. Chociaż w JSie chyba też wszystko tablicą jest tylko bardziej fikuśną? Kiedyś to potrafili zaprojektować prosty język. Np W takim TCLu to wszystko było stringiem. I komu to przeszkadzało?

0
KamilAdam napisał(a):

Chociaż w JSie chyba też wszystko tablicą jest tylko bardziej fikuśną?

Nie wiem skąd ten pogląd. Dlaczego akurat tablicą miałoby być wszystko w JS.

0

Jak już wcześniej było wspomniane, warto sobie na kartce rozrysować kolejne kroki działania algorytmu. Możesz też zacząć rozwiązywać proste zadania typu Hackerrank. Po jakimś czasie to się staje nawet wciągające :) Tym bardziej, że w pracy zazwyczaj rzadko się robi tego typu rzeczy.

Uważam również że zasób mojej wiedzy jest dużo większy niż innych osób na moim kierunku. Bardzo często kierują się do mnie po pomoc gdy coś sprawia im problem. Pytanie brzmi: Czy jeśli mam takie trudności z tą algorytmiką, rozwiązywaniem problemów od tej strony matematycznej to
programowanie jest dla mnie? Czy opłaca się robić cokolwiek w tym kierunku?

Miałem podobnie na początku studiów. Jeśli lubisz programować - to tak.

1
KamilAdam napisał(a):

Jeszcze w C można pisać bo tam wszystko jest tablicą charów. Chociaż w JSie chyba też wszystko tablicą jest tylko bardziej fikuśną? Kiedyś to potrafili zaprojektować prosty język. Np W takim TCLu to wszystko było stringiem. I komu to przeszkadzało?

W lua się tworzy własne typy w oparciu o tablice. Tak przy okazji to mam telewizor marki TCL.

1

Na wszystkich rozmowach rekrutacyjnych, na których byłem, pytali o wiedzę z zakresu stacku, nie o algorytmy. Na 2 z tych wszystkich natomiast dodatkowo pytali o algorytmikę. Skup się na wiedzy stacku, np. frameworku, narzędziach itp., których wymagają. Programistom płaci się głównie za wiedzę i doświadczenie, i to jest punkt odniesienia zazwyczaj osób rekrutujących. Bardzo niewiele jest firm jak Google, które dają jakieś tam intelektualne, sztuczne problemy do rozwiązania, mając nadzieję na to, że taki w sumie test IQ coś im powie na temat kandydata. :)

0
Adam Korin napisał(a):

Na lekcjach informatyki rozszerzonej jak piszemy jakieś programy dajmy na to szyfrujące tekst szyfrem cezara nie umiem w głowie wyobrazić sobie jak to ma wszystko działać od tej strony matematycznej, na jakiej podstawie wyciągnąć jakieś wnioski, w którą stronę iść. Natomiast gdy robię zadania np. z programowania obiektowego w Javie czy C# idzie mi bardzo dobrze. Uważam również że zasób mojej wiedzy jest dużo większy niż innych osób na moim kierunku. Bardzo często kierują się do mnie po pomoc gdy coś sprawia im problem. Pytanie brzmi: Czy jeśli mam takie trudności z tą algorytmiką, rozwiązywaniem problemów od tej strony matematycznej to

W głowie zwykle umie się wszystko wyobrazić jak się przerobi sporo problemów na kartce papieru i też od czysto matematycznej strony nie uda ci się zrozumieć dlaczego?
Bo problemy najprościej w pseudokodzie rozwiązywać, a matematyka pozwala dosyć abstrakcjynie opisywać problem, po którym jeszcze gorsze jest zrozumienie.
Da się zrobić odwrotnie zrozumieć jeszcze lepiej niż w pseudokodzie czy po prostu kodzie programu, ale wtedy musisz zdefiniować wszystko, nawet byś musiał logikę boola do rejestrów, żeby móc na tej podstawie resztę elementów.
Mniejsza o to bo to po prostu zajmie mnóstwo czasu tak pure matematyka.

Szyfr cezara jest prosty, musisz po prostu przysiąść chwilę.
Masz tam 3 zmienne kluczowe.
Wiadomość - 'abc'
Klucz - 3
Alfabet - 'abcdefghijklmnopqrstwz'

I teraz chcemy obliczyć zaszyfrowaną wiadomość to bierzemy pierwszą literę z wiadomości czyli a
znajdujemy indeks w alfabecie jest to pierwszy element czyli w programowaniu 0. zero jest pierwszym.
Dodajemy klucz 3, czyli a 0, b 1, c 2, d 3, e 4, f 5, g 6 itp.
dostajemy literę d, potem do b dostajemy e i do c dostajemy f
Dostajemy zaszyfrowaną wiadomość def z wiadomości abc.
A teraz żeby odszyfrować to znajdujemy d literę w alfabecie i przesuwamy index o 3 miejsca do tyłu.

Kolejny problem to co jak wyjdziemy po za alfabet np. z to było 24 litera, a my damy 25, można zrobić modulo z wielkości alfabetu.

Jak ręcznie na kartce papieru wykonasz takie szyfrowanie to na 100% będziesz wiedział jak masz napisać kod, żeby wykonać to samo w języku programowania.
Jak będziesz zaawansowany to leżąc w łóżku będziesz w wyobraźni rozwiązywał problemy i tylko na końcu wstaniesz i napiszesz kod.
A tak musisz dużo ćwiczyć, bo nikt się nie rodzi z wiedzą, każdy nabywa ją poprzez tworzenie i rozwiązywanie różnych problemów.
I każdy się tego może nauczyć, stymulujesz neurony danymi czynnościami i nawet nie wiesz kiedy staniesz się dobry w tym.

0

Algorytmika to narzędzie. Dzięki niemu, problemy które napotkasz zostaną rozwiązane albo łatwiej rozwiązane. Nie da się na nowo rozwiązywać podobnych problemów na nowe sposoby w nieskończony sposób, z czasem każdy problem można rozwiązać stosując jakiś zbiór optymalnych podejść do tego problemu. I tak, dzięki temu praca programisty chcąc nie chcąc nauczy Ciebie w ten sposób myśleć, chociaż nikomu bym nie polecał bez faktycznego rozwiązywania zadań choćby na leetcode, bo będzie ona zwyczajnie trudna i męcząca.

Zobacz sobie kurs 'The Last Algorithms Course You'll Need' książka i kurs są całkiem spoko

1
Adam Korin napisał(a):

jak piszemy jakieś programy dajmy na to szyfrujące tekst szyfrem cezara nie umiem w głowie wyobrazić sobie jak to ma wszystko działać od tej strony matematycznej, na jakiej podstawie wyciągnąć jakieś wnioski, w którą stronę iść.

Algorytmy takie jak na rozmowach kwalifikacyjnych mogą nie być potrzebne do pracy, ale jeśli masz problem ze zrozumieniem jak działa szyfr cezara mając go przed sobą to może być problem. W pracy oprócz pisania swojego kodu będziesz musiał analizować kod innych a jeśli dodawanie 3 jest ciężkie do wyobrażenia to ja nie wiem.

1

Jak znasz angielski to możesz oglądać filmiki na youtube tłumaczące dane zagadnienie np. algorytmiki

Nauczyciel w szkole statystycznie będzie gorzej tłumaczyć niż ludzie z Youtube (a w szkole są zwykle gorsze warunki do zrozumienia niż przy nauce samodzielnej z netu) więc jeśli nauczyciela nie rozumiesz, to może znaczyć, że niewłaściwie tłumaczy.

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