Всем привет, я Full-stack программист с опытом командной разработки около полугода, а также опытом в создании небольших и средних проектов в районе 3-х лет. Тут я хочу внести ясность для новичков в IT, которые мечутся из стороны в сторону, пытаясь и язык повостребованнее найти, и чтобы попроще учиться, ну и на галеру протиснуться.

Простота обманчива

Можно подумать, что Python очень простой язык, скорость написания кода х5, он вроде как нужен, вот, смотри, какие-то графики, я прав, а вот ты ошибаешься и бла-бла-бла, но эта простота и "скорость написания кода" обманчива. Пока что вы, вероятно, не понимаете о чем я, но пока статья будет продолжаться все должно быть понятнее, что я тут наговорил.
Сравним, для начала идентичный код на C#, Python и C++:
Python:

Сравним, для начала, идентичный код на C#, Python и Golang

Стандартный C#

namespace HelloWorld; // Распологаем неймспейс, тоесть, говорим исполнителю о том, какой файл "где находится" в иерархии

class Program // Создаем класс, так как без него приложение нельзя запустить*
{
    static void Main(string[] args) // Создаем программу, которая будет  выполняться исполниетелем, без нее тоже нельзя!"
    {
        Console.WriteLine("Hello, World!"); // Выводим в консоль Hello, World и кайфуем от жизни
    }
}

Как мы видим в коде выше, очень много "расплывчатости", но в больших проектах именно благодаря такой иерархии, или как это называют в IT-кругах ООПшного стиля программисту легче расположить иерархию классов и методов. Например, мы можем разместить все файлы в одной папке, но доступ получать к ним по-разному. Пример:

Иерархия:

folder1:
- Program.cs
- Utilities.cs
- Types.cs

Но мы можем указать в namespace вместо банального %NAME%.Utilities удобные %NAME%.Utilities.Web, где внутри этого namespace мы можем визуально продемонстрировать, что внутри будет часть именно с web-разработкой. В одном файле можно держать несколько namespace, но не рекомендуется этого делать!

C# с высокоуровневым методом написания

Console.WriteLine("Hello, World!"); // Просто выводим Hello, World!

Тут же для программиста открывается только такой кусок кода. Вся ненужная мишура, как сверху пропала. Компилятор ее добавит автоматически, да, это не совсем удобно, но все же юзабельно. Для новичка - самое то!

Python

print("Hello, World!") 
# Здесь как и в C# с высокоуровневым методом просто одна строка с функцией вывода. 
# Ничего нового...

Тут простое и банальное print, вы все знаете что это такое, наверняка.

Golang

А вот и не очень популярный, но достаточно легкий и быстрый, даже для корпоративной разработки. Пример вывода:

package main // Показываем компилятору что это за пакет, как namespace в c#
import "fmt"; // Импортируем пакет для удобного вывода в консоль

func main() { // Функция, тоже как в C#
	fmt.Println("Hello, World!"); // Собственно, вывод в консоль
}

Взгляните на код, написанный на языке Golang от Google, это среднее, между Python, C++ и C#, нет такой мысли? А ведь он по быстродействию как C++, а по скорости разработки примерно на уровне с python, несмотря на то, что имеет СТАТИЧЕСКУЮ типизацию и ООПшный стиль. Это мы рассмотрим в ближайшем будущем, а пока подведем итоги сравнения.

Сравнение

C#

Python

Go

Много слов, но удобно расписывать иерархию

Пару слов, какая банальность...

Слов средне, но можно относительно удобно расписывать иерархию

Вы, вероятно, спросите: Что-то пока что ничего не понятно, в Python используется меньше слов для создания базового проекта с выводом текста в консоль, что тебе не нравится, yawaflua?
А я отвечу: Смотрите за руками!

Сравнение языков в удобстве написания кода!

Здесь мы будем делать относительно базовую программу, которая перебирает все числа от 99 до 999, т.е. трехзначные, а потом проверяет, делятся ли они без остатка на 12 и 11. Программа на Golang выдала 1 МИЛЛИСЕКУНДУ, что равняется 1\1000 секунде, пока python

Программа на Golang
Программа на Golang
та же программа на Python
та же программа на Python

Как мы видим из сравнения, Golang очень схож по написанию программы. Он не требует ставить точку с запятой, имеет статическую типизацию с облегченной версией создания переменной через :=, где тип выставляется автоматически. Также Golang обогнал Python 3.12 на 1 миллисекунду. Вы скажете: Ну и что, 1 миллисекунда это мало, мы моргаем дольше, но это легкий пример, где числа просто умножаются и сравниваются. Если же мы берем более нагруженные примеры или более старые версии Python, то мы получаем большие проблемы с оптимизацией кода. А отсутствие статической типизации делает ваш код кашей. Например, вы хотите назначить переменной a число 7. В golang вы напишите так:
a := 7 // > 7
В Python вы очевиднее всего напишете так:
a = 7 # > 7

Да, это правильно, но теперь вы ошибились в коде и почему-то в переменную а передаете не число(изначальное), а строку:

Go:

a := "Hello, World" // Error: TypeError, нельзя в переменную числа назначать строку

Python:

a = "Hello, World" // > Hello, World, ему все равно на такие манипуляции
Это может очень сильно затруднить разработку и отладку кода!

Подведение итогов

Я уже написал на довольно много информации, поэтому давайте подведем итоги:

  • Python несмотря на условную скорость написания кода не настолько удобен и быстр, как, например, Golang

  • Python довольно медленный язык(даже новые версии). Тут я об этом мало времени уделил, но Python в продакшене слишком много использует ресурсов, по сравнению с C#/Go/C++ и остальными, нормальными, языками программирования.

  • Если выбирать между Python и Go как первым языком для начинающего программиста, то я очевидно предпочту посоветовать Golang!

Если хотите, могу больше затронуть вес и скорость проектов в продакшене, пишите комментарии, оценивайте, буду стараться ответить и поправить свои ошибки. Всем спасибо за прочтение данной статьи.

Комментарии (138)


  1. D1abloRUS
    16.04.2024 16:38
    +57

    У новичков обычно не с языком проблема, а с базой, как и в любой другой сфере... язык это просто лопата инструмент


    1. disazoz
      16.04.2024 16:38

      Ага, например, с интерпретацией чисел, питон выполнился за 2е-6 мс судя по скриншоту, то есть 0.000002 мс, а го за 1 мс.


  1. Jury_78
    16.04.2024 16:38
    +38

    Если выбирать между Python и Go как первым языком для начинающего программиста, то я очевидно предпочту посоветовать Golang!

    На рекламу похоже. Если про новичка, то тогда Паскаль. :) После уже без разницы какой.


    1. smt_one
      16.04.2024 16:38
      +5

      Соглашусь про рекламу, не соглашусь про Паскаль.


      1. maisvendoo
        16.04.2024 16:38
        +1

        не соглашусь про Паскаль.

        Почему?


        1. Sipaha
          16.04.2024 16:38
          +11

          Закопайте уже дедушку пожалуйста. Он давно умер и не дает для новичков никакого особенного опыта, который нельзя получить с другими современными языками.


          1. Ken-Sei
            16.04.2024 16:38
            +4

            Как я понял, вы за Скратч для новичков?


            1. Sipaha
              16.04.2024 16:38
              +1

              Скратч для детей вроде неплохо подходит, но близко с ним не знакомился. Мне кажется для обучения новичков лучше всего подходит современный язык с наименьшим количеством магии (сахара). Java тут подходит идеально и в будущем будет опция перейти на продвинутый уровень (Kotlin).


          1. HemulGM
            16.04.2024 16:38
            +6

            Обучающий Паскаль, это PascalABC.Net, который написан на C# и имеет в своём арсенале почти все фишки и языка C# (включая LINQ и лямбды). Этот язык и среда постоянно обновляются.

            Не говоря о том, что есть современный Delphi (наследник Паскаля).


            1. lightman
              16.04.2024 16:38
              +9

              Я сам изучал Pascal и Delphi и считаю их отличными языками для обучения программированию... если вы живёте в 90-ых, начале нулевых.

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

              Да-да, я знаю что изучение синтаксиса занимает малую долю в освоении языка и это делается относительно легко и быстро, но всё же. Говорить ученику "сейчас мы будем изучать что-то полезное, но временное" - отличный способ сбить ему мотивацию. "А почему бы сразу не учить что-то постоянное?" спросит он и будет прав. Мир поменялся, стал более глобализованным, и в IT среде тоже. Появились всякие гитхабы. Обучать человека сразу актуальному языку - значит дать ему возможность изучать огромный массив чужого кода, предлагать свои МРы, вместо того чтобы окукливать его в академическом мирке.

              Поэтому можно учить алгоритмам и структурам данных сразу на C#. Это отличный язык, актуальный, с кучей библиотек и довольно простой. Си-подобный синтаксис позволит легко перейти на целую пачку других востребованных языков. Также имеет быстрое время компиляции, что тоже полезно при освоении и проведении множества экспериментов. Или, как вариант, Java, чтобы ученик мог написать приложение под свой телефон.

              Очевидный минус C#, как и подавляющего большинства современных языков, это то, что они не учат низкоуровневой работе с памятью. Но опять же, мир поменялся и сейчас процесс разработки на 95% вакансий программистов не требует ручного управления памятью. Поэтому в обязательном порядке грузить ученика этим не надо. И только если появится такой интерес - можно пощупать какие-нибудь Rust и C.

              Pascal, опять же, и тут не нужен.


              1. HemulGM
                16.04.2024 16:38
                +2

                Delphi актуальный язык с кучей библиотек и довольно простой. А Си-подобные языки это лишь наличие там операторных скобок в виде фигурных скобок? Серьезно?

                Также имеет быстрое время компиляции, что тоже полезно при освоении и проведении множества экспериментов. Или, как вариант, чтобы ученик мог написать приложение под свой телефон. Достаточно принести с собой USB провод, подключить к компу и через adb разрешить к нему доступ. А дальше прямо из среды пиши и собирай программы на телефон.


                1. CatAssa
                  16.04.2024 16:38
                  +2

                  Я сам дельфист, он меня кормил и поил долгие годы, и продолжает кормить на пенсии (масса старого кода). Но - вот такая беда: есть масса отличных открытых библиотек на С/С++ аналогов которых нет на Delphi. Пишу, стало быть, "обертки" к сишным dll. Ручками, с тестами. А потом библиотека обновляется, и я должен делать все то же самое, скрупулёзно перепроверяя сигнатуры всех методов. А если библиотека для использования предполагает наследование - тут вообще труба, Дельфи идёт лесом. Отсутсвие нормальных шаблонов и лямбд - после того, как поработал с с++, очень хочется тоже. Приходится ручками вызывать деструкиоры после использования: весь дельфийский код прошит try-finally. Да можно классы реализовывать от интерфейсов, дабы избежать ручного освобождения, но практически все библиотеки реализованы без интерфейсов.

                  И т.д. и т.п.

                  Да, в Делфи есть уникальные библиотеки (отчёты, визуальные компоненты), но гораздо большего в них нет.

                  Да, личный состав на новые проекты на Дельфях уже очень трудно найти.


                  1. HemulGM
                    16.04.2024 16:38
                    +1

                    У современного Делфи проблем с отсутствием каких-то библиотек почти нет. Более того, сишные либы использует не только Делфи, если реализации нет, Питоновские библиотеки - это в 70% обертки над сишными, и проблем там особых в этом не видят.

                    В Делфи есть обобщенные типы и анонимные функции, которые не менее удобны, чем шаблоны и лямбды.

                    И вызывать деструкторы - это вообще не проблем и реализовать можно что угодно и как угодно. Например, я реализовал функционал метода defer из языка Zig в Delphi (в 10 строк) и теперь мне try/finally (или даже except) вообще не нужен.

                    Я и многие из сообщества Делфистов занимаются разработкой на Делфи современных программ, с решением современных проблем и каких-то особых затруднений, которые бы не решались этим инструментом не видят.


              1. Ken-Sei
                16.04.2024 16:38

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

                99% изучавших программирование в школе - никогда не станут программистами...


        1. r2d
          16.04.2024 16:38
          +4

          Сам когда учился нас учили на паскале потом делфи, после того как устроился на работу очень жалел что обучали именно на паскале так как несколько лет опыта на языке и изученных библиотек и тонкостей ВСЁ ЭТО НА СВАЛКУ работодателям он нафиг не нужен был, 1,5 вакансии. Понятно что учили не языку а алгоритмам и в общем принципам, но я 2,2-3 года изучал язык, его конструкции и мне бы пригодилось это все, но нет. Всем нужен был С++,Java,PHP,Ruby и в итоге программировать мы умеем, алгоритмы и структуры данных знаем но идем покупать книжку по PHP и изучать новый язык


          1. Araki_Satoshi
            16.04.2024 16:38
            +5

            Всем нужен был С++,Java,PHP,Ruby и в итоге программировать мы умеем, алгоритмы и структуры данных знаем но идем покупать книжку по PHP и изучать новый язык

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


            1. polearnik
              16.04.2024 16:38

              а можно было сразу учить нормальный язык и сэкономить эту пару месяцев.

              ВЫ когда английский изучали сначала латынь пару лет учили ?


      1. RichardMerlock
        16.04.2024 16:38
        +7

        У меня в школе был турбопаскаль и там был весь спектр применений от низкого до высокого уровня, от ассемблера до ООП. На нем и олимпиады решали и графические демо пилили с музыкой и даже игры простенькие. После паскаля сесть за С было вообще легко, только синтаксис подсматривай в мануале.


        1. vomidug
          16.04.2024 16:38
          +4

          Значит, все должны пройти через те же сложности, что и вы?


          1. not-allowed-here
            16.04.2024 16:38
            +6

            для программиста нужны и важны только три вещи:

            1. Упорство - ибо только со временем мы поймем что все мы учили не тот язык
            2. Упорство - ибо только со временем мы поймем что важнее всего НАД-штуки которые определяют то как и что ты пишешь(методы, алгоритмы, etc.)
            3. Упорство - ибо только со временем ты начинаешь понимать что программирование это непрерывное Обучение...


          1. RichardMerlock
            16.04.2024 16:38
            +2

            Сложности? Да вы шутите?! Это было увлекательно. Мы начинали с 3х аудиторий, преподы по информатике были из военного училища, на территории которого находилась школа, строгие и профи. Классы часто были открыты вне учебного графика для желающих и свободных мест там не особо наблюдалось. Интернетов тогда небыло, игры считались контрабандой. Но можно написать свою ;)

            Хотя, нет, было какое-то время отведено для игр совсем после занятий, на доп классах. Винчестеров в компах небыло, загрузка по сети, сеть коаксиал.


          1. alex_kag
            16.04.2024 16:38

            да какие там сложности-то?


    1. yawaflua Автор
      16.04.2024 16:38

      Очень жаль что мне не заплатили.

      Про паскаль согласен, но Delphi сейчас не пользуется популярностью у работодателей, в отличии от Go, .NET и остальных


    1. Turbo_Pascal_55
      16.04.2024 16:38
      +1

      Совершенно согласен про Паскаль :)


    1. SwetlanaF
      16.04.2024 16:38
      +1

      Я так и сделала. Вначале год учила близкого родственника Паскалю, с большим удовольствием. Паскаль ему еще пригодится, алгоритмы в академическом стиле записывают на паскалеподобном псевдокоде. Собственно, я и сама их так записываю. К счастью, изучение Паскаля соответствовало школьной программе, т.к. информатичка не знала питон. Изучили все основные алгоритмические конструкции и массивы, сдали ОГЭ. Ну а сейчас мы (внук, информатичка и я) учим питон. Нужно сказать, что я иду с большим отрывом)) сейчас учу на степике ООП Артёма Егорова и Питон для профессионалов Поколения Пайтон. Что касается впечатлений от питона. Вначале меня несколько шокировала манера передачи аргументов в функцию, но сейчас уже привыкла. Радует большое количество библиотек: только собралась делать мемоизацию - а мне уже готовый декоратор дают. Хороший язык питон, и завершает триаду известных мне языков: пролог, паскаль, питон - все на "п"))


  1. randomsimplenumber
    16.04.2024 16:38
    +9

    Количество букв в коде неважно. Половина этих ужасных ключевых слов генерирует полуавтоматически IDE. Быстродействие программы, если она 99% времени все равно ждет пользовательской команды - тоже


    1. yawaflua Автор
      16.04.2024 16:38

      Да, но большинство апеллирует тем, что у Python быстрее скорость разработки из-за как раз таки малого количества слов

      Про быстродействие не согласен, пользователю будет лучше ждать в два, а то и в три раза меньше загрузки ответа, например, от сервера


      1. stvoid
        16.04.2024 16:38
        +24

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

        Я сам начинал с python, сейчас полностью перешел на golang и JS. И советовать эти языки как первые я бы стал только в том случае, если человек четко ставит себе цель. Например вкатиться во фронтэнд, бэкэнд, а может человек игры хочет делать, тогда тем более с C# вероятно начинать и стоит.

        Но по моему опыту работы в разных местах (удивительно, но кодят не только в IT компаниях), чаще всего люди учатся писать что-то супер маленькое и простое, что помогает им в работе - спарсить файлики клиентов/заказчиков, собрать из БД в эксельку какой-то отчет и отправить куда-то и т.п. вещи.
        Так вот в случае python людям сильно проще воспринимать его синтаксис. У меня на много больше сил и времени уходило, чтобы объяснить людям что такое стрелочные функции, асинхронность, как вообще жить со статической типизаций и о том как душно расписывать типы (вы кстати забыли об этом упомянуть, приведя в пример крайне нелепый print).

        И да, часто новичкам не нужно вот это вот ХАЙЛОАД, СЕРВЕРЛЕСС, да даже линукса у 99% нет и их пугает это слово.
        Вообще это правда бред сравнивать какой язык для новичка лучше.
        Некоторые вообще C++ первый раз пощупали в универе, зато это им дало в последствии такую жирную базу, которую сложно переоценить.


      1. iosuslov
        16.04.2024 16:38
        +6

        Дядя Гвидо никогда не продвигал питон как язык быстрой разработки. Всегда этот язык был про удобство чтения и восприятия другими программистами.


      1. Xius
        16.04.2024 16:38
        +9

        у Python быстрее скорость разработки из-за

        большого комьюнити, сотен, если не тысяч книг и миллионов примеров в сети. И этим он хорош и для новичка. Особенно для новичка без профильного образования, который изучает язык самостоятельно.


      1. upcFrost
        16.04.2024 16:38

        Про быстродействие не согласен, пользователю будет лучше ждать в два, а то и в три раза меньше загрузки ответа, например, от сервера

        Вот это крайне спорная тема. Для вебни есть тысячи других вещей которые могут тормознуть запрос, самые простые - отсутствие cdn и большое расстояние, ну и просто хреновое соединение. Плюс всякие облачные базы тоже докинут тормозов уже на бэке. Вполне обычная ситуация когда на крестах нужно будет 10мс машинного времени, на пистоне 100мс, а пинг от юзера до бэка 500мс


    1. whoisking
      16.04.2024 16:38

      Количество букв в коде неважно. Половина этих ужасных ключевых слов генерирует полуавтоматически IDE.

      А читать потом тоже IDE будет?


      1. randomsimplenumber
        16.04.2024 16:38

        А зачем читать генеренный код? Читайте написанный человеком. Лучше не в блокноте а в IDE.


    1. Didimus
      16.04.2024 16:38

      Обычно есть ненагруженный фронт (js, например) и вечно перегруженный бэк (go, java, python и тп)


      1. Alexey2005
        16.04.2024 16:38
        +2

        Фронт тоже вечно перегруженный, просто чужие ресурсы программистам обычно не так жалко.


    1. Spiritschaser
      16.04.2024 16:38

      Количество букв в коде неважно... енерирует полуавтоматически IDE.

      "Чукча не читатель, чукча писатель". Питон очень легко читать, иначе бы он не вытеснил бы perl.


  1. pewpew
    16.04.2024 16:38
    +7

    Вы ещё Lua не видели. Нестрогая типизация не всегда плохо.


  1. StreamThread
    16.04.2024 16:38
    +11

    Змеиный язык тоже позволяет организовывать иерархию: как через классы, так и с помощью папок с отдельными файлами-модулями в них. Существует и неявный импорт, и псевдонимы позволяющие укорачивать очереди вызовов. Есть и необязательная типизация, которая не выдает ошибок но позволяет лучше ориентироваться в коде. Да, использование данных нюансов требует углубленного изучения. Но это наоборот подчеркивает, что именно новичкам разбираться в этом необязательно.

    Единственная объективная претензия к Python это скорость выполнения. Но здесь достаточно просто не использовать его в критичных ко времени выполнения областях, и все будет замечательно.


    1. NN1
      16.04.2024 16:38

      3.13 обещают JIT и ускорение в 100 раз.


      1. RH215
        16.04.2024 16:38
        +1

        100 раз - это очень отдалённая цель. В 3.13 пока будет только эксперементальный JIT, который практически ничего не ускоряет.


  1. savostin
    16.04.2024 16:38

    Так вроде ж в Go подобие ООП.


  1. n0ne
    16.04.2024 16:38
    +11

    Как раз питон и хорош для первого языка. Мне самому нравится писать и на питоне, и на го, но... новичок, когда дойдет до указателей, например, без посторонней помощи просто утонет....это отобьёт желание программировать на долгое время


    1. yawaflua Автор
      16.04.2024 16:38

      Ну конечно он утонет, если учился писать код на Python. Новичок будет дополнительно шокирован, когда узнает, что у int есть ограничение максимального значения, что присутствует uint и обычный , что есть long и остальные. А указатели, да, прикол не удобный, но в C# сделали отличный оператор out для таких действий


      1. vkni
        16.04.2024 16:38
        +6

        Новичок будет дополнительно шокирован, когда узнает, что у int есть
        ограничение максимального значения, что присутствует uint и обычный ,
        что есть long и остальные.

        Не, в Питоне драконы живут не совсем там. Они живут в семантике изменяемых данных — она крайне неочевидна. В результате и очень опытные энтузиасты Питона не могут вручную уверенно проинтерпретировать программу — всё время опасаются подвоха.

        Классические:

        def f( x = []):
          x.append(1)
          return x
        
        l1 = [1, 2, 3]
        l2 = l1 # Тут надо рассуждать в терминах указателей!
        l1.append(4)
        print(l2)
        l1 += [5]
        print(l2)

        Ну и недавний шедевр (спасибо тут кому-то) — что выдадут две программы

        a = 1
        b = 2
        
        def f():
          print(b)
          a = b
        
        f()

        и

        a = 1
        b = 2
        
        def f():
          print(b)
          b = a
        
        f()

        Хочу отметить, что если я все эти программы переведу на OCaml, практически кто угодно без труда их проинтерпретирует.


        1. vkni
          16.04.2024 16:38
          +4

          Тем не менее, народ пишет на Питоне много чего, причём достаточно развесистого. Отсюда мораль:

          • Код на Питоне обязательно надо запускать после написания. Если код на Питоне ни разу не запускался, скорее всего, правильно он работать не будет.

          • Желательно писать программы, которые при любом запуске полностью проходят по всем ветвям исполнения. Классический пример — ML.

          • Ну и для остальных приходится писать чудовищное кол-во тестов.


        1. seonn
          16.04.2024 16:38
          +1

          >Ну и недавний шедевр
          Так это не про изменяемость/неизменяемость, а про область видимости и локальные переменные. Вроде бы для большинства ЯП актуальная тема


          1. Andrey_Solomatin
            16.04.2024 16:38

            Если покопаться то в любом языка можно найти непривычные вещи.

            Let's talk about javascript https://www.destroyallsoftware.com/talks/wat


      1. raspberry-porridge
        16.04.2024 16:38
        +4

        out в C# это не про указатели.


        1. Phoenix-616
          16.04.2024 16:38

          Их несколько: https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/out
          В случае параметров, как раз про указатели


          1. mayorovp
            16.04.2024 16:38
            +1

            В случае параметров оно про передачу по ссылке.

            Проблем понимания указателей много, и передача по ссылке в их число не входит, она как раз понятна.


          1. raspberry-porridge
            16.04.2024 16:38

            Можно бесконечно спорить о терминах, но в C# указатели (и то только на значимые типы) работают только в области unsafe. Если так уж рассуждать, то любая работа с классами это работа с указателями, потому что передаётся ссылка на область в куче.


  1. NeoCode
    16.04.2024 16:38
    +7

    a = "Hello, World" // > Hello, World, ему все равно на такие манипуляции

    Это еще что. Вот например, если в Python написать

    variable = 42

    а затем

    varibale = "Hello world"

    то язык тоже все проглотит, но переменная variable останется равной 42! Потому что во второй строчке опечатка:) В Go оператор := предназначен специально для объявления переменной (введения нового имени), и такой ситуации просто не может возникнуть. В Python, как ни странно, оператор := тоже ввели, но у него другая семантика, причем на мой взгляд совершенно невразумительная. В этом месте питонисты наверняка скажут - ну и что, каждый язык уникален, художники авторы языка так видят и т.п. Но я не соглашусь: все-же во всем должен быть смысл. В Python := используется для создания и изменения переменных внутри выражений. Т.е. с одной стороны хорошо - в некоторых случаях код становится компактнее, удается избежать дублирования вычислений, но с другой, а что мешает использовать := не внутри, а просто для создания переменной? Ведь очевидно что это просто частный случай. А нельзя! Точно так же нельзя использовать обычное присваивание внутри выражений - оно может быть только на "верхнем уровне".

    Таким образом, я считаю что применение = и для объявления новых имен, и для присваивания - ошибка дизайна языка, но исправлять ее поздно в силу огромного количества написанного кода. И какой смысл в отличии контекста "внутри выражений" от контекста "верхнего уровня" тоже непонятно.


    1. yawaflua Автор
      16.04.2024 16:38

      Спасибо, поправил.

      По поводу := не совсем понятно зачем это надо, читабельность кода может из-за этого упасть, как по мне, если брать Python, поэтому я данную конструкцию при разработке особо не использовал


    1. Andrey_Solomatin
      16.04.2024 16:38

      В Go оператор := предназначен специально для объявления переменной (введения нового имени)


      И создания большого количества шума при рефакторинге. Когда добавляешь удаляешь вызов функции присваивающей значение в переменную с именем err .

      Таким образом, я считаю что применение = и для объявления новых имен, и для присваивания - ошибка дизайна языка,

      Я нормально живу с этим. Я использую инструменты для анализа кода и ошибка из вашего примера далёко не пройдёт.


  1. Batalmv
    16.04.2024 16:38
    +13

    Сравнивать языки на примере "Hello world" это эпично

    Скорость - это довольно таки условно, так как не всегда, но часто всех по фиг. А где не по фиг, есть другие показатели, такие как скорость разработки, доступность программистов и т.д.

    Что касается "новичков" - еще более по фиг. У них настолько мало знаний, что им еще учиться и учиться. На этом этапе почти нет лишнего, что стоит положить в голову.


  1. Daddy_Cool
    16.04.2024 16:38
    +4

    Загуглил про Golang.
    "Нет объектов, классов и наследования, которые усложняют код и его изменения".

    Чой-то он очень на Си похож, который без плюс-плюшек.


    1. lorc
      16.04.2024 16:38
      +5

      Самый простой язык - это ассемблер. Там не то что объектов, классов и наследования нет, там даже строк (ну кроме древнего x86), структур и массивов нет.


    1. BioHazzardt
      16.04.2024 16:38
      +2

      так гибрид си с паскалем же, если уж совсем упрощать


  1. GLeBaTi
    16.04.2024 16:38
    +19

    Серьёзно? Сравнение языков по хелло ворлд?


  1. AISECO
    16.04.2024 16:38
    +4

    Я думал конце стати будет реклама Ит школы :), Питан медленный и есть проблемы оптимизаций но в начале изучение будущему программисту нас***ть на эти проблемы новичок пишет код чтобы понимать логику программирование, он не будет писать энтерпрайз программы


    1. Dair_Targ
      16.04.2024 16:38
      +7

      И в энтерпрайзе тоже на скорость работы именно языка почти всегда плевать потому, что почти все задачи io bound, и решает скорость разработки и наличие программистов.


      1. Andrey_Solomatin
        16.04.2024 16:38

        Go в этом плане как раз очень дружелюбен к io bound своей поддержкой асинхронности.


  1. andreymal
    16.04.2024 16:38
    +6

    А отсутствие статической типизации делает ваш код кашей.

    Сразу видно новичка, который не в курсе про аннотации типов

    Python довольно медленный язык

    В тех областях, где питон обычно используется, это не имеет почти никакого значения


  1. Pshir
    16.04.2024 16:38
    +16

    Весь текст, который написан здесь на русском языке, представляет собой абсолютно нечитаемую кашу. А теперь вопрос. Кто в этом виноват: русский язык, или автор текста?


  1. mvv-rus
    16.04.2024 16:38
    +3

    К вашему сведению, минмальная программа на C# выглядит примерно так же, как и на Python:

    Console.WriteLine("Hello, World!");

    Возможность писать программу таким образом, без лишней обвязки, называется "top-level statements", появилась она недавно, в .NET 6.0, но она - есть. Более того, она задействована в стандартных шаблонах проектов

    Посему за статью, извините - минус.


    1. mvv-rus
      16.04.2024 16:38

      Рад, что в статью исправление теперь внесено. Но что сделано, то сделано, и минус отменить нельзя.


      1. dream_designer
        16.04.2024 16:38
        +2

        То есть в остальном статья замечательная, да? :D


        1. mvv-rus
          16.04.2024 16:38

          Вряд ли, ничего замечательного в ней не заметил. Но поощрение в виде снятия ранее наложенного взыскания за исправление фактической ошибки автор заслужил IMHO.

          А по теме статьи я высказываться не хочу. Ибо обучением программированию я не занимаюсь, а своего релевантного опыта у меня уже давно нет.
          Изучение языков программирования я начал с Алгол-60, продолжил Фортраном IV, PL/1 и немного Бейсиком (тем, старым, с обязательними номерами строк). Си изучил уже заметно потом - и вообще по справочнику (80 страничек формата A6), где-то за неделю. И так далее. Вся эта история теперь вряд ли кому-нибудь интересна - разве что, как @saipr, мемуары начать писать...


  1. BioHazzardt
    16.04.2024 16:38
    +1

    слабо

    считаю, что срач "какой ЯП выбрать первым" надо закрыть

    и так известно, что это паскаль

    сарказм мод офф


  1. morheus9
    16.04.2024 16:38
    +3

    Могу добавить очевидную вещь.

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


  1. TheCrashDown
    16.04.2024 16:38
    +1

    Я уже написал на довольно много информации, поэтому давайте подведем итоги
    Много информации - это сравнение скорости на одном тесте, с упоминанием в тексте как было плохо в более старых версиях, и сравнение удобства синтаксиса на основе Hello World? С единственным аргументом в пользу статической типизации, что в динамической можно ошибиться?

    Что ж, звучит как действительно весомая аргументационная база для новичка, чтобы определиться с выбором языка по этой статье!

    PS. Я не спорю, что python медленнее чем другие упомянутые языки, и динамическая типизация это не всегда хорошо, но кажется что для определения "какой язык лучше" подобных аргументов (изучаемых примерно в первый час знакомства с языком) несколько маловато..


  1. stalkerxxl
    16.04.2024 16:38

    Какая тема стоит в VSCode? Скажите точное название, pls...


  1. holms_2000
    16.04.2024 16:38
    +3

    Какой то грустный рассказ. Каждый язык создаётся под какие то задачи. А тут реклама go. И извините, имея три года разработки, так авторитетно рассуждать какой язык круче, как то не солидно.


  1. nv13
    16.04.2024 16:38

    Раньше были радиолюбители, первым творением которых был, как правило, радиоприёмник в мыльнице. Наверное что то такое подразумевается и в этой статье под "новичком". Иначе о чём вообще идёт речь, если этот "программист" в институтике минимум 4 года что то должен был изучать.


  1. remzalp
    16.04.2024 16:38
    +2

    Начну с очевидного - первым должен быть язык со строгой не динамической типизацией, потому что после наработанного опыта под чрезмерно гибкий язык - человеку будет сильно сложнее перестроиться в сторону усложнения. А вот после Java пересесть на TypeScript/JS/Python/PHP/Perl будет проще (но зачем? :)


  1. cdscds
    16.04.2024 16:38
    +3

    Вот интересно, по задаче: "Здесь мы будем делать относительно базовую программу, которая перебирает все числа от 99 до 999, т.е. трехзначные, а потом проверяет, делятся ли они без остатка на 12 и 11. " - где Вы перебираете трехзначные в реализации, если перебор от 0 до 1000? Зачем искать остаток от деления на 11, чисел которые нацело не делятся на 12? В чем смысл ставить задачу и так глупо ее реализовывать? Выводили бы просто, например, остаток от деления всех чисел от 0 до 10 000 на 7 и замеряли время работы программы на разных ЯП.
    После такого, как то не очень понятно рассуждение о выборе первого ЯП.


  1. rionekb
    16.04.2024 16:38
    +5

    Краткая выжимка из статьи: возможность писать любые типы данных в одну переменную затруднит отладку. Языки не отличающиеся высокой производительностью кода априори плохие.

    Очень узкий обзор в плане применения языков. Контраргументы не рассмотрены вообще. Зачем я вообще это читал...

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

    Я, например, в детстве начал с Бейсика (встроен в zx spectrum) и довольно быстро переключился на ассемблер (на спектруме других классных альтернатив не было). Меня сильно забавляло делать разные графические и звуковые эффекты и менять/изучать код игр (благо встроенный в ПЗУ дизассемблер позволял творить чудеса). Так что в университете были моменты, когда не преподаватели учили меня а я их. Также как и была вполне приличная работа начиная где-то с 3го курса.


    1. Alexey2005
      16.04.2024 16:38

      Любимый опенсорсный софт до сих пор в значительной степени пишется на C/C++, ибо легаси с длинной историей. А это уж точно не те языки, которые зайдут новичкам. Пока новички разберутся, как заставить скачанное с Github'а хотя бы собраться на их машине (нигде нет такого ада со сборкой и зависимостями и столь же бессмысленных и невразумительных сообщений об ошибках, как в тулчейнах C/C++), у них уже пропадёт всякое желание программировать.


  1. Hivemaster
    16.04.2024 16:38
    +13

    я Full-stack программист с опытом командной разработки около полугода

    То есть махровый джун, но мнение уже имеет.


  1. dd84ai
    16.04.2024 16:38

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

    В питоне по факту нет приватных данных (и не говорите мне о префиксе _varname, все равно компилятор этого не проверяет). И как уже говорилось нету проверки статик типизации данных (сувай строку в int и питону сойдет), да тут твоя мысль была верной.
    Из этих условий с моей точки зрения, усложняется построение кастомных структур кода. Сложней связывать множество классов, функций и тд в коде когда нету никаких проверок автоматических то что ты пользуешся верными интерфейсами каждой из компонент. Сложно рефакторизовывать код упрощая его, через складывание в микробиблиотечки/папки скрывающие сложность своего кода за более простым интерфейсом. Ибо нам сложно изменять код, ибо он нафиг весь сломается на рантайме и ничего не подсказывается компилятором об этом.

    Эти проблемы классически в питонячьих проектах фиксяться очень плотным юнит тестированием. И ловлей ошибок в Staging на рантайме. Однако юнит тесты долговато вызываются и имеют все таки долгий фидбэк и уровень точности для быстрого фикса проблем решаемых на уровне статик типизации. Ловля ошибок в Staging еще дольше по фидбэку. Альтернативно еще эти проблемы решаются очень плотно используемым супер бойлерплетерным фреймворком где мы абузим правильность работы фреймворка на большую часть кода (жить в таких условиях грустновато, но можно)
    В свою очередь в питоне есть возможность включить Mypy на максимальных настройках или Pyright, и тогда есть это наша статик типизация и ничего не мешает с большим удобством структурировать кастомный код.
    Но чтобы mypy работал, надо чтобы весь код следовал ему :/ И было по меньше Any. Gradual Typing отличается впрочем от полной настоящий типизации и имеет подводные камни.
    (P.S. в питоне есть дружелюбные фреймворки к такому подходу, FastAPI и Django Ninja. В сочетании с использованием Pydantic везде где можно, выходит весьма приятно)

    И вот тут то и кроется главный дьявол с моей точки зрения. Очень малое количество питон программистов умеет в Mypy/Pyright писать питонячьий код, и я в общем то разочаровался когда либо встретить команду где с такими питонистами я бы был работал. Проще изучить язык Голанг или Джава или C#, и работать с людьми у которых нет выбора в этом плане ^_^.

    Короче совет из моего потока мыслей: Изучать другие языки типа Golang, Java и тд полезно. Будет проще понять Mypy/Pyright (from typing import typing официальные доки прочитай досконально), и оперировать этим в питоне при желании. А так же исполнить желания/метания души и работать не только с питоном.

    Совет номер два. Динамик типизированная натура питона на самом деле прекрасна для написания юнит тестируемого кода. Почитайте "Принципы юнит-тестирования Хориков Владимир" и "разработка через тестирование | Бек Кент", весьма полезно для выживание в питоне и не только в нем ^_^. Опыт юнит тестирования в питоне пригодиться при переходе в Golang, Java, C#, где этот процесс более затруднителен.


    1. alex88django_novice
      16.04.2024 16:38
      +2

      Дьявол кроется в том, что статик тайп-чекеры (mypy/pyright) - это сторонние тулы, которые:

      • Опциональны к использованию

      • Можно сконфигурировать так, дабы они были "лояльны" к проверяемому коду

      • Их можно "обмануть" - задизэйблить ту или иную failed проверку на уровне строчки кода/всего модуля

      • Писать везде Any

      • Отключить disallow_generics и писать аннотации для контейнерных типов в духе list/dict

      • Много всяких false-positive проверок (особенно в mypy)

      • И так далее, и тому подобное


      1. lorc
        16.04.2024 16:38
        +1

        Такое должно безжалостно зарезаться на code review. А у автора потом спрашивать все ли у него хорошо в жизни....

        Так то в C тоже можно кастить все указатели в (void*) и потом в требуемый тип, а в какой-нибудь Java - в Object и обратно.


        1. alex88django_novice
          16.04.2024 16:38
          +2

          Знаете, сколько раз я на код-ревью получал ответ (от инициатора код-ревью) в духе "ну дык этож петон! Какие дженерики??"

          Мало того, что питонисты (не все, но с большего) не умеют писать нормальные тайп-анотации, так они еще и умудряются оправдывать свое неумение тем, что мол Пайтон был разработан как dynamic-typing язык, а все эти ваши type-hints - попытка сделать из Пайтона ту же Джаву и вообще, фу.

          Благо дело, на текущем проекте я как раз ответственное лицо за настройку/прикуручивание всяческих линтеров. Пускай неумехи страдают :))


          1. lorc
            16.04.2024 16:38
            +2

            Знаете, сколько раз я на код-ревью получал ответ (от инициатора код-ревью) в духе "ну дык этож петон! Какие дженерики??"

            Ну дык, автор отправляется читать книжку, PR откладывается пока автор занимается самопросвещением.

            Конечно, мне наверное просто говорить, потому что я еще и мейнтейню бОльшую часть проектов где делаю код-ревью. Так что последнее слово в основном остается за мной.

            Благо дело, на текущем проекте я как раз ответственное лицо за настройку/прикуручивание всяческих линтеров. Пускай неумехи страдают :))

            О да, линтеры спасают жизнь.


          1. Andrey_Solomatin
            16.04.2024 16:38

            Мало того, что питонисты (не все, но с большего) не умеют писать нормальные тайп-анотации,


            Я вроде научился, но не скажу, что это просто. И дело не в Питоне а в самом концепте. Может потому их и выбросили из Go?

            Каким инструментом линтите типы?


            1. andreymal
              16.04.2024 16:38
              +1

              Может потому их и выбросили из Go?

              Что значит выбросили, вот они сразу же в хелловорлде торчат https://go.dev/tour/basics/4


              1. Andrey_Solomatin
                16.04.2024 16:38

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

                Потом добавили.


                1. andreymal
                  16.04.2024 16:38

                  К счастью, до создателей Go дошло, что писать тонны бойлерплейта на каждый тип это на самом деле сложнее чем дженерики)

                  (осталось только с убогим if err != nil что-нибудь сделать, и получится нормальный язык)


                  1. Ken-Sei
                    16.04.2024 16:38

                    К счастью, до создателей Go дошло, что писать тонны бойлерплейта на каждый тип это на самом деле сложнее чем дженерики)

                    А в Rust с этим как? (кажется, там нет наследования, наверное...)


                    1. andreymal
                      16.04.2024 16:38

                      В нём есть трейты, для многих задач этого хватает


          1. tyomitch
            16.04.2024 16:38

            они еще и умудряются оправдывать свое неумение тем, что мол Пайтон был разработан как dynamic-typing язык, а все эти ваши type-hints - попытка сделать из Пайтона ту же Джаву 

            Но действительно: если в проекте нужна type safety и т.п, зачем писать его на Python? Выглядит как попытка научить "неумех-питонистов" забивать гвозди отвёрткой


            1. Andrey_Solomatin
              16.04.2024 16:38

              Но действительно: если в проекте нужна type safety и т.п, зачем писать его на Python?


              А если очень нужна, но не во всём проекте? Пилить на микросервисы?


  1. PTM
    16.04.2024 16:38

    а меня новичка, до сих пор пугает

    # precision error with floats
    print(0.1 + 0.2)
    
    # Output:
    # 0.30000000000000004

    особенно когда надо точно).особенно если действие повторяется в цикле не один миллион раз)


    1. vedenin1980
      16.04.2024 16:38
      +3

      В большинстве языков поведение для обычных вещественных чисел будет таким же. Например, double в Java тоже не гарантирует точность вычислений, особенно если сделать что-то вроде 1.0/3.0.

      Но существуют особые классы/типы вроде BigDecimal; которые гарантируют точность. Уверен в питоне тоже есть подобные библотеки (хотя бы на уровне стороних open source библиотек)


      1. tyomitch
        16.04.2024 16:38

        Например, double в Java тоже не гарантирует точность вычислений, особенно если сделать что-то вроде 1.0/3.0.

        Во-первых -- да, гарантирует для арифметических действий. И не сам язык, а процессор, выполняющий эти арифметические действия.

        Во-вторых, 0.30000000000000004 получается именно благодаря этой гарантии: это ближайшая к точному значению двоичная дробь, точнее в double просто невозможно.


    1. ogost
      16.04.2024 16:38
      +4

      Оно во многих языках так и это грех не только Питона. Но разумеется вы это знали


      1. SergeyVSorokin
        16.04.2024 16:38
        +2

        Это не в языках так, это так процессор работает. Особенности представления чисел в виде конечной двоичной дроби. Ну не возможно в таком виде представить число 0.3 или 0.7...


        1. Ken-Sei
          16.04.2024 16:38
          +1

          Можно создать специальный тип и хранить в нём дроби (но, скорость вычислений упадёт).


          1. SergeyVSorokin
            16.04.2024 16:38
            +1

            Можно. Логичнее взять библиотеку, в которой будет реализовано нужное представление. Но для чисел с плавающей точкой так делают видимо достаточно редко. Есть ли языки, в которых по умолчанию используется не то, что поддерживает процессор?


            1. vedenin1980
              16.04.2024 16:38

              Странный вопрос, языков программирования многие тысячи и в каком-то может встретиться очень странные возможности.

              Если язык предназначен для денежных расчетов, то любые потери точности недопустимы, поэтому там могут использоватся вот такие библиотеки изначально. То что это будет дольше - может быть несущественным.


              1. Ken-Sei
                16.04.2024 16:38

                Для денежных расчётов используются типы Decimal, в которых, как и при ручных расчётах на бумаге, вместо двоичной системы используется десятичная, что отражается и на результатах деления и на результатах округления чисел.


                1. Drucocu
                  16.04.2024 16:38
                  +2

                  Или не выносят никому мозг и хранят суммы в копейках, если не надо возиться с конвертацией.


                  1. Ken-Sei
                    16.04.2024 16:38

                    Если система финансовая то, часто нужна конвертация валют по курсу, тут и выручит тип Decimal.

                    Если не финансовая, то нет нужды так извращаться с типами.


                    1. Andrey_Solomatin
                      16.04.2024 16:38

                      Иногда еще int с множителем. У Decimal есть проблемы с производительностью.


              1. SergeyVSorokin
                16.04.2024 16:38

                Мне странно слышать исходный посыл, что в этом языки виноваты. В этом смысл моего комментария.

                Языков много, да, в том числе странных, именно поэтому я не стал писать что вообще все используют стандартную плавающую точку по умолчанию, но видимо большинство распространенных так делают.


                1. tyomitch
                  16.04.2024 16:38

                  Языков много, да, в том числе странных, но я уверен, что в 21в уже нет ни одного, где была бы поддержка плавающей точки и при этом несовместимая с IEEE 754. Это стало таким же само собой разумеющимся, как восемь бит в байте.


          1. demoth
            16.04.2024 16:38
            +2

            В Python, кстати, такая либа уже есть из коробки:

            >>> from fractions import Fraction
            >>> Fraction(1, 10) + Fraction(2, 10)
            Fraction(3, 10)
            >>> Fraction('0.1') + Fraction('0.2')
            Fraction(3, 10)
            >>> float(Fraction(1, 10) + Fraction(2, 10))
            0.3
            



        1. vedenin1980
          16.04.2024 16:38

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


      1. PTM
        16.04.2024 16:38

        Да, теперь то я знаю и надо было бы уточнить, чтоб не минусовали, что двоичную алгебру, способы представления вещественных чисел в памяти через преобразование в двоичную счистему с мантиссой и прочими прелестями , я особо не проходил (не программист) и такое поведение,несколько сбивает с толку.Особенно в условиях

        (0.1+0.2) is 0.3
        False


        1. tyomitch
          16.04.2024 16:38
          +2

          надо было бы уточнить, чтоб не минусовали, что двоичную алгебру, способы представления вещественных чисел в памяти через преобразование в двоичную счистему с мантиссой и прочими прелестями , я особо не проходил (не программист)

          Чтоб не минусовали, лучше не писать на темы, про которые вы заранее знаете, что не разбираетесь.

          Я, например, знаю, что не разбираюсь в астрофизике, и если стану комментировать хабрапосты по этой теме -- меня заминусуют, и правильно сделают.


        1. Lex98
          16.04.2024 16:38
          +6

          Не надо оператор is использовать для сравнения чисел, это не проверка на равенство, а проверка идентичности (т.е. что объект один и тот же) ((0.1+0.2) == 0.3 тоже выведет False).

          Вот пример, почему такое его использование приведет к проблемам:

          Заголовок спойлера
          x = 100
          y = 100
          print(x is y) # Output: True
          print(id(x))
          print(id(y))
          x += 100
          y += 100
          print(x is y) # Output: True
          print(id(x))
          print(id(y))
          x += 100
          y += 100
          print(x is y) # Output: False
          print(id(x))
          print(id(y))
          


    1. Andrey_Solomatin
      16.04.2024 16:38

      Неизвествность всегда пугает, это нормально. Узнаете как это работает внутри, бояться перестанете. Задача хранить число с неограниченной точностью в ограниченном размере памяти, не решается. Значит надо чем-то жертвовать. Попробуйте найти удобный для вас матерьял на эту тему. Знания не критически важные, но полезные.


      1. PTM
        16.04.2024 16:38

        спасибо за поддержку


      1. PTM
        16.04.2024 16:38

        странно но одно и то же отправилось дважды


  1. alex88django_novice
    16.04.2024 16:38
    +3

    Golang по быстродействию как С++, спасибо, заставили улыбнуться )

    Язык, на котором нужно генерить тонну бойлерплейта, и топорный настолько, будто его разработали в 70-х, ммм, дайте два)


  1. Mes
    16.04.2024 16:38
    +4

    Было больно читать. Автор - делайте вычитку перед публикацией. Жаль, минусы ставить не могу)


  1. Sing303
    16.04.2024 16:38
    +2

    Блин, а вот раньше на PHP куда профессиональнее накидывали на вентилятор. Слабовато)


  1. SergeyVSorokin
    16.04.2024 16:38
    +5

    Да, это правильно, но теперь вы ошибились в коде и почему-то в переменную а передаете не число(изначальное), а строку:

    Садись, два. В языке Python нет переменных, есть имена. Поэтому они ведут себя таким образом. Можно ещё найти пару примеров интересных эффектов этого, в комментариях выше уже набросали.

    Это одна из базовых особенностей языка, которые надо изучить в самом начале, чтобы понимать, что вообще происходит. Все концепции имеют свои последствия, в том числе способные нас иногда удивлять. В другом языке будут другие особенности, что-то будет логичнее, что-то нет. В Python достаточно простой в этом плане язык, его сюрпризы можно достаточно просто объяснить.

    Я считаю что Python достаточно хороший язык для начальных курсов программирования, и я его преподавал как первый язык программирования несколько лет. Потом С++. Сам я изучал сначала С, это достаточно больно, потому что там очень много нетривиальных технических деталей, которые позволяют выстрелить себе в ногу совершенно нетривиальными способом, так что потом и эксперт будет неделю разбираться, не то что новичок. Python позволяет сосредоточиться на изучении основных конструкций языка, не отвлекаясь на понимание того, почему нельзя на сделать оператор присваивания в классе если у него есть деструктор, например. И в Python можно всё легко вести последовательно, сначала просто что-то посчитать, потом функции, потом классы, можно и функциональное программирование маленько потрогать. И по сфере применения почти никаких границ нет, можно что угодно потрогать.

    И не надо нагромождать всё эти слова как в примере на С#, да, IDE может это и рисует, но новичку надо понять что вообще происходит и зачем всё это.

    Pascal? Спасибо, но я не люблю когда на меня кричат. Это не вежливо. И это имело очень мало практического смысла в дальнейшей жизни даже когда я учился в университете в начале 90ых. Зачем?...

    У любого языка есть своя область применения. Да, из-за отсутствия каких-либо проверок типа в Python неудобно писать большие проекты (ну и мелкие тоже). Но, с другой стороны, благодаря этому можно собрать вместе совершенно разнородные библиотеки, одна из которых например скачет картинку по сети, другая её как-то обработает, а третья обучит нейронную сеть. И не надо париться что они все используют разные классы для предоставления матриц, например. Python это клей.

    С другой стороны, даже в С++ можно собрать багов из-за "неожиданной" работы автоматического преобразования типов.

    Скорость? Ха-ха, весь data science работает на python. Данные крутят либы, написанные на С или даже Fortran, а Python это всё склеивает. И это правильный способ, потому что когда люди пишут обработку данных на С это кончается тем, что фигачат три вложенных цикла не задумываясь, так как язык "быстрый". А потом всё тормозит. Когда такое начинают делать на Python, то сразу понимают, что делают что-то не то.

    Существенный недостаток Python - отсутствие поддержки вытесняющей многопоточности. Но это а) не про введение в программирование б) убивает очень злые возможности выстрелить себе в ногу в) уже идут работы по внесению этой поддержки.


  1. temabed
    16.04.2024 16:38

    Уровень аналитики и аргументации, я извиняюсь, крайне низкий. Уровень "нормальности" языков определен некорректно. Статья просто ни о чем. Хотя было бы не плохо, если бы новички слезли с питона, ибо всякие онлайн школы их толпами гонят учить именно этот язык, в итоге стадо плохо подготовленных вкатунов разрывают hh.


    1. Andrey_Solomatin
      16.04.2024 16:38

      Что-то сильно поменяеться если перейти на Го?


  1. glider_skobb
    16.04.2024 16:38

    Полностью согласен с названием статьи, но содержание разочаровало. Гораздо полезнее для новичков было бы понять, почему лучше стартовать с языка со строгой типизацией и иммутабельностью, типа Go, Kotlin или Swift


  1. aax
    16.04.2024 16:38

    Лучший языки для начинающих это сначала Си без плюсов, потом с плюсами, потом Python. Из графических фремворков лучше начинать с Qt.

    Причём вся эта четверка хороша и с академической и с прикладной точек зрения. Включая программирование как вспомогательных инструмент в других видах деятельности.

    С языками имеющими проблемы с кроссплатформенностью, если Вы входите в программирование здесь и сейчас, лучше не заморачиватся.


    1. Ken-Sei
      16.04.2024 16:38
      +1

      Лучший языки для начинающих это сначала Си без плюсов

      Это чтобы сразу отсечь как профнепригодных и бесперсективных тех, кто не разобрался с указателями и malloc? :-)


      1. aax
        16.04.2024 16:38

        Си без плюсов простейший по синтаксису из живых и востребованных языков высокого уровня, сразу учитывающий базовые особенности работы с аппартной частью. Питон язык более абстракный.


        1. tyomitch
          16.04.2024 16:38

          сразу учитывающий базовые особенности работы с аппартной частью

          Чтобы научиться водить, по-вашему, нужно быть автомехаником?


          1. aax
            16.04.2024 16:38

            Чтобы, хорошо, в том числе проффессианально максимально безопасно, водить автомобиль безусловно да надо разбиратся в его матчасти, а быть механиком это другая профессия. Например понимать, как и почему входить в упраляемый занос, делать полицейский разворот, и много чего еще требующего понимания матчасти.

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


      1. randomsimplenumber
        16.04.2024 16:38

        Это чтобы сразу отсечь как профнепригодных и бесперсективных тех, кто не разобрался с указателями и malloc? :-)

        Кто не способен понять концепцию памяти как ленты с адресами, у которой вот там - стек, а вот там - куча.. Может действительно, зачем ему эти компуктеры, можно же нормальную работу найти.


  1. Scrobot
    16.04.2024 16:38

    Прочитал заголовок, зашел статью лайкнуть, а тут и лайкать нечего..


  1. d_loka_b
    16.04.2024 16:38

    Причем здесь веб-разработка?


  1. uscomm
    16.04.2024 16:38
    +1

    несмотря на то, что имеет СТАТИЧЕСКУЮ типизацию и ООПшный стиль

    Может процедурный всё таки?|

    А ведь он по быстродействию как C++

    Нет

    Python несмотря на условную скорость написания кода не настолько удобен и быстр, как, например, Golang

    возможно кому то if err != nil будет удобным, но не мне


  1. vo0ov
    16.04.2024 16:38

    В Python вообще то можно указать тип переменной:

    a: int = 5

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


  1. DmitriyKovriga
    16.04.2024 16:38

    Новичкам нужно C# или Java давать и не морочить голову. Классика ООП на пару со статической типизацией. Кроме того, там и стек устоявшийся по всем направлениям и хороший материал для обучения есть. Популярность этих языков тоже отличная. Не вижу смысла в выборе между Java и Python выбирать второй. После того как "прохавают" базу, пусть уже переходят осознанно к тому или иному языку. Если конечно их чем-то всё-же не устроит жаба/шарпы.


  1. mocmep
    16.04.2024 16:38

    Проблема питона в высокой конкуренции за рабочее место среди новичков.


  1. Emelian
    16.04.2024 16:38

    > Сказ о Python или почему его лучше не выбирать новичкам

    Я бы вообще так вопрос не ставил. Новичок должен выбирать язык программирования исходя из своих планов на будущую карьеру.

    Одно дело, если он собирается быть профессионалом в системах разработки, а другое, если для него это просто хобби.

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

    Если подходить к вопросу фундаментально, нужно ориентироваться на высшее образование, в области точных наук и работе с современной техникой и технологиями. Учить математику, поскольку она развивает абстрактное мышление, что весьма полезно (хотя и не обязательно) для хорошего программиста. Учить программирование не только в ВУЗе (там преподают плохо, сужу по техническому ВУЗу и мехмату МГУ, в которых я учился десять лет, очно), но и самостоятельно. Скажем у Ильфака Гильфанова – автора широко известного, в узких кругах, «народного» дизассемблера «IdaPro» и у меня был общий научный руководитель из лаборатории системного программирования МГУ. Но, он, как и я, основы программирования изучал, в основном, самостоятельно.

    Программист ценен, если он полезен для высокотехнологичного предприятия (космос, оборона, ИИ, экспериментальная физика, и т.д. и т.п.). Тогда у него и зарплата будет хорошая и карьера. Мне светила сногсшибательная карьера, когда я после второго ВУЗа – МГУ, устроился в очень привилегированное, научно-производственное объединение, шеф которого буквально носил меня на руках. Однако, чтобы моя карьера не состоялась, высшие силы решили уничтожить СССР :) . Тем не менее, удалось выжить, практически без зарплаты, в «лихие 90-тые».

    Сейчас ситуация явно лучше. Даже с теми потенциалом и возрастом, я бы и сейчас был бы «обречен на успех».

    Теперь о моем скромном опыте по языкам программирования.

    Мой самый любимый язык – С++ с использованием легкого фреймворка WTL. Специализация – разработка десктопных приложений, ориентированных на пользовательский интерфейс (который традиционно разрабатывается по остаточному принципу). Второй мой любимый язык – Питон (хотя очень много времени я программировал на Visual FoxPro).

    Здесь надо сказать, что С++ - фундаментальный язык программирования, любой вундеркинд в программировании должен знать его как «облупленного». А Питон это язык обработки данных, в этом его самая сильная сторона. Причем, скорость работы для этого совершенно не нужна, главное удобство работы с данными, поскольку, их, обычно, готовят разово.

    И в С++ и в Питон очень удобно и выгодно иметь дело с Sqlite.

    Тем не менее, так получилось, что платят мне не за эти навыки, а за разработку собственной системы учета на 1С77, которая кормит меня уже почти двадцать лет.

    Да я могу работать и в «восьмерке» (1С8х) и писать собственные конфигурации там. Тем не менее, возиться с чужими конфигурациями мне не нравится (которые обычно делаются по принципу: «Нам с ними не работать!»). Сколько бы не хаяли «семерку», но я от нее (плюс мои собственные внешние компоненты) без ума, до сих пор, при всех ее ограничениях и моральном устаревании). Если нужно внедрить собственный учет на среднем предприятии (до пары тысяч человек), то я бы и сейчас предпочел разработать собственную конфигурацию на 1С77, с использованием дешевого терминал-сервера (у нас подобный, с двумя гектарами памяти, работает 20 лет, ну и зачем нам «восьмерка»?).

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


    1. Ken-Sei
      16.04.2024 16:38
      +1

      Новичок должен выбирать язык программирования исходя из своих планов на будущую карьеру.

      А если это школьник, который ни с карьерой, ни с профессией ещё не определился? Должна быть возможность, просто ознакомиться с программированием, чтобы решить подходит ли эта профессия , а не так что "родители сказали я пошёл учится на программиста, и уже в ВУЗе понял, что это не моё".


      1. Emelian
        16.04.2024 16:38

        > А если это школьник, который ни с карьерой, ни с профессией ещё не определился?

        В перефразе Владимира Маяковского: «- Юноше, обдумывающего житьё, делать жизнь с кого? – С товарища Дзержинского!», можно сказать, пусть школьник пробует С++. А другие языки будет просто сравнивать с ним...


  1. Gmj
    16.04.2024 16:38

    Питон - это прежде всего библиотеки, каа и любой язык. Что с библиотеками в голанде?