Задать вопрос
  • Стоит ли идти из радиотехники в IT?

    @glenean
    Нужно выбрать смежную область, например микроконтроллеры или ПЛИС.

    Буквально сегодня ввел на youtube запрос "DSP" или "сигнальные процессоры" с желанием посмотреть какие-то уроки, но ничего на русском языке не нашел.

    Лекции физтеха:
    "Цифровая обработка сигналов"
    1-я лекция из курса "Цифровая обработка сигналов"
    ДВПФ периодических последовательностей
    Дискретный во времени ряд Фурье
    Ответ написан
    2 комментария
  • Как легче освоить внедрение зависимостей, code-first, TDD и паттерны?

    Valeriy1991
    @Valeriy1991
    Разработчик .NET C# (ASP.NET MVC) в Alfa-B, Moscow
    Добрый вечер! Спасибо за приглашение.
    На мой взгляд, Вам следует придерживаться следующих приоритетов по изучению:
    1. внедрение зависимостей более важно из Вашего списка, т.к. относится к SOLID принципам;
    2. TDD - на мой взгляд, вещь более нужная для изучения, чем code-first или patterns. Сам не так давно начал разрабатывать по TDD. Это очень здорово, что изобрели такой подход. Экономит тонну времени на ручное тестирование, а также дает быстрое понимание, что и где случайно (или неслучайно) сломалось. Главное - понимать, что покрывать тестами;
    3. третьим в список я бы добавил AngularJS или KnockoutJS или BackboneJS - сам пока что не изучил их и не начал применять, но судя по их популярности и преимуществам - думаю, Вам стоит с ними ознакомиться;
    4. code-first или database-first - не так уж и важно на Вашем этапе понимания. Главное отличие подхода Code-first: 1) модель пишется вручную, в связи с чем не нужно постоянно отслеживать edmx-диаграмму (т.е. можно считать, что Ваша code-first модель всегда находится в актуальном состоянии); 2) поддерживает миграции БД. В Database-first Вам нужно самому отслеживать актуальность состояния Вашей edmx-модели - с этим тоже могут быть проблемы. Опять же - только с опытом. С другой стороны, Database-first позволяет наглядно видеть Вашу модель, а вот Code-first - нет;
    5. паттернами тоже можете пока что голову не забивать. Безусловно, это нужно, но понимание их придет только с опытом (признаюсь честно: я сам не до конца все паттерны знаю и понимаю). На мой взгляд, важно соблюдать 1 основной паттерн - 3-уровневая архитектура (клиентский слой, слой бизнес-логики, слой работы с данными).

    Теперь по MVC.
    1. Model - тут, в принципе, всё просто: модель данных. Здесь можно поспорить, что иметь в виду под Моделью: модель самих данных или модель представления. Лично я после опыта работы с шаблоном MVVM в WPF под моделью данных в терминах ASP.NET MVC понимаю модель представления, а под термином "модель данных" - саму доменную модель (EF code-first, например). Кто-то может сказать, что это "лишняя работа" - по упаковыванию модели данных из EF-объектов в объекты модели представления. Да, частично соглашусь. Но зато это дает некую гарантию безопасности, что случайно пользователь не поменяет важную часть модели данных (например, ID).
    2. Контроллер. Основная задача контроллера - сформировать данные для отображения и передать эти данные в представление. Т.е. нужно стремиться к тому, чтобы код метода действия в контроллере содержал минимум кода. В идеале - вызов метода из слоя бизнес-логики и передача полученных данных в представление. Если Вы видите, что метод действия в контроллере содержит какую-то бизнес-логику, то это сигнал к рефакторингу: Ваш метод действия слишком много знает. По опыту могу добавить, что в среднем код метода действия содержит от 2 до 20-30 строк кода (с учетом того, что скобки { и } расположены на отдельных строках).
    3. Представление. Тут тоже всё просто: отобразить данные (из модели представления). Ни в коем случае нельзя в представлении писать логику по работе с самими данными, например, так делать нельзя:
    <div id="account">
        @{
            using(var db = new MyEfDbContext()
            {
                var userAccount = db.Accounts.FirstOrDefault(e => e.Username == User.Identity.Username);
                if(userAccount != null)
                {
                    @:Имя: @userAccount.Name
                    @:Фамилия: @userAccount.LastName
                }
            }
        }
    </div>


    Если у Вас 3-уровневая архитектура, например, есть слои:
    1. MyApp.MVC - MVC-application
    2. MyApp.BL - слой бизнес-логики
    3. MyApp.DAL - слой работы с данными
    то в представлении (View) вызывать напрямую сервисы бизнес-логики тоже нельзя, особенно, если Вы используете DI-принцип (внедрение зависимостей) и IoC контейнер. Т.е. такой пример недопустим:
    <div id="account">
        @{
            var accountService = new MyApp.BL.AccountService();
            var userAccount = accountService.GetUserAccountByUsername(User.Identity.Name);
            if(userAccount != null)
            {
                @:Имя: @userAccount.Name
                @:Фамилия: @userAccount.LastName
            }
        }
    </div>

    Попробую донести мысль архитектора и разработчика Александра Шевчука (преподавателя с http://itvdn.com): "Одна из главных целей при разработке - стремиться к упрощению системы". Ослабление зависимостей позволяет нам упрощать систему благодаря тому, что изменение осуществляется только на 1 каком-то слое/уровне. Если Вы во View вынесете логику по работе с данными, а уж тем более, как в примерах выше, работу с EF-контекстом, то Вы усилите зависимость одного компонента системы (MVC-слоя) от другого (слоя работы с данными или слоя бизнес-логики). Усиление зависимостей приводит к бОльшему числу изменений, что в свою очередь сказывается на повышении расходов на эту систему. Ослабление зависимостей приводит к меньшему числу изменений (например, при переходе от EF к native SQL или NHibernate затрагивается только слой работы с данными, а слой MVC и бизнес-логики не меняются), а значит, к более раннему выпуску системы или очередного релиза, и как следствие, снижение расходов (не только денежных, но и других ресурсов) на разработку. TDD тоже можно отнести к практикам, которые снижают затраты ресурсов на содержание системы. Но это я ушел в глобальное...

    Правильным будет подход, при котором у Вас снижается зависимость компонентов системы друг от друга, в случае с ASP.NET MVC приложением, на мой взгляд, это когда:
    - View знает о модели (я по прежнему буду иметь в виду модель представления - ViewModel, которые объявлены либо в MVC-слое, либо в слое бизнес-логики);
    - контроллер знает о слое бизнес-логики, обращается к нему за выполнением операций и получением ViewModel'ей, после чего передает во View полученную ViewModel (ну или JSON-данные);
    - Model формируется по принципу, грубо говоря, почти на каждую View своя модель.

    Фразу "правильным будет подход" я обосновываю тем, что у такого подхода есть масса плюсов (которые очевидны опытным разработчикам, но могут быть не до конца или неправильно поняты менее опытными коллегами, а именно):
    + View ничего не знает о доменной модели (только о ViewModel), благодаря чему Вы можете спокойно менять свою доменную модель, не внося изменений во View (см. выше про ослабление зависимостей и снижение количества связей). Также Вы спокойно можете перейти от EF к NHibernate или к native SQL, или использовать и то, и другое - View об этом никогда не узнает;
    + контроллер (да и весь MVC-слой) знает только о существовании слоя бизнес-логики, но ничего не знает о слое работы с данными.
    + если на View делать отдельную ViewModel, то это позволяет более полноценно управлять тем, что нужно показать пользователю. Т.е. дает возможность большего контроля отображаемых данных, повышает безопасность Вашего приложения (пользователь, например, не сможет изменить ID просматриваемой записи, если этого ID нет вообще в модели представления).

    Ну а вообще все зависит от задачи/проекта: нужно ли применять разбивку на слои или использовать ViewModel'и вместо обычных доменных моделей - надо думать над каждой ситуацией отдельно.

    P.S. На мой взгляд, литературу выбрали правильно - я тоже начинал изучение MVC с нее. Понравилась тем, что дается сначала общее описание и работа с ASP.NET MVC на сквозном примере. А потом идет более глубокое погружение в ASP.NET MVC. По разработке могу посоветовать блог Александра Бындю: blog.byndyu.ru Как мне кажется, там очень хорошо некоторые моменты разжевываются, в том числе SOLID, TDD, шаблон Repository, UnitOfWork и др.
    Ответ написан
    2 комментария
  • Почему не стоит вызывать методы в конструкторе?

    @smozhaykin
    На самом деле вызывать не стоит только виртуальные методы. Т.к. если класс наследник его переопределит, то возникнет ситуация, когда метод работает до вызова конструктора класса-наследника. И если в этом методе используются какие-нибудь поля класса-наследника, они могут быть еще непроинициализированы.

    А так как в Java

    In Java, all non-static methods are by default "virtual functions." Only methods marked with the keyword final, which cannot be overridden, along with private methods, which are not inherited, are non-virtual.


    то в конструкторе не стоит вызывать любые публичные не final методы.

    Ниже C# код (т.к. работаю в основном с этим языком), иллюстрирующий это.

    void Main()
    {
    	new B("name");
    }
    
    class A
    {
        public A()
    	{
    	     Method();
    	}
    	
    	protected virtual void Method()
    	{
    	}
    }
    
    class B : A
    {
        private string Property { get; set; }
    	
    	public B(string value)
    	{
    	    Property = value;
    	}
    	
        protected override void Method()
    	{
    	    Console.WriteLine(Property.Length);
    	}
    }


    Результат: Object reference not set to an instance of an object.

    StackTrace
    at UserQuery.B.Method()
    at UserQuery.A..ctor()
    at UserQuery.B..ctor(String value)
    at UserQuery.Main()
    Ответ написан
    Комментировать
  • В какой программе создавать резюме в формате PDF?

    rasswet
    @rasswet
    еще можно из любой программы распечатать на виртуальный пдф принтер, например doPDF. Он бесплатный.
    Ответ написан
    Комментировать
  • Как всё успевать и не быть роботом?

    lasto4kin
    @lasto4kin
    Свободный специалист, Графический дизайн, Анимация
    Заведите дневник, куда будете вносить все дела за день, вплоть до "посидел на Хабре".
    Через месяц вы начнете, а может быть и раньше, замечать, что в самые продуктивные дни, вы работаете "в чистую", без перерывов и отвлечения, не более 3-4 часов. Все остальное время вы тратите на общение, самообразование и развлечение. Это нормально, и это еще крайне высокий показатель продуктивности для человека, работающего головой.

    8 часов да, это рабочий день, но лучше всего работать в режиме: час работы/ час что-то другое, отдых. В итоге и набежит 7-8 часов.

    Дневник, это еще и распределение задач на день, это позволяет экономить время в течении рабочего дня на мысли "чем же заняться", потратьте 20 минут утром, сэкономив пару часов на "тупление".

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

    Структурируйте свой день. Определите график работы, выделите время на хобби, здоровье. Судя по всему, это у вас еще семьи и детей нет. Поверьте, дети вносят конкретный деструктив в рабочий день, и если у вас нет выработанной системы, вы рискуете на годы потерять эффективность в качестве фрилансера, работающего дома.
    Ответ написан
    1 комментарий
  • Как реализовать небольшую БД к серверу на C#?

    dasha_programmist
    @dasha_programmist
    ex Software Engineer at Reddit TS/React/GraphQL/Go
    ravendb.net
    embedded-mode
    в проект подтягиваешь нугетом
    Ответ написан
    1 комментарий
  • В каком порядке учить c# по тролсену?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Я бы рекомендовал читать вначале всю первую половину (части I - V, главы 1 - 18), а затем читать те остальные части, которые интереснее и важнее для вас.
    Первые пять частей - основы самого языка c# и основы .net. Это пригодится всегда и в любом типе проектов. Разве что, пятая часть не так важна, как предыдущие части, но в любом случае - осознание в пятой части даёт понимание того, как шарп работает вообще.
    А вот в остальных частях рассматриваются конкретные технологии - работа с БД и сетевые программы, работа с оконными приложениями, и создание сайтов.

    В части VI рассматриваются три подхода работы с БД, каждый из них нужен для изучения, хотя использовать вы будете EF (или LINQ to SQL, который в книге не рассматривается). Также в разделе рассматривается работа с сетевым программированием - как передать денные из одной программы в другую (или из двух экземпляров одной программы). Если это вам сейчас не так важно, то вы можете для начала изучить WPF и/или ASP.NET, а потом вернуться к этому разделу.

    Раздел VII рассказывает об оконных программах. Забудьте про WinForms, и используйте WPF - он намного мощнее и удобнее. Единственно, для чего может пригодиться WinForms - это поддержка старых проектов, а также кросс-платформенные платформы (хотя там тоже есть варианты с WPF). В книге не рассмотрены паттерны проектирования, поэтому отдельно изучите паттерн MVVM. Даже сейчас вы не планируете изучать WPF И оконные Win-приложения, то всё равно потратьте время - какой же вы программист, который не может сделать калькулятор? :)

    Раздел VIII рассказывает о создании сайтов с помощью ASP.NET. Но этот раздел самый бесполезный из всей книги - сейчас сайты на ASP.NET делаются по другому, чем автор описывает - гораздо лучше использовать ASP.NET MVC (а вскоре выйдет релиз ASP.NET MVC 5.0, где многое также изменится). Хотя этот раздел всё-равно полезный, благо, не очень большой.
    Ответ написан
    5 комментариев
  • Что должен уметь junior .net разработчик?

    goodprogrammer
    @goodprogrammer
    к. ф.-м. н.
    Ответ написан
    Комментировать
  • Программа "Информационное окно" для компьютеров в локальной сети?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Если вы хотите не только сделать проект для портфолио, но и научиться, то вам нужно узнать, как сейчас делают промышленные проекты.

    Во-первых, это WPF, никакого WebForms. Научитесь использовать привязки (bindings).
    Во-вторых, обязательно освойте MVVM - этот паттерн заметно улучшает архитектуру проекта, особенно большого.
    В-третьих, ознакомьтесь (а лучше - попробуйте) с паттернами проектирования (читайте "банду четырёх").
    В-четвёртых, научитесь использовать системы контроля версий - Git (можно и SVN может пригодиться). Заодно, свой проект выложите на гитхаб.

    Если вы уже неплохо знаете C# в частности и программирование вообще, то настоятельно рекомендую книгу Эндрю Троелсена "Язык программирования C# 5.0 и платформа .NET 4.5". Это не учебник по программированию. Это основательнейший труд (более 1300 страниц!) обо всём - о языке C#, о .NET, о WPF, о ASP.NET, о сетевом программировании.

    А о самой программе вам хорошо ответил Антон Федорян.
    Ответ написан
    Комментировать
  • Программа "Информационное окно" для компьютеров в локальной сети?

    AnnTHony
    @AnnTHony
    Интроверт
    Обычное клиент-серверное приложение. Пишите сервер (работает на какой-то одной машине), пишите клиента (запускаете на 5 машинах с коннектом к серверу). На клиентах создаете обработку всяких нажатий кнопок, очистки полей и т.д. с отсылкой команды серверу. Сервер принимает команду и отсылает ее всем остальным клиентам.

    Вот в качестве примера
    Ответ написан
    Комментировать
  • Что должен знать junior С#?

    Вопросы, которые надо обязательно знать и часто спрашивают тут
    Ответ написан
    Комментировать
  • Что должен знать junior С#?

    Что нужно знать, чтобы стать .Net разработчиком?
    Какие требования к разработчику уровня junior?
    Вебинар на тему "Анализ требований на позицию Juni...
    Семинар Junior Middle Web Developer. Анализ требов...
    https://www.youtube.com/user/CBSystematicsTV/searc...

    От Senior`a - Junior должен знать все, но при этом у него мало практического опыта и он часто не способен самостоятельно решать задачи, требуется постоянного его направлять. Со временем чем меньше ему требуется помощи и он становится более самостоятельным, тем ближе он к Regular/Middle.

    Знать и уметь это разные навыки.

    Станислав Макаров согласен про финансы. Вопрос не такой простой. float вообще использовать не желательно.
    float и double следуют спецификации IEEE 754 формата представления чисел с плавающей точкой.
    decimal не имеет специальных значений, и примерно в 10 раз медленнее чем double.
    Типы float и double внутренне представляют числа в двоичной форме. По этой причине точно представляются только числа, которые могут быть выражены в двоичной системе счисления. На практике это означает, что большинство литералов с дробной частью (которые являются десятичными) не будут представлены точно.
    Именно поэтому типы float и double не подходят для финансовых вычислений. В противоположность им тип decimal работает в десятичной системе счисления и, таким образом, может точно представлять числа, выразимые в десятичной системе (а также в системах счисления с основаниями-множителями 10 — двоичной и пятеричной).
    Ответ написан
    1 комментарий
  • Есть курс по английскому языку для программиста?

    2ord
    @2ord
    Лучший курс в данном случае - читать новости по ИТ тематике на английском. Постепенно словарный запас пополнится так, что будешь свободно владеть техническим уровнем и даже выше.
    Ответ написан
    Комментировать
  • Как эффективно изучать JS?

    @Scribblex
    Я рекомендую изучать JS примерно таким путем:
    – чтение learn.javascript.ru (чтение и, естественно, практика);
    – параллельное прохождение модулей по JS на codeschool;
    – держите перед глазами актуальные вопросы для собеседования JS-разработчика (habrahabr.ru/post/239065/), стараясь на них ответить;
    – читайте хороших авторов: Дуглас Крокфорд, Джон Рейзиг, Стоян Стефанов;
    – найдите на GitHub людей, которые согласятся ревьюить Ваш код, я серьезно!

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

    Желаю успеха!
    Ответ написан
    10 комментариев
  • Почему после переключения языка не отвечает первая нажатая клавиша?

    @raincons
    Скорее всего вы отпускаете сперва alt а затем shift. Винда при этом остается в режиме выбора меню хоткеем, он и съедает первый символ.

    p.s.: проверил у себя, возникает если нажимать shift затем alt, а отпускать alt затем shift
    Ответ написан
    1 комментарий
  • Вы тоже постоянно всё забываете из программирования?

    @JuniorNoobie
    Сижу в поддержке, пишу мелкие проекты
    Я тоже все постоянно забываю. Причем иногда мне кажется, что то, что я писал года два-три назад "красивее" и "правильнее" того, что я пишу сейчас. Хотя должно быть наоборот)
    Открываю свой код и поражаюсь: как будто кто-то другой писал...
    Ответ написан
    2 комментария