30 лет — пересматриваю свою смену карьеры во фронтенде

внешний интерфейс программист

Зачем менять профессию

Потому что это плохо смешалось.

Прежде чем стать программистом, я много работал. Из-за моего образования (средняя школа) моя работа в основном связана с физическим трудом. Включая, но не ограничиваясь: заводские разнорабочие, продавцы (без возможности заниматься продажами), носильщики, уличные торговцы и т. д. Последняя работа перед сменой карьеры — ремонт компьютеров. За столько лет месячная зарплата не была выше 3300...

Позже, случайно, я обнаружил сайт Zhihu, и узнал о различных преимуществах программистов на нем. Итак, я решил сменить профессию (в 2016 году, когда мне было 28 лет), бросить работу и заняться программированием дома. А также получил поддержку моей невестки, спасибо моей невестке.

Подготовьтесь к смене карьеры

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

Как выбрать учебник?

Лучше всего проверить дополнительную информацию в Интернете, чтобы найти книги с высоким рейтингом, или посетить Douban, чтобы найти книги с высоким рейтингом.

Я проверил много информации в Интернете и, наконец, определил, что HTML, CSS находятся вw3cschoolУчить. JavaScript выбираетПродвинутое программирование на JavaScript, 3-е издание(Широко известная как Красная книга, теперь в ее четвертом издании).

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

Сначала я изучил HTML и CSS и выполнил первый этап заданий. После прочтения первых тринадцати глав Красной кладовой книги задание второго этапа выполнено. Затем прочтите остальные рубины и выполните задание третьего этапа сорок пять. Следующие задачи были для меня на тот момент слишком сложными, поэтому я их не выполнял. В январе я снова изучил ajax и узнал, как интерфейс и сервер взаимодействуют друг с другом.

Я начал заниматься фронтендом с ноября 16 по февраль 17. Он длился 3 месяца, в среднем по 3-4 часа занятий в день. Несколько раз в середине я думал сдаться, потому что это было слишком сложно, но в конце концов я выстоял.

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

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

Официальная работа

первый год

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

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

  1. Расширенное программирование на JavaScript (третье издание)
  2. Высокопроизводительный JavaScript
  3. Суть языка JavaScript
  4. JavaScript, которого вы не знаете(верхний, средний и нижний объемы)
  5. Начало работы со стандартами ES6
  6. Углубленный Node.js

Все эти книги очень классические, и я прочитал несколько из них.

Помимо чтения книг, я такжеКолледж передовых технологий Baidu 2017, который сложнее и глубже квеста 2016 (квест 2016 делался при смене карьеры), и очень подходит для продвинутых.

Также изучил jquery и nodejs. jQuery используется в работе, а nodejs изучается из интереса, без особого углубления.

второй год

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

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

элементы компьютерной системы

элементы компьютерной системыЭто была первая книга, которую я начал изучать после составления плана. Он в основном объясняет принципы работы компьютера (главы 1-5), принципы компиляции (главы 6-11) и знания, связанные с операционными системами (глава 12). Не читайте слишком много контента, на самом деле содержание этой книги очень легко понять, а перевод также очень мощный. В конце каждой главы есть связанные эксперименты, для завершения которых требуется написать код, что можно назвать классическим сочетанием теории и практики.

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

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

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

Книга основана на модели разработки "сначала абстрагируйте, затем реализуйте". Каждая глава представляет ключевую аппаратную или программную абстракцию, метод реализации и фактический проект. Знания в области компьютерных наук, необходимые для выполнения этих проектов, рассматриваются в этой книге и требуют от читателя только опыта программирования. Вспомогательный веб-сайт, сопровождающий эту книгу, предоставляет инструменты и материалы, необходимые для создания всех аппаратных и программных систем, описанных в книге, а также 200 тестовых программ для 12 проектов.

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

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

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

Vue

Я также изучил Vue в этом году. Помимо чтения документации, я также написал версию Vue 1.0 для изучения исходного кода.mini-vue. Однако изучение исходного кода не помогает мне писать бизнес-код. Если не из интереса изучать исходный код, то лучше его не изучать, а с работой можно вполне справиться, если вы знакомы с документацией. Если это для интервью, вам также не нужно читать исходный код. Просто поищите в Интернете качественные статьи по анализу исходного кода и сделайте заметки.

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

Третий год

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

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

  1. Написал несколько плагинов и проектов, связанных с Vue.
  2. Разместите знания о интерфейсе, полученные в прошлом, на github и просмотрите их, когда у вас будет время.
  3. Изучение структур данных и алгоритмов.

Структуры данных и алгоритмы

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

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

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

четвертый год

Четвертый год, то есть этот год (2020), — это год, когда я снова борюсь. В этом году я буду работать усерднее, чем в любой предыдущий год, и прослежу, чтобы я учился более 3 часов в день. Если вы слишком заняты, чтобы выполнить требования, найдите время на другой день. Прилагается график моего обучения в этом году (программное обеспечение для записи — Now Then):

Я много сделал в этом году:

  1. Исследуйте фронтенд-инжиниринг.
  2. Изучайте операционные системы.
  3. Изучите компьютерные сети.
  4. Изучайте программную инженерию.
  5. Изучайте С++.
  6. выучить английский язык.

Фронтенд-инжиниринг

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

...

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

операционная система

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

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

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

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

  1. Язык ассемблера x86: от реального режима к защищенному
  2. xv6-chinese
  3. Введение в операционные системы

тогда делайMIT6.828Эксперимент, реализующий простое ядро ​​операционной системы.

компьютерная сеть

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

Например, как взаимодействуют компьютеры в области A и области B? Как могут взаимодействовать два компьютера в одной локальной сети? Чтобы узнать о компьютерных сетях, нужно понять, как они взаимодействуют и как их соединять.

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

  1. Компьютерные сети — сверху вниз
  2. компьютерная сеть
  3. Полное руководство по HTTP
  4. Базовое руководство по HTTP/2

и сделалКомпьютерные сети — сверху внизэксперимент из.

разработка программного обеспечения

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

Изучите следующие книги:

  1. Энциклопедия кода (2-е издание)
  2. Рефакторинг (2-е издание)
  3. разработка программного обеспечения

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

C++

Изучение C++ на самом деле для изучения исходного кода nodejs.Я читал эту книгу.C++ Primer, китайское издание (5-е издание).

английский

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

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

  1. Проблема может быть решена с помощью google и stackoverflow.
  2. Уметь давать хорошие имена переменным и функциям.
  3. Многие популярные программы написаны иностранными программистами, в случае возникновения проблем вы можете напрямую прочитать документацию и пообщаться с другими.

До того, как я сменил профессию, мой словарный запас английского языка составлял всего несколько сотен.По прошествии более трех лет мой словарный запас теперь составляет 6000 (все измеряется 100 словами).

пишу

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

На мой взгляд, есть три преимущества письма:

  1. Тренируйте свои навыки письма. В общем, чем больше вы пишете, тем лучше ваши писательские способности. Это хорошо не для того, чтобы сказать, насколько хороши ваши слова и предложения в вашей статье, а для того, чтобы сказать, что статья ясна, проста для понимания и проста для понимания людьми.
  2. письмо на самом делеМетод обучения ФейнманаПриложение, которое поможет вам углубить понимание того, что вы узнали. Вы пробовали это, и, изучив точку знания, вы чувствуете, что понимаете ее. Но когда вы рассказываете другим об этом пункте знания, вы колеблетесь и не знаете, как это сказать. На самом деле, это единственный способ понять это.Чтобы другие поняли то, что вы выражаете, вы должны сначала хорошо ознакомиться с этим пунктом знания. Невозможно объяснить это с небольшими знаниями, поэтому письмо также помогает вам разобраться в своих знаниях.
  3. Увеличить их воздействие. В моей более трехлетней программистской карьере он написал более 50 статей, поэтому на некоторых платформах также получают много похвалы и поклонников. Поскольку я написал некоторые статьи, качество было в порядке, многие производители программисты подошли ко мне, подтолкнули меня внутрь. Однако из-за проблем с личным образованием в основном сделали следующие ...

Короче говоря, писать полезно для вас, а не плохо.

Учить

выборочное обучение

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

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

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

Другие, типа easyui, Backbone.js, разные мелкие программы... Категорически не учите то, что вам не нужно, тратьте время. Просто смотрите документацию, когда используете его, конечно, если вам интересно узнать, как это реализовать, вы можете.

метод исследования

Я думаю, что хорошие методы обучения очень важны, и два из них наиболее полезны для меня:

  1. Метод обучения Фейнмана.
  2. Чтобы изучить точку знаний, лучше всего понять ее досконально.

Метод обучения Фейнмана упоминался в разделе «Письмо», и здесь я сосредоточусь на втором.

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

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

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

  1. что это?
  2. Зачем это делать? Не может быть?
  3. Есть ли способ лучше?

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

Например: Учащиеся, которые читали статьи, связанные с оптимизацией производительности, должны знать, что существует такое правило, позволяющее уменьшить HTTP-запросы на странице.

что это?

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

Зачем сокращать HTTP-запросы?

Проверьте данные и обнаружите, что HTTP-запрос должен пройти ряд процессов, таких как поиск DNS, рукопожатие TCP, рукопожатие SSL (если есть) и т. д., чтобы фактически отправить этот запрос. А современные браузеры также имеют ограничения на количество параллелизма TCP, и HTTP-запросы, которые превышают количество параллелизма TCP, могут продолжать отправляться только после завершения предыдущего запроса.

Мы можем открыть инструменты разработчика Chrome, чтобы увидеть конкретное время, затрачиваемое HTTP-запросом.

在这里插入图片描述

Это HTTP-запрос, и размер запрошенного файла составляет 28,4 КБ.

Глоссарий:

  1. Очередь: время в очереди запросов.
  2. Задержка: разница во времени между моментом установления TCP-соединения и моментом фактической передачи данных, включая время согласования прокси-сервера.
  3. Согласование прокси: время, затраченное на согласование с подключением к прокси-серверу.
  4. DNS-поиск: время, необходимое для выполнения DNS-поиска, каждый отдельный домен на странице должен выполнять DNS-поиск.
  5. Начальное соединение/подключение: время, затраченное на установление соединения, включая подтверждение/повторные попытки TCP и согласование SSL.
  6. SSL: время, затраченное на завершение рукопожатия SSL.
  7. Отправленный запрос: время, затраченное на отправку сетевого запроса, обычно одна миллисекунда.
  8. Ожидание (TFFB): TFFB — это сумма времени запроса на получение первого байта данных ответа, который содержит время синтаксического анализа DNS, время соединения TCP, время отправки HTTP-запроса и получение первого байта ответного сообщения. .
  9. Загрузка содержимого: время, затраченное на получение данных ответа.

Из этого примера видно, что доля времени, затрачиваемая на фактическую загрузку данных, равна13.05 / 204.16 = 6.39%. Чем меньше файл, тем меньше коэффициент, а чем больше файл, тем выше коэффициент. Вот почему рекомендуется объединять несколько небольших файлов в один большой файл, тем самым уменьшая количество HTTP-запросов.

Есть ли способ лучше?

С HTTP2 все запросы могут быть отправлены по одному TCP-соединению. HTTP2 еще многому предстоит научиться, поэтому я не буду здесь вдаваться в подробности.

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

Освойте этот метод обучения и постоянно используйте его в учебе и работе..

Суммировать

Ниже приведены некоторые ответы на вопросы, которые могут возникнуть заранее.

Колледж передовых технологий Baidu

Для заданий Baidu Front-end Technology College в 2017 году и далее, если вы не записываетесь, то можете выполнять только часть заданий. Задача 2016 года связана с проблемой сервера Baidu, и образцы изображений многих вопросов взломаны. На самом деле есть решение, которое заключается в том, чтобы посмотреть ответы других людей. Загрузите чужой исходный код и откройте html-файл в браузере в качестве образца изображения. Я выполнил большую часть задач за последние два года, к которым прилагается ответ:

  1. Baidu Front-end Technology College 2016 Миссия
  2. Baidu Front-End Technology College 2017 Mission Mission

Образовательный апгрейд

С 2018 года я подал заявку на вступительные экзамены в колледж для взрослых, а в 2019 году я подал заявку на вступительные экзамены в бакалавриат. Выпускники колледжей смогут закончить обучение в январе следующего года, а самостоятельно сдать вступительные экзамены в бакалавриат сложнее, они могут быть сданы в 2021 или 2022 году.

напиши в конце

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

Хотя в этом году 32, я все еще надеюсь на будущее. Усердно учитесь, усердно работайте над собой и усердно работайте, чтобы стать лучшим программистом.