Чем занять себя на прокачку скиллов?!

  • написал: MpaK
  • 467
Уже не в первый раз получаю мессаджи от начинающих программеров, ребятам не хватает вдохновения в плане проектов для прокачки своих PHP+MySQL+JS скиллов.

Понятная проблема, сам никогда не маялся с такой вещи, со времен еще Basic и Assembler программирования под ZX-Spectrum я просто, что-то видел, например офигенный красоты загрузчик, брал его и разбирал, понимал как работает и потом делал точно такой же. Или просто сразу же делал нечто такое же по своей идеи. Игры. Так же видел Dizzy например и хотелось сделать такое же.

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

Конечно тут можно покривить носики и сказать: "фу-у-у-". Типа очередное изобретение велосипеда на коленке. Разумеется надо ко всему подойти с умом. Я бы даже сейчас например начав писать блог не стал например писать его с нуля на том же PHP, с нуля создавая классы, структуру, роутинг, датамаппер и т.п.

Я бы разумеется взял сейчас какой-нибудь любимый фреймворк и за пару суток написал удобный для меня блог, почти что с нуля.
Но это не правильный совет, тот же фреймворк для начинающего в деле освоения php скроет очень много деталей, многое останется непонятым и как принципом черного ящика. Для того, кто прокачивается в деле это не правильно, он должен понимать, знать как это работает, почему так и не иначе. Начинающему программисту надо понять, что его уровень в вебе не так силён как например в написании для Десктопа на C, C++, C#, Delphi и т.п. языкам, что преподают в интитутах. Пока еще нет точного понятия как работает веб, в чем отличия веб-приложений от десктоп, что такое сервер приложений, rest, ajax, как можно хранить сессии и так называемые persistent connections и т.п. Как раз, то что .net скрывает порой от программистов на нём, считающих, что view state это почти, что десктоп приложение, что на самом деле не так и .NET MVC это раскрывает для них. Это нужно как бы понять, сложно конечно перестроить мозги после десктопа, но надо, тогда в дальнейшем вся эта магия вокруг всяких терминов будет четко и ясно понятна как работает и что на самом деле внутри.

Я сам мучался при переходе с десктоп программирования на MFC, С++Builder. У меня было увлечение, я любил и люблю метал музыку, начинал просто покупать кассеты и описывать свои ощущения и впечатления о прослушанной музыке. Но когда мне надоело поддерживать чистый html сайт http://blackmetal.narod.ru Я начал думать и изучать как делают сайты динамичными, социально ориентированными и чтобы не я один мог заниматься контентом на сайте. Эдакие первые зерна Web 2.0 попали мне в голову, я решил изучать Perl. Почему не PHP? В то время он был жалок, много еще где 3я версия, ужасная, тормозная и корявая. 4ка была уже, но редко и не на бесплатных хостингах. Но даже 4ка так же пока проигрывала Perlу по всем параметрам, от скорости (все бесплатные хостеры тогда давали в CGI запуске, а тут уж даже TT или MASON всё равно пыху уделывают), до удобства, кол-ва библиотек и удобства программирования. Так за много лет вырос проект, менявший форму, хостеров в нечто такое http://eclipse.bestweb.ru проект на данный момент уже несколько лет заморожен, но уже несколько месяцев летает вокруг идея как его реанимировать, при этом сделать оригинальный проект и систему электронного журнала, аналогов которой я еще не встречал.
В целом у меня была цель, идея, для чего изучать веб-программирование. А работа уже в этой области стала позднее, когда я понял, что всё, десктоп меня больше не привлекает и я хочу писать только под Интернет.

Ну так, что бы я посоветовал начинающих веб-программистам, на любом языке, будь то PHP как самый массовый и востребованный язык, до PERL который кажется уже загибащимся старичком, маловостребованным, но всё же еще требующим людей, знаний и навыков, или Java которая кажется таким вот энтерпрайз монстром, а на самом деле меня лично пугает безумное кол-во технологий и вариантов решения, до всякой модной экзотики Ruby, Python которые диктуют будущее веб-разработок?

1. Возьмитесь за один язык. Изучите просто его:
— какие типы есть (даже тот же PHP последнее время стал чертовски требователен к типам, а в нем их если не ошибаюсь аж целых 6), массивы, хэши, операции с ними, приведение типов
— как пишутся циклы, выходы из них, прерывания, я был недавно удивлен, когда человек не знал в PHP о таких вещах как continue, break — они очень облегчат вашу жизнь и помогут писать оптимизированные скрипты
— если есть ООП то попробуйте создавать простейшие классы, объекты, изучить наследование, понять парочку паттернов как синглетон, регистри, фабрика и слушатель-сервер к примеру
— если есть модули и нэймспейс то попробуйте их, как они работают, если они есть они всегда вам помогут в будущем на больших системах

2. Когда вы всё поняли по языковым конструкциям, теперь можно приступать к изучению практических приемов, как многие популярные проекты написаны, как устроены, как они делают это и это. Сразу предупреждение, проекты на PHP многие, большие и универсальные написаны из рук вон плохо, по ним не стоит учиться и перенимать их технику ни в коем случае, нужно тщательно прислушиваться к описаниям в сети. Я бы лично не рекомендовал смотреть такие вещи как (Wordpress, Drupal, Joomla, Bitrix, Netcat, PHPBB) это тихий ужас, когда в погоне за универсальностью и массовостью тащат старый груз непродуманного кода.
Посмотрите лучше как написаны (Vanilla forum, Invision Board, PunBB, UMI.CMS, FrogCMS) это очень удачные продукты, написанные так же приятно и продуманно как и спроектированы. Посмотрите какие-либо фреймворки как CodeIgniter (очень простой в изучение, но очень понятный и приятный в написании), Symfony, YII. Так же стоит найти в сети цикл статей посвященных созданию своего, простого MVC фреймворка, я лично находил 2е разных таких статьи, которые приятно пояснили как можно создать свой каркас. Если надо будет, я расшарю вам их из своего DropBox'а.

3. После изучения, просмотра чужого кода, я уверен, что у вас появятся идеи по созданию какого-либо проекта. Например вот я лично не видел еще такого проекта как "Еженедельный кода-копатель", когда автор бы каждую неделю брал бы проект какого-то опен соурс решения, разбирал бы его на винтики, устройство, возможности, код. Ровно за неделю, ни дня меньше, ни дня больше. Что успел разобрать, то и описал на своем сайте "копателя" :) Чем не проект. Но вот например для этого проекта нужна блого-платформа. Можно конечно взять какой-нить Wordpress и не дуть в ус. Но это же не путь начинающего воина похапэ, потому как раз можно применить свои новые знания на создание блогового движка.
Что это даст и выделит?
— MVC стоит сразу сделать каркас который позволит потом не только иметь контроллер Blog и BlogAdmin, но например дописать позднее туда PhotoAlbum или YoutubeVideo контроллеры, совмещая туда фотоальбомы и например некие видеоролики разборов
— Удастся сразу закрепить ряд паттернов помимо MVC, пригодится Singleton для например подключения к базе данных, ActiveRecord или ORM (DataMapper) для удобных моделей
— Можно к примеру поизучать заодно и применить какой-либо шаблонизатор например Smarty, но я бы настаивал на Twig
— Сразу же поймете как делается авторизация в веб-приложениях, заодно можно прикрутить простейший ACL, брать, что-то сторонее я бы не стал, тут и так все просто
— Тэги для постов в блоге и связь с автором как раз дадут понять о том как работают связи в MySQL, как оптимизировать join и поддерживать целостность в InnoDB
— Работа со временем даст вам понятие, что например ваш сервер находится в США, вы размещаете пост в блоге в 11 утра, а он показывается как 5 утра и что такое UTC (GMT) и как лучше всего хранить даты, время и прочие единицы

Написав, что-то подобное, работающее, лучше сразу часть вещей выкладывать на всеобщее обозрение, чтобы люди помогали фиксить баги. Сделав первый релиз, отлично бы рассказать о нём на Хабре. Плевков будет мало, велосипед можно объяснить, а зато опыт выдержки нападков троллей и кучу найденных багов и дыр вам это даст несомненно! Сразу же можно садиться за 2ую версию, без багов и замечаний.

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

3 комментария

avatar
Server-Side программирование начал десять лет назад с попытки записать данные на сервер скриптом на VBScript в теге <script></script> ))) Изучение неизвестной области научным методом, скажем так, довольно занимательный процесс )
avatar
  • MpaK
  • +2
Тыком-то да, почти все начинали изучать. Но в какой-то момент понимаешь, что надо изучать базис, потому как с ним удобнее, быстрее и понятнее, что твориться вокруг и внутри
комментарий был удален
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.