Обучение программированию c#

Формула программиста

основатель — Волосатов Евгений Витольдович

Клуб формулистов - Ежемесячная подписка

Вступление в Клуб Формулистов на выгодных условиях для НОВЫХ участников.

После взноса  999  499 руб. вы получите подписку
в Клуб Формулистов на 30 дней и 256 байт для быстрого старта.
Байты используются для открытия более одного урока в день, по 50 байт за урок.

Стоимость 1 дня за первый месяц: всего 16 рублей.

Первый взнос - 499 руб./30 дней.

Через 30 дней будет списано 3,000 2,400 руб.
за продление подписки в Клуб на 30 дней + подарок 512 байт.

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

Только ДО КОНЦА НЕДЕЛИ -
-50% скидка на первый взнос, всего 499 (вместо 999) рублей!
-20% скидка на ЕЖЕМЕСЯЧНЫЙ платёж!
Всего 2400 руб/месяц (вместо 3000 руб/месяц), или 80 руб./день - цена чашки кофе.


Стоимость 1 дня: 80 руб.

Хочу вступить!

Также есть другие варианты оплаты участия в КФ:

Билет в клуб формулистов на ...
30+ дней | 60 дней | 150 дней | 380 дней | 1000 дней

Внимание!
Стоимость участия в Клубе формулистов увеличивается 1 числа каждого месяца на 100 рублей.
При оформления подписки стоимость остаётся постоянной, пока подписка не будет отменена.







Первый взнос - 499 руб./30 дней + 500 байт.
Последующие взносы - 3,000 2400 руб./месяц + 512 байт.



Список уроков | фото | видео

# Название видеоурока Видео / Тесты Решило Рейтинг Доступ
1 FREE Singleton - Intro 00:05:31
57 чел. ★ 4.9 Done
  Рекомендуемая литература:

Отчёт отправил: 10558. Иван Воронин Выполнено за 10 мин. [Показать отчёт]
Научился: Структуре синглтона 
Сложности: найти время 
Комментарии: Похожее использовал не раз, но именно в таком ракурсе, интересно посмотреть это в работе. 
2 Singleton - Config - Final 00:06:48
45 чел. ★ 5 Done
  Мы начинаем серию коротких уроков по созданию класса
считывания данных из конфигурационного файла.
Для начала мы организуем несколько конфигурационных параметров
в виде констант и расположим их в основном классе Program.
Отчёт отправил: 10558. Иван Воронин Выполнено за 10 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: Данный способ хорошо подходит для хранения каких-то важных, внутренних настроек ПО, которые не хотелось бы, чтобы кто-либо менял, в нашем случае параметр даты рождения не изменен, имя и фамилия по сути разрешено менять, отчасти верный метод, а вот вес меняется периодически и данный способ не подходит, лучше вынести его в конфиг или сделать не final, чтобы можно было поменять в процессе работы приложения или запросить это значение при запуске. 
3 Singleton - Config - Git init 00:03:42
1 тест
45 чел. ★ 5 Done
  На этом уроке мы про инициализируем git репозиторий
для проекта, который мы создали на прошлом уроке.
Систему git мы будем использовать для контроля версий
наших исходников, коммититить рабочие варианты
решения одной и той же задачи, да и просто
дополнительная практика использования git в разработке.
Отчёт отправил: 10558. Иван Воронин Выполнено за 5 мин. [Показать отчёт]
Научился: Ничему 
Сложности: найти время 
Комментарии: Полезное действие, в будущем очень интересно пройтись по истории изменений кода, бывает что замечаешь то, на что ранее не обратил внимание и приходят новые идеи, так же git помогает не делать банальных ошибок в коде, от чего код становится чище. 
4 Singleton - Config - Static 00:09:39
44 чел. ★ 5 Done
  На этом уроке мы продемонстрируем, как
обращаться к константам из отдельного класса.
Для этого мы создадим новый класс Process(),
добавим в него метод demo(), в котором реализуем
вывод данных из констант класса Program().
Константы необходимо будет сделать статичными.
Так же мы порефакторим имена констант,
чтобы они были по стандарту ЗАГЛАВНЫМИ буквами.
Отчёт отправил: 10558. Иван Воронин Выполнено за 15 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: Я ещё вначале урока сделал имена заглавными, а потом позже и на видео решили это сделать =) намного веселее прошлого варианта, так как доступ к настройкам из любой части кода программы, но идём дальше, изучаем варианты и выбираем лучшее. 
5 Singleton - Config - Git add 00:02:20
42 чел. ★ 5 Done
  На этом уроке мы зафиксируем очередные изменения
нашей программы с помощью команды commit в git репозитории.
Для начала мы посмотрим, что изменилось с последнего коммита.
Добавим изменённый и новый файлы на сцену и
закоммитим их в историю репозитория для фиксации
очередной рабочей версии нашей программы.
Отчёт отправил: 10558. Иван Воронин Выполнено за 5 мин. [Показать отчёт]
Научился: Ничему 
Сложности: найти время 
Комментарии: Всё ок, идём дальше. 
6 Singleton - Config - Class 00:05:13
40 чел. ★ 5 Done
  На этом уроке мы выделим всё, что касается
конфигурации в отдельный класс.
Для этого мы создадим новый класс Config()
и перенесём туда наши константы.
Так же нам нужно будет исправить появившиеся ошибки,
указав новое расположение констант.
Отчёт отправил: 10558. Иван Воронин Выполнено за 5 мин. [Показать отчёт]
Научился: Ничему 
Сложности: найти время 
Комментарии: Вот, уже ближе к теме, мне тоже такой вариант больше нравится, идём дальше. 
7 Singleton - Config - Git commit 00:02:16
1 тест
39 чел. ★ 4.9 Done
  На этом уроке мы заново попрактикуемся в работе с git.
Вначале мы попробуем закоммитить изменения,
но увидим, что новый файл не попал в коммит.
Так как он не отслеживался системой git, его необходимо
вначале добавить на сцену и только потом закоммитить.
В дальнейшем система git будет отслеживать
изменения данного файла автоматически.
Отчёт отправил: 10558. Иван Воронин Выполнено за 5 мин. [Показать отчёт]
Научился: Ничему 
Сложности: найти время 
Комментарии: Так как коммит, который надо откатить последний по счёту, то для отказа хорошо подходит команда git reset. Если в процессе разработки оказалось так, что несколько коммитов назад добавили не совсем полезный коммит, то откат делать надо при помощи команды git revert, но это уже другая история со своими камушками =) 
8 Singleton - Config - FileReader 00:11:45
1 тест
39 чел. ★ 5 Done
  На этом уроке мы с вами доработаем класс Config(),
чтобы параметры хранились и загружались из файла.
Для этого создадим файл конфигурации,
перенесём в него настройки программы и
в классе Config() добавим метод считывания
из нашего конфигурационного файла.
Отчёт отправил: 10558. Иван Воронин Выполнено за 15 мин. [Показать отчёт]
Научился: Ничему новому 
Сложности: найти время 
Комментарии: Реaлизoвaл ceкцию finally{} в методe load() класcа Config(). Отличный урок, уже лучше, но ещё не идеально, идём дальше. 
9 Singleton - Config - Git default 00:04:39
1 тест
36 чел. ★ 5 Done
  На этом уроке мы закоммитим все наши изменения.
Для начала мы создадим копию конфигурационного файла
с именем config.default.txt. Это необходимо делать,
чтобы небыло конфликтов из-за того, что у каждого разработчика
будет своя версия config.txt для корректной работы приложения.
Так же изменим значения файла config.default.txt
на значения для примера, чтобы каждый смог изменить их под себя.

Отчёт отправил: 10558. Иван Воронин Выполнено за 5 мин. [Показать отчёт]
Научился: Ничему новому 
Сложности: найти время 
Комментарии: Получилось аж 3 коммита отдельных: 1 - добавил конфиг в гитигнор. 2 - добавил конфиг по умолчанию. 3 - добавил поддержку загрузки настроек из конфига. см. скриншоты. 
10 Singleton - Config - Static field 00:09:57
36 чел. ★ 5 Done
  На этом уроке мы поэкспериментируем с оптимизацией
загрузки конфигурационного файла.
Остановимся на варианте глобальной версии
с передачей в другие классы в качестве параметра.
Так же закоммитим наши изменения в git репозиторий.
Отчёт отправил: 10558. Иван Воронин Выполнено за 15 мин. [Показать отчёт]
Научился: Ничему новому 
Сложности: найти время 
Комментарии: Отличный урок! Реализация намного лучше, чем в прошлом уроке. Руки чесались так же сделать, но решил не бежать впереди паровоза, выполняя пошагово каждый урок, внося незначительные изменения если очень надо =) 
11 Singleton - Config - Static class 00:06:31
33 чел. ★ 5 Done
  На этом уроке мы продолжим оптимизации,
сделав всё в классе Config() статичным.
Так же оптимизируем классы Program() и Process()
для использования статичной версии класса Config().
После чего добавим загрузку конфига в классе Program().
Отчёт отправил: 10558. Иван Воронин Выполнено за 10 мин. [Показать отчёт]
Научился: Ничему новому 
Сложности: найти время 
Комментарии: Вот вот уже красивее класс конфига выглядит, статичненько и практичненько, по поводу наследования класса конфига, не могу представить кто его может унаследовать и зачем. Но идём дальше, делаем из статики - синглтонику =) 
12 Singleton - Config - Using pattern 00:07:54
1 тест
32 чел. ★ 5 Done
  Мы рассмотрели множество рабочих вариантов
реализации, но на деле их эффективность
зависела от конкретной реализации и при
определённых условиях требовалась доработка.
На этом уроке мы наконец реализуем
шаблон проектирования: Синглтон (Singleton).
Отчёт отправил: 10558. Иван Воронин Выполнено за 10 мин. [Показать отчёт]
Научился: Шаблону Синглтон 
Сложности: найти время 
Комментарии: Очень часто подобные вещи делал в коде программ/игр, чтобы выделялась память именно тогда, когда это нужно, оказалось, что есть идеальный шаблон для этого, спасибо за уроки, высший пилотаж! 
13 Singleton - Config - Cant extend 00:06:23
1 тест
32 чел. ★ 5 Done
  На этом уроке мы вынесем из класса Config() код синглтона
в класс Singleton() и попробуем унаследовать его.
Отчёт отправил: 10558. Иван Воронин Выполнено за 15 мин. [Показать отчёт]
Научился: Ничему новому 
Сложности: найти время 
Комментарии: Перепробовал кучу вариантов возможности данного этюда, но суть в том, что даже если ухитриться и реализовать в итоге, то ломается сама суть синглтона, а не получается унаследовать, потому что конструктор приватный. 
14 Singleton - Config - Super child 00:05:57
31 чел. ★ 5 Done
  На этом уроке мы всё же разделим
класс Config() на две логические части.
Для этого мы выделим логику Синглона
в отдельный класс ConfigSingleton().
Отчёт отправил: 10558. Иван Воронин Выполнено за 5 мин. [Показать отчёт]
Научился: Использованию Синглтон шаблона для уникальности экземпляра класса. 
Сложности: найти время 
Комментарии: Очень интересный мини курс получился, отличный вариант реализации в данном уроке, получилась эдакая алтернатива для вызова класса Config() через Синглтон, тем самым уверенно зная, что данный класс будет задействован всего 1 раз и больше экземпляров создано не будет. Естественно никто не мешает использовать и на прямую без Синглтона, но это скорее особенность данной реализации =) которую зная, можно не использовать вовсе. 
15 Singleton - Timer - Pattern Design 00:08:15
1 тест
31 чел. ★ 5 Done
  На этом уроке мы начинаем создание
класса Секундомер() для засекания времени
работы различных участков программы.
Для разработки этого класса мы воспользуемся
шаблоном проектирования Синглтон.
Отчёт отправил: 10558. Иван Воронин Выполнено за 10 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: После инициализации репозитория git, не мог не добавить несколько начальных коммитов, где добавил базовые файлы, которые как мантра должны быть в репозитории, единственное только README.md не добавил, но это уже мелочи =) Отличный урок как в прочем и всегда, спасибо Игромистру. 
16 Singleton - Timer - Start / Click 00:05:25
1 тест
30 чел. ★ 5 Done
  На этом уроке мы продолжим создание класса
Timer() при помощи шаблона синглтон.
Для начала мы добавим метод start()
в класс Timer() для запуска секундомера.
Так же мы добавим метод click(),
чтобы увидеть сколько времени прошло.
Отчёт отправил: 10558. Иван Воронин Выполнено за 10 мин. [Показать отчёт]
Научился: Ничему 
Сложности: найти время 
Комментарии: Я думаю не стоит делать рестарт в методе, который предназначен для отображения пройденного времени, ведь для этого есть метод старт, он уже фиксирует текущее время и при повторном вызове будет обновлять его тем самым делая аналогию рестарта, поэтому я сделал по своему эти два метода, не смог реализовать так же как и в видео по идейным соображениям. Но урок всё равно отличный, спасибо, идём дальше. 
17 Singleton - Timer - Program 00:09:45
30 чел. ★ 5 Done
  На этом уроке мы наконец добавим основной
класс для нашей программы: Program()
и добавим в метод Program.main() необходимый код
для демонстрации работы синглтона Timer().
Отчёт отправил: 10558. Иван Воронин Выполнено за 15 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: Как видно из скриншотов, при выводе текста в консоль тратится доп. время. Сам же метод Math.cbrt() намного быстрее работает. Данный синглтон можно использовать для дэбага работы отдельных участков кода программы, дабы изучив статистику понимать, где требуется оптимизация в первую очередь =) 
18 Singleton - Timer - String vs Buffer Speed 00:10:58
1 тест
28 чел. ★ 5 Done
  На этом уроке мы сравним скорость работы
между String и StringBuffer.
Для этого мы создадим новый класс StringSpeed()
с методами runString() и runStringBuffer().
Отчёт отправил: 10558. Иван Воронин Выполнено за 15 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: Я не мог не добавить для тестирования ещё и StringBuilder, так как знаю, что он быстрее StringBuffer, что явно видно на скриншоте, так как он лучше подходит для однопоточных программ. Как я и говорил на прошлом уроке, отлично подходит для тестироваться отдельных участков кода, если это игрушка, то можно выводить дебаг информацию по скорость работы к примеру: отрисовки кадра, отрисовки теней, наложение эффектов, отрисовке частиц и т.д. В целом результату сравнения не удивлён, знал что именно так и будет изначально, так как ранее это всё было уже протестировано =) 
19 Singleton - Timer - Experiment 00:06:05
28 чел. ★ 5 Done
  На этом уроке мы изучим класс Timer()
и выделим часть кода для нового синглтона.
Для этого нам понадобиться новый класс Log()
который будет реализован как синглтон
и заниматься логированием в консоль.
Отчёт отправил: 10558. Иван Воронин Выполнено за 15 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: Отличный урок, можно добавить так же синглтоны для вывода текста в файл, передача по сети, отправка на мыло, так же по формату, в котором будет выводиться информация (json, xml, plain, html...) 
20 Singleton - Timer - Log class 00:08:45
1 тест
28 чел. ★ 5 Done
  На этом уроке мы разделим наш синглтон Timer()
на две части: Timer() и SingleTimer().
Тот же эксперимент проведём и с классом Log().
После чего будет ясно, что лучше так не делать
и вернём код в состояние на момента начала урока.
Отчёт отправил: 10558. Иван Воронин Выполнено за 25 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: Данный метод использовать можно, но только там, где есть реальная необходимость в этом, если в случае с Timer() это ещё как то выглядит красиво, то в случае с Log() смысла нет изза того, что всего лишь один метод остаётся в классе после данных изменений. Дублирующий код "синглтон" тоже напрашивается на спаривание =) 
21 ФИНАЛЬНЫЙ УРОК без видео
7 тестов
13 чел. ★ 5 Done
  Поздpaвляю!
Твoя зaдaча - прoверить cебя и пpойти тест, см. вкладку "Тест".

Напиши отзыв или видеообзор по этому видеокурсу.
Отчёт отправил: 10558. Иван Воронин Выполнено за 10 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: Отличный шаблон проектирования. Много где можно использовать, уже активно им пользуюсь там где есть в этом необходимость =) 
22 VIP - Singleton - Timer - Enum 00:06:31
1 тест
28 чел. ★ 5 Done
  На этом уроке мы реализуем синглтон
с использованием перечислений.
Для этого мы переделаем Log()
из класса (class) в перечисление (enum).
Тоже самое мы проделаем и с классом Timer()
Отчёт отправил: 10558. Иван Воронин Выполнено за 15 мин. [Показать отчёт]
Научился: Enum синглтону 
Сложности: найти время 
Комментарии: Отличный урок, замечательная альтернатива реализации синглтона, по тестам enum быстрее варианта с классом где-то на 30-35% в нашем случае идеально подходит, думаю логично использовать этот вариант пока не упрёшься в ограничения enum, тогда уже можно и на основе класса. 
  Итого:   22 видеоурока 2 час. 24 мин.
18 тестов
13 чел. ★ 5  
  Финалисты:   Иван Воронин,   Сергей Соколов,   Станислав,   Povilas Abramovicius,   Sergej Šugajev,   Александр,   Новопашин Владимир,   Tekashnik,   Andrei,   Dmitry Sinitsin,   Yefim,   Anatoli,   Tom .

Начинаем практику по языку C#





Если вы пришли без приглашения -
введите тысяча двадцать четыре (цифрами).
Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.


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


Научился: Отличный паттерн проектирования) Делал этот курс давно, сейчас просто закрываю дыры) Всем рекоменндую!"
Трудности: Придумать, что было самым сложным