Цель Software Carpentry состоит в том, чтобы научить ученых лучше работать с программным обеспечением, как если бы это было любое другое лабораторное оборудование. Теперь у нас есть свой взгляд на «Лучшие практики», и это урок для всех нас, учёных или нет.
Software Carpentry учит ученых работать с программным обеспечением более логичным и организованным способом, чем это обычно бывает. Раньше лабораторное оборудование было в основном аппаратным, и оно было важным компонентом любого эксперимента. Это было выставлено на обозрение и изучено другими учеными. Но не так с большей частью программного обеспечения и даже с данными, которые используются в большинстве современных экспериментов. Ученые склонны использовать случайный подход к программированию, потому что это намного проще, чем аппаратное обеспечение. Конечно, все прекрасно знают, что это легче только при первом запуске. По мере того, как вы медленно запутываете себя в логические узлы, работать с ними становится все труднее и труднее. В результате многие ученые склонны скрывать свой код, то же самое и с необработанными данными.
Дело в том, что описанный выше сценарий применим не только к ученым, но и практически ко всем, кто использует или создает программное обеспечение чем-либо, кроме совершенно тривиальных.
В недавно опубликованной статье Software Carpentry описывается то, что она считает «передовой практикой», и этот документ имеет значение, выходящее далеко за рамки строго научного.
В нем представлены 24 конкретных вещи, которые ученые или программисты в целом могут сделать, чтобы сделать больше за меньшее время и с меньшими усилиями:
Пишите программы для людей, а не для компьютеров.
Программа не должна требовать от читателя одновременного удержания в памяти более чем горстки фактов.
Делайте имена последовательными, отличительными и значимыми.
Сделайте стиль кода и форматирование согласованными.
Позвольте компьютеру делать всю работу.
Заставьте компьютер повторять задачи.
Сохраните последние команды в файл для повторного использования.
Используйте инструмент сборки для автоматизации рабочих процессов.
Вносите постепенные изменения.
Работайте маленькими шагами с частой обратной связью и корректировкой курса.
Используйте систему контроля версий.
Поместите все, что было создано вручную, в систему контроля версий.
Не повторяйте себя (или других).
Каждая часть данных должна иметь единственное авторитетное представление в системе.
Модулируйте код, а не копируйте и вставляйте.
Используйте код повторно вместо того, чтобы его переписывать.
Планируйте ошибки.
Добавляйте в программы утверждения, чтобы проверить их работу.
Используйте готовую библиотеку модульного тестирования.
Превратите ошибки в тестовые примеры.
Используйте символьный отладчик.
Оптимизируйте программное обеспечение только после того, как оно заработает правильно.
Используйте профилировщик для выявления узких мест.
Пишите код на максимально возможном языке.
Дизайн и цель документа, а не механика.
Документируйте интерфейсы и причины, а не реализации.
Вместо того, чтобы объяснять, как это работает, рефакторируйте код.
Вставьте в это программное обеспечение документацию по программному обеспечению.
Сотрудничайте.
Используйте предварительную проверку кода.
Используйте парное программирование, когда знакомите кого-то с новичком и решаете особо сложные задачи.
Используйте инструмент отслеживания проблем.
Более подробное объяснение каждого из них можно найти в документе, который можно загрузить бесплатно.