eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingJaki język polecić początkującemu? - komentarz do artykułu w Programista 9/2018Re: Jaki język polecić początkującemu? - komentarz do artykułu w Programista 9/2018
  • X-Received: by 2002:a37:4c43:: with SMTP id z64mr19355qka.5.1547242945412; Fri, 11
    Jan 2019 13:42:25 -0800 (PST)
    X-Received: by 2002:a37:4c43:: with SMTP id z64mr19355qka.5.1547242945412; Fri, 11
    Jan 2019 13:42:25 -0800 (PST)
    Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit
    0.net!weretis.net!feeder7.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.
    85.160.216.MISMATCH!v55no2097476qtk.0!news-out.google.com!h3ni1125qtk.1!nntp.go
    ogle.com!v55no2097467qtk.0!postnews.google.com!glegroupsg2000goo.googlegroups.c
    om!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Fri, 11 Jan 2019 13:42:25 -0800 (PST)
    In-Reply-To: <q1aufn$15m2$1@gioia.aioe.org>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=46.186.77.192;
    posting-account=f7iIKQoAAAAkDKpUafc-4IXhmRAzdB5r
    NNTP-Posting-Host: 46.186.77.192
    References: <c...@g...com>
    <9...@g...com>
    <1...@g...com>
    <8...@g...com>
    <d...@g...com>
    <a...@g...com>
    <c...@g...com>
    <6...@g...com>
    <3...@g...com>
    <a...@g...com>
    <a...@g...com>
    <5...@g...com>
    <q17bsf$1157$1@gioia.aioe.org>
    <c...@g...com>
    <q17fpf$1j06$1@gioia.aioe.org>
    <4...@g...com>
    <q17ltn$fmv$1@gioia.aioe.org>
    <f...@g...com>
    <q1aufn$15m2$1@gioia.aioe.org>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <5...@g...com>
    Subject: Re: Jaki język polecić początkującemu? - komentarz do artykułu w
    Programista 9/2018
    From: g...@g...com
    Injection-Date: Fri, 11 Jan 2019 21:42:25 +0000
    Content-Type: text/plain; charset="UTF-8"
    Content-Transfer-Encoding: quoted-printable
    Xref: news-archive.icm.edu.pl pl.comp.programming:213245
    [ ukryj nagłówki ]

    W dniu piątek, 11 stycznia 2019 21:31:56 UTC+1 użytkownik AK napisał:

    > >> Metkowanie.
    > >> 1. Obiekty w Pythonie sa wylacznie "metkowane".
    > >> Kopiowane sa wylacznie prymitywy (int , float, bool i.. i chyba tyle).
    > >
    > > Tzn. przekazywane przez referencję?
    >
    > Nie. To jednak nie jest to samo co referencja w C++ czy innej
    > Javie.

    A czym się różni?

    > >> 2. definicja funkcji to jest _statement_ wiec wszystko co podlega
    > >> ewaluacji, jest _wlasnie wtedy_ ewaluowane.
    > >> Stad wartosci domyslne sa ewaluowane w momencie wykonania
    > >> _statementu_ def function().
    > >
    > > A jakie są pozostałe "statementy"?
    >
    > Takie jak w manualu.

    Zobaczyłem w manual. Wprowadza rozróżnienie na "compound statement"
    i "simple statement". Reguły, o której pisałeś wcześniej, nigdzie
    nie znalazłem.

    > >> wiec w ten sposob tworzy sie w Pythonie wlasnie zmienne statyczne
    > >> nie zasmiecajac wyzszego namespace.
    > >
    > > Można też użyć do tego celu "domknięcia", albo klasy.
    >
    > Po co ?
    > PS: Owszem, Przy wiekszej ilosci danych/atrybutow uzywa sie w Py klasy,
    > named tuple, slownika, domkniec itp itp.

    Po co ?

    > > Przekazanie parametru rekurencyjnie do funkcji to nic trudnego
    >
    > Po co przekazywac "z gory" jesli mozna to samo uzyskac
    > w lokalnym scope ? No po co ? Bo?

    Globalnych obiektów lepiej unikać (zwłaszcza mutowalnych globalnych obiektów)
    A jeżeli chce się już z nich korzystać, to lepiej wprowadzać je jawnie,
    niż niejawnie i mimochodem.

    > > Sam powiedziałeś, że "bywa mylące".
    > > Ja uważam, że jest mylące z dobrych powodów.
    >
    > No jesli sie nie czyta wpierw nic o jezyku/manuali
    > to wszytsko bywa mylace :)

    Jest różnica pomiędzy "nie czyta się nic",
    a "zagląda się w egzotyczne zakamarki".
    Dobrze zaprojektowany język pozwala łatwo wywnioskować z pierwotnych reguł jakie
    będzie zachowanie złożonych wyrażeń.

    > >> Zwlaszcza w stosunku do expr w takim Lisp gdzie nawet priorytet
    > >> opeatorow poszedl do kosza wiec trzeba go wymuszac odpowiednia
    > >> kolejnoscia ewaluacji i/lub nawiasami (a nawet trzeba wymuszac/okreslac
    > >> tymiz lewo-prawo-lacznosc operatorow).
    > >> Np: (* A (* B (* C D))) to co innego niz (* (* (* C D) B) A)
    > >> Przecie to nieskonczone zrodlo pomylek.
    > > ?
    > > Jakich pomyłek?
    > > W każdym języku f(x, f(y, f(z, w))) to raczej coś innego niż
    > > f(f(f(z, w), y, x).
    >
    > Tyle ze przy mnozeniu jest to to samo.

    No to hyc:
    octave> a = [ 1 2 3; 4 5 6 ]
    octave> b = [ 7 ; 8 ; 9 ]
    octave> a * b
    ans =

    50
    122
    octave> b * a
    error: operator *: nonconformant arguments (op1 is 3x1, op2 is 2x3)

    > Chodzi o to ze trzeba ciagle pilnowac priorytetow operatorow
    > (czy kolejnisci) przez odpowednie konstrukcje - czyli na bakier
    > normalnej metematyce.

    "pilnować"?
    Równie dobrze można by powiedzieć, że trzeba "pilnować kolejności wywołania
    funkcji". No tak, na tym polega programowanie, że programista wie, co
    chce napisać, i to pisze.

    > Notacja Lisp akurat wyrazeniom arytmetycznym
    > wyraznie szkodzi i nie ma co tego tlumaczyc "elegancja" czy
    > "czystoscia" paradygmatow jezyka. To syf w uzyciu i tyle!

    Ja nie miałem z tym nigdy problemu.

    > > I to nie jest "wymuszanie nawiasami lewo-prawo-łączności operatorów",
    > > bo w Lispie syntaktyczine w ogóle nie ma czegoś takiego.
    > > Akurat operator mnożenia jest (semantycznie) łączny i przemienny,
    > > toteż nie ma znaczenia, czy napiszesz tak, czy inaczej.
    >
    > Ma znaczenie bo w jezykach programowania _istnieja efekty
    > uboczne_ i kolejnosc ewaluacji (od lewa do prawa) MA
    > znaczenie.

    Efekty uboczne nie istnieją "w językach programowania", tylko
    w programach. (Co więcej, istnieją języki programowania, w których
    efektów ubocznych nie ma)

    > > Możesz też napisać (* A B C D) albo (* C D B A).
    >
    > Moge. Tylko czy to wyglada na zapis matematyczny?
    > Toz to zwykla lista :)

    To "iloczyn A B C i D".

    Zresztą (+ (* a b) (/ c d)) to też
    "suma iloczynu a z b oraz ilorazu c przez d".
    Czyta się prawie tak samo, jak się pisze.

    > >> PS: Tylko mi nie probuj mowic, ze jest inaczej bo drzewiej
    > >> pisywalem (fakt ze rzadko, nie umialem sie przekonac:) w AutoLispie
    > >> makra do AutoCADa "cus tam" liczace i... to dla numeryka byl
    > >> istny koszmar :(
    > >
    > > Co ja mam Ci próbować wmówić?
    > > Jak czegoś nie lubisz, to to Twoja sprawa.
    >
    > Nie lubie dlatego, ze nie lubie.
    > Nie lubie, bo sprawia tak wiele niedogodnosci,
    > ze odciaga od domeny na rzecz młotka.

    Programuję w Lispie dużo, i nie mam takiego wrażenia.
    Przeciwnie: to, że operacje matematyczne są mało poręczne
    w użyciu, zachęca do nadawania nazw, przez co kod staje się
    bliższy domenie. Np.

    (define (euclid-distance x y)
    (sqrt (apply + (map square (map - x y)))))

    (define (average items)
    (/ (apply + items)
    (length items)))

    itd.

    > >> Oczywiscie C/C++ to popsul bo w nim stwierdzono (z wydumanych wzgledow
    > >> wydajnosciowych oczywscie:) ze kolejnosc ewaluacji czesci wyrazen jest
    > >> .. dowolna co rowniez jest zrodlem niekiedy koszmarow (gdy
    > >> funckcje maja efekty uboczne - a miewaja czesciej niz sie wydaje:).
    > >
    > > W "normalnej matematyce" funkcje nie mają efektów ubocznych.
    >
    > Programowanie "realne" to nie matematyka i efekty uboczne
    > sa "immanentna czescia" nie tylko C++.

    Ciekawe, że najpierw zarzucasz Lispowi, że notacja nie jest
    "jak w normalnej matematyce", ale to, że Pythonowe funkcje nie
    są "jak w normalnej matematyce", już jest OK.
    Dlaczego pierwsze jest nie OK, a drugie jest OK?

    > W "moich czasach" nie mowilo sie "funkcje" ale "procedury".

    I ja jestem za tym.
    (no i w językach w rodzaju Haskella też masz funkcje).

    To, że C, a po nim JavaScript, PHP i inne języki, zawłaszczyło słowo
    "funkcja", jest zdecydowanie mylące.

    > > No i bardzo dobrze.
    > > Przynajmniej zniechęca ludzi do pisania takich programów.
    >
    > Masz Ty pojecie o produkcyjnym rzemiosle?
    > Jesli mozna, to ludzie pisza zle i tyle.

    Jak są źle nauczeni, to piszą źle.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: