Вкалывают роботы?

Вот по поводу этой «программистской задачки«.

В комментах было предложено решение на ASP.NET с использованием специальной библиотеки iTextSharp. Сложность «решения» была оценена в 1-3 человекомесяца. Думаю, что если стоит задача получить более-менее качественную («книжную») верстку PDF — то тут и трех человекомесяцев не хватит.

А задачка, как это не странно, уже была решена гораздо более скромными средствами. В принципе, с моей стороны немного нечестно раскрывать этот ответ, но и вопрос я задавал в надежде услышать именно «правильное и современное» решение. Ну а для «несовременного» достаточно написать три буквы: TeX.

Поясню. TeX — это хорошо известная система компьютерной верстки, довольно старая, но популярная в «околонаучном» мире — прежде всего из-за удобства верстки в ней математических формул, а также из-за очень развитого «макропакета» LaTeX, который позволяет довольно легко писать большие тексты, не заботясь о сложностях вроде автоматической нумерации параграфов, составления оглавления и списка литературы, нумерации формул, теорем, таблиц, рисунков и всего в этом роде. TeX — это не WYSIWYG-система, наподобие MS Word, поэтому считается несколько неудобным для набора простых текстов. Исходные файлы LaTeX, выглядящие примерно так:

\documentclass{article}
\usepackage{amsfonts, amsmath}
\begin{document}
This is a sample \TeX file.
$$\iint_{\mathbb R^2}e^{-(x^2+y^2)}\,dx\,dy = \pi$$
\end{document}

обрабатываются специальной программой (обычно так и называется — latex или latex.exe), которая выдает уже «обработанный» файл в TeX-овском же формате dvi (device-independent), который предназначен для просмотра или печати. Я немножко сократил описание всего процесса, но он сравнительно прост и выполняется в автоматическом режиме. Кроме того, во все современные варианты TeX входит и программа pdflatex, генерирующая по тем же TeXовским файлам PDF или же программы dvips и ps2pdf, которые конвертируют соответственно dvi в PostScript и PostScript в PDF. Из написанного выше файла получится страничка A4, на которой шрифтом 10 кегля будет написано следующее:

texsample

К чему все это длинное введение? А к тому, что генерация текстовых файлов и запуск несложных программ с этими файлами в качестве аргумента — это прекрасный способ «не изобретать велосипед». Я оцениваю систему, которая может по введенным в веб-форму данным генерировать несколько pdf по готовым шаблонам (кстати, в LaTeX есть «класс документа» «письмо», автоматически создающий письмо по канонам американской деловой переписки — сложите лист A4 втрое, суньте в конверт с «окошечком» и несите на почту) в один человекомесяц работы PHP-шника «средней руки» (по 10 копеек пучок на каком-нибудь «фрилансерском» сайте), включая сюда и изучение TeX в необходимом объеме. А если хочется еще сэкономить — не берите PHP-шника, возьмите человека, умеющего писать shell-скрипты.

«Околокомпьютерные» технологии, разработанные в 80-е, были рассчитаны на то, что пользователь сам может научиться немного программировать и использовать это умение для решения своих задач. Это и shell-скрипты, и язык SQL (первоначально предполагалось, что SQL-ем будет пользоваться пользователь самостоятельно, без «посредников» в виде кривых программ), и TeX, и BASIC как непременный атрибут «персоналки», и даже программируемые калькуляторы. Предполагалось, что «профессиональное» программирование будет нужно только для каких-то особо сложных задач.

В начале 80-х академик Ершов произнес тезис «Программирование — вторая грамотность». Благодарая Ершову в советских школах появилась дисциплина «Основы информатики и вычислительной техники», в программу изучения которой до самого недавнего времени входили и азы программирования. Вообще, этот подход прекрасно ложится в то извращение марксизма, которое я адски пропагандирую в собственном бложике.

Если утрировать, то «счастье человечества», по Марксу, связано прежде всего с развитием «производительных сил», которое определяет экономическую структуру общества, а через нее — и все остальные стороны общественного устройства. «Социалистическая» мораль не допускала (хотя бы на словах) эксплуатацию меньшинства большинством. Многих удивляет, особенно после просмотра передачи How it’s made по каналу Discovery, почему китайские товары собирают практически вручную — ведь по Discovery показали таких забавных роботов, станки с ЧПУ и прочие радости. А мораль проста — относительное благополучие «золотого миллиарда» достигалось и достигается тем самым «ограблением колоний». Это СССР мог себе позволить строить в диком Афганистане школы и больницы и отучать крестьян от выращивания мака и конопли — НАТО действует другими методами. «Американец» может позволить себе счастливую жизнь благодаря тому, что на него работает 5 китайцев.

Такая ситуация совершенно не укладывается в «Моральный кодекс строителя коммунизма», а тем не менее (по Марксу, опять же!) для построения коммунизма необходима определенная производительность труда. Учитывая, что для белых американцев первый этап коммунизма уже наступил — могу предположить, что производительность труда «советского человека» при коммунизме должна равняться производительности труда пяти китайцев. Это можно обеспечить (в нынешних реалиях) только всемерной и повсеместной автоматизацией, когда «вкалывают роботы, счастлив человек».

А что мы имеем в реальности? «Компьютеризация» превращается в удвоение объема бумажной работы. Программирование превращается в занятие немногочисленных «профессиональных программистов». Даже 30 с лишним лет назад «обычные пользователи» могли освоить, к примеру, ДВК в такой степени, что писали свои несложные рассчетные программы. Сегодня даже макросы Word кажутся чем-то страшным.

Когда говорят о Unix и Windows, очень часто упоминают «порог вхождения» — мол, работать в юниксообразных ОС сложнее. Но ведь «порогов вхождения» можно выделить два — один — «для решения простейших задач» — в интернете полазать, видео посмотреть и т. п., другой — «для сложных задач» — типа «написать маленькую программулечку, которая берет файл и форматирует его». И вот что интересно — в Unix всех видов расстояние от первого порога до второго меньше, чем в Windows. Да, первый порог в Unix выше, чем в Windows, но вот второй — определенно ниже.

Конечно, Unix и Windows — очень условные слова. Но «два мира, две системы» в программировании действительно существуют, и пишут об этом многие — от Joel-а до наших доморощенных умельцев. Ну а «законодатель мод» в Windows-мире может позволить себе заявить о прекращении развития Silverlight, когда на том уже сделан сайт московского метро :)

Интересно, а как правильно и «по-майкрософтски» эта же задача будет решаться через 5 лет?

Вкалывают роботы?: 2 комментария

  1. Мнда.
    Видимо ты пропустил слова «ASP.NET MVC + MS SQL».
    1-3 месяца — это готовое решение, с формой регистрации, БД, функциональностью «подтвердить адрес», формой «я забыл пароль», рассылкой писем, и т.п.
    Из этого времени, программирование генератора документов займёт от cилы 5%, не важно на чём его делать: iTextSharp, tex, или любые другие вменяемые способы генерировать PDF.

Добавить комментарий для dsa Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *