Архив недели @noraltavir
Понедельник
Всем привет, меня зовут Александр Нозик. Я люблю представляться как физик-программист, потому что по основной профессии я все-таки физик. Что не мешает мне в основном заниматься программированием. В этом треде я расскажу о себе.
У меня есть диссертация по физике нейтрино. Конкретно по массе нейтрино. До последнего времени этот результат был лучшим в мире.
Я специализируюсь по системам сбора и анализа данных и именно этому посвящена основная часть моей работы (когда мне дают возможность этим позаниматься).
Несмотря на научную направленность, в основном я занимаюсь программированием. О том, как я дошел до жизни такой, напишу потом. Я начинал писать на Pascal, потом писал на Delphi разных версий, потом на Component Pascal/Oberon.
Где-то с 2007 года работал на Java, потом на Groovy. Ну и в 2017 году полностью переключился на Kotlin. C, Fortran и C++, разумеется, тоже не прошли мимо меня. Периодически приходится работать на Python. Также есть некоторый опыт на Julia.
Самое важное забыл. Я работаю в МФТИ, JetBrains Research и немножко в ИЯИ РАН. Должность моя везде звучит как старший научный сотрудник.
В МФТИ я заместитель заведующего лаборатории. Вот этой: npm.mipt.ru/ru/.
В JBR - руководитель направления. Вот этого: research.jetbrains.org/groups/npm/
Еще я преподаю физику (лабы и семинары), статистические методы и (сюрприз) Kotlin в МФТИ.
Еще я руководитель магистерской программы. Вот этой: npm.mipt.ru/ru/magprog
Еще я Kotlin GDE.
Ничего не забыл?
Тред (Александр Нозик)
Вот вам кусочек нейтрино в ленту. Пока я пытаюсь доделать кусок работы и написать план на эту неделю.
Я как раз сижу, реанимирую старый код для чтения и визуализации данных для mass.inr.ru/unu/. Там TornadoFX, которая не очень хорошо дружит с современными JDK, а у нас сеанс измерений через 2 недели. Надо, чтобы работало.
Да, почти весь код открытый, так что кому интересно, дам ссылку. Но конкретно этот так себе. Я его писал 5 лет назад и его надо выкинуть и написать заново. Это кстати одна из проблем программирования в науке, постараюсь не забыть про это написать.
Итак, план на неделю. Мой любимый жанр - это хорошо подготовленная импровизация, поэтому я не буду говорить, в какой день что я буду писать и сколько я буду писать. Расскажу что буду за темы.
Буду рассказывать про образование и про его важность или не важность в IT и науке. И вообще про то, что такое наука и зачем она в животноводстве (том же IT).
Вероятно будет что-нибудь про философию и то, как она связана с пунктом выше.
Возможно будет что-то про физику, если кому интересно. Все помнят, что веб придумали физики?
Про музыку обязательно будет. Разумеется про ту, что я люблю.
Ну и про Kotlin, разумеется. Много-много про Kotlin.
Буду плеваться ядом в С++.
Постараюсь без "политики". Это буду писать в личном аккаунте.
Тред (Александр Нозик)
Про компании забыл.
МФТИ - это один из самых крутых технических ВУЗов в России (самый крутой, если вы спросите физтехов). Я думаю, что в дополнительных представлениях не нуждается.
А вот про JetBrains Research вероятно знают не все. Многие крупные компании, такие как Microsoft или Google делают свои Research подразделения. JetBrains тоже. Важный момент, что в сообщество JBR входят в том числе лаборатории, не входящие в JB.
Я получаю огромное удовольствие от работы с замечательными, интересными и активными людьми в JBR. Кажется, что именно так должна выглядеть наука. Жаль, что не так просто такой подход масштабировать ( об этом тоже расскажу, если не забуду).
Пойду поработаю немножко, а потом вернусь к вам. А то надо генератор сделать, а он сам себя не напишет.
#музыка
Сейчас идет RPWL - We Are What We Are.
RPWL - это одна из недавних находок. Youtube Music подсунул. Ребята (немцы кстати, хоть и поют на английском) начинали с трибьютов Pink Floyd, но в результате выросли в нечто совершенно самобытное.
Еще, я забыл предупредить, что я терпеть не могу твиттер. Только моя мысль разгоняется, а тут у же конец твита.
Также он не дает мне исправлять ошибки в правильнописании. А за них меня жена больно бьёт.
@itunderhood Что не основной язык. Стереотип. Наука/обработка результатов = фортран/питон
Отличный вопрос! Сейчас будет тред.
В народе бытует два в большой мере противоположных мнения:
Научный код должен быть мега-быстрым и поэтому должен быть написан на низкоуровневом языке.
Научный код должен быть на Пайтоне потому что ученые не умеют сложное. twitter.com/sewergun/statu…
Очевидно эти тезисы взаимоисключающие и тем не менее они оба от части правильные. Действительно, наука (и физика в частности) до сих поставляет нам самые вычислительно сложные задачи (почитайте про решеточные расчеты в квантовой хромо-динамике). Поэтому скорость важна.
С другой стороны физики как правило так себе программисты, поэтому лучше не давать им в руки атомный чемоданчик (да, вы поняли, это С++).
Что же делать?
Как правило решение выглядит как использование двух языков. На C/Fortran/C++ делают внутренний эффективный, но очень неудобный код, а потом делают очень легковесную обертку на Python или, скажем Julia (или bash, но чур меня, чур).
Такой подход решает многие проблемы, но создает свою огромную проблему. Джульисты называют это Two Language Problem. Суть в том, что надо код пишется на двух языках. Помимо того, что их интероп требует дополнительных усилий, возникает еще одна проблема.
Тот товарищ, который пишет на Python не умеет на С и наоборот. Это просто два разных специалиста. И очень быстро оказывается, что программа на Python стала слишком сложной и нужно реализовать что-то, чего нет в "вычислительном бэкенде".
Разумеется, можно добавить операции в бэкенд, но это всего лишь приводит к тому, что и так сложные и неудобные библиотеки становятся еще более сложными и неудобными.
Можно конечно писать все на Python, но программа больше 300 строк на Python очень плохо поддерживама (на ее поддержку приходится тратить огромное количество времени). Кроме того, очень велик риск потерять весь свой выигрыш в производительности, с таким трудом добытый.
В результате получается, что для простых скриптов Python идеален, но на нем невозможно делать "разработку". Нужно всегда лезть в "вычислительный бэкенд" и ваять что-то там и делать прослойку для интеропа с Пайтоном. То есть делать двойную работу.
Ну и как спец по обработке добавлю, что делать это на Python реально больно (после той же Java/Kotlin). Например из-за работы с функциями, которыми нельзя пользоваться в Python из-за того, что они очень медленно работают.
Тред (Александр Нозик)
@itunderhood Почему Java/Kotlin, а не Julia?
Хороший вопрос. Julia это мой second best вариант. У нас даже есть на ней довольно большой проект: github.com/mipt-npm/Turch…. Проблемы - это плохой тулинг (и я не думаю, что его можно сделать хорошим) и довольно узкая ниша. twitter.com/alex_kupreev/s…
Julia - это однозначно better Python. и я не стал бы однозначно предлагать выбирать в пользу Kotlin когда есть выбор между Julia и Kotlin. Но мне не зашло. Плюс опциональное типирование, плюс централ репозиторий на гитхабе. Это все мины замедленного действия.
Тут кстати @nlosev интересную тему поднял. Про всякий work/life balance. Меня этот вопрос всегда несколько удивлял, как и люди, которые принципиально по выходным отключают рабочие чаты.
Это не плохо, это хорошо. Надо заботиться о семье и здоровье. Но ВДРУГ ТАМ БУДЕТ ЧТО-ТО ИНТЕРЕСНОЕ? А я это пропущу.
Видимо специфика работы. Если ты точно знаешь, что интересного не будет, то подход другой.
@itunderhood @SergeiUdalov А что по деньгам, существуют ли варианты заниматься наукой, но не голодать? (Как я понял, Вы решаете вопрос частично с JBR, а частично за счёт того, что работа интегрирована в жизнь - а как ещё? )
Это еще один хороший вопрос. Если бы вы задали его мне лет 5 назад, пока я по большей части работал в академическом институте, я бы сказал, что в науку идут не за деньгами. twitter.com/BlackPoodle2/s…
Но практика сейчас показывает, что все наши молодые сотрудники достаточно неплохо зарабатывают. Да, надо крутиться, искать финансирвоание и участвовать во многих проектах. Да, наше государство делает все, чтобы это было сложно. Но тем не менее как-то получается.
Сам удивляюсь.
Собственно если я вдруг уйду из науки в IT, это будет не за деньгами, а в порядке бегства от бюрократии и научной политики. Это напрягает - да.
Тред (Александр Нозик)
Вторник
#треддня
Высшее образование - это важно.
А может быть и нет.
Есть очень большой и долгий спор про то, нужно ли высшее образование программистам. Я думаю, что тут нет однозначного универсального ответа. И все будет зависеть от того, зачем оно им.
Для того, чтобы устроиться на позицию джуна и радостно "красить кнопки" высшее образование не только не нужно, но и вредно. Оно отнимает время и нервы. Тенденция работать и одновременно учиться вредит системе высшего образования в целом (выносит мозг препам и прожирает бюджет).
Вожделенные "корочки" уже давно никого не интересуют. Важен опыт работы, а его можно получить и без всякого ВУЗа.
В общем, если для вас ВУЗ - это способ поиска первой работы, то пожалуйста не надо. Или спокойно идите в ВУЗ третей категории, где никого не волнует учитесь вы или нет.
Тем не менее, хороший ВУЗ - это очень важно в тот момент, когда вы дорастаете до позиции сеньора. Вам внезапно оказывается важен и кругозор, и коммуникативные навыки и способность планировать время.
Да и связи, которые вы заработали, обучаясь с самыми крутыми студентами страны, оказываются очень не лишними.
В общем в какой-то момент своей карьеры вы вдруг понимаете, что все вот это "лишнее" и "ненужное", что там было, было не лишним и нужным.
И это не мои домыслы. Это достаточно стабильный набор ответов, которые я получаю от людей в статусе сеньор+, с которыми я говорю по разным поводам (а говорю я со многими).
Таким образом получается парадокс. Для старта карьеры образование не нужно и даже в чем-то вредно. Но это образование в какой-то мере определяет "потолок", которого вы можете достигнуть.
Разумеется, можно "дообразоваться на лету". Но как правило это требует куда большей силы воли и усилий. В конце концов, у вас уже много работы и на это просто нет времени.
Вот и получается, что высшее образование - это инвестиция не в себя сейчас, а в себя через 10 лет. Не все могут позволить себе такие инвестиции. Но да, они почти всегда окупаются. Потом...
Но вот чего не стоит делать, это пытаться и на ёлку влезть и на паровозике покататься. То есть совмещать работу с серьезной учебой с первых курсов. Вы получаете все минусы образования и не получаете плюсов.
(WARNING: непопулярное мнение)
По моему опыту, разумная доп. нагрузка для 2-3 курса - это не больше 10 часов в неделю. Для старших курсов - 20 часов. Но точно не фул-тайм. Иначе зачем вы делаете вид, что учитесь.
Тред (Александр Нозик)
#музыка
Fish: Internal Exile.
Не напрягающая рабочая музыка. Более интересны, разумеется, альбомы, выпущенные, когда Fish был еще в составе Marillion. Особенно Misplaced Childhood - первая часть. Но мне нравится далеко не все.
Раз мы сегодня говорим об образовании, давайте поговорим о Soft skills.
Эта часть в Российском образовании традиционно провалена. Ну конечно, зачем нам учить людей говорить и общаться, если они могут строить ракеты. А то еще поговорят с кем-то не с тем.
Не случайно, большинство организаторов возраста 50+ - это выходцы из комсомольских организаций. Где же еще можно научиться работать с людьми?
Проблема с soft skills та же, что и с техническим образованием в целом. Это не то, что вам очень нужно на старте карьеры. Действительно, вот сидит джун или даже мидл. С внешним миром за него общается тимлид. Чего ему/ей об этом думать?
Ну а как только этот джун/мидл становится серьером/тимлидом? Облом братцы и сестрицы! Оказывается общаться и управлять людьми - это тоже способности и навык и не всем оно дано и даже тем, кому дано, надо учиться делать это грамотно.
Я не к тому, что все должны становиться начальниками. И я абсолютно согласен с тезисом @NeuraSC2 о том, что многие люди идеальны на тех позициях, которые они занимают и им не надо пытаться лезть в какой-то тимлидинг/евангелизм, если оно им не нравится.
Но если вдруг хочется, то этому надо где-то учиться. И тут или самостоятельно путем проб и ошибок, или таки да, гуманитарные предметы в техническом ВУЗе. Психология. Обязательные выступления с докладами. Практика управления проектами.
Мы сейчас в магистратуре добавили по некоторым предметам обязательные выступления и дебаты. Народ сначала взгрустнул. Но они скажут потом большое спасибо. Там сразу же было видно, насколько все плохо было на первых выступлениях и как оно улучшилось.
В следующем семестре обязательный курс по научной этике. А сейчас будет эссе по инструментам разработки. Надо, товарищи. Надо!
Тред (Александр Нозик)
Важное дополнение к предыдущему посту. Soft Skills - это не только умение говорить с людьми. Это еще и умение внятно излагать свои мысли. Планировать свое и чужое время. Умения понимать, кому можно поручить какую работу и какие результаты ожидать.
Среда
#музыка
Yes: Machine Messiah
Обычно этот период творчества Yes я не слушаю. Он не очень похож собственно на Yes. Но вот с утра чего-то внезапно захотелось. Обязательно напишу попозде несколько действительно великих вещей этой группы.
#треддня
Наука - это важно.
А может быть и нет.
Платон, в своем диалоге "Государство" (ru.wikipedia.org/wiki/%D0%93%D0…) приписывает науке определяющую роль не только в развитии общества, но и в управлении им. Он считал, что идеальное общество должно управляться философами, то есть учеными (тогда все науки были философией).
Разумеется, сейчас (по крайней мере мне) общество, управляемое учеными, может присниться разве что в кошмарном сне.
Представление об ученых, как о старцах, заседающих в башне из слоновой кости, и не понимающих, что происходит в реальном мире не верно для всех ученых. Но не так уж далеко от истины в среднем.
Идеальные модели далеко не всегда хорошо ложатся на реальность даже когда они исходят из правильных предпосылок. А предпосылки, кстати, далеко не всегда правильные.
Тут есть проблема с тем, что эксперт в одной области часто автоматически считает себя экспертом в других, но об этом отдельно.
Так вот, ученые, слава богам, не управляют народами. Но при этом наше общество построено на научном прогрессе и движимо им (прогрессом). Поэтому наличие науки просто необходимо для развитие и существования нашей цивилизации.
Что же такое наука?
Я вас удивлю, но наука - это задавание вопросов. Любых. Почему небо голубое? Почему трава зеленая? Почему я заменил
Int?
на Int
и оно заработало в два раза быстрее.
Обдумывание любого вопроса - это исследование, научная деятельность.Мы не обращаем внимание на то, как исследование является частью нашей жизни, а ведь для человека даже двухсотлетней давности задавание вопросов не было настолько естественным. Оно так потому что оно так, к чему лишний напряг?
Ну и не все современные люди задают вопросы.
Так вот, ученый - это тот, для кого задавание вопросов является профессиональной обязанностью. Ответ на эти вопросы - это как правило много технической работы того или иного рода, но сама наука в вопросе, а не в ответе.
К сожалению или к счастью, для того, чтобы задать вопрос, надо уже много чего знать (см. Роберт Шекли. Верный вопрос). Так и получается, что ученые еще и аккумулируют знания.
Сколько же должно быть таких вопросителей (вопрос)? Давайте в цифрах. Я вчера говорил про высшее образование, но забыл затронуть тему того, а сколько нужно высшего образования. По моим оценкам процентов 20-30 от населения.
Так вот исследователей разного уровня в равновесном состоянии процентов 10 от тех, кто получает (всерьез) высшее образование. То есть 2-3% от людей всего. Это очень много в абсолютных числах, но не так много в относительных.
Получается, что наука - это важно. Это нужно, но не всем. Часть людей должна этим заниматься, но эта часть очень небольшая. И если вы в нее не попадаете - это не страшно.
Тем не менее, наука - это польза не только человечеству в целом, но и человеку, который ей занимается. Поэтому полезно по крайней мере поинтересоваться. Об этом напишу позже, а то и так лонгрид нарисовался.
Тред (Александр Нозик)
#музыка
ELP: Tarkus
Типичный представитель эпических 20-минутных композиций из 70-х. Рекомендуется по крайней мере в первый раз слушать не "фоном", а целенаправленно. Не сама сложная композиция, но и не самая простая.
Простите, еще #музыка
The Pineapple Thief: Alone at Sea
Натуральный английский арт-рок в полный рост. Совершенно ошеломительное музыкальное "повествование", не знаю как это еще назвать. Конкретно эту композицию слушаю часто и все равно мурашки по коже.
Зачем наука, или, более правильно, исследование, в народном хозяйстве. Чтобы не писать мегатред, примеры.
В research.jetbrains.org есть несколько групп по био-информатике и целых две по фундаментальной физике. Какой в них толк для IT компании?
Сразу несколько.
Толк №1. Пока мы копаем нашу биологию/физику, мы ставим всякие масштабные и интересные задачи, которые по максимуму задействуют возможности инструментов, которые IT компания разрабатывает.
В физике все еще самые большие данные:
youtu.be/bl_m36HyV2Q,
youtu.be/2pA_qga-4Pg.
И самый сложный анализ:
youtu.be/grP9CJoGzno
В биологии тоже куча интересных хотелок:
github.com/JetBrains-Rese….
Мы помогаем делать инструменты лучше просто тем, что даем сложные задачи.
Толк №2. Сложные задачи привлекают и помогают развивать талантливых людей. А люди - это самая дорогая компонента любой работы.
Примеров можно приводить много, но я думаю, что почти всем известны могучие IT-шники, вышедшие из Research среды.
Толк №3. Это банальная реклама. В отличие от корпоративных разработок, исследования - вещь как правило открытая и публичная (должны быть по крайней мере). Так что это хороший способ продвинуть свой бренд. Смотрите, какие у нас светила работаю.
Тред (Александр Нозик)
Давайте еще перед тем, как уйти в совещания (по довольно интересной теме кстати, инвертированное Монте-Карло моделирование мюонов для геологоразведки), расскажу еще важную тему.
Перед этим был рассказ про то, почему ресерч важен для компаний, а теперь почем он важен разработчикам.
Причина та же - развитие. Очень сложно развиваться, когда изо дня в день решаешь одну и ту же задачу, которую ты решал(а) уже очень много раз.
С одной стороны, смысл инженера как раз в том, чтобы делать то, что он или она умеет хорошо. С другой, это на дает осваивать что-то новое.
Я уже говорил, что главный смысл исследования в задавании вопросов. А как сделать это лучше? Быстрее? Может что-то совсем другое?
Поиск ответов на эти вопросы позволяет не просто развиваться ради развития, а развиваться для решения конкретных интересных задач.
Давайте опять же поделюсь своим опытом.
Я работаю на "промышленных" технологиях где-то с 2007-2008 года. Но у меня не было особых мыслей применять мои знания и навыки в чем-то кроме науки. Ну как-то казалось, что у нас тут какое-то кустарное программирование, невсамделишное.
Из "шкафа" я начал выбираться где-то в 2016 году, когда начал активно участвовать в котлин-комьюнити.
Представьте же себе мое удивление, когда оказалось, что опыт, полученный в результате такого вот "метода научного тыка" в "локальных задачах" оказался не просто полезным, а на весьма высоком уровне в профессиональной разработке.
Вон даже Google оценил.
А я ведь еще немного и консалтингом занимаюсь, чтобы лабу подкармливать. И приходят такие бородатые дяди из серьезной индустрии и всерьез спрашивают моего совета, как им проектировать свою систему (тоже кстати интересную, но NDA).
Это глубина, и с кругозором тоже все хорошо, потому что пока я экспериментировал с разными технологиями, я их изучил (изучение - важное слово). А всего-то надо было сесть и позадавать вопросы. Почему оно работает так? Почему не сделать вот так? А чем это лучше этого?
И вы знаете, я не один такой. Про своих сотрудников рассказывать не буду (там есть еще несколько таких примеров), но сейчас к нам начали приходить люди с опытом уровня сеньор и просить задачки.
Причина та же, люди хотят интересных задач и развития. Готовы заниматься этим в свободное от работы время потому что это хорошая инвестиция. Она окупается.
Опять же, не говорю, что это нужно всем, но спрос очевидно есть.
Ну и последнее замечание. Никогда не поздно начать этим заниматься, но проще, разумеется, уделять время на развитие в начале карьеры. На галеру вы всегда успеете уйти. А вот заниматься всерьез интересными задачами, когда фул-тайм, семья и кредиты уже не очень просто.
Разумеется, если есть для этого физическая возможность.
Тред (Александр Нозик)
@itunderhood Что такое «метод научного тыка в локальных задачах»? Какой полезный опыт из этого был извлечён ? Как это повлияло на бородатых дядек? Хочется больше конкретики.
Без проблем. Сейчас будет.
Метод научного тыка - это как раз то, что написано. Мы берем разные технологии и начинаем их тыкать. Но не просто так ткнул - заработало, а вопросами. Почему оно заработало так, а может ли оно работать лучше. А давайте сделаем прототип альтернативный. twitter.com/IvanKravchnko/…
Полезный опыт простой. Вы понимаете, какие технологии есть, какая в них логика и почему они работают так, как работают. Это позволяет вам не просто пользоваться технологиями по инструкции, а еще использовать их другими способами.
Или вообще создавать новые технологии по аналогии.
Вы не делаете это в своей обычной работе потому что у вас цель получить результат как можно быстрее, а не задавать вопросы и разбираться.
Вот народ ноет по поводу того, что не понимает Gradle. Да, не самая простая технология, но в ней вполне можно разобраться, если потратить на это дня 3-4. И все - ты эксперт.
Архитектура - это более эфемерная вещь. Тут уже дело не просто в изучении технологии, а в большом объеме экспериментов с разными вариантами и личного опыта. Вы не получите этот опыт, если 5 лет работаете с одной и той же архитектурой и не экспериментируете.
Так вот бородатым дядям именно этот вот опыт и кругозор интересны. Им интересно, когда у вас есть ответы на вопросы в разных областей и когда вы можете подкрепить свое мнение ссылками на разные примеры из личного опыта (открытый код в ресерч либах напирмер).
Тред (Александр Нозик)
Давайте, чтобы не говорит про себя расскажу историю одного хорошо известного в Kotlin Community школьника. Человек начал с того, что захотел разобраться с тем, можно ли генерировать байткод для выражений на лету.
Но на этом не остановился, начал ковырять в разные стороны (с мой небольшой помощью). В результате стал одним из основных контрибьюторов в github.com/mipt-npm/kmath и крутые (не бородатые) дяди из JB воюют за то, кто зазовет его на работу. В 11 классе. Все это за год.
Вот статья первая:
medium.com/@postovalovya/…
А вот в более научном виде:
arxiv.org/abs/2102.07924
Ну все, жена прочитала мои твиты, нашла миллион ошибок и сейчас будет бить.
Провели митап по KSP. Опробовал новенькую камеру (гугл обещал оплатить). Потом классно поговорили в телеграме про все: от квадратных уравнений до мульти-ресиверов и компайл-тайм интроспекции.
Митапы и лекции в телеграме рекомендую кстати.
Четверг
Сегодня #треддня немного пораньше, потому что надо ехать на физтех и там будет не до этого.
Философия - это важно.
Но не для всех, разумеется.
В нашей стране (странАХ на самом деле) к сожалению имеет место стигматизация философии. Под философией до сих пор подразумевается так называемая марксистско-ленинистская идеология (уже у Ленина никакой философии там нет).
Ну и само существование институтов философии, наполненных бывшими учителями истории КПСС не помогает. Тот предмет, что изучается в ВУЗах, это конечно никакая не философия, а история философии. Полезная, но не супер-осмысленная дисциплина.
Что же такое философия. В античные времена и вплоть до эпохи Ньютона, все науки были философией и философия была всеми науками. Разделения не было. Потом оказалось, что ученым нужна специализация и отделилась сначала физика, потом химия, потом математика и так далее.
Но философия на самом деле никуда не делась. Она просто стала мета-наукой. Ну и гуманитарные науки отщепились от нее сравнительно недавно.
Тут образовался некоторый раскол между тем, что на самом деле философия, и тем, что преподают в ВУЗах.
В ВУЗах преподают историю. Более того, я не вижу, каким образом сейчас может существовать профессиональный философ. Для того, чтобы двигать мета-науку, надо саму науку или индустрию хорошо знать. А без этого можно заниматься только историей.
Ну и не случайно ключевыми философами ХХ века являются люди, которые не являются философами-профессионалами. Гейзенберг, Вайцзеккер, Турчин (и это только физики).
Философия помогает нам понять глобальные связи и аналогии между явлениями. Аналогия между физикой и программированием. Аналогия между программированием и лингвистикой. Организация кода и организация работы коллектива (а там ведь много общего!).
Один конкретный пример можно посмотреть в моей лекции: youtu.be/zguDAaxhHJQ. Работу Турчина рекомендую всем. Он не только был известным физиком, но и одним из основателей кибернетики и автором одного из первых функциональных языков РЕФАЛ.
Еще на один пример философии, полезной для программистов совершенно справедливо ссылался @abreslav в одном из своих интервью. Логико-философский трактат Людвига Витгенштейна. Это труд о структуре языка.
История с философией точно такая же как и с образованием и с наукой. Они ничем не помогут джуну в работе над андроид приложением. Философия вряд ли поможет даже сеньору в работе надо проектом.
Но если вы начинаете работать над архитектурой, проектируете взаимодействие частей системы на годы вперед, разрабатываете идеологию инструмента и языка программирования. Вот тут это все вам внезапно оказывается нужно.
Сколько людей, понимающих философию нужно? Ну фактор "редукции" такой же как и раньше, может даже меньше. Скажем 5% от людей, занимающихся исследованиями. То есть меньше, чем каждый тысячный или даже меньше.
Так что не факт, что оно вам нужно. Но вдруг...
Ну и последнее. Философия - это не совокупность прочитанных концепций, это кругозор. Его можно набрать только интересуюсь разными аспектами проблем не только в своей области, но и далеко за ее пределами.
Тред (Александр Нозик)
В продолжение утреннего треда, возвращаемся к программированию.
Дело в том, что у каждой программной экосистемы есть если не философия, то идеология. В большинстве случаев, это не "официальная позиция" а просто некоторая совокупность взглядов большинства членов сообщества.
С++: разработчик - бог, мы даем ему все инструменты, чтобы он мог при их помощи сотворить все, что хочет.
Python: написать программу должно быть легко. Все инструменты должны быть в шаговой доступности и максимально быстро подключаться.
Java: безопасность для больших проектов и поддержка тулинга.
Kotlin: прагматичность. Каждый инструмент должен быть востребован и желательно больше, чем один раз.
Разумеется, тут нет четких границ, бывают разные проекты и разны разработчики. Но в целом, разные экосистемы придерживаются разных систем ценностей, если угодно разной этики (см. дискуссию выше... или в твиттере это ниже).
Мне кажется, что философией программирования можно назвать изучение этих концепций, их сопоставление и выводы о том, чего тут не хватает.
Разумеется речь не только о правилах экосистем, но и о так называемых best practices: изоляции кода, модуляризации и так далее.
Пятница
Сегодня по плану у нас образование в IT и не в IT. Не уверен, что успею (весь день лекции и совещания). Если не успею, то завтра.
Про Go забыл. Идеология Go - не сломай! Это во многом правильная идеология и именно поэтому язык так популярен. Но проблема в том, что неломаемость плохо сочетается с гибкостью.
Тред (Александр Нозик)
Все, товарищи, про образование завтра. Сегодня уже в состоянии не стояния. Могу только сидеть и играть в компьютер.
Зато. Лабы у всех принял (кто пришел сдавать). Семинар провел. Интервью дал, статистику с коллегами обсудил для публикации. Стратегию развития магистратуры тоже. Подумал о том, как получше вставить костыль для визуализации, но до кода не добрался.
Забабахаю все-таки на ночь глядя небольшой тредик.
Мне тут на интервью очень хороший вопрос задали: какие технологии надо в первую очередь осваивать для научного программирования. Я как-то об этом даже не задумывался. А вопрос отличны. Подумал. Пишу приблизительный ответ.
Питон (да простит меня @_bravit) все-таки маст-хэв. Он есть и, я думаю, долго еще останется, некоторым общим минимумом среди научных программистов. Разумеется, не столько Python, сколько numpy.
К счастью, его освоение занимает пару недель максимум (см. тред про идеологию).
Учить бы я стал в первую очередь веб-технологии. И клиентские и серверные. Как ни удивительно, эта область уже содержит многие вещи, нужные для науки. Коммуникационные протоколы, технологии работы с данными и соответствующие архитектуры.
Для более глубокого погружение требуется изучение принципов работы памяти и архитектуру рантаймов. Не уровня разработчиков JVM, но общие знания весьма полезны. Профайлинг и отладка, разумеется тоже.
Алгоритмы, как это ни удивительно, не особо нужны. Любой нормальный ученый довольно легко разберется в numerical recipes или другом справочнике, но суть-то как раз в том, что не надо городить свои алгоритмы, лучше использовать готовое, где можно.
Ну сборка и тестирование, разумеется. Научное ПО, как я уже говорил, делается надолго, о качестве кода надо заботиться сразу.
Тред (Александр Нозик)
Суббота
Все, доделал часть дел. Теперь #треддня. Как обещал про IT образование вообще и "первый язык" в частности.
Ну для начала непопулярное мнение. Не всем нужно войти вайти. Да, на данный момент, в IT сильно не хватает людей, поэтому зарплаты все еще высокие. Особенно в России, которая к сожалению страна достаточно бедная и возможность работать на международную компанию очень ценится.
Тем не менее как раз потому что зарплаты высокие, люди часто идут в IT не потому, что оно им нравится, а в погоне за этой самой зарплатой. Часто это так себе заканчивается. Даже в самих IT есть разные задачи, не связанные с программированием.
Так что я верю, что если бы люди хорошо подумали, они могли бы найти себе что-то достаточно доходно и не столь травматичное. Разумеется, тут у всех бывает своя "ситуация". Так что не могу рекомендовать что-то прямо всем.
К сожалению кроме больших зарплат, еще бытует мнение о том, что в IT не надо ничего знать и уметь. В Kotlin комьюнити каждый день приходит по несколько человек, которые думают, что они сейчас напишут игру на андроиде и вмиг станут миллионерами.
Надо ли говорить, что это очень плохо работает. Во-первых, много людей, у которых вообще к этому нет способностей. Во-вторых, люди сразу впрягаются в муторные индустриальные технологии, не изучив "азы". В результате застревают навечно в позиции джуна-мидла.
Ну и выносят себе мозг в результате. Вот это самое известное всем "выгорание", это же не потому что IT жрет мозг. Любая работа жрет. А потому, что люди не готовы совершенно к тем сложностям и той загрузке, которые получают. И не получают достаточного удовольствия от работы.
В общем не факт, что оно вам надо.
Но.
Черт с ним, с IT. У нас сейчас программирование в той или иной мере является частью повседневной жизни во всех областях. Так что базовые навыки программирования нужны абсолютно всем без исключения.
Это приводит нас к тому, что программировать надо учить. Причем всех. Причем в школе. Спрашивается как и на чем?
Ну и дальше идет мое мнение (оно может быть неправильным, но я все-таки очень много работаю с недавними школьниками).
Категорически не надо брать С++. Я писал позавчера о том, что философия С++ в том, что программист гений и бог и что он может делать все, что вздумает. Ну да, давайте дадим гранатомет школьнику. Пусть играется.
С программами же все хуже, чем с гранатометом. От того, что вы попали из гранатомета куда-то не туда, результат очевидный. А от того, что человек городит черт знает что на С++ видимый результат будет через много лет.
Возможно кто-то тут ходил в музыкальную школу и знает, что в классе фортепиано, чуть ли не год тратят на то, чтобы правильно "поставить руки". Человек может сносно играть даже с неправильной постановкой, но он никогда не продвинется дальше какого-то уровня.
В результате надо будет разучивать и переучивать, что гораздо больнее и дольше, чем учить правильно сразу.
Свобода - это хорошо, когда вы знаете, что делаете. Поэтому не надо С++ в школах.
С и Pascal - это отличный вариант. Да, тот самый Pascal, на который все плюются, но который тем не менее гораздо ближе к современным индустриальным системам (Java), чем С.
Единственная проблема в том, что на этих языках можно освоить алгоритмы, но не "жизненные" примеры.
Поэтому Python. Не сильно сложнее того же С, не так уж много заведомо плохих практик, кроме того он есть везде человек может достаточно просто перейти в "настоящее" программирование.
Но тут есть одна ловушка. Как я уже писал, Python - это идеальный вариант для не-программистов. То есть тех, кто пишет очень маленькие программы - тонкие обертки над чужими библиотеками. Большая разработка на Python - это тяжко.
И на Python сложно почувствовать архитектурные решения. Там все на уровне конструктора - воткнул одно в другое и оно поехало. Поэтому, разумеется, программистам надо кроме Python осваивать еще как минимум один язык.
Ну мою рекомендацию вы, вероятно, угадаете. Начинается на К. Потому что современный язык, готовый для "промышленного" применения и тем не менее включающий все "учебные" концепции и достаточно требовательный, чтобы там сложно было "сделать бяку". Все можно, но сложнее.
Разумеется, есть все еще некоторые сложности с внедрением и с обучающими материалами. Но прогресс за последние два года просто огромный. Я не думаю, что это было в замыслах авторов, но внезапно Kotlin оказалось очень просто преподавать и учить.
А последние нововведения - kotlin-jupyter-kernel и возможность писать код прямо в вебе с полной визуализацией добавили то, чего так сильно не хватало в Java экосистеме - простоты вхождения.
Тред (Александр Нозик)
Чтобы завершить надоевшую дискуссию про Kotlin vs Java, вот обещал пример, который недавно на лекции (не по котлин) давал: datalore.jetbrains.com/view/notebook/…. Коментов нет к сожалению, но может так разберетесь.
Пока меня тут джависты в конец не съели (хотя я и сам в большой степени джавист). Еще один небольшой тред. Про computer science.
Дело в том, что широко бытует у подрастающего поколения заблуждение о том, что программирование - это то же самое, что и computer science.
На самом деле нет. Computer science еще дальше от прикладного программирования, чем физика. Computer science - это в большой степени изучение теории алгоритмов решаемости отдельных задач и вопросы асимптотической сложности.
Это абстрактная математика. Для меня в свое время было большим открытием, что на конференции по computer science люди вообще не в курсе каких-то широко распространенных промышленных технологий или даже соответствующей терминологии.
К сожалению, до недавнего времени разделения образования на собственно программирование и Computer Science не было и набирали математиков и пытались делать из них программистов. Или наоборот набирали программистов и мучили их математикой.
К счастью, в последнее время появился термин Software Engineering. Который сразу предполагает, что инженерная дисциплина, которая в большей степени требует практического опыта и в меньшей (или совсем ни в какой) научных знаний.
Это разделение пока еще не полностью устоялось, но виден хороший прогресс в этом направлении.
Что не может не радовать.
Тред (Александр Нозик)
Кстати, про JVM. Мой публичный уважамс команде @graalvm . Оно реально круто работает. И я не про пресловутый native image, а именно про JIT. На математике прям очень заметный прирост. Гораздо меньше думать про оптимизации надо.
Воскресенье
Итак, последний день. Как и обещал, провокационный #треддня, чтобы вам еще на неделю хватило обсуждать. Исключительно мое мнение, не претендующее на истину (которой где-то там нет).
Девочки - это важно. Однозначно.
Чтобы не уходить в совсем уж холиварные темы, поговорю о своем индивидуальном опыте (12 лет женат... или 13?; 5 лет дочери). И об опыте как руководителе (у нас сейчас по разным подсчетам от 20 до 30 человек в лабе).
Для начала индивидуально. Видимо биология так устроена, что у каждого человеческого характера есть сильные и слабые стороны. Я к примеру очень плохо справляюсь с кропотливой монотонной работой. Еще у меня бюрофобия и я не очень люблю общаться с людьми (сюрприз).
Моя замечательная жена, замечательна в том числе тем, что она умеет и любит те вещи, которые я не умею и не люблю. И она может мне помочь в тех вопросах, которые для меня сложны. В этом один из основных смыслов брака.
Тут кстати есть большая ошибка многих людей, которые начинают задумываться о том, чтобы завести семью. Они ищут людей, у которых были бы те же интересы и те же сильные стороны.
Проблема в том, что идеальный партнер - это тот/та, кто имеет тот же набор ценностей (это важно!), но зачастую диаметрально противоположный характер.
А это значит, что вероятность того, что он/она работает на той же работе и в той же должности довольно маленькая.
Дети - это тоже естественная биологическая потребность. Они требуют много времени и внимания, но кто-нибудь когда-нибудь сравнивал вероятность выгорания у программёров с детьми и без? Я думаю, что результат будет поучительным.
Дети - это такой универсальный психологический громоотвод. Они периодически бесят, но совершенно точно защищают от эмоционального опустошения и всяких других перекосов.
Теперь про женщин в коллективе. Вот это, товарищи, очень полезно. Вы можете думать что угодно про их способности (лично я думаю, что у женщин способности уж точно не хуже, но они склонны немного к другому типу работы в среднем), но они повышают общую продуктивность.
Само наличие женщин в мужском коллективе (я подозреваю, что это работает и наоборот) повышает общую работоспособность и настроение. Мальчики ведут себя приличнее и организованнее. Это как минимум.
Не говоря о том, что есть разные работы, с которыми девочки в среднем справляются лучше. Обычно это что-то связанное с выносливостью (не столько физической, сколько психологической).
В общем, я с очень радуюсь, когда удается заполучить в лабу новую сотрудницу.
Есть тут правда одна загвоздка. Желающих мало. Возможно так опять же работает биология, а возможно мне просто так везло, но женщины в среднем куда более прагматичны.
Это означает, что они готовы искать может менее интересную, но более стабильную работу. И удержать их на интересе очень сложно. Это требует некоторых дополнительных усилий.
Ну и плюс девушки имеют тенденцию выходить замуж и куда-то сваливать.
Что это значит? Ну значит нужно работать лучше и создавать лучшие условия, потому что по моему опыту, плюсы перевешивают неудобства.
Вполне возможно, что "хорошие" условия для женщин не совсем то же самое, что "хорошие" условия для мужчин. Вероятно надо больше делать упор на стабильность и гарантии, чем на пиковую прибыль и интерес.
Ну и надо учитывать семьи, то есть делать режим работы таким, чтобы можно было совмещать работу с уходом за ребенком. С вводом дистантных режимов, это должно стать довольно удобным.
Я не сомневаюсь, что тут будут шовинисты, которые будут думать или говорить, что они справляются с работой лучше женщин. Я не буду это обсуждать. Я делаю утверждения исключительно на основании опыта руководства и готов сравнивать с аналогичным опытом.
Тред (Александр Нозик)
Я все это к чему. Если вы тимлид, не надо упрощать реальность, заменяя индивидуальность человека его принадлежностью к какой-то социальной группе. Это сложно, это увеличивает неопределенность – но никто не говорил, что быть тимлидом весело и просто.
Если ты тимлид, то ты в любом случае должен строить свой тим на основе индивидуальных особенностей всех сотрудников, будь они хоть мальчики, хоть девочки, хоть рептилоиды.
Если тимлид делает выводы только на основе пола, то его надо гнать. twitter.com/igrekde/status…
Кстати я подозреваю, что в чисто женских коллективах проблема ровно та же, но в обратную сторону. Их надо разбавлять мальчиками для эффективности. Тут у меня никакого опыта нет правда. Чисто теория.
Кстати, замечание. Тимлид или продакт менеджер тоже не столько дает результат сам, сколько повышает эффективность в целом. Значит ли это, что они ущербные? twitter.com/l_randley/stat…
Шалость удалась!
Отличный вопрос! Сейчас будет тред. В народе бытует два в большой мере противоположных мнения: Научный код должен быть мега-быстрым и поэтому должен быть написан на низкоуровневом языке. Научный код должен быть на Пайтоне потому что ученые не умеют сложное. twitter.com/sewergun/statu…
Мы начали с того, что обсудили разные языки программирования для науки
twitter.com/itunderhood/st…
Это не плохо, это хорошо. Надо заботиться о семье и здоровье. Но ВДРУГ ТАМ БУДЕТ ЧТО-ТО ИНТЕРЕСНОЕ? А я это пропущу. Видимо специфика работы. Если ты точно знаешь, что интересного не будет, то подход другой.
Поговорили про то, зачем люди занимаются наукой и про work/life balance, а точнее про его отсутствие.
twitter.com/itunderhood/st…
#треддня Высшее образование - это важно. А может быть и нет.
Был большой тред про высшее образование и его важность или не важность (смотря для чего).
twitter.com/itunderhood/st…
#треддня Наука - это важно. А может быть и нет.
Был тред про роль науки в современном обществе и в саморазвитии.
twitter.com/itunderhood/st…
Без проблем. Сейчас будет. Метод научного тыка - это как раз то, что написано. Мы берем разные технологии и начинаем их тыкать. Но не просто так ткнул - заработало, а вопросами. Почему оно заработало так, а может ли оно работать лучше. А давайте сделаем прототип альтернативный. twitter.com/IvanKravchnko/…
Рассказ про то, что такое метод научного тыка.
twitter.com/itunderhood/st…
Сегодня #треддня немного пораньше, потому что надо ехать на физтех и там будет не до этого. Философия - это важно. Но не для всех, разумеется.
Обсуждение роли философии и прагматического к ней подхода в любой сложной деятельности.
twitter.com/itunderhood/st…
Частично кстати соглашаюсь с замечаниями по поводу моего слишком вольного отношения к терминологии.
Забабахаю все-таки на ночь глядя небольшой тредик. Мне тут на интервью очень хороший вопрос задали: какие технологии надо в первую очередь осваивать для научного программирования. Я как-то об этом даже не задумывался. А вопрос отличны. Подумал. Пишу приблизительный ответ.
Небольшой добавочный тред про то, какие навыки сейчас нужны для научного программирования.
twitter.com/itunderhood/st…
Все, доделал часть дел. Теперь #треддня. Как обещал про IT образование вообще и "первый язык" в частности.
Обсуждение "первого языка", вылившееся почему-то в Kotlin Vs Java
twitter.com/itunderhood/st…
Итак, последний день. Как и обещал, провокационный #треддня, чтобы вам еще на неделю хватило обсуждать. Исключительно мое мнение, не претендующее на истину (которой где-то там нет). Девочки - это важно. Однозначно.
Ну и напоследок провокация в виде обсуждения полезности наличия женщин в коллективе, которое естественно не обошлось без обвинений в сексизме (к которым сводится любое такое обсуждение не зависимо от позиций обсуждающих).
twitter.com/itunderhood/st…
Тем не менее, были полезные мысли.
Тред (Александр Нозик)
@itunderhood @MARY_CHERRY_PIE Я извиняюсь, а как мужчин вы "заманиваете"? Особенно семейных? Вопрос использования слова "заманивать" относительно работы оставим пока за кадром...
О, наконец хороший вопрос по теме.
Предлагаем возможность половинной занятости с возможностью совмещать с другой "денежной" работой. Заманка тут в виде интересных задач и возможностей личностного роста. К сожалению, баланс все равно 1:5 или еще хуже. twitter.com/ufollowbooks/s…
Давайте я еще раз в последний раз повторю мысль предельно четко (хотя все равно все поймут как хотят).
При прочих равных смешанный коллектив работает лучше, чем моно-гендерный. Это не значит, что кто-то там работает, а кто-то улучшает. Это сумма. При прочих равных.
@itunderhood А вот тут подтверждаю из собственного опыта. Мне нужна стабильность и норм зарплата. Потом поговорим про интересность. Истории типа 20к, зато НОУКА и мб гранты - ненене 😅 (20к - это реальная история. Не знаю, какие у вас зарплаты) Но такое и мальчиков не заманить, пожалуй :)
Да, стартовые примерно такие для студентов. Мальчики есть, которые идут. Девочки кстати тоже. Но мало. Хочу больше. twitter.com/Stahash/status…
#музыка
Так увлекся обсуждением, что забыл саму крутую мызыку.
Yes: Tales From Topographic Oceans.
Можно в ремиксе Стивена Уилсона.
Совсем не та музыка, которую можно слушать "под работу". Надо хороши звук, закрыть глаза и слушать. Все 80 минут.