Многие из нас начали видеть это явление с jQuery около года назад, когда люди начали спрашивать, как сделать абсолютно безумные вещи, такие как получение строки запроса с помощью jQuery . Разница между библиотекой (jQuery) и языком (JavaScript), по-видимому, утеряна многими программистами и приводит к тому, что много неуместного, запутанного кода пишется там, где это не нужно.
Может быть, это только мое воображение, но я клянусь, я начинаю видеть рост числа вопросов, когда люди просят сделать такие же безумные вещи с Linq, например, найти диапазоны в отсортированном массиве . Я не могу понять, насколько неуместны расширения Linq для решения этой проблемы, но что более важно, тот факт, что автор просто предполагал, что идеальное решение будет включать в себя Linq, даже не задумываясь об этом (насколько я могу судить). Кажется, что мы повторяем историю, порождая новое поколение программистов .NET, которые не могут отличить язык (C # / VB.NET) от библиотеки (Linq).
Что ответственно за это явление? Это просто обман? Сороки склонности? Получил ли Linq репутацию формы магии, где вместо того, чтобы писать код, нужно просто произнести правильное заклинание? Я вряд ли удовлетворен этими объяснениями, но я не могу думать ни о чем другом.
Что еще более важно, действительно ли это проблема, и если да, то как лучше всего помочь просветить этих людей?
источник
Ответы:
Это в основном потому, что программирование принципиально сложно. Это требует много логических, структурированных мыслей таким образом, что многие люди просто не знают, как это сделать. (Или просто не могу, в зависимости от того, кого вы слушаете.)
Такие вещи, как LINQ и jQuery, значительно облегчают выполнение некоторых общих задач по обработке данных. Это отлично подходит для тех из нас, кто знает, что мы делаем, но неприятный побочный эффект заключается в том, что он снижает планку. Людям, которые не имеют представления о том, что они делают, легче начать писать код и заставить его работать. И затем, когда они сталкиваются с реальностью и находят что-то принципиально сложное, для чего их простые методы высокого уровня абстракции не очень хорошо подходят, они теряются, потому что они не понимают платформу, на которой построена их библиотека.
Ваш вопрос как бы на правильном пути, но во многом напоминает многолетнюю полемику о насильственных видеоиграх «превращая детей в насильственных», он имеет направление обратной ссылки. Простые методы программирования не делают программистов глупыми; они просто привлекают глупых людей к программированию. И на самом деле вы ничего не можете с этим поделать.
источник
Для меня это новый игрушечный феномен. Появляется что-то новое (LINQ), и теперь каждый разработчик хочет поиграть с этим.
Они считают LINQ молотком, а каждая проблема - гвоздем. Кому интересно, проще ли это сделать по-другому? LINQ должен быть ответом! Например, когда все использовали XML для ВСЕГО! Файл конфигурации? XML. Хранение данных? XML. И т. Д.
источник
Я думаю, что LINQ предлагает действительно хорошую возможность в C # решать проблемы, используя более функциональный подход. Мы не должны отклонять новый стиль решения проблем только потому, что у нас уже есть что-то, что работает.
Исходя из обширного опыта работы с SQL, мне нравится иметь возможность использовать логику, основанную на множестве, в моем C #, чтобы лучше описать цель моих операций.
Это сказал; контекст - король, и все, что угодно, может быть злоупотреблено.
источник
LINQ и jQuery - новейшие «игрушки», и разработчики любят демонстрировать, как они могут делать что-то, используя самые последние вещи.
источник
Если вы правильно используете Linq и понимаете это под капотом, вы найдете все виды новых передовых методов программирования.
Поэтому, если вы глубоко задумаетесь об улучшениях, я утверждаю, что это делает вас лучшим программистом. Ли данный программист на самом деле делает это или нет, это не ошибка Линка.
Тот же аргумент может быть сделан для объектно-реляционных картографов. Кто-нибудь действительно пишет сырые SQL-запросы к таблицам базы данных? :)
источник
Некоторые из этих безумных вещей происходят из-за того, что люди используют неправильный молот, другие из-за того, что они строят действительно элегантный супер-молот, но они столкнулись со странной деталью, которую необходимо преодолеть.
Например, если вы видите вопрос об использовании linq для генерации динамического linq для использования против нединамического linq в девяти случаях из десяти, человеку либо просто любопытно, если это возможно, либо лай неправильного дерева, но есть несколько вещи, которые вы можете решить таким образом, которые трудно до такой степени неразумно решить иначе.
Я отвечаю на подобные вопросы в двух частях:
Я обнаружил, что почти всегда делаю их в таком порядке. Он отвечает на вопрос, а также помогает вам лучше объяснить возможные альтернативы.
источник
Я не знаю о каком-либо ошеломляющем влиянии на умы разработчиков, но посмотрите здесь на влияние проницательных инструментов / языков на тарифы. Разговор о снижении планки!
источник
Я согласен с Мейсоном Уилером. Тем не менее, это не совсем безумие, чтобы попытаться решить https://stackoverflow.com/questions/3762202/get-range-of-integers-with-linq , используя «последовательность». Проблема в том, что итераторы Java и .Net не поддерживают все 3 операции: текущее значение, следующее значение и переход к следующему. Clojure может делать все 3, и я подозреваю, что в Clojure это проще сделать правильно. Python также имеет сопрограммы, и я хочу попробовать взломать это. http://clojure.org/sequence http://www.try-clojure.org/
На самом деле, если ввод представляет собой бесконечную последовательность, такую как http://oeis.org/A007401 , ленивый является единственным способом.
источник
System.Linq
пространстве имен.yield
оператор существовали до Linq, как и делегаты. Замыкания пришли в том же выпуске, что и Linq, но немногие чистые операции "Linq" фактически требуют захвата локальной переменной. На вопрос "Как я могу сделать [описание полностью итеративной операции / функции] с Linq?" выдает глубокое незнание как самого Linq (что он должен делать), так и самого языка.