Як я для Manning бестселер про геометрію написав

Всім привіт, я Саша Каленюк. Працюю в компанії Materialise програмістом-алгоритмістом, пишу науково-популярні статейки, в тому числі і на DOU. До повномасштабної війни ще мітапи якісь проводив, на якихось конференціях щось розказував, ох, як же ж давно це було.

Сьогодні я хотів би поділитися історією про те, як написав книжку, яка називається Geometry for Programmers, і як неочікувано для себе дізнався, навіщо я це зробив.

Я взагалі жодних книжок писати не хотів. Хто їх читає, ті книжки? Тим більше про геометрію. Тим більше для програмістів. В мене є власний сайтик з інтерактивними обучалками, є Hackernoon, є DOU, якщо вже геть кортить щось кудись написати — сюди і написую.

Але, поговоривши з Майком, асоційованим видавцем Manning, я вирішив, що книжка може бути не такою і поганою ідеєю. Він навів декілька переконливих аргументів і один неспростовний — цифри продажів схожих видань. Виявляється, програмісти таки читають книжки, і навіть геть не обов’язково про програмування. Про геометрію теж читатимуть, але книжка має бути специфічною. Програмістською.

Програмістська книжка про геометрію. Чи навпаки

Що робить книжку програмістською? Ну, по-перше, там мають бути програми. Щось таке, що можна позапускати, подописувати, поправити, а зрештою, скопіпастити кудись у свій проєкт і там щось з цього собі отримати.

По-друге, книжка має бути «прохідною» навіть для тих, хто математичні формули після школи бачив хіба що в мультиках. Звісно, про математику без математики не напишеш, але вимагати від кожного читача закінчити мехмат з відзнакою тільки для того, щоб не боятися розкрити видання, означає обрізати кількість потенційних читачів до, приблизно, нуля.

По-третє, книжка має бути короткою. З програмістськими погодинними ставками, читати книжки вже давно стало дорожче ніж їх купувати.

Тобто, взяти всі матеріали з інтерактивного сайтика, зібрати в один товстенький рукопис і видати — не спрацює. Треба робити книгу як новий цільний продукт, з унікальними для неї дизайн-рішеннями.

І от які рішення я познаходив. Всю математику в книзі довірятимемо SymPy — це пітонівська бібліотека, яка робить символьні обчислювання. Перетворює формули на формули. Відповідно, всі формули в книзі також мають бути на Python.

А ще SymPy вміє перетворювати формули на код. Отже, замість того, щоб публікувати сніпети на Python, які показують якісь математичні ідеї, треба в книзі публікувати SymPy-сніпети на Python, які генерують код на C, Rust, Julia чи будь-якій іншій мові, яка найбільше подобається кожному конкретному читачеві.

Так, наприклад, програмістові на JavaScript не треба буде вчити Python зі всіма математичними бібліотеками, а достатньо інвестувати 15 хвилин на обучалку за символьним обчисленням, там геть нічого складного немає, а потім генерувати собі код на JavaScript.

Моя улюблена книга про геометрію для програмістів — це підручник Дункана Марша з прикладної геометрії для комп’ютерної графіки і дизайну. Все в ній прекрасно, але розрахована ця книга на студентів, які тільки-тільки вивчили матаналіз і лінійну алгебру, тому ще пам’ятають щось про градієнти і матриці.

Моя книга має бути розрахована на того, хто вищу математику, включно з матлогікою, або забув, або ніколи не вчив, або і те, й інше. Отже, перед тим, як взятися за сплайни і перетворення, треба зробити мінівступ до лінійних систем, векторної алгебри і диференційного числення, хоча б на рівні анекдотів про залізні лінійки і правило буравчика.

І з такими от рішеннями в голові, я подав офіційну пропозицію, її порев’ювили, і за якісь кілька тижнів затвердили. Почалася писанина.

Отже, я пишу книгу

Дуже скоро виявилось, що ідея починати програмістську книгу про геометрію з алгебри і числення — це не найкраща ідея. Читачі засинають, падають обличчям вниз, травмуються.

Почались торги з видавництвом за композицію. Я стояв на тому, що без всього цього «обвісу» геометрії не вийде. Без лінійної алгебри в гомогенних координатах не розберешся, а без похідних — не те що сплайн, навіть дві довільні криві гладко склеїти одну з одною неможливо.

Вони топили за те, що книжки потрібні не для того, щоб примножувати страждання, а щоби їх продавати. Їхня позиція виявилася сильнішою.

Потім з’ясувалося, що ідея генерувати код на JavaScript кодом на Python теж не така вже й блискуча. Читачі глави про криві Безьє хочуть бачити криву Безьє, а не код, який генерить код, який генерить ці криві. Моє пояснення, що вся комп’ютерна типографіка врешті з кривих Безьє і зроблена: код складається з літер, літери складають з кривих Безьє, отже, коли читач запускає сніпет, суто формально... Ні, не проканало.

Ну, і нарешті ідея мати всі формули в книзі на Python теж читачам не зайшла. Навіть найпрограмістнішим програмістам. Хочемо і код, і формули, кажуть.

Тож одразу після першого рев’ю, а перше рев’ю робиться на першу третину книжки, всі мої дизайн-рішення, якими я так пишався, були потоплені. Я був у розпачі. Що робити далі, як закінчувати книжку — незрозуміло.

Без символьних обчислень вийде ще один підручник з математики. Їх вже повно, їх вже і так майже ніхто з доброї волі не перечитує, то в чому сенс написання ще одного? Без кодогенерації вийде ще одна книжка про Python. Їх ще більше, мабуть, ніж підручників з математики. А без глав про аналіз чи алгебру, навіть підручника з математики не вийде.

Без якихось визначальних ідей, у книги нема концепції, нема метанаративу. Чому ця книжка має існувати, що вона принесе? Як просуватися далі, коли жодне з рішень, які мали б додавати книзі якусь унікальну цінність, не працюють?

А з іншого боку, як можна не просуватися, якщо час іде, а дедлайн стоїть? Тож ми з видавництвом домовились про якісь компроміси, щось мало піти, щось лишитися. SymPy лишився, але разом з формулами. Теоретичні глави довелося переформувати: негеометричний матеріал лишився тільки найкритичніший і тільки перед безпосередньо його використанням. Кодогенерація впродовж книги використовується, але поруч з кодом, який генерує криві і поверхні.

З цими компромісами в голові, я сів переписувати першу третину з нуля. Без якоїсь віри в результат, просто, щоб не кидати недороблену справу.

Друга спроба

Друге перше рев’ю вийшло трохи краще, ніж попереднє, мені дали зелене світло просуватися далі, і я потроху почав збирати до купи другу третину. Було це десь у лютому. Минулого року, так.

Першій місяць повномасштабного вторгнення було якось не до писанини. Я вирішив лишатися в Києві. Когось зустрічав, когось проводжав. Метушився туди-сюди, як усі інші без повістки і УБД, шукав, як не лишатися осторонь. Приєднався до якоїсь групи самооборони в ЖК, не допомогло, хіба що метушитися стали більш-менш колективно.

Військові сказали: «Поховайте стволи і сидіть по домах тихо, тільки вас тут ще не вистачало». Тероборонівці сказали: «Приходьте на якийсь блокпост траншеї рити, але тільки не на наш». В центрі крові сказали: «Не їжте жирного-смаженого, не пийте, ми передзвонимо». Ще і досі не передзвонили — так я вже понад рік і не п’ю.

Потім якось почало все стабілізуватися. Відбувся якийсь такий поділ на ролі. Хтось воює, хтось волонтерить, хтось закачує в країну валюту. Я опинився у третій категорії.

І раптом книга знайшла свою концепцію. Знайшла свій метанаратив. Дуже простий, майже очевидний. Ціль цієї книги — не навчити світ любити геометрію, не показати який я розумний, не утерти носа колегам-авторам. Ціль цієї книги — закачати в країну якомога більше валюти.

Коли з’явилась мета

Тепер стало на свої місця. Мені стало простіше спілкуватися з видавництвом. Стала зрозуміліша позиція читачів і критиків. Стало легше іти на компроміси. Писати стало простіше. То я й писав.

Вставав рано, до перших новин, випивав банку якогось енергетика, розминав голову грою в Rogue Legacy: поки 5000 золота з першого життя не набрав — вважай, не розім’явся, і писав. Потрошку, по 500 слів, по тисячі, рідко, по дві.

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

Так докотився до другого рев’ю. Не другого першого, а справжнього другого, того, що робиться на дві третини рукопису.

Друге рев’ю було ще не бездоганне, але краще за попереднє. Я врахував побажання критиків, зробив належні правки і взявся дописувати останню третину.

Потім сталася особиста трагедія, про яку я не хочу розповідати. Мушу лише зазначити, що коли знайшов сили повернутися до книжки, з подивом з’ясував, що робота над нею сама собою може бути терапевтичною. Що навіть мій вранішній ритуал, наскільки дурним чи нездоровим він не був, вже впорядковує день, вже задає тон і дозволяє рухатись думками, не застоюватись в темному місці.

Так згодом дійшов і до третього рев’ю. Офіційно відіслав повний рукопис 12 вересня 2022 року. На 12 днів прострочивши дедлайн.

Тут ще хочу сказати, що видавництво весь час ставилося до подій в Україні з повагою і розумінням. Формальна позиція компанії «ми не про політику», але наодинці кожен, з ким я працював, висловлював підтримку. Про дедлайн ніхто, звісно, навіть не згадував.

Після третього рев’ю я ще взяв кілька тижнів на полірування. Маючи готовий рукопис, набагато легше працювати з композицією. Тож я дещо попереносив, дещо упорядкував, а багато чого просто вирізав і викинув. Здебільшого, з ранніх глав.

Потім була технічна вичитка, потім редактура, потім — фінальна вичитка. А, ще ми весь час працювали з головною редакторкою і технічним редактором. Всього в «титрах» окрім мене фігурує дев’ятеро людей, і всі з них, крім однієї людини, зробили якусь унікальну і непросту роботу, щоб ця книжка відбулася. (Вибач Маріє, мені дуже подобається обкладинка, але скопіпастити з альбому жінку і наверстати три рядки тексту — навряд чи це можна вважати непростою роботою. Унікальність, втім, не оскаржую.)

Результат і досягнення мети

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

Насправді вона в цьому списку вже фігурувала. Але як MEAP (Manning Early Access Program). Тобто, це була радше обіцянка книжки ніж сама книжка. І, як ми бачимо з того ж списку бестселерів, чомусь обіцянки продаються в середньому навіть краще ніж релізи.

Так, а що ж по валюті? Поки неясно. Видавник каже, що найбільше грошей вони мають не з власних продажів, а з Amazon. А туди ще друковані видання навіть не доїхали. Передзамовленнями поки що продано приблизно 500 друкованих книг і 1300 електронних копій. Це разом десь $52 000, з яких мої 12,5% складають приблизно $6 500. З них $5 000 я вже отримав авансом.

Половина пішла на «Укрспецекспорт» ще минулого березня.

Друга половина пішла цього березня «Білим Горватам».

Сума не неабияка, але ж це тільки передпродажі. Справжні продажі лишень тільки починаються. Не знаю, скільки вийде в сумі за перший рік, це сильно залежить від того, як книгу сприйме публіка, а конкретніше — від відгуків на Amazon, але на кілька мавіків чи теплаків має вистачити.

Отже, який тут можна зробити висновок. А простий. Якщо є робота, то в роботи має бути мета. Навіть якщо мета ця — приземлена і не амбіційна, навіть якщо ця мета не підкорити світ своєю літературою, а заробити кілька тисяч доларів на армію, якщо мета буде — буде результат. Хай скромний, але теж гідний.

👍ПодобаєтьсяСподобалось37
До обраногоВ обраному9
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Було б дуже гарно якби вельмишановний пан автор видав свою чудову книгу рідною українською у редакції власного розуміння як має бути найліпше. На благо всіх нас живих і ненароджених.

Привіт, я шукаю активну пайтон спільноту, щоб обʼєднатися з кількома людьми і писати свій продукт — для розвитку в професії, щоб не замикатися на своєму робочому функціоналі, який є досить вузький. Можливо підкажете, де шукати таке? Дякую

Шкода що не можна замовити в Україну паперову версію, я б купив.

Дуже дякую, крута робота і цікава стаття!

Вставав рано, до перших новин, випивав банку якогось енергетика, розминав голову грою в Rogue Legacy: поки 5000 золота з першого життя не набрав — вважай, не розім’явся, і писав. Потрошку, по 500 слів, по тисячі, рідко, по дві.

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

Це якраз так як рекомендують профі: розділяємо етап творчості, коли ми в потоці швидко генеруємо контент, і етап перегляду-редагування.

...з яких мої 12,5% складають приблизно $6 500. З них $5 000 я вже отримав авансом.

Однаковий процент з паперових та діджитал копій? От жеж шахраї, блін :(

P.S. Дякую що поділився досівидом, дуже круто.

Вау, ти просто супергерой!

Єщопочитати, вже чекаю на доставку

Дійсно колосальна робота. Особливо сподобалася мета ;)

Круто, дякую, чекатиму на kindle.

На сколько сложно продать хорошую книжку в крупное издание? Сколько пошло на это труда?

А як вийшли на людину з Manning?

Вони доволі активні в лінкедині. Можна спробувати постукатися: www.linkedin.com/in/l-douglas-rudder

Купував цю книгу, ще коли вона була в MEAP — версії. Дуже круто що тепер маю змогу прочитати, який шлях пройшов автор для її написання. Дякую за Вашу працю.

Вітаю з таким досягненням! А видати українською не плануєте?

Вау, буде реально цікаво прочитати про результати через рік, скільки вдалось продати, який чистий прибуток.
Чекатиму з нетерпінням!

Як на мене це дуже видатне здобуття! Створити 400+ сторінок для hard tech це колосальна праця та експертиза.

Круто, красава! Надихнув, може й собі спробую щось писати по трохи

Я ось трохи пописав, але не знаю, куди тепер це пхати itnext.io/...​ctors-part-1-89de6000e0d3

Підписатись на коментарі