Python - czemu?

0

Witam,
ostatnio bardzo interesuje mnie Python, ale głównie dlatego że nie do końca rozumiem jego możliwości.

  1. Jest oprogramowanie LinuxCNC do sterowania maszynami i zastanawia mnie jaka jest przewaga Pythona nad np.: Java lub C#? Czemu nie napisali tego w jednym z wymienionych przeze mnie
  2. Czy programy napisane w Pythonie muszą być open-source, czy można je normalnie sprzedawać?

Wiem, że Python jest bardzo przejrzysty i uniwersalny, oraz skupia najlepsze techniki programowania zawarte w innych językach. Mimo to jest to język wysokiego poziomu i zdaje się być wolniejszy od Java czy C# (moje zdanie)?

0

Ale program w pythonie szybko napiszesz, a że będzie działał te dwie sekundy dłużej - czas pracy programisty jest droższy.

0

Wydajność jest ważna, ale nie najważniejsza :) Choć to zależy od tego co tworzymy i dla kogo.

0

Python jest kaczo typowany, a kacze typowanie oznacza masakrę przy refaktorze, słabe wsparcie IDE, niską wydajność (co najczęściej ma małe znaczenie, ale to zależy co kto lubi kodzić), itd

0
pomoz_mi napisał(a):
  1. Czy programy napisane w Pythonie muszą być open-source, czy można je normalnie sprzedawać?

Czytaj licencję ;)

https://docs.python.org/2/license.html
https://docs.python.org/3/license.html

Przy czym o ile można program udostępnić komuś na zamkniętej licencji, to może być znacznie trudniej zrealizować uniemożliwienie czytania i modyfikacji kodu:
https://github.com/gstarnberger/uncompyle

Są obfuskatory, ale to dość ograniczone narzędzia przy językach typowanych dynamicznie.

pomoz_mi napisał(a):
  1. Jest oprogramowanie LinuxCNC do sterowania maszynami i zastanawia mnie jaka jest przewaga Pythona nad np.: Java lub C#? Czemu nie napisali tego w jednym z wymienionych przeze mnie
    ...
    Wiem, że Python jest bardzo przejrzysty i uniwersalny, oraz skupia najlepsze techniki programowania zawarte w innych językach. Mimo to jest to język wysokiego poziomu i zdaje się być wolniejszy od Java czy C# (moje zdanie)?

Widocznie w projekcie LinuxCNC wąskim gardłem nie była prędkość działania. Nie istnieje jedyny słuszny język. Gdyby tak było, nie istniałyby inne ;) Ja Pythona ostatnio używam do małych skryptów operujących masowo na plikach (operacje na obrazach graficznych, zmiana nazw według mojego widzimisie, wypakowywanie plików według moich kryteriów - np. do odpowiednich katalogów).

0

Strasznie podoba mi się Python, ale chciałbym użyć go do zarobku i nie mogę w żadnej formie dzielić się kodem. Czyli pozostaje mi Java lub C# - a bardzo chciałem tego uniknąć.

1

Przecież roboty w Pythonie jest sporo i da się na tym zarobić. W czym problem w takim razie?

Chcesz pisać programy client-side i sprzedawać? Hmm, no tutaj Python raczej słabo wypada (przynajmniej tak mi się wydaje, że client-side Pythona na rynku praktycznie nie istnieje). Ale to przecież nie jedyna opcja.

0

Nie, potrzebuję stworzyć prosty program podobny do LinuxCNC (dużo prostszy) i chciałbym go normalnie sprzedawać Klientom (w pakiecie) ale tak by nikt z konkurencji nie miał do tego programu dostępu - czyli by nie mogli skopiować kodu w żadnym stopniu (np.: od mojego Klienta).

2

Chcesz sprzedawać coś co jest gorsze niż program dostępny za darmo? Gdzie tu logika?

0

Python jest średni do aplikacji klienckich (uruchamialnych na maszynie lokalnej), które nie są "utility scriptami". Jak tak bardzo chcesz użyć pythona to pogoogluj za kompilacją do pliku wykonywalnego (np. http://www.py2exe.org/) lub rozważ postawienie serwera, który robi logikę biznesową, a warstwa widoku jest realizowana w przeglądarce (django?).

0

Od kiedy spakowanie zrodel z interpreterem to kompilacja. :|

0

Mój program będzie podobny - chodzi o CAM - ale do innego zastosowania, dlatego LinuxCNC się nie nadaje :)

To wreszcie nie wiem, czy mogę się uchronić czy nie? A może jednak już zmęczyć Jave lub C#?

3

Wydaj program za darmo, zarabiaj na wsparciu.

0

Tak się nie da. Niestety jest to wąska działka w której albo ma się coś swojego, albo mają to wszyscy Twoim kosztem.

W takim razie przemyślę jeszcze czy Java czy C# - bo chcę standardowo działać na SVG (chyba najlepsza forma) lub jakimś komponencie do grafiki wektorowej - teraz tylko pytanie: Java (czyli na wszystkie platformy) czy C# z .NET?

1

Ale i javę i c# da się dekompilować bez żadnych problemów do kodu źródłowego. Nie widzę tu żadnej wyższości nad pythonem.

0
Shalom napisał(a):

Ale i javę i c# da się dekompilować bez żadnych problemów do kodu źródłowego. Nie widzę tu żadnej wyższości nad pythonem.

Tego to nie wiedziałem... A Python da się? Jak tak to czym? :D

0

Gdybyś czytał to co pisałem, to byś wiedział...

Spine napisał(a):

Przy czym o ile można program udostępnić komuś na zamkniętej licencji, to może być znacznie trudniej zrealizować uniemożliwienie czytania i modyfikacji kodu:
https://github.com/gstarnberger/uncompyle

0
Spine napisał(a):

Gdybyś czytał to co pisałem, to byś wiedział...

Spine napisał(a):

Przy czym o ile można program udostępnić komuś na zamkniętej licencji, to może być znacznie trudniej zrealizować uniemożliwienie czytania i modyfikacji kodu:
https://github.com/gstarnberger/uncompyle

Sorry jakoś mi to umknęło. No dobra teraz już chyba wszystko wiem, więc zacznę się tym bawić.

Dziękuję wszystkim i do usłyszenia (pisemnego :D )

0

Natknąłem się ostatnio na taką ofertę pracy: http://www.goldenline.pl/praca/oferta/277031?utm_source=newsletter&utm_medium=email&utm_content=see-offer&utm_campaign=job-alert

Holenderski pracodawca, CNC, Python został stworzony właśnie przez Holendra. Coś w tym jest ;)

0

Kilka sposobów na zabezpieczenie kodu Pythona:

  • zapakowanie do EXE (zabezpiecza tylko przed amatorami) - py2exe
  • kompilacja do C/C++: Cython, Shed Skin
  • zrobienie kluczowych modułów w C lub Pascal (w tym zabezpieczeń) - SIP, SWIG, Boost::Python
  • napisanie odpowiedniej licencji

Tutorial do Cythona: http://blog.biicode.com/bii-internals-compiling-your-python-application-with-cython/

0

Zalety

  • bardzo przejrzysta składnia i minimalistyczne podejście, bez zbędnych nawiasów klamrowych, architektura przez wcięcia co w zasadzie wymusza określony styl kodowania
  • kod jest bardzo przejrzysty i czytelny
  • dynamicznie typowany
  • język ogólnego zastosowania
  • sporo różnych bibliotek także do obliczeń naukowych
  • mocne wsparcie społeczności
  • szybkość tworzenia aplikacji konsolowych, desktopowych i webowych
  • ogólnie aplikacje tworzy się prosto, jest też łatwy do nauczenia

Wady

  • w porównaniu z językami statycznie typowanymi (C++/pascal/JAVA/C#) koszmarnie powolny
  • z powodu wyżej jego zastosowanie w szybkich i wydajnych aplikacjach konsolowych czy desktopowych to jakieś totalne nieporozumienie
  • bez dobrego IDE, z powodu że jest to język skryptowy mogą być problemy związane z wykrywaniem błędów
  • architektura przez wcięcia może też sprawiać problemy

Argumenty o wyższości szybkości tworzenia aplikacji nad ich wydajnością w przypadku aplikacji desktopowych czy konsolowych mnie nie przekonują. Już wolałbym użyć języka kompilowanego, statycznie typowanego. Co do pythona, wkurza mnie jakiś brak kompatybilności wstecznej, bo np. BoaConstructor 0.6.1 uruchamia się bez problemu na py26, natomiast na wersji 2.7 już nie. Podobnie może być z innymi programami. Poza tym trzeba dopasowywać biblioteki do konkretnej wersji pythona bo i z tym mogą być problemy.

Ogólna ocena: pozytywna i moim zdaniem warto się tego języka nauczyć w swojej ścieżce rozwoju. Szybkość tworzenia aplikacji, ze względu na składnię o dynamiczne typowanie może być mocnym argumentem ale ja bym to odniósł raczej do web, bazując na DJANGO, bo jeśli chodzi o aplikacje desktopowe, jeśli ktoś chce zachwalać pythona, proponuję zachować odrobinę pokory.

0
drorat1 napisał(a):

Wady

  • w porównaniu z językami statycznie typowanymi (C++/pascal/JAVA/C#) koszmarnie powolny
  • z powodu wyżej jego zastosowanie w szybkich i wydajnych aplikacjach konsolowych czy desktopowych to jakieś totalne nieporozumienie
  • architektura przez wcięcia może też sprawiać problemy

Argumenty o wyższości szybkości tworzenia aplikacji nad ich wydajnością w przypadku aplikacji desktopowych czy konsolowych mnie nie przekonują. Już wolałbym użyć języka kompilowanego, statycznie typowanego. Co do pythona, wkurza mnie jakiś brak kompatybilności wstecznej, bo np. BoaConstructor 0.6.1 uruchamia się bez problemu na py26, natomiast na wersji 2.7 już nie. Podobnie może być z innymi programami. Poza tym trzeba dopasowywać biblioteki do konkretnej wersji pythona bo i z tym mogą być problemy.

Ogólna ocena: pozytywna i moim zdaniem warto się tego języka nauczyć w swojej ścieżce rozwoju. Szybkość tworzenia aplikacji, ze względu na składnię o dynamiczne typowanie może być mocnym argumentem ale ja bym to odniósł raczej do web, bazując na DJANGO, bo jeśli chodzi o aplikacje desktopowe, jeśli ktoś chce zachwalać pythona, proponuję zachować odrobinę pokory.

Rower w porównaniu do motocykla też jest koszmarnie wolny. Ale to nie jest jego wada, to jest jego cecha. W związku z tym do czego innego stosuje się motocykl, a do czego innego rower. Tutaj jest podobnie. Jak chcesz mieć program robiący superszybkie obliczenia to napisz go w Fortranie. A Pythona pozostaw do innych zastosowań.

Natomiast zgadzam się, że tworzenie bloków poprzez wcięcia może sprawiać problemy. Rozsypie się formatowanie tekstu (np. podczas kopiowania) i szlag tafia całą logikę kodu. Większość przykładowych kodów w internecie jest napisana pod wersje 2.x, przez co nie działają z 3.x. Kwestia dopasowania wersji bibliotek do wersji Pythona jest kolejną wkurzającą sprawą, z tym się zgodzę.

Generalnie Python jest taki-sobie. Gdzieś w internecie przeczytałem opinię że jak w dzieciństwie ktoś wolał bawić się klockami Lego, to powinien brać się za Pythona, a jak wolił zabawę plasteliną, to za Rubiego. Coś w tym jest. Ja wolałem plastelinę i faktycznie, Ruby chyba bardziej do mnie przemawia. Dlatego zacząłem od nauki Rubiego, aby za jego pomocą zrozumieć "kanciastego" Pythona.

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