Взгляд на философию программирования НАСА

  • 17-08-2020
  • комментариев

Космический центр Кеннеди. Тим Слоан / AFP / Getty Images

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

НАСА должно прорваться сквозь чушь.

Ставки высоки при написании программного обеспечения, связанного с безопасностью. Дэвид МакНью / Getty Images

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

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

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

«Кто твой наставник?» Это обычная проблема для любой пары вспотевших программистов НАСА, избегающих зрительного контакта, и это благодаря стремлению агентства обеспечить, чтобы у каждого программиста был наставник. Это может быть на уровне бизнеса, с программой OSBP Mentor-Protégé, внутренним проектом NEXT или с Cross-Center Connection агентства Pathways (PAXC). Интересно, что вам не нужно изо всех сил стараться получить к нему доступ, потому что всем нам с самого начала назначены личные наставники. Идея о том, что у программиста не может быть никого, способного и обладающего большим опытом игнорировать его индивидуальный прогресс, близка к ужасающей для космической программы.

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

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

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

Возьмем, к примеру, Джина Амдала. Он был одним из первых компьютерных пионеров с интересным вопросом: какова эффективность улучшения одного компонента системы? Предположим, что пятьдесят процентов времени работы вашей программы было улучшено в четыре раза (вау!), И теперь мы хотим узнать, насколько быстро работает приложение. Другими словами, что-то заняло время T1 для завершения, и теперь часть этого чего-то (которая берет некоторую долю f от T1) работает в k раз быстрее. Я избавлю вас от математики, хотя это очень просто - определите новое время T2, используя T1, f, k, и выразите относительное увеличение производительности как отношение T1 и T2. В итоге вы получите следующее уравнение:

Рис. 1 - Закон Амдала. Автор предоставил

Позвольте закону Амдала осознать… Продолжая предыдущий пример, чтобы узнать, насколько быстро ваше приложение, просто примените формулу:

Рис. 2 - Применение закона Амдала. Автор предоставил

Это дает 1,6. Хотя вы взяли половину всей своей программы и оптимизировали ее, чтобы она работала в четыре раза быстрее, в целом система работает всего в 1,6 раза быстрее. Давайте шокируем себя дальше. Допустим, вы берете какой-то другой компонент, и время, необходимое для его запуска, теперь равно нулю (k стремится к бесконечности). Вы получаете частный случай закона Амдала:

Рис. 3 - Частный случай закона Амдала. Автор предоставил

Предположим, что этот компонент составляет 60% времени работы вашей программы, и теперь он фактически не занимает времени для его запуска. Теоретическое максимальное ускорение составляет 2,5… Закон Амдала гласит, что для значительного повышения скорости системы нам придется улучшить очень большую ее часть. Простая правда, но легко забываемая. Закон часто используется в параллельных вычислениях для прогнозирования ускорения с использованием многоядерных процессоров, и Джулиан Браун переформулирует его в этом контексте: «По сути, закон гласит, что хотя процесс может быть разложен на шаги, которые затем могут выполняться параллельно, время, затрачиваемое на весь процесс будет существенно ограничен сериализованными шагами ». (источник)

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

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

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

Ведущий: «Мне нравятся новые функции нашего приложения для наших клиентов, и вы сказали, что скачали библиотеку для их написания?»

Младший: «Ага. Пока все работает нормально ».

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

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

Ведущий: * PLONK *

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

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

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

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

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

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

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

Компьютерные системы: взгляд программиста

Компьютерная система: взгляд программиста была очень важной в моей карьере, и, если это важно, это моя любимая книга по программированию. Рассматриваемые здесь темы - это та основа, которую, я думаю, должен иметь каждый. По крайней мере, тщательное изучение глав 1–3, иерархии памяти и системного ввода-вывода открывает глаза. Если вы работаете над чем-то связанным с Интернетом, конечно же, уместна глава о сетевом программировании.

Поиск единомышленников

Есть небольшое сообщество под названием Handmade Network с невероятной командой (спойлер: я часть команды), поскольку мы пытаемся создать место, где мы можем отойти от современного разговора о программном обеспечении и вместо этого поговорить о вещах, которые я заложил. прочь. Мы так же уязвимы, как и другие сообщества, чтобы впасть в догмы (и мы делали это в прошлом), но мы стараемся осознавать это.

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

Связанная пресса

Абнер Коимбре был назван Стажером года Космического центра Кеннеди в 2015 году и вошел в десятку лучших новаторов Кеннеди 2016 года. Вы можете найти Абнера в Twitter, Twitch или по электронной почте.

комментариев

Добавить комментарий