Русский
Русский
English
Статистика
Реклама

Computer science

Перевод Как критиковать специалистов по Computer Science (как придумывать острые оскорбления)

01.04.2021 12:23:08 | Автор: admin


И как избежать неэффективных возражений.

В последних обменах опытом члены факультета тщетно пытались атаковать других специалистов по Computer Science, пренебрегая их работой. Откровенно говоря, я считаю, что результаты весьма неловкие вместо того, чтобы опустить противника вниз, многие из замечаний были смехотворно безобидны. Что-то должно было быть сделано, потому что посторонний человек, услышавший такую болтовню будет плохо думать о нашей кафедре: ни одна группа не может уважать другую, если ее члены не могут нанести сокрушительный удар в словесной перепалке.

Этот короткий очерк был сделан, чтобы помочь факультету делать замечания острее и помочь избежать малодушных мстителей. Он объясняет, как можно опустить CS исследования и показывает, где найти ахиллесову пяту в любом проекте, а также, чем можно уколоть исследователя.

Два основных типа исследований


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

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

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

Комплексная теория и простые Системы


Знайте традиции, из которых исследователь создаёт основу для меткого оскорбления.

Теоретики предпочитают мудрёность
Как и математиков, теоретиков в области Computer Science берет наибольшая гордость, когда они знают и используют самую современную математику, чтобы решить проблемы. Например, теоретики загораются при рассказе вам, что они обнаружили как неясная теорема из геометрии может быть использована в анализе компьютерного алгоритма. Теоретики сосредоточились на математическом анализе и асимптотике вычислений; они гордятся красотой уравнений и не беспокоиться о постоянных. Хотя они, как правило, и отмечают, что их результаты имеют отношение к реальным компьютерам, втайне они мечтают о впечатляющих математиках.

Экспериментаторы предпочитают простоту

Как и инженеры, исследователи систем гордятся тем, что смогли придумать простейшую систему, которая предлагает данный уровень функциональности. Например, исследователи системы загораются, рассказывая вам, что они построили систему, которая в два раза быстрее, в два раза меньше и более мощная, чем её предшественница. Экспериментаторы сосредотачиваются на производительности реальных компьютерных систем; они гордятся красотой своего кода и беспокоятся о постоянных. Хотя, они, как правило, и отмечают, что их результаты могут выходить за пределы реальных компьютеров, они тайно мечтают о регистрации патентов, которые относятся к сохранившемуся оборудованию.

Оскорбление


Знание того, что CS могут быть разделены на две основные группы очень помогает, когда кто-то начинает свою критику. Есть два основных правила: определить тип исследователя и придумать оскорбление для этого типа. Избегайте говорить что-либо, что невольно дополняет их. Если всё будет сделано правильно, оскорбление не только оглушает исследователя (который будет в шоке, узнав, что не все согласны с его или её основной системой ценностей), но также запугает других в аудитории.

Идентифицируем Тип


Определить тип исследователя, как правило, легко, и это не требует особой технической подготовки или реального мышления. Это может быть сделано с помощью сопоставления ключевых слов в соответствии со следующими списками.

Обнаруживаем Теорию

Вы можете смело сказать, что кто-то является теоретиком, если он употребляет одно или более из следующих ключевых слов и фраз в лекциях и технических беседах: теорема, лемма, доказательство, аксиомы, за полиномиальное время, логарифмическая, семантика, численное, сложность, недетерминированный или недетерминизм и на достаточно большом N. Они пишут много уравнений, хвастаются сбиванием дополнительного лог фактора, и часто заканчивают свою лекцию заглавной О с последующим математическим выражением в круглых скобках. Вы также можете легко узнать теоретика, потому что они всегда берутся что-то доказать, что может показаться довольно очевидным. (Я когда-то сидел час на лекции, где кто-то доказал, что после выполнения компьютером оператор присваивания, которые ставят целое 1 в переменную х, значение х было 1.)

Обнаруживаем Системы

Экспериментатор будет употреблять одно или более из следующих ключевых слов и фраз в лекциях и технических беседах: архитектура память процессор (иногда аббревиатурами CISC или RISC ), I/O или автобус, сеть, интерфейс, виртуальная, компилировать или компилятор, ОС или система, распространяется, программа или код и двоичный. Они говорят о строительстве программы и запуске полученной системы на реальных компьютерных системах. Они отсылают вас к компании и продукции, а также используют аббревиатуры либерально. Их лекции часто заканчиваются графиком или диаграммом, измеряемой производительность системы. Вы также можете узнать экспериментатора, потому что он описывает в мельчайших деталях, как они поставили эксперимент для измерения определенного значения, даже если измерение производится именно по ожидаемым результатам. (Я когда-то сидел час на лекции, где кто-то тщательно объяснил, как они использовали три компьютерные системы для измерения сетевого трафика, когда их цель была просто показать, что сеть не была причиной проблемы, которую они расследуют.)

Придумываем Оскорбления


Ключ к хорошему оскорблению лежит в нападении на то, что все исследователи считают самым дорогим и сделают все, чтобы избежать волнения. Таким образом, оскорбление теоретика должно сосредоточиться на провале сложной математики, например:

  • Несмотря на все уравнения, мне кажется, что ваша работа не требует какой-либо реальной математической изощренности. Разве я что-то упустил? (Это особенно хорошая уловка, если вы признаете, что это было легко, и вы понимаете весь разговор)
  • Не является ли это простым прямым расширением старого результата Хартманис? (Даже Хартманис не помнит всех доказанных теорем Хартманиса, но все остальные решат, что вы помните, то, что они забыли.)
  • Может я что-то упустил? Можете ли вы определить како-либо глубокое математическое содержание в этой работе? (Опять же, зрители, которые считают что разговор труднопонятным, не захотят в этом признаться.)

В отличие от этого, оскорбление экспериментаторов должно подразумевать, что методы были использованы в предыдущих системах, или что работа не является практичной, например:

  • Не делалосьли это несколько лет назад в Xerox PARC? (Никто не помнит, что было на самом деле сделано в PARC, но все решат, что вы помните, то, что они забыли.)
  • Вы проверили это на чипе, который Intel запустил на прошлой неделе в своей лаборатории? (Никто не знает, какой чип Intel получил для работы на прошлой неделе, но все решат, что вы знаете.)
  • Я что-то упустил? Разве не очевидно, что есть узкое место в системе, которое предотвращает масштабирование для произвольного размера? (Это безопасное изречение, потому что в каждой системе есть узкое место, что предотвращает произвольное масштабирование).

Как избежать ответного оскорбления в свой адрес


Неуместное оскорбление может иметь неприятные последствия, превращаясь в смущение для нападающего и в победу для предполагаемой жертвы. Чтобы избежать подобных случаев, помните следующее:

  • Никогда не пытайтесь атаковать теоретическую работу, которая не рассматривает констант как несвязаный с реальными компьютерными системами или как требующий слишком много сложной математики. (Предполагаемая жертва, скорее всего, улыбнется и скажет спасибо за лесть.)
  • Никогда не пытайтесь атаковать систему, которая слишком мала, слишком проста, или в котиорой не хватает сложной математики (Опять же, предполагаемая жертва, скорее всего, улыбнется и скажет спасибо за лесть.)
  • Никогда не пытайтесь атаковать системы, про которые говорят, что они работают так просто и очевидно, что вы могли бы сделать это и сами. (В течение многих лет люди говорили это о UNIX и протоколах TCP/IP). В самом деле, это всего лишь расширение уловки, которое используется детьми на детской площадке: О, да? Я мог бы сделать это если б захотел Не пытайтесь использовать это или кто-то скажет, что Вам нужно повзрослеть.

Атака на смешанную работу


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

  • Хочу отметить, что аспект системы этого проекта кажется довольно сложным. Как Вы думаете, причину запутанной реализации можно отнести к более или менее упрощенному математическому анализу, который вы использовали?

Тем не менее, умное оскорбление может избежать разговора о работе, предлагая зловещие причины для смены парадигмы:

  • Я заметил, что Вы сделали нечто необычное, сочетая теорию и практику. Вы решили испробовать второй подход, потому что получили недостаточные результаты от первого?
  • Вы, кажется, объединили в один проект немного теории и немного практики. Не правда ли, что если бы вы внесли достаточно большой вклад и в одну и в другую часть, то вы бы вели лекции о них по отдельности?

Заключительное Слово


Я, конечно, надеюсь, что факультет примет эту статью близко к сердцу и будет оттачивать свои навыки в оскорблениях. В будущем, пожалуйста, рассчитывайте все ваши нападки.

Подробнее..

Перевод Архитектор современных алгоритмов

05.04.2021 16:10:13 | Автор: admin

Барбара Лисков является пионером современного подхода к написанию кода. Она хочет предостеречь нас, что задачи, с которыми сегодня сталкиваются компьютерные науки, невозможно решить с помощью одного лишь продуманного дизайна.

Барбара Лисков изобрела архитектуру, лежащую в основе современных программ. Создание чего-либо достаточно мощного это искусство.

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

Но к концу 1960-х годов достижения в области вычислительной мощности превзошли возможности программистов. Многие специалисты по информатике создавали программы, не задумываясь о дизайне. Они писали длинные, бессвязные алгоритмы, пронизанные операторами goto машинными инструкциями для перехода к другой части программы, если выполняется определенное условие. Первые программисты полагались на эти операторы, чтобы исправлять непредвиденные последствия своего кода, но они делали программы трудными для чтения, непредсказуемыми и даже опасными. Плохое программное обеспечение в конечном итоге стоило людям жизни, например, когда радиационная установка Therac-25, управляемая компьютером, стала причиной серьезных передозировок радиацией у больных онкологией.

В те времена, когда Барбара Лисков получала докторскую степень по информатике в Стэнфордском университете в 1968 году, она завидовала инженерам-электрикам, потому что они работали с аппаратным обеспечением, соединенным проводами. Эта архитектура, естественно, позволяла им дробить задачи и разделять их на модули подход, который давал им больше контроля, поскольку позволял им независимо рассуждать о дискретных компонентах.

Как ученый-информатик, размышляющий о коде, Лисков не имела физических объектов, с которыми можно было бы работать. Как писатель или поэт, она смотрела на чистый лист.

Там предо мной были серьезные задачи. Все, что мне нужно было сделать, это без промедления начать решать их.

Барбара Лисков

Лисков, которая изучала математику на бакалавриате в Калифорнийском университете в Беркли, хотела подходить к программированию не как к технической задаче, а как к математической чему-то, где можно было бы руководствоваться логическими принципами и эстетической красотой. Она хотела организовать программное обеспечение так, чтобы она могла контролировать его и четко понимать его сложность.

Когда она была еще молодым профессором Массачусетского технологического института, она возглавляла команду, создавшую первый язык программирования, который не полагался на операторы goto. Язык CLU (сокращение от cluster) основывался на изобретенном ею подходе абстракции данных который организовывал код в модули. Все используемые сегодня важные языки программирования, включая Java, C++ и C#, являются потомками CLU.

Одним из преимуществ того, что я оказалась в этой области так рано, заключалось в том, что там передо мной были серьезные задачи. Все, что мне нужно было сделать, это без промедления начать решать их, говорит Лисков. В 2008 году Лисков получила премию Тьюринга часто называемую Нобелевской премией по информатике за вклад в практические и теоретические основы языка программирования и проектирования систем, особенно связанных с абстракцией данных, отказоустойчивостью и распределенными вычислениями.

Журнал Quanta встретился с Лисков в ее доме после Гейдельбергского форума лауреатов закрытого собрания (исключительно по приглашениям) ученых-информатиков и математиков, получивших самые престижные награды в своих областях. Лисков была приглашен в Гейдельберг, но ей пришлось отменить свое участие за несколько недель до форума по личным причинам. Интервью было сокращено и отредактировано в целях лучшего понимания.

Вы достигли профессионального совершеннолетия во время разработки искусственного интеллекта. Как изменилось представление об искусственном интеллекте и машинном обучении за время вашей карьеры?

Я защитила докторскую диссертацию с Джоном Маккарти в области искусственного интеллекта. Я написала программу для разыгрывания шахматных эндшпилей. Эту тему предложил Джон, потому что я не играла в шахматы. Я прочитала [шахматные] учебники и перевела эти алгоритмы в поле информатики. В то время, вершиной научной мысли было сделать так, чтобы программа вела себя так, как поступал бы человек. Сейчас уже дела обстоят иначе.

Сегодня программы на основе машинного обучения в большинстве случаев неплохо справляются со своими задачами, но все же не всегда. Люди не понимают, почему они работают или не работают. Если я работаю над проблемой и мне нужно точно понять, почему работает алгоритм, я не буду применять машинное обучение. С другой стороны, один из моих коллег анализирует маммограммы с помощью машинного обучения и находит доказательства того, что рак можно обнаружить намного раньше.

Искусственный интеллект это скорее прикладная, нежели обособленная дисциплина. Его всегда использовали для чего-то конкретного.

Вас он больше интересовал как отдельная дисциплина?

Честно говоря, в то время искусственный интеллект мало на что был способен. Меня интересовали основополагающие задачи. Вопрос как организовать программное обеспечение? был для меня действительно интересен. В процессе проектирования вы сталкиваетесь с необходимостью выяснить, как вам следует реализовать приложение. Вам нужно организовать код, разбив его на части. В этом помогает абстракция данных. Это очень похоже на доказательство теоремы. Невозможно доказать теорему одним махом. Вместо этого вы придумываете несколько лемм и дробите задачу.

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

Первые компьютеры использовали перфокарты для ввода как программ, так и данных.

Знание методологии не гарантирует, что вы умеете хорошо проектировать. Некоторые люди умеют проектировать, а некоторые нет. Я никогда не чувствовала, что могу научить своих учеников проектированию. Я могла показать им дизайн, объяснить его, поговорить об абстракции данных и рассказать им, что хорошо, а что плохо. Слишком много наворотов все усложняется. Слишком мало работает неэффективно. Создание чего-то достаточно мощного это искусство.

Если бы у вас была волшебная палочка, и вы могли бы направить развитие информатики вперед, как бы это выглядело?

Я очень переживаю за интернет. У нас целая куча проблем, включая фейковые новости и проблемы с безопасностью. Меня беспокоит разведенная пара, в которой муж публикует клевету на жену, в том числе информацию о том, где она живет. Происходят ужасные вещи. Частично это выросло из настроений 80-х. В то время у нас было 15 университетов и пара государственных лабораторий, соединенных интернетом. Мы все были друзьями. Позиция заключалась в том, что сайты не должны нести ответственности за контент. Это задушит их развитие. Вы можете наблюдать, что такое отношение пока сохраняется.

Было ли такое мышление следствием академической свободы?

Нет, это был чистый прагматизм, без понимания того, чем мы закончим. Если бы они взяли на себя модерирование, им пришлось бы решать сложные задачи. Они пошли на это без добавления защитных мер. Для решения наших текущих проблем нужны не только технологии. Нам нужны законы, регулирующие ненадлежащее поведение людей. Нам нужно решить вопросы о конфиденциальности и безопасности. Некоторые из них технические. Например, у Facebook есть алгоритм распространения информации. Они могут распространять информацию медленнее или распознавать, какая информация не должна распространяться. Обществу всегда трудно иметь дело с чем-то новым. Мы можем лишь надеяться, что повзрослеем. Но если бы у меня была волшебная палочка, я бы решила именно эти проблемы.

Видео: Барбара Лисков говорит о вызовах, с которыми сталкиваются компьютерные науки.

Расскажите мне о своем личном опыте в качестве женщины в информатике.

Меня поощряли хорошо учиться в школе. Не знаю, подбадривала ли меня мама, но она точно не мешала мне и не говорила: О нет, это плохая идея. Я прошла все курсы математики и естествознания, к чему девочек не поощряли. В Беркли я была одной из двух женщин (или даже единственной) в классе из 100 человек. Никто никогда не говорил: Вот это да, дела у тебя идут хорошо, почему бы тебе не поработать со мной? Я не знал, что такое вообще может происходить. Я поступила в аспирантуру Стэнфорда. Когда я закончила учебу, со мной никто не разговаривал о работе. Я заметил, что коллег-мужчин, таких как Радж Редди, который был моим другом, брали на академические должности. Мне такую работу никто не предлагал.

В то время научные руководители трудоустраивали выпускников по контрактам с ведомствами по всей стране.

Да, но мне никто ничего не предлагал. В 90-х я вернулась в Стэнфорд на день факультета. Группа старых профессоров, не осознавая, что они делают, рассуждали о подобном кумовстве (old boy network). Они говорили: О, мой друг сказал мне, что у меня есть хороший молодой парень, которого ты должен нанять. Так обстояли дела. Они не понимали, что тут не так. Они говорили о молодой женщине, которая так преуспела, потому что вышла замуж за профессора! Разве это правильно? У другого коллеги в офисе была пинап-фотография кинозвезды. Я спросил его: Что это за пинап-фотография в твоем офисе? Никакого вразумительного ответа.

Я подала заявление в Массачусетский технологический институт, но меня даже не рассматривали на должность преподавателя. Когда такое происходит, вы думаете: Я недостаточно хороша. Вы ничего не можете с этим поделать. Но также я думала: Информатика - открытая наука. Моя промышленная работа в Mitre была хорошей исследовательской работой. Там я работала над методологией программирования и проводила исследования, которые принесли мне мою первую премию. Затем в 1971 году я выступила с докладом, после которого Корби [Фернандо Корбато] пригласил меня в Массачусетский технологический институт. Меня также пригласили в Беркли. Ситуация менялась.

Тем не менее, правда ли, что когда вы начали работать в Массачусетском технологическом институте, было около 1000 преподавателей, из которых только 10 были женщинами?

Насколько я помню.

Так что прогресс был, но

Раздел IX еще не был законом, но давление нарастало. Президент Массачусетского технологического института Джерри Визнер был источником давления. Давление должно идти сверху. Оно не пузырится снизу. В Массачусетском технологическом институте было несколько выдающихся женщин, которых не было в составе факультета. Примерно тогда нескольких из них неожиданно пригласили войти в состав факультета. Конечно, в математике их никогда не было. В математике с этим дела обстоят очень плохо.

В 2018 году Лисков была награждена премией Computer Pioneer Award в знак признания ее достижений.

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

За 10 лет до того, как я возглавила факультет информатики в Массачусетском технологическом институте, департамент нашел только одну женщину достойной предложения работы. Когда я была руководителем [с 2001 по 2004 год], я наняла семь женщин. По сусекам скрести не приходилось. Все три молодые женщины, которых я наняла выдающиеся. Долгое время женщины вообще не рассматривались.

После того, как вы выиграли премию Тьюринга, в сети появился комментарий: Почему она получила эту награду? Она не сделала ничего, о чем мы еще не знали. Мог ли этот пренебрежительный комментарий иметь отношение к тому факту, что вы женщина.

Бьюсь об заклад, что да! Был еще один комментарий о котором я никогда не рассказываю в котором говорилось: О, это не она проделал эту работу. [Коллега-мужчина] сделал это вместо нее. Это полная чушь. Я не смотрела комментарии. Мой муж смотрел. Это была пара, о которых он мне поведал. Иногда я выступаю с докладами, на которых мне задают враждебные вопросы (и к этому нужно быть готовым), будь то из-за того, что я женщина, или потому, что люди пытаются сконфузить меня, понимаете

Сконфузить лауреата премии Тьюринга?

Ага! Тогда я не понимала, что некоторые люди в моем отделе поддерживают меня. И к тому времени, когда я начала путешествовать, я была уже хорошо известна. Но вот в чем загадка: почему некоторые женщины способны стойко, упорно продолжать двигаться вперед?

Есть ли у вас какие-нибудь советы для начинающих женщин-ученых? Есть ли какой-нибудь тефлон, который женщины могут применять для предотвращения прилипания дискриминации или домогательств?

Было бы неплохо узнать, как применять этот тефлон. Только проработав достаточное количество времени в Массачусетском технологическом институте, я разрушила в себе блок задавать вопросы публично. Потребовалось много времени, чтобы развить эту уверенность в себе

Это достаточно деликатно. В вашей истории обнаруживается скрытый подтекст: не высовывайся, пока не сможешь по-настоящему стоять прямо, а затем всецело отдайся этому.

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

Это уже конкретный совет: откажитесь от потребности угождать.

Вы знаете, сейчас дела обстоят не лучше, чем тогда. Может мне повезло. Если бы я вышла замуж сразу после колледжа, я бы, наверное, попала в совершенно другое место.

Вы действительно так думаете? Ваш вклад изменил компьютерные технологии и общество.

Вы знаете, вы просто идете по этому извилистому пути, и кто знает, что будет?


Узнать подробнее о курсе Архитектура и шаблоны проектирования.

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

Подробнее..

Из песочницы Как НЕ надо начинать изучать программирование

12.09.2020 16:16:00 | Автор: admin
Приветствую, Хабровцы!

Решил поделиться своим опытом успешного изучения языка(ов) программирования.

Не сказать, что в IT-индустрии я полный профан, однако мой план обучения стать IT developer-ом с треском пошел по швам.

Немного предыстории.

Сразу скажу, что целенаправленного обучения по компьютерным наукам я не проходил. Да и специализация в образовании у меня далеко не техническая. Работал с 2005г. по 2012г. в различных компаниях, и мелких и крупных, непосредственно связанных с IT-индустрией. Научился всему понемногу: сис. администрированию Windows (даже MCP, MCSA успел получить), немного поюзал VMware (VCP тоже в копилке), дополнительно изучил разную кучу программ, которые сис. админы как правило используют в своей ежедневной работе.
Попробовал себя в корпоративных продажах, кстати, неплохо получалось. Успел поработать немного и у дистрибьютора ПО, а также в компаниях-интеграторах, неплохо разобрался в политиках лицензирования ПО. Планировал стать Project manager-ом, даже начал изучать PMBOK, тайм-менеджмент, различные международные стандарты, типа ISO, Tier, и даже замахнулся на PCI DSS.

Но в определенный момент перегорел, и все бросил. Ушел так сказать в отпуск на 8 лет.
После долгого анализа, все-таки созрел и осознал, что пора валить на запад, и желательно поближе к кремниевой долине, т.к. с английским более менее нормально, можно подтянуться до необходимого уровня.

Ежу понятно что меня там никто не ждет, а сис. админов, продажников и project менеджеров там и своих хватает. Тем более без знания ситуации на локальном рынке, сразу работу найти будет, ну как минимум проблематично.

В голове был выбран путь, что все-таки пора переквалифицироваться в разработчика. Так будет легче и лучше в плане перспектив и работы на западном рынке. Программистов на рынке труда всегда не хватало, да и не хватает до сих пор.

Тем более, как-то давно я хотел обучиться программированию и специализироваться по SAP направлению. Был выбран путь самостоятельного изучения основ, языка ABAP, но как-то забросил это дело. Не помню уже по какой причине, кажется из-за сложности в понимании.

Теперь сама история, поехали

Так вот, спустя 8 лет отдыха от IT в целом, принялся изучать заокеанский рынок труда и решил для начала специализироваться в мобильной разработке. Погуглив языки программирования для мобильных приложений и вдохновившись, что Google официально анонсировала язык Kotlin как приоритетный язык для android-приложении, твердо решил максимум за 1 год самостоятельно выучить Kotlin и строить планы по иммиграции на ПМЖ в США.

Пару недель просмотра тренингов и чтения мануалов мне хватило, чтобы убедиться, что без знаний Java в Kotlin делать нечего. Хотя на просторах интернета многие твердят что можно выучить с нуля. А после регистрации на GitHub-е, установки IntelliJ IDEA, JDK и попытки разобраться в коде я уже начал осознавать что придется учиться очень долго и упорно.
Было принято решение отложить Kotlin пока что в сторону, и углубиться в язык java. Так и сделал. Эх, помнится в мое время java был еще SUN-овским детищем.

Быстро переключился на Java без сожаления, т.к. и мануалов больше для самостоятельного изучения и вакансии для Java-разработчиков намного больше. Правда не определился с чего стартануть будет лучше, с Java либо JS, ну да ладно, думал походу разберусь. На форумах где-то читал, что с JS войти в мир разработки намного легче и быстрее
.
Приступил к изучению Java стандартно, прочитав гору статей и просмотрев кучу видео Как стать Java программистом. Скачал книгу Брюса Эккеля Философия Java, по рекомендациям многих на форумах, как самый правильный старт изучения языка новичкам.

Так вот скажу вам честно, она ни сколько не для новичков.

Пробовал не обращать на это внимания и читать дальше, усвояемость около 20-25%, понял что так дело не пойдет. Придется разбираться и в С языке, да еще и в книге регулярно черным по белому пишут, что материал рассчитан на читателей со знанием основ С языка.

Что-ж, выбора нет. Опять читаю кучу информации, сотни просмотров видео разной тематики о языке С. Качаю книгу Кернигана и Ричи Язык С, приступаю к изучению, усвояемость уже получше чем в Java, так сказать около 50-60%, что вовсе не радует меня.

Успокаивало одно, что истинные разработчики все начинали с языка С, а также то, что после изучения С, другие языки, в частности Java, будут пониматься в разы быстрее и доступнее.

Однако такие заголовки в книге как:
Настоящая книга не является вводным курсом в программирование; она предполагает определенное знакомство с основными понятиями программирования такими как переменные, операторы присваивания, циклы, функции
или:
предполагается рабочее владение основными элементами программирования; здесь не объясняется, что такое ЭВМ или компилятор, не поясняется смысл выражений типа N=N+1
а также такие фразы как:
Символические константы.
и т.д.
постепенно подводили меня к тому, что без изучения Computer Science мне не обойтись.
Параллельно начинаю вникать в Computer Sciense, качаю опять-таки тонны книг. Регистрируюсь на Гарвардский курс CS50, приступаю к изучению основ программирования, внимательно читаю книгу Владстона Феррейра Фило Теоретический минимум по Computer Science.

Замечаю, что обучение языку С переходит на второй план, все больше времени уделяется уже основам программирования.

И если в двоичном коде, переменных, функциях, циклах, компиляторе, интерпретаторе, простых уравнениях и т.д. я еще более менее разобрался, то выражение типа N=N+1 и более сложные уравнения меня загоняли в легкий ступор.

Я долго вникал почему 0 в степени 0 равен 1, и у меня ощущение что я до конца так и не понял всей сути.

А вот эта задача меня вообще заставила остановиться на чтении книги по CS, т.к. чем дальше читал, тем сложнее уже шли уравнения и задачи:



Пришлось гуглить про квадратные уравнения, как написано в книге и вникать в дискриминанты. Ну забыл, подумал я, алгебру, с кем не бывает. Однако я так и не смог решить самостоятельно задачу, пришлось обращаться за помощью к преподавателю ребенка по математике.

Решение то получил, однако понять, как преподаватель решила не смог:





На мой вопрос: как решаются такие уравнения?, ответ был очень прост:
учи исследование функции, начало анализа и задачи на оптимизацию. Алгебра 10-11 класс.
Ну думаю, ок, посмотрю пару видео-примеров для школьников в youtube, пойму как решать их, и дальше буду глокать изучение по CS.

И вот после просмотра подобных роликов по алгебре меня осенило

www.youtube.com/watch?v=RbX_QHxu7Lg
www.youtube.com/watch?v=FVSG7Neopuo

Я не то что не помню, как решаются такие задачи, элементарно, как выяснилось, попросту не знаю Алгебру за 10-11 класс!

Такие выражения как: пределы, математическое мышление, экстремум, производные, многочлены и т.д. для меня оказались как речь на языке племени Майя.

Наверное, мои познания математики остались на уровне уроков математики 5-6 классов.

Начинаю осознавать, что для полной картины понимания Computer Science, мне необходимо будет заново учить алгебру, а затем и ВысшМат. Не исключаю, что походу скорее всего, появится необходимость и повторения уроков физики и еще чего-то из школьной программы. И до реального изучения Java и JS мне понадобится лет 5 изучения алгебры и высшей математики.
До Марса и обратно быстрее долететь, всего то 1,5 года, как утверждают ученные

И вот тут-то мне стало уже совсем как-то грустно.

Неужели чтобы стать программистом без технической базы, требуется так много времени?
Меня конечно вдохновляют статьи в интернете, где люди пишут, что за 1,5 года стали Java developer-ом и уехали в Германию, Канаду, США, однако оценивая свои печальный опыт я не уверен что такое возможно.

Или все-таки это не моё? И профессия разработчик это каста особенных людей?

Я знаю, что есть люди, освоившие программирование без получения высшего образования в компьютерных науках. Таких немало.

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

Сомневаюсь что я один столкнулся с подобной проблемой. Даже можно сказать уверен, что таких как я, очень много

Заранее благодарю!
Подробнее..

Как получилось, что 0,1 0,2 0,30000000000000004?

10.02.2021 16:11:31 | Автор: admin

С детства нас учили, что 0,1 + 0,2 равно 0,3. Однако в загадочном мире вычислений все работает по-другому. Недавно я начал писать код на JavaScript и, читая о типах данных, заметил странное поведение 0,1 + 0,2, не равного 0,3. Я обратился за помощью к Stack Overflow и нашел пару сообщений, которые помогли. Посмотрите ниже:

Проведя много исследований и вычислений, я пришел к выводу, что это не ошибка. Это математика: арифметика с плавающей запятой. Давайте копнем глубже, чтобы понять, что происходит за кулисами.

Постановка задачи: как получилось, что 0,1 + 0,2 = 0,30000000000000004?

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

Целочисленные типы данных хранят целые числа, а типы данных с плавающей запятой хранят дробные числа.

Прежде чем продолжить, давайте разберемся с одной маленькой концепцией: как числа представлены в вычислительных целях? Очень маленькие и очень большие числа обычно хранятся в экспоненциальном представлении. Они представлены как:

Кроме того, число нормализуется, если оно записано в экспоненциальном представлении с одной ненулевой десятичной цифрой перед десятичной точкой. Например, число 0,0005606 в экспоненциальном представлении и нормализованное будет представлено как:

Significant- это количество значащих цифр, которые не включают нулей, а основание представляет собой используемую базовую систему, которая здесь десятичная (10). Экспонента представляет собой количество мест, на которое необходимо переместить точку счисления влево или вправо для правильного представления.

Теперь есть два способа отображения чисел в арифметике с плавающей запятой: одинарная точность и двойная точность. Одинарная точность использует 32 бита, а двойная точность использует 64 бита для арифметики с плавающей запятой.

В отличие от многих других языков программирования, JavaScript не определяет различные типы числовых типов данных и всегда хранит числа как числа с плавающей запятой двойной точности в соответствии с международным стандартом IEEE 754.

В этом формате числа хранятся в 64 битах, где число (дробь) хранится в битах от 0 до 51, показатель степени - в битах с 52 по 62, а знак - в битах 63.

Давайте представим 0,1 в 64-битном формате в соответствии со стандартом IEEE754.

Первым шагом является преобразование (0,1) основания 10 в его двоичный эквивалент (основание 2).

Для этого мы начнем с умножения 0,1 на 2 и отделим цифру перед десятичной дробью, чтобы получить двоичный эквивалент.

Повторив это для 64 бит, мы собираемся расположить их в порядке возрастания, чтобы получить мантиссу, которую мы собираемся округлить до 52 бит в соответствии со стандартом двойной точности.

Представляя его в научной форме и округляя до первых 52 бит, получим:

Часть мантиссы готова. Теперь для показателя степени мы будем использовать следующий расчет:

Здесь 11 представляет количество битов, которые мы собираемся использовать для 64-битного представления показателя степени, а -4 представляет показатель степени из научной записи.

Окончательное представление числа 0,1:

Точно так же 0.2 будет представлено как:

Добавление двух после того, как экспоненты будут одинаковыми для обоих, даст нам:

В представлении с плавающей запятой это становится:

Это представлено как 0,1 + 0,2.

Это и есть причина получения 0,1 + 0,2 = 0,30000000000000004.

Подробнее..
Категории: Javascript , Python , Net , Java , Computer science

Core Dump видео канал о компьютерной науке

17.09.2020 20:15:16 | Автор: admin


Здравствуйте, меня зовут Дмитрий Карловский и я иногда выступаю на конференциях, митапах и даже сам являюсь организатором одного из них (PiterJS). Короче побывал с разных сторон баррикад. Как правило, такие мероприятия фокусируются вокруг какой-то узкой технологии, языка или даже фреймворка.


Однако, с годами понимаешь, что технологии приходят и уходят, да и сам ты не будешь сидеть на одном фреймворке вечно. Поэтому в долгой перспективе куда важнее фундаментальные знания, систематизация и свежие универсальные идеи. Всё это можно объединить под зонтичным названием "компьютерная наука", которая полезна любому программисту независимо от расы вашего кода, платформоисповедания и языкового гендера.


Поэтому родилась идея создать видео канал и собрать на нём всё о программировании в общем, что не устареет через год после пересадки на новый хайп-трейн, что будет как полезно профессионалу, так и доступно даже новичку. Почему именно канал и какого рода материалы там будут я сейчас и расскажу, но сперва немного анализа..


Конференция


Мне нравятся доклады с конференций качеством подачи материала. Это не просто статья, использующая лишь визуальный канал передачи информации. И уж тем более не усыпляющая лекция с еле разбираемыми на доске каракулями. Хорошее выступление это крайне сжатая подача материала, использующая как визуальный, так и аудиальный, и эмоциональный каналы для достижения синергетического эффекта в деле передачи сложных идей широкой аудитории.


Но цена этому довольно высока тратится много времени на подготовку. Пяток-другой прогонов доклада с разными людьми нормальная ситуация. Это позволяет докладчику существенно улучшить как содержательную часть, так и подачу. Даже если он и так уже мастер выступлений.


Организация конференций это всё же бизнес. Хотя мы и проводили в прошлом году бесплатную конференцию (PiterJS Conf), но это редкий случай. Обычно ценники довольно кусачие.


Доклады основной гвоздь программы. Но время программы ограничено. Так что далеко не все, кто мог бы что-то интересное рассказать, сможет это сделать. А отбор докладов идёт через призму привлечения аудитории:


  • Известный человек, рассказывающий банальности, даст больше покупок билетов, чем ноунейм с оригинальными идеями.
  • Представитель известной компании расскажет больше "реального опыта", чем безработный сам себе стартапер.
  • Хайповая технология вызовет больше интереса, чем никому не нужный велосипед.

Обычный докладчик со своего выступления не получает ничего, кроме селф-брендинга и возможности бесплатно побывать на конференции, конечно. И то, если пробьётся. А если нет зачастую ничего кроме сухого "вы пролетели", без каких-либо подсказок, что не так, и что можно было бы улучшить, чтобы выдержать конкуренцию. Неинтересная тема? Банальное содержание? Опоздал к раздаче мест в программе? Фейсом не вышел? Сиди, гадай.


Для человека же, который достаточно "в теме", чтобы пробиться в докладчики, другие выступления уже не так интересны. Слушать доклады в духе "я почитал документацию и сейчас я вам её перескажу", "мы разработали штуку, которая вам не нужна, но я сейчас вам её продам" или "я придумал костыль к проблеме, который её толком не решает, но вы всё равно послушайте" настолько скучно, что большую часть времени тупо нетворкаешься у стендов, выигрывая очередную футболку, которую никогда не наденешь, чтобы не выглядеть как ходячий рекламный плакат у метро.


Новизна, фундаментальность и систематичность то чего по настоящему не хватает многим докладам. Другая беда формат. Типичный таймслот 40 минут. Кому-то мало что есть сказать и он льёт воды. Но это решается короткими докладами в половину/треть обычного тайм-слота.


Куда хуже, когда человеку много чего хочется рассказать, но приходится резать на живую. А учитывая, что конференции проходят не чаще, чем раз в пол года, да и пробиться на них не просто, то разбиение на части не вариант. Доходит до маразма после вырезания всего "лишнего" мяса остаётся лишь одна короткая простая мысль, которая тщательно обжёвывается 40 минут.


Лично мне куда интересней слушать выступления, где максимизирована концентрация новых идей в минуту. Где речь короткая, лаконичная и не использующая манипулятивные техники для убеждения слушателя. Даже если я что-то прослушаю или не пойму потом можно будет посмотреть видео запись более вдумчиво или уточнить детали у спикера, пока тот не убежал. Но это всяко лучше, чем понять "основную мысль доклада" на середине выступления и сидеть, скучать, пока докладчик доприменит на тебе все "техники хорошего выступления".


Конференции, конечно, не только про доклады, но и про "отдохнуть от компа и потусить в кругу единомышленников". Однако, и это потерялось с переходом в онлайн. Тут нет никакого резона смотреть доклады в реальном времени, как-то ограничивать тайм-слоты, и пр. Сиюминутность конференций слабо подходит к фундаментальности "компьютерной науки".


Я знаю лишь одну конфу на близкую тему (Strange Loop Conf), да и та англоязычная. Хотя, нашим аналогом может стать TechLeadConf, если будет больше хардкора. Моё последнее выступление (Фрактальное тестирование) как раз было там. И оно, к сожалению, как раз иллюстрирует случай с разжёвыванием одной единственной идеи, что хорошо видно по отзывам в конце. Можете глянуть там в соседних файлах, сколько всего хотелось рассказать, но по разным причинам пришлось удалить.


Организация конференции большая и ответственная работа множества людей. Поэтому приходится балансировать между доступностью и хардкорностью. И тут можно заходить с разных концов: либо простые доклады разбавлять щепоткой хардкора, либо хардкорные прорабатывать до максимально возможной доступности. Мне больше нравится второй вариант. Но для конференции это рисковый путь, ибо сильно ограничит аудиторию.


Митап


Митапы обычно бесплатны и рассчитаны на небольшую аудиторию. Из-за этого они куда более фрагментированы, но и порог входа в них минимален. Собственно, выступить на митапе может любой было бы желание. Тут другая проблема найти этих желающих. Кстати, пишите, если хотите выступить с докладом или провести воркшоп на PiterJS даже если сами не из Питера. Ну или можете глянуть записи прошлых митапов. Но что-то я отвлёкся..


Мало кто готов сильно заморачиваться с подготовкой для доклада на малую аудиторию. К тому же митапы в ещё меньшей степени про доклады и в большей про общение. Хотя порой и скатываются в "пришли, послушали, поели пиццы и разбежались".


С другой стороны, простота формата позволяет проводить их чаще. Мы, например, уже 5 лет проводим их каждый месяц без перерывов. Но и какой-то особой глубины, конечно, ожидать не стоит. Тут формат уже становится заложником своей регулярности, для поддержания которой приходится снижать планку, что снижает ожидания аудитории, что снижает её интерес, что снижает желанность быть докладчиком, и так далее по кругу до достижения равновесия.


Короче, формат митапов тоже не очень подходит для максимизации качества. Но можно сформулировать, что для этого нужно:


  1. Отсутствие регулярности и ограничений по времени подготовки выступление готово, когда готово.
  2. Отсутствие тайм-слотов разным идеям нужно разное время для передачи, так что лучше подвинуть расписание, чем жертвовать качеством выступления.
  3. Задранная планка качества не отсекать слабые в подаче выступления, но делать их достаточно сильными.

Что ж, вот мы и подошли к идее Core Dump...


Видео канал


С видео на ютубе несколько больше свободы, так как нет жёстких таймингов. Материал можно готовить неограниченно долго, публиковать когда угодно, а длиться оно может сколько потребуется. Кроме того, формат видео открывает много возможностей пост-продакшена: монтаж, спецэффекты, анимации и тп. Это довольно неблагодарная работа, требующая уйму времени с минимальной отдачей.


Даже если найдётся человек, которому интересно всем таким заниматься за спасибо, это всё равно лишнее растягивание и без того длинного пайплайна. Поэтому, на мой взгляд, достаточно обеспечить минимально приемлемый уровень продакшена, не формируя у аудитории завышенных ожиданий.


Давайте сформулируем манифест нашего канала:


  1. Человеческое отношение к людям.
  2. Выступления по подаче уровня конференции и выше.
  3. Никаких ограничений ни по времени выпуска, ни по времени выступления.
  4. Минимальные накладные расходы на продакшен. Включаем камеру, открываем слайды, записываем и всё, никакого монтажа, анимаций и прочего. Главное контент.
  5. В каждом выступлении должна быть минимум одна оригинальная идея.
  6. Говорить нужно кратно и по делу, не растекаясь мыслью по дереву. Не должно быть желания промотать какие-то части.
  7. Никаких долгих вводных. Важно что ты говоришь, точность мысли, последовательность выводов, а не кто ты такой, откуда и прочие регалии.
  8. Никакой жёсткой привязки к конкретной платформе/языку/фреймворку. Идеи должны быть переносимыми и не устаревающими.
  9. Слова иллюстрируются поясняющими наглядными изображениями, диаграммами и тп штуками дополняющими повествование.
  10. Низкие требования к аудитории повествование должно быть понятно даже не знакомому с проблематикой/терминологией/формализмами человеку.
  11. Отсутствие коммерции: с одной стороны никакой рекламы или иной материальной выгоды, с другой тематические объявления без какого-либо пейвола.

Итак, рассмотрим какие уже есть направления на канале..


Деконструкции


Это плейлист с материалами, где берётся некоторая общеизвестная штука и анализируется максимально глубоко. Примерный план деконструкций:


  • Краткое изложение разбираемой концепции.
  • Выяснение почему она именно такая, какая есть.
  • Разбор причин по которым она работает или не работает так как задумывалась.
  • Если не работает, то попытка сформулировать что в ней нужно поправить, чтобы она начала работать.
  • Окончательный вердикт о полезности концепции и рекомендации по её применению.
  • Ссылки на дополнительные материалы, помогающие раскрыть тему полнее.

Для примера, сейчас есть следующие деконструкции:



Расшифровки будут опубликованы позже. Важно отметить, что у канала нет и не будет какой-то единой политики партии. Так что отдельные выступления разных авторов или даже одного автора в разные моменты времени могут противоречить друг другу. Так что если вы с чем-то не согласны, то подискутировать можно не только в комментариях, но и в форме ответного видео со своим разбором. Или даже в формате одного выступления-дискуссии. Пишите, я помогу это организовать.


Видео с конференций


Это плейлист, в котором хочется собрать подходящие по тематике выступления с различных конференций. К сожалению, их слишком много, чтобы я всё отсмотрел сам. Поэтому призываю вас, присылать в наш телеграм чат ссылки на свои или чужие выступления, подходящие по тематике я добавлю их в плейлист. Свои я уже добавил.


Есть идея


В этом плей-листе хочется собрать новые, оригинальные идеи, которые ещё не обрели общеизвестность. Даже если сами идеи окажутся не очень, смотреть эти выступления стоит хотя бы даже для того, чтобы посмотреть на известные темы под новым углом. От себя я добавил следующие:



Другие каналы


Тут планируется собрать все каналы, куда выкладывают видео с конференций и тп материалы. Среди них прячутся видео-жемчужины, что подходят под тематику компьютерной науки. Осталось их найти.


Сейчас там в основном каналы русскоязычных конференций. Но есть и несколько англоязычных каналов с хорошими материалами. Возможно кто-то не прочь перевести тематическое видео оттуда на русский? У ютуба есть автотранскрипция и автоперевод субтитров. Их можно выгрузить, поправить ошибки автопереводчика и озвучить. Пишите, если готовы взять на себя хотя бы часть работ. Каждый по чуть-чуть и полезное дело сделано.


Итого


  • Core Dump собственно ютуб канал, подписывайтесь на него, чтобы не пропустить новые видео.
  • core_dump_channel телеграм канал с новостями о проекте, анонсами новых видео, плей листов, каналов и прочими тематическими вещами.
  • core_dump_chat телеграм чат, подключайтесь туда, если хотите внести свою лепту в проект.

Надеюсь мне удалось зажечь в вас искру энтузиазма. Вливайтесь в команду Core Dump, подкидывайте идеи, и просто следите за новостями. Вы можете помочь следующими вещами:


  • Нарисовать логотип канала и баннер для шапки.
  • Дополнить плейлисты своими или чужими материалами.
  • Откорректировать тексты, сделав их более привлекательными.
  • Рассказать о канале на других каналах, в чатах или ещё где.
  • Привлечь авторов, способных рассказывать просто о сложном, или генерирующих оригинальные идеи.
  • Участвовать в тестовых прогонах при подготовке выступления, критике слайдов и тп.
  • Помогать доносить новые видео до аудитории, которой они были бы интересны, но ещё не подписаны на канал.
Подробнее..

Взглянуть на выходных англоязычные YT-каналы о разработке и архитектуре ПО, алгоритмах и электронике

10.10.2020 22:18:47 | Автор: admin

Одни считают, что образовательные YouTube-каналы и подкасты по определению не могут дать глубоких знаний, другие находят там новые идеи и черпают вдохновение. Мы решили разобраться, что смотрят опытные разработчики и те, кто только начинают учебный процесс в IT.

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

Главное не воспринимать эти рекомендации как единственные в своем роде. Что-то новое для себя вы точно найдете как с точки зрения общей культуры программирования, так и некоторых аспектов computer science. Но не стоит ждать от авторов этих каналов чего-то невозможного.

Chase Chappell / Unsplash.comChase Chappell / Unsplash.com

Fun Fun Function

245 тысяч подписчиков

Заметим сразу, что автор канала приостановил выпуск роликов. Но библиотеку записей, собранную за пять с лишним лет работы, он сохранил. Наибольшее количество просмотров 600k набрала первая часть разбора техник функционального программирования на JavaScript. Из более свежих в лидеры вырвались такие темы как React Hooks (123k) и когнитивно-поведенческая психотерапия (28,5k), ставшая частью длительной серии из нескольких десятков роликов о культуре разработки, карьере в IT, лайфхаках для программистов, продуктивной работе и эмоциональной гигиене.

Подойдет для продвинутых разработчиков и тех, кто только начинает разбираться в теме.

Отличительная черта канала информативность и хорошее чувство юмора ведущего. Благодаря им все публикации в общей сложности набрали более десяти миллионов просмотров. Кстати, загляните и в дружественный проект DevTip (хотя тут апдейты перестали появляться еще раньше).


Art of The Problem

70 тысяч подписчиков

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

Одни из наиболее популярных передач по теме нейронок и глубокого обучения. В последнем видео из этой серии авторы объясняют базовые концепции и математику, задействованную в этой области, с помощью различного рода визуализаций. На канале есть огромное количество разборов: от механик рекомендательных до основных принципов работы криптографических систем.

Rishabh Agarwal / Unsplash.comRishabh Agarwal / Unsplash.com

Подойдет для всех, кто интересуется технологиями и не хочет буксовать на одном месте.

Отличительная черта аккуратный подход к видеоряду, подготовленная закадровая читка, высокая информативность и темп подачи материала (в самом хорошем смысле). Эти качества справедливы для всех роликов, которых здесь не так и много, но свои 6,5 млн просмотров они все-таки набрали.


Канал Гурава Сена

287 тысяч подписчиков

Это одна из находок среди точечных рекомендаций участников сообщества Hacker News. Автор канала выбрал для себя следующие тематические направления: проектирование систем, алгоритмы, спортивное программирование и работа над системами ИИ. Но на них он не ограничивается.

Суммарно ролики Гурава набрали более одиннадцати миллионов просмотров, хотя всего на канале чуть меньше 170 публикаций. Наиболее популярное видео 720k это разбор устройства системы обмена сообщениями. Сразу за ним самый быстрый алгоритм сортировки (668k), третье место занимает шардинг баз данных, четвертое архитектура сервисов вроде Tinder.

Понравится тем, кто учится на одной из CS-специальностей и развивает карьеру в этой области, а более продвинутым программистам поможет найти свежий взгляд на некоторые вопросы.

Отличительная черта скорость подачи материала, которая существенно отличается от того, к чему многие привыкли в вузе; разнообразие и достаточно глубокое погружение в определенные темы.


Канал Бэна Итера

559 тысяч подписчиков

Продолжаем движение от каналов, где новые видео не появлялись около месяца, к более активным. Этим проектом занимается человек, известный по технической части Khan Academy и независимым начинанием в области разработки электроники и моделирования компьютерного железа.

Его ролики набрали более 33 млн просмотров, а отдельные видео регулярно выходят на миллионный охват. В топе рассказ о том, как собрать худшую в мире видеокарту (2,8M), еще мы выделили бы знакомство с работой TCP (333k) и обсуждение проблемы сетевого нейтралитета.

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

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


The Coding Train

1,19 млн подписчиков

Если при просмотре действительно полезного YouTube-туториала вы задумывались о том, как было бы круто, если его автор преподавал бы в вашем вузе, то это именно такой случай. Здесь есть все: от алгоритмов и машинного обучения до генеративной поэзии и проведения различных симуляций.

Slidebean / Unsplash.comSlidebean / Unsplash.com

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

Этот канал подойдет всем, кто читает Хабр каждый день. Опытные разработчики и те, кто только начинают путь в сфере IT, точно смогут найти для себя что-то подходящее и полезное.

Отличительная черта прекрасное чувство юмора ведущего, профессиональное отношение к разбору тем, высокий уровень подачи материала в формате live-презентации (без редактирования).


Новые публикации у нас на Хабре:


Подробнее..

Перевод Ускоряем код на Python с помощью Nim

20.02.2021 12:17:51 | Автор: admin

Привет, хабровчане. В преддверии старта курса "Python Developer. Basic" подготовили для вас перевод интересной статьи. Также приглашаем на открытый вебинар Карьера для "Python Developer. Basic".


Python один из самых популярных и доступных языков программирования, но далеко не самый быстрый. Многие создатели библиотек и фреймворков прибегали к использованию расширения на С, чтобы их код работал быстрее, чем код на нативном Python.Этот способ вполне рабочий, но если вы не знакомы с С, сборка мусора и управление памятью станут вашим адом на Земле. И тут на сцену выходит Nim.

Что такое Nim?

Nim статически типизированный, компилируемый, объектно-ориентированный язык программирования. Nim создавался, чтобы быть таким же быстрым как С и таким же выразительным как Python, и к тому же, расширяемым как Lisp. Благодаря синтаксическому сходству с Python, Nim станет отличным выбором языка для расширения, если с C вам не по пути.

Начало работы с Nim

Чтобы начать писать на Nim, его нужно установить в свою систему. Скачайте и установите его с сайта nim-lang.org.

Как только вы закончите, мы начнем писать свой первый код на Nim. Во-первых, мы создаем файл, я назову его hello.nim, а вы можете назвать его как захотите. Теперь мы откроем его в любом текстовом редакторе и напишем:

static:    echo("Hello, world!")

Сохраните и закройте файл, затем откройте терминал из текущей директории и введите:

nim compile hello.nim

И вуаля! В консоль выведется Hello, World!. После получения первого представления о Nim перейдем к основной теме статьи.

Встраиваем Nim в приложения на Python

Nim поставляется с модулем nimpy и nimporter, которые доступны для Python.Последний можно установить с помощью pip install nimporter. Эти два пакета будут иметь важное значение при совместной работе двух языков.

Чтобы продемонстрировать возможности Nim, мы создадим простой тест, который будет сравнивать скорость работы обоих языков, на примере функции находящей n-ое число последовательности Фибоначчи.

Давайте создадим папку под названием Benchmark с 3 файлами внутри:

  • main.py файл, который мы будем запускать

  • nmath.nim файл с версией функции fib на Nim

  • pmath.py файл с версией функции fib на Python

Сначала напишем функцию fib на Python:

def fib(n):    if n == 0:        return 0    elif n < 3:        return 1    return fib(n - 1) + fib(n - 2)

А теперь переместимся в nmath.nim. Для начала нам нужно импортировать nimpy:

import nimpy

Прямо как в Python, не так ли? А теперь сама функция:

import nimpyproc fib(n: int): int {.exportpy.} =    if n == 0:        return 0    elif n < 3:        return 1    return fib(n-1) + fib(n-2)

Давайте разберемся

Мы определяем функцию fib с помощью ключевого слова proc. Дальше указываем тип возвращаемого значения как целочисленный, а (вау, что это такое?) {.exportpy.} сигнализирует Nim, что эта функция предназначена для использования в другом модуле Python. В остальном все также, как в Python.

Тестирование на время

В main.py создадим простой бенчмарк:

import nimporterfrom time import perf_counterimport nmath  # Nim imports!import pmathprint('Measuring Python...')start_py = perf_counter()for i in range(0, 40):    print(pmath.fib(i))end_py = perf_counter()print('Measuring Nim...')start_nim = perf_counter()for i in range(0, 40):    print(nmath.fib(i))end_nim = perf_counter()print('---------')print('Python Elapsed: {:.2f}'.format(end_py - start_py))print('Nim Elapsed: {:.2f}'.format(end_nim - start_nim))

Вот и все!

Пакет importer позволяет импортировать Nim в обычные модули Python, которые будут использоваться также, как и собственные. Круто, не правда ли?

Чтобы запустить код, просто введите python main.py в командную строку и смотрите, что будет!

Python Elapsed: 33.60Nim Elapsed: 1.05

Заключение

Вот и все, что нужно сделать, чтобы быстро встроить Nim в Python. Nim оказался примерно в 30 раз быстрее, но имейте ввиду, что разница в скорости может варьироваться в зависимости от выполняемой задачи. Чтобы узнать больше о Nim, рекомендую ознакомиться с официальной документацией и почитать про него в Википедии.

Что ж, на этом я закончу свой туториал! Спасибо, что дотерпели до конца. Надеюсь, эта статья окажется для вас полезной.


Узнать подробнее о курсе "Python Developer. Basic".

Смотреть запись открытого demo-урока Три кита: map(), filter() и zip().

Подробнее..

Computer Science Center открыл приём заявок на новый учебный год

24.03.2021 16:21:32 | Автор: admin

До 10 апреля продолжается набор на вечерние курсы по математике и программированию в CS центре. Computer Science Center это совместный проект Школы анализа данных Яндекса, JetBrains и Computer Science клуба при ПОМИ РАН. Курсы проходят очно в Санкт-Петербурге и Новосибирске, жители других городов могут заниматься дистанционно. Обучение в Computer Science Center бесплатное.

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

Большинство наших студентов учатся в вузах или работают, поэтому расписание составлено так, чтобы занятия можно было совмещать с основной деятельностью. Однако будьте осторожны: на учёбу в Computer Science Center придется тратить не менее 15 часов в неделю. Если у вас недостаточно времени (или мотивации), советуем начать с онлайн-курсов на платформе Stepik.

Длительность обучения два или три года по выбору студента. За это время нужно пройти не менее 12 курсов: часть из них обязательная, часть вы выбираете сами. Обязательные курсы зависят от направления обучения. Для поступающих в 2021 году будут открыты три направления (позже вы сможете выбрать одно из них или даже несколько сразу):

  • Computer Science,

  • Data Science,

  • Software Engineering.

Подробнее обо всех направлениях на сайте. Для выпуска студенты проходят три семестра практики или научно-исследовательской работы (примеры есть на этой странице).

Чтобы стать студентом или студенткой CS центра, нужно справиться с вступительными испытаниями:

  • заполните анкету на сайте до 10 апреля,

  • решите задания онлайн-теста до 11 апреля,

  • участвуйте в онлайн-экзамене в конце апреля-начале мая,

  • пройдите собеседование в мае-июне.

Для кандидатов, которые успешно прошли отбор, занятия начнутся в сентябре 2021 года.

Если вы еще не решили, стоит ли ввязываться в эту авантюру, посмотрите на отзывы выпускников:

Станислав Гордеев, разработчик игрового движка в People Can Fly (Варшава), выпускник 2018 года направления Software Engineering:

Когда-то давно, в сентябре 2014, будучи ещё студентом-физиком, я случайно наткнулся на хабро-статью про онлайн-курсы на Stepik, заинтересовался и прошёл курсы по C++ и алгоритмам, кроме того, узнал о CSC. На тот момент у меня помимо интереса появилась довольно амбициозная цель попасть в большой gamedev. Поступление оказалось совсем не лёгким и до последнего дня с письмом о зачислении я не верил, что всё получится. Моё обучение началось в 2016, и с тех пор я семимильными шагами приближался к своей цели. А все из-за неповторимой атмосферы знаний, амбиций, дружелюбия, которая не позволяет сидеть на месте, которая заставляет поверить в себя. Сейчас я с уверенностью могу сказать, что моя цель осуществилась в первую очередь благодаря CS центру, потому что это больше, чем просто курсы. Старайтесь, и у вас всё получится.

Анна Атаманова, разработчица в Яндексе, выпускница 2016 года направления Data Science:

Почему СS центр это дико круто:

курсы! (всё новое и интересное по основным направлением центра тут-тут-тут);

увлечённые своим делом преподаватели (таких людей в любом случае приятно слушать);

мотивированные, заинтересованные студенты (да у них можно узнать чуть ли не больше, чем на паре);

проекты! стажировки! (опыт, реальные задачи);

кроме того, любящие кураторы успевают заботиться о дружественной атмосфере (постоянные плюшки в виде игротек, выгулок на праздники итп это здорово).

Артемий Пестрецов, разработчик в JetBrains, преподаватель CS центра, выпускник 2019 года направлений Data Science и Software Engineering:

Как я и ожидал, CSC стал важной поворотной точкой в моей карьере. Все три года я кайфовал от процесса обучения, сумел закрыть старые пробелы в знаниях и узнать много нового. Наверное, самое важное следствие гибкой системы выбора курсов и практик возможность пробовать разные дисциплины и в итоге найти себя. За время обучения в центре я разрабатывал распределенные системы, занимался машинным обучением и создавал инструменты для разработчиков. В итоге я нашел работу в интересующем меня направлении в крутой компании. А ещё в центре очень классная тусовка, с которой вы так или иначе будете пересекаться на протяжении всей карьеры.

Все отзывы можно посмотреть на этой странице.


Для тех, кто нашел в себе силы дочитать до этого места, бонус! Перед тестом вы можете потренироваться и порешать задачи прошлых лет. Но помните, что 10 апреля тренажёр превратится в тыкву, так что лучше не откладывать.

Ну и самое последнее: 31 марта состоится День открытых дверей для поступающих в CS центр. Кураторы подробно расскажут про направления и формат обучения и ответят на все ваши вопросы. Зарегистрироваться можно здесь.

Ждем будущих студентов Computer Science Center!

Подробнее..

Перевод Пирамидальная сортировка, сортировка слиянием и выпуклая оболочка

07.04.2021 18:21:37 | Автор: admin

Базовые алгоритмы сортировки


Пирамидальная сортировка (или сортировка кучей, Heap Sort)

Куча (heap) это не что иное, как двоичное дерево с некоторыми дополнительными правилами, которым оно должно следовать: во-первых, оно всегда должно иметь структуру кучи, где все уровни двоичного дерева заполняются слева направо, и, во-вторых, оно должно быть упорядочено в виде max-кучи или min-кучи. В качестве примера я буду использовать min-кучу.

Алгоритм пирамидальной сортировки это метод сортировки, который полагается на такие структуры данных как двоичные кучи. Поскольку мы знаем, что кучи всегда должны соответствовать определенным требованиям, мы можем использовать это для поиска элемента с наименьшим значением, последовательно сортируя элементы, выбирая корневой узел кучи и добавляя его в конец массива.

Ниже приведен псевдокод пирамидальной сортировки:

HeapSort(A[1n]):1 - H = buildHeap(A[1n])2 - for i = 1 to n do:3 -   A[i] = extract-min(H)

В самом начале мы имеем несортированный массив. Первый шаг взять этот массив и превратить его в кучу; в нашем случае мы хотим превратить его в min-кучу. Итак, нам нужно преобразовать данные несортированного массива и построить из них min-кучу. Обычно это инкапсулируется одной функцией, которую можно назвать, например, buildHeap.

Ниже приведен псевдокод buildHeap:

buildHeap():1 - Изначально H пустая2 - for i = 1 to n do:3 -   Add(H, A[i])

Как только данные нашего массива будут представлены в формате min-кучи, мы можем быть уверенными, что наименьшее значение находится в корневом узле нашей кучи. Помните, что даже если куча не будет полностью отсортирована, если мы построили нашу min-кучу правильно и без каких-либо ошибок, каждый отдельно взятый родительский узел в нашей куче будет меньше по значению, чем его дочерние элементы. Мы собираемся переместить наименьшее значение, расположенное в корневом узле, в конец кучи, заменив его последним элементом.

Теперь самый маленький элемент в куче находится в последнем узле, что нам и нужно. Мы знаем, что он находится в отсортирован относительно остальных элементов, поэтому его можно полностью удалить из кучи (функция extract-min). Но нам нужно сделать еще кое-что: убедиться, что новый элемент корневого узла находится на своем месте! Маловероятно, что элемент, который мы сделали корневым узлом, находится на своем месте, поэтому мы переместим элемент корневого узла вниз в его корректное положение, используя функцию, которая обычно называется heapify (приведение к виду кучи).

Ниже приведен псевдокод extract-min и heapify:

extract-min(H):1 - min = H[1]2 - H[1] = H[H.size()]3 - уменьшаем H.size() на 14 - heapify(H, 1)5 - return minheapify():1 - n = H.size()2 - while (LeftChild(i) <= n and H[i] > H[LeftChild(i)]) or (RightChild(i) <= n and H[i] > H[RightChild(i)]) do:3 -   if (H[LeftChild(i)] < H[RightChild(i)]) then:4 -     j = LeftChild(i)5 -   else:6 -     j = RightChild(i)7 -   меняем местами H[i] и H[j]8 -   i = j

Вот и все! Алгоритм продолжает повторять эти шаги до тех пор, пока куча не сократится до одного единственного узла. На момент, когда это произойдет, мы будем уверенны, что все элементы в несортированном массиве находятся в своих отсортированных позициях и что последний оставшийся узел в конечном итоге станет первым элементом в отсортированном массиве. Общее время работы этого алгоритма составляет O(n log n).

Сортировка слиянием (Merge Sort)

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

Сортировка слиянием это алгоритм разделяй и властвуй, который можно свести к 3 шагам:

  • Разделите (разбейте) задачу на минимально возможные подзадачи одного типа.

  • В первую очередь победите (решите) самые мелкие подзадачи. После того, как вы нашли рабочее решение, используйте ту же самую технику для решения более крупных подзадач другими словами, решайте подзадачи рекурсивно.

  • Объединяйте результаты и соединяйте более мелкие подзадачи, пока вы, наконец, не примените то же решение к более крупной и сложной задаче, с которой вы начинали!

Суть алгоритмов разделяй и властвуй проистекает из того факта, что решить сложную проблему намного проще, если вы сможете понять, как разбить ее на более мелкие части. Если разбить проблему на отдельные части, решить ее станет намного проще. И обычно, когда вы выясняете, как решить подзадачу, вы можете применить это решение к более крупной задаче. Именно эта методология делает рекурсию предпочтительным инструментом для алгоритмов разделяй и властвуй, и именно по этой причине сортировка слиянием является отличным примером рекурсивных решений.

Функция mergeSort в свою очередь состоит из двух функций:

  • функции слияния, которая фактически объединяет два списка вместе и сортирует их в правильном порядке.

  • функции mergeSort, которая будет продолжать разделять входной массив снова и снова (рекурсивно), а затем будет вызывать функцию слияния снова и снова (также рекурсивно).

Ниже приведен псевдокод сортировки слиянием:

Merge(A, B):1 - i = 1; j = 1; k = 1;2 - a_(m+1) = ; b_{n+1} = 3 - while (k <= m+n) do:4 -   if (a_i < b_j) then5 -     c_k = a_i; i++;6 -   else7 -     c_k = b_j; j++;8 -   k++;9 - return C = {c_1, c_2, , c_(m+n)}MergeSort(X, n)1 - if (n == 1) return X2 - middle = n/2 (round down)3 - A = {x_1, x_2, , x_middle}4 - B = {x_(middle+1), x_{middle+2), , x_n}5 - As = MergeSort(A, middle)6 - Bs = MergeSort(B, n - middle)7 - return Merge(As, Bs)

Именно потому, что сортировка слиянием реализована рекурсивно, это делает ее быстрее, чем другие алгоритмы, которые мы рассмотрели до сих пор. Сортировка слиянием имеет время выполнения O(n log n).

Выпуклая оболочка (или выпуклый контур, Convex Hull)

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

Подход 1 Упаковка подарков (Gift Wrapping) O(n)

Идея проста, мы начинаем с самой левой точки (или точки с минимальным значением координаты x) и продолжаем оборачивать точки против часовой стрелки. Если точка p является текущей точкой, следующая точка выбирается как точка, которая перекрывает все остальные точки по ориентации против часовой стрелки. Ниже приводится псевдокод:

1 - ConvexHull = пустой список2 - Ищем точку с наименьшим x и присваиваем ее u (:= u_original)3 - Пусть L будет вертикальной линией, проходящей через u3 - Do:4 -   Пусть v будет точкой с наименьшим углом между L и u * v5 -   Добавляем v в ConvexHull6 -   Пусть L = uv линии7 -   u := v8 - Until v = u_original9 - Выводим ConvexHull

Подход 2 Алгоритм Грэхема (Graham Scan) O(n log n)

Этот алгоритм можно разделить на 2 этапа:

  • Этап 1 (сортировка точек): сначала мы находим самую нижнюю точку. Идея состоит в том, чтобы предварительно обработать точки, сортируя их по самой нижней точке. После сортировки точек они образуют простой замкнутый путь. Какими должны быть критерии сортировки? Вычисление фактических углов было бы неэффективным, поскольку тригонометрические функции не являются простыми в вычислении. Идея состоит в том, чтобы использовать ориентацию для сравнения углов без их фактического вычисления.

  • Этап 2 (включении или отбрасывание точек): после того, как у нас есть замкнутый путь, следующим шагом будет прохождение по пути и удаление из него вогнутых точек. Первые две точки в отсортированном массиве всегда являются частью выпуклой оболочки. Для оставшихся точек мы смотрим на последние три точки и находим угол, образованный ими. Пусть это три точки: prev(p), curr(c) и next(n). Если ориентация этих точек (рассматривая их в том же порядке) не против часовой стрелки, мы отбрасываем c, в противном случае мы оставляем ее.

1 - ConvexHull = пустой список2 - Пусть u - точка с наименьшим значением x (если таких точек несколько, выбираем ту, у которой наименьший y)3 - Сортируем оставшиеся точки по угловой фазе в порядке против часовой стрелки вокруг u4 - Добавляем u и первую точку в ConvexHull5 - For i = 2 to n - 1:6 -   While угол между предпоследней, последней и точкой i > 180 градусов:7 -     Удаляем точку из ConvexHull8 -   Добавляем i в ConvexHull9 - Return ConvexHull

Если вам интересно следить за моей работой в области компьютерных наук и машинного обучения, вы можете посетить мои Medium и GitHub, а также другие проекты на https://jameskle.com/. Вы также можете написать мне мне в Твиттере, но электронной почте или найти меня в LinkedIn. Или подписывайтесь на мою рассылку, чтобы получать мои последние статьи прямо на ваш почтовый ящик!


Перевод статьи подготовлен в преддверии старта курса Алгоритмы и структуры данных.

Приглашаем также посетить бесплатный демо-урок на тему Пирамидальная сортировка. На этом бесплатном демо-занятии мы: сначала реализуем алгоритм сортировки выбором, потом превратим массив в пирамиду (кучу) и ускорим время поиск максимального элемента в неотсортированной части массива с линейного до логарифмического.В итоге у нас получится алгоритм Пирамидальной сортировки. Мы наглядно продемонстрируем работу алгоритма на визуальных примерах с конкретными числами.

Подробнее..

Перевод Перевод Курса по стартапам и бизнесу от Стэнфордского Университета. Лекция 2. Команда и реализация стартапа

19.06.2021 10:16:36 | Автор: admin

Почему Курс по стартапам и бизнесу от Стэнфордского Университета, является одним из самых лучших в мире для стартаперов? Дело в том, что лекторами данного курса являются лучшие из лучших стартап-предприниматели, такие как: Сем Альтман президент самого известного венчурного фонда Y Combinator, Дастин Московиц сооснователь Facebook, Питер Тиль сооснователь PayPal и первый инвестор, который вложил деньги в Facebook, Брайан Чески основатель Airbnb, Альфред Лин основатель Zappos, Алан Кей отец ООП и много других гуру современного интернет-бизнеса.

В этом курсе отсутствуют сложные теории, а присутствуют только практические примеры и советы.
Например, как найти бизнес-идею и оценить её, как привлечь клиентов и постоянно увеличивать свои продажи, как построить успешную бизнес-стратегию и подобрать сильную команду и т. д.
В первой лекции будут выступать Сэм Альтман гений-программист, который сейчас возглавляет венчурный фонд Y Combinator, с чьей помощью успешно реализовано более 400 стартапов и также Дастин Московиц сооснователь Facebook.

В этой небольшой статье я хочу кратко описать содержимое лекции 2 - Команда и реализация стартапа из курса по стартапам и бизнесу от Стэнфордского Университета.

Итак, из Лекции 2 - Команда и реализация стартапа вы узнаете слендующее:

00:43 - Как определить какие рынки будут развиваться и расти в будущем?

01:35 - Как преодолеть усталость от стартапа основателям?

02:45 - Как найти со-основателя или партнера и выстроить с ним хорошие отношения?

05:15 - Какие характеристики должен иметь каждый партнер?

07:47 - Какое количество со-основателей желательно должен иметь стартап?

08:00 - Как и когда нанимать новых сотрудников?

08:24 - Как подбирать персонал и какими качествами должны обладать ваши работники?

12:20 Сколько времени нужно выделить на поиски сотрудников?

14:15 Источники поисков кандидатов.

15:27 Какой опыт должны иметь кандидаты в сотрудники?

16:05 Три вещи на которые стоит обращать внимание при найме людей.

16:55 Лучший способ с помощью которого можно понять качество кандидата.

17:54 Почему важны коммуникативные способности?

19:47 - Как распределять доли компании между работниками компании?

21:07 - Как удержать в компании хороших сотрудников?

23:27 - Когда нужно увольнять неподходящего для вашей компании человека?

24:30 Как найти баланс между быстрым увольнением работника и обеспечением чувства безопасности вашей команды?

25:55 - Когда со-основатели должны принимать решение об разделении капитала?

26:42 - Как узнать, что работник вырастит до хорошего уровня в будущем?

27:32 - Как сохранить компанию в случае ухода одного из со-основателей на раннем этапе?

29:00 - Что делать если при приеме сотрудника компания теряет свою конкурентную способность

29:37 - Как работать с основателями, которые находятся в другой географической локации?

30:20 - Несколько слов про основные правила реализации стартапа.

31:50 - Какие задачи должен выполнять основатель в стартапе?

32:50 - Как уделённое внимание на задачи, а также концентрация на выполнении определённой задачи и интенсивность её выполнения влияют на развитие стартапа?

40:20 Один из основных критериев хорошего стартапа.

41:15 Почему важна интенсивность выполнения задач?

41:50 Как нужно бороться за клиента?

43:50 - Почему для стартапа жизненно важен его рост?

45:05 Почему продажи самый лучший показатель успешности стартапа?

45:50 Один из вариантов решения проблем стартапа.

47:05 - Как стоит реагировать на новости от конкурентов?

Надеюсь, вам понравится данный материал, и вы задумаетесь над созданием собственного бизнеса.

Оригинал на сайте http://startupclass.samaltman.com/

Подробнее..

Швейцарский нож науки как методы Computer Science используются в других дисциплинах

28.05.2021 16:10:14 | Автор: admin

Математику часто называют языком науки. Она хорошо приспособлена для количественной обработки практически любой научной информации, независимо от ее содержания. А при помощи математического формализма ученые из разных областей могут в какой-то степени понимать друг друга. Сегодня похожая ситуация складывается с Computer Science. Но если математика это язык науки, то CS её швейцарский нож. Действительно, трудно представить современные исследования без анализа и обработки огромных объемов данных, сложных вычислений, компьютерного моделирования, визуализации, применения специального ПО и алгоритмов. Разберем несколько интересных сюжетов, когда разные дисциплины используют методы CS для решения своих задач.

Биоинформатика: от чашек Петри к биологии In silico


Биоинформатику можно назвать одним из самых ярких примеров стыка CS и других дисциплин. Эта наука занимается анализом молекулярно-биологических данных при помощи компьютерных методов. Биоинформатика как отдельное научное направление появилась в начале 70-х годов прошлого века, когда впервые были опубликованы нуклеотидные последовательности малых РНК и созданы алгоритмы предсказания их вторичной структуры (пространственного расположения атомов в молекуле).

С проекта Геном человека по определению последовательности нуклеотидов в ДНК человека и идентификации генов в геноме началась новая эра биоинформатики. Стоимость секвенирования ДНК (определение последовательности нуклеотидов) упала на несколько порядков. Это привело к колоссальному увеличению числа последовательностей в публичных базах данных. На графике ниже изображен рост количества последовательностей в публичной базе данных GenBank с декабря 1982 года по февраль 2017 в полулогарифмическом масштабе. Чтобы накопленные данные стали полезными их нужно каким-то образом проанализировать.


Рост числа последовательностей в GenBank c декабря 1982 по февраль 2017. Источник: www.ncbi.nlm.nih.gov/genbank/statistics

Одним из методов анализа последовательностей в биоинформатике является их выравнивание. Суть метода заключается в том, что последовательности мономеров ДНК, РНК или белков размещаются друг под другом таким образом, чтобы увидеть сходные участки. Сходство первичных структур (то есть последовательностей) двух молекул может отразить их функциональную, структурную или эволюционную связь. Так как последовательность можно представить в виде строки с определенным алфавитом (4 нуклеотида для ДНК и 20 аминокислот для белка), то выравнивание оказывается комбинаторной задачей из CS (например, выравнивание строк также используется в обработке естественного языка NLP). Однако контекст биологии добавляет в задачу некоторую специфику.

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


Пример выравнивания аминокислотных последовательностей двух белков. Синим цветом выделены лейцин (L) и изолейцин (I), являющиеся изомерами такая замена в большинстве случаев не отражается на структуре белка

Однако, как определить, оптимальное ли получилось выравнивание? Первое, что приходит в голову, это оценить количество совпадений: чем больше совпадений, тем лучше. Однако в контексте биологии это не совсем так. Замены (замещения одной аминокислоты другой) неравноценны: некоторые замены (например, S и T, D и E остатки, отличающиеся по структуре ровно на один атом углерода) практически не отражаются на структуре белков. А вот замена серина на триптофан сильно изменит структуру молекулы. Для определения, является ли выравнивание лучшим из всех возможных, вводят количественный критерий (вес или счет). Для оценки замен используют так называемые матрицы замены, основанные на статистике замены аминокислот в белках с известной структурой. Чем больше число на пересечении сопоставленных букв, тем больше счет.


Периодически появляются новые матрицы замен. Здесь представлена матрица BLOSUM62

Счет также учитывает наличие делеций. Обычно штраф за открытие делеции на несколько порядков больше, чем за продолжение. Это объясняется тем, что участок из нескольких идущих подряд гэпов считается за одну мутацию, а несколько гэпов в разных местах за несколько. В примере ниже первая пара последовательностей более схожа, чем вторая, потому что в первом случае последовательности формально отделяет одно эволюционное событие:


Теперь о самих алгоритмах выравнивания. Выделяют два вида парного выравнивания (нахождение сходных участков двух последовательностей): глобальное и локальное. Глобальное выравнивание подразумевает, что последовательности гомологичны (схожи) по всей длине. В него включаются обе последовательности целиком. Однако при таком подходе не всегда хорошо определяются схожие участки, если их мало. Локальное выравнивание применяют, если последовательности содержат как гомологичные (например, из-за рекомбинации), так и неродственные участки. Но оно не всегда может попасть в интересующий участок, к тому же существует вероятность встречи случайного схожего участка. Для получения парного выравнивания используют методы динамического программирования (решение задачи путем её разбиения на несколько одинаковых подзадач, связанных рекуррентно). В программах для глобального выравнивания часто используют алгоритм Нидлмана-Вунша, а для локального алгоритм Смита-Ватермана. Подробней о них можно прочитать по ссылкам.


Пример выравнивания: вверху глобальное выравнивание, снизу локальное. В первом случае выравнивание происходит по всей длине последовательностей, во втором найдены некоторые гомологичные участки.

Как видим, биологическую задачу вполне можно свести к задаче из CS. При парном выравнивании с использованием упомянутых алгоритмов требуется порядка m*n дополнительной памяти (m, n длины последовательностей), с чем легко справятся современные домашние компьютеры. Однако в биоинформатике существуют и более нетривиальные задачи, например множественное выравнивание (выравнивание нескольких последовательностей) для реконструкции филогенетических деревьев. Даже если сравнить 10 очень маленьких белков с длиной последовательности около 100 символов, то потребуется непозволительно много дополнительной памяти (размерность массива 100^10). Поэтому в таком случае выравнивание строится на базе различных эвристик.

Моделирование крупномасштабной структуры Вселенной


В отличие от биологии, физика идет бок о бок с Computer Science со времен появления первых ЭВМ. До создания первых компьютеров словом computer (вычислитель) называлась специальная должность это были люди, выполнявшие на калькуляторах математические вычисления. Так в ходе Манхэттенского проекта физик Ричард Фейнман был управляющим целой команды вычислителей, которые обрабатывали дифференциальные уравнения на арифмометрах.


Вычислительная комната Лётно-исследовательского центра им. Армстронга. США, 1949 год

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


Крупномасштабная структура Вселенной напоминает систему прожилок и волокон, разделенных пустотами

Одна из задач современной космологии объяснение наблюдаемой картины многообразия галактик и их эволюции. На качественном уровне физические процессы, происходящие в галактиках, сейчас известны, поэтому усилия ученых направлены на получение количественных предсказаний. Это позволит ответить на ряд фундаментальных вопросов, например о свойствах темной материи. Но, прежде чем выделить наблюдаемые проявления темной материи, необходимо разобраться с поведением обычной материи. На огромных масштабах (несколько миллионов световых лет) обычная материя эффективно ведет себя так же, как и темная: она подвержена одной силе гравитации, про давление газа можно забыть. Это позволяет сравнительно просто моделировать эволюцию крупномасштабной структуры Вселенной (Численные методы, содержащие только темную или пылевидную материю и хорошо воспроизводящие крупномасштабную структуру распределения галактик, начали развиваться с 1980-х годов).

Моделирование темной материи происходит следующим образом. Виртуальный куб, имеющий размеры в сотни миллионов световых лет, почти равномерно заполняют пробными частицами телами. С самого начала во Вселенной присутствовали малые неоднородности, из которых и возникла вся наблюдаемая структура, поэтому заполнение почти равномерное. Затем частицы начинают жить собственной жизнью под действием силы тяготения: решается задача N тел. Вылетевшие за границу куба частицы переносятся на противоположную грань, силы тяготения также распространяется с переносом. Благодаря этому куб становится как бы бесконечным, как и Вселенная.


Приблизительные траектории трёх одинаковых тел, находившихся в вершинах неравнобедренного треугольника и обладавших нулевыми начальными скоростями

Одной из самых известных численных моделей такого типа Millenium, имеющая размер куба более 1.5 млрд световых лет и около 10 млрд частиц. В последующие годы было выполнено несколько моделей большего объема: Horizon Run с размером стороны куба в 4 раза больше, чем Millenium, и Dark Sky с размером в 16 раз больше Millenium. Эти и подобные модели сыграли ключевую роль в проектах по проверке общепризнанной сейчас модели Лямбда-CDM (Вселенная, содержащая около 70% темной энергии, 25% темной материи и 5% обычной материи).


В верхнем ряду показано распределение галактик в модели Millenium: слева моделирование для скопления галактик, где их можно увидеть по отдельности; справа для очень больших масштабов. Верхнее правое изображение представляет крупномасштабное распределение света во Вселенной. Для сравнения на изображениях в нижнем ряду приведены соответствующие распределения темной материи

При уменьшении масштабов возникают проблемы в соответствии наблюдений и численных моделей с одной темной материей. На более малых масштабах (масштабы распространения ударных волн от сверхновых) материю уже нельзя считать пылевидной. Необходимо учитывать гидродинамику, остывание и нагревание газа излучением и много чего еще. Для учета всех законов физики в моделировании делают некоторые упрощения: например, можно разбить модельный куб на решетку из ячеек (субрешёточная физика), и считать, что при достижении в ячейке некоторый плотности и температуры часть газа мгновенно превратится в звезду. К такому классу моделей относятся проекты EAGLE и illustris. Один из результатов этих проектов воспроизведение соотношения Талли-Фишера между светимостью галактики скоростью вращения диска.

Лингвистика и машинное обучение: на один шаг ближе к разгадке 4000-летней тайны


Методы CS находят применения и в более неожиданных сферах, например в изучении древних языков и систем письма. Так исследование группы ученых под руководством Раджеша П. Н. Рао, профессора Вашингтонского университета, пролило свет на тайну письменности долины Инда.

Письменность Инда, использовавшаяся между 2600-1900 года до нашей эры на территории нынешнего Восточного Пакистана и северо-западной Индии, принадлежала цивилизации не менее сложной и загадочной, чем ее месопотамские и египетские современники. От нее осталось чрезвычайно мало письменных источников: археологи обнаружили лишь около 1500 уникальных надписей на фрагментах керамики, табличек и печатей. Длина самой длинной надписи составляет всего 27 знаков.


Надписи на печатях из долины Инда

В научной среде существовали разные гипотезы насчет загадочных символов. Некоторые специалисты считали символы не более, чем просто красивыми картинками. Так в 2004 году лингвист Стив Фармер опубликовал статью, в которой утверждалось, что письменность Инда является не чем иным, как политическими и религиозными символами. Его версия, хоть и являлась спорной, но все-таки нашла своих сторонников.

Раджеша П. Н. Рао, специалист по машинному обучению, читал о письменности Инда в старшей школе. Группа ученых под его руководством решила провести статистический анализ существующих достоверных документов. В ходе исследований при помощи цепей Маркова (одна из первых дисциплин, в которой цепи Маркова нашли практическое применения, стала текстология) сравнивалась условная энтропия символов из письменности Инда с энтропией лингвистических и нелингвистических последовательностей знаков. Условная энтропия это энтропия для алфавита, для которого известны вероятности появления одной буквы после другой. Для сравнения было выбрано несколько систем. В лингвистические системы входили: шумерское логографическое письмо, старо-тамильская абугида, санскрит Риг-веды, современный английский (слова и буквы исследовались отдельно) и язык программирования Фортран. Нелингвистические системы разделили на две группы. К первой относились системы с жёстким порядком знаков (искусственный набор знаков 1), ко второй системы с гибким порядком (белки бактерий, ДНК человека, искусственный набор знаков 2). В результате выяснилось, что протоиндийская письменность оказалась умеренно упорядоченной, как письменность разговорных языков: энтропия существующих документов сходна с энтропией шумерской и тамильской письменности.


Условная энтропия для различных лингвистических и нелингвистических систем

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

Заключение


Конечно, за бортом остались многие сферы, где методы CS находят применения. В одной статье просто невозможно раскрыть то, как современная наука полагается на компьютерные технологии. Однако, надеюсь, приведенные примеры показывают, насколько разными могут быть задачи, решаемые в том числе и методами CS.



Облачные серверы от Маклауд быстрые и безопасные.

Зарегистрируйтесь по ссылке выше или кликнув на баннер и получите 10% скидку на первый месяц аренды сервера любой конфигурации!

Подробнее..

Курсы Computer Science клуба теперь онлайн

12.10.2020 20:04:57 | Автор: admin
В связи с эпидемией COVID-19 курсы Computer Science клуба теперь проходят онлайн. В весеннем семестре мы успели провести два оффлайн-курса: Вероятностные алгоритмы (И. А. Михайлин, UCSD) и Классическая теория кодирования и новые приложения (В. Скачек, университет Тарту). Оба курса доступны в записи, а остальные курсы пришлось отменить.

Вместо отменённых курсов мы организовали несколько открытых онлайн-лекций:

  1. Генераторы случайных чисел: теория и практика (А. Шень, LIRMM, Монпелье)
  2. SANNS: Scaling Up Secure Approximate k-Nearest Neighbors Search (И. Разенштейн, Microsoft Research),
  3. Машинное обучение и приватность данных (И. Миронов, Facebook AI),
  4. Решётки и упаковки шаров (В. Клепцын, CNRS, Университет Ренна).

Теперь я расскажу о том, какие крутые курсы проходят в этом семестре.


В сентябре мы запустили два полноценных курса в клубе.

  1. Обзорный курс по теоретической информатике. Лекции читает Дмитрий Ицыксон (ПОМИ РАН), семинары ведёт Святослав Грязнов (ПОМИ РАН).
  2. Fine-grained complexity. Лекции читает Иван Михайлин (UCSD).

По обоим курсам уже состоялись несколько занятий, но всё ещё можно включиться видео всех предыдущих лекций уже на сайте.

В октябре Константин Макарычев (Northwestern University) начал публиковать видеокурс Алгоритмы: дополнительные главы (примерно по программе своего курса для аспирантов, но на русском языке). Видео выкладываюся на сайте курса и на сайте клуба. В дополнение к видеолекциям проводятся семинары. Семинары ведут Александр Шень (LIRMM) и Илья Разенштейн (Microsoft Research). Курс организован так: видеолекции появляются в понедельник, а их обсуждение проходит в пятницу. Запись слушателей, рассылка новостей, публикация домашних заданий и отправка решений организованы через сайт клуба. В конце предполагается online экзамен для желающих.


Кроме того, мы планируем продолжать устраивать открытые лекции по на различные темы. В это воскресенье прошла открытая лекция Модели памяти языков программирования: проблемы, решения и направления развития от Антона Подкопаева (MPI-SWS, JetBrains Research, ВШЭ).


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

Три англоязычных YouTube-канала для разработчиков, на которые стоит взглянуть на выходных

10.10.2020 20:06:06 | Автор: admin

Одни считают, что образовательные YouTube-каналы и подкасты по определению не могут дать глубоких знаний, другие находят там новые идеи и черпают вдохновение. Мы решили разобраться, что смотрят опытные разработчики и те, кто только начинают учебный процесс в IT.

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

Главное не воспринимать эти рекомендации как единственные в своем роде. Что-то новое для себя вы точно найдете как с точки зрения общей культуры программирования, так и некоторых аспектов computer science. Но не стоит ждать от авторов этих каналов чего-то невозможного.

Chase Chappell / Unsplash.comChase Chappell / Unsplash.com

Fun Fun Function

245 тысяч подписчиков

Заметим сразу, что автор канала приостановил выпуск роликов. Но библиотеку записей, собранную за пять с лишним лет работы, он сохранил. Наибольшее количество просмотров 600k набрала первая часть разбора техник функционального программирования на JavaScript. Из более свежих в лидеры вырвались такие темы как React Hooks (123k) и когнитивно-поведенческая психотерапия (28,5k), ставшая частью длительной серии из нескольких десятков роликов о культуре разработки, карьере в IT, лайфхаках для программистов, продуктивной работе и эмоциональной гигиене.

Подойдет для продвинутых разработчиков и тех, кто только начинает разбираться в теме.

Отличительная черта канала информативность и хорошее чувство юмора ведущего. Благодаря им все публикации в общей сложности набрали более десяти миллионов просмотров. Кстати, загляните и в дружественный проект DevTip (хотя тут апдейты перестали появляться еще раньше).


Art of The Problem

70 тысяч подписчиков

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

Одни из наиболее популярных передач по теме нейронок и глубокого обучения. В последнем видео из этой серии авторы объясняют базовые концепции и математику, задействованную в этой области, с помощью различного рода визуализаций. На канале есть огромное количество разборов: от механик рекомендательных до основных принципов работы криптографических систем.

Rishabh Agarwal / Unsplash.comRishabh Agarwal / Unsplash.com

Подойдет для всех, кто интересуется технологиями и не хочет буксовать на одном месте.

Отличительная черта аккуратный подход к видеоряду, подготовленная закадровая читка, высокая информативность и темп подачи материала (в самом хорошем смысле). Эти качества справедливы для всех роликов, которых здесь не так и много, но свои 6,5 млн просмотров они все-таки набрали.


Канал Гурава Сена

287 тысяч подписчиков

Это одна из находок среди точечных рекомендаций участников сообщества Hacker News. Автор канала выбрал для себя следующие тематические направления: проектирование систем, алгоритмы, спортивное программирование и работа над системами ИИ. Но на них он не ограничивается.

Суммарно ролики Гурава набрали более одиннадцати миллионов просмотров, хотя всего на канале чуть меньше 170 публикаций. Наиболее популярное видео 720k это разбор устройства системы обмена сообщениями. Сразу за ним самый быстрый алгоритм сортировки (668k), третье место занимает шардинг баз данных, четвертое архитектура сервисов вроде Tinder.

Понравится тем, кто учится на одной из CS-специальностей и развивает карьеру в этой области, а более продвинутым программистам поможет найти свежий взгляд на некоторые вопросы.

Отличительная черта скорость подачи материала, которая существенно отличается от того, к чему многие привыкли в вузе; разнообразие и достаточно глубокое погружение в определенные темы.


Новые публикации у нас на Хабре:


Подробнее..

Научные стажировки в Computer Science кто, что, зачем и почему?

29.06.2020 16:21:22 | Автор: admin
Об авторе. Антон Подкопаев является постдоком в MPI-SWS, руководителем группы слабых моделей памяти в лаборатории языковых инструментов JetBrains Research и преподавателем в Computer Science Center. За время аспирантуры он побывал на стажировках в IMDEA Software Institute (Мадрид, Испания) и в MPI-SWS (Кайзерслаутерн, Германия).

В этой статье я расскажу про научные стажировки и попробую ответить на базовые вопросы о них на основе своего опыта. Важно отметить, что эта публикация посвящена именно научным стажировкам, а не индустриальным. Последние имеют свою специфику, которая здесь не рассматривается. Более того, я никоим образом не претендую на полноту изложения: статья написана с точки зрения человека, занимающегося исследованиями в Computer Science (конкретнее формальными аспектами языков программирования) и имеющего опыт именно таких стажировок. Тем не менее многое, описанное здесь, будет верно и для других областей.



Содержание



Что такое научная стажировка?


Если немного сократить и перефразировать определение из Википедии, научная стажировка это деятельность по приобретению опыта научной работы. Типичный сценарий стажировки выглядит следующим образом: студент старших курсов или аспирант отправляется на два-три летних месяца в исследовательское подразделение компании, НИИ или университет и работает там над проектом под руководством профессора или в рамках научной группы.

А зачем вообще становиться стажером?


Самый прямой резон становиться стажером это то, что в рамках научной стажировки вам дают возможность поработать над получением нового научного знания, которое в дальнейшем можно оформить в виде статьи в журнал или на конференцию. Для людей, строящих научную карьеру, это само по себе достаточно важный фактор, чтобы потратить несколько месяцев на стажировку статьи нужны для защиты диссертации, отчетов по грантам. Тем не менее потенциальная статья далеко не единственный аргумент в пользу того, чтобы поехать на стажировку.

Большинство стажеров студенты или аспиранты, однако это не жесткое требование: многие стажируются для того, чтобы разнообразить трудовые будни, а заодно посмотреть на науку изнутри. Среди моих знакомых есть аспиранты/постдоки/профессора, которые именно так и начали академическую карьеру.

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

Для тех, кто уже не новичок в науке, стажировка расширит научные связи и экспертизу, сможет стать началом долгосрочного сотрудничества (так было в моем случае, но про это чуть ниже), позволит по-новому взглянуть на сферу научных интересов или даст возможность попробовать себя в другой области.

Стажировка также может быть неплохим способом заработать денег, не отрываясь от науки. Например, многие аспиранты в США и Канаде, где аспирантура является полноценной работой, проводят лето на стажировках еще и потому, что в летние месяцы им зачастую не платят зарплату.

Не в последнюю очередь стажировка это прекрасная возможность обзавестись новыми друзьями, которые имеют близкие научные интересы, а также пожить в новых городах и странах.

Как и куда подаваться на стажировку?


Пусть я вас убедил, что стажировка это то, что вам нужно. Как же ее найти? Самый простой путь посмотреть, какие стажировки предлагают различные организации:


Также можно (да и нужно) подписаться на рассылки по профилю интересующей вас темы: в них часто публикуют информацию об открытых позициях (в частности, стажерских) в научных группах. Например, хорошим списком рассылки сообщества, занимающегося формальной стороной языков программирования, является Types-announce.

Остальные варианты поиска стажировок требуют некоторой вовлеченности в научную жизнь (ниже мы кратко обсудим, что можно для этого сделать) нужно знать о конкретных профессорах и научных группах, которые работают над интересующими вас темами или проектами. Можно им написать и спросить о возможном сотрудничестве многие научные группы будут рады получить стажера, который проявляет искреннюю заинтересованность в их деятельности. При таком подходе вероятность позитивного результата напрямую связана с тем, какой экспертизой вы уже обладаете, однако стажеры совсем без опыта тоже приветствуются.

Способы вовлечения в научную жизнь и поиск научных групп


Если вам пока неизвестно, что находится на пересечении ваших интересов и актуальных научных областей, и, как следствие, у вас нет понимания, кто в этих областях работает, есть множество способов решить эту проблему (в том числе сами стажировки), среди которых я бы выделил участие в научных конференциях и студенческих школах.

Конференции


На конференциях видные ученые выступают с keynote-докладами, которые обычно нацелены на более-менее широкую аудиторию и описывают не только некоторые важные результаты, полученные за последние годы в области, но и тенденции дальнейшего развития. Если вы можете себе позволить лично участвовать в конференции, а не только смотреть записи докладов, вы можете пообщаться с докладчиками о возможных стажировках.

Также последние годы на конференциях, посвященных языкам программирования и верификации (про другие области мне говорить сложно), проходят семинары для начинающих (mentoring workshops), как раз для погружения в научную жизнь: PLMW и VMW. На этих семинарах вводные доклады о различных научных задачах перемежаются с докладами о том, как писать хорошие научные статьи, как не сойти с ума в аспирантуре, как работать в научном коллективе и получать от этого удовольствие. Помимо того, что эти семинары крайне интересны, организаторы покрывают расходы участвующих студентов выделяют деньги на перелет, проживание и участие в конференции! Конечно, финансирование получают не все, но в данном случае научная неопытность даже на руку кандидатам, поскольку основная цель этих семинаров привлечь новых людей в науку.

Найти хорошую конференцию по интересующей теме можно с помощью рейтинга MSAR. Например, если вас интересует развитие языков программирования, стоит обратить внимание на конференции POPL (моя самая любимая), PLDI, OOPSLA, ICFP, а если машинное обучение, то на ICML и NeurIPS.

Студенческие школы


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

Студенческих школ очень много, их часто анонсируют в упомянутых рассылках. В частности, Computer Science Club поддерживает отличный список школ. Также, я не могу не отметить школы, которые каждый год проводит наша лаборатория языковых инструментов JetBrains Research (они стали источниками стажировок для многих наших магистров и аспирантов).

Финансовые условия стажировок


То, на каких условиях будет проходить ваша стажировка, может очень разниться в зависимости от принимающей организации. Некоторые из них, в основном НИИ и компании, могут предоставить вам жилье, покрыть расходы на перелет, а также платить зарплату. При этом зарплата может варьироваться от достаточно для месяца жизни в городе стажировки до после можно содержать себя весь учебный год. Другие организации, в частности большинство университетов, часто не имеют денег на внешних студентов, соответственно, вам или принимающему профессору нужно будет искать финансовую поддержку, например грант. Обычно грант можно получить через программы академических обменов (например, для стажировок в Германии есть DAAD) или у вашего университета.

Личная история


Я попал на свою первую стажировку после школы по механизации доказательств в Coq, которую проводил Илья Сергей. Мне понравилась школа, и я захотел поработать под руководством Ильи. Стажировка проходила в IMDEA Software Institute в Мадриде, где он тогда работал. Мне было предложено заняться т.н. слабыми моделями памяти. Если очень кратко, то слабые модели памяти описывают реалистичное поведение многопоточных программ с учетом компиляторных и процессорных оптимизаций. На тот момент я не имел никакого представления об этой теме, но теперь это моя основная научная область, которой я занимаюсь уже пять лет.

Под меня тогда не получилось найти финансирование в IMDEA Software Institute (это скорее исключение из правил, но так тоже бывает), однако я смог получить грант от СПбГУ, где я на тот момент учился в аспирантуре, который покрыл мои билеты и жилье в Мадриде. Кстати, о жилье мне удалось снять комнату на последнем этаже дома через дорогу от королевского дворца, так что вид был очень неплох!

В Мадриде я провел прекрасные два месяца, которые были и полны впечатлений (спасибо, Илья, за показанные настолки ), и плодотворны в результате мы выполнили проект, по результатам которого я выступил со стендовым докладом на конференции POPL. На той же конференции я познакомился с Виктором Вафеядисом, ученым из MPI-SWS, чьи статьи я читал, только начиная изучать слабые модели памяти. В итоге Виктор пригласил меня на стажировку в его группу. Так, следующее лето я провел в Кайзерслаутерне, небольшом городке на юго-западе Германии. А потом приехал еще раз следующей зимой, и еще раз летом, и еще раз В общем, после пятой или шестой стажировке (как вы, наверное, уже догадались, мне там тоже очень понравилось настолок было даже больше) мне предложили остаться в институте в качестве постдока.

Научные стажировки это весело и полезно. Я очень рекомендую пройти через них всем студентам, аспирантам и тем, кто просто хотел бы попробовать себя в науке. Лично мне они дали очень многое: тесные научные и дружеские связи, область для исследований, возможность пожить в интересных местах.
Я хотел бы выразить благодарность Илье Сергею, Алексу Наневски, Марко Доко и Виктору Вафеядису, без которых были бы невозможны мои стажировки.
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru