Заявка на услуги DST
Наш специалист свяжется с вами, обсудит оптимальную стратегию сотрудничества,
поможет сформировать бизнес требования и рассчитает стоимость услуг.
Чтобы начать изучать программирование, нужно выбрать подходящий язык, знакомство с которым не заставит в будущем жалеть о потраченном зря времени. Но из всего многообразия ЯП такой выбор сделать трудно, особенно когда говорят, что у каждого языка есть свои преимущества и недостатки, что каждый язык хорош в своей области.
Программирование — это работа с данными, а именно их систематизация и преобразование. Данные отличаются друг от друга по типу, например, есть числовые или строковые данные. Подобно тому, как в математике нельзя получить разницу между количеством помидоров и количеством огурцов, в программировании нельзя из числа с плавающей точкой получить слово при помощи арифметических или логических операций. Это значит, что при взаимодействии данных друг с другом учитываются их типы.
Типы и структуры данных — фундаментальные понятия в программировании. Грамотная систематизация данных кардинально увеличивает производительность программы, позволяет быстрее находить в ней ошибки, способствует безболезненному сопровождению программы в дальнейшем. Логика обработки данных в масштабе одной функции или небольшой программы называется алгоритмом, а общую структуру приложения принято называть архитектурой.
Для удачной архитектуры, помимо того, что она должна позволять расширять и поддерживать приложение, важно, чтобы действия функций или методов были однозначными: они должны выполнять конкретные действия и возвращать конкретный тип данных. В этом случае программа становится более контролируемой. Компиляция завершится ошибкой, если программист забудет указать тип данных. Это справедливо для языков со строгой типизацией, но есть и другие языки.
ЯП, не требующие явного указания типа, называются языками с нестрогой типизацией. Здесь уже нагрузка ложится на интерпретатор, который, понимая контекст, присваивает тем или иным данным нужный тип, то есть выполняет дополнительную работу. Отсюда идет увеличение расходов системного ресурса.
Языки с нестрогой типизацией настолько развились, что тип данных определяется безошибочно, но расходы все равно остаются. Однако, писать код на таких ЯП значительно легче. Как правило, именно с них новичок и начинает обучение, что весьма логично. Но это большая ошибка. Пока автор кода не начнет учитывать значения типов данных, код будет плохо организован, даже если программа окажется работоспособной.
Более того, имея смутное представление о типах данных, трудно понять, для чего, собственно, появилась парадигма ООП. Ведь помимо распространенных типов int, double, bool, string и др., есть еще и абстрактный тип данных (программист создает их сам), который стал возможен благодаря ООП.
На этапе обучения желательно, чтобы новичок не смог написать рабочий код, если не укажет типы переменных и функций. Так он поймет главную мысль. Следовательно, изучать программирование рекомендуется на типизированных ЯП.
Наш специалист свяжется с вами, обсудит оптимальную стратегию сотрудничества,
поможет сформировать бизнес требования и рассчитает стоимость услуг.
Ижевск, ул. Воткинское шоссе, д. 170 Е, Технопарк Нобель, офис 1117
Задать вопрос по почте
Если говорить о плюсах PHP, на котором мы делаем большинство проектов, стоит отнести:
низкий порог вхождения;
удобные и проверенные инструменты разработки;
огромное сообщество;
не менее огромное количество инструкций, готовых решений (CMS, фреймворки, плагины и библиотеки);
нетребовательность к рабочему окружению.
С точки зрения новичка этот язык хорош ещё и тем, что использует динамическую типизацию и модель «отработал и умер». Это делает менее острой проблему утечек памяти и позволяет писать меньше строк кода, делая универсальные методы и функции, хоть в некоторых случаях и в ущерб архитектуре.
Перспективы у PHP также довольно интересные. С версии 5.3 язык начал очень активно развиваться и приобретать выразительные свойства (пространства имён, примеси, генераторы, опциональный тайп-хинтинг и другое), возможность работы в асинхронном режиме, а в будущих версиях ожидается JIT, FFI, поддержка предзагрузки, полноценная асинхронность.
Перспективы в трудоустройстве также довольно обширны. Достаточно много как старых проектов, так и только разрабатываемых, используют PHP. При этом сложность приложений также варьируется: начиная от небольших посадочных страниц и заканчивая сложными веб-приложениями, обрабатывающими большие объёмы данных внутри кластеров серверов.
PHP в этом плане сильно специализированный, так как используется только для разработки сайтов. В такой специализации есть как плюс, так и минус.
Минус в том, что PHP приспособлен только к стандартному для него синхронному однопоточному выполнению в рамках веб-сервера, а остальное пока не очень умеет. Так что как только требуется сделать что-то для него нестандартное, то возникает необходимость эмулировать эти вещи или делать остальные части на других языках вроде серверного JavaScript для асинхронности или Go для многопоточности.
А плюс в том, что хоть он и делает всего одну работу, но делает её идеально. Разработчики самого языка не отвлекаются на посторонние задачи и совершенствуют его только в основном направлении, оптимизируя скорость и привнося только важные для него новшества из других языков. Поэтому в нише скриптовых интерпретируемых веб-языков PHP практически является самым быстрым. Быстрее него уже только языки компилируемые, но будущий PHP 8.0 с JIT-компиляцией, как нам обещает его разработчик Дмитрий Стогов в докладе, вскоре обгонит и их.
К тому же это язык с синтаксисом из семейства более продвинутых Java и C#, что позволяет PHP-программистам учиться у них и при необходимости легко перейти на любой язык этой группы. С Ruby или Python со своим обособленным синтаксисом это будет сделать проблематично.
В PHP переходят хорошие практики из других языков. Создаются и развиваются профессиональные фреймворки. Так что из языка для любительских сайтов он уверенно переходит в нишу быстрых профессиональных веб-проектов, авторам которых не хочется поднимать тяжелые серверы на Java. Учить PHP сейчас или нет? Каждый раз накатывает новая волна технологий и каждый раз снова и снова «хоронят» PHP фразами, что вот-вот очередные Ruby или NodeJS победят PHP. Но десятки лет проходят, а всё никто его не побеждает.
Помимо продвинутого программирования веб-приложений на фреймворках, PHP отличается наличием большого числа CMS для разработки стандартных сайтов. И они никуда исчезать не собираются. Для экзотических задач удобны экзотические языки. А для классических проектов успешно хватает классического PHP. Так что всегда можно сказать, что другие языки приходят и уходят, а PHP, С++ и Java скорее всего вечны. И работы на них всегда будет много.
Поколение языка к его возрасту имеет косвенное отношение. Словом «поколение» выражается лишь общие тендении и абстрактность языковых терминов. Даже в наши дни до сих пор создаются языки «младших» поколений, для решения каких либо конкретных задач, если для этого есть предпосылки.
Языком первого поколения является машинный код. Он и сейчас используется, в него в конечном итоге транслируют все другие языки программировния. Молодежь может быть не в курсе, но еще лет 30-40 тому назад на нем писали живые люди. Кроме шуток. Не хакеры, а прикладные программисты. Прямо так байтик по байтику составляли прикладные программы, например расчет зарплаты сотрудникам завода.
Наиболее известный представитель второго поколения — Ассемблер (ASM). С помощью него повысилась скорость написания программ и совместимость при переносе на родственное оборудование. Ассемблер не просто привел в соответствие машинным кодам какие-то мнемонические команды, а позволил абстрагироваться от многих технических деталей, позволив больше сосредоточится на решении прикладной задачи. Собственно этот последний тезис является главным признаком индукции при переходе от одного поколения языка к другому.
Третье поколение языков позволило практически полностю абстрагироваться от «железа». Их уже столько много, что перечислить затруднительно. Одни из пионеров — Фортран, Паскаль, Бейсик. Языки третьего поколения до сих пор самые используемые и кажется, что покрывают все необходимые потребности современного программирования. Однако прогресс не стоит на месте. Теория программирования сделала следующий шаг и породила четвертое поколение языков (4GL).
Не каждый язык имеет ярлык конкретного поколения и свое четкое место на шкале. Примером такого является Си. Хотя Си появился, когда эра третьего поколения была уже в разгаре, но родился он с явними признаками языка второго поколения. Это нисколько не аттавизм и не деградация. Он именно таким и задумывался – язык для написания операционных систем. Взяв все необходимые новшества и синтаксические удобства языков третьего поколения, он позволяет писать программы, практически оптимизировануми также, как на Ассемблере. Можно сказать, что он находится на отметке 2 ½ поколения.
Не меннее интересна картина с С++. Синтаксически это тот же Си с дополнительными прибамбасами. Но из-за них С++ перестал быть языком. Сам по себе он не представляет бОлшей ценности, чем Си. Интересным он становится тогда, в нем создана та или иная объектная иерархия, переопределены операторы и т.п. Когда мы получаем новую концепцию работы с данными. Практически это новый язык с Си синтаксисом, который может соответствовать любому поколению. То есть по сути С++ не язык, а инструмент для создания языков. К сожалению большинство програмистов звезд с неба не хватают. Какая бы не была навороченная иерархия объектов, созданная в С++, она будет соответствовать банальному третьему поколению языков. ООП находится в полном перпендикуляре к линии повышения абстракций.
Мы сейчас живем на стыке эпох третьего и четвертого поколения. Многие просто недопонимают самого смысла появления нового поколения, при том, что старые языки так прекрасно решают все вопросы. Суть индукции следующего шага все та же — абстракция от технических деталей с целью более быстрого решения прикладной задачи.
Здесь следовало бы привести примеры языков четвертого поколения. Перед этим необходимо сделать оговорку, что упомянутые далее языки могут обладать в той или иной мере свойствами четвертого поколения. Синтаксически это может быть не выражено явно. 4GL — это новая концепция, а не новый синтаксис. Синтаксически язык может быть похож на язык третьего поколения, но подход при работе с ним будет другим.
Формально к языкам четвертого поколения можно отнести SQL. Это наиболее известный представитель, но посколько он используется в очень узкой специфической задаче, то наглядно не демонстрирует все аспекты 4GL. Одну из ранних попыток предпринял Informix. Вместе со своей базой данных и набором стандартных библиотек для других популярных языков третьего поколения, они предлагают свой собственный язык Informix-4GL. В качестве синтаксической модели они взяли SQL и дополнив другими языковыми конструкциями сделали из него полноценную среду разработки, в котором SQL команды явлются не чем-то инородным, заключенным в кавычки, а нативной частью языка. В этом смысле к языкам четвертого поколения можно отнести семейство dBase, FoxBase, Clipper и им подобные.
Внимательный читатель может заметить из нескольких перечисленных примеров, что здесь говорится даже больше не о языке, а о среде разработки. Это будет правильное замечание, поскольку современые прикладные задачи требуют баз данных, не просто как нечто, где можно сохранить кое-какие конфигурационные данные. База данных (в широком смысле этого слова) становится ядром, вокруг которого строится приложение. Поэтому не удивительно, что она уже не хочет довольствоваться правами сторонней библиотеки (бедного родственника). Из-за естественных ограничений мы получаем ситуацию, когда не к языку привязывается база данных, а вокруг какой-то конкретной реализации базы возводится язык. Универсальные решения мне пока не известны.
Только когда я переходил с паскаля на делфи (не на object pascal, а именно на delphi, потому что не так уж много смысла выковыривать op из ide\vcl. Среда здесь — неотъемлемая часть технологии.) и с C++ на C# (которая, собсно, неотделима от .NET) — весьма ощутимо абстрагировался от технических деталей реализации.
Не говоря уже о том, что при переходе с паскаля на делфи неймоверно проще стало создавать интерфейс.
Да простит меня автор заметки, но я бы четвёртым поколением поставил язык плюс среду разработки\выполнения (vcl, mfc, .NET, etc), а базы данных с языками управления — пятым.
И в этом отношении голый php разных версий и php с фреймворками отличаются друг от друга и сочетают в себе и признаки третьего, и признаки четвёртого поколения.