Разрушая миф о кривой обучения Rust.

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

С момента появления C и COBOL языки программирования высокого уровня создавались с одной и той же целью - производительность программиста выше производительности машины. Если бы это было не так, мы все с удовольствием писали бы приложения на ассемблере. Подобно компьютерному дизайну, дизайн языков программирования всегда был и был упражнением в поиске компромиссов. Когда был создан C, он хотел преодолеть чрезвычайно глючный код сборки, при этом жертвуя некоторой производительностью (теоретически, хорошо написанный код C никогда не может быть таким же быстрым, как хорошо написанный код сборки!), Но это никогда не получалось. достаточно высокий, чтобы исключить ошибки указателя. Виртуальная машина Java была создана с учетом портативности, но за счет производительности и сложности. Ruby променял все на выразительность и продуктивность, в то время как Python променял все на обещанный простой, универсальный язык.

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

Rust, возможно, жертвуя простотой своей начальной кривой обучения, ставит вас на место водителя, оснащенного очень умным инструктором по вождению, управляющим дробовиком. Это единственный язык, который я знаю, который достиг очень высокого уровня абстракции, не жертвуя преимуществом близости к «голому железу» (абстракция с нулевой стоимостью). Это означает, что как только вы научитесь свободно говорить на Rust, вы по умолчанию будете писать бескомпромиссно быструю программу.

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

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

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

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

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

- Марвин Мински, Машина эмоций

У каждого из нас есть несколько разных способов узнать и что-то «ощутить», и когда один способ не приводит к пониманию, мы просто продолжаем переключаться на другой. Вот как мы учимся. Когда у нас заканчиваются эти способы, мы просто бросаем курить. Похоже, что Rust может соответствовать разным образам мышления. Это то, что делает возможным и полезным изучение Rust в течение длительного периода времени.

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

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