• Как сделать рекурсию в запросе?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    В запросе такого не сделать, но и рекурсивность тут не нужна, достаточно простого цикла. Можно написать хранимую функцию или процедуру, но если такой запрос нужно выполнять часто, то лучше сменить модель хранения и использовать Nested Set.
    CREATE FUNCTION SearchRoot(id INT)
    BEGIN
      DECLARE parent INT;
      SET parent = id;
      REPEAT
        SET id = parent;
        SET parent = (SEARCH `id_parent` FROM `table` WHERE `id` = id);
      UNTIL parent > 0 END REPEAT;
      RETURN id;
    END
    Ответ написан
    Комментировать
  • Стоит ли что-то менять?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Информация из книг, по большей части, выветрилась
    Потому, что
    за ненадобностью


    Нормально ли это, или ощущение, что я деградирую, правдиво?

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

    Возможно, стоит перечитать книги или взяться за новые(но зачем, если я не смогу применить знания в работе?

    Книги по конкретным технологиям, по языкам например - заново перечитывать не стоит, информация вероятнее всего там уже устарела)). По более общим "глубинным" вещам - вполне имеет смысл.

    На пет проекты нет времени, учеба+работа+3 часа на дорогу съездают все время

    Вы должны понимать, зачем делать пет проект. Это важно. Многие думают, что "вот напишу свое супер крутое решение и придет гармония в этот мир". Увы, это не так, вероятность что вы будете использовать свои же наработки на работе - довольно низкая еще и пропорционально зависит от вашего "веса" в компании.
    Ответ написан
    Комментировать
  • Где в Windows Forms подключаться к базе данных?

    @Sumor
    Мне кажется вопрос оптимизации подключения для приложения с одним полем и кнопкой добавить не самый актуальный, но:
    Время создания и закрытия соединения с базой данных определяется вашими условиями. Если соединение с базой данных жизненно необходимо программе, и она сразу же грузит из неё данные и продолжает взаимодействовать всё время своего запуска, то в этом случае соединение создают и хранят до завершения программы.
    Для некоторых программ, которые точечно взаимодействуют с базой данных, а также если между взаимодействиями возможно отключение БД или доступа к ней по сети, соединения создаются в момент обращения к БД и после работы соединение закрывают. Это как раз очень похоже на ваш случай. При этом можно учитывать, что в действительности физические соединения к базе данных не всегда сразу закрываются при закрытии DbConnection, а придерживаются на случай, если тут же понадобится его открыть.
    С другой стороны, возможно сам факт ошибки соединения с БД уже сообщит пользователю о проблемах и ему не придётся узнавать это после заполнения многостраничной формы ввода. В этом случае желательно проверить соединение до ввода пользователя.
    Ответ написан
    1 комментарий
  • Стоит ли учить сегодня ASP.NET и можно ли на этом заработать?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Начнем с терминологии, а то хейтеры тут не особо разбираются =) Между ASP и ASP.NET MVC разница примерно такая же, как между Java и JavaScript.
    Java - это язык, как и C#. Под них есть свои веб-фреймворки, такие как JavaEE, Spring для Java или ASP.NET MVC, NancyFX для C#.


    Учить ASP (classic ASP) или ASP.NET (который Web Forms) с нуля уже не стоит. А вот ASP.NET MVC - отличный выбор. Это уже достаточно зрелый фреймворк, на котором работает много серьезных проектов (таких, как StackOverflow) и которая востребована на рынке как в России, так и в мире.

    Сам C# достаточно интересный, активно развивающийся язык. Платформа себя чувствует неплохо на любых популярных устройствах. Хорошо развивается .NET Core, являющийся переосмыслением монолитного .NET Framework, позволяющий разрабатывать компатные кросслатформенные приложения, в том числе и с использованием ASP.NET Core, которые можно развертывать самостоятельно, без огромного сервера за спиной, аналогично Node.js.

    Конечно, с ASP.NET MVC не пофрилансишь и сайты-визитки разрабатывать не так удобно =) Но поддерживать крупные приложения - одно удовольствие.

    А Java - это уже такой динозаврик, который стагнирует в роли вечного догоняющего, потихоньку будет сходить на нет в ближайшее десятилетие. Да, платформа обеспечила себя специалистами, тоннами легаси-проектов, которые необходимо поддерживать, поэтому с работой и под нее проблем не будет и менеджеры часто выбирают эту штуку, как проверенное десятилетиями средство. Но с точки зрения обычного программиста, я не вижу смысла выбирать Java.
    Ответ написан
    3 комментария
  • Как найти одинаковые элементы массива объектов (в 1 массиве)?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Собрать коллекцию, примерно так:
    var result = new Dictionary<int, List<object>>();
    
    foreach (var item in arrComputer)
    {
      var c = (Comp)item;
      // проверяем, есть такой год в коллекции или нет
      if (!result.ContainsKey(c.year))
      {
        // такого года еще нет, добавляем
        result.Add(c.year, new List<object> { c });
      }
      else
      {
        // год есть, добавляем запись в него
        result[c.year].Add(c);
      }
    }
    
    // в result будет коллекция: год-компьютеры
    foreach (int year in result.Keys)
    {
      Console.WriteLine
      (
        "В {0} году на Земле вылупилось компьютеров: {1}", 
        year, 
        result[year].Count
      );
    
      if (result[year].Count > 1)
      {
        Console.WriteLine("Да это просто демографический взрыв какой-то!");
        foreach (var item in result[year])
        {
          Console.WriteLine("+ {0}", ((Comp)item).marka);
        }
      }
    }

    Вместо object можно сразу использовать Comp, если использование других типов не предполагается.
    Ответ написан
    Комментировать
  • Стоит ли поступать в ВУЗ, если есть опыт работы программистом?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    На вышке можно получить:
    * Диплом (полезен при трудоустройстве зарубежом и госструктуры, да и HR некоторые требуют)
    * На вышке можно получить продвинутые знания по математике и алгоритмике, разобраться с геометрией, иметь базу для работы с физическими движками, 3д и статистикой/мат анализом - если в этом направлении хоть во что-то у вас получится углубиться - перспективы устроиться куда-нить разрабатывать компьютерное зрение, работать с бигдата, нейросетями значительно повышаются.
    * Знакомых и кафедру, где возможно заведутся полезные связи.
    * Надежную отмазу от армии

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

    Судя по вашей истории - вы весьма развитый молодой человек, и для вас не должно составить большой проблемы заочно изучить вузовский материал.
    Ответ написан
    1 комментарий
  • Как лучше изучать C#?

    @Beltoev
    Живу в своё удовольствие
    Знания по C# можно тут получить/укрепить: metanit.com/sharp/tutorial
    ASP NET там же, в соседнем разделе: metanit.com/sharp/mvc5

    Думаю, проблем особо не должно возникнуть
    Ответ написан
    4 комментария
  • Каким уровнем знаний в веб разработке должен обладать программист чтобы переехать за границу?

    aRegius
    @aRegius
    Python Enthusiast
    Роман, приветствую.

    Посмотрите Часть 1 и Часть 2. Емко и по-существу волнующих вас вопросов.
    Ответ написан
    Комментировать
  • Актуальная информация по GeekBrains?

    bingo347
    @bingo347 Куратор тега HTML
    Crazy on performance...
    Не так давно получал предложение по работе от них типа "ищем крутых программистов для проведения обучающих вебинаров"
    Ок, позвонил, отвечает девушка, общаемся, некоторые выдержки:
    Я: У меня высшее образование по специальности "преподавание информатики" и 2 года пед стажа, работал в колледже по специальности
    Д: Главное, чтоб Вы были действительно крутым программистом!
    Я: как Вы поймете, что я действительно крутой программист?
    Девушка: это покажет тестовое задание

    Я: Для проведения вебинара понадобится какое-либо специализированное ПО?
    Д: да, у нас есть собственное ПО, мы Вам вышлем инстолятор и инструкции в случае если Вы будете работать у нас
    Я: Я сижу под линуксом, Ваше ПО запускается на линукс нативно?
    Д: Что такое линукс?

    Ладно, девушка просто HR, не будем придираться, на крайняк запустим под вайном их крутое ПО...

    Получаю тестовое задание:
    "Запишите ролик, где Вы рассказываете о своем ЯП и покажите примеры циклов на нем для новичков"
    Сомнения увеличиваются, как это может показать мою "крутость" как программиста?
    Ну ок, записать видео с экрана не проблема, лезу в ютуб за примерами и нахожу их канал, среди роликов нахожу запись вступительного вебинара, ролик выложен весной 2014 по node.js - смотрю, парнишка рассказывает народу какая крутая нода по сравнению с php, python и ruby, отвечает на вопросы, притом пропуская некоторые, которые посчитал неуместными, но убила фраза "я программирую на ноде более 5 лет", напомню что ролик выложен весной 2014, следовательно снимался еще раньше, а нода появилась летом 2009... у парня проблемы с математикой когда он врет...
    Вообщем потратил свои 2 часа и просмотрел вебинар полностью, все сводилось к тому, что нода реально крутая и жизненно вам необходима, только купите наш мега крутой курс
    И я решил, что не смогу так парить мозги людям, ради выкачивания из них денег, и работать у них не хочу, а освоится новичкам я и на тостере помогу...
    Ответ написан
    1 комментарий
  • Как эффективно работать целый день?

    @sarathorn
    php программист, веб-дизайнер, коллекционер
    Мне 20 лет, живу отдельно от родителей, зарабатываю фрилансом. Самое важное - организовать свой день.

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

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

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

    8 часов подряд кодить каждый день... Вы серьёзно? На этой неделе мои результаты такие: воскресенье - 12 часов кодинга, понедельник - 8, вторник - 8, среда - 6, четверг - 4, пятница - 3, суббота (сегодня) - нет ни малейшего желания, но очень надо хотя бы пару часов... Вы просто перегорите. Настраивайтесь на 4, максимум на 6 часов кодинга в день. Остальное время можно заполнить чтением документаций, проработкой прототипов на бумаге, обсуждениями с коллегами и боссом.

    Если ситуация требует 8-16 часов кодинга подряд (такое, увы, бывает), то меня спасают две вещи:
    1) Сериалы. Второй монитор, второй ПК, планшет или даже смартфон вам в помощь. Берёте сериал, который УЖЕ смотрели и включаете. Он должен быть интересный, но уже знакомый, это два обязательных требования. Так он не будет отвлекать от работы (сюжет же уже знаком, а половину реплик вы можете произнести вместо актёров), но создаст иллюзию отдыха. В моём случае можно всё привести к такому выражению: 60 минут кодинга = 80 минут кодинга под сериал. НО! Так я могу выдерживать 12-16 часов без особых усилий. Что в итоге даёт больше результата, чем 6-8 часов чистого кодига после которых я просто убитый на пару дней.
    2) Кофеин. Обычный кофеин. Кофе я не пью, а энергетики слишком дорогие для регулярного применения. Есть замечательная альтернатива - Кофеин-бензоат натрия. ~30рублей в аптеке за 6 таблеток. Максимальная разовая доза - 6 таблеток, она же 300мг кофеина. 1-2-3 таблетки мой организм может не заметить, а при шести я начинаю разговаривать сам с собой. Грань очень тонкая, но при правильной дозировке получается неплохой boost к производительности. Внимание! Кофеин может повышать давление и пульс, а также имеет ряд побочных эффектов. Передозировка может убить. Я не несу ответственности за последствия приёма кофеина.

    Смесь кофеина и прогулки (зима, 3 часа ночи, -20C) может породить тонну гениальных идей, увы, лишь 1 из сотни имеет шанс на успех в реальном мире.

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

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

    Непосредственно программирование (как и дизайн) идёт легче, если есть план и схемы. В моём случае при работе над back-end у меня 70% времени уходит на проектирование и проработку мелочей на бумаге, лишь 30% времени это сам кодинг. При работе с фронт-эндом я где-то 60-70% времени работаю, а 30-40% проектирую. Я так понимаю, вас не заставляют именно кодить 8 часов. Вас заставляют 8 часов сидеть на рабочем месте. Вот и прикиньте, что из них лишь где-то 3-4 часа будут самим кодингом. Хотя... Если работы очень много, вы не единственный кодер в конторе и есть более опытные, которые и берут на себя всё проектирование... ух... тогда остаётся только монотонно стучать по клаве...

    Ещё очень важный момент. ОБЯЗАТЕЛЬНО ОТДЫХАЙТЕ! В выходные не должно быть ни единой мысли о работе, после работы займитесь хобби, уберитесь дома, погуляйте, сходите в спорт зал, почитайте книгу, посмотрите кино, поспите в конце-концов. Никакой работы за пределами рабочего места. Этот трюк заставит мозг ассоциировать рабочее место с рабочим процессом, а значит уже не нужно будет самому его мотивировать работать. Это работает крайне просто. Если вы видите очень красивую девушку да ещё и без одежды, то кое-что что происходит с одним очень важным органом и мозг начинает работать совершенно иначе. И вот теперь в поле зрения попадает ваше кресло и ваш рабочий комп, мозг пробегается по ассоциациям и понимает, что надо работать. В паре с состоянием вынужденной необходимости всё сработает на ура.

    Перерывы - спорный момент. Мне проще проработать, например, 6 часов без перерывов (только если на отойти до туалета или до кухни, чтобы налить воды и стащить печеньку), чем 6-8 с перерывами. Я очень много времени и сил трачу на переключение с одного вида деятельности на другой.

    По поводу еды. В момент приёма и пищи и где-то следующий час я способен только читать и смотреть, но никак не творить.
    Ответ написан
    10 комментариев
  • Хорошие курсы по разработке в Москве?

    @docker1
    Ни на каких курсах вас не обучат "от и до", разве что основы дадут.
    Ответ написан
    Комментировать
  • ВУЗ в 22 или самообразование?

    Rou1997
    @Rou1997
    Программисту вообще не нужна математика сложнее двух- и трехмерной системы координат, она нужна программисту-математику, пример:
    https://hh.ru/vacancy/11544714
    Всему, чему человек учится, он учится сам, про это и поговорка есть, но еще есть сроки, программист-математик не может позволить себе учиться в процессе работы, это основное его направление и если он не имеет в нем опыта, то он жалкий стажер, а вот прикладной или системный программист может осваивать все необходимое по мере появления соответствующих задач, которые появляются нечасто.
    Но если вы собираетесь работать не на себя, а в фирме, то там есть требования разной бредовости, тогда основная задача - не поступать разумно, а соответствовать требованиям, чтобы устроиться и достичь основной цели - получения денег, конкретно не подскажу, поскольку никогда такое не практиковал и не собираюсь, но я бы сперва навел справки в этих самых фирмах, и сделал для себя выводы.
    Ответ написан
    Комментировать
  • Как уйти с распутья технологий?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Сложность задачи не особо влияет на мотивацию, а вот факт решения/нерешения - влияет сильно. Не решил - значит не осилил, не осилил - значит не достоин, не достоин - значит иди ко дну и не рыпайся. Это как импотенция: импотент - значит не мужик, не мужик - значит никто, ничего не достоин и об тебя можно ноги вытирать. Подсознание портит всю малину, так что не следует давать ему шанса - лучше решить задачу попроще, чем не решить по сложнее.
    Ответ написан
    7 комментариев
  • Какую литературу читать новичку по C#?

    Литература по языку C#

    Книги для новичков: а о чём это вообще?

    • Head First C#, Jennifer Greene, Andrew Stellman (русский перевод: Изучаем C#, Д. Грин, Э. Стиллмен). Содержит упражнения. Рекомендуется многими как хорошая книга для новичков.
    • Язык программирования C# 5.0 и платформа .NET 4.5 - Эндрю Троелсен. Популярная книга, многие начинали с неё.
    • C# 4.0: полное руководство, Герберт Шилдт. Несмотря на неоднозначное отношение к автору, книга пользуется популярностью.
    • C# 2010. Ускоренный курс для профессионалов, Нэш Трей
    Книги среднего уровня: если hello world не проблема
    • CLR via C#. Программирование на платформе Microsoft .NET Framework 4.5 на языке C#, Джеффри Рихтер. Неувядающая классика. Хотите знать, что и как происходит на самом деле? Это книжка для вас. Не самое живое изложение, зато максимум подробностей из первых рук.
    • C# 6.0 in a Nutshell, Joseph Albahari, Ben Albahari (русский перевод предыдущей версии:C# 5.0. Справочник. Полное описание языка, Джозеф Албахари, Бен Албахари). Отличная книга, затрагивает многие аспекты, расставляет по местам ваши знания о предмете. Сводит разрозненные отрывочные знания в общую понятную картину, объясняет, какими средствами нужно пользоваться, а для чего есть уже более хорошие подходы. Есть online-глава о многопоточности (русский частичный перевод), почитайте!
    • Essential C# 5.0, Mark Michaelis в сооавторстве с Эриком Липпертом. Хорошая книга для программистов, желающих овладеть C#. Знания других языков, перед чтением, приветствуются. От Эрика Липперта в книге представлены продвинутые советы, которые встречаются на протяжении всей книги.
    • Effective C# и More Effective C#, Bill Wagner. О том, как надо и как не надо программировать на C#. Разбираются отдельные аспекты программирования, способствует углублению понимания языка.
    • Programming C# 5.0: Building Windows 8, Web, and Desktop Applications for the .NET 4.5 Framework, Ian Griffiths. (Русского перевода пока нет.) Очень детальная, подробная книга, в которой найдутся ответы на продвинутые вопросы.

    Книги для специалистов: внутренние механизмы и пыльные углы

    • C# in Depth, Jon Skeet, Third Edition (русский перевод: C#. Программирование для профессионалов, Джон Скит, пока переведено лишь второе издание). Имя автораговорит само за себя. Джон один из лучших людей, которые умеют доходчиво объяснять сложные вещи.
    • C# 5 Unleashed, Барт де Смет. Фундаментальная книга.
    • Debugging Microsoft .NET 2.0 Applications, John Robbins (русский перевод: Отладка приложений для Microsoft .NET, Джон Роббинс). Основы промышленной отладки: WinDbg/SOS, дампы памяти и решение проблем в приложениях (почти) без Visual Studio.
    • Under the Hood of .NET Memory Management, Chris Farrell, Nick Harrison. Полное описание всех тонкостей управления памятью в платформе .NET. Книга доступнабесплатно на английском.
    • Expert .NET 2.0 IL Assembler, Serge Lidin. В книге представлены ответы почти на все тонкости низкоуровневого программирования на .NET, а именно на языке IL. В книге описаны детали .NET Framework 2.0, по этому на данный момент какие то аспекты могут быть не актуальны.
    • Оптимизация приложений на платформе .NET с использованием языка C#, Саша Голдштейн, Дима Зурбалев, Идо Флатов (Переводчик: Александр Киселев). В книге рассматривается моменты .NET с точки зрения производительности. Рассказывается об способах замеров и шаблонах оптимизации. Также там рассматриваются вопросы, связанные с GC и небезопасным кодом.

    Дополнительные ресурсы:

    • Официальная спецификация C# 5
    • Framework Design Guidelines. Руководства и соглашения по проектированию многократно используемого кода. Является выдержкой из одноимённой книги, Krzysztof Cwalina, Brad Abrams. Книга переведена на русский под названием Инфраструктура программных проектов, Кржиштоф Цвалина, Брэд Абрамс.

    Литература по асинхронному программированию и многопоточности

    • Concurrent Programming on Windows, Joe Duffy. Профессиональное использование многопоточности в инфраструктуре .NET от одного из лучших мировых специалистов по многопоточности. В книги описаны тонкости использования как stream'oв так и thread'ов. Раскрыто, как и когда использовать Concurrent-, Parallel- и Asynchronous-модели. Примеры в книге присутствуют от достаточно низкоуровневых (с использованием системных потоков через WinAPI) до высокоуровневых Task'ов и PLINQ. Книга написана под .NET Framework 4.0, поэтому работа с ключевыми словами async/await в книгу не вошла.
    • Concurrency in C# Cookbook, Stephen Cleary. (Русского перевода пока нет.) Очень толковое разъяснение современных паттернов использования многопоточности, особое внимание уделено использованию конструкции async/await. Обсуждается решение типичных проблем, решаемых асинхронным кодом. Отдельно описывается работа с Reactive Extensions и TPL Dataflow.

    Литература по WPF
    • Pro WPF 4.5 in C#: Windows Presentation Foundation in .NET 4.5, Matthew MacDonald (русский перевод: WPF: Windows Presentation Foundation в .NET 4.5 с примерами на C# 5.0 для профессионалов, Мэтью Макдональд). Разбор XAML'а, лаконичные, но полезные примеры. Пристальное, но не навязчивое внимание к деталям.
    • Windows Presentation Foundation Unleashed, Adam Nathan. Наверное, лучшая книга для новичка.
    • Applications = Code + Markup: A Guide to the Microsoft Windows Presentation Foundation, Чарльз Петцольд. Фундаментальная книга великолепного специалиста. Написана довольно тяжело, много листингов, плотный поток информации

    Литература по ASP.NET
    • Pro ASP.NET MVC 5, Adam Freeman (русский перевод: ASP.NET MVC 5 с примерами на C# 5.0 для профессионалов, Адам Фримен). Поэтапное написание веб-приложения с рассмотрением большинства важных аспектов разработки приложения: паттерн MVC, юнит-тестирование, инверсия зависимостей и т. п.
    • Pro ASP.NET 4.5 in C#, Adam Freeman (русский перевод: ASP.NET 4.5 с примерами на C# 5.0 для профессионалов, Адам Фримен).
    • Professional ASP.NET MVC 5, Jon Galloway, Phil Haack, Brad Wilson, K. Scott Allen
    • Programming ASP.NET MVC 4: Developing Real-World Web Applications with ASP.NET MVC, Jess Chadwick, Todd Snyder, Hrusikesh Panda (русский перевод: ASP.NET MVC 4. Разработка реальных веб-приложений с помощью ASP.NET MVC, Джесс Чедвик, Хришикеш Панда, Тодд Снайдер).
    • ASP.NET MVC Framework, Гайдар Магдануров, Владимир Юнев
    • Pro ASP.NET MVC 2 Framework, Steven Sanderson (русский перевод: ASP.NET MVC Framework с примерами на C# для профессионалов, Стивен Сандерсон)
    Дополнительные ресурсы:
    • Get Started with ASP.NET от Microsoft
    • Видеокурсы на intuit.ru: Разработка веб-приложений на ASP.NET, Разработка веб-приложений с использованием ASP.NET MVC Framework.

    Литература по LINQ
    • Pro LINQ: Language Integrated Query in C# 2010, Joseph Rattz, Adam Freeman (русский перевод: LINQ. Язык интегрированных запросов в C# 2010 для профессионалов, Адам Фримен, Джозеф С. Раттц). Учебно-справочное пособие, в котором понятно и подробно описаны возможности языка LINQ. Хороша для старта.
    • LINQ Pocket Reference, Joseph Albahari, Ben Albahari (русский перевод: LINQ. Карманный справочник, Джозеф Албахари, Бен Албахари). Хороший справочник по всему, что относится к LINQ. Рассмотрены новые конструкции C# для поддержки LINQ. Много примеров.
    • C# in Depth, Jon Skeet (русский перевод: C#. Программирование для профессионалов, Джон Скит). Немалая часть книги посвящена тому, как работает LINQ.

    Литература по принципам, шаблонам и методикам разработки
    • Внедрение зависимостей в .NET, Марк Симан. Несложно написанная книга про управление зависимостями в приложениях.
    • Принципы, паттерны и методики гибкой разработки на языке C#, Роберт С. Мартин, Мика Мартин

    Литература по Windows Workflow Foundation
    • Essential Windows Workflow Foundation, Dharma Shukla, Bob Schmidt (русский перевод:Основы Windows Workflow Foundation, Дхарма Шукла, Боб Шмидт). Для тех, кого заинтересовала 26 глава («Введение в Windows Workflow Foundation») из книги Эндрю Троелсена Язык программирования C# 5.0 и платформа .NET 4.5.
    • Pro WF 4.5, Bayer White (русской версии нет). Более углубленный взгляд на WF.

    Литература по XML
    • XML.NET, Джо Грей, Динар Дальви, Бипин Джоши, Фредрик Нормен, Фрэнсис Нортон, Энди Ольсен, Дж. Майкл Палермо IV, Даршан Сингх, Джон Слэйтер, Кевин Уильямс (Переводчик: И. Штерев). В книги содержится всё про применение XML в .NET за исключением LINQ. Старовата уже, но зато там есть объяснение, как внедрить свои функции на C# в XSLT.

    Литература по ADO.NET
    • Основы ADO.NET, Боб Бошемин (Переводчики: О.А. Лещинский, А.В. Журавлев, Н.Н. Селина)

    Литература по .NET Remoting / WCF
    • Microsoft .NET Remoting, Скотт Маклин, Джеймс Нафтел, Ким Уильямс
    • Создание служб WCF, Джувел Леве (Переводчики: Е. Матвеев, А. Пасечник)

    Литература по безопасности
    • Криптография и безопасность в технологии .NET, Питер Торстейнсон, Гнана Ганеш (Переводчик: В. Хорев). Книга дает представление .NET разработчику о реализации и применении криптографии, цифровой подписи, аутентификации, авторизации и доступа к коду (CAS). В ней описывается, что такое симметричное и асимметричное шифрование, что представляют собой цифровые подписи и как их использовать в .NET приложениях.
    • Microsoft ASP.NET. Обеспечение безопасности, Доминик Байер. Не смотря на то, что в названии указано ASP.NET в книге рассматриваются технологии безопасности под Windows, применимые из .NET для всех типов приложений. Это аутентификация, авторизация, олицетворение и Membership.
    Ответ написан
    5 комментариев
  • Как сделать многопоточный чат?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    у вас должен быть один основной поток, где вы ожидаете подключения. При подключении у вас создается сокет, который вы кидаете в отдельный тред.

    Socket clientSocket = serverSocket.accept();

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

    Хочу отдельно отметить, что при увеличении количества потоков производительность будет падать. При достижении отметки в пару сотен клиентов например. В этом случае лучше переключаться на event loop/микротреды/корутины.
    Ответ написан
    1 комментарий
  • C# Как считать из файла, первые 1000 байт в массив байт?

    @Maa-Kut
    byte[] bytes = new byte[1000];
    using(var stream = File.OpenRead(fileName))
    {
        int count = stream.Read(bytes, 0, 1000);
    }


    Если надо прям 10%, то чуть посложнее:
    var fileInfo = new FileInfo(fileName);
    int chunkSize = fileInfo.Length / 10;
    byte[] bytes = new byte[chunkSize];
    
    using(var stream = fileInfo.OpenRead())
    {
        int count = stream.Read(bytes, 0, bytes.Length);
    }
    Ответ написан
    4 комментария
  • Как решить, казалось бы, простую задачу на python3?

    aRegius
    @aRegius
    Python Enthusiast
    Привет.

    1. Есть два числа, x и y (целые положительные).
    2. Есть их разность, z (z = x - y)
    3. Чтобы найти большее из них, всего-то нужно сумму этих двух чисел и их разности разделить на 2:
    max_num = (x + y + z)/2
    4. Единственная "засада" в том, что, ввиду неопределенности чисел, их разность может быть отрицательным числом (например, x = 5, y = 853, x - y = - 848).
    5. Поэтому нам надо обеспечить, чтобы разность, при любом раскладе, была положительная.
    6. Для этого мы эту самую разность возводим во вторую степень и извлекаем из результата квадратный корень - для того, чтобы код был менее шумный, разделим эту процедуру на два этапа: a) z = (x - y) ** 2; б) z = z ** .5

    7. Итоговый код:
    z = (x - y) ** 2
    z = z ** .5
    max_num = (x + y + z) / 2
    Ответ написан
    2 комментария
  • Верен ли такой подход к изучению программирования?

    Denormalization
    @Denormalization
    В современном мире 80% задач решается копипастом чужого кода и небольшой правкой. (Британские учены доказали).
    Для типовых задач уже давно существуют готовые решения. Не нужно изобретать велосипеды, а тем более комплексовать из-за этого.

    Вам же стоит не просто копировать чужой код и разбираться в нем, но и попробовать его воспроизвести.
    Т.е как-то так:
    - Копипастим
    - Разбираемся почему и как оно работает
    - Удаляем все, создаем новый проект и пишем все с нуля без подсказок (ручками).

    Такой подход будет более эффективен.

    Но все люди разные, и каждый обучается так, как ему удобно. Если вы считаете что вы хорошо усваиваете материал подобным образом, то ничего страшного в этом нету. Просто попробуйте воспроизвести результат с нуля, и если у вас получится - вы действительно усвоили как это делать.
    Ответ написан
    3 комментария
  • Какие есть ресурсы по .net?

    ImmortalCAT
    @ImmortalCAT
    C# loving
    metanit.com
    msdn.com
    Ответ написан
    Комментировать
  • Как лучше реализовать приложение "Расписание ВУЗа"?

    LeEnot
    @LeEnot
    Енот-андроид
    Вы замахиваетесь на создание программного комплекса.
    Для создания функционального продукта вам нужно обеспечить создание и редактирование расписания, его хранение и доставку до конечного пользователя (преподаватели и студенты).
    1. Для хранения вам нужно спроектировать и реализовать базу данных.
    В БД нужно реализовать поддержку различных факультетов/групп, разграничение прав доступа на создание/редактирование, группы пользователей (студенты-преподаватели-декан-админы). Наиболее простой и доступный вариант - MySQL
    2. Для передачи данных на мобильный телефон вам нужно спроектировать и реализовать REST Api. Реализуется в виде отдельного приложения для той ОС, на которой работает университетский сервер.
    3. Собственно приложение занимается отображением данных.

    Однако тут я вижу пару сложностей.
    1. Человеческий фактор. Для того, чтобы вашей системой пользовались, она должна быть удобна. То есть, не только вам, но и тем, кто будет смотреть расписание, а так же тем, кто его будет создавать/редактировать.
    Word вы в формат БД не переведете автоматом, а учиться работать с БД только для заполнения расписания никто не захочет. Вывод - нужно делать интерфейс работы с БД для обслуживающего персонала.
    Так же, далекто не у всех Android смартфоны, так что iOS вы оставляете "в пролете". Для обеспечения доступности расписания желательно сделать веб-интерфейс. Тогда можно будет заходить и с ПК, но этим вы добавляете еще одно звено в ваш комплекс.
    2. Сложность системы для реализации. В отсутствие опыта и силами одного человека невозможно изучить все представленные темы, а уж сделать качественный продукт - тем более.
    3. Неочевидный, но очень важный фактор - UI/UX, то есть, дизайн и юзабилити. Это отдельная и достаточно объемная задача, когда для каждой части комплекса, имеющей интерфейс нужно делать дизайн-макет, тестировать его на контрольной группе конечных пользователей, исправлять и так далее.
    Ответ написан
    Комментировать