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

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

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

На пятой неделе учащиеся Makers берутся за новую задачу: выучить новый язык, JavaScript, увиденный через призму объектно-ориентированного программирования и разработки через тестирование, при минимальном руководстве со стороны тренерского состава. Тренеры могут помочь устранить более сложные вещи, которые вы не найдете в бесплатном онлайн-курсе (например, асинхронный JavaScript и цикл событий), но такие вещи, как базовые примеры кода и изучение синтаксиса, полностью зависят от вас. Провели последние четыре недели, привыкая к Ruby? Пора оставить все это позади (хотя бы временно).

На этой неделе одни ученики предпочитали других, но не только так, как вы можете себе представить. Например, я предполагал, что то, что я сделал раньше на JavaScript, поможет мне довольно быстро ускорить выполнение того, что требовалось, но я не уверен, что мой предыдущий опыт действительно сильно помог. В частности, мой опыт работы с новым синтаксисом ES6 (например, при выполнении таких вещей, как React) запутывал вещи там, где они не должны были быть.

Тем не менее, мы приближаемся к середине курса, и я чувствую, что мы, наконец, приступаем к настоящей разработке программного обеспечения, что бы это ни было. Почему я так думаю? Изучение и свободное переключение между несколькими языками — первый признак. Кроме того, начало работы над групповыми проектами (неделя 6, о которой я напишу на следующей неделе). Наш технический тест в пятницу утром состоял в том, чтобы протестировать знакомый пример FizzBuzz на новом или незнакомом языке. Впервые за более чем шесть лет я обнаружил, что пытаюсь загрузить Eclipse, а на моем экране были C++ и Java. Хорошо, C++ не компилировался на моем MacBook Pro, но, по крайней мере, я все еще управлялся с ним на Java, так что утро не было полным провалом. (На самом деле я остановился на IntelliJ IDEA вместо Java, несмотря на то, что в 2012 году я недолго работал Java-разработчиком, используя Eclipse, так как на мой вкус он кажется немного более современным! себя…)

Вот как это могло бы выглядеть, если бы мне удалось заставить его работать на C++…

#include <iostream>
 
using namespace std;
int main ()
{
       for (int i = 1; i <= 100; i++) 
       {
               if ((i % 15) == 0)
                       cout << "FizzBuzz\n";
               else if ((i % 3) == 0)
                       cout << "Fizz\n";
               else if ((i % 5) == 0)
                       cout << "Buzz\n";
               else
                       cout << i << "\n";
       }
       return 0;
}

…но, конечно же, здесь не показан набор тестов, который сопровождал бы любую попытку студента Makers в FizzBuzz(!)

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

(define (fizzbuzz x y)
  (println
    (cond (( = (modulo x 15) 0 ) "FizzBuzz")
          (( = (modulo x 3) 0 ) "Fizz")
          (( = (modulo x 5) 0 ) "Buzz")
          (else x)))
 
    (if (< x y) (fizzbuzz (+ x 1) y)))
 
(fizzbuzz 1 100)

…или на языке COBOL, который моя мама писала, когда работала программистом в начале 1980-х:

* FIZZBUZZ.COB
      * cobc -x -g FIZZBUZZ.COB
      *
       IDENTIFICATION        DIVISION.
       PROGRAM-ID.           fizzbuzz.
       DATA                  DIVISION.
       WORKING-STORAGE       SECTION.
       01 CNT      PIC 9(03) VALUE 1.
       01 REM      PIC 9(03) VALUE 0.
       01 QUOTIENT PIC 9(03) VALUE 0.
       PROCEDURE             DIVISION.
      *
       PERFORM UNTIL CNT > 100
         DIVIDE 15 INTO CNT GIVING QUOTIENT REMAINDER REM
         IF REM = 0
           THEN
             DISPLAY "FizzBuzz " WITH NO ADVANCING
           ELSE
             DIVIDE 3 INTO CNT GIVING QUOTIENT REMAINDER REM
             IF REM = 0
               THEN
                 DISPLAY "Fizz " WITH NO ADVANCING
               ELSE
                 DIVIDE 5 INTO CNT GIVING QUOTIENT REMAINDER REM
                 IF REM = 0
                   THEN
                     DISPLAY "Buzz " WITH NO ADVANCING
                   ELSE
                     DISPLAY CNT " " WITH NO ADVANCING
                 END-IF
             END-IF
         END-IF
         ADD 1 TO CNT
       END-PERFORM
       DISPLAY ""
       STOP RUN.

Разве код не красивый? (неловкое молчание)

Так или иначе, я медленно учусь любить JavaScript, несмотря на его многочисленные странности. Он достаточно гибкий, чтобы с его помощью можно было анимировать веб-сайты и запускать модели машинного обучения. Это язык сети. С Node.js вы можете запускать JavaScript для всего стека от начала до конца. Кому нужен серверный язык? Прежде чем я так или иначе сформулирую особенно твердое мнение по этому вопросу, мне, вероятно, следует начать использовать его немного больше, чем переписывать наш Airport Challenge с первой недели, и начать создавать правильные приложения на JavaScript.

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

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

Я уже в ужасе и не могу дождаться.