Программист или тестировщик: что лучше выбрать?

Construct 3

Construct 3 – лучший выбор, если вы за всю свою жизнь не написали ни строчки программного кода. Эта программа полностью управляется через графический интерфейс. То есть все элементы легко создаются и перетаскиваются мышкой по принципу drag-and-drop. Игровая логика и переменные имплементируются с помощью особенностей дизайна, предоставляемых самим приложением.

Одно из основных преимуществ Construct 3 заключается в том, что результат можно экспортировать на десятки различных платформ и в десятки разных форматов. Вам не придется ничего менять, чтобы перенести готовую игру на другую платформу или перевести в другой формат. Поддерживается экспорт в HTML5, на платформы Android, iOS, Windows, Mac, Linux, Xbox One, Microsoft Store и многое другое.

К программе прилагаются сотни справочных материалов, доступным языком разъясняющих концепцию создания игр от самых азов до продвинутого уровня. Очень активно и сетевое сообщество Construct 3. Вы всегда можете обратиться за советом к опытным разработчикам, если вам потребуется помощь.

Большинство программистов не имеет навыков создания графики, музыки или анимации. Но это не проблема, если вы работаете с Construct 3. Всегда можно найти и приобрести готовые к использованию ассеты в магазине Scirra Store. Большинство из них стоит пару-тройку долларов, но цены на профессиональные игровые ресурсы могут доходить до тридцати долларов и выше. Можете также купить готовые игры с открытым исходным кодом, чтобы найти новые идеи.

Однако бесплатная версия ограничена 25 событиями, двумя слоями, двумя одновременными спецэффектами, одним шрифтом. Также в бесплатной версии не поддерживается функционал многопользовательского режима и результат работы сохраняется только в HTML5. Всех этих ограничений нет в платной версии, которая стоит 99 долларов в год.

С чего начать?

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

Какой язык программирования выбрать для изначального изучения?

  • Java, Swift, C/C++ — именно с этих языков лучше начинать свое знакомство с программированием. Они довольно похожи, поэтому, если освоите один из них на хорошем уровне, с остальными разберетесь еще быстрее.
  • Swift стоит выбирать, если вы ориентируетесь на разработку мобильных приложений под разные операционные системы.
  • Java  – это более универсальное решение, он используется для разработки сайтов, серверных приложений и приложений для компьютеров и мобильных приложений.
  • С/С++ необходимо для создания высоко нагруженных приложений, он используется для оптимизации и работы с памятью.
  • HTML – один из первых языков освоения, если планируете заниматься разработкой сайтов, именно он задает гипертекстовую разметку на странице.
  • JavaScript – добавляет в страницы сайта интерактивность.
  • Python – один из самых популярных и универсальных языков программирования, отличается более простыми правилами оформления кода, чем в других языках.

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

В обучении и работе могут пригодиться площадки, где можно задать свои вопросы и посмотреть примеры кода – Reddit, Stack Overflow, GitHub.

Главное в обучении как можно раньше начать писать код

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

В общем виде алгоритм изучения программирования может выглядеть следующим образом:

  • Выбор первого языка программирования для освоения. Про языки программирования было написано выше. Стоит отметить, что обучение на курсах строиться следующим образом : Pascal , C++, PHP, а затем все языки, которые связаны с веб-программированием. Выбирать язык программирования необходимо, исходя из ваших профессиональных интересов, при этом первый язык не должен быть очень сложным, чтобы не убить эти самые интересы на корню.
  • Изучение компиляторов. Компилятор – это техническое решение, назначение которого в переводе команды, введенной пользователем, в машинные инструкции понятные компьютеру. Все программы в последствии вы будете писать в компиляторах. Выбор компилятора определяется тем, какой язык для изучения вы ранее выбрали: для паскаля компилятор Free Pascal, TMT Pascal, Virtual Pascal, для C++ — Turbo C++ , Visual C++, Dev C++, для Java – Javac, GNU Compiler for Java, После освоения основ языка программирования можно будет переходить на более сложные компиляторы.
  • Создание первого кода. Сделать первый код можно по видео-урокам, книгами или в процессе обучения на курсе. После того, как вы своими руками создали программный алгоритм и поняли, что вам интересно развиваться в этой сфере, то стоит переходить к следующему шагу.
  • Выбор курсов или тренинга для более глубокого обучения. Вот список курсов, которые подойдут для погружения в программирование на первом этапе:
  • CS 50 от MIT – практически легендарный курс программирования,
  • Курс от Яндекса на Stepik org,
  • Курсы на Coursera org,
  • Основы HTML и CSS от «Нетологии»,
  • Курсы от HTMLAcademy,
  • Школа GeekBrains от Майл.ру

Как найти первую работу в IT

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

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

Источник — dataart.team

20.1 Где брать проекты для портфолио

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

Сложнее будет, если вы самоучка. Но и здесь можно что-то придумать:

  • писать небольшие программы по туториалам;
  • искать задания на фрилансе и выполнять их самостоятельно;
  • принимать участие в разработке open source проектов.

20.2 Как составить резюме, если нет опыта

  1. Нормально назовите резюме. В названии должны быть желаемая должность и ФИО кандидата, как здесь: «Junior Java — Пупкин Иван Иванович».
  2. Резюме может быть в формате Doc, PDF или сайта-визитки, если вы веб-разработчик.
  3. Добавьте адекватное фото и контакты.
  4. Укажите места, где учились и повышали квалификацию.
  5. Не копирайте бездумно инфу из разделов, что нужно знать, чтобы стать крутым программистом: вы должны доказать эти знания на собеседовании.
  6. Если нет опыта работы, указывайте, сколько времени практикуетесь в том или ином языке/технологии.

Последний пункт в резюме программиста может выглядеть примерно так:

  • Java — 1 year;
  • PHP — 0,5 years;
  • JavaScript — 0,5 years.

20.3 Где искать вакансии и работу

О фриланс-сервисах мы уже говорили, потому затронем платформы по поиску работы в офисе или в ремоут-режиме. Для России и стран СНГ лучшие сайты с вакансиями для программистов это:

  • HeadHunter
  • Хабр Карьера
  • Вакансии Tproger
  • Вакансии vc.ru
  • Вакансии proglib
  • DOU

20.4 Как общаться с рекрутерами

Как вы понимаете, стать хорошим программистом в обход общения с HR невозможно. На собеседовании не стесняйтесь озвучивать свои желания и вопросы. Если на всё кивать головой, как автомобильная собачка, после трудоустройства можно обнаружить себя в крайне некомфортных условиях работы. Мы подготовили 13 вопросов работодателю, которые стоит задать на собеседовании.

Несмотря на это, нужно вести себя в меру сдержанно, демонстрировать серьёзность и говорить о своей мотивации.

Прошел курс, но нет портфолио

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

Подведем итоги в виде небольшой таблички плюсов и минусов курсов по программированию:

Плюсы курсов по программированию Минусы курсов по программированию
  • Предоставляют начальные материалы по языку программированию или инструменту разработки
  • Небольшая практика в виде простого кода
  • Обучение под присмотром преподавателя
  • Самостоятельное решение задач
  • Помогают повысить квалификацию, закрепить уже имеющиеся знания или вспомнить забытое
  • Учат языкам или инструментам, но не программированию
  • Редко дают образовательные знания, которые можно повторно применить
  • Дают только основы по программированию
  • Курсы стоят очень дорого
  • Не дадут реального практического опыта, который можно получить только на реальном проекте
  • Сертификат или диплом не дают преимуществ при трудоустройстве

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

Казалось бы, что все ничего. Если бы под соусом более менее нормальных курсов не преподносили по настоящему ужасные курсы.  Наверняка многие встречали в интернете статьи и рекламу с кричащими заголовками:

  • «Курсы по программированию за 7 дней»
  • «Курсы по JavaScript за 21 день»
  • «Освой PHP за месяц»
  • «Стать Java программистом за 3 дня»

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

Суть таких курсов — содрать с вас деньги. Знания этих курсов всегда поверхностные и вовсе не образовательные, они учат языкам программирования или инструментам, а не самому программированию. Например, курс по ReactJS не научит программировать на самом JavaScript. Отойдя от ReactJS вы затруднитесь работе с другой библиотекой, потому что не знаете JavaScript. Чтобы вы не подумали, что слишком тупы для программирования, курсы создаются легкими. В результате вы снова несете деньги, за уже другие курсы, которые снова ничему не научат. После окончания курса вам выдадут какую-то красивую бумажку — сертификат или диплом, которая никому кроме вас в итоге не нужна. Многие начинают после курса искать работу с большими зарплатами, но оказывается, что знаний после прохождения курсов не прибавилось и вы не можете претендовать на должность. Таким образом, курсы — это хорошо налаженный конвейер по высасыванию денег.

Как выбрать, в чем лучше развиваться

Подведем итог:

  1. Начните с выбора направления, в котором вам хочется развиваться. Это серверная, веб-разработка, мобильная или десктопная?
  2. Оцените свои силы и навыки: хотите ли взяться для начала за что-то попроще, или сразу готовы попробовать изучить сложный язык?
  3. Определившись с языком, познакомьтесь с фреймворками и базами данных. Но не пытайтесь охватить сразу огромный массив информации — учитесь кодить на «чистом» языке, без библиотек и готовых решений. Когда разберетесь с принципами, освоить дополнительные инструменты будет проще.


Изучите карту языков программирования для новичков и выбирайте

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

Как научиться программировать

С чего начать

В любом деле главное — мотивация

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

Задания построены на первых уроках курса в среде Swift Playgrounds. Я перевёл их на русский и адаптировал под формат сайта, чтобы задания мог выполнять любой школьник.

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

Пример задания с онлайн-конкурса Фоксфорда по программированию

Курс на языке Swift — это эпловский курс на айпадах, где персонажи ходят по лабиринту, собирают камни и включают переключатели. Вначале ученики следуют правилам игры, но вскоре узнают, что могут сами управлять объектами. В результате за 12 занятий школьник создаёт собственную головоломку и пишет программу, которая её решает.

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

Как заниматься

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

Школьники, которые раньше не занимались программированием, могут пройти мой базовый курс на языке Swift. Хорошие программисты получаются из тех ребят, которые долго играли в видеоигры. Достаточно один раз испытать «чувство бога», спроектировать собственную вселенную, чтобы перестать играть и начать создавать свои приложения

Неважно, игра это или что-то другое — вы будете устанавливать правила для других.

Тем, кто хочет всерьёз изучать программирование, я советую прочесть классический труд Дональда Кнута «Искусство программирования». Когда вы усвоите базовые понятия и получите первый опыт создания кода, переходите к реальной практике.

Сколько времени это займёт

В произведениях Кира Булычёва дети занимаются серьёзными научными исследованиями наряду со взрослыми. Главная героиня и её товарищи проводят смелые эксперименты в биологическом кружке и публикуют статьи в серьёзных журналах. Я думаю, мы действительно к этому идём, и программирование — одна из первых областей, где школьники выступают наравне со взрослыми.

Я согласен с теорией «10 000 часов»: если вы на протяжении трёх лет будете заниматься любимым делом, то достигнете профессионального мастерства. Дело в том, что подростки не всегда готовы быстро определиться. До программирования я перепробовал много разных занятий: учился в музыкальной школе, играл в шахматы, посещал секции плавания, дзюдо, ходил на лыжах. Молодым людям интересно многое, они должны попробовать всё — это совершенно нормально.

Программисты тринадцати лет — явление уникальное, а вот старшие школьники делают коммерчески успешные проекты. Например, выпускник Филипп Захарченко три раза подряд получал стипендию для участия в международной конференции «Эпла» для разработчиков.

Unreal Engine 4

Unreal Engine 4 – самый мощный игровой «движок» и самый профессиональный инструмент из перечисленных в нашем рейтинге. Создавали его специалисты, участвовавшие в разработке популярного шутера Unreal. Они точно знали, что делают.

Один из ключевых принципов UE4 – высокая скорость работы. На это нацелено все, включая и функционал отладки в реальном времени, быстрого перезапуска приложения, удаленного предпросмотра, а также сотни ассетов и систем на базе алгоритмов ИИ, пост-эффектов и многого другого.

В UE4 реализована уникальная система Blueprint, позволяющая создавать игровую логику без написания кода. Система достаточно продвинута, чтобы с ее помощью разрабатывать игры от «А» до «Я», даже сложные, не запуская редактор исходных кодов. В то же время программирование тоже поддерживается.

У Unreal Engine 4 есть собственный канал на YouTube с восемью сотнями роликов, раскрывающих все аспекты работы с «движком». Большинство видеороликов длится от 20 до 60 минут. Здесь больше информации, чем можно было бы получить за семестр учебы в университете, если бы там преподавали UE4. Если вам нужны пошаговые руководства на все случаи жизни, то у Unreal Engine 4 они есть.

Поддерживается экспорт в: Windows, Linux, Mac, iOS, Android, HTML5, Xbox One, PlayStation4, Oculus VR и так далее. Бесплатная версия имеет весь функционал и поставляется с открытым исходным кодом. Нужно только платить ежеквартально 5% от прибыли, если продажи игры приносят вам больше 3000 долларов.

Не нужно зубрить названия функций

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

К примеру, если я знаю, что обычно в языках программирования есть возможность привести строку к нижнему регистру. C этим знанием общей концепции, если я захочу например, писать на COBOL, просто загуглю — tolowercase in Cobol. И вуаля . Если я буду много писать на каком-то определенном языке, я загуглю основные функции по 100 раз, и на каком-то этапе уже их запомню.

Кстати, это очень полезная штука и для изучения иностранных языков, я лично просто ненавижу делать какие-то списки, карточки и зубрить слова. Особенно у меня вызывают желание ругаться матом наборы слов, вырванные из контекста, типа «100 прилагательных на тему Погода». Это просто нереально запомнить, а даже если и зазубрил сегодня, через месяц 80 процентов забудешь. Гораздо эффективнее просто читать/смотреть интересный тебе контент на языке и искать незнакомые слова в словаре каждый раз, таким образом через какое-то время самые употребительные слова запоминаются естественным образом.

В общем, при изучении очередной фишки языка программирования достаточно понять в целом, что оно делает, и знать, как это загуглить.

Правила, которые помогут в учёбе

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

Двигайтесь постепенно

Создайте план своего обучения, разбейте его на этапы и постепенно изучайте что-то новое. Для начала разберитесь с синтаксисом изучаемого языка — поймите принцип работы написания кода, определите ключевые слова и т.д. Читайте литературу по теме и смотрите обучающие видео, параллельно практикуйтесь и постепенно переходите к более сложным конструкциям.

По мере освоения теории как можно больше практикуйтесь

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

Возьмите в привычку программировать каждый день

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

Не бойтесь обращаться за помощью

Спокойно относитесь к своим неудачам. Если вдруг вы поймёте, что не справляетесь самостоятельно — обратитесь за помощью к более опытным коллегам или же запишитесь на онлайн-курсы.

Если вы действительно хотите быстро и эффективно освоить язык программирования — используйте все доступные материалы, сервисы и знания других людей, и тогда вы достигните цели!

Front-end и Back-end

Поговорим об основах: front-end и back-end. Это разные направления программирования, но они тесно взаимосвязаны между собой, поэтому некоторые «универсальные» специалисты (fullstack) работают как с фронтендом, так и с бэкендом — отвечают и за внешний вид приложения, и за его логику.

Front-end — это клиентская сторона пользовательского интерфейса к программно-аппаратной части сервиса и что фронтенд разработчик верстает вебсайт, расставляя HTML-разметку и привязывая к ней CSS-стили. Однако мы живем в 22 году XXI века, когда такой подход к программированию сильно устарел, и на арену выходит JavaScript с его фреймворками, которые позволяют и быстрее, и дешевле писать «фронт».

Поэтому в наше время уже недостаточно просто знать одну лишь базу HTML и CSS. Возможно, они будут востребованы на фрилансе, однако крупные современные компании с ними уже не работают. Даже костные в плане IT структуры конторы сейчас массово обучают людей на JS-разработчиков и на fullstack-разработчиков, которые знают и front и back, работают не только с HTML и CSS, но и с PHP и SQL.

Основа SQL

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

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

SQL (Structured Query Language) — это язык структурированных запросов, позволяющий хранить, манипулировать и извлекать данные из реляционных баз данных. Сам по себе SQL не является полным языком программирования, но его стандарт позволяет создавать для него процедурные расширения, которые способны расширить его функциональность до полноценного языка программирования.

SQL дает возможность получать доступ к данным в системах управления реляционных баз данных, описывать данные, определять данные в БД и управлять ими, взаимодействовать с другими языками через модули, устанавливать разрешения на доступ к таблицам, процедурам и представлениям.

Windows: Как создать программу

Cоздать программу самому? Это очень просто! Не верите? Давайте сделаем небольшую программу, которая станет вашей отправной точкой в мир программирования.

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

Не буду рассуждать на тему зачем может потребоваться писать самостоятельно программу, у каждого свои причины. Оговорюсь сразу, что в данной статье будет использоваться язык программирования C# и среда разработки Microsoft Visual Studio, у которой имеется бесплатная редакция, возможностей которой хватит «за глаза» любому.

  1. Этапы создания программы
  2. Установка среды разработки
  3. Создание программы

Как стать профессиональным кодером

Поскольку самое полезное обучение — это практика, зарегистрируйтесь на крупнейшем сервисе фриланса upwork.com. Подпишитесь на интересующую вас тему, например, AR (augmented reality). Выполняйте проекты по следующему алгоритму:

1. Прочитайте, чего хочет заказчик

2. Отметьте, что из этого вам по силам

3. Решите задачу так хорошо и быстро, как сможете

4. Если заказчик никого не нанял и не снял задачу, отправьте ему видео своего продукта и напишите, что вы создавали подобный проект

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

На upwork.com вы будете решать не отвлечённые, придуманные профессорами задачи, а создавать реальные вещи, которые нужны настоящим заказчикам. В числе моих первых проектов были ресторан в Бразилии, бюро путешествий в Италии и AR-анимация в Китае. При этом от вас потребуется самодисциплина и способность работать в реальных дедлайнах.

Вживую или онлайн?

Это даст сразу несколько преимуществ:

  • Наличие четкого расписания и дедлайнов,
  • Большое количество практики на реальных бизнес-задачах и обратная связь от коллег и наставников,
  • Возможность получать ответы на свои вопросы не только по материалам курса, но и в целом по профессии, в том числе и после завершения обучения,
  • Сформированная команда единомышленников, коллективный разум, к котором можно обращаться в любой сложной ситуации.
  • Изучение книг по программированию. Да, именно в такой последовательности – сначала курсы, а затем книги. Потому что на курсах даются азы обучение, есть возможность что-то уточнить и задать непонятные вопросы. А в книгах многие моменты, понятные автору, могут не содержать дополнительных пояснений для новичков. Начать можно вот с этих книг:
  • Нортон «Программно-аппаратная организация IBM PC»,
  • Кнут «Искусство программирования»,
  • Бентли «Жемчужины программирования»,
  • Таненбаум «Архитектура компьютера»,
  • Морс, Алберт «Архитектура микропроцессора 80286»,
  • Янк «PHP и MySQL. От новичка к профессионалу»,
  • МакГрата «Программирование на Python для начинающих»,
  • Перри и Миллер «Программирование на С для начинающих»
Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
IP-файл
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: