Фундамент знаний для программиста

Обновлено: 17.05.2024

Как стать программистом - руководство для начинающих

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

У меня получилась длинная статья, настоящее руководство для начинающих программистов. Я попытался раскрыть все аспекты, связанные с освоением новой профессии программиста с нуля.

Вот план по которому я вас сегодня поведу:

1 Плюсы в том чтобы быть программистом

  • 4 причины стать программистом

2 Языки программирования

  • Краткая история языков программирования
  • Самые популярные в 2021 году языки программирования
  • С какого языка программирования стоит начать изучение
  • Пишем простые программы на разных языках программирования прямо в браузере

3 Что нужно знать чтобы стать программистом?

  • 3 черты, присущие настоящему программисту

4 Как стать программистом?

  • Самостоятельное изучение языка программирования
  • Изучение языка программирования на курсах
  • Каким программистом стать?

5 Основные трудности, с которыми сталкиваются программисты в процессе работы

  • Работа в чужом коде
  • Трудности работы в больших и запутанных системах
  • Как избежать трудностей в работе программиста

1. Плюсы в том чтобы быть программистом

Давайтея кратко перечислю плюсы, которые вижу в профессии программиста.

4 причины чтобы стать программистом:

  1. Высокая зарплата. Это, наверное, самый заманчивый плюс. Сегодня многие наслышаны о зарплатах программиста. Многие в моем окружении зарабатывают 20 - 30 тыс. в месяц. Это считается хорошей зарплатой. Ведь некоторые зарабатывают и того меньше. А программисты часто зарабатывают более 100 тыс.руб/мес.
  2. Свобода. Стать программистом также стоит ради свободы. Кроме работы по найму, вы всегда можете работать на себя. Это может быть поначалу подработка, а затем и основная деятельность. Т.е. став программистом, вы в перспективе можете стать свободным человеком, который работает сам на себя и у которого нет начальства.
  3. Творческая самореализация. Мало в какой профессии есть столько простора для творчества и свободы самовыражения. Вы сами решаете, какие инструменты использовать, как писать код, как проектировать систему. Если вы займетесь разработкой мобильных приложений, вы сможете проектировать самостоятельно дизайн вашего будущего приложения.
  4. Возможность разбогатеть. Я не скажу, что все программисты богатеют, но потенциальная возможность у них есть. Программист может создать мобильное приложение и разместить его в GooglePlay, а наутро обнаружить миллион скачиваний. Программист может сделать с сайт, который станет популярным и принесет своему создателю большие деньги.

Думаю я замотивировал вас изучать программирование!? Так чего же мы ждем? Пора выяснить, как стать программистом!

Кстати в конце статьи в пункте 5 я расскажу вам о трудностях и сложностях с которыми сталкиваются программисты в процессе работы и дам советы, как с ними бороться.

2. Языки программирования

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

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

1.1 Краткая история языков программирования

На самом деле это могла бы быть тема для отдельного поста, уж очень она обширна и интересна. Но постараюсь быть максимально краток.

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

Fortran используют физики, чтобы решать уравнения, так же его используют для прогнозирования погоды.

COBOL - это язык программирования бизнес-приложений (современный аналог 1С). Его используют некоторые банки и по сей день.

В этом десятилетии создавались языки, в которые пытались заложить функционал для решения любых задач от сложных вычислений до бизнес приложений (скрещивали Fortran с Коболом).

PL/1. Язык с громким названием Program Language 1 (язык программирования номер 1). Это первый язык, который был создан для решения абсолютно всех задач. Он был настолько сложен, что не было создано ни одного компилятора, который бы поддерживал все его функции.

Algol 68. Второй супер-язык. Компилятор для него создали, но и он долго не просуществовал.

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

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

Pascal. Никлаус Вирт создает язык программирования Pascal взяв за основу Algol 68 и очень сильно обрезав его и оставив только самые необходимые языковые конструкции. Этот язык, а так же его потомки: Modula 2, Delphi станут основными языками для решения прикладных задач на несколько десятилетий. Сейчас редко используется.

C . Этот язык был сконструирован для задач системного программирования. На нем писали и пишут по сей день операционные системы, а также программы, в которых важна высокая производительность.

Стало модно использовать объектно-ориентированное программирование.

Smalltalk. Первый полностью объектно-ориентированный язык. Сейчас не используется.

C++. Это дальнейшее развитие языка C. В него добавили функции для программирования в объектно-ориентированном стиле. Этот язык широко используется по сей день.

На рубеже тысячелетия появляются 4 языка, которые очень популярны и по сей день. А так же 1С, очень популярный в России.

Python. Этот язык сегодня очень популярен. Он очень прост, поэтому его часто советую использовать для обучения программированию. Используется в веб-разработке, а также в задачах машинного обучения.

Java . Наверное, самый популярный сегодня язык для разработки кросплатформенных приложений т.е. таких приложений, которые работают на любой машине, где есть установленная виртуальная машина Java. Она как и Smalltalk, полностью объектно ориентированная.

PHP. Это самый популярный и самый широко используемый в мире язык программирования для веб-разработки. Большинство сайтов в интернете работают на PHP.

Javascript. Этот язык сначала использовался для того, чтобы сделать веб-страницы анимированными, а теперь используется во многих сферах. Очень популярен сегодня.

1С. Это внутренний язык программирования платформы 1С. Используется для создания бизнес-приложений для автоматизации предприятий. Сегодня очень популярный в России.

C Sharp. Это ответ Microsoft на Java. Они создали свой полностью объекто-ориентированный язык программирования. Очень популярен сегодня.

Go. Попытка компании Google создать замену языку программирования C++. Это очень популярный сегодня компилируемый язык программирования.

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

Rust. Это экспериментальный язык, созданный как еще одна попытка сделать улучшенную версию языка программирования C++.

Kotlin. Попытка создать более простую и более логичную версию языка Java. Работает на той же виртуальной машине Java.

Swift. Это язык программирования компании Apple. Используется для разработки приложений для iOS.

Julia. Этот язык программирования создан для программирования сложных математических вычислений. Создан, чтобы стать альтернативой устаревшему языку Fortran.

1.2 Самые популярные в 2021 году языки программирования

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

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

  1. C - 8000 вакансий.
  2. Java - 8100 вакансии.
  3. Python - 6400 вакансий
  4. C++ - 4000 вакансий
  5. C Sharp - 5000 вакансий
  6. Visual Basic - 207 вакансий
  7. JavaScript - 12 400 вакансий
  8. PHP - 5700 вакансий
  9. Assembly language - 184 вакансии
  10. Go - 2000 вакансий
  11. Delphi (Pascal) - 800 вакансий
  12. Groovy - 363 вакансии
  13. Ruby - 786 вакансий
  14. Perl - 362 вакансии
  15. MATLAB - 334 вакансии
  16. Swift - 1300 вакансий
  17. Objective-C - 760 вакансий
  18. 1С - 9700 вакансий

Из рейтинга я удалил SQL т.к. это не совсем язык программирования, это язык для управления базами данных. Помимо основного языка, вам скорее всего, придется использовать этот язык, когда вы будете составлять запросы к базе данных.

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

Сейчас с учетом вакансий на Российском рынке рейтинг 10 самых популярных языков будет выглядеть так:

  1. JavaScript - 12 400 вакансий
  2. 1С - 9700 вакансий
  3. Java - 8100 вакансий
  4. C - 8000 вакансий.
  5. Python - 6400 вакансий
  6. PHP - 5700 вакансий
  7. C Sharp - 5000 вакансий
  8. C++ - 4000 вакансий
  9. Go - 2000 вакансий
  10. Swift - 1300 вакансий

Вот эти 10 языков программирования и стоит выбирать для того,чтобы получить востребованную профессию в России.

1.3 С какого языка программирования стоит начать изучение

Мне кажется, для начала изучения языков программирования стоит выбрать простой язык. Даже если вы хотите стать системным программистом и писать операционные системы, то не стоит сразу начинать изучать C++ т.к. по мере погружения в теорию языка вы можете сломаться и забросить вообще ваше желание стать программистом.

Изучение программирования стоит начинать со следующих языков:

  • Scratch - это язык для начала обучения программированию. Именно его используют для обучения программированию детей младших классов. Он максимально прост т.к. языковые конструкции вам не нужно запоминать и писать - вы их просто перетаскиваете мышкой.
  • Python - этот язык был специально создан, чтобы сделать работу программиста более удобной за счет удобочитаемости программного кода.
  • 1С - это упрощенный язык программирования, который используется внутри платформы 1С. Язык максимально прост и программирование ведется на русском языке.
  • PHP - этот язык следует выбрать для изучения, если вы планируете стать веб-программистом.
  • JavaScript - еще один простой язык программирования. Вам достаточно блокнота, что бы за 1 час написать простую игру на этом языке и запустить ее в браузере.

1.4 Пишем простые программы на разных языках программирования прямо в браузере

Попробуйте прямо сейчас один из этих языков в действии.

1. Перейдите на сайт Scratch и создайте свою первую программу прямо в браузере. Там есть переключатель на русский язык (символ глобуса слева наверху). Что бы запустить, жмем зеленый флажок.

2. Перейдите на официальный сайт Python и напишите свой первый скрипт прямо в браузере.

2. Что нужно знать что бы стать программистом?

Программист - профессия высокооплачиваемая и многие хотят стать программистами. Но при этом это профессия сложная, связанная со множеством непонятных терминов и вообще с кучей всего непонятного. Это многих и пугает. По этому возникает желание разобраться и выяснить, что нужно,чтобы стать программистом?

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

3 черты настоящего программиста:

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

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

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

3. Как стать программистом?

У меня часто спрашивали: "Как стать программистом с нуля?"и я всегда уточнял каким программистом хочет стать человек. Чтобы стать программистом, нужно сначала определиться со специализацией: вы хотите быть веб-программистом и делать сайты или автоматизировать производственные компании. Далее, вам нужно выбрать подходящий язык программирования и изучить его.

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

3.1 Самостоятельное изучение языка программирования

Если вы уверенно можете сказать себе:"Хочу стать программистом", то вполне возможно, вы сможете изучить программирование самостоятельно!

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

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

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

1. Выбирайте один из простых языков о которых я говорил выше для начала изучения: Python, JavaScrypt, 1С, PHP.

2. Если используете веб программирование, используйте популярный фреймворк, а не пишите движок сайта с нуля. Например, для Python это Django, для PHP это laravel или Yii 2.

3. Прочтите книгу "Алгоритмы и структуры данных" Никлауса Вирта, создателя языка Pascal. Потому что это основа программирования.

3.2 Изучение программирования на курсах

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

Я рекомендую использовать известные онлайн-школы,которые уже давно появились на российском рынке онлайн образования. Я бы рекомендовал три такие онлайн школы: SkillBox , Netology , GeekBrains . У них есть хорошие курсы про программированию.

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

Я сам по образованию учитель, хотя и работаю с 2008 года программистом. И я считаю, что он-лайн курсы - это хороший способ за короткий срок получить новую профессию и стать программистом. Если у вас много времени и вопрос получения новой профессии не стоит столь остро, то вы можете попробовать обучиться сначала самостоятельно.

3.3 Каким программистом стать?

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

Разработка бизнес-программ. Это очень востребованная сфера, ведь каждый бизнес нуждается в автоматизации: начиная с мелких ИП с маленьким магазином продуктов, заканчивая крупными холдингами. В России самыми популярными программами для бизнеса являются программы компании 1С. Это "1С:Бухгалтерия", "1С:Управление торговлей", "1С:ERP", "1С:Управление холдингом" и сотни других отраслевых решений.

  • Рекомендую курс "Профессия 1С-разработчик" от SkillBox .
  • Рекомендую курс "1С-программист" от Netology .

Веб разработка. Это создание сайтов по требованиям заказчика. Можно разрабатывать сайты компаний, блоги, интернет-магазины. Для веб-разработки сейчас чаще всего используют PHP и Python для программирования бэкэнда. И JavaScript для программирования фронтенда.

  • Рекомендую курс "Профессия PHP-разработчик" от SkillBox .
  • Рекомендую курс "Профессия Python-разработчик" от skillBox .
  • Рекомендую курс "Профессия веб-разработчик" от SkillBox.
  • Рекомендую курс "PHP разработчик с нуля" от Netology .

Разработка мобильных приложений. Это весьма перспективное направление программирования. Освоив разработку мобильных приложений, вы сможете найти хорошую работу, а так же у вас есть шанс разработать хорошее мобильное приложение и заработать деньги разместив его в GooglePlay и AppStor.

  • Рекомендую курс "Профессия Android-разработчик" от SkillBox.
  • Рекомендую курс "Профессия iOS-разработчик" от SkillBox .
  • Рекомендую бесплатный мини-курс "Разработка мобильных приложений с нуля" от Netology .

5 Основные трудности, с которыми сталкиваются программисты в процессе работы

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

Работа в чужом коде

Программисты проектируют и пишут системы с нуля. Но так бывает не всегда. Очень часто приходится сопровождать и дорабатывать уже действующие системы. Такой код называют Легаси кодом.

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

Трудности работы в больших и запутанных системах

Реально работающие программные комплексы содержат тысячи строк кода, над ними трудятся десятки и сотни программистов. Документация в таких системах может содержать множество томов.

Программисту постоянно приходится работать в сложных системах. Это основная трудность работы программиста. Некоторые системы по числу объектов и их взаимосвязей напоминают организм человека или военный истребитель.

Как избежать трудностей в работе программиста

Я вам посоветую борьбу со сложностью сразу поставить для себя как цель. Продумывайте архитектуру и не создавайте сами запутанных систем. Если вам предстоит работать с Легаси кодом, максимально изолируйтесь от него. Создайте подсистему рядом, которая будет взаимодействовать с Легаси кодом и вы всегда сможете понимать, где ваши владения, а где вражеский непонятный мир.

Я советую вам параллельно с изучением программированию почитать следующие книги:

Стив Макконнелл "Совершенный код" . Это очень интересно написанная книга, содержащая множество рекомендаций программистам как писать понятный, не запутанный и легко сопровождаемый код. Кстати, книга не привязана ни к какому языку программирования. В ней содержатся общие советы, которые можно использовать в любом языке прграммирования.

Фредерик Брукс "Мифический человеко-месяц, или Как создаются программные системы". Эта старая книга, но в ней очень хорошо расписывается процесс создания сложных программных систем.

Итоги

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

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

Программирование для начинающих: как стартовать и куда двигаться?

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

Я, будучи недавно в такой же ситуации, гуглила, искала мануалов на Хабре (кое-что нашла: Десять советов начинающим программистам, Начинающему программисту про стартапы и не только…), но в итоге всё же была вынуждена обратиться за советом к одному хорошему человеку, который составил для меня вот такой план. С разрешения этого человека размещаю данный план на Хабре – вдруг он пригодится и кому-то ещё. (Тем более, что перечисленные книги относятся к «золотому фонду» литературы в данной сфере и проверены временем.)

UPD: Новичкам советую обратить внимание на комментарии — там активно и аргументированно корректируется этот план.

Нортон «Программно-аппаратная организация IBM PC»
Эта книга, несмотря на свою давность, относятся к тем, что пока отнюдь не устарели. Как новичок подтверждаю – повествование вполне понятно и для почти полного чайника в IT.

Гук «Аппаратные средства IBM PC»
А эту книгу стоит прочитать «поверх» – она расскажет о том, как дела в данной сфере обстоят сейчас.

Этап II. Hardware

Морс, Алберт «Архитектура микропроцессора 80286»
Почему тут берётся за основу именно микропроцессор 80286 – станет понятно по изучении трудов первого этапа.

Гук «Аппаратные интерфейсы ПК»

Гук «Интерфейсы устройств хранения»

Этап III. Операционные системы

Таненбаум «Архитектура компьютера»

Колисниченко, Аллен «Linux: полное руководство»
От общей теории переходим к изучению конкретной операционной системы – на примере Linux.

Немет, Снайдер, Хейн «Руководство администратора Linux»

Этап IV. Собственно программирование

Керниган, Ричи «Язык программирования С»
Почему первым для освоения выбран именно язык Си? Как мне рассказали знающие товарищи, он поможет достичь правильного «программистского мышления», чего было бы сложно достичь, начиная изучение, скажем, с Паскаля. Кроме того, язык Си по-прежнему используется в наши дни и подходит как для прикладного, так и для системного программирования.

Кнут «Искусство программирования»:
Том 1. Основные алгоритмы
Том 2. Получисленные алгоритмы
Том 3. Сортировка и поиск

Бентли «Жемчужины программирования»

Зачем осваивать эти труды? Как уже отмечали на Хабре – «наверное, нигде больше, чем в айти, не изобретается такое огромное количество велосипедов». Данные книги помогут этого избежать – и попутно будут прививать умение писать не просто код, а хороший код.

Ну а для затравки можно прочесть небольшой цикл лекций «Культура программирования» (автор – А. Бабий). Он помогает начинающим программистам понять, что их деятельность не будет проходить в вакууме, а неизбежно включит взаимодействие с другими программистами, с заказчиками и пользователями (а также включит необходимость копаться потом в своих собственных или в чужих программах).

Закономерный вопрос новичка: сколько времени займёт изучение всего этого? По прогнозам моего советчика, у человека, который может тратить на изучение программирования только вечера и выходные, на прочтение и осмысление литературы первых трёх этапов уйдёт полгода-год. На четвёртый этап тоже даётся год – чтение должно сопровождаться практикой по самостоятельному составлению программ. Как получится на самом деле – время покажет.

Фундамент знаний и кирпичи навыков

В предыдущих обсуждениях возникло некоторое недопонимание смысла синдрома «многорукого Шивы» и смысла «изучать вглубь». Примеры, которые я буду приводить, будут касаться системного администрирования, но, думаю, в остальных ИТ-областях ситуация аналогичная (будь то программирование, вёрстка, написание баз данных, или возня с железом).

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

Представим себе навыки, как кирпичи. Приобретение каждого из них относительно просто и быстро (хотя может и заставить сильно материться в процессе).

Представим себе знания, как фундамент.

Можете ли вы раскидать кирпичи по пляжу? Можете.


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

Опыт растёт, растут навыки. Груды кирпича местами начинает доходить до высоты человеческого роста. Этот опытный уже-не-эникейщик-и-почти-админ «знает всё» про десктопные винды (хотя первая же пара вопросов про локальные политики безопасности повергнет его в ступор). У него приличная груда несистематизированного кирпича в одной-двух областях, зародыши будущей специализации. По мере работы появляются кучки кирпича в других областях, несвязанных с первой. (следуя канве эникейства: протягивание СКС, настройка АТС, игра на дуде, обновление конфигурации 1С, художественный оверквотинг, монтаж видеонаблюдения, пожарной сигнализации, настройка скайпа, нажатие any key и т.д.).

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

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

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

Более того, строительство фундамента приводит к ужасной ситуации: кирпичи можно выкладывать только там, где есть фундамент! Больше не получается раскидывать их куда попало — потому что там песок, и совсем нет опоры. Точнее, раскидывать можно куда угодно, но эффективно складывать их можно только там, где есть фундамент.

А копать фундамент сложнее, чем таскать кирпичи. Дольше, неблагодарнее. И человек, разумеется, начинает стараться складывать кирпичи там, где фундамент есть.

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

… Человек начинает строить выше и выше, но оказывается, что фундамента мало. Он слишком слаб, и нужно делать его больше, глубже, шире, захватывая соседние области. [Тут моя аналогия хромает, доделывать фундамент под полу-построенное здание не получится, а вот знания под навыки можно вполне получать].

И вот, человек начинает расширять фундамент. Тяжёлая, неблагодарная работа. Чем глубже закапываешься, тем сложнее (потому что на глубину 5 см весь город завален книжками «Фундаменты для чайников за 24 часа», на глубину 50см — есть несколько хороших толстых учебников, на глубину метр — пара недописанных руководств и несколько монографий в научных журналах, а дальше там только своими силами. ). Зато, на этом фундаменте уже можно строить огромной высоты и сложности здания. Кирпича в них, быть может, и не больше, чем в грудах вокруг, но то, как он уложен, то, как он стоит, делает именно этот кирпич много выше и функциональнее, чем просто груда навыков…

Человек в любой момент может начать строить в новом месте. Пристраивать одноэтажную халупу с своему основному зданию, или смещать весь центр знания на новую точку. А может, вообще построить отдельный домик (администрирую циски и джуниперы, а ещё хорошо умею паять, да и в радиоэлектронике неплохо разбираюсь).

Синдром «многорукого Шивы» — это когда вы кладёте кирпичи туда, куда сказал начальник, или куда занесло ветром перекати-поля жизни. Сегодня одни кучи, завтра другие… Для более-менее приличной кучки кирпичей на новом месте приходится много-много таскать руками, складывая кучи снова и снова. Иногда старые кучи пригождаются, но на то «многорукий Шива» и многорук, что куч у него много, и нужно их всё больше и больше.

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

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

Столкнувшись с технологией нужно либо «обойти её по минимуму» (настроил АТС и забыл), либо закапываться в неё по максимуму. Что, почему, как… А почему именно так? А в каком стандарте это написано? А что в этом стандарте ещё написано? А как это выглядит на практике? А есть ли ещё аналогичные стандарты? А нестандартные решения? А в чём мотивация стандарта, на чём он основывается? А почему в этой теории полагается именно так, а не иначе?

Любую тему можно рыть «до самого дна». Разумеется, не на любую тему есть время, силы. Но должно быть хоть сколько-то системно охваченных областей, в которых есть фундамент и понимание «от и до». Иначе — всю жизнь кирпичи кучками.

Что следует знать перед тем как «увлечься» программированием


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

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

Я и сам пошел по этому пути — скачивал тучи роликов, впридачу купил несколько книг, читал их и забрасывал, потому что мне все-равно не хватало знаний и подготовки, несмотря на то, что все материалы были предназначены для «новичков». Я постоянно гуглил разные мелочи, задавал нубские вопросы на форумах, хватая минусы, и это убивало во мне желание продолжать самообучение.

Да, любые знания и любой накопленный (нагугленный?) опыт вам, безусловно, поможет и пригодится, однако ваша цель научиться тому, чему вы хотите научиться, и увидеть мало-мальский результат в обозримом будущем ведь так?

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

Это как если вы пришли работать, скажем, крановщиком, вас в первый же день посадили в башню, и похлопали по плечу со словами «Ну, удачи!». А как же техника безопасности и базовое объяснение что делать, а чего делать не нужно? Как мне пользоваться инструментами? Что вообще у меня за инструменты в наличии? Что я должен знать перед тем как приступить к работе?

Статья носит сугубо рекомендательный характер, однако попадись мне подобный топик на глаза пол года назад, я бы значительно увеличил свою продуктивность, сэкономил уйму времени себе, а так же множеству людей с форумов, отвечавшим на мои абсолютно идиотские вопросы. К каждому пункту я добавил несколько ссылок, как отправных точек для начала обучения. Так как текст предназначается для абсолютных новичков (да и сам я еще таким себя считаю) — я буду изъясняться предельно просто и понятно, поэтому если вы — гуру, и вы нашли в моем тексте оплошность — судите, но не строго!

Итак, что же следует знать, перед тем как увлечься программированием?

1. Терминал

Буду с вами предельно честен. Если бы кто-либо пол-года назад сказал мне, что люди этой планеты до сих пор активно используют командную строку, даже при наличии навороченных графических интерфейсов и самых передовых ОС — я бы рассмеялся этому человеку в лицо. Однако после начала просмотра первого же скринкаста мне было уже не так смешно — вместо распрекрасного маковского интерфейса на меня сурово смотрело черное окно, которое я, кажется, видел и раньше, в девяностых. Уже спустя считанные дни я смеялся все меньше и сдержаннее, наблюдая как парни из скринкастов умело совершают любые действия при помощи текстовых команд, о предназначении которых я не имел понятия. Сами понимаете, насколько эта проблема затормозила мой процесс обучения. Я пытался держаться, повторяя себе, что терминал — штука ненужная, и наверняка человек из следующего скринкаста будет по-максимуму использовать ярлычки и мышку — но нет, чуда не происходило, пытка продолжалась и вскоре (после того как меня заинтересовала Node.js) я сдался.

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

Самообучение
2. Регулярные выражения

Представьте себе, что вы решили выучить иностранный язык не вникая в его азбуку, алфавит или иероглифику. Конечно, это возможно. Но насколько это усложнит процесс и путь к пониманию сути вещей? Решение сомнительное, правда? Так вот, регулярные выражения (они же регексы, с ударением на первый слог) — это, объясняясь простым языком, в какой-то степени вспомогательная азбука любого программиста, или, выражаясь языком викисловаря — «формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов».

Выглядеть регекс может, например, так:

Задача регулярных выражений — помочь программисту с поиском чего-либо. Сейчас объясню.

Если я в своей программе захочу найти все слова, частью которых является слово car (car, carrot, cartoon), мой регекс будет выглядеть так:

Если же меня интересует только слово car, я напишу:

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

«Ну поиск, кому оно надо? Я же буду учиться программировать, а не искать слова!» — наверняка подумаете вы. Я вас услышал и даже понял. Так что если вы все еще сомневаетесь в необходимости заморачиваться с регулярными выражениями, просто поверьте мне на слово — они вам пригодятся. Многие книги и скринкасты используют регексы в примерах, вообще не объясняя, что происходит — авторы думают, что вы уже владеете этими азами и особенно не акцентируют внимание на разжевывании написанного.

Зубрить их совсем не обязательно, но, согласитесь, просмотр пары-тройки скринкастов на данную тематику вас явно не убъет.

Самообучение
3. Софт для разработки — знай свое оружие

Правило номер один — вы должны по-максимуму знать и владеть своими инструментами. Грамотно выбранный и изученный редактор, в котором вы вскоре обязательно начнете творить чудеса, я легко могу сравнить с превосходно подобранным самурайским мечом. Солдаты собирают и разбирают свои автоматы с завязанными глазами — вот насколько хорошо вы должны владеть софтом, которым пользуетесь! Пока вы буква за буквой пишете простую функцию, ваш враг, используя весь потенциал своего редактора, напишет несколько.

Для веб-разработки существует огромное количество програм, от простых текстовых редакторов до сложных облачных решений. В этой статье я не буду сравнивать эти редакторы между собой, вам придется сделать это самостоятельно — ведь вам с этим редактором жить, работать и смотреть на него и в горе и в радости. Я остановил свой выбор на редакторе Sublime Text 2. Помимо тонны возможностей, которыми обладает Sublime, необходимо отметить, что он условно-бесплатный и по нему существует множество отличной документации. Возможно совсем скоро, познав все хитрости Sublime и научившись подключать к нему плагины, подобная строка будет для вас обычным делом:

div>(header>ul>li*2>a)+footer>p (используется плагин Emmet, если кому интересно)

Самообучение
4. Система контроля версий

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

Резонный вопрос: «Зачем мне этот Гитхаб осваивать, ведь мне пока нечего выкладывать?» А причин на то несколько. Помимо содержания собственных репозиториев, GitHub, во-первых, поможет вам осознать себя частью огромного сообщества разработчиков (возможно, кто-то из читающих сейчас ухмыльнулся, но поверьте, это действительно важно, особенно на ранних стадиях обучения!). Кроме того, вы сможете взглянуть на чужой исходный код и научитесь правильно его скачивать и «форкать» (копировать). В дальнейшем GitHub частенько будет всплывать в различных онлайн-курсах и скринкастах, и, конечно же, их авторы будут уверены в том, что вы знаете, как Гитхабом пользоваться. Поэтому если у вас найдется немного времени на неделе, сделайте себе одолжение — попробуйте Git.

Самообучение
5. История и культура

Этот пункт, скорее, вспомогательный, но если программиста которым вы восхищаетесь зовут Стив Джобс, то прошу вас, продолжайте чтение. Программирование имеет богатую и интересную историю (говорю вам как историк по первому диплому), в которой следует поковыряться хотя бы для общего образования. Занимаясь чем-либо, всегда полезно знать, откуда у этого чего-либо растут ноги. Кроме того, я искрене считаю, что без знания истории предмета невозможно полностью понять его суть, и, следовательно, достичь предельных успехов в его освоении. Поэтому если по прошествии некоторого времени такие имена, как Линус Торвальдс или же Грейс Хоппер не будут для вас пустым звуком — уважение вам и респект!

Помните — тот, кто не изучает историю, повторяет ее ошибки.

Заключение

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

Читайте также: