среда, 28 ноября 2012 г.

scala

Год назад МТИ и Принстон запустили по курсу. Прошел год, теперь на coursera их чуть более 200 (программистских штук 40-50, лично мне интересных - менее десятка). Не смог пройти мимо scala. Все остальные курсы я видел в названии и меня не цепляло. Иногда я даже смотрел содержание и внутренности, все равно не цепляло. Других источников полно...

И так - scala. Язык как язык. Но с прикольными фенечками. Функционально краток, с нормальной нетривиальной типизацией, ковариантностью и медсестрами.

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

Одно из самых долгих было первое задание - поставить все среды разработок, систему сборки и отправки задания. Сделал я это за 2 вечера, потом сдал первое задание за 5 минут. Все задания понравились, было их 6 штук. Классический Хафман заходит в 5-6 килобайт, помню еще про классику - задача о переливаниях.

Пусть у нас есть два сосуда, вместимости 9 и 4 литра соответственно. Необходимо набрать 6 литров воды, неважно в какой сосуд. Мартин раза два эту фразу повторил.
Я останавливал плеер и ржал минуты по 3. Математический юмор со стороны кажется, наверно, вообще диким!"; но вы попробуйте набрать 6 литров в емкость вместимости 4. Может это не задумывали как шутку...

В итоге у scala оказался очень приятный REPL, во всяких python/ruby/etc оно тоже есть по определению, но тут все типизированно!

IO без всяких монад, которые я увы пока не понимаю. На haskell-е я как-то пробовал скрестить тривиальную БД + web-морда. Отдельно сходить в БД получилось - получаю какую-то монаду. Отдать в морде строку тоже получилось - там другая монада. Как это скрестить я за два дня не разобрался, плюнул, вытер монитор, пошел жить дальше. Отдельные вещи, как State/Rand, части  IO я понимаю, но в целом картину не вижу. Но это оффтопик.

Можно синтаксически в сигнатуре у функции указывать стратегию вычисления аргументов. Или лень, или активно. Мелочь, а приятно.

Еще есть некоторая (пока) странность. Как во всем цивилизованном мире в качестве параметра у функции можно подать подтип. Это пока не странность. Но зачем-то можно указать минимальный тип, менее которого подавать нельзя. Тут я пока не понял практической значимости этого.

Еще я было подписался на курс по python. Но после того, как они 15 минут рассказывали как устроены числа, я таки решил больше этого не слушать.

Следующее у меня в графике - гетерогенное параллельное программирование. Низкое, всякая CUDA и прочее. Лектор - китаец с крутым (в смысле понятным и четким) английским. Вообще в шоке, смотрю - китаец. Ну, думаю, как всегда. После первых двух фраз решил, что только ради этого стоит.

А так, я обычно lektorium.tv смотрю. Домашних заданий и практик конечно нет, но выбор огромен и крутые люди. Тот же компиляторный курс крут - где вы еще про проекции Футамуры услышите, и адекватно про семантику? Обычно компиляторный курс - это баян про синт анализ, с небольшим введением во внутренность машины и оптимизации кода. Так и на coursera сейчас, согласно описанию компиляторного курса.

На coursera курсы непонятного уровня. Есть курс про автоматы, читает сам Ульман. Но смотришь содержимое и понимаешь, что по большей части уже все знаешь. Всякие IR/ML курсы состоят из 75% терВера (по рассказам очевидцев), и тоже непонятного уровня. Остерегайтесь подделок.

Может и втянусь. Кое-что там полезное есть, только определять надо.

Комментариев нет: