Я начал свою карьеру в 2016 году в качестве разработчика Javascript. С тех пор я решил для себя, что буду узнавать как минимум 3 новые вещи каждый год. Предполагается, что это должно стать частью моего обучения на протяжении всей жизни и не дать мне врезаться в стену на моем карьерном пути.
Первый год было довольно сложно, так как я только начинал свою карьеру, и мне нужно было многому научиться. Как только вы понимаете, что слишком многому нужно научиться, это создает бесконечный цикл проволочек и ментальный барьер всякий раз, когда вы поднимаете какую-то тему. В мой первый год этого процесса я потратил все первые 6 месяцев на поиск поверхностных целей, таких как блокчейн, AR, VR, ML и т. Д. В то время они были относительно новыми, и для новичка они были довольно подавляющими. Я оказался в парадоксальном состоянии, когда я пытаюсь чему-то научиться, но в итоге занимаюсь другой темой, не добившись никакого прогресса в первой.
Преодоление блока
2016 год протекал быстро, и я пытаюсь заложить прочную основу для своей карьеры, одновременно пытаясь узнать что-то новое для личного роста. Именно тогда я понял, что у меня нет никакого прогресса. Если сравнивать меня с собой за последние 6 месяцев — ничего особенного не изменилось, кроме опыта, который я получил на работе разработчиком Node.js. Я знал, что, вероятно, мне пора остановиться и подумать об этом некоторое время. После недели долгой самооценки того, как я подхожу к делу, я решил посвятить остаток года (а это было всего 4 месяца) изучению только одной новой темы с условием, что тема должна быть легкой и понятной для изучения.
Угадайте, что? к концу 2016 года я изучил React.js, и у меня было очень слабое представление о том, что это впоследствии определит многие из вех моей будущей карьеры. Чтобы научиться реагировать, мне пришлось многому научиться основам Javascript, новым парадигмам программирования (таким как функциональное программирование) и таким инструментам, как webpack, babel и т. д. Я понял две вещи, которые необходимы для процесса обучения.
Что бы вы ни узнали,
- Убедитесь, что вы выучили все правильно
- Остальная вселенная может подождать
Javascript на примере
Изучение React — это одно, но истинные знания, которые я получил в 2016 году, заключались в том, как учиться. Весь 2017 год я посвятил изучению и дальнейшему совершенствованию своего набора навыков Javascript. Потратив почти год на процесс обучения, я решил, что пришло время поделиться некоторыми вещами с миром, и, к счастью, у меня появилась возможность с Packt написать и опубликовать мою первую книгу ﹣ Javascript By Example. это был замечательный опыт. Я научился подходить к вещам с точки зрения писателя и планировать главы на разные темы. Весь 2017 год был потрачен на изучение и написание Javascript.
Обучение не всегда требует причины
Первые два года моего обучения были полностью сосредоточены на карьерном росте. В конце каждого года я провожу много времени, вспоминая все, чему я научился и что хотел узнать. Я люблю науку. Но за последние два года я не тратил много времени на изучение чего-либо нового в науке, за исключением, может быть, просмотра нескольких документальных фильмов (например, лихорадка частиц). Начиная с 2018 года, я решил включить в свой учебный процесс тему Наука (это может быть что угодно). Теперь должно быть 3 темы по технике и 1 по науке.
Я перечислил ниже все темы, которые я выбрал для изучения, и ✔️ означает, что я успешно изучил концепции, связанные с этой темой, а ❌ означает, что я просто сильно ошибся.
Вот так прошел мой 2018 год:
- Реактивное программирование и ReactiveX ﹣ ❌
- Машинное обучение ﹣ ❌
- МобХ ﹣ ✔️
- React Native Reanimated ﹣ ❌
- GraphQL ﹣ ❌
- JAMstack ﹣ ✔️
- Ракетостроение ﹣ ❌
Ой, подождите, я снова сильно накосячил? Может быть… Темы несложные для изучения, за исключением части "Ракетостроение" (это буквально "Ракетостроение"). Мне удалось узнать кое-что из всех тем, которые я решил изучить в прошлом году, но проблема в том, что на уровне реализации я не приложил много усилий для создания вещей, использующих эти концепции. Несмотря на то, что я понял, что эти вещи делают, я решил, что не буду отмечать их как завершенные, пока не создам материал, использующий эти концепции. Что касается ракетостроительной части, то она не будет завершена, пока я не смогу вывести эти уравнения самостоятельно. Я был слишком строг к себе, но мне пришлось… потому что больше никто этого не сделает!
2K19 — Время взрыва! 🚀
Я знаю, чему мне нужно было научиться. Я знаю, как я должен учиться. Помня об этих двух вещах, я вступил в 2019 году с той же целью: 3 темы из области технологий и 1 из области науки. В этом году я нахожусь на хорошем месте в своей карьере, поэтому мне не о чем было беспокоиться, и у меня была полная свобода выбирать темы, которые были интересны, а не помогали моему карьерному росту. Я перечислю 10 пунктов, на которых я сосредоточился в основном в течение года, и то, как каждый из них прошел. Этот год другой, должен быть другим, должен быть другим.
1. Машинное обучение ﹣ ❌
Я сказал другое? потому что я только что испортил первую и самую важную тему, которую должен был изучать в этом году! Изначально я планировал изучить машинное обучение еще в 2016 году, когда начинал свою карьеру. Но каждый год я просто натыкался на несколько блоков всякий раз, когда поднимал эту тему. В 2019 году научиться машинному обучению несложно. На самом деле, сейчас самое подходящее время для этого, учитывая, что у нас есть разнообразная коллекция библиотек, таких как Tensorflow, Scikit Learn и т. д. Но что именно здесь пошло не так?
Во-первых, мой выбор стартовых материалов был слишком широк. Я начал со знаменитой книги Практическое машинное обучение с помощью Scikit-Learn и TensorFlow, и это был медленный процесс. Я хотел сделать это правильно, слишком правильно для своего же блага, и снова оказался в петле прокрастинации. Прежде чем тратить на это гораздо больше времени, я решил поискать более короткие и быстрые способы изучить эту тему позже. А этого потом уже не было.
2. Основы квантовой механики ﹣ ✔️
Вдохновленный документальным фильмом Лихорадка частиц и ажиотажем вокруг квантовых компьютеров, я понял, что должен изучить этот фильм. Я пассивно читал о концепциях квантовой механики, таких как квантовая запутанность, квантовое туннелирование и т. д., но мне нужно было убедиться, что я готов к тому времени, когда люди достигнут квантового превосходства (что и сделал Google достичь позже в этом году).
Квантовая механика — это изучение фундаментальных частиц, составляющих Вселенную, за исключением того, что никто не имеет ни малейшего представления о том, как устроен мир там внизу. Практически любые законы физики, которые мы применяем в реальном мире, там не работают, и мы не можем наблюдать этот мир, поскольку наблюдение за частицами изменяет частицы (принцип неопределенности Гейзенберга).
Итак, как вы изучаете тему, которая преподается только в крупных университетах, таких как MIT? Вы просто смотрите занятия на YouTube и следите за ними, как это делают обычные ученики ✌️. Это, конечно, занимает много времени, учитывая, что в этом плейлисте 115 видео, но мне удалось просмотреть 45 видео, и это заняло у меня всего 3 месяца! (А уже март 😶). Неудивительно, что у меня не было времени на машинное обучение. Я также пассивно просматривал учебные материалы OpenLearn и потрясающую книгу Как научить собаку квантовой физике, которую вы, возможно, захотите проверить, если вам это интересно…
3. Библиотека тестирования ﹣ ✔️
Я не помню, когда в последний раз создавал пользовательские интерфейсы, не полагаясь на React. Это стало настолько неотъемлемой частью моей жизни разработчика, что я постоянно создаю и модифицирую компоненты React каждый день. Однако традиционные инструменты тестирования, такие как моментальное тестирование и энзим, не поспевают за быстрыми темпами разработки. Большинство тестов часто заканчиваются неудачей из-за тривиальных изменений, и многие сценарии кажутся ненужным бременем на плечах разработчика. Все это приводит к очень плохому покрытию тестами в конце дня (0 в моем случае 😅).
Введите ﹣ Библиотека тестирования, где вы проверяете, как пользователи взаимодействуют с вашими компонентами, а не то, как эти компоненты на самом деле реализованы. Это поощряет множество хороших методов программирования и тестирования. Эта тема была выбрана из-за необходимости иметь надлежащую тестовую среду для всех проектов, с которыми я работаю, и я ни о чем не жалею. Самое лучшее в тестовой библиотеке то, что она очень хорошо работает с React и имеет обширную коллекцию рецептов, которые могут вам очень пригодиться!
4. Квантовые вычисления ﹣ ⚠️
Квантовые компьютеры — это следующее большое событие, которое произошло с компьютерами с тех пор, как появились транзисторы. Мы движемся к серьезному ограничению вычислительной мощности традиционных компьютеров, поэтому я очень хотел иметь возможность программировать квантовые компьютеры к концу этого года! Однако есть одна маленькая проблема… Как и Графен, квантовые компьютеры могут делать что угодно, кроме как покинуть лабораторию.
Лучший ресурс, который я бы порекомендовал всем, кто начинает с квантовых компьютеров, — это, очевидно, небольшое изучение квантовой механики, но как только эти термины физики элементарных частиц станут для вас понятными, перейдите к удивительной Microsoft Quantum Documentation, где вы сможете изучить основы квантовых вычислений с помощью хорошей экосистемы C# или удобного Python. У них есть хороший Quantum Development Kit, который позволяет запускать ваш код внутри квантового симулятора. Также есть хорошая книга, которую я читал (еще читаю), которая может вам пригодиться ﹣ Programming Quantum Computers
Я начинаю 2020 год с квантовых вычислений, поэтому еще не закончил. Могу написать несколько сообщений в блоге или рассказать о своем опыте. Нужно быть готовым, когда эти кубиты будут готовы к производству!
5. Теория струн ﹣ ✔️
Теория струн — это просто лучшее, что я решил изучить в 2019 году. Это, безусловно, теория, наиболее близкая к объяснению всего во Вселенной. Я хотел ясно понять, как она объясняет каждую вещь в природе, и, конечно же, понять знаменитый вывод, который Шелдон использовал, когда объяснял Пенни теорию струн (реальная сцена). Я начал с покупки Kindle-издания The Elegant Universe от Brain Greene. (Возможно, вам понравится его прямое объяснение)
Как обычно, как и любая другая тема в науке, теория струн требует множества предпосылок, включая понимание того, как теории до нее не смогли объяснить природу Вселенной. Прежде всего мне нужно было разобраться в специальной теории относительности (см. ﹣ минутная физика). Потом я узнал о силах природы, дополнительных измерениях и о том, что сумма всех положительных натуральных чисел составляет -1/12 😶
#Математика — сплошное развлечение и игра, пока вы не поймете, что сумма всех положительных натуральных чисел — отрицательное число
1+2+3+4+….+∞ = -0,0833333
#Ramanujan #Summation
— Дани Акаш (@dani_akash_) 8 июля 2019 г.
Прежде чем я это понял, я смотрел ted talks за ted talks, бегая за самыми простыми объяснениями запутанных понятий на YouTube. Но я продолжал уверенно продвигаться по книге благодаря моему любопытству понять природу Вселенной и необходимости понять сторону разговора Шелдона.
После 6 месяцев чтения, просмотра, твитов, создания мемов и каракулей я, наконец, вернулся к просмотру сцены, и когда Шелдон сказал если вы считаете их листами, я смог полностью визуализировать это в своем уме. Это огромное чувство выполненного долга, которое я никогда не забуду. Если вы хотите узнать о теории струн, лучшей отправной точкой будет ﹣ Объяснение теории струн от Kurzgesagt.
6. Конечные автоматы и XState ﹣ ✔️
Между тем, поскольку я провел почти полгода, изучая теорию струн по ночам, днем моя карьера продвигалась вперед, сталкиваясь с новыми вызовами. В рамках разработки приложений React управление состоянием оказалось огромной проблемой, поскольку размер команды продолжал увеличиваться. Мы не могли установить стандарт для определения состояний и того, как правильно обрабатывать переходы между состояниями. Это привело меня к поиску новых способов управления состоянием приложения.
Я большой поклонник Машины Тьюринга с тех пор, как посмотрел Игру в имитацию. Я уже приложил значительные усилия для понимания концепции машины Тьюринга Алана, которая относится к классу Теории автоматов. Одним из подклассов, задействованных в машине Тьюринга, является Конечный автомат (FSM). Я не обращал на это особого внимания, пока не наткнулся на XState ﹣ библиотеку для сборки FSM на Javascript. Оказывается, в XState есть ключ к решению всех моих проблем с управлением состоянием. В конце концов, он основан на одной из самых фундаментальных концепций информатики!
Я потратил несколько дней на создание приложения для реагирования на основе интеграции Reddit API из документации. Затем я проверил несколько проектов с открытым исходным кодом, созданных на основе XState. На данный момент это в значительной степени стандартные шаги для изучения любого нового фреймворка Javascript. В официальных документах есть несколько хороших примеров. Кроме того, если вы хотите быть в курсе последних событий, вы можете подписаться на соответствующие учетные записи в Твиттере. (Подпишитесь на создателя XState Дэвид К.🎹)
Вместо того, чтобы определять состояния и управлять ими по отдельности, XState делает определение состояний и управление ими единым объектом, значительно упрощая логику приложения. Я также пытался использовать его с Node.js, и он также без проблем работает с бэкэнд-фреймворками!
7. TypeScript — ✔️
TypeScript был взят как технический долг, на который я не обращал внимания последние пару лет. Учитывая, насколько выросла экосистема JavaScript и сложность приложений, которые мы создаем с ее помощью, очень важно иметь безопасную систему типов. Конечно, мне потребовались два моих старших сотрудника, которые подтолкнули меня использовать его в моем проекте на работе, чтобы начать. Но как только я попал в нее, я понял, что пути назад нет. Это заставит вас задаться вопросом, как вы так долго выживали без надлежащих определений типов.
Для начала вы можете попробовать TypeScript за 5 минут из официальной документации, чтобы получить представление о том, что такое TypeScript. Людям, работающим с React Native, повезло, поскольку он поставляется с поддержкой машинописного текста из коробки (мне повезло!), И вы можете напрямую преобразовать файл из .js
в .ts
или .tsx
и сразу начать писать типы! Настроить typescript с другими сборщиками относительно просто, и я бы рекомендовал вам использовать Parcel, если вы начинаете новый проект.
Я просто решил погрузиться сразу после того, как прочитал пару блогов и посмотрел видео на YouTube за ночь. Иногда нужно просто пойти на это! Эта шпаргалка помогала мне на первых этапах. Но если вам нужны глубокие знания, вам стоит прочитать эту бесплатную книгу от Басарат ﹣ Глубокое погружение в TypeScript.
8. Нейронные сети ﹣ ❌
На этом моя семимесячная полоса успеха закончилась, но на ошибках можно многому научиться, поэтому я считаю Нейронные сети беспроигрышным испытанием. Когда я ехал в Бангалор на техническую конференцию в июне, я слушал аудиокнигу по научно-популярной книге Дэвида Иглмана ﹣ Мозг: История о тебе. Она о работе человеческого мозга, и то, как автор объяснил все это, заставило меня проявить огромный интерес к изучению самого процесса мышления.
Наш мозг представляет собой сеть из миллионов нейронов. Чтобы понять, как работает процесс мышления, что может быть лучше, чем построить собственные искусственные нейронные сети (ИНС). Итак, я решил построить свою собственную нейронную сеть. Существует множество ресурсов для изучения ИНС. Существует также множество фреймворков, таких как TensorFlow, Keras и Caffe, которые упрощают добавление нейронных сетей в ваш проект. Однако, прежде чем я выйду и буду использовать сторонние библиотеки для выполнения тяжелой работы, я хотел построить свою собственную сеть без каких-либо причудливых инструментов.
К счастью, я нашел на YouTube Плейлист нейронных сетей от 3Blue1Brown, в котором было именно то, что мне было нужно, чтобы узнать о нейронных сетях. Это обеспечило хорошую стартовую площадку, чтобы узнать больше по теме. Но затем, прежде чем я это понял, я закончил тем, что посмотрел больше видео с этого канала, и мой разум переключился на более забавные идеи, такие как Исчисление и Линейная алгебра, что остановило мое путешествие по изучению ИНС. К тому времени, когда я понял, что должен строить свою собственную сеть, была середина декабря, и я был заражен обычной простудой, которая позже уложила меня в постель на следующие две недели, разрушив все мои планы поездок на каникулы.
9. Быстрый пользовательский интерфейс ﹣ ❌
Создание iOS-приложений ﹣ Записи Дэни в журнале
Где-то в 2016 году ﹣ Дэни осознает потенциал устройств Apple с iOS и macOS, а также языка программирования Swift и начинает изучать разработку приложений для iOS
Опять где-то в 2016 году ﹣ Дэни создает несколько приложений для iOS с плохим дизайном, убеждая себя, что теперь он разработчик iOS
Октябрь 2017 г. ﹣ Дани становится разработчиком мобильных приложений, но использует React Native, а не iOS, и создает совершенно крутые приложения благодаря своим природным способностям к JS
2017–2018 ﹣ Несмотря на создание красивых и успешных приложений на React Native (благодаря flexbox и дизайнерам UI/UX, с которыми он работал), Дэни все еще пытается создавать приложения с помощью swift на iOS, но он не мог, потому что у него дизайнерские навыки как у картошки
3 июня 2019 г. ﹣ Дэни смотрит выставку Apple WWDC 2019, чтобы создавать мемы об Apple и устройствах Apple, но была удивлена, когда они объявили о SwiftUI. Как будто кто-то в Apple прислушался к его опасениям и решил значительно упростить процесс проектирования! Он решает изучить SwiftUI. (Он все равно создал тонны мемов после мероприятия, так как они также представили дорогую терку для сыра)
Октябрь 2019 г. ﹣ Дэни успешно создает простое приложение для iOS с помощью SwiftUI и запускает его на своем iPhone SE. Чувствуя себя успешным, он решает создавать более продвинутые приложения, надеясь узнать больше о SwiftUI
Декабрь 2019 г. ﹣ К этому времени Дэни уже забыл, что должен был изучить SwiftUI, а также о том, что у него есть iPhone
Конец записей журнала
10. Vim и Tmux ﹣ ✔️
Наконец, пришло время представить мой новый рабочий процесс терминала. После использования iTerm2, Hyper и Terminator я устал искать терминал, который можно было бы последовательно использовать между mac и linux. Оказывается, я неправильно смотрел на проблему. Я искал лучшие терминалы, но на самом деле мне нужен был рабочий процесс, который можно было бы легко перенести на любую операционную систему.
Я использую 15-дюймовый Macbook Pro на работе и легко переносимый 13-дюймовый ноутбук HP с Ubuntu MATE, когда я путешествую. У меня также есть два инстанса Amazon Ec2, к которым я всегда подключаюсь по ssh для быстрого развертывания и запуска личных проектов. Также я всегда редактирую код прямо на сервере (пожалуйста, не пытайтесь повторить это на работе!). Учитывая, что большая часть моей работы требует терминала и нескольких вкладок, я решил нанести визит двум старым друзьям. Друзей моего детства я никогда толком не понимал, пока не начал тусоваться со всеми крутыми парнями ﹣ Vim и Tmux.
Основная проблема с Vim и Tmux заключается в том, что им пришлось долго учиться. Но с моим опытом изучения TypeScript с помощью шпаргалки я понял, что могу преодолеть любую кривую обучения, если буду жить опасно (опять же! Пожалуйста, не пытайтесь повторить это на работе!!). Я взял свой ноутбук с Ubuntu и удалил Terminator, VSCode и WebStorm, оставив gedit в качестве единственного текстового редактора для резервного копирования. Затем я установил Neovim и добавил некоторые необходимые вещи, такие как amix/vimrc и настройку vim Ben Awad’s VSCode. После чего я установил tmux вместе с Oh my Tmux.
В качестве шпаргалки я получил эти потрясающие обои с Reddit, которые содержат все необходимые сочетания клавиш vim. Учитывая, что мой терминал прозрачен, привязки клавиш никогда не ускользают из моего поля зрения! Удивительно, как быстро я привык к новой настройке vim + tmux после того, как удалил все другие текстовые редакторы из своей системы (большая часть этого поста была написана из vim). Наконец, через пару недель я хорошо привык к своей настройке и решил перенести рабочий процесс на все свои системы. С помощью быстрой настройки, основанной на этом ответе, я смог синхронизировать свою конфигурацию на всех своих устройствах. Напишу отдельный пост о моей настройке, так как размер текущего поста продолжает увеличиваться.
It’s 2020
Я рад, что нашел время, чтобы подумать обо всем, что я узнал за последний год. Кроме того, я очень рад, что нашел время, чтобы написать свой опыт в моем личном блоге. Обычно я не планирую слишком много и просто учусь, когда нахожу интересные вещи, но у меня есть довольно хорошее представление о том, каким будет 2020 год: технические доклады, сообщения в блогах, плавная анимация и SwiftUI почему бы и нет? 😜
Пожалуйста, убедитесь, что все, что вы изучаете, доставляет вам массу удовольствия, иначе не стоит учиться
— 𝙳𝚊𝚗𝚒 𝙰𝚔𝚊𝚜𝚑 (@dani_akash_) 4 января 2020 г.
Этот пост знаменует собой запуск личного веб-сайта Дэни и его личного блога daniakash.com, который изначально планировалось запустить в декабре прошлого года. Не очень удачное начало, но, как говорится… лучше поздно, чем никогда!