Уведомления

Группа в Telegram: присоединиться

#1 Май 17, 2019 04:53:41

DezmontDeXa
Зарегистрирован: 2019-05-17
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите понять плюсы Питона в сравнении с#(+ Visual Studio)

Здравствуйте, уважаемые питонисты!
Сколько не читаю про питон, везде на него молятся, а я после с# + Visual Studio не могу понять, чем он такой простой и удобный.

Питон, на мой взгляд действительно легко читается. Впервые увидев скрипт на питоне, я смог сообразить что он примерно делает и даже немного его изменить. Прикольно. Кроссплатформенность, конечно же, то же круто. НО. На нем ведь надо еще как-то писать. И вот тут я видимо что-то не понимаю.

1. Нестрогая типизация.
Нестрогая типизация - на мой взгляд всегда минус, т.к. контролировать приходится не только значения переменных но и их тип, что бы случайно не сложить десяток слонов с третьей фазой луны.

2. Отсутствие(частичное) IntelliSens. Кодить без IntelliSens, все равно что кодить в блокноте с макросом для компиляции. Меня просто ужасает, что чтобы использовать базовый функционал, нужно НАИЗУСТЬ знать ВСЕ
встроенные функции. Например, “open()”. Но знать “open()” не достаточно. Так же стоит знать еще 7 литералов для режима открытия файла. Никаких Enum. Никаких подсказок.
Пожалуй это основное, что мне останавливает…

Я решил посмотреть как мне открыть сокет:
sock = socket.socket()
Что млять простите? Как я должен догадаться до такой конструкции? Неужели это выглядит очевидно?
И так для всего, что я пытаюсь изучать. Вернее сказать, для всего конструкторы работает по разному. Если в c# мне достаточно выучить 2-3 варианта создания класса:
1. new
2. паттерн Create
3. уникальные варианты(для специфичных библиотек)
То в случае с Питоном, все является специфичным. Любая мелочь пишется как-то по своему. Общая логика кода отсутствует напрочь.

Но это все было бы не страшно, если бы корректно работал intelliSens и когда я пишу “socket” и ставлю точку после него, мне предлагались варианты:
1. socket.socket() - конструктор
2. …еще несколько вариантов
Вместо этого, intelliSens выдает просто все что в ней есть. Тупой набор слов, без малейшей подсказки, что именно мне следует писать далее.

Я реально не понимаю, как вы кодите на этом. Со справочником и 100500+ вкладками в браузере для всех используемых библиотек(пакетов)?
Или все-таки есть какой-то нормальный способ кодить методом набора кода, а не методом копипаста из браузера?

Офлайн

#2 Май 17, 2019 06:21:32

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 6883
Репутация: +  468  -
Профиль   Отправить e-mail  

Помогите понять плюсы Питона в сравнении с#(+ Visual Studio)

DezmontDeXa
Нестрогая типизация - на мой взгляд всегда минус
Не всегда. Надо сказать, что вы, кажется, путаете “строгую” типизацию и “динамическую” типизацию. В питоне нет никакого тайп-кастинга, так что типизацию можно считать вполне строгой. Другое дело, что тип переменной может менятся в рантайме, но это ты уже сам себе злобный Буратино, если так делаешь. Постольку поскольку в питоне ничего не компилируется, есть только рантайм и в рантайме могут создаваться и изменяться типы, функции и даже модули. Это в свою очередь дает возможность применения интересных техник, вроде декораторов или метаклассов (посмотрите на магию моделей в Джанго), которые в C# и Java можно реализовать только построцессорами и правкой байт-кода (посмотрите на AspectJ) то есть требует серьезных затрат труда для реализации и недоступно простым программистам. В питоне сделать что-то похожее на магию CDI и EJB можно за пару часов непринужденного кодинга.

DezmontDeXa
Отсутствие(частичное) IntelliSens.
Дык это от IDE зависит или от среды выполнения, а не от языка. Вы просто не знаете стек инструментов, мало кто пишет на питоне под студией. Все хорошо и с автодополнением (попробуйте ipython, например) и с линтерами и с прочим.

DezmontDeXa
Никаких Enum.
Для литералов или вообще? Вообще они есть.

DezmontDeXa
Так же стоит знать еще 7 литералов для режима открытия файла
По правде сказать не сложное дело запомнить, что “w” это режим записи, а “r” чтения. Вы, надеюсь, не рвете волосы из носа видя вывод команды ls -la в линуксе?
Питон - язык с долгой историей. Он написан на си и использует сишные же библиотеки. Вот так это делается в Си http://all-ht.ru/inf/prog/c/func/fopen.html. Вы же не будете говорить, что на Си невозможно писать код?
Ну и надо сказать, что таких “архаичных” функций в питоне не много, в основном стандартная библиотека - это ООП, и вы переоцениваете масштаб проблемы.

DezmontDeXa
socket.socket()… Как я должен догадаться до такой конструкции?
А что вас удивляет в этой конструкции? Есть модуль (или пакет) socket, в этом модуле есть функция socket. Вы же знакомы с понятием namespace, что не так то?

DezmontDeXa
То в случае с Питоном, все является специфичным. Любая мелочь пишется как-то по своему. Общая логика кода отсутствует напрочь.
Давайте на примерах, а то какое-то бла-бла-бла. В питоне есть ровно один способ создания объекта - Class(*args, **kwargs).

DezmontDeXa
Но это все было бы не страшно, если бы корректно работал intelliSens и когда я пишу “socket” и ставлю точку после него, мне предлагались варианты:
1. socket.socket() - конструктор
2. …еще несколько вариантов
Вместо этого, intelliSens выдает просто все что в ней есть. Тупой набор слов, без малейшей подсказки, что именно мне следует писать далее.

Повторю еще раз, socket - это не класс, это модуль. Какой в жопу конструктор вы хотите найти в модуле?

DezmontDeXa
Я реально не понимаю, как вы кодите на этом.
Ну то есть вы не прочитав ни одного учебника по питону, не зная инструментария кроме любимой студии, не имея опыта помимо C# (на Си, я так понимаю вы никогда не программировали) не понимаете. Ну и не поймёте. Забейте и не парьтесь, вам это не надо, питон крайне сложен и писать на нем - каторга



Офлайн

#3 Май 17, 2019 07:13:07

DezmontDeXa
Зарегистрирован: 2019-05-17
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите понять плюсы Питона в сравнении с#(+ Visual Studio)

FishHook
Давайте на примерах, а то какое-то бла-бла-бла. В питоне есть ровно один способ создания объекта - Class(*args, **kwargs).
Вот api vk:
import vk
session = vk.Session()
vk_api = vk.API(session)

Опять таки после точки подсказок не было, как и после открытия скобки во второй строке. Т.е. понять как работать с модулем vk, можно только прочитав документацию к нему и посмотрев примеры, но никак не методом тыка. (Возможно ситуацию исправит ipython, качаю…)

FishHook
Ну то есть вы не прочитав ни одного учебника по питону, не зная инструментария кроме любимой студии, не имея опыта помимо C# (на Си, я так понимаю вы никогда не программировали) не понимаете.
Признаю, не читал ни одного учебника. Нет привычки читать что-то не пробуя это сразу. А в случае с питоном, все уверяют, что он изи. Решил с наскока взять какую-нибудь простую задачу типа udp-чата и попробовать реализовать, поглядывая в туторы и гугля. Но что-то как-то не изи…

Офлайн

#4 Май 17, 2019 07:20:16

DezmontDeXa
Зарегистрирован: 2019-05-17
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите понять плюсы Питона в сравнении с#(+ Visual Studio)

FishHook
Вы же не будете говорить, что на Си невозможно писать код?
Я и не говорил, что невозможно. Но далеко не все стоит писать на Си. А вот на питоне пишут и радуются этому как дети. А я сижу и не могу вкурить, чем он так прекрасен…

Офлайн

#5 Май 17, 2019 07:40:33

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 6883
Репутация: +  468  -
Профиль   Отправить e-mail  

Помогите понять плюсы Питона в сравнении с#(+ Visual Studio)

DezmontDeXa
Опять таки после точки подсказок не было
(УЖОСНАХ!!!!!1111)
DezmontDeXa
Нет привычки читать что-то
DezmontDeXa
Но что-то как-то не изи…
Вы не обижайтесь, но у меня складыфвается стойкое ощущение, что вы яркий представитель поколения мамкиных хакеров, изучающих как они считают программирование по ютубу и комиксам “С++ за 21 день для чайников”.



Офлайн

#6 Май 17, 2019 09:14:00

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 6285
Репутация: +  562  -
Профиль   Отправить e-mail  

Помогите понять плюсы Питона в сравнении с#(+ Visual Studio)

DezmontDeXa
а я после с# + Visual Studio не могу понять
Ну то есть ты после винды не можешь что-то понять в нормальном *NIX-мире. Ну, например, сокеты, которые ты пытаешься создать, пришли в винду из *NIX. А *NIX - это мир языка C. Соответственно, функция open() в питоне так выглядит, потому что удобна для C-программистов как родная. То же самое касается форматирования строк - форматирование взято из библиотечной функции printf() на языке C.

DezmontDeXa
чем он такой простой и удобный
Ну ты заметил, что можно вообще не имея исходника на питоне, выполнить программу на питоне. То есть можно открыть консоль питона, в ней написать программу на несколько страниц, выполнить её и всё сработает. Её не нужно держать в файле, её не нужно компилировать. Поэтому, когда ты хочешь что-то узнать или проверить, ты просто открываешь консоль, узнаёшь это или проверяешь и сразу закрываешь консоль. Вот ты хочешь создать сокет - просто открой консоль и создай в ней сокет. И он создастся и будет там принимать данные, которые можно читать, откроется порт, к которому можно подключаться. При этом тебе не нужен ни один файл для этого и уж тем более компиляция, настройки нового проекта, его сборки и тому подобное.

Вот я открываю консоль, выполняю пару строк и вижу все методы
  
>>> import socket
>>> help(socket)
>>>
Это если я забыл, какие там методы.
Если же я подробности хочу узнать, я просто иду сюда
https://docs.python.org/3/library/index.html
И там открываю
https://docs.python.org/3/library/socket.html
В которой есть примеры (рабочие, которые можно просто скопировать в консоль и проверить)
https://docs.python.org/3/library/socket.html#example

При этом объекты остаются живыми даже после выполнения работы и с ними можно продолжать работать в консоли.


DezmontDeXa
Нестрогая типизация - на мой взгляд всегда минус
Нестрогая типизация?
  
>>> 1 + 'a'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>> 
>>> 1 + object()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'object'
>>> 
>>> '5' ** 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'
>>>
При нестрогой типизации знаешь, что будет? Попробуй JavaScript
 In: 'a' + 1 + [2] + null
Out: "a12null"

DezmontDeXa
Кодить без IntelliSens, все равно что кодить в блокноте с макросом для компиляции.
Ты просто не в той среде сидишь. И не в той системе
Винда - система для бухгалтерш и там всё для бухгалтерш, она не заточена на умную работу. Поэтому ты просто не встретишь там программ, которым уже по многу лет. Такие программисты и сисадмины обычно не знают, что такое sed, что такое awk, что такое Vim и Emacs, что такое Git, что такое Docker, конвейеры между программами, нормальный язык оболочки, позволяющий сворачивать горы. И в консоли они работать не умеют и не знают даже, как там пути в ней переключать и файлы просматривать. В винде очень слабая консоль, поэтому все и думают, что консоль - это фигня малофункциональная. А на самом деле это в винде она плохая и неразвитая.

Поэтому и питон тоже работает по-разному в винде и в лине. В винде им пользоваться невозможно, там куча ошибок, он неудобный. А в лине у тебя всё нормально и нет никаких ошибок. В винде ты там захочешь файл открыть в питоне, будешь должен выравнивать путь. чтобы винда случайно не истолковала кириллицу каким-то там своим образом, а в лине ты можешь хоть на китайском пути в питоне открывать, они спокойно берутся и у тебя проблем никаких нет.

Поэтому ты просто не понимаешь разницы.

DezmontDeXa
Если в c# мне достаточно выучить 2-3 варианта создания класса:
А нафиг он вообще нужен, если он в винде только работает? На других языках я могу и под винду писать, но я не обязан писать под винду. А на C# ты будешь должен писать под винду всё время и, соответственно, для него не будет ни сред, ни инструментов, ни нормальной интеграции с новыми технологиями. Docker когда появился, все на него сели сразу, а в винде его не было вообще. Сейчас любой хостинг открываешь, там сайты все существуют в виде изолированных Docker-контейнеров.

DezmontDeXa
Visual Studio
Забудь про эту хрень. Ну ладно, не забывай, но используй её только для C#, потому что она только для него и делалась, чтобы пользователей в винде удерживать.



Отредактировано py.user.next (Май 17, 2019 09:16:03)

Офлайн

#7 Май 17, 2019 09:22:49

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 6883
Репутация: +  468  -
Профиль   Отправить e-mail  

Помогите понять плюсы Питона в сравнении с#(+ Visual Studio)

py.user.next
А на C# ты будешь должен писать под винду всё время и
Справедливости ради нужно с казать, что у тебя мягко говоря устаревшие сведенья.



Офлайн

#8 Май 17, 2019 09:57:53

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 3304
Репутация: +  177  -
Профиль   Отправить e-mail  

Помогите понять плюсы Питона в сравнении с#(+ Visual Studio)

DezmontDeXa
И вот тут я видимо что-то не понимаю
Ну тут просто, зная один шаблон разработки вы не поняли как ведется разработка в питоне.

Самое базовое отличие python vs С# в том что питон интерпретируемый (как и многие другие языки типа perl, wolfram mathematica bash,…)

В шарпе разработка это цикл написание кода, компиляция, тестирование, отладка, эксплуатация. А в питоне написание кода можно вести в запущенном процессе, совмещая тестирование и отладку. При этом вам доступны не только все подсказки intelli но и состояние программы, вы можете вызывать любые функции смотреть состояние любых переменных. При этом вы не ограничены тем что вам заготовили разработчики студии, а можете определить свои способы просмотра объектов, начиная со строкового представления включая накрученное gui.

Это позволяет тестировать после написания нескольких строк кода. Поэтому разобраться что происходит проще.

Второе что следует иметь ввиду, очень многие используют питон не самостоятельно а в связке с C,C++,R, javascript…. Т.е. C#, java используют концепцию один язык для всего. Питон программисты скорее пользуются парадигмой для каждой задачи подходящий язык. Те что использовать зависит от того сколько языков вам в голову помещается :). Есть у этого следствие. Если вы кодите на java то вам не нужен шарп, если на шарпе, то странно пользоваться java вы все задачи можете решить без привлечения стороннего языка. также и стек c+python не нуждается в c#(.net) как и c# не нуждается в python. Т.е. технологии ортогональны и надо выбирать чем вы пользуетесь.

Вы не сможете представить себе как все это используется пока не будете знать и пользоваться например C++. Те если для какой-то задачи я предпочитаю статическую типизацию я пишу на C++ если динамическую то пишу на питоне. И все это живет в едином программном продукте.

Не читать документацию это детский сад. Ну подсказал вам инелли десять функций как вы узнаете что вам надо?

Логичность конструкций это дело понимания (по сути привычки). Я например не понимаю как вы можете писать на этом безумном шарпе :).
 Tsome_type a = new Tsome_type(a,b,4);
Console.WriteLine(a);
Зачем дублировать типы слева и справа? Зачем это ключевое слово new? Это в c++ вы можете сделать стековую переменную или в куче. Но в шарпе этого нет!!! Зачем завершающая точка с запятой??
Console.WriteLine - это ужас после a Enter. любой другой язык гораздо лаконичнее при выводе на консоль или в файл.

А не могу выдавит из себя более десятка строк на шарпе после C++. Воспринимаю его как кастрата после обрезания C++. Нет нормальных шаблонов, нет доступа к оборудованию, нет множественного наследования. Везде классы городить надо. А если они мне не нужны?



Офлайн

#9 Май 17, 2019 11:00:10

Egorro13
Зарегистрирован: 2019-04-16
Сообщения: 66
Репутация: +  5  -
Профиль   Отправить e-mail  

Помогите понять плюсы Питона в сравнении с#(+ Visual Studio)

doza_and
Console.WriteLine - это ужас после a Enter. любой другой язык гораздо лаконичнее при выводе на консоль или в файл.
А как же System.out.println(а)? ))

py.user.next
Нестрогая типизация?
Могу за себя сказать, что после примерно полутора лет изучения Явы типизация в Питоне местами действительно в голове не укладывается, например - такое:
 class A():
    pass
a1 = A()
a2 = A()
a1.a = 1000
a2.b = 500
print(a1.a, a2.b, a1.__class__ == a2.__class__)
В той же Яве в этом плане все же более четко регламентируется, какие поля и методы у объекта имеются, каких - нет и быть не может, если только не создавать класс-наследник…
Не в упрек Питону, но в плане подтверждения того, какие сложности понимания он может вызывать при изучении в принципе, особенно - по сравнению с другими языками

Офлайн

#10 Май 17, 2019 11:02:41

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 6883
Репутация: +  468  -
Профиль   Отправить e-mail  

Помогите понять плюсы Питона в сравнении с#(+ Visual Studio)

Egorro13
какие сложности понимания он может вызывать при изучении в принципе,
Это если бы топикстартер попытался его изучить, но у него сложности возникают совсем по другой причине.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version