Итак, какой у меня сейчас уровень программиста? Я думаю, что интересно получить оценку до и после того, как я пройду Hack Reactor.

В произвольном порядке здесь перечислены самые важные языки, фреймворки и навыки, с которыми я когда-либо сталкивался. Честное предупреждение; это на длинной стороне. Если кратко, то я познакомился со всеми частями процесса разработки (внешний и внутренний), за исключением стороны сохранения данных, потому что у меня не было возможности рассказать о MongoDB. Я также получил значительный опыт работы с Javascript и git, а также почувствовал вкус html, css, unix, ruby ​​и различных полезных инструментов и библиотек. Так что я думаю, что я на очень базовом уровне как программист, но теперь у меня есть базовые знания для создания собственных приложений (хотя это займет у меня некоторое время). У меня было серьезное начальное знакомство со многими концепциями программирования, и я знаю, что это знакомство позволит мне освоить учебную программу Hack Reactor быстрее, чем если бы я замерз. Вот подробный список:

Веб-публикация

хакпад
Я сделал хакпады почти для каждой концепции из этого списка. Hackpad — это персональная вики. Это не идеально, но особенно полезно, потому что 1) вы можете легко создавать заголовки для подтемы, и эти заголовки будут отображаться в оглавлении на правой боковой панели, и 2) вы можете выбрать блок текста и превратить его в код . Я не пробовал сотрудничать или делиться хакпадами, но это возможная функция, которую я изучу со своими одноклассниками.

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

wordpress
Посмотрите мой блог о путешествиях In Surf Of для ознакомления с результатами моих споров с wordpress. У меня не было опыта программирования, когда я настраивал этот сайт через wordpress, и это расстраивало, потому что я не знал ни html, ни css, а учиться не хотел. В итоге я часами возился с виджетами WordPress, чтобы делать такие вещи, как вставка пользовательского изображения заголовка или автоматическая публикация сообщений в Facebook. В итоге я использовал ZippyKid (теперь Pressable) для управления своим сайтом. Если у меня будет больше времени после буткемпа, я бы хотел перенести In Surf Of (а также этот блог) на собственный веб-сайт, который я могу развернуть с помощью службы, такой как Heroku.

Гит

github/git
Разветвляйте и клонируйте репозиторий github, извлекайте ветку функций, вносите изменения, добавляйте файлы, фиксируйте эти изменения, отправляйте в удаленное репо, объединяйте ветку функций с основной веткой с помощью p4merge .
Текущие границы моих возможностей: перебазирование, сбор вишен, написание сообщений коммитов, к которым я могу вернуться позже и получить четкое представление о своей истории.

Юникс

Терминал: unix, оболочка bash (~, история, !), файловая система (cp, mv, rm, chmod, ln, ls)
Я сгруппирую приведенные выше концепции в широкое понятие «терминал» на данный момент. Я научился более комфортно перемещаться по файловым системам с помощью терминала, копировать, перемещать и удалять файлы, а также исследовать каталоги (ls) и создавать символические ссылки (ls). Текущие края: chmod, sudo, рекурсивное выполнение любых действий (меня это пугает).

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

Языки

Javascript
Я проделал большую работу по подготовке Hack Reactor, в ходе которой мы охватили все основные компоненты Javascript (объекты, функции, массивы) и библиотеку Underscore.js. Мы сделали проект, в котором повторно реализовали некоторые функции Underscore.d

WebStorm, Sublime, JSLint
Теперь мне удобно работать с перечисленными выше инструментами, особенно с Sublime, и это хорошо, потому что Sublime — это основной текстовый редактор, который мы будем использовать во время Hack Reactor. Инструкторы рекомендуют нам работать с Sublime, а не с IDE, такой как WebStorm, которая имеет автоматическую коррекцию синтаксиса, потому что 1) нам нужно научиться выявлять ошибки и синтаксические ошибки самостоятельно, и 2) технические собеседования обычно проводятся в текстовых редакторах. или даже на доске. Нам разрешено запускать пакет JSLint в Sublime под названием JSHint, что сэкономит много времени на отладку. Я хотел бы усвоить все полезные ярлыки Sublime, такие как запуск JSLint, поиск термина, а также поиск и замена термина.

Java
В Стэнфорде я прошел курс под названием 106a, который очень рекомендую. Если вам нужно основательное введение в программирование и Java, просто погуглите 106a, и вы найдете в свободном доступе конспекты лекций, код лекций и стартовый код проекта. Если вы раньше не занимались программированием, поищите «Робота Карела», чтобы узнать, как мыслить как программист.

Ruby
В процессе подачи заявки на участие в других учебных курсах я изучил основы Ruby. Code Academy, Code School и Учитесь программировать Криса Пайна были моими основными ресурсами, с которыми я работал.

Веб-языки и форматы

HTTP (конверт)

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

Содержимое

json
Я повторно реализовал JSON.stringify как часть подготовительной работы Hack Reactor, которая многому научила меня в отношении рекурсии, а также в том, как JSON обрабатывает различные типы данных. Я также использую «console.log(JSON.stringify(someResponse))» для отладки, когда пишу приложение, которое получает ответ от сервера.

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

css
Тот же уровень, что и html. Даже в большей степени, чем html, css действительно бездонен по количеству трюков и стилей, которые существуют. Например, при оформлении веб-сайта я пытался узнать, как лучше всего оформить горизонтальную панель навигации. Оказывается, есть множество способов сделать это, от плавающих элементов до встроенных блоков и таблиц. Я старался максимально избегать использования чисел с плавающей запятой, потому что читал, что они могут сильно усложнить ваш код. Но мне, возможно, придется нырнуть в поплавки рано или поздно. Я также узнал о Google Fonts.

Инструменты разработчика Chrome
Знакомство с отладчиком и консолью.

Клиентские библиотеки Javascript

jquery
Оба учебника Code School.

backbone
Оба учебника Code School. В моем приложении Facebook я только вчера закончил подключение необходимых моделей и представлений для отображения некоторых данных Facebook на веб-странице.

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

npm/package.json
Я настроил несколько разных файлов package.json для разных проектов, и теперь я понимаю, что зависимости, которые вы перечисляете в этом файле, будут определять, какие пакеты узлов загружаются когда вы запускаете «npm install». Если вы отправите файл package.json на github, любой, кто клонирует ваш репозиторий, сможет автоматически загрузить необходимые пакеты с помощью диспетчера пакетов узла.

express
Написал базовый экспресс-сервер с маршрутизатором и статическим промежуточным ПО.

hogan для шаблонов усов
Я узнал об идее предварительной компиляции шаблона — аналогично предварительной компиляции регулярного выражения — и передачи шаблона в файл index.html. Одним из преимуществ hogan является то, что один html-файл может содержать несколько шаблонов (например, шаблон для заголовка и шаблон для тела), и вы можете редактировать каждый шаблон отдельно.

Jasmine
Написал множество тестов в Jasmine 1.3 и 2.0 и усвоил суровый урок, прочитав документацию по новейшей версии инструмента, когда часами пытался исправить средство запуска спецификаций для проекта. и понял, что пытался использовать свой код исполнителя спецификации для Jasmine 1.3, когда искал код для Jasmine 2.0.

browserify для WORA (Write Once Run Anywhere)
Я еще не использовал browserify, но я узнал, как я могу его использовать и как он может сэкономить время, если у меня есть много файлов javascript, которые Я хочу использовать скрипты в html-файле, и мне не нужно изменять пути src, если я изменю расположение этих файлов javascript.

JSON.{parse,stringify}() и console.log() для ведения журнала
В рамках подготовки к Hack Reactor я повторно реализовал JSON.stringify и изучил кодировку символов для каждого типа данных. . У меня не было времени заново реализовать JSON.parse, но я прочитал об этой функции в Mozilla Developer Network. Я также узнал, что при работе с API и ответами сервера console.log(JSON.stringify(serverResponse)) полезен, чтобы увидеть, что такое serverResponse, если вы не уверены.

Шаблоны проектирования
Различные шаблоны проектирования Javascript, такие как конструктор, модуль, прототип и фабрика, и их использование. Например, модуль очень полезен для инкапсуляции функций и объектов определенного файла javascript, чтобы не загромождать глобальную область видимости.

Еще один шаблон проектирования, который я изучил из R и Ruby, — это передача параметра options в функцию. Функции Javascript принимают список параметров. При каждом вызове функции параметрам функции («имя» и «возраст» в следующем примере) присваиваются значения в зависимости от порядка аргументов, которые передаются в функцию:

var Person = function(name, age) { this.name = name; this.age = age; } var bob = new Person('bob', 21); //new Person instance whose name is 'bob' and age is 21 //let's say we accidentally pass parameters to the Person constructor in the wrong order var weirdBob = new Person(21, 'bob'); //new Person instance whose name is 21 and age is 'bob'

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

var Person = function(options) { this.name = options.name; this.age = options.age; } var bobData = {name: 'bob', age: 21}; var bob = new Person(bobData); var weirdBob = new Person(bobData);

Обе переменные «bob» и «weirdBob» будут новыми экземплярами Person, чье свойство имени — «bob», а свойство age — 21. Определение объекта параметров со всеми аргументами, которые мы хотим передать функции, позволяет нам передавать параметры. объекта и иметь доступ к соответствующим свойствам параметров через свойства конструктора. Порядок, в котором мы назначаем свойства внутри объекта параметров, не имеет значения. Таким образом, передача объекта параметров может быть менее подвержена ошибкам.

Объектно-ориентированное программирование (ООП)
Определение псевдоклассов и прототипов. Надеюсь, я подробнее остановлюсь на этой теме в следующем посте, когда буду чувствовать себя более комфортно, объясняя ООП.

Первоначально опубликовано на shanemkeller.com, февраль 2014 г.