Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Как стать программистом и избежать детских ошибок, первый выпуск / 2009-10-12


Приветствую Вас, дорогой читатель!

Это первый выпуск рассылки, а потому я хочу напомнить, что пока не знаю, кто Вы, с каким багажом знаний пришли ко мне и куда держите путь. Я надеюсь узнать это в дальнейшем, чтобы сделать рассылку интересной для Вас. Вы же, чтобы помочь мне в этом, пишите письма на pavel@koryagin.com — задавайте вопросы, делитесь оценками, предлагайте темы.

Для того, чтобы упоминания Школы программистов в дальнейшем не казались чересчур навязчивыми, давайте определимся об отношении рассылки к этому проекту. Читатели рассылки будут бесплатно получать рецепты, которые позволят им улучшить свои навыки программиста. В их числе будут и рецепты, взятые из курсов Школы. Те же читатели, кому эти знания покажутся несистемными и недостаточными — могут поступить в Школу, получив там целостное профессиональное образование.


Пока читателей немного, начнём с довольно общей вещи. С психологии.

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

Итак, если Вы решили стать программистом, то первым делом стоит разобраться с тем, как Вы этого добьётесь.

Вот несколько привычек и навыков, которые Вам понадобятся.

1. Самообразование

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

  • Вы писали программы для людей? Очень хорошо, но теперь Вам нужно встроить связь с Facebook и ЖЖ по XMLRPC.
  • Вы владеете CakePHP? Замечательно, но мы работаем на Symfony.
  • Вы умеете делать качественную вёрстку таблицами? Прекрасно. Но теперь все требуют блоки.

Просто будьте постоянно готовы засесть за учебник.

2. Любознательность и Google-рефлекс

Если встречаете неизвестные термины или названия — сразу ищите их значение.

В справочнике, в Гугле, в Википедии... Это окупится.

3. Good English

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

Кроме того, многие люди, чей родной язык не английский, делают программное обеспечение и документацию к нему сразу на этом языке, чтобы не тратить силы на перевод.

Если Вы достаточно хороший специалист, чтобы не конкурировать с индийцами, то формула «зарабатывать на Западе, тратить в СНГ» по прежнему даёт очень приятный эффект.

Однако у большинства из читателей, уверен, есть отрицательный опыт изучения языков в школе. Потрачено много лет, а навыки практически нулевые. Мне это тоже знакомо. Поэтому в курс Школы заложен способ естественного освоения языка. Этим путём прошли все программисты, которых я знал лично.

4. Уважение к чужому труду

Современные инструменты позволяют очень сильно повысить Вашу производительность. Однако есть занятный парадокс:

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

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

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

5. Использование готовых компонентов

Сегодня Интернет забит различными готовыми решениями. Теоретически, их использование позволяет сэкономить кучу времени на отладке и написании.

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

Однако есть небольшое количество решений, освоение которых даёт невероятный прирост производительности. Большинство из них на слуху, но не все.

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

6. Смелость

Единственный способ освоить незнакомую технологию — это связаться с ней.

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

Будьте смелы с задачами и честны с коллегами.

7. Умение решать нерешаемое

Вы часто будете сталкиваться с задачами, решить которые не можете.

Это значит лишь то, что Вы не можете их решить сразу. Но всё-таки они решаемы.

Для таких случаев неплохо иметь арсенал приёмов решения изобретательских задач. В частности, в курс Школы я включил такие вопросы как:

  • Системное мышление. Привычка видеть всю среду, в которой возникла проблема делает очевидными решения многих задач, на которых другие задумываются.
  • Логика развития (диалектика). Если Вы понимаете, что противоречие — естественное состояние живой системы, а его разрешение — это и есть развитие, то трудные задачи не приведут Вас в уныние.
  • Интуиция. С конца XIX века, когда западная наука, наконец признала психику предметом исследования, были обнаружены и описаны некоторые интересные её эффекты. Например, в норме, при мышлении левое полушарие блокирует работу правого. Но если научиться ловить момент для перерыва и расслабления, то наградой будут очень интересные и изящные решения, как будто «всплывшие» из ниоткуда.

Кстати, первые два пункта входят, например, в ТРИЗ.

И всё?

Во-первых, уже немало. Многое из этого нельзя изучить, к нему можно только привыкнуть. Именно это и происходит в Школе программистов.

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

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

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

Алгоритмическое мышление тоже состоит в не самых простых отношениях с современным программированием. Разработка ПО всё сильнее тянется к описательным технологиям вместо алгоритмов — то есть дескриптивному программированию. Например, такие языки, как HTML, SQL и «регулярные выражения» составляют существенную часть Веб-приложения, но являются описательными. Тем не менее, алгоритмы никуда не исчезли и требуют умения с ними обращаться, хотя роль их уже не такая исключительная, как была раньше.


Этот выпуск Вы можете прокомментировать в Живом Журнале.


В избранное