Мне вот интересно много ли таких людей как я. Тех, кто за свою бытность в IT-сфере написал множество сайтов, пару-тройку веб-сервисов, несколько интернет-магазинов и, не смотря на все это, понимает, что не является профессиональным программистом, а лишь программистом «так себе». Никто не узнал себя в этом описании? Вот, например, я – такой! Это обо мне!
Уже давно меня мучают подобные мысли и в последнее время уже практически не дают спокойно жить. В голову лезет вся эта дурацкая идеология о том кто ты, кому нужен, чем уникален, что умеешь и т.д.
Так о чем же я? Расскажу подробнее о себе и о моей проблеме, а вы уважаемые хабаровчане, может быть увидите, а может быть и нет, себя в подобной ситуации!
Около пяти лет назад я начал заниматься сайтостроительством. Делал сайты полностью сам с нуля. Разрабатывал дизайн, верстал, ваял флешки, программировал и т.д. Сейчас не хочу говорить о всех своих разносторонних «способностях», т.к. моя исповедь касается только программирования.
В те далекие времена я начал изучать PHP по книге Котерова. Это мне позволило довольно быстро войти в тему, познакомиться с языком, синтаксисом, особенностями (после учебы в универе я поверхностно знал C++, Assembler, Basic — ну в общем имел некое представление о том, что такое программирование, благо учился я на IT-специальности). Читая книгу, начал писать. Создал первый простейший сайт. Есть индексный файл index.php, в котором простейший код принимает параметр «page» адресной строки (например index.php&page=main) и инклудит в index.php одноименную страничку из папки templates (страничку main). Это был мой первый php-ый сайт, который поддерживал загрузку разных страниц в основной шаблон index.php в зависимости от параметров, переданных в адресной строке. Страничка, которая подгружалась уже имела в себе необходимый контент.
Далее я поднял свои знания об SQL (вспомнил университетские курсы), да и та же книга Котерова (если не ошибаюсь) помогла. Это был мой второй шаг с созданию динамических веб-сайтов. И поэтому следующий мой сайт был похож на первый за тем исключением, что контент уже не содержался в подгружаемых страничках, а брался из базы. А в самой страничке сидела функция, которая осуществляла запрос к базе, извлекала данные и выводила их на странице.
Третий сайт стал еще «круче». Теперь появилась администраторская часть, через которую админ мог редактировать контент в базе.
В итоге таких вот мытарств, построенных полностью на самообучении я создал свою CMS-систему. Точнее сказать примитивное подобие или пародию на CMS. Дальше я совершенствовал ее. Пару тройку лет доводил до ума многие нюансы. Исправлял ошибки как в будущих так уже и в действующих проектах. Пытался латать дыры в безопасности.
В итоге имею свою систему, на основе которой разработал уже несколько десятков сайтов. Система работает. Все хорошо! Но вот не дает покоя один момент. Сколько бы я не писал на PHP, сколько бы не сделал сайтов, я так и не вырос в профессионального сильного программиста. На то есть свои причины. Как писал выше, я занимаюсь многими аспектами разработки под веб – в качестве верстальщика, дизайнера, контент-менеджера, флешера, программиста, SEO –специалиста и т.д. Компания, в которой я работаю не айтишная. Это компания у которой есть свои розничные точки торговли (смартфоны, аксессуары и т.п.), оптовые продажи, несколько интернет-магазинов и т.д. У компании несколько сайтов и пара веб-сервисов, которыми я собственно и занимаюсь. Я их разрабатывал, я их поддерживаю, я их развиваю. Я в своей фирме и дизайнер и программист и т.д. все вместе взятое. Но сейчас не о том…
А том, что в итоге я не стал профессиональным программистом, не развил в себе эту направленность. Еще и в силу того, что никогда не работал в айтишном коллективе, мне неоткуда было набираться опыта (кроме инета, с которым я, впрочем, стал дружить довольно поздно). Все чего я добился – я к этому пришел сам (конечно же при огромной помощи книг и инета). Это одновременно и большой плюс для меня и большой минус. Плюс очевиден – если сам сумел во многом разобраться, развить в себе определенные качества, то видимо стою чего-то. А минус в том, что не получил развития в какой-то конкретной одной области. Не стал профессионалом в какой-то из областей. И в данный момент я рассуждаю об этом именно в контексте программирования.
Так вот я остановился на том, что разработал свой движок, на платформе которого в инете несколько десятков, созданных мной, сайтов.
Я прекрасно понимаю, что если опытный программер заглянет в мои коды, то он будет плеваться. Назовет меня дилетантом, быдлокодером, порнографистом и другими плохими словами.
Порой отсутствие языка на довольно глубоком уровне рождает сложные, неграмотные и неэстетические способы решения тех или иных программистских задач. Это про меня! Подозреваю, что многие вещи в моих функциях и классах реализованы настолько коряво что… говорить не охота.
Я читаю блоги, форумы, статьи и вижу как общаются настоящие программисты. Встречаю кучу незнакомых мне терминов, кучу решений, с которыми не могу разобраться или просто беседы, которые не могу поддержать.
Недавно в вот этом посте нашел ссылку на тест для программистов, начал решать его и уже на первых 5-и вопросах понял что, не наберу и 100 баллов (когда как средней паршивости программер набирает там 200). И это в очередной раз оказалось подтверждением моих слов. Собственно, это и стало последней каплей, толкнувшей меня к написанию этой статьи.
Вердикт один – я не программист! Точнее я программист (раз уж я программирую, то все-таки наверное можно меня так назвать), но наверное плохой программист. И это меня очень сильно гложет! Далее постараюсь объяснить, что имею ввиду. Я создал (не побоюсь этого слова) не один неплохой (как мне кажется) сайт. На моей платформе в нете сейчас работает несколько интернет-магазинов. При этом один из них действительно хорош (не буду называть имен, но это довольно известный магазин), который имеет посещаемость 4-6 тыс человек в день и несколько десятков заказов в день. Приносит доход в несколько миллионов рублей в год. Вокруг этого магазина трудится целая компания: отдел закупки товара; менеджеры, обрабатывающие заказы; складские работники; курьеры и т.д. Магазин имеет довольно сложную структуру. Процедура оформления заказа довольно гибкая. Много тонкостей (выводимые способы оплаты зависят от выбранного способа доставки; активация/деактивация определенных способов доставки или оплаты в зависимости от различных уловий, таких как адрес, сумма заказа, наличие скидки, наличие определенного товара в заказе и т.д.). Гибкая система скидок (промо-коды, купоны, сертификаты, группы клиентов, балловая система и др. Личный кабинет, история заказов, действия с заказом (просмотр статусов, распечатка счетов, оплата электронными деньгами или пластиковой картой через интегрированную платежную систему), и многие другие моменты которых нет в известных CMS-ках. На админской стороне функций в десятки раз больше: подробная панель для работы с заказами; возможность распечатки различных бланков, счетов и пр. (т.е. полная автоматизация работы, например с Почтой России или EMS); куча полезных фишек для менеджеров, обрабатывающих заказы (система напоминаний, система забытых заказов, система начисления скидок и мн. др.); взаимодействие с 1С; статистика; работа с предзаказами и мн. др. Кроме «магазинной» части присутствует множество модулей: новости, статьи, отзывы и т.п. Я сейчас не пытаюсь нахваливать себя и созданный мной магазин, но он на самом деле довольно «серьезен» по своей напичканности. Сначала он был создан на моем движке, потом я его многократно совершенствовал. В итоге много кодов было дописано очень криво и не структурировано с нарушением заданной архитектуры. Признаю, код очень намешан с представлением. Если изначально сайт имел более менее красивую структуру (библиотеки, шаблоны и т.д.), то в итоге с течением времени, после бесконечных дописок и приписок (иногда на скорую руку) появилась куча «быдлокода». Иногда чтобы серьезно не перекраивать структуру или добавлять какой-либо модуль, просто дописывал как мог. Посторонний человек наверное полгода будет. Короче говоря, в плане кода, я думаю, что сайт далеко не идеален. Но, тем не менее в основе его стоит разработанный мной за несколько лет движок, который РАБОТАЕТ.
Я часто встречаю на просторах инета такие понятия как паттерны проектирования, различные виды архитектуры. Взять к пример всем известную MVC. Честно признаюсь, я совсем недавно узнал что это!
Мне даже стало интересно похожа ли моя система на MVС или на какую другую архитектуру. Интересно что же я в итоге создал то! Пришел я в своем развитии к каким-то правильным вещам или остался на уровне первобытного человека. Может даже кто-нибудь подскажет мне, что я все-таки такое сделал. Для этого в двух словах опишу свою систему:
Есть точка входа index.php. Это основа сайта. Основной шаблон. В нем сверстан каркас сайта. ЧПУ-запрос из адресной строки путем нехитрых манипуляций в .htaccess (mod_rewrite) преобразуется в массив, элементами, которого являются элементы ЧПУ (разделенные слешами). В index.php в самом верху инклудится основной класс lib.php, который в свою очередь подключает все остальные классы, которые хранятся в папке lib. Есть основной класс class_navigation.php, который собственно всем и рулит. Он берет массив (полученный из ЧПУ) обрабатывает его и «понимает» какой класс нужно задействовать и какие функции нужно вызвать для обработки полученных данных. Например в ЧПУ был передан параметр «news» (т.е. нужно загрузить страницу «новости»). Тогда navigation «понял» что нужно работать с классом «class_news». Вызывал нужные функции этого класса. Эти функции взаимодействуют с БД (извлекают данные из БД) и производят другие необходимые вычисления. Затем получив данные от news, navigation вызывает нужный шаблон из папки templates и выводит в него нужный контент. Вот так, если говорить в двух словах, функционирует моя система.
Уж не знаю похоже ли это на то как пишут в 21 веке или нет. Я к этому пришел сам, никто меня этому не научил, поэтому мне тяжело понять соответствует это современным тенденциям или нет. Я даже попытался представить мою систему в виде MVC и мне показалось что navigation похож на «модель», остальные классы, такие как class_news – это «контроллеры», а «templates» — это представление. Уж не знаю насколько я далек от истины.
Помимо всего есть и еще один момент, который меня волнует не менее чем все остальное. Безопасность. Пусть сайты мои кривые внутри, но снаружи то этого не видно. Клиент доволен, ему плевать что внутри. По быстродействию вроде тоже все ок, т.к. это все-таки не супер нагруженные проекты. Но вот безопасность то! Всегда остается страх, что моя безграмотность может иметь последствия именно тут! Ведь к гадалке не ходи, ясно как белый день, что скорее всего в моих веб-разработках куча дыр! Я в свое время гуглил этот вопрос. Нагуглил много интересного. Всякие там SQL-инъекции, XSS-уязвимости и пр. Читал как правильно организовывать авторизацию, чтобы максимум избежать проблем и т.д. Многим советам тогда внял и применил их на практике.
К примеру в нескольких моих первых сайтах я даже не проверял вводимый пользователем URL на наличие всяких там «плохих вещей», например посторонних http-заголовков и т.д. В первых своих сайтах я совсем не проверял вводимые пользователям данные в формы, пока не узнал про XSS-атаки. После чего написал класс для борьбы с такими вещами. Короче говоря, я немного просветился в этой теме и принял что-то на вооружение, но боюсь, что еще много чего есть о чем я не знаю и опытный программер может легко сломать мои приложения.
Вот я все плачу, плачу, но при этом зарабатываю деньги, создавая сайты. Сайты работают. Многие из них приносят радость (и может быть даже прибыль) своим владельцам. Многие, конечно, уже мертвы (обычно по вине владельцев). Некоторые зарабатывают неплохие деньги. Как тот самый интернет-магазин, который я так красочно описывал. Он действительно приносит солидный доход и это моя гордость. Я понимаю, что сделал большой работающий проект, коммерчески успешный (тьфу-тьфу).
Можно успокаивать себя мыслями: плевать что внутри, главное работает и неплохо же работает! Кто-то, конечно же, заявит, что работает то работает, но это до тех пор, пока нагрузки невелики или пока никто на безопасность не посягал. Но тут же можно придумать ответ: да, согласен, если проект станет еще более популярен, будет посещаем и активен, то тогда то и дадут о себе знать все корявости в коде. Чем хуже (чем неграмотнее) код написан, тем медленнее он работает. Разве не так? Но ведь движок можно доработать в связи с новыми обстоятельствами. Есть узкие места, но их не так много. Оптимизировать SQL-запросы, переписать пару функций более грамотно и усе! Разве не так? Это же не фейсбук какой-нибудь! Тут все более приземленно! Ну а по поводу безопасности – еще проще. Создан прецедент, ради бога, залатай дыру! В конце концов, найми хорошего ломщика, чтобы он проверил на прочность твой сайт, а потом пользуйся полученными данными, работай, исправляй! Рассуждая так, снова, вроде как получается успокоить себя что не все так плохо.
Но вот, проклятье, все-равно что-то не дает покоя! Тот факт, что каких бы гор не наворотил, чего бы не разработал, а спец из меня (именно программист) все-равно никакой! В архитектуре и кодах этого успешного проекта все очень грустно и коряво. И хороший программист просто покачал бы головой, если бы увидел мои коды, а я при этом заявил ему, что я программист.
И я понимаю, что если захочу устроиться на работу программистом (я, конечно, вряд ли захочу, т.к. программирование – это мое не основное занятие и не самое интересное для меня, но если чисто гипотетически), то на первом же собеседовании завалюсь. Первый же более менее сложный вопрос поставит меня в тупик. И объясняй потом работодателю: «посмотрите этот онлайн-магазин, ведь я же его с нуля написал, он работает, он удобен, нравится пользователям, приносит доход хозяевам», тебе либо не поверят, либо тогда вообще ничего не поймут: «мол, что за дела такие – чувак ноль в программировании, но замутил такой вроде как даже не плохой проект, че-то тут не чисто…»
Да, в своей фирме я король, суперспециалист, замены мне нет. Все знающий, все умеющий. Но стоит попасть в программерскую тусовку и я сразу же буду раскушен. Для руководства своей фирмы я крут, но для рядового хорошего программиста я никто. Уж не говоря про руководство какой-нибудь IT-фирмы.
Почему все эти вопросы так мучают меня? Может надо успокоиться и не париться? Думать не о том, как ты «плох в кодах», а о том, как хорош результат? Ведь у меня нет планов в будущем идти работать в программисты в какую-нибудь компанию. Планы у меня немного другие… Но чем черт не шутит. Как жизнь еще повернется, никто не знает. Да и лет мне уже не мало. Не студент. Тридцатник близится!
Так что получается? Вроде и повода для паники нет, т.к. в планах нет становится программистом, но все дело в психологии. Как ни крути, а занимаюсь я этим уже очень давно и очень многое успел сделать и поэтому очень обидно, что не могу себя назвать программистом профи. Так кем же назвать? Недоучкой?
Автор: battrack