Python na dobry początek

0

Postanowiłem sobie cel nauczyć się wreszcie programować. Z komputerami mam do czynienia od wielu lat, więc warto wreszcie użytkowanie komputera spożytkować na czymś konkretnym. Planuje robić przekwalifikowanie. Miałem dylematy czy sieci komputerowe, które lubię czy programowanie, gdzie jednak jest większy rozwój. Czy język programowania Python będzie dobry na początek? Czytałem gdzieś, że ten język najlepiej uczy nowicjusza zasad programowania obiektowego.

0

Musisz sobie odpowiedzieć, co Cię interesuje. Może masz już konkretną działkę, w której chciałbyś robić. Programowanie embeeded, strony internetowe, aplikacje biznesowe, platformy mobilne (Android, iOS), etc. "Trochę" tego jest.

1

Czytałem gdzieś, że ten język najlepiej uczy nowicjusza zasad programowania obiektowego.

Jestem ciekaw argumentów. Dlaczego niby nie np Smalltalk? I co jest bardziej obiektowego w Pythonie niż w C# czy Scali dla przykładu?

1

python na pewno nie jest bardziej obiektowy niż C#..

0
Wibowit napisał(a):

Czytałem gdzieś, że ten język najlepiej uczy nowicjusza zasad programowania obiektowego.

Jestem ciekaw argumentów. Dlaczego niby nie np Smalltalk? I co jest bardziej obiektowego w Pythonie niż w C# czy Scali dla przykładu?

Bo w Smalltalku nic ciekawego nie zrobi a C# czy Scala to nie są łatwe języki / środowiska.
Równie dobrze można polecić SQL-a czy ASM lub PowerShella...
Ale rozumiem że jak ktoś od 20 lat programuje to może zapomnieć jak zaczynał albo nie wiedzieć że teraz można łatwiej...

Coś ode mnie w tym wątku: tak, Python jest bardzo dobrym wyborem do nauki.
Składniowo prosty, można robić efektowne graficznie programy, ma OOP, dużo książek jest dostępnych, działa na PC / smartfonach / web. Może być przyspieszony o moduły w innych językach (chociaż i tak jest szybki - jeśli zastosujesz PyPy).

0

Nie odpowiedziałeś na pytanie. A czy C# jest taki strasznie trudny? Może jakiś C#-owiec się wypowie. No i jeszcze jedna kwestia: najważniejsze jest czy kod w danym języku jest łatwy do utrzymania i rozwijania. Brainfuck jest bardzo prostym językiem, ale niestety niezwykle topornym.

2
Wibowit napisał(a):

Nie odpowiedziałeś na pytanie. A czy C# jest taki strasznie trudny? Może jakiś C#-owiec się wypowie. No i jeszcze jedna kwestia: najważniejsze jest czy kod w danym języku jest łatwy do utrzymania i rozwijania. Brainfuck jest bardzo prostym językiem, ale niestety niezwykle topornym.

Nie trzymasz się wątku - nie chodzi o to który język jest lepszy, który ma lepsze OOP czy jest łatwiejszy w utrzymaniu.
Nie chodzi nawet o to który pozwala tworzyć szybsze binarki.

Chodzi o NAUKĘ PROGRAMOWANIA.

Edit: Gdyby autor dodał że po roku nauki chce iść do pracy jako programista (ale tego nie zrobił) to pewnie poleciłbym mu C# / Java / PHP - w zależności od tego na jakiej platformie chce pracować. Ale skoro dopiero zaczyna to pewnie ma mgliste pojęcie.

Python ma wg mnie najlepszy stosunek "wartość języka (możliwości składniowe) = pracochłonność / atrakcyjność końcowej aplikacji" (opinia subiektywna). Dlatego polecam do nauki.

0

Pytając o łatwość tez nieco odszedłem od własnego wątku. Chodziło mi przede wszystkim o to zdanie:

Czytałem gdzieś, że ten język najlepiej uczy nowicjusza zasad programowania obiektowego.

To zdanie moim zdaniem implikuje, że Python bardziej zachęca (ułatwia) do pisania obiektowego kodu niż wszystkie inne języki i nie widzę żadnych argumentów, które by to popierały.

Moim zdaniem kacze typowanie może rozmywać hierarchie klas.

0
27latek napisał(a):

Czytałem gdzieś, że ten język najlepiej uczy nowicjusza zasad programowania obiektowego.

Python przede wszystkim daje swobodę pod kątem użycia OOP, nie musisz korzystać z niego wcale. Dobrą praktyką jest robienie modułu z zestawem funkcji zamiast jakichś cudacznych singletonów itd. bo w końcu moduł też jest obiektem. Raczej na pewno nie "najlepiej" co najwyżej równie dobrze, co kilka innych języków.

Wibowit napisał(a):

Dlaczego niby nie np Smalltalk?

Ponieważ Smalltalk jest przestarzały, ma osobliwą składnię i masę wrednych cech? Pierwszy z brzegu przykład: 2 + 3 * 5 => 25.

Wibowit napisał(a):

I co jest bardziej obiektowego w Pythonie niż w C# czy Scali dla przykładu?

W Pythonie naprawdę wszystko jest obiektem, tak jak to ma miejsce w Smalltalku. Scala dla przykładu tak naprawdę nadal ma prymitywy Javy, które pięknie udają obiekty dzięki widokom (specyficzna forma niejawnych konwersji). Python daje znacznie lepiej odczuwalne OOP dzięki swojej dynamiczności, w nim absolutnie wszystko to zwyczajne obiekty. C# siłą rzeczy wymaga refleksji, zaś co jest obiektem tylko na poziomie refleksji to już tylko fanaberie Microsoftu.

web.master napisał(a):

python na pewno nie jest bardziej obiektowy niż C#..

import sys

print(sys)

=> <module 'sys' (built-in)>

using System;

public class Test
{
   public static void Main()
   {
      Console.WriteLine(System);
   }
}

=> error CS0118: 'System' is a 'namespace' but is used like a 'variable'

Przestrzenie nazw są obiektami jedynie na poziomie refleksji.

None.__class__

=> NoneType

using System;

public class Test
{
   public static void Main()
   {
      Console.WriteLine(null.GetType());
   }
}

=> error CS0023: Operator '.' cannot be applied to operand of type '<null>'.

Który język oferuje bardziej odczuwalne OOP?

Wibowit napisał(a):

Moim zdaniem kacze typowanie może rozmywać hierarchie klas.

Przede wszystkim duck typing to taki dynamiczny odpowiednik interface'ów, poza tym właśnie o to chodzi żeby nie tworzyć zbędnych hierarchii.

0
Wibowit napisał(a):

Pytając o łatwość tez nieco odszedłem od własnego wątku. Chodziło mi przede wszystkim o to zdanie:

Czytałem gdzieś, że ten język najlepiej uczy nowicjusza zasad programowania obiektowego.

To zdanie moim zdaniem implikuje, że Python bardziej zachęca (ułatwia) do pisania obiektowego kodu niż wszystkie inne języki i nie widzę żadnych argumentów, które by to popierały.

To zależy na jaki kod się trafi.
Beznadziejny kod można stworzyć w każdym języku.
Tak samo zbyt skomplikowany.

Python może nie skłania do OOP, ale aktualnie tworzone tutoriale w większości z tego korzystają.
Nie wiem czy OOP jest najlepsze w Pythonie. Ale składnia Pythona jest wg mnie bardzo łatwa do zrozumienia.

A co do "duck typing" to wg mnie przyszłość programowania - nieważne z jakiej klasy czy interfejsu pochodzi obiekt, ważne żeby miał jedną funkcję - np. "double podajSaldo(void)" - a czy to jest CBankAccount czy CDeletedAccount czy IAccountErrors - to jest drugorzędne. Oczywiście fajnie jeśli możesz mieć nad tym kontrolę - jak w "any_cast<int>(v[i])", ale nie powinno to być wymagane. Bo na koniec nie interesuje Cię jakiego typu jest obiekt tylko czy możesz na nim wywołać daną funkcję.
To jest takie typowanie z dokładnością do metody.

Oczywiście są też argumenty przeciw - program jest pewnie wolniejszy, nie weryfikowany podczas kompilacji.
Ale tak jest z całym programowaniem skryptowym (które jest bardzo wygodne).
Dlatego może nie do wszystkiego się to nadaje. Ale jest przyjemne.

0

Python przede wszystkim daje swobodę pod kątem użycia OOP, nie musisz korzystać z niego wcale.

A więc Python wcale nie zachęca do tworzenia obiektowego kodu? Mówiąc, że jakiś język zachęca do tworzenia obiektowego kodu mam na myśli, że pisanie w takim języku obiektowego kodu jest efektywniejsze i często wymuszone.

Wprowadzenie nulla to był największy błąd C.A.R. Hoare, który za to nieraz przepraszał. Jeśli język ułatwia obsługę nulli to tym samym nie zniechęca do nich, a więc promuje złe praktyki.

To, że namespace ma typ to ciekawostka.

Przede wszystkim duck typing to taki dynamiczny odpowiednik interface'ów, poza tym właśnie o to chodzi żeby nie tworzyć zbędnych hierarchii.

A ja głupi myślałem, że takie rzeczy jak http://en.wikipedia.org/wiki/Interface_segregation_principle są podstawami OOP.

Scala dla przykładu tak naprawdę nadal ma prymitywy Javy, które pięknie udają obiekty dzięki widokom (specyficzna forma niejawnych konwersji).

A co za różnica co się dzieje pod maską? Int w Scali nie może być nullem, tym samym zniechęcając do używania tego niefortunnego wynalazku.

Python może nie skłania do OOP, ale aktualnie tworzone tutoriale w większości z tego korzystają.
Nie wiem czy OOP jest najlepsze w Pythonie. Ale składnia Pythona jest wg mnie bardzo łatwa do zrozumienia.

A no widzisz. Czyli jednak Python wcale nie jest językiem który "najlepiej uczy nowicjusza zasad programowania obiektowego".

A co do "duck typing" to wg mnie przyszłość programowania
(...)
Oczywiście są też argumenty przeciw - program jest pewnie wolniejszy, nie weryfikowany podczas kompilacji.

To są bardzo poważne argumenty. O ile wydajność w wielu przypadkach jest wystarczająca, o tyle brak dobrego wsparcia dla automatycznej refaktoryzacji, podpowiadania czy brak statycznej weryfikacji poprawności mogą być dużym problemem przy dużych projektach - moim zdaniem im większy projekt, tym większy problem (i w drugą stronę też: im mniejszy projekt, tym mniejszy problem).

0
Wibowit napisał(a):

Python może nie skłania do OOP, ale aktualnie tworzone tutoriale w większości z tego korzystają.
Nie wiem czy OOP jest najlepsze w Pythonie. Ale składnia Pythona jest wg mnie bardzo łatwa do zrozumienia.

A no widzisz. Czyli jednak Python wcale nie jest językiem który "najlepiej uczy nowicjusza zasad programowania obiektowego".

Tego nie powiedziałem. Po prostu zakładam że ktoś nie uczy się programowania po to żeby znać "najlepszy język OOP" czy też "język z najładniejszą pętlą foreach" tylko po to żeby się w to wdrożyć i coś przy tym zrozumieć.
Przy językach super-hiper (dla doświadczonych) może się wcześniej zniechęcić niż zrobić jakiś rozsądny program, dlatego nie proponuję ani Smalltalk-a ani Lisp-a ani Scali.

0

O matko wchodziłem tutaj z nadzieją, że będzie tu parę odpowiedzi a przeze mnie nawiązała się dyskusja. Nie dodałem oczywiście po co mi te programowanie. Tak zamierzam w przyszłości opierać swoją karierę zawodową na pisaniu programów. Jak to się potoczy to będzie zależało od moich zasobów. Póki co mam paroletniego laptopa, zapał i... no właśnie mój problem to, że mój angielski nie jest na jakimś dobrym poziomie mimo, że miałem z tym językiem styczność. Ktoś tu napisał, że jeśli chce pisać po to aby potem zarabiać to od razu lepiej uczyć się C#. Czyżby popyt na specjalistów od pythona jest mały w Polsce?

0

Wszędzie jest mały popyt na Pythonowców, ale jak jesteś dobry to znajdziesz robotę, w której będziesz zarabiał kilka razy więcej od klepaczy kontrolek w asp.net.

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