В процессе изучения программирование иногда довольно сложно уверенно сказать «Я достаточно разобрался в этом». Ну, а как же все-таки понять, где граница этой достаточности?
Сразу же возникает вопрос: нужно ли вообще останавливаться в обучении? Конечно же, нет. Я считаю, что нужно постоянно углубляться в целях повышения своей экспертности. Однако темп изучения можно снизить при достижении определенного порога. Например, чтобы переключиться на изучение другой технологии или языка программирования.
Задайте себе вопрос: «Какие недостатки имеет технология X?», — На такой вопрос сможет ответить только человек, который детально разобрался в данном вопросе. Конечно, если он не прочитал где-то об этом. О преимуществах и так можно узнать из официальных сайтов, блогов. А вот о минусах обычно не принято громко говорить. Но они есть в каждом языке программирования.
Также полезно: Компиляция и интерпретация кода что это такое и в чем разница
Для примера возьмем PHP. Привожу некоторые тезисы из статей в интернете на тему «Почему PHP так плох и ужасен».
- «Нельзя создать десктопное приложение», — PHP не предназначен для этого. Это скриптовый язык для веба.
- «У программ на PHP более низкая защищенность», — Спорно. Плохой код можно писать на любом языке.
- «Нет статической типизации», — Для любителей можно установить declare(strict_types=1). Также использовать тайп-хинтинг. Я подозреваю? что в PHP намеренно не внедряли типизацию для понижения порога входа.
- «Глобальные переменные в проекте», — Просто не пользуйтесь.
- «Требуется apache, nginx, php-fpm», — Разве язык программирования должен включать в себя сервер? Например, для запуска Java-приложений требуется JVM, и это нормально.
- «Нельзя компилировать», — В большинстве случаев PHP-программисту не требуется компиляция кода. Для особых случаев есть HHVM.
На мой взгляд, авторы этих тезисов не сильно разбираются в PHP. Потому что доводы не состоятельны. А вот теперь держите несколько настоящих недостатков:
- В PHP осталось большое наследие в виде неоднозначных имен встроенных функций и порядков аргументов в них. В каких-то названиях есть символы нижнего подчеркивания, в каких-то нет.
- Нет коробочной поддержки юникода. Для работы с юникодом нужно использовать функции с префиксом mb. Не так критично, но сколько новичков наступали на эти грабли?