znaczacy > comp.* > comp.programming

slawek (01.01.1970, 02:00)
Maciej Sobczak <see.my.homepage> Wrote in message:
> W temacie eksploracji zagadnien matematycznych Wolfram nie ma merytorycznej konkurencji.Ale przeciez juz o tym bylo. :-)-- Maciej Sobczak *


Polimeryzowalbym.

1. Jest droga.
2. Nie potrafi tego co MISAR. Ok, MISAR to zupelnie inna pólka.
Choc niewatpliwie matematyka.
3. Daje sie zastapic Pythonem - niekiedy, ale zadziwiajaco dobrze.
4. W numeryce jest zbyt powolna.
5. Potrafi sie wieszac na niezbyt trudnych rzeczach.

----Android NewsGroup Reader----
osobliwy nick (07.12.2019, 00:25)
Chce rozwiazywac równania typu:

a*2^(x+y)+b*g^y = 1

rozszerzonym algorytmem euklidesa dla losowych x+y=128, bedacych liczbami naturalnymi z zerem. Czy ktos ma pomysl jak ustalic ile to moze srednio zajac komputerowi dla calkowitego "g" wynoszacego powiedzmy
5? Dodam tylko, ze nie umiem programowac, wiec nie jestem w stanie napisac sobie zadnych testów (dopiero rozwazam zlecenie napisania komus programu).

Tutaj jest przykladowa implementacja rozszerzonego algorytmu euklidesa:



Niestety nie wiem jak policzyc sredni przypadek algorytmu. A kombinacji x+y równych 128 jest 128:

0+128=128
1+127=128
2+126=128
....
64+64=128
65+65=128
....
128+0=128

Wiec do policzenia byloby 128 przypadków uzycia tego rozszerzonego algorytmu euklidesa. Chyba, ze mozna to oszacowac jak szybciej?
godek.maciek (07.12.2019, 21:58)
W dniu piatek, 6 grudnia 2019 23:25:56 UTC+1 uzytkownik osobliwy nick napisal:
> Chce rozwiazywac równania typu:
> a*2^(x+y)+b*g^y = 1
> rozszerzonym algorytmem euklidesa dla losowych x+y=128, bedacych liczbami naturalnymi z zerem. Czy ktos ma pomysl jak ustalic ile to moze srednio zajac komputerowi dla calkowitego "g" wynoszacego powiedzmy
> 5?


Tak. Napisac program i to zmierzyc.

(Jezeli dziedzina jest mala, to mozna sobie stabelaryzowac wynik, i wówczas "wyliczenie" zajmie tyle, ile wydobycie danych z tablicy.)

> Dodam tylko, ze nie umiem programowac, wiec nie jestem w stanie napisac sobie zadnych testów (dopiero rozwazam zlecenie napisania komus programu).


A dlaczego nie rozwazysz "nauczenia sie programowania"?
Brzmi to dosc górnolotnie, ale nauczenie sie jakiegos jezyka w stopniu umozliwiajacym Ci realizacje rzeczy, o które pytasz, raczej nie zajmie Ci wiecej czasu, niz napisanie takiego posta.
osobliwy nick (07.12.2019, 22:44)
W dniu sobota, 7 grudnia 2019 20:58:32 UTC+1 uzytkownik godek...@gmail..com napisal:
> W dniu piatek, 6 grudnia 2019 23:25:56 UTC+1 uzytkownik osobliwy nick napisal:
> Tak. Napisac program i to zmierzyc.
> (Jezeli dziedzina jest mala, to mozna sobie stabelaryzowac wynik, i wówczas "wyliczenie" zajmie tyle, ile wydobycie danychz tablicy.)
> A dlaczego nie rozwazysz "nauczenia sie programowania"?
> Brzmi to dosc górnolotnie, ale nauczenie sie jakiegos jezyka w stopniu umozliwiajacym Ci realizacje rzeczy, o które pytasz, raczej nie zajmie Ci wiecej czasu, niznapisanie takiego posta.


Chodzi to za mna od dawna, ale to osobny temat. Mialem podstawy Cna studiach, ale zapomnialem wlasciwie wszystkiego, nie bylem tez szczególnie zdolnym studentem, jednoczesnie niemialem tez szczególnie zdolnych prowadzacych zajecia (a to wiem od kolegów przybylych do nas z Politechniki, studiujacych jednoczesnie inne kierunki, którzy krytykowali sposób nauczania na moim kierunku). W ostatnich latach zas kazda wolna chwile poswiecalem na nauke czegos zupelnie innego - rynków finansowych i tradingu. I tak odkladalem to programowanie przez lata. Jednoczesnie juz na etapie analizy i testowania strategii tradingowych potrzebowalem...tak - umiec programowac. Zlecilem wówczas dosyc szerokie testy i napisanie róznych programów pewnemu programiscie. Ostatecznie zderzylismy sie z teoria chaosu i efektem motyla - bo wykresy kursów ludzaco przypominaja bladzenie losowe (proces Wienera) i jest masa naukowych teorii i modeli traktujaca o efektywnosci rynków finansowych i zachowaniu sie kursu. Naiwni wtedy bylismy, ale przynajmniej zyskalem fajnego znajomego.

Wracajac do tematu. Moze to jest ten moment. Na pewno masz racje, ze powinienem to zrobic. Zwlaszcza, ze poznalem z czym to sie je i jakies tam programy kilka lat temu nawetpisalem (na studiach i po nich). A juz nie pierwszy raz zlecam komus pisanie jakiegos programu. Kiedys zlecilem napisanie programu, który bedzie poszukiwal liczb Crandalla, które nie beda liczbami Wieferich (problem z zakresu matematyki teoretycznej). Potrafilem zostawic komputer odpalony na tydzien czasu, bo wzór, który to liczyl przebiegal po ogromnej liczbie wariacji wielu zmiennych. Niczego niestety nie znalazlem.

Dzisiaj jednak mam inne juz nieco dalej idace plany. Docelowo chce zalozyc firme, startup, która ma stworzyc program szyfrujacy (na podstawie zaproponowanego przez mnie algorytmu) i opatentowac to rozwiazanie, czy to w postaci implementacji, czy ogólnie algorytmu. Nie sadze, ze bede wstanie zrealizowac ten plan samodzielnie, jako poczatkujacyprogramista. Tutaj potrzeba ludzi, którzy robia to od lat, a najlepiej takich z doswiadczeniem w kryptografii. I wobec koniecznosci zlecenia napisania takiego programu (a na poczatek testów), czy stworzenia calego oprogramowania, uczenie sie programowania samodzielnie jest troche jak zakladanie wlasnego zespolu kolarskiego i jednoczesne uczenie sie jazdy na rowerze. Wiadomo, ze prezes, czy sponsor zespolu sam nigdy na takiej kolarzówce nie bedzie sie tam scigal razem z zawodnikami, jak bardzo by sie nie staral.
godek.maciek (07.12.2019, 23:38)
W dniu sobota, 7 grudnia 2019 21:44:27 UTC+1 uzytkownik osobliwy nick napisal:
> W dniu sobota, 7 grudnia 2019 20:58:32 UTC+1 uzytkownik godek...@gmail.com napisal:
> Chodzi to za mna od dawna, ale to osobny temat. Mialem podstawyC na studiach, ale zapomnialem wlasciwie wszystkiego, nie bylem tez szczególnie zdolnym studentem, jednoczesnie nie mialem tez szczególnie zdolnych prowadzacych zajecia (a to wiem od kolegów przybylych do nas z Politechniki, studiujacych jednoczesnie inne kierunki, którzy krytykowali sposób nauczania na moim kierunku). W ostatnich latach zas kazda wolna chwile poswiecalem na nauke czegos zupelnie innego - rynków finansowych i tradingu. I tak odkladalem to programowanie przez lata. Jednoczesnie juzna etapie analizy i testowania strategii tradingowych potrzebowalem.... tak - umiec programowac. Zlecilem wówczas dosyc szerokie testy i napisanie róznych programów pewnemu programiscie. Ostatecznie zderzylismy sie z teoria chaosu i efektem motyla - bo wykresy kursów ludzaco przypominaja bladzenie losowe (proces Wienera) i jest masa naukowych teorii i modeli traktujaca o efektywnosci rynków finansowych i zachowaniu sie kursu. Naiwni wtedy bylismy, ale przynajmniej zyskalem fajnego znajomego.
> Wracajac do tematu. Moze to jest ten moment. Na pewno masz racje, ze powinienem to zrobic. Zwlaszcza, ze poznalem z czym to sie je i jakies tam programy kilka lat temu nawetpisalem (na studiach i po nich). A juz nie pierwszy raz zlecam komus pisanie jakiegos programu. Kiedys zlecilem napisanie programu, który bedzie poszukiwal liczb Crandalla, które nie beda liczbami Wieferich (problem z zakresu matematyki teoretycznej). Potrafilem zostawic komputer odpalony na tydzien czasu, bo wzór, który to liczyl przebiegal po ogromnej liczbie wariacji wielu zmiennych. Niczego niestety nie znalazlem.
> Dzisiaj jednak mam inne juz nieco dalej idace plany. Docelowo chce zalozyc firme, startup, która ma stworzyc program szyfrujacy (na podstawie zaproponowanego przez mnie algorytmu) i opatentowac to rozwiazanie, czy to w postaci implementacji, czy ogólnie algorytmu. Nie sadze, ze bede w stanie zrealizowac ten plan samodzielnie, jako poczatkujacy programista. Tutaj potrzeba ludzi, którzy robia to od lat, a najlepiej takich z doswiadczeniem w kryptografii. I wobec koniecznosci zlecenia napisania takiego programu (a na poczatek testów), czy stworzenia calego oprogramowania, uczenie sie programowania samodzielnie jest troche jak zakladanie wlasnego zespolu kolarskiego i jednoczesne uczenie sie jazdy na rowerze. Wiadomo, ze prezes, czy sponsor zespolu sam nigdy na takiej kolarzówce nie bedzie sie tam scigal razem z zawodnikami, jak bardzo by sie nie staral.


Jest taka ksiazka, "Od dobrego do wielkiego", w której pojawia sie koncepcja "przywódcy 5 poziomu". Dziwne nazwy na bok, chodzi o to, ze autor przeanalizowal wiele firm, które odnioslo spektakularny sukces, i mu wyszlo, ze najlepsi przywódcy byli ekspertami w dziedzinie, w której dzialala firma.

(Moze brzmi to trywialnie, ale wiele firm zatrudnia jako liderów "etatowych menadzerów", którzy "znaja sie tylko nazarzadzaniu" i maja bardzo niewielka wiedze dziedzinowa).

W moim odczuciu programowanie dobrze uczy trzezwosci w odfiltrowywaniu magicznego myslenia od tego, co jest rzeczywiscie mozliwe do wykonania.

Zwlaszcza te pytania, które zadajesz, po prostu sie prosza o to, zebys to sprawdzil samodzielnie. To dobry pretekst, zeby przysiasc i odswiezyc sobie wiedze ze studiów. To jest naprawde na wyciagniecie reki.

Co do "niezbyt zdolnych prowadzacych zajecia", to nie jest to dobra wymówka.
Ja wiekszosci zajec z polibudy tez nie wspominam jakos rewelacyjnie - na uniwersytecie studiowalo mi sie duzo przyjemniej (zwlaszcza filozofie, ale nawet na infie nie bylo tak zle).

Ale to na polibudzie mielismy jednego profesora, który w kólko mówil, ze "albo ktos jest samoukiem, albo nieukiem". Nikt Cie niczego nie nauczy. Sam musisz sie nauczyc. Dobry nauczyciel moze tylko stworzyc okazje do zainteresowania sie przedmiotem.

Dlatego - jasne - dobrze by bylo, zebys znalazl sobie jakiegos magika od optymalizacji programu pod konkretny sprzet, botutaj jest duzo szczególików, których nie powinienes musiec poznawac. Ale napisanie programu w C czy chociaz Pythonie powinienes miec w malym palcu, bo to sa prosterzeczy.

Python nawet wspiera duze liczby, wiec w przeciwienstwie do C nie jestes ograniczony rozmiarem rejestrów.
Maciej Sobczak (08.12.2019, 21:24)
> > Dodam tylko, ze nie umiem programowac,
> A dlaczego nie rozwazysz "nauczenia sie programowania"?


Przychylam sie do tej sugestii.

Wyglada na to, ze potrafisz racjonalnie analizowac a nawet skonstruowac algorytm obliczenia czegos. Wlasciwie od tego miejsca do napisania programu, który demonstruje/testuje Twoje pomysly jest tylko prosty krok rzemieslniczy. Mozesz sie nawet zdziwic gdy zobaczysz, ze prezycyjny opis algorytmu jest latwiejszy w jakims jezyku programowania, niz w jezyku naturalnym - a przeciez zlecajac komus napisanie programu musialbys mu najpierw wytlumaczyc, co ma napisac.
Wiec po co sobie utrudniac?

Oczywiscie mozesz sobie zatrudnic kiedys specjalistów od wydziwiania i róznego rodzaju oszczednosci (czasu, energii elektrycznej, kosztów produkcji/wdrozenia, itd.), alezdolnosc napisania referencyjnej implementacji i tak bedzieCi potrzebna, zebys mógl byc dla swojego zespolu liderem a nie tylko szefem.

Wiec do dziela. Moze nawet faktycznie Python bedzie tu racjonalnym wyborem - dla Ciebie. Ale biorac pod uwage cel, który chcesz osiagnac, nie zatrudniaj programistów, którzy znaja tylko Pythona.
osobliwy nick (11.12.2019, 05:24)
> Jest taka ksiazka, "Od dobrego do wielkiego", w której pojawia sie koncepcja "przywódcy 5 poziomu". Dziwne nazwy na bok, chodzi o to, ze autor przeanalizowal wiele firm, które odnioslo spektakularny sukces, i mu wyszlo, ze najlepsi przywódcy byli ekspertami w dziedzinie, w której dzialala firma..

Pytanie, czy firma tworzaca program szyfrujacy powinna miec na czele bardziej programiste, czy specjaliste od algorytmów szyfrujacych. To rzadko idzie w parze, aczkolwiek wiadomo, ze najlepiej, aby potrafil jedno i drugie.

> Co do "niezbyt zdolnych prowadzacych zajecia", to nie jest to dobra wymówka.
> Ja wiekszosci zajec z polibudy tez nie wspominamjakos rewelacyjnie - na uniwersytecie studiowalo mi sie duzo przyjemniej (zwlaszcza filozofie, ale nawet na infie nie bylo tak zle).
> Ale to na polibudzie mielismy jednego profesora, który w kólko mówil, ze "albo ktos jest samoukiem, albo nieukiem". Nikt Cie niczego nie nauczy. Sam musisz sie nauczyc. Dobry nauczyciel moze tylko stworzyc okazje do zainteresowania sie przedmiotem.


To wiadomo. Rzecz w tym, ze wówczas po prostu zniechecilem sie nieco do programowania. Nauka szla ciezko i prowadzacy w tym szczególnie nie pomagali (byli opryskliwi). Co wiecej wszyscy uczestnicy zajec byli juz po jakichs kursach programowania na swoich drugich kierunkach, które studiowali na Politechnice, wiec lapali wszystko w lot. Ja natomiast stwierdzilem, ze chyba nie jestem powolany do programowania, skoro tak kiepsko mi idzie w porównaniu z nimi. Fakt, ze wlozylem mimo wszystko wówczas w to niewiele pracy, raczej niezbedne minimum.
osobliwy nick (11.12.2019, 05:40)
> Przychylam sie do tej sugestii.
> Wyglada na to, ze potrafisz racjonalnie analizowac a nawetskonstruowac algorytm obliczenia czegos. Wlasciwie od tego miejsca do napisania programu, który demonstruje/testuje Twoje pomysly jest tylko prosty krok rzemieslniczy. Mozesz sie nawet zdziwic gdy zobaczysz, ze prezycyjny opis algorytmu jest latwiejszy w jakims jezyku programowania, niz w jezyku naturalnym - a przeciez zlecajac komus napisanie programu musialbys mu najpierw wytlumaczyc, co ma napisac.
> Wiec po co sobie utrudniac?


Mialem taki moment powrotu do programowania. Napisalem nawet pierwszy program od lat. Chodzilo o ten problem:



Poleglem jednak wtedy. Napisanie tego bylo dla mnie nie do przeskoczenia, a jak zobaczylem kod, którego oczywiscie nie rozumialem, który ktos napisal ot tak, po krótkim czasieod reki, stwierdzilem, ze raczej zadnym rozsadnymczasie nie osiagne takiego poziomu. Ostatecznie na podstawie tego co mi tam zasugerowano zlecilem komus odplatnie napisanie tego programu. Programista z tego co pamietam i tak napisal caly kod od poczatku po swojemu, ale byl on nie mniej zlozony od tego, który podpowiadano mi w watku.

I wtedy z poziomu dosyc wysokiej motywacji popadlem w marazm i zostawilem programowanie na kolejne lata.

> Oczywiscie mozesz sobie zatrudnic kiedys specjalistów od wydziwiania i róznego rodzaju oszczednosci (czasu, energii elektrycznej, kosztów produkcji/wdrozenia, itd.), ale zdolnosc napisania referencyjnej implementacji i tak bedzie Ci potrzebna, zebys mógl byc dla swojego zespolu liderem a nie tylko szefem.


No tak, masz racje.

> Wiec do dziela. Moze nawet faktycznie Python bedzie tu racjonalnym wyborem - dla Ciebie. Ale biorac pod uwage cel, który chcesz osiagnac, nie zatrudniaj programistów, którzy znaja tylko Pythona.


Ok. Zmotywowaliscie mnie. Bede myslal w takim razie o powrocie do tematu programowania. A wlasciwie o zaczeciuod poczatku, bo pomimo, ze wiem co to programowanie, jak to sie robi itd., to moje praktycznie umiejetnosci sa znikome. Co do jezyka myslalem o C++, bo czesto mam do policzenia jakies matematyczne rzeczy, a ten jezyk kojarzy mi sie z takimi inzynierskimi i matematycznymi zastosowaniami. Poza tym latwo znalezc materialy na jego temat.
godek.maciek (11.12.2019, 13:53)
W dniu sroda, 11 grudnia 2019 04:40:28 UTC+1 uzytkownik osobliwy nick napisal:
> > Przychylam sie do tej sugestii.

> Ok. Zmotywowaliscie mnie. Bede myslal w takim razie o powrocie do tematu programowania. A wlasciwie o zaczeciu od poczatku, bo pomimo, ze wiem co to programowanie, jak to sie robi itd., to moje praktycznie umiejetnosci sa znikome. Co do jezyka myslalem o C++, bo czesto mam do policzenia jakies matematyczne rzeczy, a ten jezyk kojarzy mi sie z takimi inzynierskimi i matematycznymi zastosowaniami. Poza tym latwo znalezc materialy na jego temat.


Ja osobiscie raczej bym odradzal C++ do Twoich zastosowan.
Jest to jezyk nadmiernie skomplikowany, i nawet nie za dobrze radzi sobie z liczbami (domyslnie implementuje arytmetyke modulo 2^32 albo 2^64)

Raczej bym polecal albo Racket, bo jest bardzo prosty i jest dla niegoduzo dobrych materialów dydaktycznych, a do tego wspiera odrazu arytmetyke o dowolnej precyzji oraz liczby wymierne. Sposród materialów dydaktycznych jest ksiazka "How To Design Programs", dostepna za darmo tutaj (jakosciowo o rzedywielkosci lepsza od jakichkolwiek materialów o C++, z jakimi mialem stycznosc):



Na podstawie tej ksiazki powstal kurs o systematycznym projektowaniu programów:



Jest tez nieco starsza, ale wciaz nie chcaca sie zestarzec ksiazka "Structure and Interpretation of Computer Programs" (wydana swego czasu tez po Polsku przez WNT jako "Struktura iInterpretacja Programów Komputerowych"), udostepniona za darmo na stronie MIT:



Kurs, na potrzeby którego ksiazka zostala opracowana, równiez mozna znalezc na youtubie:



Warto ewentualnie rozwazyc jezyk Haskell, który jest bardziej zlozony, ale ma dosc wydajna implementacje,i jest tez sobie w stanie poradzic z duzymi liczbami (i podwzgledem skladni mocno przypomina klasyczna notacje matematyczna).

Rozwiazanie podlinkowanego przez Ciebie przykladu wygladaloby tak.
Najpierw definiujemy sobie iloczyn kartezjanski listy list, zeby móc generowac ciagi wartosci x1, ..., xN:

cartprod [] = [[]]
cartprod (xs:xss) = [x:ys | x <- xs, ys <- cartprod xss]

wyprowadzenie powyzszej definicji mozesz znalezc tutaj:


nastepnie definiujemy produkt kartezjanski

cartpow l n = cartprod $ take n $ repeat l

gdzie (repeat l) tworzy nieskonczona liste powtórzen listy l, zas take n bierze tylko n poczatkowych elementów.

Poniewaz jest u Ciebie warunek, ze

x1 >= x2 >= ... >= xN

to mozemy wybrac tylko te punkty z iloczynu kartezjanskiego,których wartosciami sa nierosnace ciagi:

nonasc (x:y:zs) = x >= y && nonasc (y:zs)
nonasc _ = True

Wreszcie, funkcja budujaca zbiory punktów [x1, ..., xN] mozemiec postac:

dom x n = [p | p <- (cartpow [0 .. x] n), nonasc p]

czyli zbiór wszystkich punktów z potegi kartezjanskiej,których kolejne wspólrzedne tworza ciag nierosnacy.

Mozna latwo sprawdzic, ze np. (dom 3 2) da nam wartosc

[[0,0],[1,0],[1,1],[2,0],[2,1],[2,2],[3,0],[3,1],[3,2],[3,3]]

I teraz chcemy znalezc elementy, które spelniaja Twoje kryterium.
Zeby Haskell obsluzyl liczby wymierne, trzeba zaladowac modul Data.Ratio:

import Data.Ratio

Operator dzielenia wymiernego liczb calkowitych jest wówczas wyrazany symbolem %.

Pozwala to zdefiniowac nam zbiór interesujacych Cie liczb jako:

ws x y p = [(sum [(p^xn)%(2^xn) | xn <- seq]) * ((2^(y-1))%(2^(x+y)-p^y))
| seq <- (dom x (y-1))]

i wtedy mozemy sprawdzic, ze wyrazenie (ws 3 3 3) da nam liste

[8 % 37,
10 % 37,
12 % 37,
13 % 37,
15 % 37,
18 % 37,
35 % 74,
39 % 74,
45 % 74,
27 % 37]

Jest to inny zbiór od tego, który podales w swoim drugim poscie, wiec mozliwe, ze zle zrozumialem specyfikacje.

W kazdym razie "rozmawiajac" sobie z interpreterem Racketa albo Haskella, mozesz dosc latwo przeszukac interesujace Cie dziedziny.
Maciej Sobczak (11.12.2019, 21:46)
> Ja osobiscie raczej bym odradzal C++ do Twoich zastosowan. [...]

A ja bym nie odradzal, bo jesli pomysl ma ostatecznie zostac skomercjalizowany, to *nieuniknionym* targetem bedzie wlasnie C++.

Wiec jesli jest juz entuzjazm do C++ (w odróznieniu do wspomnianego Pythona), to nie ma powodu, zeby z niego rezygnowac.

> Raczej bym polecal albo Racket, [...]
> Warto ewentualnie rozwazyc jezyk Haskell, [...]


No jednak nie powstrzymales sie. :-)
W takim razie obowiazkowe:



W temacie eksploracji zagadnien matematycznych Wolfram nie ma merytorycznej konkurencji.
Ale przeciez juz o tym bylo. :-)
godek.maciek (11.12.2019, 22:47)
W dniu sroda, 11 grudnia 2019 20:46:36 UTC+1 uzytkownik Maciej Sobczak napisal:
> > Ja osobiscie raczej bym odradzal C++ do Twoich zastosowan.

> [...]
> A ja bym nie odradzal, bo jesli pomysl ma ostatecznie zostac skomercjalizowany, to *nieuniknionym* targetem bedzie wlasnie C++.
> Wiec jesli jest juz entuzjazm do C++ (w odróznieniu do wspomnianego Pythona), to nie ma powodu, zeby z niego rezygnowac.


C++ to jezyk, na którym niestety latwo sie sparzy. A jego nieuniknionosc to raczej mit. (Jest np. firma tradingowa Jane Street, która do swoich zastosowan wymagajacych duzej wydajnosci uzywa jezyka OCaml. A Mozilla konsekwentnie zastepuje C++a w Firefoxie Rustem)
Roman Tyczka (12.12.2019, 10:59)
On Sat, 7 Dec 2019 13:38:59 -0800 (PST), godek.maciek wrote:

> Jest taka ksiazka, "Od dobrego do wielkiego", w której pojawia sie
> koncepcja "przywódcy 5 poziomu". Dziwne nazwy na bok, chodzi o to, ze
> autor przeanalizowal wiele firm, które odnioslo spektakularny sukces, i
> mu wyszlo, ze najlepsi przywódcy byli ekspertami w dziedzinie, w której
> dzialala firma.
> (Moze brzmi to trywialnie, ale wiele firm zatrudnia jako liderów
> "etatowych menadzerów", którzy "znaja sie tylko na zarzadzaniu" i maja
> bardzo niewielka wiedze dziedzinowa).
> W moim odczuciu programowanie dobrze uczy trzezwosci w odfiltrowywaniu
> magicznego myslenia od tego, co jest rzeczywiscie mozliwe do wykonania.


100% racji i celnie ujete, szkoda, ze w praktyce rzadko sie to spotyka.

btw a ksiazke o której wspomniales juz sobie zamówilem, dzieki za cynk,
wydaje sie ciekawa pozycja
Maciej Sobczak (12.12.2019, 20:25)
> C++ to jezyk, na którym niestety latwo sie sparzy.

Albo odniesie sukces, podobny do wielu innych sukcesów w C++.

> A jego nieuniknionosc to raczej mit.


Z tego co zrozumialem, kolega chce zrobic jakis algorytm. Wiec zapewne bedzie chcial, zeby jego implementacja byla mozliwa do uzycia w jak najwiekszej liczbie róznych kontekstów - czy to poprzez pluginy, czy jako biblioteki do zaladowania w innym jezyku, itp. Najpowszechniejszym formatem takich modulów sa biblioteki z interfejsem w C, najlepiej bez narzucania sie z obcym run-timem (np. ladowanie modulu w Javie do programu w .NET to glupi pomysl, ale modul w C++ mozna zaladowac zarówno do Javy jak i do .NET).

Nieuniknionosc C++ wynika z tego, ze spelniajac tewarunki, jest jednoczesnie dobrze znanym a w porównaniu do golego C ma dodatkowe cechy, które sprawiaja, ze w takich wlasnie zastosowaniach jest obiektywnie lepszy.

> Jest np. firma tradingowa Jane Street, która do swoich zastosowan wymagajacych duzej wydajnosci uzywa jezyka OCaml. A Mozilla konsekwentnie zastepuje C++a w Firefoxie Rustem


Brawo oni. Ale uwaga: nie da sie tych rzeczy wykorzystac gdzie indziej, wiec nie nadaja sie do komercjalizacji same z siebie.

Kontrprzyklad: TensorFlow, chyba najpowszechniej wykorzystywany framework do machine learningu, jest napisany w C++. Dzieki tym cechom, o których napisalem powyzej, wiekszosc ludzi korzystajacych z tego np. w Pythonie nawet o tym nie wie. I nie musi.
I wlasnie to jest zródlem sukcesu tego frameworku.
godek.maciek (13.12.2019, 00:04)
W dniu czwartek, 12 grudnia 2019 19:25:38 UTC+1 uzytkownik Maciej Sobczak napisal:
> > C++ to jezyk, na którym niestety latwo sie sparzy.

> Albo odniesie sukces, podobny do wielu innych sukcesów w C++.
> > A jego nieuniknionosc to raczej mit.

> Z tego co zrozumialem, kolega chce zrobic jakis algorytm. Wiec zapewne bedzie chcial, zeby jego implementacja byla mozliwa do uzycia w jak najwiekszej liczbie róznych kontekstów - czy to poprzez pluginy, czy jako biblioteki dozaladowania w innym jezyku, itp. Najpowszechniejszym formatem takich modulów sa biblioteki z interfejsem w C, najlepiej bez narzucania sie z obcym run-timem (np. ladowanie modulu w Javie do programu w .NET to glupi pomysl, ale modul w C++ mozna zaladowac zarówno do Javy jak i do .NET).


Mam kolege, który tworzy jezyk programowania C:

Programy nim napisane mozna tlumaczyc do C, C++, C#, Javy, JavaScriptu, i zdaje sie ze nawet D i Perla.
Mozna uzyc.

> Nieuniknionosc C++ wynika z tego, ze spelniajac te warunki, jest jednoczesnie dobrze znanym a w porównaniu do golego C ma dodatkowe cechy, które sprawiaja, ze w takichwlasnie zastosowaniach jest obiektywnie lepszy.


Byc moze. Nie zmienia to jednak faktu, ze C++ jest jezykiem bardzo zlozonym, i ze jego zlozonosc w duzej mierze wynika z zaszlosci historycznych, które osobe nastawiona na konkretne cele nie beda szczególnie interesowac, a moga latwo zniechecic.

> > Jest np. firma tradingowa Jane Street, która do swoich zastosowan wymagajacych duzej wydajnosci uzywa jezyka OCaml. A Mozilla konsekwentnie zastepuje C++a w Firefoxie Rustem

> Brawo oni. Ale uwaga: nie da sie tych rzeczy wykorzystac gdzie indziej, wiec nie nadaja sie do komercjalizacji same z siebie.
> Kontrprzyklad: TensorFlow, chyba najpowszechniej wykorzystywany framework do machine learningu, jest napisany w C++. Dzieki tym cechom, o których napisalem powyzej, wiekszosc ludzi korzystajacych z tego np. w Pythonie nawet o tym nie wie. I nie musi.
> I wlasnie to jest zródlem sukcesu tego frameworku.


Zródlo sukcesu TensorFlow jest takie samo, jak zródlo sukcesu Pythona, mianowicie to, ze oba projekty zostaly mocno doinwestowane przez firme Google.

Zreszta to dosc typowe zjawisko. Podobnie zródlem sukcesu IBM PC bylo to, ze stala za nim firma IBM (i ze ten projekt zaniedbala), a nie to, ze byl jakims technicznym majstersztykiem. Podobnie C++ zostal mocno doinwestowany przez korporacje.

Ja znam jeszcze dwie inne historie: Viaweb Paula Grahama i Minecraft Markusa Perssona. Obie zostaly napisane w róznych jezykach (odpowiednio: Common Lispie i Javie), a nastepnie wykupione za duzepieniadze przez wielkie korporacje (odpowiednio: Yahoo i Microsoft) iprzepisane na C++.

Ta droga jest wazna, bo pokazuje, ze C++ jest raczej jezykiem do 'zacementowywania' istniejacych projektów, niz do dostarczania innowacji.
Maciej Sobczak (13.12.2019, 22:06)
> Mam kolege, który tworzy jezyk programowania C:

Jedni zbieraja znaczki a inni klej do znaczków...

> Programy nim napisane mozna tlumaczyc do C, C++, C#, Javy,JavaScriptu, i zdaje sie ze nawet D i Perla.


Obrazki w UMLu tez mozna tlumaczyc. Nic z tego nie wynika od 30 lat.

Ale tak konkretnie - jaka wade jezyka C++ mozna ominac piszac program w jezyku C i tlumaczac gopotem do C++ i jednoczesnie nie rezygnujac z zalet, z których mozna by bylo skorzystac od razu piszac w C++?

W sensie - jaka jest wartosc dodana tego jezyka C?

> Mozna uzyc.


Pytanie, jaki jest cel tego cwiczenia. Bo jesli komercjalizacja jakiegos pomyslu, to nie chodzi o to, ze "mozna uzyc", tylko czego uzyc, zeby jak najlepiej osiagnac zamierzony efekt. Haslo "mozna uzyc" jest zupelnie z innej plaszczyzny. Dokladnie na tej samej zasadzie niektórzy zbieraja klej do znaczków. Mozna zbierac.

> Byc moze. Nie zmienia to jednak faktu, ze C++ jest jezykiem bardzo zlozonym


To uzywaj wybranego podzbioru. Wtedy taki (pod)jezyk bedzie mniej zlozony.

Teza: dla kazdego problemu/zadania istnieje sensownie niezlozony podzbiór jezyka C++, w którym mozna ten problem/zadanie rozwiazac/zrealizowac.

Jezyk polski tez jest jednym z bardziej zlozonych, ale zeby sie skutecznie poklócic na usenecie, wystarczy jego maly podzbiór.

Czestym bledem jest stosowanie tych elementów jezyka, których nie trzeba bylo uzywac.

Zaraz, zaraz - juz wiem! Bo... mozna uzyc.
Niestety to jest powszechna choroba inzynierów, nie tylko programistów.

> Zródlo sukcesu TensorFlow jest takie samo, jak zródlo sukcesu Pythona, mianowicie to, ze oba projekty zostaly mocno doinwestowane przez firme Google.


Blad. Firma Google zainteresowala sie Pythonem dopiero po tym, jak Python osiagnal sukces.
Mozliwe, ze z punktu widzenia managementu troche niewygodny byl fakt, ze kazda inna duza firma miala jakis "swój" jezyk. Zatrudnienie Guido moglo sie wydawac "rozwiazaniem" tego marketingowego problemu. Tak czy inaczej - najpierw byl sukces, potem adopcja.

> Podobnie C++ zostal mocno doinwestowany przez korporacje.


I tu sie wylozyles uzywajac slowa "korporacje" zaraz po tym, jak w innym kontekscie podales konkretne nazwy. Slowo "korporacje" oznacza tyle samo, co "oni", albo "wszyscy".
Czyli sukces C++ wynikal z tego, ze wszyscy go uzywali? Oczywiscie.

Dlatego tez zachodzi podejrzenie, ze do zadania z tego watkutez bedzie to dobry wybór.

> Ja znam jeszcze dwie inne historie: Viaweb Paula Grahama i Minecraft Markusa Perssona. Obie zostaly napisane w róznych jezykach (odpowiednio: Common Lispie i Javie), a nastepnie wykupione za duze pieniadze przez wielkie korporacje (odpowiednio: Yahoo i Microsoft) i przepisane na C++.


Ciekawe. Ale to fajne przyklady.

> Ta droga jest wazna, bo pokazuje, ze C++ jest raczej jezykiem do 'zacementowywania' istniejacych projektów, niz do dostarczania innowacji.


Mam inna teze. Wykupienie tych produktów wiazalo sie z zalozeniem, ze beda dostarczone na masowy rynek (w przypadku projektów sieciowych oznacza to masowe obciazenia) a najwyrazniej na komercyjnym rynku C++ jest wlasciwym narzedziem, zeby sprostac komercyjnym wymaganiom. "Zacementowanie" jest celem, któro nie dosc, ze niczego nie oznacza, to jeszcze trudno taki cel uzasadnic koniecznymi kosztami.. Natomiast poniesienie kosztów, zeby dostarczyc uzytkownikom niezawodny produkt, jest jak najbardziej racjonalne. I to równiez jest powód, zeby sie tym jezykiem zainteresowac.

Oczywiscie mozna tez wysunac argumentacje, ze "oni" (korporacje?) robia zle, bo sa zli, wiec skoro robia cos w C++, to na pewno C++ tez jest zly.

Podobne wątki