Задать вопрос
  • Зависит ли зп от языка и платформы?

    saboteur_kiev
    @saboteur_kiev Куратор тега Карьера в IT
    software engineer
    Кто круче - каратист, кунг-фуист или кикбоксер, если они одинаковы по скиллам?
    Правильный ответ: не бывает в жизни такого, чтобы они были равны по скиллам. Поэтому победит не стиль, а опыт и чуток случайность.

    1. Зарплата зависит не от языка программирования, а от места трудоустройства.
    2. Местро трудоустройства зависит от навыков, опыта + собственно усилия потраченные на трудоустройство (в разных городах разные возможности).
    3. Навык и опыт зависит и от человека, и от окружения, которое способствует или наоборот препятствует обучению.

    P.S. На самом деле, зарплата у хороших специалистов разных на разных языках может и отличается, но достаточно незначительно. После определенного уровня важнее уже не цифра, а комфорт, семья, хобби. Не гонитесь за лишней копейкой - работать нужно, чтобы жить, а не жить, чтобы работать.
    Ответ написан
    5 комментариев
  • Можно ли "подглядывать" Junior'у?

    BBmike
    @BBmike
    Профессионал этот не тот, кто помнит всё, а знает, где это быстро найти.
    Ответ написан
    Комментировать
  • Можно ли "подглядывать" Junior'у?

    sim3x
    @sim3x
    StackOverflow Driven Development уже давно не шутка, а реальность

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

    Потому старайся писать сам, даже усли получается убого.
    Для улучшения кода есть стадия рефакторинга и код ревью
    Ответ написан
    2 комментария
  • Можно ли "подглядывать" Junior'у?

    EvgeniyKvasyuk
    @EvgeniyKvasyuk
    Я больше скажу, даже не джуниор постоянно подглядывает. Чтение документации - 60% времени работы любого разработчика
    Ответ написан
    Комментировать
  • TDD/BDD в чем разница и для каких видов модулей стоит использовать?

    sim3x
    @sim3x
    Видов тестов много
    https://events.yandex.ru/lib/talks/535/

    *DD - стиль разработки, когда ты сначала пишешь тест, потом он проваливается, потом ты пишешь код, чтоб тест прошел

    B или T использовать решать или тебе, или начальству. Лучше попробовать писать одно и тоже на обоих и уже исходя из своего опыта выбрать

    BDD - лучше подходит для функциональных тестов
    ТDD - для юнит

    для функциональных частей модулей
    оксюморон. Все что ты пишешь выполняет каку-то функцию

    Тестировать модуль, если он будет переиспользован, - стоит

    бизнесс критикал вещи тестировать обязательно

    нужно ли тестировать обработчики?
    https://facebook.github.io/react/docs/test-utils.html

    нужно ли тестировать коректность вывода компанента в DOM (хотя не представляю как это делать)?
    такое проще оставить ручному тестированию

    или стоить тестировать только дополнительный функционал сайта не имеющий отношения к UI?
    такой функционал уже должен быть покрыт юнит тестами и функциональными тестами и должен показать ошибку не доходя до UI
    Ответ написан
    Комментировать
  • TDD/BDD в чем разница и для каких видов модулей стоит использовать?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    TDD

    - пишем тесты - маленький кусочек, то что можно минут за 10 написать. На этом этапе мы формулируем что мы хотим написать.
    - пишем код - пишем код, который делает тесты "зелеными". то есть все работает. Мы делаем это максимально быстро, самым тупым способом, который просто быстрее всего сделать.
    - рефакторинг - после того как все работает, или еще через пару итераций, что бы набралось чуть больше "грязи", чистим код поочередно. Важно при рефакторинге чистить что-то одно. Либо код, либо тесты (да да, их тоже надо рефакторить иногда устраняя дублирование). Поправили код - прогнали тесты, все хорошо? тогда можно тесты подправить. Ну и т.д.

    BDD
    - пишем фичаспеки - это этап детализации более высокоуровневых требований. Фич. Обычно на этом этапе просто записываются мысли как что должно работать. В этом плане описание фичи описывает юзкейс, а сценарии - детализируют поведение фичи. То есть если у кого-то возникает вопрос как что должно работать, люди описывают пример в виде сценария. Типа что есть, что мы делаем и что в итоге должна выдать система.
    - пишем код - так же как и в случае с tdd, можно писать код для разных уровней.
    - рефакторинг.

    TDD - для одного разработчика, BDD - для команды. А BDD-style assertions для chai - это пафос. По сути это "планирование фич" в рамках библиотек и отдельных объектов. Чуть меньший масштаб. Но ничем от TDD вообще не отличается, хотя если сильно постараться можно так же оценивать ценность фич для пользователей нашей библиотеки и т.д.

    Как никак в BDD основная мысль - фичаспеки должен иметь возможность читать продукт оунер или стэкхолдеры, то есть те кому проект собственно нужен, что бы говорить должно работать так или нет. В случае с библиотеками... ну вы пишите что-то для девелоперов, а они в состоянии читать тесты как фичаспеку. И в принципе от предметной области недалеко.
    Ответ написан
    1 комментарий
  • Как в c# вывести слово с массива в столбик(вертикально)?

    @DarkByte2015
    string[] words = { "word1", "word2" };
    
    foreach (var letter in words.SelectMany(x => x))
    	Console.WriteLine(letter);
    Ответ написан
    Комментировать
  • Каковы модификаторы доступа в C# по умолчанию?

    WNeZRoS
    @WNeZRoS
    В namespace по умолчанию всё internal.
    В class по умолчанию всё private.
    В struct по умолчанию всё public.
    Ответ написан
    1 комментарий
  • Почему не работают кортежи?

    Добавьте using System.ValueTuple. Всплывающее сообщение вам прямо подсказывает. В ссылках должен быть этот пункт: image009.png
    Ответ написан
    3 комментария
  • Чем отличается реляционная БД от обьектно-реляционной?

    @akileev
    Java / Scala developer
    В объектно-реляционной СУБД можно создавать объекты, наследовать и расширять их, можно создавать сложные типы данных.

    Почитайте в документации PostgreSQL про inheritance, create type и create domain.

    https://www.postgresql.org/docs/current/static/tut...
    https://www.postgresql.org/docs/current/static/sql...
    https://www.postgresql.org/docs/current/static/sql...
    Ответ написан
    Комментировать
  • Чем отличается реляционная БД от обьектно-реляционной?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Вообще-то postressql всегда была именно реляционной, а в последние 2-3 года туда прикрутили в блобы кучу дополнительных индексаторов. И настала возможность делать "объектный" поиск по этим блобам.
    Собственно профит в том, что отдельные поля могут индексироваться на манер текстовых поисковиков, например по json-полям с некоторой агрегацией.
    На мой взгляд, это просто разновидность текстового поиска в реляционной базе, хотя и сильно улучшенного.
    Выгода - хранить json + реляционную информацию, во многих случаях это бывает выгодным. В других - просто взять nosql (elastic/mongo) выгоднее. Ну многие наверное будут отказываться от отдельного solr/elastic.
    Ответ написан
    Комментировать
  • В чём польза readonly полей в C#?

    @Lailore
    Затем же, зачем и private, public, virtual, sealed и т.п. Что бы сделать код более выразительным и не выстрелить себе в ногу во время рефакторинга.
    Ответ написан
    Комментировать
  • В чём польза readonly полей в C#?

    OlegTar
    @OlegTar
    программист .NET, Javascript, Perl
    Константы подставляются на этапе компиляции,
    Readonly - в рантайме.
    То есть константу нельзя иницииализировать ссылочным типом, Или например прочитать файл и заполнить константу.
    Ответ написан
    Комментировать
  • В чём польза readonly полей в C#?

    grigorylug
    @grigorylug
    readonly - это просто маркер матаданных, которые анализирует компилятор, нужен для того, чтобы обеспечить инкапсуляцию на уровне полей и дать возможность определения значения в конструкторе типа и запретить дальнейшее изменение в коде явным образом (это не значит, что мы не можем изменять такие поля), тоже самое можно сделать и с помощью свойств - закрыв сеттер для изменений вне класса, но если вспомнить историю, то readonly появился раньше свойств, и свойства имеют более широкую область применения, так же поле помеченное readonly можно рассматривать как некую оптимизацию, в сравнении со свойством, т.к. поле будет давать/принимать значение быстрее свойства, за счет того, что свойство преобразуется компилятором в методы get_ и set_, на что тоже уходит время.
    Ответ написан
    Комментировать
  • В чём польза readonly полей в C#?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Значения полей readonly можно менять динамически, в конструкторе класса. Последующие изменения невозможны.

    public class MyClass
    {
    
      public readonly int Value = 0;
    
      public MyClass()
      {
        this.Value = 123;
      }
    
    }


    Для чего это использовать - зависит от фантазии.

    Например, можно создать класс User и сделать readonly поле, содержащее идентификатор пользователя. Таким образом, идентификатор пользователя можно будет указать только при инициализации класса и, в последующем, изменить его будет невозможно. Это позволит избежать проблем в логике, которые еще предстоит придумать :-)

    Если сравнивать со свойствами и константами, то значения readonly свойств могут меняться в процессе жизненного цикла класса. Значения readonly полей, как уже было сказано ранее, можно указывать только при объявлении и в конструкторе класса.

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

    В дополнение, немного кода (Console Application):
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Net;
    using System.Timers;
    using System.Threading;
    
    namespace ConsoleApplication20
    {
    
      class Program
      {
        static void Main(string[] args)
        {
          // создаем экземпляр класса
          var t = new Toster(199065);
          // выводим значение константы ProjectName
          // доступ только через Toster
          Console.WriteLine(Toster.ProjectName);
          // доступа к локальным константам здесь нет
          // Toster.CounterPattern
          // t.CounterPattern
    
          // выводим заголовок вопроса
          Console.WriteLine(t.Title);
    
          // бесконечность - не предел!
          while (true)
          {
            // t.Id = 123;
            // мы не можем поменять идентификатор
            // следовательно, этот код, логически, будет работать правильно
    
            // выводим число ответов
            Console.WriteLine("Ответов: {0}", t.AnswersCount);
    
            // t.AnswersCount = 123
            // мы не можем менять значение readonly свойства,
            // но оно может меняться внутри экземпляра класса
    
            // пауза 10 сек.
            Thread.Sleep(10000);
          }
        }
      }
    
      public class Toster
      {
    
        // публичная константа, доступ через Toster
        public const string ProjectName = "Тостер";
    
        // локальная константа, доступна только в рамках этого класса
        const string CounterPattern = "<span class=\"section-header__counter\" role=\"answers_counter\">";
    
        // публичные поля только для чтения
        // значение может быть установлено в конструкторе
        public readonly string Title = "Нет данных";
        public readonly int Id = 0;
        
        // свойство только для чтения
        // значение может меняться в процессе жизни экземпляра класса
        // при помощи локальной переменной
        private int _AnswersCount = 0;
        public int AnswersCount
        {
          get
          {
            return _AnswersCount;
          }
        }
    
        // это просто таймер
        private System.Timers.Timer Timer = null;
    
        // а это конструктор<s>, но не Lego</s>
        public Toster(int id)
        {
          if (id <= 0) { return; }
          
          // получаем вопрос
          var web = new WebClient();
          web.Encoding = Encoding.UTF8;
          var result = web.DownloadString(String.Format("https://toster.ru/q/{0}", id));
          // из шаблона url тоже можно сделать константу
          // либо в классе можно сделать readonly свойство, 
          // которое будет на лету формировать итоговый адрес:
          // return String.Format("https://toster.ru/q/{0}", this.Id)
    
          // устанавливаем значения для полей
          this.Id = id;
          this.Title = WebUtility.HtmlDecode
          ( 
            result.Substring
            (
              result.IndexOf("<title>") + "<title>".Length,
              result.IndexOf("</title>") - result.IndexOf("<title>") - "<title>".Length
            )
          );
          // выдергиваем число ответов на вопрос
          this.ParseAnswersCount(result);
    
          // запускаем периодическую проверку <s>Менделеева</s>
          Timer = new System.Timers.Timer(10000);
          Timer.Elapsed += Timer_Elapsed;
        }
        
        // обработчик истечения интервала времени 
        private void Timer_Elapsed(object sender, EventArgs e)
        {
          var web = new WebClient();
          web.Encoding = Encoding.UTF8;
          var result = web.DownloadString(String.Format("https://toster.ru/q/{0}", this.Id));
          this.ParseAnswersCount(result);
        }
    
        // выдергиватель количества ответов
        private void ParseAnswersCount(string value)
        {
          int startstart = value.IndexOf("Ответы на вопрос");
          int start = value.IndexOf(CounterPattern, startstart) + CounterPattern.Length;
          int len = value.IndexOf("</span>", start) - start;
          _AnswersCount = Convert.ToInt32(value.Substring(start, len));
        }
        
      }
    
    }
    Ответ написан
    Комментировать
  • В чем различие полиморфизма и перегрузки?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    дополню nesterione

    Перегрузка методов дает нам как раз таки полиморфизм. Если мы говорим о перегрузке методов родительского класса то такой вид полиморфизма называют "полиморфизмом подтипов". Если речь идет о добавлении функции или метода с тем же названием но другими типами аргументов - это "специализированный полиморфизм" (или ad hoc). Если речь о обобщенном прогреммировании (шаблоны) - то "параметрический полиморфизм".

    То есть перегрузка методов - частный случай полиморфизма.
    Ответ написан
    1 комментарий
  • В чем различие полиморфизма и перегрузки?

    @nesterione
    Перегрузка это и есть одно из проявлений полиморфизма.

    Всего есть различные виды полиморфизма (ответ больше для C# и Java, если для c++ что-то не так, поправьте меня):
    * динамический: это когда программа во время выполнения решает какой код исполнять. Это происходит при наследовании: когда ты переопределяешь функцию в другом классе (виртуальные методы, абстрактные)
    * статический: на стадии компиляции все известно, это как раз перегрузка методов. Компилятор исходя из аргументов выбирает нужный метод
    Ответ написан
    Комментировать
  • При установке Visual Studio произошла ошибка, точнее ошибки, их несколько. Как исправить?

    yarosroman
    @yarosroman
    C# the best
    https://github.com/Microsoft/VisualStudioUninstaller потом полное удаление, потом через панель управление, все VC Redist нажать удалить, а когда инсталлер запуститься нажать исправить, перегрузиться и установить заново.
    Ответ написан
    Комментировать
  • Быстрый переход к коду класса в Visual Studio 2015?

    @Sing303
    F12
    Ctrl+F12
    Ctrl+ЛКМ (Через решарпер)
    Ответ написан
    Комментировать
  • Быстрый переход к коду класса в Visual Studio 2015?

    GavriKos
    @GavriKos
    F12 в стандартной раскладке.
    Есть еще через Ctrl-click, но это вроде с расширениями.
    Ответ написан
    Комментировать