Что такое Chia (XCH)? Как получать эту криптовалюту с помощью жесткого диска?

Вместо используемого в Bitcoin механизма консенсуса «Proof of Work«, криптовалюта Chia использует новую модель – «Proof of Space«, для которого нужно место на жестких дисках.

Вкратце:

  • Chia – это криптовалюта с новым механизмом консенсуса «Proof of Space and Time».

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

Содержание:

  1. Введение

  2. Что такое Chia?

  3. Как работает Chia?

  4. Что в этом особенного?

  5. Что такое токен XCH?

  6. Как майнить Chia на жестком диске?

  7. Что дальше будет с Chia?

Нажмите на заголовок в оглавлении, чтобы перейти к нужному пункту.


Введение

Назад к оглавлению

Майнинг прочно занял место в заголовках новостей, хотя и не среди самых положительных из них. Все больше внимания уделяется воздействию майнинга криптовалют на окружающую среду, в частности, потребляющему много энергии методу «Proof of Work» (PoW), используемому при майнинге Bitcoin и (в настоящее время) Ethereum.

Криптовалюта Chia должна изменить это за счет применения нового механизма консенсуса «Proof of Space and Time«, в котором для защиты сети вместо расходования вычислительной мощности используется память жестких дисков. Создатели этой криптовалюты утверждают, что она более безопасная, более распределенная, и менее расточительная, чем такие криптовалюты на базе метода Proof of Work, как Bitcoin. Новый подход уже продемонстрировал свою популярность среди майнеров, начавших скупать жесткие диски, нужные для построения «фермы» майнинга.

Ниже описывается, как это работает, и как начать заниматься майнингом Chia.

Что такое Chia?

Назад к оглавлению

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

Разработанная создателем BitTorrent Брэмом Коэном (Bram Cohen) криптовалюта Chia была задумана в августе 2017 и запущена в мае 2021, причем награда за майнинг в сети появилась в марте, а криптовалюта будет использовать транзакции, включенные в мае.

Этот проект поддерживается такими крупными участниками, как фонды Andreessen Horowitz и Galaxy Digital, и имеет амбициозные планы создания «настраиваемого международного коммерческого банка, работающего быстрее, чем Bitcoin».

Криптовалюта Chia отличается от других криптовалют своим уникальным механизмом консенсуса, обеспечивающим безопасность блокчейна, и получившим название «Proof of Space and Time».

Как работает Chia? Что представляет из себя Proof of Space and Time?

Назад к оглавлению

Криптовалюта Chia использует уникальный механизм консенсуса (систему, гарантирующую целостность блокчейна). В то время, как Bitcoin для этой цели использует Proof of Work, требующее значительных затрат вычислительной мощности, а такие блокчейны, как  Flow и Cosmos используют механизм, названный «Proof of Stake», Chia использует так называемое «Proof of Space and Time».

Вместо применения мощных компьютеров, соревнующихся в решении математических задач, Chia использует пространство на жестких дисках (HDD) и твердотельных накопителях (SSD) в сочетании с механизмом лотереи. Майнеры Chia записывают на свои жесткие диски 100-гигабайтные «шаблоны», которые затем заполняются хэш-кодами. Когда к блокчейну Chia добавляется новый блок, то вычисляется его хэш-код, который сравнивается с хэш-кодами на дисках майнеров. Пользователь с наиболее близким соответствием выигрывает и получает вознаграждение за проверку блока.

В этом заключается «Proof of Space». Но, так как заполнение жестких дисков данными не требует значительной вычислительной мощности, то теоретически, данный блокчейн является уязвимым к grinding-атакам, когда злоумышленник перебирает различные варианты блока для нахождения лучшего.

Для защиты от этого сеть также требует, чтобы между появлением блоков прошло определенное время (Proof of Time). Это означает, что пользователь не может просто бесконечно переписывать шаблоны, чтобы взломать блокчейн.

Что в этом особенного?

Назад к оглавлению

Основное преимущество модели Proof of Space and Time в Chia заключается в том, что оно оказывает меньшее воздействие на окружающую среду, чем Proof of Work, используемое в таких криптовалютах, как Bitcoin.

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

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

Также публиковались утверждения о том, что майнинг Chia повреждает диски, особенно имеющие небольшие объемы накопители SSD, используемые майнерами для размещения и заполнения шаблонов. Основатель Chia Брэм Коэн оспаривает предположение о том, что Chia «выжигает» диски, когда майнеры используют HDD или SSD промышленного класса.  Но немецкий поставщик облачных услуг, компания Hetzner, запретила майнинг этой криптовалюты на своих серверах, выразив обеспокоенность по поводу того, что майнинг Chia может привести к преждевременному выходу из строя ее дисков.

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

Что такое токен XCH?

Назад к оглавлению

XCH – это собственный токен («монета») сети Chia. Он используется для транзакций и для предоставления вознаграждения в качестве стимула для пользователей.

Как майнить Chia на жестком диске?

Назад к оглавлению

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

Обычно майнеры Chia записывают свои шаблоны на обладающие большой емкостью, быстрые твердотельные диски SSD потребительского класса. Такие SSD быстро изнашиваются, а винчестеры HDD, хотя и предлагают больше пространства для хранения информации, работают намного медленнее. Поэтому майнеры переносят заполненные шаблоны на большие HDD. Шаблоны Chia немного превышают 100 ГБ, но при этом требуется 350 гигабайтов для временного использования. Поэтому вам необходимо тщательно оценить свои первоначальные затраты, включая емкость SSD, емкость HDD и стоимость других компонентов, которые потребуются вам, если вы строите свою «ферму» с нуля. А затем нужно сопоставить эти затраты с вероятностью выигрыша в «лотерее», распределяющей награды Chia.

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

После того, как вы соберете вместе все необходимое, вам нужно обратиться к веб-сайту Chia, чтобы установить Chia на свой компьютер. Нажав на кнопку «Install Chia blockchain» («установить блокчейн Chia»), вы попадете на страницу Github проекта, где сможете указать нужную ОС (включая Windows, MacOS и Ubuntu) и загрузить соответствующую программу установки.

Загрузив и запустив программу установки, вы увидите экран, на котором сможете создать новый закрытый ключ или импортировать существующий ключ. Для этого нужно щелкнуть по кнопке «create a new private key» («создать новый закрытый ключ»). В результате будет сгенерирована мнемоническая фраза из 24 слов, которую следует записать и сохранить в надежном месте (ее не рекомендуется фотографировать или хранить на облачном диске, поскольку облако можно взломать и это позволит кому-то получить доступ к вашим средствам).

После возвращения к основному экрану нужно щелкнуть по кнопкам «Plots«(«Шаблоны») и «Add a plot» («Добавить шаблон»). Именно здесь вы выделяете дисковое пространство для размещения ваших шаблонов Chia.

Находясь в этом экране, вы можете выбрать размер своего шаблона (обычно, он должен несколько превышать 100 гигабайтов), количество шаблонов на вашем диске, и настроить очередь шаблонов для последовательной их обработки. Вам также необходимо задать временный и результирующий каталоги. Временный каталог – это место, где сначала создаются шаблоны (обычно его помещают на быстром SSD-диске). Результирующий каталог – это место, где шаблоны хранятся при выполнении майнинга, чтобы сравнивать их с предлагаемым блоком (обычно для этого выбираются жесткие диски HDD).

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

Что дальше будет с Chia?

Назад к оглавлению

Запуск Chia был достаточно замечательным. Еще до того, как эта система стала доступной, она, по некоторым сообщениям, вызвала нехватку жестких дисков во всей Юго-восточной Азии. В то время размер сети Chia составлял около 600 петабайтов. К маю 2021 года он уже достиг 10 экзабайтов. Подобно майнерам Ethereum, раскупившим графические процессоры, майнеры Chia поспешили приобрести жесткие диски. Президент Chia Network, Джин Хоффман (Gene Hoffman) даже признал: «Мы, в какой-то мере, нарушили цепочку поставок дисков».

Не высказывает жалоб только одна группа – производители жестких дисков, которые увидели неожиданный рост своих акций из-за внезапного роста спроса на их продукцию.

Сама сеть Chia Network более чем удвоила свою капитализацию до 500 миллионов долларов, после привлечения 61 миллиона долларов от инвесторов, среди которых такие компании, как Andreessen Horowitz, Richmond Global Ventures и Breyer Capital. Сам Хоффман назвал финансирование «ракетным топливом» найма и раскрыл планы по IPO и открытое обращение своих акций через планируемое в этом году слияние с компаниями SPAC.

Тем временем, компания планирует развитие своей миссии по достижению институционального принятия своей торговой и платежной системы. «Chia – это то, как могла бы выглядеть система Bitcoin, если бы та разрабатывалась с учетом знаний, накопленных за последние 13 лет», – заявил в интервью Bloomberg управляющий партнер  Richmond Global Ventures Дэвид Фрейзи (David Frazee). Амбиции высоки, но учитывая критику Bitcoin за его воздействие на окружающую среду, вполне возможно появление  криптовалюты, которая будет экологически более чистой.


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

ссылка на оригинал статьи https://habr.com/ru/post/562678/

extendr: вызываем rust из R (и наоборот)

Зачем нужен Rust в R?

Первый вопрос, который должен возникнуть у читателя — а зачем вообще использовать Rust вместе с R? Ответ довольно прост: Rust — новый системный язык программирования, спроектированный специально для написания безопасного и легко распараллеливаемого кода. Rust довольно сложен в освоении (в сравнении с другими языками), но при этом предоставляет отличные инструменты для разработки. Rust имеет довольно неплохую ООП систему и очень много заимствует из функциональных языков программирования. Несмотря на дополнительную сложность из-за функциональных/ООП компонентов, Rust позиционируется как zero-cost abstraction язык, так же как и C++.

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

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

Что нужно, чтобы R код мог вызвать Rust-библиотеку?

На самом деле — не так уж много. R-пакеты могут содержать директорию src/, в которой находится исходный код на одном из компилируемых языков. С помощью src/Makevars или src/Makevars.win файлов (вариация make) можно контролировать процесс сборки, например, вызвав на одном из шагов cargo (см. пример здесь):

cargo build --release --manifest-path=rustlib/Cargo.toml

При этом Rust -библиотека должна собираться как crate-type = ["staticlib"]. Кроме непосредственной компиляции Rust-кода, нужно предоставить C-обертки к экспортируемым функциям, а так же добавить несколько магических вызовов специальных R-функций, которые объясняют R, какие именно функции и какого типа экспортируются из данной библиотеки (например, вот так).

Основная проблема — C-обертки и преобразование типов из R SEXP (фактически, специальный указатель) во что-то, совместимое с Rust, учитывая при этом специфику управления памятью в R (все эти ваши PROTECT, UNPORTECT, и т. д.). Как результат — легко создать примитивный прототип без функционала, практически невозможно написать достаточно большой проект.

Интегрируем R и Rust: три п̶р̶о̶с̶т̶ы̶х̶ шага

Шаг первый: баиндинги для заголовочных файлов R

Взаимодействие с R происходит через специализированный API, доступный обычно ввиде C/ C++ заголовочных файлов (см. $R_HOME\include\). Разумеется, вызывать эти методы можно практически из любого языка, но это неудобно — загловочные файлы невозможно подключить напрямую к Rust. К счастью, у этой проблемы уже давно есть решение: rust-bindgen (rust-lang/rust-bindgen). bindgen позволяет автоматически генерировать Rust-обертки из заголовочных файлов, и делает это довольно эффективно.

Так появился крейт libR-sys, который предоставляет баиндинги ко всем необходимым внутренним R функциям. Генерация баиндингов — вещь нетривиальная, bindgen зависит от clangи сложен в конфигурировании, поэтому мы предоставляем pre-computed (заранее сгененрированные) баиндинги для большинства платформ, поддерживающих R. Список включает в себя linux-x64 (созданный с помощью Ubuntu-20.04), win-x86/x64 (с помощью msys2, x86 может иметь проблемы в каких-то пограничных случаях), macOS включая 11 версию (по возможности), x64 и экспериментально arm64 (честно я не знаю, есть ли arm64 сборка R под macOS). Для каждой из упомянутых платформ/архитектур мы стараемся предоставить три версии баиндингов: oldrel, release, и devel, что соответствует «прошлой», «текущей» (сейчас это 4.1.0) и «находящейся в разработке» версиям R.

В качестве альтернативы баиндинги можно сгенерировать непосредственно в системе где компилируется R пакет, при условии что все необходимые зависимости присутствуют (особенная головная боль на Windows). Гипотетически, можно собрать R для неподдерживаемой платформы и прямо на месте сгененрирвоать баиндинги (если Rust поддерживает такую платформу).

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

Шаг второй: автоматизируем преобразование типов и экспорт функций

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

Прежде чем продолжить, я хочу сделать небольшое отступление. Вся идея проекта extendr и, в особенности, имплементация большей части Rust-крейтов, принадлежит Энди Томасону (@andy-thomason). Без его вклада, на мой субъективный взгляд, extendr в том виде, в котором он существует сейчас, был бы невозможен.

Вернемся обратно к коду. Как избавиться от боилерплейта? Легко, надо всего лишь распарсить исходный код Rust. Например, используя syn и подобные крейты. Моей экспертизы недостаточно, чтобы детально описать процесс парсинга и кодогенерации, но для конечного пользователя экспорт Rust функции становится невероятно простым. Во-первых, нужно пометить функции с помощью аттрибута #[extendr]:

#[extendr] fn add_i32(x : i32, y : i32) -> i32 { x + y }  #[extendr] fn add_vec(x : &[i32], y : &[i32]) -> Vec<i32> {      x.iter().zip(y.iter()).map(|v| v.0 + v.1).collect() }

Во-вторых, нужно явно объявить экспортируемые функции:

extendr_module! {   mod extendrtest;   fn add_i32;   fn add_vec; }

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

К сожалению, остается одно небольшое ограничение при интеграции Rust-кода в проект. Дело в том, что если в папке src/ отсутствуют файлы-исходники, то стандартная процедура компиляции R попросут игнорирует все остальное и библиотека не компилируется. Чтобы обойти это, в src/ добавляется единственный файл entrypoint.c, примерно следующего содержания:

void R_init_extendrtest_extendr(void *dll);  void R_init_extendrtest(void *dll) {   R_init_extendrtest_extendr(dll); }

Здесь R_init_extendrtest_extendr генерируется автоматически с помощью Rust-крейта, а R_init_extendrtest — непосредственно вызывается из R. Мы пока что не нашли способа избавиться от этого ограничения.

Некоторых изменений требуют и Makevars-файлы. Вот пример из одного из тестовых проектов:

LIBDIR = ./rust/target/release STATLIB = $(LIBDIR)/libextendrtest.a PKG_LIBS = -L$(LIBDIR) -lextendrtest  all: C_clean  $(SHLIB): $(STATLIB)  $(STATLIB): 	cargo build --lib --release --manifest-path=./rust/Cargo.toml 	 C_clean: 	rm -Rf $(SHLIB) $(STATLIB) $(OBJECTS)  clean: 	rm -Rf $(SHLIB) $(STATLIB) $(OBJECTS) rust/target

Фактически, мы отдельно компилируем Rust-крейт, а потом создаем совместимую с R библиотеку используя Rust-библиотеку и результат компиляции entrypoint.c.

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

extendr выполняет не только кодогенерацию на стороне Rust, он еще генерирует обертки на стороне R. Если предположить, что приведенный выше Rust код является частью пакета {extendrtest}, то становятся досутпны следующие функции:

extendrtest::add_i32(4L, 11L)  # [1] 15  extendrtest::add_vec(1:10, 10:1)  #  [1] 11 11 11 11 11 11 11 11 11 11 

Да, настолько просто.

Шаг третий: user-friendliness

В своей работе мы вдохновлялись такими проектами как {cpp11} — header-only пакет для интеграции C++11 кода. Так появился на свет {rextendr}, R — пакет без Rust-зависимости, который решает три основные задачи:

  • Создание шаблона пакета, использующего extendr, наподобие {usethis};

  • Компиляция и исполнение Rust — кода на лету, прямо в R-сессии. Именно это демонстрирует Анимация Для Привлечения Внимания;

  • Предоставление специальных knitr-модулей (engines), а именно {extendr} и {extendrsrc}, которые позволяют включать фрагменты Rust-кода (и результаты его выполнения) в ваш Rmarkdown прямо рядом с R-кодом, обеспечивая их взаимодействие.

Сейчас {rextendr} отправился на проверку в CRAN, и мы ждем результатов. Я думаю, самое время продемонстрировать несколько примеров именно с использованием {rextendr}. Сразу оговорюсь, для упрощения и воспроизводимости, я буду использовать {reprex}.

Самый простой пример это, конечно же,

rextendr::rust_function("fn hello_r() -> &'static str { \"Hello R!\" }") #> i build directory: 'C:\Users\...\AppData\Local\Temp\Rtmp259cVM\file10186cb44264' #> v Writing 'C:/Users/.../AppData/Local/Temp/Rtmp259cVM/file10186cb44264/target/extendr_wrappers.R'. hello_r() #> [1] "Hello R!"

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

rextendr::rust_function("fn add_i32(x : i32, y : i32) -> i32 { x + y }") #> i build directory: 'C:\Users\...\AppData\Local\Temp\Rtmp2P2cnQ\file2f7c65e8269a' #> v Writing 'C:/Users/.../AppData/Local/Temp/Rtmp2P2cnQ/file2f7c65e8269a/target/extendr_wrappers.R'. add_i32(42L, NA) #> Error in add_i32(42L, NA): unable to convert R object to primitive 

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

rextendr::rust_function(" fn add_i32_opt(x : Option<i32>, y : Option<i32>) -> Option<i32> {     match (x, y) {         (Some(a), Some(b)) => Some(a + b),         _ => None     } } ") #> i build directory: 'C:\Users\...\AppData\Local\Temp\Rtmpyg3uPw\file6587a897d2a' #> v Writing 'C:/Users/.../AppData/Local/Temp/Rtmpyg3uPw/file6587a897d2a/target/extendr_wrappers.R'.  add_i32_opt(NA, 42L) #> [1] NA add_i32_opt(42L, 100L) #> [1] 142

Хотите еще больше магии? Макрос R! выполняет внутри R-код, возвращая результат если операция была успешной. Как насчет

x <- 42L  y <- 100L  rextendr::rust_eval("R!(x)? * 2 + R!(y)? * 3") #> i build directory: 'C:\Users\...\AppData\Local\Temp\RtmpKeC23J\file32ec53677fc9' #> v Writing 'C:/Users/.../AppData/Local/Temp/RtmpKeC23J/file32ec53677fc9/target/extendr_wrappers.R'. #> [1] 384

Можно попробовать смешать переменные из R и Rust.

library(tibble) x <- 10:1 # Эта переменная на стороне R rextendr::rust_eval("call!(\"tibble\", x = R!(x), y = 1..=10)") #> i build directory: 'C:\Users\...\AppData\Local\Temp\RtmpcDWhlk\file45802f52dc5' #> v Writing 'C:/Users/.../AppData/Local/Temp/RtmpcDWhlk/file45802f52dc5/target/extendr_wrappers.R'. #> # A tibble: 10 x 2 #>        x     y #>    <int> <int> #>  1    10     1 #>  2     9     2 #>  3     8     3 #>  4     7     4 #>  5     6     5 #>  6     5     6 #>  7     4     7 #>  8     3     8 #>  9     2     9 #> 10     1    10

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

Для безопасной печати в Rout существует отдельный макрос : rprintln!.

x <- 42L rextendr::rust_eval("rprintln!(\"Hello from Rust! x = {}\", R!(x)?.as_integer().unwrap());") #> i build directory: 'C:\Users\...\AppData\Local\Temp\RtmpWQh3w0\file48e024f161ce' #> v Writing 'C:/Users/.../AppData/Local/Temp/RtmpWQh3w0/file48e024f161ce/target/extendr_wrappers.R'. #> Hello from Rust! x = 42

Пишем свой extendr-пакет

В этом разделе я просто приведу пример генерации пакета с использование {rextendr} и других стандартных инструментов:

pkg <- file.path(tempfile(), "myextendr") dir.create(pkg, recursive = TRUE) usethis::create_package(pkg) usethis::proj_activate(pkg) rextendr::use_extendr() rextendr::document() rextendr::document() hello_world()
Как это выглядит
pkg <- file.path(tempfile(), "myextendr") dir.create(pkg, recursive = TRUE) usethis::create_package(pkg) #> v Setting active project to 'C:/Users/.../AppData/Local/Temp/RtmpAVW4HZ/file122c180d1953/myextendr' #> v Creating 'R/' #> v Writing 'DESCRIPTION' #> Package: myextendr #> Title: What the Package Does (One Line, Title Case) #> Version: 0.0.0.9000 #> Authors@R (parsed): #>     * First Last <first.last@example.com> [aut, cre] (YOUR-ORCID-ID) #> Description: What the package does (one paragraph). #> License: `use_mit_license()`, `use_gpl3_license()` or friends to pick a #>     license #> Encoding: UTF-8 #> LazyData: true #> Roxygen: list(markdown = TRUE) #> RoxygenNote: 7.1.1 #> v Writing 'NAMESPACE' #> v Setting active project to '<no active project>' usethis::proj_activate(pkg) #> v Setting active project to 'C:/Users/.../AppData/Local/Temp/RtmpAVW4HZ/file122c180d1953/myextendr' #> v Changing working directory to 'C:/Users/.../AppData/Local/Temp/RtmpAVW4HZ/file122c180d1953/myextendr/' rextendr::use_extendr() #> v Creating 'src/rust/src'. #> v Writing 'src/entrypoint.c' #> v Writing 'src/Makevars' #> v Writing 'src/Makevars.win' #> v Writing 'src/.gitignore' #> v Writing 'src/rust/Cargo.toml'. #> v Writing 'src/rust/src/lib.rs' #> v Writing 'R/extendr-wrappers.R' #> v Finished configuring extendr for package myextendr. #> * Please update the system requirement in 'DESCRIPTION' file. #> * Please run `rextendr::document()` for changes to take effect. rextendr::document() #> i Generating extendr wrapper functions for package: myextendr. #> ! No library found at 'src/myextendr.dll', recompilation is required. #> Re-compiling myextendr #>   -  installing *source* package 'myextendr' ... #>      ** using staged installation #>      ** libs #>      rm -Rf myextendr.dll ./rust/target/x86_64-pc-windows-gnu/release/libmyextendr.a entrypoint.o #>      "C:/rtools40/mingw64/bin/"gcc  -I"C:/PROGRA~1/R/R-41~1.0/include" -DNDEBUG          -O2 -Wall  -std=gnu99 -mfpmath=sse -msse2 -mstackrealign  -UNDEBUG -Wall -pedantic -g -O0 -c entrypoint.c -o entrypoint.o #>      cargo build --target=x86_64-pc-windows-gnu --lib --release --manifest-path=./rust/Cargo.toml #>              Updating crates.io index #>             Compiling winapi-build v0.1.1 #>       Compiling winapi v0.3.9 #>       Compiling winapi v0.2.8 #>       Compiling proc-macro2 v1.0.27 #>       Compiling unicode-xid v0.2.2 #>       Compiling syn v1.0.73 #>       Compiling extendr-engine v0.2.0 #>       Compiling lazy_static v1.4.0 #>             Compiling kernel32-sys v0.2.2 #>             Compiling quote v1.0.9 #>             Compiling extendr-macros v0.2.0 #>             Compiling libR-sys v0.2.1 #>             Compiling extendr-api v0.2.0 #>             Compiling myextendr v0.1.0 (C:\Users\...\AppData\Local\Temp\RtmpAVW4HZ\file122c180d1953\myextendr\src\rust) #>              Finished release [optimized] target(s) in 33.09s #>      C:/rtools40/mingw64/bin/gcc -shared -s -static-libgcc -o myextendr.dll tmp.def entrypoint.o -L./rust/target/x86_64-pc-windows-gnu/release -lmyextendr -lws2_32 -ladvapi32 -luserenv -LC:/PROGRA~1/R/R-41~1.0/bin/x64 -lR #>      installing to C:/Users/.../AppData/Local/Temp/RtmpAVW4HZ/devtools_install_122c37bd1965/00LOCK-myextendr/00new/myextendr/libs/x64 #>   -  DONE (myextendr) #> v Writing 'R/extendr-wrappers.R'. #> i Updating myextendr documentation #> i Loading myextendr #> Writing NAMESPACE #> Writing NAMESPACE #> Writing hello_world.Rd rextendr::document() #> i Generating extendr wrapper functions for package: myextendr. #> i 'R/extendr-wrappers.R' is up-to-date. Skip generating wrapper functions. #> i Updating myextendr documentation #> i Loading myextendr #> Writing NAMESPACE #> Writing NAMESPACE hello_world() #> [1] "Hello world!"

hello_world() написана на Rust и автоматически экспортируется в R. Обратите внимание, что hello_world.Rd был создан при вызове rextendr::document() (аналог devtools::document()). Дело в том, что rextendr-парсер воспринимает /// комментарии как R комментарии. Rust функция выглядит вот так

 /// Return string `"Hello world!"` to R. /// @export #[extendr] fn hello_world() -> &'static str {     "Hello world!" }

Что автоматически генерирует R обертку

#' Return string `"Hello world!"` to R. #' @export hello_world <- function() .Call(wrap__hello_world)

и, как результат, обновляет документацию и NAMESPACE с помощью {roxygen2}.

Если этого мало

Здесь я хотел бы коротко описать последнюю важную фичу extendr. Крейт позволяет экспортировать не просто функции, а целые типы. Легким движением руки можно пробросить кастомный тип из Rust в R , а инстансы этого типа — передавать в обе стороны как ссылки. Это позволяет заполучить ООП в R в традиционном (object-first) стиле, модицифируя in-place объекты, созданные и доступные из Rust:

Мутабельный объект
rextendr::rust_source(code = " struct Counter {     n: i32, }  #[extendr] impl Counter {     fn new() -> Self {         Self { n: 0 }     }          fn increment(&mut self) {         self.n += 1;     }          fn get_n(&self) -> i32 {         self.n     } } ") #> i build directory: 'C:\Users\...\AppData\Local\Temp\RtmpWOu1pt\file5318783e2176' #> v Writing 'C:/Users/.../AppData/Local/Temp/RtmpWOu1pt/file5318783e2176/target/extendr_wrappers.R'.  cntr <- Counter$new() cntr$get_n() #> [1] 0 cntr$increment() cntr$increment() cntr$get_n() #> [1] 2

Вместо заключения

Статья получилась гораздо длиннее и сумбурней, чем я ожидал. Тем не менее, я не успел описать все возможности extendr. Этот проект амбициозный и еще далек от завершения, но я считаю, что давно пришло время добавить поддержку Rust в R, а главное сделать взаимодействие этих языков удобным. Мы осторожно надеемся, что в конечном итоге сможем добавить официальную поддержку Rust, наравне с C / C++. К сожалению, сейчас ее отсутствие накладывает на нас некоторые ограничения.

Отдельным вызовом было заставить эту систему работать на Windows. Мы столкнулись со множеством проблем, но на данный момент нам удалось справиться практически со всеми трудностями. Для запуска на Windows extendr требует стандартный Rust — тулчейн, stable-x86_64-pc-windows-msvc, с дополнительными целями (targets) x86_64-pc-windows-gnu и i686-pc-windows-gnu, а также Rtools40v2 (последняя версия на момент написания, отличается от Rtools40).

Скудную документацию можно найти здесь и в репозиториях проекта extendr.

Спасибо что дочитали до конца!

ссылка на оригинал статьи https://habr.com/ru/post/554176/

PM-школа от CS центра: итоги первого года в онлайне глазами выпускников

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

До 20 июня открыт набор на третий поток обучения по направлению Product Management с преподавателями и наставниками из ведущих мировых IT-компаний. Подробнее о школе смотрите в записи  Дня открытых дверей онлайн и на нашем сайте.

“До” и “После”: зачем вы изначально подавали заявку на конкурс и что получилось в результате?

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

Я дважды пытался запустить стартап и дважды спотыкался о собственную некомпетентность. Профессия Product Manager предполагает, что ты знаешь как из пункта А привести продукт в пункт Б. Когда я увидел, что на продакта будут учить в Computer Science Center, я сразу подал заявку: все мои знакомые, которые проходили курсы в CS центре, говорили о лучшем опыте обучения в своей жизни. 

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

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

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

Результат сейчас — обучение завершено. Закрыв одну дверь, я открыл две новые: Business Аnalysis и Product Management. Сейчас я работаю в IT-компании и двигаюсь по треку управляющего цифровыми проектами, потому что мне нужен базовый опыт. После перейду в управление продуктами. Рассчитываю совершить карьерный маневр в течение этого года.

Сначала был конкурс: первое впечатление от знакомства и советы бывалых будущим абитуриентам.

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

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

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

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

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

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

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

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

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

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

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

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

Второй семестр был менее динамичным, однако тут настало время прохождения индивидуальной практики в компаниях. Мне повезло попасть к хорошему ментору — Матвею Брыксину, Product Lead в Arrival. Нагрузка была умеренной, в этот раз я успевал делать задачки хорошо, а не в режиме стартапера, «которому нужно было вчера». Работая для корпорации, я получил совершенно другой опыт. Мне было интересно заниматься реальной проблемой бизнеса. 

Атмосфера на курсе: ощущения от взаимодействия с организаторами, преподавателями и друг другом.

Когда я рефлексирую на тему школы, то слово, которое приходит на ум — это «живой». Люди на курсе живые и очень разные, как преподаватели/кураторы, так и студенты. Благодаря этому в рамках курса создается очень благоприятная и дружелюбная атмосфера получения новых знаний. Все готовы делиться друг с другом опытом, информацией, фидбэком. Даже сама программа школы специально подстраивается  под поток.

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

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

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

Что дальше: что вы будете делать с полученными знаниями, опытом и связями после выпуска?

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

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

Знания, которые я получил в процессе обучения, помимо собственно понимания, какие процессы и фреймворки существуют в области создания продуктов, значительно расширили мой профессиональный и общий кругозор. Хоть я и не планирую в ближайшее время переходить на позицию продакт-менеджера, многое я смогу применить в роли Lead-engineer. Большая часть вопросов относительно ожиданий бизнеса и прогнозирования хода проекта стали разрешимы с меньшим объемом коммуникаций. Да и возможность видеть что-либо на большем уровне абстракции — само по себе прекрасно и интересно.

Курс был однозначно полезен, и я рад, что смог дойти до конца и получить такие ценные знания!

Новые идеи для работы и жизни

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

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

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

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


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

Заявки принимаются до 20 июня на https://pmcsc.ru/ 

ссылка на оригинал статьи https://habr.com/ru/company/JetBrains-education/blog/562702/

Алюминиевый профиль как универсальный ресурс для сборки чего угодно. Часть 2

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

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

Все можно построить из профиля


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

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

С их помощью крепить профиль можно под любым углом — 30, 45 или 60 градусов — изготовить подобное несложно. Пример нестандартного пластикового соединения показан выше.

Нестандартный — не означает сложный


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

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

Пример: сложные углы без проблем


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

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

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

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

Небольшая хитрость: замена т-образной гайки, вставки и чего угодно


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

Альтернатива — использование обычных гаек вместо Т-образных. Стандартные гайки совместимы не со всеми разновидностями профиля, а лишь с Misumi 3 Series. Компания Misumi предлагает и специализированные гайки, которые стоят около 9 долларов за 100 штук. В то же время обычные M3 стоят примерно 0,88 доллара за 100 штук. Их мы и будем использовать, решив попутно парочку проблем.

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

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

Толщина элемента соответствует ширине сопла 3D-принтера, что позволяет без проблем поместить пластиковое крепление в пазу профиля, экономить пластик и быстро печатать. Излишним будет говорить, что этот элемент — одноразовый, вторично его использовать после разбора соединения нельзя.

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

ссылка на оригинал статьи https://habr.com/ru/company/selectel/blog/562038/

ИТМО. Первый классический?

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

Вместо вступления

Что бы мои слова не были голословными хочется уточнить некоторые детали. Я закончил ИТМО совсем недавно по направлению “Программная инженерия”. Сейчас я являюсь Middle разработчиком и совмещаю эту деятельность с преподаванием в университете в должности  младшего преподавателя.

Как проходило мое обучение

Первый год

Когда ты только приходишь из школы ты зелен и плохо понимаешь что тебя ждет. И университет вообще не имеет переходного периода, ты с головой попадаешь в студенческую жизнь. Есть огромное количество всяких движух (студ организации и прочее, но сил и времени на это хватает очень у немногих). Но перейдем же к учебе. Сразу же ты сталкиваешься с предметами такими как программирование, системная разработка математика и физика. У каждого преподавателя свои требования. И только приходя на предмет, пытаясь сдать первое домашнее задание ты разбиваешься о требования твоего наставника. В ИТМО большой акцент поставлен на самообразование и на первых домашних заданиях кажется, что если ты выполнил задание — ты сделал все что от тебя хотели. Но это совсем не так. Когда преподаватель спрашивает не только работает ли твоя работа, но и почему она работает, это очень усложняет сдачу. Вследствие чего, на одного студента может уходить до получаса времени. Так что на практических занятиях образуются очереди, возникают на этой почве конфликты с одногруппниками, иногда появляются шоковые ситуации, когда студенты могут приходить за много часов до пары, чтобы гарантированно попасть к преподавателю.

Второй год

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

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

По воспоминаниям этот год был самым тяжелым, но наиболее полезным для обретения работы.

Третий год

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

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

Четвертый год

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

Что изменилось 

В данном разделе хочется описать, что изменилось с моего времени, и что встретит будущего первокурсника. Из приятный мелочей в университете сделали ремонт, кабинеты выглядят приятно и современно, везде появились розетки, отдельно выделили коворкинг, где студенты могут пользоваться своей или университетской техникой 24\7. Больше нет проблемы “Где бы посидеть в универе, что бы что-то сделать”.

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

Ужесточилась система отчислений, стали отчислять меньше, но если уже добрался до этого вспять повернуть невозможно, и даже восстановиться не дадут.

Что я вынес из университета

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

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

Заметки, которые никуда не влезли

Егэ не решает. Если для поступления важен каждый балл, то после разница уже стирается. Забавно сложилось, что в моей группе, все кто обладал баллом более 290, покинули стены ИТМО без диплома.

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

Вместо заключения

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

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

P.S.

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

ссылка на оригинал статьи https://habr.com/ru/post/562708/