Практическое руководство, которое обучает вас функциональному программированию на JavaScript. Большая часть программного обеспечения, написанного сегодня, чрезмерно сложна, трудна для понимания, сложна для тестирования, трудна для изменения и содержит множество ошибок. Итак, как мы в конечном итоге решаем эти проблемы?
По моему опыту, функциональное программирование более продуктивно, чем объектно-ориентированное программирование, потому что нужно думать меньше, поэтому вы не перегружаете рабочую память. Обычно вы просто думаете о простых старых данных и преобразованиях данных, используя функции. Кроме того, в функциональном программировании нет множества конкурирующих способов сделать одно и то же, поэтому вам не нужно думать о ненужных вещах. Функциональное программирование ограничивает, и это хорошо. Вы можете лучше сосредоточиться на проблеме, которую решаете, а не на инструментах, которые вы используете для ее решения.
В объектно-ориентированном программировании вы должны думать о множестве различных типов сложных объектов с состоянием, с которыми можно взаимодействовать по-разному. Вы должны думать не только о данных и о преобразовании данных ... Вы должны думать о таких вещах, как состояние и побочные эффекты, гораздо больше, чем в функциональном программировании.
«Что я буду изучать в этом курсе?»
Вы узнаете, как создавать интерфейсные веб-приложения в стиле функционального программирования с помощью практического обучения. В этом курсе вы будете создавать 5 значимых веб-приложений с нуля. В конце этого курса вы поймете и оцените важные для функциональных программистов вещи и, скорее всего, принципиально измените то, как пишете программы.
«Какие фреймворки я буду изучать?»
Я мог бы научить вас функциональному программированию с использованием популярного фреймворка, такого как React или Vuejs, но фреймворки приходят и уходят, и принципы, которым я вас научу, - это вечные принципы, которые выходят за рамки фреймворков ... Итак, вместо этого вы изучите функциональное программирование, просто используя современный JavaScript и несколько вспомогательных библиотек. Знания и навыки, которые вы приобретете в этом курсе, могут быть использованы с популярными системами сегодня и завтра!
Будет ли этот курс на 100% JavaScript с нуля?
Мы не будем использовать никаких фреймворков, но мы будем использовать несколько вспомогательных библиотек, где это имеет смысл, как описано ниже.
«Какие библиотеки JavaScript используются в этом курсе?»
Основное внимание в этом курсе уделяется изучению концепций функционального программирования. Написание всего вручную с нуля вполне может отвлечь от основных понятий, поэтому, чтобы оставаться сосредоточенным, мы будем использовать несколько библиотек там, где это имеет смысл.
Использованные библиотеки:
- Ramda - Мы будем использовать потрясающую библиотеку JavaScript Ramda, которая похожа на lodash и underscore, но она создана для использования концепций функционального программирования. На мой взгляд, эта библиотека является обязательной библиотекой для функционального программирования на JavaScript.
- Hyperscript - мы будем использовать библиотеку для генерации HTML и CSS. Например, мы будем вызывать функцию div, чтобы генерировать html div. т.е. div ('hello') => <div> hello </ div>
- Tachyons - это фреймворк CSS, который включает в себя концепции функционального программирования, такие как композиция.
- Webpack / Babel - Мы установим минимальную систему сборки, используя webpack, babel и несколько связанных плагинов. Это однократный шаг настройки.
- Virtual-Dom - Мы будем использовать Virtual-Dom для эффективного обновления веб-страниц. Это технология, используемая современными фреймворками, такими как React и Vuejs. Это однократный шаг настройки.
«Я бэкэнд-разработчик, но я бы хотел изучить функциональное программирование ... Должен ли я пройти этот курс?»
Знания и фундаментальные принципы, которые вы изучите в этом курсе, могут быть легко переведены на сервер. Я учу вас функциональному программированию для внешнего интерфейса, потому что программирование на внешнем интерфейсе может быть довольно сложным, а функциональное программирование особенно хорошо подходит для внешнего интерфейса. Важно отметить, что этот курс фокусируется на современном JavaScript и не использует интерфейсную среду, поэтому вам не придется изучать технологии интерфейса, которые вы никогда не сможете использовать.
«Могу ли я писать функциональные программы на JavaScript?»
Да, конечно. JavaScript позволяет программировать в разных стилях, а функциональное программирование - отличный выбор. Вы начнете с изучения методов функционального программирования с использованием современного JavaScript (ES2018), а затем вы узнаете о превосходной библиотеке Ramda JavaScript. Возможно, вы слышали фразу «JavaScript, хорошие части». Когда вы программируете в функциональном стиле, вы просто используете хорошие части языка, и вы, естественно, избегаете плохих и запутанных частей (например, это ключевое слово thisヽ (ಠ_ಠ) ノ).
Разве функциональное программирование - это не маленькая ниша в информатике?
Раньше это было правдой, но не больше. В течение десятилетий объектно-ориентированное программирование было доминирующей силой в разработке программного обеспечения, но в последние несколько лет функциональное программирование имело огромный рост и использовалось в крупных компаниях, таких как Facebook, Twitter и даже Walmart. Но не только крупные компании, использующие функциональное программирование, малые и средние компании по всему миру обращаются к функциональному программированию.
В декабре 2017 года Forrester выпустило исследование под названием «Новая заря функционального программирования», в котором утверждается, что «функциональное программирование начинает выходить на главную сцену… мир разработки программного обеспечения перерастает разработку с учетом состояния и объектно-ориентированную разработку».
Всегда имеет смысл изучать восходящие трендовые технологии, и функциональное программирование является отличным выбором по этой причине и многим другим.
«Разве я не должен быть математическим гением, чтобы понимать функциональное программирование?»
Точно нет! В течение десятилетий основными приверженцами функционального программирования были в основном ученые и люди, заинтересованные в специализированных областях математики. В то время большинство работающих программистов (включая меня) не очень понимали Функциональное программирование, а люди, которые понимали Функциональное программирование, не очень хорошо объясняли, что это такое, какие преимущества, как это сделать… и т.п.
Правда в том, что вам не нужно быть гением математики, чтобы понимать функциональное программирование. Суть функционального программирования имеет мало общего с математикой, которую вы увидите в этом курсе.
«Разве мне не нужно изучать новый словарный запас, чтобы понимать функциональное программирование?»
Нет! Я не буду бомбардировать вас ненужным техническим жаргоном, на самом деле я избегаю его настолько, насколько это возможно, и когда я использую новый словарь функционального программирования, обычно это просто связывает имя с тем, что вы уже выучили, с простым старым разговорным английским языком.
«Будут ли знания, полученные на этом курсе, устаревать через год или два, как и мои знания по Angular 1?»
Нет! То, что вы изучите в этом курсе, будет актуальным и полезным в течение многих лет и, возможно, десятилетий.
«Как это возможно?»
Потому что я не учу вас функциональному программированию в контексте конкретной среды, такой как React или Vue.js. Фреймворки приходят и уходят, но навыки, которые вы изучите в этом курсе, выходят за рамки популярного времени.
«Как получается, что код, написанный в стиле функционального программирования, менее подвержен трудностям поиска ошибок?»
Самые трудные для поиска и исправления ошибок, связаны с кодом, который позволяет побочные эффекты (общение с серверами, изменения состояния и т. Д.). Функциональное программирование уделяет значительное внимание устранению и контролю побочных эффектов ... Таким образом, было бы разумно, чтобы устранение побочных эффектов, где это возможно, и жесткий контроль побочных эффектов, когда они необходимы, приводили к меньшему количеству сложных ошибок.
«Вы говорите, что функциональное программирование простое, но я пробовал функциональное программирование, и это было сложно !?»
Ах, я не говорил, что это легко, я сказал, что это просто. Написание простого кода, это не просто, часто это сложно. Но сложное программное обеспечение, построенное на простой базе кода, - это красота, и оно того стоит.
Если вы знаете и любите объектно-ориентированное программирование, вы можете принять вызов. Многое из того, что вы знаете о программировании, должно быть переоценено и часто игнорируется. Я подозреваю, что для нового программиста может быть легче изучить функциональное программирование по сравнению с опытным объектно-ориентированным программистом, потому что функциональное программирование настолько отличается от объектно-ориентированного программирования ... Но, опять же, оно того стоит :)
«Я не понимаю некоторые вещи, о которых вы говорите, такие как« побочные эффекты »и« чистые функции »?»
Не волнуйтесь, в этом курсе я начну с самых основ, поэтому у вас не должно возникнуть никаких проблем. Кроме того, я предлагаю несколько уникальных бесплатных опций для получения помощи, которые я описываю в видео о том, как получить помощь.
«Это курс для меня?»
Этот курс предназначен для 2 типов студентов:
- Новые программисты, которые прошли вводный курс программирования
- Опытные программисты, которые заинтересованы в изучении функционального программирования *
* Может быть пара видео, которые опытный программист может пропустить, но я предлагаю заново ознакомиться с основами, поскольку они представлены с точки зрения функционального программирования.
«Почему я должен брать этот курс у вас?»
Мои курсы отличаются от большинства инструкторов. Я не верю, что курс должен охватывать каждую часть языка или технологии.
Я объясню почему с аналогией.
Представь, что вы хочете выучить испанский. Один из подходов к изучению испанского языка - выучить каждое слово на испанском. В испанском словаре около 100 000 слов ... ой!
Вот в чем дело, 1000 испанских слов, которые составляют 80% всего разговорного испанского ... 2000 слов составляют 95% всех разговорных слов.
Не лучше ли сосредоточиться на изучении 1000 или 2000 наиболее употребляемых испанских слов?...
Эти же принципы применимы к языкам программирования и технологиям. Многие инструкторы делают 10, 20 и +30 часовые курсы, в которых полно варенья, которого можно было избежать!
Я не хочу тратить впустую ваше время, поэтому я буду учить вас только наиболее используемым частям JavaScript и функционального программирования, так что вы будете "говорить" быстрее.