Примерно в октябре 2015 года я начал интересоваться программированием.

Я начал с Python (потому что курс Python на Coursera возник, когда я буквально гуглил как научиться программировать).

Я узнал об основных вещах, таких как операторы if / else, циклы for / while, переменные, функции и т. Д.

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

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

Я начал изучать HTML, CSS и JavaScript. Этот этап моего путешествия немного туманный, потому что он был спорадическим и неструктурированным. Я помню, какие ресурсы я использовал, но не помню точно, в каком порядке я их использовал, но я буду стараться изо всех сил.

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

Сегодня я все еще использую довольно много из этих ресурсов:

  • Другие курсы Udemy
  • freeCodeCamp
  • W3Schools учебники
  • Встречи веб-разработчиков в рамках встречи San Antonio Coding Challenge
  • MDN
  • CSSTricks

«Горб»

Большую часть этого я все еще находился в «горке». Я все пытался и пытался, но мне казалось, что мне становится хуже. Мне было почти 20, когда я начал программировать, и я буквально думаю, что мой мозг перестраивался, чтобы мыслить программно и алгоритмически. Это был болезненный процесс, но единственный выход - это пройти.

«Горб» - это, по сути, период времени, в течение которого он учится быть разработчиком после изучения простых, низко висящих плодов (что такое переменная?), Но до способности производить ценные вещи.

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

Это временно.

Пройди через это, я знаю, ты сможешь!

Дизайн

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

Тем не менее, я упорно работал над своими дизайнерскими навыками, и я узнал некоторые общие вещи, которые действительно прошли долгий путь:

  • Основы теории цвета, цветовое колесо, различные типы цветовых схем.
  • (если / когда вы совсем заблудились, просто зайдите в Adobe Color и выберите что-нибудь крутое)
  • Если вы не знаете, что делаете, текст должен быть почти черным или белым или где-то посередине.
  • Используйте такой инструмент, как Image Color Extract, чтобы найти основные цвета изображения и использовать их в своем дизайне.
  • Базовое понимание шрифтов, например, разница между шрифтами с засечками и без засечек.
  • Раньше я буквально думал, что могу просто найти 2 любых хороших шрифта в шрифтах Google, и они будут работать вместе. Крутые сами по себе, должно быть, вместе круто, правда? Не делай этой ошибки. Если вы не совсем уверены в том, что делаете, я просто найду шрифт, который вам нравится, который подходит к тону вашего сайта, и затем воспользуюсь предложенной парой шрифтов.
  • В целом со шрифтами меньше значит больше.
  • Тот факт, что настоящий черный цвет довольно резок как цвет шрифта, часто не используется на большинстве популярных веб-сайтов.
  • Руководство по стилю 8pt, которое на самом деле очень похоже на теорию музыки. Идея состоит в том, что при установке отступов, полей, ширины или высоты вы должны использовать значения, кратные 8 пикселям. Подробнее об этом здесь.
  • BOX-SHADOW ТАК ОПАСНЫЙ КЛАСС. Если вы не используете box-shadow достаточно регулярно, вы упускаете из виду.
  • ^ также линейные градиенты.
  • Осознание того, что другие люди намного лучше меня дизайнеры. Я не стремлюсь стать лучшим дизайнером в мире (если да, то этот совет, вероятно, не для вас):
  • Если вы не знаете, что установить box-shadow или какими должны быть характеристики перехода, или линейные градиенты, или какие-либо визуально сложные элементы CSS, ПРОСТО GOOGLE IT! Есть так много хороших примеров. Я часто гуглил такие вещи, как «хорошие примеры box-shadow», затем нахожу тот, который мне нравится, копирую и вставляю его. Как разработчики, мы знаем, что не изобретать велосипед для алгоритмов, но на самом деле мне потребовалось довольно много времени, чтобы понять, что мне не нужно изобретать велосипед и для дизайна.
  • Bootstrap - это ага. Называйте меня ненавистником, я просто не люблю это вообще. Мне также не нравится идея, что ваш дизайн и отзывчивость зависят от чего-то еще. Если вы не можете создать адаптивный, визуально приятный сайт без Bootstrap, значит, вы не делаете себе никаких услуг. Если вы можете и вам просто нравится использовать Bootstrap, вы это сделаете. Честно говоря, я предпочел работать с Semantic UI, хотя сейчас для многих моих личных проектов я просто начинаю с нуля.
  • Normalize.css ТАК важен! Я действительно не могу придумать причину, чтобы не использовать его. Что-то может хорошо выглядеть на вашем мониторе в вашей версии Google Chrome в вашей ОС, но это не значит, что это хорошо выглядит в чужой настройке. Normalize.css помогает, ну…. нормализовать стили.
  • Я прочитал книгу «Go: A Kidd’s Guide to Graphic Design», которая действительно помогла обобщить много полезной информации в доступном для ребенка тоне.

Как справиться с синдромом самозванца

Это огромное поле. Вы никогда не узнаете всего. Скорее всего, вы никогда не станете лучшим в этой области.

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

Вначале я всегда думал: «Как только мне станет удобнее работать с X, Y и Z, тогда я стану хорошим разработчиком». Но правда в том, что я ( и все разработчики, которых я знаю в реальной жизни) не знают всего, мы все равно иногда совершаем глупые ошибки (хотя определенно меньше, чем раньше).

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

НО

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

Я думал, что не смогу быть конкурентоспособным разработчиком, если не буду экспертом в [вставить последнее увлечение] и не буду иметь 5-летний опыт работы.

У меня нет ученой степени - я бросил учебу после того, как сломал челюсть и

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

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

Но большинство только что сказали, что мне нужен опыт:

  • Поэтому я вызвался помочь с местной встречей.
  • Я вызвался помочь с коворкингом в моем городе.
  • Я спросил своего парикмахера, могу ли я сделать ему веб-сайт (и, поскольку он мой друг, я взял с него всего 100 долларов - в основном я зарабатывал около 3 долларов в час: меньше половины минимальной заработной платы).
  • Я понял, что на бумаге я не впечатлял, потому что у меня не было степени и опыта работы, поэтому я избегал нетехнических людей (например, HR), потому что они не видели ценности, которую я мог предоставить. Для меня они были тупиками.

Работа, которую я выполняю сейчас, я услышал от местного слэка freeCodeCamp, частью которого я являюсь.

Я написал по электронной почте лидеру (который сейчас является моим начальником), который сам является разработчиком. Он просмотрел код моего GitHub и портфолио и сказал, что хочет меня нанять, а остальное уже история.

На работе до сих пор я не использовал React или Redux, а также на самом деле не использовал Node или Express.

Я использовал Perl для создания шаблонов (старая инфраструктура, на изменение которой они не собираются тратить время / деньги в данный момент), EJS для новых шаблонов, кучу ванильного JS, немного jQuery и т. Д.

Я также изучаю WebdriverIO, Selenium, Mocha и Chai, чтобы писать тесты, которые помогут исправить проект, в котором много проблем.

Со стороны я становлюсь лучше в React, Redux, SCSS, маршрутизации, OAuth и т. Д.

Всегда учись! А когда вы станете впечатляющим на бумаге, у вас появятся навыки, чтобы с этим справиться.

Если вам не нравится учиться, я не думаю, что это поле для вас.

Работа с причудами

Я так долго откладывал изучение React / Redux / Webpack / и т. Д., Потому что я просто так волновался, что потрачу около 2 месяцев, чтобы по-настоящему прочно освоить его, а затем React будет свергнут какой-то другой технологией.

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

Плюс к сдерживанию:

  • Я достаточно хорошо изучил алгоритмы, чтобы выиграть призы на моем местном митапе Coding Challenge.
  • Я изучил хорошие основы JavaScript.
  • Я не стал добавлять сложности слишком быстро, слишком рано.

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

И хорошая новость заключается в том, что фундамент - это то, на что он похож, вам не нужно постоянно учить его заново!

Интуиция

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

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

Парное программирование

Я изучаю программирование чуть больше двух лет (хотя на самом деле увлечен этим чуть больше года). Стыдно признаться, что 23 февраля 2018 года я впервые попробовал парное программирование. Я пошел на местный Codeathon, и я занимался программированием в паре со своим товарищем по команде Kia Farhang. Мы вместе работали над решением, что делать, и над поведением приложения, а также над презентацией перед судьями. Я отвечал за интерфейсную часть приложения (и небольшую часть серверной части), а Kia использовала подход Test-Driven-Development для создания основной части серверной части, которая правильно принимает данные от пользователя, выполняет вызов Yelp, и возвращает необходимую информацию.

Мой первый опыт парного программирования был фантастическим (хотя Kia действительно умен, так что YMMV). Было весело и весело работать в столь сумасшедшие сроки. Но также было действительно круто абстрагироваться от некоторых сложностей для другого человека. Мы в основном договорились о том, какие данные нам нужны, я работал над тем, как обрабатывать данные, когда они поступают, а он работал над тем, как получить данные, изменить их и отправить обратно.

Я действительно с нетерпением жду парного программирования, особенно с Kia. Думаю, это поможет нам обоим прогрессировать намного быстрее.

IDE

VSCode, раньше был Sublime (а до этого Notepad ++), но я предпочитаю VSCode.

Mac против Windows против Linux

Я начал с Windows, потому что это был тип ноутбука, который у меня был, и единственная ОС, на которой я вырос. По работе мне прислали MacBook Air для работы, и, хотя я думаю, что цены на ноутбуки Apple завышены, я испытываю значительно меньшее разочарование по этому поводу, и работать с ним приятно. Также убойная батарея (заряжал мой телефон, подключив его к Mac, когда я не использовал Mac. Мой телефон опустился с 35% до 95%, а мой Mac потерял примерно 10% батареи !!!) И самое главное: НЕТ БОЛЬШЕ КОМАНДНОЙ СТРОКИ. Это немало для повседневной работы.

Возможно, в будущем я перейду на Linux, но если вы новичок, я настоятельно рекомендую вам сделать Mac. Кривая обучения на самом деле была неплохой. ~ 10 лет опыта работы с Windows, но мой Mac работает еще продуктивнее, и у меня меньше 6 месяцев опыта работы с Mac.

* Я не фанат Apple. У меня есть телефон на базе Android, я ненавижу iTunes, я считаю, что iPod устарели, я считаю, что часы Apple - это безумие (хотите ли вы носить хрупкие дорогие часы, в которых есть то, что уже делает ваш телефон? Я знаю, что нет). Я просто также считаю, что Windows довольно дрянная, и у моего MacBook Air есть множество функций, которые мне нравятся.

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

Мой общий процесс разработки чего-либо

  • Подумайте об идее / идеях
  • Выпишите заметки для конкретных функций
  • Я называю это свалкой мозгов. Вещи не обязательно должны иметь смысл для кого-то другого, мне просто нужно выбросить мысли из головы и перенести их в компьютер. Обычно я открываю свою среду IDE и сохраняю файл как файл JS, чтобы я мог быстро закомментировать вещи, которые мне кажутся решенными, с помощью CMD + /
  • Я также могу быстро перемещать предложения вверх и вниз с помощью сочетаний клавиш (и, таким образом, сортировать по контексту)
  • Дорабатываю дамп мозгов
  • Подумайте о крайних случаях
  • Подумайте о возможных реализациях
  • Подумайте, требуется ли маршрутизация, и если да, то как она должна работать
  • Нарисуйте несколько каркасов (я использую ручку и бумагу)
  • Разбейте работу на управляемые куски

Общие советы

  • Если вы собираетесь в конечном итоге forEach / reduce / map / loop по массиву информации, сначала просто жестко закодируйте один элемент в массиве.
  • Моя парадигма - заставить все работать, а затем разветвляться и заставлять другие вещи работать.
  • Прежде чем работать с динамическими данными, убедитесь, что статические данные работают.
  • Например, в моем портфолио будет галерея пользовательского интерфейса в стиле карточек. Вместо того, чтобы создавать весь этот контент, я просто создал контент для одного проекта и продублировал его примерно 16 раз, чтобы протестировать функциональность пользовательского интерфейса. Теперь, когда он у меня есть там, где я хочу, я могу добавлять и удалять контент, и я знаю, что он будет работать.

Противоречивые цели развития

Мне постоянно приходится пытаться балансировать:

  • Какими способами я знаю, что можно сделать то, что нужно сделать?
  • Каков наилучший из известных мне способов сделать то, что необходимо сделать, и почему?
  • Какие способы, которые я знаю, стоит изучить, чтобы делать то, что нужно делать?

А потом я пытаюсь найти то, что там пересекается.

Заключение

Научиться быть разработчиком сложно.

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

Научиться быть разработчиком без руководства - это просто глупо. Умные разработчики есть во всем мире и во всем Интернете. Используйте их!

Я надеюсь, что некоторая информация в этой статье помогла / поможет вам в вашем путешествии. Всегда учись!

Фотография сделана Mantas Hesthaven

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