Программисты и понты



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

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

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

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

Угадайте, почему VB.NET значительно уступает C# по распространённости? Из-за того, что он чем-то хуже?.. Не угадали. Он вообще-то ничуть ему не уступает, вернее даже гораздо удобнее во многих вещах.

Например, попробуйте представить, как такой демонстрационный кусок кода будет выглядеть на C#:



В фигурных скобках запутаетесь.

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

Я это пишу не для того, чтобы холивар тут устроить, а просто интересно было бы посмотреть и на другие примеры. Прежде всего для того, чтобы самому не попадать в такие ловушки, так как бывает трудно с первого взгляда разобраться что к чему. Поскольку я сам очень падок на такие вещи (каюсь) хотелось бы узнать чужое мнение и посмотреть другие примеры. Может, кто в комментах напишет о наболевшем. Глядишь, у кого-то наступит просветление.
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 93

    +21
    Пример странный. Кто вам мешает писать писать после "}" /* end if */? Тем более многие дополнения показывают, что закрывает скобка всплывающим тултипом, зачем раздувать код?
      +20
      >Пример странный
      есть мнение, что просто беда в разработке, и такой код можно назвать «говнокодом»
      • UFO just landed and posted this here
          +3
          да, верно исправили )
          0
          Классический пример, да.
          0
          Или выделяют другим цветом весь блок.
            +2
            А мне кажется, что этот пример — писька, которой меряются понтовщики
            +15
            Вы меня раскусили, я использую C# потому, что люблю понты.
            • UFO just landed and posted this here
                –8
                не понтами языка программирования надо понтоваться, а знаниями приемов рефакторингов
                  +21
                  Понт засчитан.
                    –5
                    умнее ничего не мог сказать? ну-ну…
                +5
                Если честно — ниочём. Тема, вероятно, актуальна и интересна.

                Вот только пример бредовый. По вашему VB.NET лучше CS потому, что там используется Pascal-like синтаксис вместо C-like синтаксиса?

                И да, в скобочках не запутаешься, а вот когда помимо вызова единственного метода будет ещё код — VB.NET'ер запутается в количестве слов, которые ещё нужно целенаправленно разделять на осмысленные (вызовы методов, типы и т.п.) и вспомогательные (скобочки в 3-5 символов).
                  +9
                  Такой код будет смотреться ужасно на любом языке. В том числе и на VB.
                    +5
                    Вы сами понимаете код который написали?
                    НЕ БЫВАЕТ идеального языка и технологии или фрэмворка, каждый инструмент выбирается из ваших нужд или из требований бизнеса!

                    Если мне нужно будет писать матросы для Excel, то я естественно буду пользоваться vb.
                      +22
                      Не удержался.
                      "— Главная мысль, которую человек пытается донести до других, заключается в том, что он имеет доступ к гораздо более престижному потреблению, чем про него могли подумать. Одновременно с этим он старается объяснить окружающим, что их тип потребления гораздо менее престижен, чем они имели наивность думать. Этому подчинены все социальные маневры. Больше того, только эти вопросы вызывают у людей стойкие эмоции.
                      — Вообще-то мне в жизни попадались и другие люди, — сказал я с легкой иронией.
                      Иегова кротко посмотрел на меня.
                      — Рама, — сказал он, — вот прямо сейчас ты пытаешься донести до меня мысль о том, что ты имеешь доступ к более престижному потреблению, чем я."

                      Виктор Пелевин. Ампир «В»
                        +2
                        Может это лишь моё имхо, но действительлно, аргумент про то что синтаксис ({,}, (), etc.) читается хуже чем тоже самое словами (end, begin, sub) — какой-то странный и я его никогда не понимал.
                        Наоборот, спецсимволы не только занимают гораздо меньше места, но ещё и сильно отличаются по внешнему виду (а значит легче и быстрее могут быть восприняты человеком) от обычных слов. Хотя я и сам начинал с бейсика и паскаля, однако когда попробовал С и увидел насколько легче читается код, (ну и много других достоинств конечно), сразу пересел, и сложно представить что это было из-за «понтов»…
                          +2
                          Поддержу автора. Много раз был свидетелем того, как выбор делают на основе «модности» той или иной технологии.
                          Пример с VB и C#: допускаю, что он не вполне корректен. Особо степень вложенности :)
                          Но вот пример из жизни: не далее как пару недель назад знакомый ведущий разработчик из компании-конкурента сказал, что у них в компании приняли решение переходить с разработки на PHP на использование RoR. На вопрос «почему, какие плюсы» получил исчерпывающий ответ: «это же круто! мало кто этим занимается. да и просто когда заказчикам говоришь, что не заезженный пхп, а крутой РоР — те смотрят с большим уважением»…

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

                          Так было с ИИ. В 50-60 гг дикая эйфория, о том что «вот уже почти», это было страшно модно. В это начали вкидываться. А потом поняли, что переоценили. И этим надо заниматься вдумчиво и спокойно.

                          Вобщем, я рад, что нашёлся человек, который тоже увидел некую тенденциозность в использовании ит-штук.
                            +1
                            Спасибо за поддержку.

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

                            Интересно наблюдать, что все воспринимают этот пост как «что лучше, а что хуже». Проблема не в том, что что-то лучше, а в том, что это одинаковые инструменты (есть лишь нюансы, которые лично мне удобнее).
                            • UFO just landed and posted this here
                              • UFO just landed and posted this here
                                  0
                                  Дык о выборе я и не спорю :) Каждый вправе выбрать тот инструмент (технологию, методику), которая ему нравится, с которой хорошо получается работать и решать свои задачи. Но вот аргументацию уровня «это мейнстрим» я слышу, к сожалению, очень часто.
                                +15
                                как за это можно было получить инвайт?
                                  0
                                  Автор с 12 апреля с нами. Так что за это инвайт он не получал.
                                    0
                                    Автор получил инвайт 12 апреля, а статью опубликовал только сейчас.
                                      0
                                      Я и не знал что так можно. Спасибо, беру свои слова назад.
                                        0
                                        Он зарегистрировался 12 апреля, когда он перешел с read-only в текущее состояние — вопрос другой.
                                          0
                                          Вы правы. Но я читал эту статью в «Песочнице» около месяца назад, поэтому и сделал вывод о том, что Yoga был приглашен именно тогда.
                                  +1
                                  О да проблема VB, а потом VB.Net именно в беспонтовости.
                                    0
                                    Зря вы так о VB, хороший язык был со своей областью применения. С превращением в клона C# стал не нужен.
                                    +3
                                    > Например, попробуйте представить, как такой демонстрационный кусок кода будет выглядеть на C#

                                    Хорошим тоном считается не допускать вложенности больше 5-7 уровня. Я начинаю задумываться о рефакторинге, когда вижу больше 3 уровней вложенности.
                                      0
                                      using+lock+цикл+if — уже четыре уровня вложенности.
                                        0
                                        Для этого служит такой рефакторинг, как "выделение метода".
                                          0
                                          В котором будут те же самые using+lock+цикл+if? Надо мне, например, записать в свежеоткрытый стрим выборку записей из расшаренного между потоками ресурса. Хорошо, от if-а избавимся через LINQ-запрос с условием. Но всё равно ведь остаётся три уровня.
                                            0
                                            Из
                                                    private void SomeMethod() {
                                                        // 4 уровня вложенности.
                                                        var resource = new List<byte>();
                                                        using (var stream = new MemoryStream()) {
                                                            lock (resource) {
                                                                foreach (byte b in resource) {
                                                                    if (b < 10) {
                                                                        stream.WriteByte(b);
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                            

                                            в
                                                    private void SomeMethod() {
                                                        var resource = new List<byte>();
                                                        // 2 уровня вложенности.
                                                        using (var stream = new MemoryStream()) {
                                                            lock (resource) {
                                                                WriteBytes(stream, resource);
                                                            }
                                                        }
                                                    }
                                            
                                                    private static void WriteBytes(Stream stream, IEnumerable<byte> resource) {
                                                        // 2 уровня вложенности.
                                                        foreach (byte b in resource) {
                                                            if (b < 10) {
                                                                stream.WriteByte(b);
                                                            }
                                                        }
                                                    }
                                            
                                              +1
                                              Охрененно, ради 4 строк кода, встречающихся один единственный раз делаем целый метод. Если уж хочется избавиться от скобок, то стоит использовать LINQ.
                                          +1
                                          using+lock… такого нет в Ruby и С++, я не в теме.
                                            0
                                            lock — обёртка вокруг мьютекса с автоматической установкой обработки исключений. using нужен для автоматического освобождения ресурса, поддерживающего интерфейс IDisposable.
                                              0
                                              мда… в Java же тоже подобное запилили (в 7ой)…
                                              Но проще — без поднимания дополнительных уровней…
                                              Вот и в чём VB лучше, если заставляет делать такую страшную вещь?

                                              PS sinclair basic — лучшее из Basic`ов, что я видел, остальные не люблю, да и ниша их мне не интересна :)
                                                0
                                                Никто не заставляет использовать, это синтаксический сахар избавляющий от необходимости постоянно писать один и тот же код.
                                                  0
                                                  Постоянно писать using и lock тоже от части повторящийся постоянный код. В Ruby сразу же сделали бы что-то типа это…

                                                  using_and_lock do
                                                  # some code
                                                  end
                                                    0
                                                    using и lock на один и тот же объект никогда не накладывается же.
                                                      0
                                                      using_and_lock stream, resource do
                                                      # some code
                                                      end
                                                        0
                                                        Я не холиварю, просто немного коряво объяснил, почему упомянул 3 уровня вложенности. В Ruby мире принято делать подобные мини-хелперы.
                                                      0
                                                      я говорю не про «не исползовать синтаксический сахар», а про способ его реализации:Автоматическое закрытие объекта после использования в Java 7
                                                      пример:
                                                      try (ResType res = new ResType(...)) {
                                                          doSomethingWithRes(res);
                                                      } catch (ResourceException e) {
                                                          doSomethingWithException(e);
                                                      }
                                                0
                                                Вот видите, сами пример нашли!

                                                А казалось бы, это может быть записано линейно
                                                do
                                                  stream <- memoryStream
                                                  lock resource
                                                  bs <- bytes resource
                                                  mapM (writeStream stream) . filter (< 10) $ bs
                                                


                                                  0
                                                  И на C++

                                                  MemoryStream stream;
                                                  lock l(resource);
                                                  for (auto b : resource.bytes())
                                                    if (b < 10)
                                                      stream.write(b);
                                                  
                                                +2
                                                Необычный пост. Да, я стараюсь следить за тенденциями в IT, но отдаю предпочтение эффективности/удобству — но никак не «модности». Хотелось бы узнать что именно автор вкладывает в понятие «мода»?
                                                  –1
                                                  Можно взять определение из Википедии.
                                                    +1
                                                    Тогда к чему вот это:
                                                    а просто интересно было бы посмотреть и на другие примеры.

                                                    На какие примеры вы хотите посмотреть?
                                                      0
                                                      Уже ни на какие. Один смелый тут нашелся, высказался, а остальные за карму трясутся. Да и у меня уже нет никакого желания тут общаться… Понял, Хабр не место для дискуссий. Такие вопросы тут задавать нельзя.
                                                        0
                                                        Мне кажется что вы переоценили наличие понтов. Я как-то с ними не встречался, хотя и на VB.NET не вижу смысла писать, при наличии выбора других .NET языков.
                                                          0
                                                          А я наоборот, постоянно нахожу подтверждение иррациональности выбора инструмента. Новичок когда не знает что учить и делает выбор, неспособен оценить все преимущества и недостатки технологии, поэтому ведется исключительно на понты и прочую шелуху. Вспомните себя, когда мучились с выбором «куда податься» (если его делали не за вас). Это потом появятся «рациональные» объяснения почему именно этот выбор правильный.
                                                            0
                                                            Я не думал, куда податься, я писал на всем, что было интересно. Но для новичков я бы не советовал трогать VB.NET/php и т.д. (и не из-за понтов).
                                                              0
                                                              А из-за чего? Я бы как раз наоборот, новичкам посоветовал именно эти два языка.
                                                                0
                                                                да потому что начинать нужно изучения базовых вещей в программировании. а для этого практически идеально подходит Pascal. потом C (чтобы понять что происходит в памяти) и ASM конечно.
                                                                  0
                                                                  Современные бейсик и паскаль практически иденичные языки. И двигаться я бы начал в другую сторону — в сторону повышение уровня абстракции, а не снижения. Короче, куда-нибудь ближе к функциональным и логическим языкам.
                                                                    0
                                                                    функциональщина отобъет у новичка все желание :)
                                                                    а современный бейсик не всегда удобен (ибо нет у меня винды, а моно это не вариант). а компиляторы для языков названных мной имеются везде.
                                                  0
                                                  хм, не знаю как конкретно в c#, но во всех подобных языках (js, java, c++) однострочные конструкции можно спокойно без скобок — т.е. будет лесенка из вложений вообще без закрывающих скобок.
                                                    0
                                                    Да, собственно, так же :)
                                                    +1
                                                    Автор говорит, что VB.NET не хуже, чем C# и приводит весьма странный пример со скобками. Гм, если язык (инструмент) выбирается из таких соображений, то что-то тут не так.

                                                    К тому же про значительно большую популярность C# автор загнул:
                                                    www.tiobe.com/index.php/content/paperinfo/tpci/index.html — C# (6.823%), (Visual) Basic (5.457%).

                                                      0
                                                      Пример специально был надуманный (странно, что все так на него накинулись).

                                                      Вас не настораживает, что в разных странах абсолютно разные данные статистики? Может, это обусловлено не самими инструментами, а отношением к ним, модой, историей и т.п.?
                                                        0
                                                        Историей?
                                                          0
                                                          Да, часто выбор предопределен исторически. Например, синтаксис Java и C# сознательно делали похожим на С, чтобы привлечь уже готовых разработчиков. Пролог как язык для ИИ больше распространен в Европе, ЛИСП в Америке.
                                                            0
                                                            Историей/модой/инструментами чего, в таком случае, обусловлена популярность языка А над Б в разных странах?
                                                          +1
                                                          >>Пример специально был надуманный (странно, что все так на него накинулись).
                                                          Специально для чего? Т.е. получается, что преимуществ у VB.NET над C# нет, раз вы не можете привести нормальный пример? Пример странный не потому, что там такая степень вложенности, а потому, что он не демонстрирует преимуществ, хотя, казалось бы, должен это делать.

                                                          >>Вас не настораживает, что в разных странах абсолютно разные данные статистики? Может, это обусловлено не самими инструментами, а отношением к ним, модой, историей и т.п.?

                                                          Покажите другую статистику, в разрезе стран, обсудим. А пока это все голословные утверждения.
                                                            –3
                                                            Я имею право специально гиперболизировать пример, потому что это пример для демонстрации лучшей читабельности кода. Да, кому-то многословность не понравится, кто-то приделает костыли, но все равно читабельность однозначно выигрывает.

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

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

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

                                                                    Не знаю ни одного знакомого программиста, который бы относился к бейсику — как к языку «для ламеров».

                                                                    Что значит «так сложилось исторически»?
                                                                      0
                                                                      Во-первых, опрос не берет во внимание значительную долю программистов занимающихся не мейнстрим разработкой: научные работники, системные администраторы и т.п.
                                                                      Не скажу про NET, но многие пишут/писали на VB для MS office, например.
                                                                        0
                                                                        забыл написать про во-вторых :)

                                                                        С++.net на сколько я могу судить не особо популярен, но вы ж не будете утверждать, что в сознании программистов С++ — это язык для ламеров?
                                                                          –1
                                                                          Не буду. Но с бейсиком это именно так :)
                                                                    –1
                                                                    Дык, в чем лучшая читабельность?

                                                                    >>Вот, например, недавний опрос по Украине.
                                                                    Где? Какой опрос?
                                                              +1
                                                              Автор пытается акцентировать внимание на на проблемах разработчиков мужского пола и их стремление «кинуть понты» при этом сознательно используя обороты, которые должны задеть людей, являющихся целевой аудиторией данной публикации.

                                                              Автор — вы молодец, так держать! Репрезентативность сравнения VB и C# (других технологий же нету) меня завораживает, нежелание освоить базовый язык .NET платформы (VB же был и до .net), а маркетинг МС вполне явно намекает на это, и ваши оправдания заслуживают внимания мастеров кинуть понт.
                                                                0
                                                                Я очень ценю критику. Особенно отсутствие аргументов. Говорят, молчаливые протесты сейчас в тренде.
                                                                  0
                                                                  Offtop: Если не ошибаюсь — слово «тренд» теперь модное популярное.
                                                                +2
                                                                Понты? Нет, не слышал.
                                                                  0
                                                                  В синтаксисе VB.Net меня раздражает другое. Как вы напишете в нём вот такую строчку:
                                                                  private const string SelectSQL = @"
                                                                  SELECT [rowID]
                                                                  ,[firstName],[middleName],[lastName],[shortName]
                                                                  ,[dep]
                                                                  /*множество полей*/
                                                                  ,[birth_date],[members],[sex]
                                                                  FROM Personal
                                                                  ";
                                                                  

                                                                  Про знак подчёркивания в курсе. Но вся соль именно в том что это текстовая переменная в несколько строк. Её удобно смотреть в таком виде — нету горизонтального прокручивания. А в VB эту переменную придётся задавать в одну длинную строку — нечитаемо из-за длинны. Или всё же есть способ (кроме разбивки и конкатекации подстрок)?
                                                                    –2
                                                                    Используйте ORM, хотя бы LINQ2SQL
                                                                      +2
                                                                      Я в курсе и про ORM, и про LINQ2SQL. Я не хочу обсуждать почему в проекте используется этот способ, я не спрашиваю как работать с SQL. Я говорю про удобство, про синтаксис и текстовую переменную.
                                                                      0
                                                                      Да, согласен. В C# удобнее в таком примере. Но автоматом появляется необходимость ставить ";" в конце каждой строки. Дело вкуса.
                                                                      +3
                                                                      Если большинство знакомых Вам программистов выбирает технологии из соображений понтов — может Вы общаетесь с неправильными людьми?
                                                                        0
                                                                        Не совсем понятно, о чем материал.
                                                                        Еще не ясно, почему автор упускает такой момент, как спрос на рынке. Я думаю, нередко именно он делает одну технологию понтовой, а другую нет.
                                                                          0
                                                                          Да многие считают, например, PHP беспонтовым, хотя многие задачи он решает отлично и спрос есть.
                                                                            +1
                                                                            Я тоже считаю PHP «безпонтовым», хотя программирую на нем вот уже 8 лет. И еще столько же буду программировать, так как это диктуется рынком. На фрилансе, например, спрос на другие языки чудовищно мал. И если бы питон мог прокормить меня также, как PHP, я бы писал на нем.
                                                                            Суть лишь в том, что я не пишу об этом статей. Не пытаюсь участвовать в спорах «кто круче».
                                                                              +1
                                                                              Ошибаетесь. Спрос на Python/Ruby (я почему-то всегда эти языки указываю вместе, хотя пользуюсь только Ruby) довольно велик на фрилансе, работы хватает с головой, а оплата почти в 2 раза выше.
                                                                                –1
                                                                                Я не буду с вами спорить, тем более, что сухими цифрами статистики не владею. Но имею активные регистрации на двух крупных биржах, где практически ежедневно просматриваю ленту проектов. Исходя из собственных наблюдений, могу сказать, что соотношение примерно 1/20 в пользу PHP. Я уже не говорю о сути задач, которые требуют решения.
                                                                                На PHP публикуется много мелких проектов (5-10 тысяч), каждый из которых выполняется за 2-3 дня, что дает отличное соотношение время/деньги. Ничего подобного с руби и питоном я не наблюдал.
                                                                                Возможно, я где-то не там ищу работу или со мной что-то не так, но я не думаю, что сильно ошибаюсь.
                                                                          0
                                                                          >> как такой демонстрационный кусок кода будет выглядеть на C#:

                                                                          }}}}}}}}}} ???
                                                                            +2
                                                                            По заголовку, думал, что тема будет касаться программистов с понтами, но нет, обсуждаем VB vs C#.
                                                                              0
                                                                              Есть мнение что программисту надо выбирать язык достаточно зрелый, чтоб была уверенность что программу можно написать в принципе И достаточно современный (или наоборот хорошенько древний)- чтоб не было слишком большого количества специалистов (читай скрипт-киддисов) (ибо стоимость нормо-часа маленькая когда «специалистов» много).

                                                                              Only users with full accounts can post comments. Log in, please.