Статья пока еще не закончена, и она не нова конено, но выкладываю ее, так как мне нравится популяризировать замечательные GNU и просто свободные иструменты очень удобные и общепринятые в науке но несколько находящиеся в тени для тех, кто развивался как ученый в постсоветской научной вертикали, и был изолирован в некотором смысле от многих западных наработок. Буду давать ссылку на нее своим знакомым, тем, кто в состоянии оценить величие рекомендуемых инструментов и постепенно дорабатывать её.
Сначала немного о питоне
Питон местами слабоват в плане производительности, многопоточности, и конечно не идеален как язык, как не идеален любой другой. И тем не менее я люблю его, хотя и пока еще знаю хуже чем C# например. Причин, почему я использую Python, будучи разработчиком на C# и немного на Java и C, много.
Вот некоторые из них - на нем очень легко ставить эксеременты, прототипировать, а так же есть огромная полезная база кода наработанная специалистами как computer science так и учеными, которые используют питон для scientific purposes в своих прикладных областях. А еще в проектах в которых я участвовал иногда довольно весомая часть была сделана на Python, да и сам очень часто сталкивался с местами, в которых применение Python было крайне удобным. И вообще, как не любить язык, которым живет такое замечательное комьюнити.
Примеры таких прикладных областей: электропривод, динамические системы, статистика, физика высоких давлений. Я специально указал именно эти области, потому что знаю ребят которые используют питон именно в них. Это мои однокласники, одногрупники, и бывшие коллеги которых я позаражал идеей использования питона вместо excel, pascal и visual basic. Иногда вместо MalLab. Правда, тут нужно отдать должное, Python не заменяет пока MatLab, Octave а так же системы компьютерной алгебры типа Maxima или Maple, скорее дополняет их.
Почему я рекомендовал им питон? Потому что он прост в освоении. От человека работающего в области электротехники или мат. статистики вряд ли стоит ожидать знания как правильно разрабатываать на Java или на C++. Да и вопрос трудоемкости. И потому что он очень широко используется научным сообществом для этих целей по всему миру, а следовательно будешь говорить с коллегами на одном языке во время дискуссий. Так же не нужно слишком выделываться с архитекрурами и чистотой парадигм. Бери и решай задачу. Хочешь - пиши кусочки функциональщины, хочешь - заройся в ООП, хочешь динамики и метапрограммирования - используй, хочешь - пиши обычный структурный код. Но все это вторичное. Главное - бери и решай задачу в своей предметной области.
Вопрос производительности прост. Если ее не хватает - оптимизируй. Если все равно не хватает, то только тогда задумайся о реализации на быстром языке типа C. Но в большинстве случаев, если твой алгоритм во время рассчетов работает в 10 раз медленнее, это не срашно. В крайнем случае найди компьютер побыстрее... Страшно, если твой алгоритм плохо спроектирован или просто по своей природе слишком аппетит имеет большой и работает с BigO(2^N) или еще большей сложностью... А от проблем связанных с этим не спасет ни Java ни C ни ASM.
Привожу список широкоизвестных и очень хороших инструментов используемых не только в компьютерной науке но и в других направлениях c выдержками из википедии и собственными пояснениями:
Могу рекомендовать их, так как имел возможность кое что использовать оттуда.
Так же, стоит сделать запрос "Python в науке" в гугл, подборка ссылок на русском будет весьма приличной.
Python являестя языком очень общего назначения и в некоторых задачах, например при работе с деревьями, удобнее использвать функциональные языки, я сталкивался с подходом одного моего хорошего знакомого к работе с деревьями на Lisp, код получался ну очень выразительным. Поэтому, практикующему ученому стоит подумать и о применении функциональных языков. Да, Octave впечатляет тем как там удобно работать с матрицами...
Инструментов масса, все не указать, стараюсь упомянуть самое распрастранённое и широкоизвестное. Думаю, что то забыл указать, потому еще добавлю позже.
Сначала немного о питоне
Питон местами слабоват в плане производительности, многопоточности, и конечно не идеален как язык, как не идеален любой другой. И тем не менее я люблю его, хотя и пока еще знаю хуже чем C# например. Причин, почему я использую Python, будучи разработчиком на C# и немного на Java и C, много.
Вот некоторые из них - на нем очень легко ставить эксеременты, прототипировать, а так же есть огромная полезная база кода наработанная специалистами как computer science так и учеными, которые используют питон для scientific purposes в своих прикладных областях. А еще в проектах в которых я участвовал иногда довольно весомая часть была сделана на Python, да и сам очень часто сталкивался с местами, в которых применение Python было крайне удобным. И вообще, как не любить язык, которым живет такое замечательное комьюнити.
Примеры таких прикладных областей: электропривод, динамические системы, статистика, физика высоких давлений. Я специально указал именно эти области, потому что знаю ребят которые используют питон именно в них. Это мои однокласники, одногрупники, и бывшие коллеги которых я позаражал идеей использования питона вместо excel, pascal и visual basic. Иногда вместо MalLab. Правда, тут нужно отдать должное, Python не заменяет пока MatLab, Octave а так же системы компьютерной алгебры типа Maxima или Maple, скорее дополняет их.
Почему я рекомендовал им питон? Потому что он прост в освоении. От человека работающего в области электротехники или мат. статистики вряд ли стоит ожидать знания как правильно разрабатываать на Java или на C++. Да и вопрос трудоемкости. И потому что он очень широко используется научным сообществом для этих целей по всему миру, а следовательно будешь говорить с коллегами на одном языке во время дискуссий. Так же не нужно слишком выделываться с архитекрурами и чистотой парадигм. Бери и решай задачу. Хочешь - пиши кусочки функциональщины, хочешь - заройся в ООП, хочешь динамики и метапрограммирования - используй, хочешь - пиши обычный структурный код. Но все это вторичное. Главное - бери и решай задачу в своей предметной области.
Вопрос производительности прост. Если ее не хватает - оптимизируй. Если все равно не хватает, то только тогда задумайся о реализации на быстром языке типа C. Но в большинстве случаев, если твой алгоритм во время рассчетов работает в 10 раз медленнее, это не срашно. В крайнем случае найди компьютер побыстрее... Страшно, если твой алгоритм плохо спроектирован или просто по своей природе слишком аппетит имеет большой и работает с BigO(2^N) или еще большей сложностью... А от проблем связанных с этим не спасет ни Java ни C ни ASM.
Привожу список широкоизвестных и очень хороших инструментов используемых не только в компьютерной науке но и в других направлениях c выдержками из википедии и собственными пояснениями:
- NumPy - это расширение языка Python, добавляющее поддержку больших многомерных массивов и матриц, вместе с большой библиотекой высокоуровневых математических функций для операций с этими массивами.
- SciPy - это открытая библиотека высококачественных научных инструментов для языка программирования Python. SciPy содержит модули для оптимизации, интегрирования, специальных функций, обработки сигналов, обработки изображений, генетических алгоритмов, решения обыкновенных дифференциальных уравнений и других задач, обычно решаемых в науке и при инженерной разработке. Библиотека разрабатывается для той же аудитории, что MATLAB и Scilab.
- matplotlib. библиотека на языке программирования Python для визуализации данных двумерной (2D) графикой. Получаемые изображения могут быть использованы в качестве иллюстраций в публикациях
- sage. система компьютерной алгебры, покрывающая много областей математики, включая алгебру, комбинаторику, вычислительную математику и матанализ. Имеет интерфейс ввода на основе командной строки, с использованием мультипарадигменного языка Python.
На скриншоте с помощью VPython отрисован лабиринт в 3D и просчитанные алгоритмом клетки (A* красные - путь, синие - стены, голубые Openlist, желтые Closelist)
- Сейчас я упорно осваиваю машинное обучение, и потому обязательно нужно сослаться на SciKit-Learn как на коллекцию отлично отлаженных наработок для машинного обучения в Python, об этом будет отдельная статья, (пока есть только черновик, потому что только изучаю материал). Кстати, у меня есть друг и напарник, молодой ученый, который уже дозрел до использования этого инструмента в машинном обучении при написании своей докторской, над которой он упорно работает. Горжусь тем, что дорос до того уровня, когда немного могу коснультировать его по вопросу применения программных инструментов и подходов в машинном обучении.
- SimPy, PyDSTool - позволяют симулировать различные процессы (движение трафика, физические процессы etc)
Из не-Python вещей хочу особенно отметить
- Scilab описание из википедии: an open source, cross-platform numerical computational package and a high-level, numerically oriented programming language. It can be used for signal processing, statistical analysis, image enhancement, fluid dynamics simulations, numerical optimization, and modeling, simulation of explicit and implicit dynamical systems and (if the corresponding toolbox is installed) symbolic manipulations. MATLAB code, which is similar in syntax, can be converted to Scilab. Scilab is one of several open source alternatives to MATLAB.
- Maxima - cвободная система компьютерной алгебры, написанная на языке Common Lisp. Я бы сказал это стержень всех систем компьтерной алгебры вокруг которых повзрослели MatLab, Maple, Octave. Совсем недавно была частично потрированна на андроид, работы я так понял еще ведутся, но многое уже вполне прилично сделано, вклячая plot2d и 3d
- Octave представляет интерактивный командный интерфейс для решения математических задач, а также проведения численных экспериментов. Я с ним столкнулся при прохождении курса по машинному обучению, был впечатлен развитыми средствами работы с векторами и матрицами. Имеются отличные свободные front-ends. Мне очень понравился QtOctave.
- Язык R - отличный инструмент для работы со статистикой. Есть открытые и коммерческие реализации, причем имеется поддержка параллельных вычислений. Oracle применяет R для работы с NoSQL источниками данных, а так же применяет MapReduce с использованием R на базе Apache Hadoop. В англоязычной википедии описание таково: R is an open source programming language and software environment for statistical computing and graphics. The R language is widely used among statisticians for developing statistical software and data analysis.
- MapReduce - пояснять тут нечего, просто стоит всегда помнить, что при необходимсти обработать большое количество данных (неподъемное для одной выделенной машины), можно воспользоваться распределенным Map Reduce (например Apache Hadoop). В исследовательской работе это может сильно помочь.
- GNU Plot - не более чем система визуализации. Отрисовывает 2D и 3D графики и визуализирует данные, при чем имеет свою систему команд, и легко может быть интегрированна в ваш софт. Maxima, Octave и Matplotlib всю свою визуаллизацию базируют на GNU Plot.

- Ах да, не забываем про LaTex. Это хоть и не инструмент программирования, но ученому регулярно нужно работать над представлением математики и выкладок в доносимом до научного сообщества виде.
Могу рекомендовать их, так как имел возможность кое что использовать оттуда.
Так же, стоит сделать запрос "Python в науке" в гугл, подборка ссылок на русском будет весьма приличной.
Python являестя языком очень общего назначения и в некоторых задачах, например при работе с деревьями, удобнее использвать функциональные языки, я сталкивался с подходом одного моего хорошего знакомого к работе с деревьями на Lisp, код получался ну очень выразительным. Поэтому, практикующему ученому стоит подумать и о применении функциональных языков. Да, Octave впечатляет тем как там удобно работать с матрицами...
Инструментов масса, все не указать, стараюсь упомянуть самое распрастранённое и широкоизвестное. Думаю, что то забыл указать, потому еще добавлю позже.
Комментариев нет:
Отправить комментарий