6 лет назад у меня появилась мечта - написать книгу по языку программирования C#. Приключение затянулось на долгие годы и я наконец-то сдаю первый том. Здесь расскажу общий концепт, ключевые идеи и сложности с которыми столкнулся.

Как всё началось

В 2018-ом году я начал сбор денег на краудфандинге для написания своей книги по программированию на C#. Месяц я боролся как лев и мы собрали 85 000 рублей!

Радости моей не было предела.

Это было 6 лет назад, мне было 20 и я был молод и горяч и за пол года написал основную массу текста... а потом наступил творческий кризис. За что мне очень стыдно.

Пару дней назад я собрался силами и дописал недостающие главы, привёл текст в порядок и собрал всё в единый документ и выложил бесплатно для всех.

Про краудфандинг

В те года это было модным и собрать деньги была возможность даже если у вас нет аудитории. Сейчас краудфандинг скорей мёртв чем жив.

Про что книга

Книга про программирования на C#... для новичков... построенная вокруг практики.

На самом деле это и был изначальный концепт, хотелось дать базу языка на примере практических задач при этом рассказав про паттерны и здоровое проектирование. Когда я начинал писать книгу у меня было всего 4 года коммерческого опыта но хорошего с Code Review и толковыми наставниками. Но всё-таки книга не откровение для опытных.

Её задача дать крепкую базу для новичков. Не быть очередным справочником по синтаксису а именно книгой которая больше про программирование чем про код.

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

Книга пытается провести человека через основы синтаксиса на примере решение большой задачи - написание вендингового автомата.

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

Абстракция

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

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

Как по мне это самая база которая часто пропускается другими авторами.

Сложности

Изначально я писал книгу в Google Docs. Это оказалось не очень удобным и в дальнейшем я переехал на Wordpress. Да я просто развернул вордпресс и там писал книгу отдельными постами которые сгруппировал в иеерархию.

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

В дальнейшем я выдернул все посты обратно в Google Docs и подсветил код инструментов Code Block.

Книжный формат плохо подходит для листингов кода, точнее формат A5, не рекомендую его брать. Мне пришлось пронумеровать весь код и загрузить его на GitHub. В самой книге он не читаем к сожалению, что я хочу исправить в следующих изданиях где переверстаю страницы в широкий вид.

Итог

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

Рекомендую попробовать каждому разработчику написать свой небольшой учебник страниц на 200 на какую-нибудь тему.

Свою книгу я в итоге собрал в PDF и бесплатно выложил у себя в телеграмме - посмотреть

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

Комментарии (21)


  1. Stol-Stul
    13.05.2024 13:58
    +7

    Если каждый разработчик напишет по книге, то кто их будет читать?


    1. romaan27 Автор
      13.05.2024 13:58

      Пишите для себя


    1. GospodinKolhoznik
      13.05.2024 13:58
      +6

      ChatGPT прочтет. Ему как раз обучаться на чем то надо будет. Все существующие книги и stack overflow он уже прочёл. И ему как нельзя кстати новая обучающая выборка пригодится.


      1. OldNileCrocodile
        13.05.2024 13:58
        +1

        Судя по терминам, ChatGPT уже перевëл термины в книжке (с английского).


  1. ri1wing
    13.05.2024 13:58
    +5

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

    И почему вы тогда выбрали именно этот формат? Чтоб страниц побольше было?


    1. romaan27 Автор
      13.05.2024 13:58

      Да, мне хотелось побольше страниц


  1. Lainhard
    13.05.2024 13:58
    +33

    Это конечно не связано с книгой, возможно она даже неплоха. Но не могу относиться к автору данного поста не через призму того, что этот человек - один из виновников того, что мобильный геймдев в ж**е (хоть его вина - лишь капля в море, и скорее следствие)

    Просто посмотрите какие "игры" делает студия, созданная автором поста.

    https://youtube.com/shorts/iMe2_5Zxyx0

    Все, готов принимать удар в карму.


    1. F1stoki
      13.05.2024 13:58

      Только неформалов в студию берёт, и перед этим показывает кучу ютуб шортсов, чтоб конкретно так деграднули)))


  1. NikolayTheSquid
    13.05.2024 13:58
    +15

    Бабки собрал и шесть лет ноль выхлопа. Вот из-за таких как ты краудфандинг и умирает.


  1. c_kotik
    13.05.2024 13:58
    +4

    Смотришь на оформление книги... Начинать начали, но так и не закончили...


  1. Danismind
    13.05.2024 13:58

    Добрый день, а о какой версии языка идет речь и какой net core вы используете для примеров Вашей книги?


    1. OldNileCrocodile
      13.05.2024 13:58

      Автор не привязывается строго к технологии. Он лишь объясняет базовый синтаксис и общие концепции на языке C#. Более подробную инфу по конкретной net core Вы найдете на метаните, хотя и там мало.

      https://metanit.com/sharp/

      Если нужно потыкататься в конкретный метод, то идëм читать ms документацию, например

      здесь описан String.Concat

      https://learn.microsoft.com/ru-ru/dotnet/api/system.string.concat?view=net-8.0

      Ещë есть ряд видеоуроков по WPF от Павела Шмачилина.

      https://m.youtube.com/channel/UCsFuzbQ5KW_1f45unlvRQ1g

      Его github, куда он выкладывает код с уроками.

      https://github.com/Infarh


      1. Danismind
        13.05.2024 13:58

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

        А во-вторых если не привязываться к технологии то лучше написать выжимку из страуба , объяснить объяснить основы ооп и закончить и # не трогать.


        1. OldNileCrocodile
          13.05.2024 13:58

          Автор (Сакутин) имеет канал в ютубе, но ни одного крутого приëма из этой книжки Вы не найдëте, хотя автор в своих роликах иногда их показывает, но не так уж и много.

          Увы.

          Что насчëт Павла Шмачилина, то он опирается и на dotnet core. Можете посмотреть.


  1. kozlov_de
    13.05.2024 13:58

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

    Идея заинтересовала. И код.
    С одной стороны тут от single responsibility (особенно если смотреть на примеры кода дальше по тексту с генерацией HTML)
    С другой стороны от проектирования сверху вниз, MVP и этого вашего термина "Устойчивые промежуточные формы"

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

    Кажется, равномерный "спуск вниз по степени абстракции" помогает обеспечить low couple, high cohesion и в итоге помогает бороться с взрывным ростом сложности.

    Соответственно, пункт "Спуск на один шаг" как реализация этого принципа хорошо расписан.

    Завтра напишу более предметно, если интересно


  1. MANAB
    13.05.2024 13:58
    +6

    Такой молодой и такой опытный уже. Наверное поэтому я так бешусь с этого автора.


  1. functyon
    13.05.2024 13:58
    +2

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


  1. agray
    13.05.2024 13:58
    +6

    А зачем лицо на обложку? Без этого не купят?


    1. OldNileCrocodile
      13.05.2024 13:58
      +1

      Неформал. Надо было поставить какое-нибудь животное. Ту же мартышку, например, из группы Gorrillaz.


      1. AgentFire
        13.05.2024 13:58

        Кабанчика


  1. vasionok
    13.05.2024 13:58

    А издатели нормально относятся к тому, что книга уже бесплатно доступна в пдф?