A może Python?

Witajcie serdecznie.

 

 

Zacznę prosto z mostu - mam 25 lat, jakieś tam pojęcie o komputerach, zajawkę na różne oprogramowanie oraz wykształcenie totalnie nie komputerowe przez co siedzę w domu. Kiedyś tam liznąłem HTML, TurboPascala i różne CMSy, jednak rozrywki tego świata pochłonęły mnie tak że obudziłem się dopiero teraz.

Chciałbym móc w końcu łączyć przyjemne z pożytecznym i stąd moje pytanie:

Czytałem książkę o Stallmanie i zapoznałem się z kilkoma pozycjami innych guru Wolnego i Otwartego Oprogramowania i stąd dowiedziałem się o języku Python. Nigdy niczego poza wymienionymi wcześniej nie programowałem i stąd moje pytanie: czy dla takiego starego laika jak ja są jeszcze szanse by opanować ten język programowania (który ponoć poza frajdą przynosi niezłe dochody) czy może lepiej odpuścić i szukać innych dziedzin?

Czy na początek moze byłoby lepiej:

  1. HTML i CSS

  2. PHP

  3. Python

 

Czekam na porady :slight_smile:

Pytanie w jakim chcesz iść kierunku i jaki cel ma Twoja nauka. Myślisz o pracy czy po prostu chcesz się czegoś nowego nauczyć?

 

Odnośnie Pythona, jeżeli chcesz iść w kierunku stron internetowych to zainteresuj się Django http://django.pl/ 

Generalnie polecam, chociaż nie nastawiaj się od razu na pieniądze, bo to przy początkach nauki programowania najgorsza możliwa motywacja. 

 

Przejdź kilka podstawowych tutoriali, np. tutaj (przy czym poziom angielskiego wystarczający do rozumienia dokumentacji to absolutne must have) i wydziergaj sobie kilka bezsensownych aplikacyjek. Kiedy poczujesz się na siłach, postaw przed sobą jakiś konkretny cel. Może nawet nieosiągalny - chodzi tylko o ciągłe gromadzenie umiejętności. Reszta przy samozaparciu przyjdzie sama.

jak używasz linuxa to python będzie dobry dla Ciebie.

* HTML i CSS to nie są języki programowania.

Widzę że chciałbyś coś robić, ale nie wiesz co. Wpierw się nad tym zastanów. Zarówno PHP jak i Python mogą służyć do tego samego - do robienia dynamicznych strony WWW, ale nie dasz rady tego zrobić bez HTML’a, CSS i pewnie JavaScript.

 

PHP był, może nadal jest używany bo jest tani (każdy najtańszy, czy nawet darmowy hosting ma PHP). Napewno to dało mi popularność i napewno to sprawiło że znajdziesz dużo pomocy w internecie, masę książek i itd.

Python jest mniej popularny, napewno u nas w PL, programistów Pythona jest mniej, ale napewno dobrze zarobią. A w przypadku programistach PHP nie zawsze tak jest, głównie z racji tego że przekrój tych ludzi jest duży i niektórzy mocno zaniżają stawkę, co rzutuje na całą grupę.

Nie mniej każdy z tych języków jest dobry. Python wydaje się bardziej dojrzały, ale środowisko ich programistów jest chyba bardziej zamknięte.

 

Język to tylko technologia, najważniejsze aby wiedzieć co się chce zrobić.

Generalnie, Python z każdego względu jest lepszy niż PHP. Znając w jakimś stopniu angielskiego powoduje, że nagle widać, że Python jest znacznie popularniejszy, jak i przyjaźniejszy w nauce (gigantyczne ilości materiałów). Z tymi po polsku oczywiście bywają kłopoty, ale chyba nie trzeba się przejmować, prawda?

Jeżeli chciałbyś wejść w stronę backendu, to polecam spróbować Elixir lub Rust.

By umieć programować, to warto się nauczyć po prostu pewnego sposobu myślenia. Dlatego polecam od razu naukę dwóch języków imperartywnych naraz. Co do pracy, to i tak warto mieć ciekawe portfolio. Pamiętaj, że przyszłemu pracodawcy pokazuje się portfolio, albo się chwali, że np. pracowało się w poważnej firmie, a się odeszło, bo np. nie lubiło się szefa.

“Nigdy niczego poza wymienionymi wcześniej nie programowałem i stąd moje pytanie: czy dla takiego starego laika jak ja są jeszcze szanse by opanować ten język programowania (który ponoć poza frajdą przynosi niezłe dochody) czy może lepiej odpuścić i szukać innych dziedzin?”

Większa szansa byłaby chyba jednak z nauką PHP (HTML i CSS  i tak każdy musi opanować). Python daje więcej możliwości samodzielnego pisania bo nie tylko webdeweloperka, ale też GUI, skrytpy itp. Jednak to PHP jest dużo bardziej popularny i pisze się w nim programy nie wymagające wysokich umiejętności algorytmicznych i znajomości innych złożonych technologii. 

Inna możliwość to postawienia na JavaScript i pisanie zarówno po stronie przeglądarki i serwera (NodeJS). Jest to chyba najbardziej popularny język obecnie. 

Nie brałbym za wzorzec Stallmana, bo chociaż go szanuję to nie jest on wzrocem, ani dobrym doradcą dla ludzi, którzy chcą żyć z pisania kodu. 

Jeżeli chodzi o konieczność posiadania zdolności algorytmicznych, to ważne są mechanizmy, jak generatory czy iteratory, Ważna jest możliwość wyrażenia złożonych rzeczy w sposób prosty - to jest ważne dla laika.

Raczej nie sądzę, aby to co napisałeś było proste dla laika :wink: Po drugie Twój przykład nie działa, bo range generuje na początku zero, a po wymnożeniu daje zero. Trzeba zmienić na:

range(1, x+1)

Swoją drogą całkiem fajnie wygląda w Pythonie możliwość pisania zbliżonego do paradygmatu funkcyjnego. Jedynie ze względu chyba na moje przyzwyczajenia konieczność podania listy danych jako parametr wydaje mi się mało intuicyjna. Logiczniejszy wydaje mi się przepływ: tworzenie listy a następnie redukcja i obliczenie silni. Tak wyglądałoby to w Scali (działa dla x > 0):

def silnia(x:Int) = (1 to x).reduce((a, b) => a * b)

Ale być może to kwestia przyzwyczajenia. Tak czy inaczej prostsze do zrozumienia dla początkujących wydaje mi się klasyczna implementacja za pomocą pętli.

Tak, czy inaczej - lambdy w Pythonie są wykastrowane ze zdolności domknięć. Można użyć maksymalnie jedno wyrażenie.

 

A między reduce a pętlą (w trudności) pozostaje wersja rekursywna (język: Racket):

(define (silnia n)
  (cond
    [(zero? n) 1]
    [#t (* n (silnia (sub1 n)))]))

Racja. Chciałem to napisać w podobny sposób, co ty, ale silnia z zero daje jeden, więc to i tak by nie działało. Dlatego wziąłem i usunąłem jedynkę. :wink:

Nie męczy Cię ta duża ilość nawiasów? :wink: Pewnie idzie się przyzyczaić.

 

Co do rekursji to jak ktoś już ją zrozumie to faktycznie jest prostsza do implementacji algorytmów. Dodatkowo co raz więcej jezyków programowania wspiera zamianę tail recursion na wersję z pętlą przy kompilacji. Stąd taką silnie warto definiować jako: silna(wynik, n).

Od tego jest odpowiednik tryb w Emacsie :wink:

Dziękuję wszystkim za odpowiedzi które dały mi naprawdę dużo do myślenia. Po analizie wszystkich postów doszedłem do następujących wniosków które niestety zrodziły kilka pytań. Ale po kolei:

Wnioski:

  1. Postanowiłem odświeżyć sobie HTML i CSS by potem płynnie (?) przejść do PHP

  2. Dzięki userom i podsunięciu pod nos strony CodeAcademy.com myślę że to pierwsze nie będzie takie trudne a i dzięki niej zamierzam bliżej zapoznać się z Python em (wcześniej czytałem książkę “Zanurkuj w Pythonie” na Wikibooks, jednak mnie zniechęciła i jednocześnie przeraziła. CodeAcademy wydaje się bardziej przyjazne dla laików.

Pytania:

  1. Jaki w takim razie wziąść OS pod uwagę? Windows (w którym podobno ciężko się programuje, mam pod ręką 8.1 lub 10), Debian (kolega z forum bardzo go polecał) a gdzieś jeszcze słyszałem że pod to całkiem niezły jest ogólnie GNU/Linux (myślałem też o Ubuntu)

  2. Po jakie oprogramowanie sięgnąć biorąc pod uwagę któryś z tych systemów?

  3. Nie ukrywam że chciałbym na programowaniu też zarabiać, czy ucząc się tych języków można gdzieś jednocześnie stawiać kroki w tej branży? Na przykład jako tester oprogramowania?

Odpowiedzi:

  1. Nie wróżę Tobie łatwej pracy z Windowsem. Jakikolwiek wspierany GNU/Linux będzie tak samo dobry. W zasadzie powinieneś wziąć pod uwagę Ubuntu, Debiana i Fedorę - tylko te wydają się mieć odpowiednie wsparcie, pozostając jednocześnie bezpłatnymi.

  2. Co rozumiesz przez oprogramowanie? Jako edytor kodu dobrze sprawdzi się GitHub Atom. I to w zasadzie wszystko, co polecę. Do Pythona jest jeszcze darmowe PyCharm.