Как насчет пяти вещей, которые я ненавижу в списках «Вещи, которые я ненавижу в каком-то языке»? : D
5 - Оранжевый красный не делает его яблоком.
Когда проектируется язык, дизайнеры обычно имеют в виду, для чего он нужен. Использование этого для чего-то совершенно другого может работать, но жаловаться, когда это не так, просто глупо. Возьми Питона. Я уверен, что или кто-то имеет, или кто-то когда-нибудь сделает утилиту для создания exe-файлов из кода Python. Почему на земле Бога вы хотите это сделать? Это было бы аккуратно - не поймите меня неправильно - но это бесполезно. Так что перестаньте жаловаться на это!
Хорошо разработанный проект, вероятно, будет содержать код на нескольких языках. Это не значит, что вы не можете завершить проект только с одним языком. Некоторые проекты могут быть в пределах возможностей любого языка, который вы используете.
4- Вы стоите на деревянных ногах?
Платформа может оказать большое влияние на то, что может сделать язык. В настоящее время сборщики мусора, или даже ранняя попытка «сбора мусора» в паскалях, могут помочь в исчезновении памяти (может быть, malloc больше оперативной памяти ??). Компьютеры работают быстрее и, конечно, мы ожидаем большего от наших языков. И, честно говоря, мы, вероятно, должны. Однако за удобство компилятора приходится платить огромную цену за создание хеш-таблиц или строк, а также за множество других концепций. Эти вещи не могут наследоваться той платформе, на которой они используются. Сказать, что их легко включить в язык, просто говорит мне, что у вас может не быть ноги, на которой можно стоять.
3- Кто виноват, это правда?
Ошибок. Знаешь. Я люблю жуков. Почему я люблю жуков. Потому что это значит, что я могу сохранить свою работу. Без ошибок было бы много закрытых пиццерий. Однако пользователи ненавидят ошибки. Но вот небольшой всплеск холодной воды. Каждая ошибка - ошибка программистов. Не язык. Язык с таким строгим синтаксисом, который значительно уменьшил бы количество возможных ошибок, был бы совершенно бесполезным языком. Его способности, вероятно, можно посчитать с одной стороны. Вы хотите гибкости или власти? У вас есть ошибки. Почему? Потому что ты не идеален, и ты совершаешь ошибки. Возьмите действительно идентифицируемый пример в C:
int a[10];
for (int idx = 0; idx < 15; idx++) a[idx] = 10;
Мы все знаем, что будем делать. Однако, возможно, некоторые из нас не осознают, что ... функциональность может быть очень полезной. В зависимости от того, что вы делаете. Переполнение буфера - это стоимость этой функциональности. Этот код выше. Если бы я действительно выпустил это для публики. Это опять .. скажи это со мной .. "Моя вина". Не С за то, что позволил мне это сделать.
2- Разве мы не должны положить это в корзину?
Очень просто указать на функцию на языке, который мы не понимаем, потому что мы не используем его часто и называем его глупым. Пожаловаться, что он есть и т. Д. Гото всегда развлекает меня. Люди всегда жалуются на то, что Гото говорит на языке. Тем не менее, держу пари, что ваша последняя программа включала в себя тип goto. Если вы когда-либо использовали перерыв или продолжение, вы использовали goto. Это и есть. Конечно, это «безопасный» переход, но это то, что есть. У Гото есть свое применение. Используются ли «неявные» gotos, такие как continue или break, или явные gotos (с использованием фактического ключевого слова «goto» для любого языка). Не то, чтобы разработчики языка были безупречны, но обычно ... если функциональность существовала с незапамятных времен (для этого языка). Вероятно, этот аспект является определяющим качеством этого языка. Смысл .. это ' s используется и, вероятно, не зависает из-за обратной совместимости. Это используется сегодня. Как и 5 минут назад. И используется правильно. Ну ... возможно, кто-то использует его ненадлежащим образом, но это относится к # 3 в моем списке.
1. - Все является объектом.
Хорошо ... это действительно подмножество # 2. Но это самая раздражающая жалоба, которую я вижу в списках ненависти. Не все это объект. Существует множество концепций, которые не принадлежат или не должны быть объектами. Размещать вещи там, где они не принадлежат, просто безобразно и может снизить эффективность программы. Конечно. Может быть, не так много, в зависимости от языка. Это также относится к № 5. Это значит ... да. Глобал в порядке. Функции в отличие от статических методов в порядке. Объединение ОО-программирования с глобальными функциями - это нормально. Теперь ... это не значит, что мы все должны выйти и "освободить" наш код от его объектных моделей. При разработке раздела кода или целого проекта то, что происходит за кулисами, должноследует учитывать при составлении его вместе. Мало того, где живет эта концепция и многие другие факторы. Зачем заключать глобальные функции в классы или концепции пространства имен, если это не имеет смысла? Возьмите статические переменные-члены. Это очень забавляет меня, потому что .. хорошо .. В зависимости от языка и реализации, конечно, но в целом вы только что объявили глобальным. Да, есть несколько причин, чтобы обернуть эти не-OO-концепции в OO-оболочки. Одним из них является самодокументированный код. Это может иметь смысл. Так .. как я и говорю. Не выходите и «освободите» свой код. Но любой хороший современный язык будет иметь глобальную концепцию вне ОО-моделирования. Да, я специально хочу указать, что язык программирования ОО без глобальной концепции, скорее всего, имеет серьезный недостаток в дизайне. Опять же, хотя .. зависит от намерения и дизайна языка, поэтому я не пытаюсь выбрать какой-то конкретный язык, и здесь слишком много, чтобы проанализировать его. В любом случае, подумайте, где код должен жить и быть наиболее эффективным. Добавление вспышки к чему-то, что не добавляет функциональности или поддержки, просто изнашивает клавиатуру быстрее. Это никому не приносит пользы. Ну ... если вам не нравятся очки брауни от человека, который, вероятно, неправильно учил вас, что все является объектом.
Короче говоря, программирование - это не просто бездумное нажатие на клавиатуру. Есть много конструктивных соображений для любого проекта. Я знаю, что это клише, но вы должны смотреть на это со всех сторон. Даже с современными типобезопасными языками. Вы не просто бросаете код и ожидаете, что он будет работать хорошо. Конечно ... это может сработать, но это может быть неправильный путь. В целом, выберите язык и формат, который лучше всего подходит для конкретной работы И окружающей среды. Но ни один язык не отнимает мысли, стоящие за этим. Если вы не думаете .. вы просто печатаете.