Brak kreatywności w tworzeniu lepszych algorytmów

0

Cześć.

Mija powoli 2 tydzień mojej przygody z programowaniem.Po postach widzicie,że naleze do "newbie". Doszłam do momentu przemyśleń dotyczących samego programowania i z góry zaznaczam,ze mogę źle to odbierać ale to wynik braku obycia w kodowaniu.

Chodzi o to,że w tym momencie rozpoczynam przerabianie algorytmów i naszła mnie refleksja,że nie potrafiłabym sama zaprojektować lepszego algorytmu niz te,które obecnie istnieja. Stwierdziłam,ze dobry programista to taki,ktory nie bazuje na gotowych rozwiazaniach problemu,ale sam wymyśla własne algorytmy,które są lepsze i szybsze niz te,które mozna znaleźć w książkach lub internecie. Nie ukryję,ze demotywuje mnie to,aczkolwiek przyznam,ze u mnie kreatywność od zawsze leżała i kwiczała.Tzn. pomysłowa jestem,ale te pomysły prawie nigdy nie były lepsze/szybsze.

Jak wygląda ta kreatywność ? Czy programista,który nie potrafi wymyśleć lepszego algorytmu wyszukiwania/sortowania niż te,które już istnieja i są obecne kategoryzuje się pod pojęcie "klepacza kodu" ?

4

to chyba nie do końca tak - wymyślanie nowych algorytmów "lepszych" od starych przy normalnej (zarobkowej, gdzie Twoją pracą nie jest stricte opracowanie nowego algorytmu) pracy raczej nie występuje. W pracy bardzo rzadko wymagana jest algorytmika na tak niskim poziomie. Tu musisz używać algorytmiki na znacznie wyższym poziomie - musisz wymyślić jak poskładać istniejące algorytmy, zdecydować czego użyć (np. czy lista czy hashset) wymyślić jak przenieść założenia jakie ma spełniać program na konkretny kod.

0

Czyli w takim razie jeśli nie posiadam daru wymyślenia lepszego algorytmu to nie oznacza z góry,że podpadam pod definicje "klepacza kodu" ?
Bo chyba źle rozumuję to stwierdzenie.

1

Te algorytmy innych są wymyślone i dopracowywane przez (czasami) tysiące lat. Nie zrażaj się tym, że w dwa tygodnie nie wymyśliłaś nic lepszego. Wymyślenie porównywalnych byłoby świetnym wynikiem.
Z czasem dojdziesz do tego, że nie musisz wymyślać nowych algorytmów tylko dostosowywać stare do nowych problemów, wiedzieć kiedy który sposób się sprawdzi a który będzie tylko strata czasu/energii.
Głowa do góry i walcz dalej :)

7
Quanti994 napisał(a):

Stwierdziłam,ze dobry programista to taki,ktory nie bazuje na gotowych rozwiazaniach problemu,ale sam wymyśla własne algorytmy,które są lepsze i szybsze niz te,które mozna znaleźć w

No to źle stwierdzasz. Dobry programista to taki który nauczył się sporej części potrzebnych mu algorytmów lub wie gdzie je znaleŹć. Zresztą często algorytmy są już popakowane w biblioteki. Gdy potrzebuję quicksort to go nie piszę tylko wywołuję z biblioteki. Gdy potrzebuję mergesort to go nie piszę tylko wywołuję z biblioteki. Bardzo niewielu programistów wymyśla nowe algorytmy. Np taki Edsger Dijkstra, algorytm wymyślił tylko jeden. Wymyślił też wiele innych rzeczy i mocno pracował przy tworzeniu kompilatorów. Ale jest tylko jeden Algorytm Dijkstry

0

@Kamil Żabiński: Całkowicie masz rację, nikt nie pisze ręcznie (w ogromnej większości przypadków) algorytmów, tylko składa się całość z istniejących klocków. Ale wiąże się to z pewnym ryzykiem - ciężko jest czasami wyznaczyć granicę między prawdziwym programistą a code monkey.

3
Quanti994 napisał(a):

Czyli w takim razie jeśli nie posiadam daru wymyślenia lepszego algorytmu to nie oznacza z góry,że podpadam pod definicje "klepacza kodu" ?

W podstawowych dziedzinach trudno jest wymyślić coś lepszego niż to co już wymyślono.

To, że nie umiesz pobić rekordu świata, nie musi oznaczać, że jesteś kiepska w bieganiu.

1

@Quanti994 przecież to jakaś dziwna pokrętna logika. Algorytmy o których mowa wymyślili często geniusze i przez wiele lat były dopracowywane. Programista powinien je znać, rozumieć jakie są ich słabe i mocne strony i rozumieć "skąd to się wzięło". Bardzo często w pracy musisz zastosować "podobne" rozwiązanie. Nie musisz umieć wymyślić czegoś lepszego niż MergeSort, ale musisz umieć zastosować divide and conquer w innym problemie.

3
Kamil Żabiński napisał(a):

Bardzo niewielu programistów wymyśla nowe algorytmy. Np taki Edsger Dijkstra, algorytm wymyślił tylko jeden. Wymyślił też wiele innych rzeczy i mocno pracował przy tworzeniu kompilatorów. Ale jest tylko jeden Algorytm Dijkstry

Więcej tych algorytmów wymyślił, np:
https://en.wikipedia.org/wiki/Shunting-yard_algorithm
https://en.wikipedia.org/wiki/Dijkstra%E2%80%93Scholten_algorithm
https://en.wikipedia.org/wiki/Smoothsort
https://en.wikipedia.org/wiki/Banker%27s_algorithm

Ze swojej strony pochwalę się, że np kiedyś sam wymyśliłem Algorytm Dijkstry na potrzeby OI. Znałem mało algorytmów wtedy, więc sam wymyślałem koło od nowa. ZTCP to chyba nie byłem w tym sam, tzn Algorytm Dijkstry jest nierzadko wymyślany od nowa przez początkujących uczestników OI. Parę lat temu wymyśliłem też od nowa https://en.wikipedia.org/wiki/Fenwick_tree i pochwaliłem się tym na forum o kompresji danych, ale forumowicze uświadomili mnie, że to żadna rewolucja, bo już to znają i nawet ma to swoją nazwę. Ogólnie im mniej algorytmów i struktur danych się zna tym większa szansa, że wymyśli się jakieś od nowa :)

0

Programowanie w dużej mierze polega na tym, że znajdujesz potrzebny ci algorytm i nie chodzi mi tutaj kod ale o jego definicję i właśnie ową definicję zamieniasz na kod w języku jakim programujesz.

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