JavaRush /جاوا بلاگ /Random-UR /سافٹ ویئر انجینئر کون ہے؟ سافٹ ویئر انجینئرنگ بمقابلہ "صر...

سافٹ ویئر انجینئر کون ہے؟ سافٹ ویئر انجینئرنگ بمقابلہ "صرف" پروگرامنگ

گروپ میں شائع ہوا۔
ہم سافٹ ویئر انجینئرنگ اور پروگرامنگ کے درمیان فرق کے بارے میں سمیر بونا کے ایک مضمون کی موافقت آپ کی توجہ میں لاتے ہیں، یا سافٹ ویئر کا تصور تیار کرنا "صرف کوڈنگ" سے کیسے مختلف ہے۔
Кто такой Software Engineer. Программная инженерия VS
تمام سافٹ ویئر انجینئرز کوڈ کر سکتے ہیں، لیکن تمام پروگرامرز سافٹ ویئر کے تصورات تیار نہیں کر سکتے۔ کچھ لوگوں کو "سافٹ ویئر انجینئر" (عرف سافٹ ویئر انجینئر) کی اصطلاح پسند نہیں ہے کیونکہ اکثر ہم لفظ "انجینئر" استعمال کرتے ہیں جب کسی اور چیز کے بارے میں بات کرتے ہیں - مثال کے طور پر۔ ہمارا مضمون، یقیناً، اس اصطلاح کے بارے میں نہیں ہے۔ اگر یہ اچانک آپ کو مسترد کرنے کا سبب بنتا ہے، تو اسے آسانی سے تخلیقی صلاحیتوں سے متعلق کسی چیز سے تبدیل کیا جا سکتا ہے۔ "سافٹ ویئر تخلیق کار"، "سافٹ ویئر مصنف"... یا یہاں تک کہ "سافٹ ویئر تخلیق کار"!
جب ہم "سافٹ ویئر انجینئر" کے بارے میں بات کرتے ہیں، تو ہمارا مطلب ایک ایسا شخص ہے جس کا بنیادی کام صرف کوڈ لکھنا نہیں، بلکہ ایک معیاری ایپلیکیشن بنانا ہے۔ اور اس میں وہ اپنے کام میں سائنسی نقطہ نظر اور شماریاتی طریقوں کا اطلاق کرتے ہوئے اپنی دعوت کو دیکھتا ہے۔ اس کے لیے پروگرامنگ صرف کھانے کے لیے پیسے کمانے کا ایک طریقہ نہیں ہے۔
پروگرام کرنے کی صلاحیت خود بخود کسی شخص کو سافٹ ویئر انجینئر نہیں بناتی ہے۔ کوئی بھی کوڈ کرنا سیکھ سکتا ہے، اور یہ جتنا لگتا ہے اس سے کہیں زیادہ آسان ہے۔ کوئی بھی اپنے استعمال کے لیے ایک سادہ پروگرام بنا سکتا ہے، لیکن یہ اس بات کی ضمانت نہیں دیتا کہ وہی پروگرام دوسروں کے لیے کام کرے گا۔ میری پسندیدہ مثال یہ ہے: ہم میں سے بہت سے لوگ شاور میں گاتے ہیں، لیکن افسوس، یہ کارکردگی ہمیشہ پیشہ ورانہ مرحلے کے لائق نہیں ہوتی۔ یقیناً، ایک اعلیٰ معیار کے موسیقی کے تجربے کے لیے، آپ غالباً کسی پیشہ کی طرف رجوع کریں گے۔ کیا آپ کو مزید مثالوں کی ضرورت ہے؟
  • ہم سب اسکول میں ریاضی اور لکھنا سیکھتے ہیں، لیکن اس سے ہم ریاضی دان اور مصنف نہیں بنتے۔
  • ہم میں سے زیادہ تر لوگ قابل گزر اور بعض اوقات انتہائی لذیذ ڈش تیار کرنے کی صلاحیت رکھتے ہیں، لیکن ہر کوئی سفارت خانے کی ڈنر پارٹی کے لیے 100 لوگوں کے لیے ایک دسترخوان پکانے کی ہمت نہیں کرتا۔ اس صورت میں، ہم ایک باورچی کی خدمات حاصل کرتے ہیں.
  • کیا آپ ابھی اپنے نئے گھر کی تعمیر مکمل طور پر پڑوسی کے بچے کو سونپنے کے لیے تیار ہیں جو لیگو سے متاثر کن شاہکار تخلیق کرتا ہے؟
میرا بنیادی نکتہ جو میں اس مضمون میں بتانے کی کوشش کر رہا ہوں وہ یہ ہے کہ سادہ پروگرام انجینئرز کے ڈیزائن کردہ پروگراموں سے بہت مختلف ہوتے ہیں۔ پروگرامنگ کے عمل کی آسان ترین تعریف: ان پٹ پیرامیٹرز کے دیے ہوئے، آؤٹ پٹ کے طور پر مخصوص کچھ حاصل کرنے کے لیے کمپیوٹر کے لیے اعمال کی ترتیب شدہ ترتیب تیار کرنا۔ سافٹ ویئر انجینئرنگ کا عمل بہت سے صارفین کے مسائل کو حل کرنے کے لیے کمپیوٹر پروگرام کا ڈیزائن، تحریر، جانچ اور کیوریشن ہے۔ یہ قابل اعتماد اور محفوظ حل تیار کرنے کے بارے میں ہے جو وقت کی کسوٹی پر کھڑے ہوں گے اور کچھ ممکنہ طور پر نامعلوم چیلنجوں کے لیے واضح سے زیادہ کام کریں گے۔
Кто такой Software Engineer. Программная инженерия VS
Программные инженеры знают все о задачах, которые они решают, решениях, которые они предлагают, ограничениях этих решений, их конфиденциальности и безопасности. По моему мнению, если человек не понимает сути проблемы, ему не стоит даже начинать программировать её решение.

Инженерный склад ума — поиск прикладных решений

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

«Интеллектуалы решают проблемы, гении предотвращают их»

- Альберт Эйнштейн

Кто такой Software Engineer. Программная инженерия VS
Сложные проблемы зачастую требуют написания множества программ. Существуют задачи, которым нужны параллельно работающие applications, иные нуждаются в последовательном выполнении нескольких программ. Ряд проблем можно решить, просто обучив пользователей. Перед тем, How приступить к созданию программы, инженер ПО задает себе ряд вопросов:
  • Какие задачи я должен решить?
  • What еще, кроме написания codeа, можно сделать, чтобы решить их?
  • What я могу сделать для упрощения решения этих задач с помощью applications?

Качество программы и качество codeа

Хорошие программы понятны и читабельны. Их легко расширять, они отлично ладят с другими программами, и работа с ними не станет вашим ночным кошмаром. Качество codeа не является предметом переговоров. Оно должно быть высоким, и всё тут. При его рассмотрении недопустимы отговорки вроде плохого настроения codeера or слишком сжатых сроков исполнения (ох уж эти дедлайны!). Один из самых важных моментов разработки ПО — проектирование программы таким образом, чтобы в дальнейшем её было легко поддерживать и модифицировать (привет, ООП!). Сегодня практически всё ПО модифицируемо, зачастую этот процесс происходит даже без участия пользователя or не требует от него ничего, кроме «пришло обновление вашей программы, нажмите ОК or Отложить». Разумеется, пользователи вправе требовать от приложений новых функций (особенно если речь идёт о долгоиграющем корпоративном ПО, которое пишут на Java, or об онлайн-играх, в которые можно играть годами).
Хотите знать больше о программировании на Java? Вступайте в группу Java Developer!
Сам по себе кусок codeа вряд ли можно назвать полезным. Полезные функции ПО начинаются там, где разрозненные куски приложений взаимодействуют между собой, обмениваются данными и работают сообща, выполняя задание представления данных и интерфейсов пользователям.
Кто такой Software Engineer. Программная инженерия VS
Программы следует проектировать с учетом этих моментов! Какие messages они принимают? Какие события мониторят? Как происходит аутентификация и авторизация? Другой не менее важный признак хорошей программы — понятность codeа, а не количество пройденных приложением тестов or даже не хорошее покрытие тестами. Казалось бы, простые вопросы: «Может ли кто-то, кроме меня, разобраться с моим codeом?», «Смогу ли я, написав сегодня этот code, понять его через несколько недель?». Популярная цитата о двух самых сложных вещах в программировании гласит:

«Есть только две действительно сложные вещи: инвалидация кэша и именование сущностей»

— Фил Карлтон.

Читаемость codeа куда важнее, чем принято считать. К сожалению, невозможно определить точные показатели or параметры для ясности codeа. Отчасти помогут запоминания общепринятых языковых норм, хороших моделей ПО и методов разработки. Но обычно этого недостаточно. У настоящих профессионалов со временем и опытом развивается, если можно так сказать, «чувство ясности», нечто сродни интуиции. Здесь хорошо подойдет метафора с письмом: знание большого количества слов, не поможет вам написать краткий и ясный по смыслу.

«Я написал бы короче, но у меня не было времени»

— Марк Твен.

Возможность легко и быстро исправлять баги — ключевой признак хорошего программного обеспечения. Ошибки в программе должны отправлять четкие messages и централизовано регистрироваться для отслеживания. Когда приходит сообщение о новой ошибке, тот, кто будет ее устранять, должен иметь возможность для отладки. Ему нужно легко подключаться к системе, получать доступ к информации о выполнение в любое время, а также иметь возможность легкой проверки работоспособности любой части системы.

Окружения и тестирование

Когда инженеры-программисты разрабатывают applications, они делают всё от себя зависимое, чтобы те работали на компьютерах разной архитектуры и с разными ОС. Важно, чтобы ПО работало при разных разрешениях и ориентациях экрана, а ещё — чтобы оно не «ело» больше памяти и процессорных мощностей, чем требуется.
Кто такой Software Engineer. Программная инженерия VS
Если речь идёт о веб-applicationsх, то они должны работать во всех основных браузерах. Создавая декстопное приложение, нужно удостовериться, что оно запускается и корректно работает и на Mac, и на Windows, и на Linux. Ну а программа, зависит от данных, то приложение должно работать даже в случае медленного соединения с данными либо его отсутствия. Whatбы написать часть программы, инженеры продумывают всевозможные варианты сценария, а также планируют их тестирование. Все начинается с выбора идеального варианта, при котором все работает без ошибок. Затем они documentируют всевозможные вероятные проблемы и заносят их в план тестирования. Некоторые инженеры начинают с написания codeа, который они называют тестовым примером и в котором имитируются сценарии всех вероятных проблем и ошибок. А затем уже пишется программа, которая сможет работать при любом из рассмотренных вариантов. Уникальной способностью талантливого инженера ПО является не знание, How написать code, а понимание того, что именно приложение должно делать на выходе и How этого добиться. Инженеру необходимо при неполных, а, возможно, и неоднозначных требованиях заказчика к ПО правильно их оценить и «понять».

Стоимость и эффективность

Программный инженер в большинстве случаев может быстро решить проблему. Если вы думаете, что при найме на работу «дорогого» опытного программиста вы увеличите затраты, подумайте еще раз. Чем более опытным окажется нанятый программист, тем быстрее он сможет предоставить простое, аккуратное, надежное и легкое в эксплуатации решение. В долгосрочной перспективе это однозначно уменьшит затраты на разработку ПО.
Кто такой Software Engineer. Программная инженерия VS
Также необходимо учитывать затраты на исполнение программы. Любая программа использует вычислительные ресурсы, а они — не бесплатны.
Задача Software Engineer состоит в написании эффективного codeа, который не использует вычислительные ресурсы без необходимости.
Например, кеширование часто используемых данных — одна из возможных стратегий, применяемых для получения желаемого результата. Но это — только один из, наверное, сотен инструментов и решений, которые могут сделать программу быстрее и эффективнее. Начинающий программист может предоставить вам дешевое решение, но использование такого решения, в конечном итоге, будет стоить вам и вашим клиентам намного дороже, чем в случаи если бы вы работали с опытным разработчиком, создавшим, в первую очередь, эффективное решение.

Ориентация на удобство пользователя

Хороший программист ведет разработку с мыслью об Опыте Пользователя (User Experience (UX)). Взаимодействие «человек-машина» — тема с бесконечным количеством исследований и решений. Чем больше решений применяется, тем лучше должна получится программа. Вот несколько примеров, просто для того что бы вы прочувствовали, что это за направление такое:
  • Когда ведется разработка форм для ввода данных, таких, How e-mail, хорошая программа должна игнорировать регистр букв для address электронной почты. Она не должна выдавать ошибку, если нажата клавиша CAPSLOCK, поскольку address электронной почты уникален в нижнем регистре. Если программа принимает на ввод новый address электронной почты, проверяйте его на ранних этапах ввода, чтобы предупредить пользователя о том, что он использует неверный формат address. Такое решение включает How очевидные проверки вроде пропущенный знак «@», а также не столь очевидные, How, например, проверка на неправильный порядок символов вроде «gmail.ocm»

  • Когда пользователь перенаправляется для выполнения Howого-нибудь действия, хорошая программа должна запомнить его текущее положение и вернуть его обратно после того, How он закончит. Хорошая программа также должна запомнить уже переданные пользователем данные, важные для дальнейшего с ним взаимодействия.

    Допустим, вы ищете авиаперелеты How Гость на Expedia. Позже вы решаете создать учетную запись. Приложение должно сохранить все ваши предыдущие поисковые requestы в новой учетной записи, и вы должны иметь к ним доступ с других устройств.


  • Кто такой Software Engineer. Программная инженерия VS
  • Хорошая программа разрабатывается с мыслью о сценариях поведения пользователя. Не нужно просто добавлять новые возможности по принципу «чтобы было», поставьте себя на место пользователя. Однажды я бронировал билеты на самолет и забыл указать мой номер часто летающего пассажира. После получения подтверждения я решил пойти на сайт авиакомпании и добавить его, чтобы получить скидку. Whatбы понять, How это сделать, я возился на сайте с добрых 10 minutes. Приложение было настолько неочевидным, что я попросту бесцельно лазил по разным страничкам сайта, дабы найти то, что мне нужно. Позднее я обнаружил, что уже пару раз попадал на нужную страничку, но даже не понял этого, так How нужное мне поле затерялось среди других подобных полей огромной формы.

    Оказалось, что для того, чтобы отредактировать информацию о поездке, мне нужно было прокрутить около двадцати строк формы, ввести номер карты лояльности и номер телефона, без которого форму нельзя отправить на проверку. Это пример программы, которая разрабатывалась без мысли о том, насколько пользователю будет с ней удобно.

Надежность, защищенность и безопасность

По моему мнению, самое важное отличие профессионального разработчика программного обеспечения от любителя — учет таких параметров, How надежность, защищенность и безопасность applications при его создании.
Настоящий профессионал знает, что он несёт ответственность за безопасность и защищенность своего решения.
Части программы должны быть устойчивы к некорректному вводу, некорректным состояниям и неправильному взаимодействию. Это действительно очень трудно обеспечить и это основная причина, по которой мы слышим истории о том, что люди гибнут из-за ошибок в программном обеспечении. Пользователи вводor, вводят и будут вводить некорректные данные в программу. Это нужно принять, How факт. Причём некоторые будут делать это специально, с целью сломать приложение и добраться до ресурсов, доступных ему.
Кто такой Software Engineer. Программная инженерия VS
Вот пример из реальной жизни: особа, якобы ответственная за недавнюю утечку данных Equifax, обвиняется в невыполнении своих служебных обязанностей, которые заключались в разработке решений, устойчивых к плохому и злонамеренному вводу во всех программных продуктах, поступающих в общий доступ. Случаи, имеющие отношение к информационной безопасности, связаны не только с неправильным и вредоносным вводом, но также и с правильно вводимыми данными. Если пользователь забыл свой пароль, сколько раз он может пробовать его ввести? Заблокируете ли вы его после этого? А что, если кто-нибудь другой пытается заблокировать его учетную запись? Может ли пользователь передавать свои учетные данные по незашифрованному каналу передачи данных? What, если request на вход поступил из необычного места? What вы будете делать, если попытка входа похожа на автоматическую? What вы сделали для того что бы защитить ваших пользователей от межсайтового скриптинга и межсайтовой подделки requestов и банального фишинга? Есть ли у вас резервная стратегия на случай DDoS-атаки ваших serverов? Эти вопросы указывают только на некоторые проблемы, которые необходимо учитывать. Защищенная программа не сохраняет важную информацию в текстовом виде. Она защищает её с помощью сложного одностороннего шифра (такого, с помощью которого легко зашифровать, но практически невозможно расшифровать без ключа). Это резервные меры на случай, если программу всё-таки взломают. Хакеры обнаружат зашифрованные данные, которые бесполезны для них. Неожиданные проблемы возникают даже в лучших программах. Программиста, который не готов к их возникновению, вряд ли можно назвать профессионалом. Пока он не ожидает неожиданного поведения, он не инженер. Он — «автор небезопасных программ». Ошибки в программах не всегда очевидны. Наши интеллектуальные возможности предвидеть и предотвращать известные ошибки ограничены. Вот почему программные инженеры понимают значимость хороших инструментов, позволяющих им писать правильное и безопасное программное обеспечение.

Необходимые инструменты

Нет сомнений, нам нужны разные и хорошие инструменты разработки. Их роль часто недооценивают, но на самом деле они изрядно экономят время и силы, упрощая некоторые задачи на порядок. Представьте, если бы вам до сих приходилось заливать файлы по FTP для развертывания, так сказать, по старинке. Вообразите отладку проблем сети и производительности без Chrome DevTools! А How неэффективно в наши дни было бы писать code на JavaScript без ESlit и Prettier!
Кто такой Software Engineer. Программная инженерия VS
Любой инструмент, сокращающий время обратной связи, когда вы пишите code, должен быть принят с радостью. Когда я нахожу незнакомый мне ранее, но действительно полезный и действенный инструмент, я могу сожалеть лишь о том, что я не использовал до этого счастливого момента.
Более качественные и современные инструменты помогут вам стать лучшим программистом. Находите их, используйте, цените, и, если можете, — улучшайте их. И не зацикливайтесь на одном и том же: кто знает, возможно, с новым инструментом вы один раз потратите время на установку и изучение, а затем будете решать задачи в разы быстрее?

Эволюция программной инженерии

Никто не может изучить программную инженерию за два месяца, за полгода, и даже за год. Вас не научат быть программным инженером на курсах, в университете or в учебном лагере. Я учусь последние двадцать с лишним лет и продолжаю учится сейчас. Я смог спокойно называть себя опытным программистом только после десятилетия обучения и разработки, создания и поддержки приложений, которыми пользуются тысячи пользователей. Программная инженерия — не для всех, но каждый должен учится решать свои задачи с помощью компьютера. Если вы можете научиться писать простые программы, вам стоит это сделать. Если вы можете научиться использовать общедоступное программное обеспечение, вам стоит это сделать. Если вы можете научиться использовать программы с открытым исходным codeом и дорабатывать их для себя, вы получите суперсилу! Каждый день приносит разработчикам новые задачи, новые проблемы, поэтому и нужна программная инженерия. Главная задача этой профессии — создавать ПО так, чтобы обычному человеку не пришлось разбираться с ним по многу лет. Whatбы для взаимодействия с программами не было нужды в долгой учёбе. И ещё —программные инженеры всё время думают над созданием более совершенных инструментов, способных решать более сложные известные проблемы, и делать все возможное, чтобы новые проблемы появлялись How можно реже.
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION