Я не программист. Я немного знаю PHP (проходил курсы около 20 часов), но больше 15 строк кода никогда не писал. Но недавно, вдохновленный экспериментом Мета Каттса, я решил провести над собой похожий эксперимент. Мне стало интересно, смогу ли я создать хотя-бы небольшой готовый продукт за 30 дней и параллельно подучить PHP. Проверить насколько сложно заставить себя делать что-то не обычное каждый день. Также я решил периодически делать заметки о том, как продвигается моя работа и вот, что из этого получилось.

День 1
С целью улучшить свои навыки по PHP и перестать в пустую прожигать время после работы, решил написать плагин под WordPress для управления meta robots.

За основу взял свой старый скрипт metarobots.php. Около 2 часов изучал документацию по разработке плагинов для WordPress — оказалось все достаточно не сложно. Сделал всю основную логику, теперь осталось сделать страницу настроек. Не думал, что так много успею за первый день.

День 4
Страницу настроек оказалось сделать сложнее, чем я думал. Для такого новичка, как я, запись и чтение файлов тоже оказались не простыми задачами. Потратил за 3 дня часов 6. В браузере постоянно открыто штук 40 вкладок, гуглю каждый тег. В итоге почти готовый плагин. Осталось сделать одну функцию управления и можно тестировать на реальном сайте. Дополнительный плюс — нормально разобрался в экранировании и основах регуляторных выражений, переписал логику исходно скрипта. Начинаю понимать, почему на toster просмотрев код моего первого скрипта, сказали, что я программирую как третьеклассник.

День 5
Закончил страницу настроек для плагина или почти закончил, посмотрим. Заметил, что начал меньше гуглить и больше копаться в документации к движку, а может задача была не сложная. Сегодня первый раз написал сразу рабочий код, минут 15 кодил, запустил — и все заработало сразу! Без багов! Отличное ощущение. Интересно, что играть и тупить в интернете не тянет, хотя я работаю максимум по 2 часа, может просто не надоедает.

День 6
День святого Патрика. Одним глазом глянул на код. Разметил немного. Очень сомневаюсь, что правильно. Спокойной ночи.

День 7
Вчера болела голова. Скинул знакомому свой код: с первого раза плагин не запустился. После консультации со знающими php людьми, избавился от самого жесткого костыля. Теперь плагин одинаково работает на локалке и на хостинге. Написал 99% всей логики. Осталось отформатировать код, создать языковые файлы, написать readme файл и можно выкладывать в библиотеку плагинов.

День 9
Думал, что буду форматировать свой код минимум пару часов, но нашел beautifyphp.com — это просто супер крутой сервис для таких, как я! Автоматическое форматирование кода за секунды.

Знающие PHPшники напугали историями про воровство кода через подобные сервисы, теперь вот немного нервничаю.

День 12,13
Дописал плагин, написал readme.txt, отдал на перевод. Хочу выложить плагин на wordpress.org
Начал писать плагин под Joomla, тем более с индексацией там обычно проблем больше, чем в WP. Тело плагина переписал за пол часа. Завтра буду тестить. Переносить небольшой плагин с Wordpress на Joomla оказалось очень не сложно, немного чтения документации, остальное копипаст и автозамена.

День 14
2 часа пытался понять, как поднять второй домен на локалке с помощью Open Server. Не получилось, надеюсь, завтра смогу. Не смог протестировать плагин под joomla. Короче день в холостую.
Просмотрел свои записи, куда-то потерялось несколько дней.)) Странно.
Завтра 15 день — середина моего марафона.

День 19
Последние дни очень мало програмлю. Оказывается, написать разок работающий код — это далеко не все. Постоянно нахожу баги. Не хватает времени все доделать по-человечески. Приболел. Начинаю лениться и косить от работы. Надо собраться и все закончить в срок.

День 21
Сделал страничку плагина в блоге. Отправил на модерацию.
Если честно, очень приятно понимать, что за 21 день, не смотря на лень, получилось сделать законченный продукт, пусть и совсем не сложный. Недавно задумался: насколько не правильно мы используем современные компьютеры. Технологии дошли до уровня, когда каждый из нас может автоматизировать часть своей работы с помощью простых программ. Избавиться от кучи рутинной работы.
Надеюсь, успею закончить плагин для Joomla за 9 дней.

День 22
Сегодня получил ответ из Wordpress, не думал, что они ответят так быстро: в очереди на проверку было около 70 плагинов. Как я и ожидал код у меня с ошибками, я совершенно не задумывался о безопасности. Все исправил и снова отправил на поверку.
Завтра сяду за плагин под Joomla, в нем что-то не работает, но я пока не понимаю что.

День 24
Получил еще одно письмо от wordpres.org, мой плагин прошел проверку. Это круто! Чувствую себя настоящим тыж-программистом. Но теперь новая штука — SVN. Прочитал инструкцию и не могу понять, как залить туда файлы. Я понимаю, что это наверно очень удобно и безопасно, но у меня все больше подозрений. Похоже, разработчики придумывают кучу дополнительных технологий, чтобы новичку было как можно сложнее освоиться. Еще одна фишка — разметка readme.txt. Серьезно: зачем использовать непонятный синтаксис разметки, который частично поддерживает html, вместо того, чтобы сразу сделать readme.html? Точно заговор.
Не сделал сегодня ничего. Размечал readme.txt, читал про SVN.

День 25
SVN — это не так сложно, как казалось. Установил Tortoisesvn, разобрался и залил плагин за пол часика. Теперь у меня есть страничка на wordpress.org. Сижу, улыбаюсь как дурак.

День 32
Закончился мой 30 дневной марафон по программированию, даже немного грустно. Последние дни работал над плагином совсем мало. Но, все же, я доволен своими результатами. Пусть у меня не получилось сделать плагин под Joomla (обязательно его сделаю), но я закончил плагин под WP, как и планировал. Залил его на wordpres.org и приобщился к какому-то большому общему делу. Очень приятно осознавать, что план выполнен — это придает уверенности и хочется работать дальше.

Планов много:
Надо подучить ООП
Дописать плагин под Joomla, может быть Drupal
Доработать плагин под WP (локализация, поддержка Canonical)

Подводя итог


Подводя итог своего эксперимента, могу сказать: этот небольшой марафон оказался для меня действительно полезным. Я подучил PHP, а так же немного вник в новые темы: документирование кода, SSH уязвимости, системы контроля версий. И пусть я не программист, но теперь значительно лучше их понимаю. Помимо практических знаний, этот 30 дневный эксперимент дал мне больше уверенности в своих силах. Удивительно, как небольшое усилие каждый день позволяет потихонечку двигать проект, который в самом начале казался достаточно сложным, и видеть, как это дает результат.

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

Теперь думаю сделать такие марафоны регулярными.

Если вы давно откладывали интересный проект или хотели научиться чему-то, но не было времени попробуйте 30 дневной марафон. Как минимум, вы начнете интересный для вас проект, а в идеале сделаете что-то стоящее и заработаете хорошую привычку.

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


  1. zorgzerg
    13.04.2015 09:32

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


  1. berezuev
    13.04.2015 10:48
    +3

    Ждем статью о том, как вы установили линукс.


    1. shatamba Автор
      13.04.2015 13:18

      Я работал c Suse и Ubuntu около полу года. Но свои выводы я не рискну выкладывать )). В следующем марафоне хочу попробовать разработку под Android.


      1. berezuev
        13.04.2015 15:13

        А я думал, тег <irony> не понадобится…


  1. BupycNet
    13.04.2015 18:24

    plugins.svn.wordpress.org/meta-robots-by-seo-sign/trunk/metarobots-wp.php

    Даа, надо бы немного подучить даже основы :)
    if ((($instruction) and ($metaRobotsRule)) != '') {
                    $metaRobotsRule = str_replace(array(',','.','*','/','?'), array('\,','\.','.*','\/','\?'), $metaRobotsRule);
                    $instruction = strtolower($instruction);
                    if ($metaRobotsRule != '') {
                        if (preg_match('/^' . $metaRobotsRule . '.*$/', $_SERVER['REQUEST_URI'])) {
                            if ('disallow' == $instruction) {
                                echo '<meta name="robots" content="noindex, nofollow">' . "\n";
                                $setMetaRobots = true;
                                break;
                            }
                            if ('follow' == $instruction) {
                                echo '<meta name="robots" content="noindex, follow">' . "\n";
                                $setMetaRobots = true;
                                break;
                            }
                            if ('index' == $instruction) {
                                echo '<meta name="robots" content="index, nofollow">' . "\n";
                                $setMetaRobots = true;
                                break;
                            }
                            if ('noarchive' == $instruction) {
                                echo '<meta name="robots" content="noarchive">' . "\n";
                                $setMetaRobots = true;
                                break;
                            }
                            if ('nosnippet' == $instruction) {
                                echo '<meta name="robots" content="nosnippet">' . "\n";
                                $setMetaRobots = true;
                                break;
                            }
                            if ('noodp' == $instruction) {
                                echo '<meta name="robots" content="noodp">' . "\n";
                                $setMetaRobots = true;
                                break;
                            }
                            if ('notranslate' == $instruction) {
                                echo '<meta name="robots" content="notranslate">' . "\n";
                                $setMetaRobots = true;
                                break;
                            }
                            if ('noimageindex' == $instruction) {
                                echo '<meta name="robots" content="noimageindex">' . "\n";
                                $setMetaRobots = true;
                                break;
                            }
                            if ('canonical' == $instruction) { 
                                if (preg_match('/\+/', $canonicalurl)) { 
                                    $canonicalurl = str_replace('+', '', $canonicalurl);
                                    list($baseurl) = explode($canonicalurl, trim($_SERVER['REQUEST_URI'])); 
                                    $canonicalurl = $_SERVER['HTTP_HOST'] . $baseurl . $canonicalurl; 
                                    if ($canonicalurl == '/') {
                                        $canonicalurl = $_SERVER['HTTP_HOST'];
                                    } 
                                    
                                }
                                if (preg_match('/\-/', $canonicalurl)) { 
                                    $canonicalurl = str_replace('-', '', $canonicalurl); 
                                    list($baseurl) = explode($canonicalurl, trim($_SERVER['REQUEST_URI'])); 
                                    $canonicalurl = $_SERVER['HTTP_HOST'] . $baseurl; 
                                    if ($canonicalurl == '/') {
                                        $canonicalurl = $_SERVER['HTTP_HOST'];
                                    } 
                                    
                                }
                                echo '<link rel="canonical" href="http://' . $canonicalurl . '">' . "\n";
                                break;
                            }
                        }
                    }
    


    1. shatamba Автор
      13.04.2015 20:14

      Я писал, что я не разработчик и более чем уверен, что методы которые я использую не оптимальны. Задачу выбрал такую потому, что устал писать ТЗ разработчикам на управление индексацией поисковыми системами. А с помощью своего модуля могу сделать все самостоятельно за пару минут.


  1. habrahabr22
    13.04.2015 21:17
    -1

    Знающие PHPшники напугали историями про воровство кода через подобные сервисы, теперь вот немного нервничаю

    Расслабьтесь, код уровня Hello, World! никому не нужен.