12 декабря 2020, 18:10
Такое можно услышать от многих молодых и взрослых людей. Однако, после недолгого гугления выясняется, что понятие "программист" такое же огромное как "доктор". Все сразу и одновременно охватить невозможно, поэтому давайте разберемся в основных направлениях по котором можно развиваться. Если говорить в кратце то программирование это написание программ (ваш кэп). Эти программы нужы для того, чтобы автоматизировать какую-либо деятельность или для развлечения. Например программы управления станками на заводе, автопилот в самолете, браузер в интернете, операционна система, программы управления бухгалтерией, программы для создания 3Д моделей, игры, видео, проведение научных экспериментов, распространение инфорации… В общем практически во всех видах деательности человека присутсвует программирование. Правильнее говорить разработка программного обеспечения (ПО). Я например занимаюсь разработкой ПО для автоматизации инженерных и производственных процессов. Все чем вы пользуетесь скорее всего было создано на какой либо фабрике или заводе. Изделия могут быть совершенно разными: смартфон, автомобиль, шампунь, пакелик чипсов, самолет, куртка, велосипед телевизор и т.д. Практически все изделия производятся массово, хотя возможны некоторые изменения под конкретных людей или некоторые требования. Так устроена производственная компания Например, чтобы создать автомобиль для начала надо придумать концепт и желательно показать его работоспособность и преимущества перед уже существующими аналогами (Research, Proof of Concept). Дальше этот концепт начинают прорабатывать, если изделие состоит из множества сложных компонентов, то разрабатываются технических требования на эти компоненты (Requirement Decomposition), в сложных система используется системное моделирование (Systems Modeling). Далее начинается процесс проектирования: создаются 3D модели на компьютере (Computer Aided Design); эти модели расчитывают на различные характеристики (Computer Aided Engineering), чтобы изделие и его компоненты не сломались при первом же использовании (а сломались ровно после гарантийного срока и не позже :)) и наконец создаются технологические процессы для производства всего этого (Computer Aided Manufacturing), чтобы потом произвести на заводах и собрать (Planning and Execution). Как известно в автомобиле есть огромное колличество различных компонентов (деталей). И на каждую деталь существует документация: виртуальные модели, расчеты, проиводственные процессы. А еще надо не забывать, что не все получается с первого раза и в процессе проектирования возникают корректировки, новые решения (Revision Management). В этих процессах участвуют огромное колличество людей. И всеми этими данными, процессами и людьми надо управлять и все это надо хранить. Для этого существуют системы управления данными (Product Data Management), системы планирования производства и системы управления производством (Manufacturing Execution System). А все вместе это называется управление жизненным циклом изделия (Product Lifecycle Management). И это я еще не касался управлением самой компанией, бизнесом, бухгалтерией, поставками и продажами клиентам (Enterprise Resource Planning). А как же компании, которые занимаются разработкой ПО, ведь у них продукт это ПО? Да и для этого есть свой мир управления жизненным циклом приложений (Application Lifecycle Management, ALM). Здесь применение средств автоматизации процессов еще более необходимо, так как наплодить кучу файлов куда проще чем кучу бумаги. Про ALM много всем известно и чтобы не раздувать статью я отправлю вас по ссылке за знаниями. Application lifecycle Ну так вот о чем это я. Ах да, разработка ПО. Как видно систем много и они мягко говоря не особо понятны. Но без них вы бы врятли сейчас вообще читали эту статью, так как читать ее было бы не с чего. Итак ПО — это целая система, которая состоит из отдельных модулей, которые отвечают за разные функции системы. Для того чтобы создать ПО надо вначале понять что вообще должно делать это ваше ПО. Практически все программы состоят из различных модулей, которые отвечают за те или иные функции системы. Например на любимом вашем смартфоне есть модуль для вывода картинки на экран, есть модуль для пересылки файлов, для передачи и получения данных по интернету, для распараллеливания задач и оочень много чего еще. Понять как различные компоненты должны взаимодействовать это важнейшая задача и она называется проектирование архитектуры ПО. Это самое главное! Причем архитектура есть как у всей системы, так и у отдельной маленькой программы. Например какой вид обхода графа вы создадите и как будете обрабатывать информацию его узлов (последовательная обработка на лету, раскидывание по потокам, колбэк функции и т.д.). Любой разработчик ПО обязать это понимать. Если он это не понимает то он еще не разработчик ПО. Но и это еще не все. Как можно понять какая архитектура будет лучше, если не понимаешь какие задачи должно решать это ПО? Например создание 3D моделей состоит не просто в создании точек, линий и поверхностей. Все эти объекты должны быть связаны между собой. Даже простейший кубик: если я изменю координаты одной точки, то должны измениться также связанные с ней кривые и поверхности. Если для создания скругления между двумя поверхностями пользователь должен вырисовывать каждую поверхность скругления вручную, то он просто ахренеет и пошлет все это дело. Он хочет просто выделить поверхности между которыми надо сделать скругление и задать радиус (в простейшем случае). Также пользователь хочет иметь возможность изменять значения радиуса в будущем, чтобы при этом не разрушались ассоциативные связи в моделе. Note: В компьютерной графике можно выделить 3 основных вида моделей геометрии: полигональная модель, математическая модель и параметрическая модель. Чтобы было понятно я приведу примеры как вылядит модель состоящая из нескольких поверхностей: - Полигональная модель ( STL , OBJ ) — это просто координаты точек (с полигонами (треугольниками) построенными по этим точкам), по информации этой модели невозможно понять (без дополнительных данных) какая точка принадлежит какой поверхности;
- Математическая модель ( STEP , IGES ) — здесь ребра и поверхности заданы математическими формулами, но все они не связаны между собой, то есть изменив один объект — другие не изменятся;
- Параметрическая модель ( NX , CATIA ) — здесь используется математическая модель + подходы, которые позволяют связать разные математические объекты, то есть изменив один объект — другие, если их это коснется, также изменятся