Скоро започвам нова работа във фирма, която използва Котлин, език, който никога не съм използвал преди, така че реших, докато имах прекъсване между работните места, да науча основите, за да не започна и да се чувствам напълно извън комфорта си зона.

Преди това бях използвал Scala и знаех достатъчно Java, за да се считам за опасен, но цялостното ми излагане и интерес към базираните на JVM езици бяха доста ниски. Тъй като съм разработчик предимно на JS и Python, винаги съм гледал на тези езици като на прекалено големи разходи, тъй като всички, които познавам, които са работили с тях, са използвали IntelliJ не само за да напишат кода, но и за да го изпълнят, поради колко неудобна е конфигурацията за системата за изграждане беше.

С този начин на мислене не очаквах с нетърпение да науча Kotlin, очаквах да трябва да инсталирам IntelliJ, да се заяждам, опитвайки се да накарам прост скрипт да стартира и след това да започна да изпълнявам някои примери за код, намерени на уебсайта на Kotlin.

За щастие, Jetbrains (който създаде Kotlin и IntelliJ) предлага по-добър подход за изучаване на Kotlin — Jetbrains Academy, интерактивен инструмент за обучение, който използва комбинация от текстова информация, тестове и упражнения за кодиране, за да преподава различни програмни концепции и теми и как Kotlin ги прилага .

Jetbrains Academy използва структурата на темите, за да изгради набор от проекти на различни нива на владеене, които карат потребителите да учат и показват приложението на темите чрез изграждане на прости програми, базирани на CLI, които след като срещнат набор от „основни теми“, те могат да „дипломират“.

Упражненията на програмата CLI могат да бъдат кодирани в Jetbrains Academy с помощта на вграден редактор или в рамките на IntelliJ, който ще бъде конфигуриран за изпълнение на проекта и ще показва инструкциите за упражнения в страничен панел. След като кодът е написан, има отдалечен тестов пакет, който се изпълнява, за да провери кое решение е правилно, след което позволява на потребителя да премине към следващия етап.

Когато проектите са завършени, Jetbrains Academy предлага последващи теми и проекти, които помагат на потребителя да продължи обучението си по конкретен предмет. Освен това, докато работите по други проекти, учебната програма за този проект е съобразена въз основа на вашите съществуващи теми, така че не се налага да повтаряте области, които вече знаете.

Моят учебен план

Jetbrains Academy разполага с 23 проекта на Kotlin към момента на писане, обхващащи теми от проста игра Tic-Tac-Toe до създаване на търсачка.

След като писах код от известно време, планът ми беше да отметна някои от лесните проекти, за да науча бързо основите на Kotlin и след това да премина към по-труден, за да мога да науча някои от по-интересните части на езика.

Моето предположение, базирано на списъка с теми за лесните проекти, беше, че те ще обяснят концепции, които вече знаех, така че ще бъде лесно да прегледам текста, да отговоря на няколко теста, да напиша някакъв основен код, за да изпълня упражненията и след това да изградя Проектът. По този начин бих могъл да направя няколко пъти на ден, преди да потъна в този по-труден проект.

Предположението ми обаче беше погрешно, тъй като Jetbrains Academy не преподава само концепции на Kotlin, но и концепции за компютърни науки и те наистина обичат да усложняват прекалено много някои от упражненията.

Един пример, който се открояваше, беше упражнение върху modulo (връща остатъка от деление на две числа), което изискваше вземане на клеймо за време и след това използване на modulo, за да получите текущия час, минути и секунди от него, със сигурност показваше приложение на modulo, но като се има предвид колко проста е тази концепция, упражнението се стори напълно пресилено.

Друг блокер за моя „Jetbrains Academy speedrun“ беше колко лошо е решението за проверка на обратната връзка за проектите. Освен ако не отворите проекта в IntelliJ, няма начин наистина да видите какви тестове се изпълняват, за да проверите решението и дори тогава няма лесен начин да стартирате тези тестове локално, така че в крайна сметка да стартирате програмата си локално и да въведете входните данни, за да възпроизведете неуспешния тестове.

Това не би било толкова лош проблем, но при проекти с по-подробен изход, като шах само с пешки (където трябва да отпечатате шахматна дъска след всеки ход), не можете да видите пълния списък с входове, защото те се съкращават дневникът.

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

След като разбрах, че напредъкът ще бъде бавен, вместо това реших да работя по проектите, сякаш всъщност се уча от нулата, тъй като всеки проект отмята малко количество теми и като се има предвид инвестицията във времето за завършване на един, беше по-добре да отделя време и да направя проект на ден.

Завърших 7 проекта сега и въпреки че не съм стигнал до темите, които ме интересуват, все още се наслаждавам на учебния опит, който според мен е най-важният аспект, защото ако не се забавлявах, завършвайки проектите тогава щях да се откажа и да не постигна целта си за обучение.

Jetbrains Academy добър начин ли е да научите Kotlin?

Въз основа на моя опит бих казал да. Това не е най-бързият начин да научите езика, но със сигурност е най-задълбоченият и всички тези упражнения и проекти помагат да придобиете опит в писането на езика, което според мен е много важно.

Лесно е да четете езиковите документи и да картографирате съществуващите си знания от други езици в Kotlin и да пишете някои основни програми, но вероятно няма да използвате части от езика, които не смятате за важни и това може да доведе до това да не научите за неясни edgecases или може би някои от по-хубавите абстракции в езика.

Учебният опит в Jetbrains Academy е страхотен, разбирането на темите, обхванати в даден проект, и разполагането на учебния материал, съобразен с текущото ви разбиране, така че да можете да пропускате теми, които вече знаете, е реално спестяване на време и ви помага да поддържате интереса си.

Колкото и да смятам, че Jetbrains Academy е страхотен учебен ресурс, малко се притеснявам за вертикалната интеграция, която са създали с такъв инструмент, особено с Kotlin. Винаги съм смятал, че Java е език, който наистина можете да използвате само с IDE и сега има една компания, която притежава езика, IDE и платформа за обучение, която основно учи хората, че тяхната IDE е най-добрият начин да се научат как да използват техния език.