Здравствуйте, Wissenschaftler, Вы писали:
W>И? Есть куча людей, для которых LINQ — это инструмент, который они удачно и умело используют при разработке на C#. Что дает сакральное знание, парсит его кодогенератор C#, или транслирует во что-то .Net-специфичное, после чего его парсит кодогенератор .Net? Как это скажется на качестве и скорости решения разработчиками задач?
Это просто такой тест на умение вести диалог. Я привожу некоторые аргументы — linq есть только в C# (c 3.0) и VB (c 9.0), такие-то ключевые слова добавлены в язык и т.д., в ответ лишь — все равно упертое мнение, без каких-либо аргументов, нервные возгласы в стиле — вы тут меня завалить чтоли хотите и т.д.
Я на собеседовании отвечал на эти же вопросы спокойно (список вопросов один), после уже пообщались на более интересные темы. Просто я не додумываю за собеседующих, зачем задаются вопросы, отвечаю на них и все. Много думать что зачем и почему — вредно.
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Здравствуйте, michael_isu, Вы писали:
_>>Вопросов задается около 15, на разные базовые понятия, поэтому мнение складывается целостное.
ВВ>По вашим высказыванием здесь такое впечатление совсем не складывается.
Я привел лишь пару примеров ответов на вопросы и их реакции.
_>>Linq — это language integrated query.
ВВ>И что? Сей факт не мешал авторам этой аббревиатуры выносить ее в название типов фреймворка. Или вас как-то по-особенному на выделенном клинит? Попробуйте код с Linq запросами скомпилировать под фреймворк 2.0. Заработает?
Консоль с таргетом .net 2.0:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var items = new List<int>(new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 });
var foo = from i in items
where i % 2 == 0
select i;
}
}
}
Error: The type or namespace name 'Linq' does not exist in the namespace 'System' (are you missing an assembly reference?)
Что нужно сделать, чтобы избавиться от этой ошибки?
Здравствуйте, Воронков Василий, Вы писали:
ВВ>И что? Сей факт не мешал авторам этой аббревиатуры выносить ее в название типов фреймворка. Или вас как-то по-особенному на выделенном клинит? Попробуйте код с Linq запросами скомпилировать под фреймворк 2.0. Заработает?
Да, требуется просто наличие соответствующих типов. Одного конкретного — ExtensionMethodAttribute или как там его, а остальные по спекe языка в секции Query expressions.
Здравствуйте, samius, Вы писали:
S>Здравствуйте, Воронков Василий, Вы писали:
ВВ>>И что? Сей факт не мешал авторам этой аббревиатуры выносить ее в название типов фреймворка. Или вас как-то по-особенному на выделенном клинит? Попробуйте код с Linq запросами скомпилировать под фреймворк 2.0. Заработает? S>Да, требуется просто наличие соответствующих типов. Одного конкретного — ExtensionMethodAttribute или как там его, а остальные по спекe языка в секции Query expressions.
Т.е., говоря другими словами, потребуется подключать библиотеки *фреймворка*?
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Здравствуйте, samius, Вы писали:
S>>Да, требуется просто наличие соответствующих типов. Одного конкретного — ExtensionMethodAttribute или как там его, а остальные по спекe языка в секции Query expressions.
ВВ>Т.е., говоря другими словами, потребуется подключать библиотеки *фреймворка*?
Нет, не требуется. Можно слабать нужные типы по месту, не подключая вообще ничего.
__>если взять оттуда случайные 100 человек, дать Х денег и сказать — все, вы теперь другая контора, экшен! становись профитабл, делай продукт, они просрут все деньги и выдадут мохнатую зеленую какашку, которая полностью провалится в продажах.
а из какой конторы будет не так? назовите претендентов. гугл? яблоко? то же самое будет.
W>но никто, никто, чёрт возьми, не задает такие вопросы, как: W>Как бы Вы разбили эту задачу на адекватные подзадачи, чтобы минимизировать риски
ну во многих конторах этим занимаются тим-лиды или менеджеры. но да, вопрос имеет смысл. как повод поговорить о дизайне.
W>Как бы организовали систему тестов, если бы пришлось разрабатывать такую-то систему W>Как бы пошагово локализовывали такой-то баг в некоторой системе
А вот это вопросы, которые обсудить на простых примерах невозможно, а на сложных слишком сложно.
А главное основываясь на этих вопросах очень сложно сделать выводы о человеке.
Ни разу не наблюдал, как коллеги работающие вместе довольно давно не могут прийти к общему мнению по подобным вопросам? Вот так и тут будет. У тебя свое виденье системы тестирования или дизайна, у кандидата свое. И дальше что?
Здравствуйте, samius, Вы писали:
ВВ>>Т.е., говоря другими словами, потребуется подключать библиотеки *фреймворка*? S>Нет, не требуется. Можно слабать нужные типы по месту, не подключая вообще ничего.
Ага, и реализовать весь требуемый функционал с нуля. При этом Линк у нас редуцируется лишь до особого синтаксиса, который поддерживает компилятор.
Параллельно с этим человек может использовать функции из System.Linq на каком-нибудь C++\CLI без всякого специального синтаксиса и вполне закономерно считать, что он использует Линк. Библиотека же именно так и называется.
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Здравствуйте, samius, Вы писали:
ВВ>>>Т.е., говоря другими словами, потребуется подключать библиотеки *фреймворка*? S>>Нет, не требуется. Можно слабать нужные типы по месту, не подключая вообще ничего.
ВВ>Ага, и реализовать весь требуемый функционал с нуля. При этом Линк у нас редуцируется лишь до особого синтаксиса, который поддерживает компилятор.
Весь требуемый для конкретного примера — лишь метод Where
ВВ>Параллельно с этим человек может использовать функции из System.Linq на каком-нибудь C++\CLI без всякого специального синтаксиса и вполне закономерно считать, что он использует Линк. Библиотека же именно так и называется.
Только линком называется не библиотека, а комплекс средств, большая часть из которых — языковые расширения. Некоторые из них не доступны в C++/CLI — анонимные типы, екстеншн методы, Query expression. теряюсь даже как там с лямбдами и замыканиями для CLI.
ну и как, сильно похоже на LINQ:
Enumerable::Select(Enumerable::Where(Enumerable::Join(source, ...
?
19.02.2011 2:42, мыщъх пишет: > а индустрии по в рф нет. именно индустрии. > программисты есть, а индустрии нет.
Вот в этом я согласен с тобой на 100%. И по сути — это и есть ответ на
все вопросы ТС.
Здравствуйте, samius, Вы писали:
ВВ>>Параллельно с этим человек может использовать функции из System.Linq на каком-нибудь C++\CLI без всякого специального синтаксиса и вполне закономерно считать, что он использует Линк. Библиотека же именно так и называется. S>Только линком называется не библиотека, а комплекс средств, большая часть из которых — языковые расширения. Некоторые из них не доступны в C++/CLI — анонимные типы, екстеншн методы, Query expression. теряюсь даже как там с лямбдами и замыканиями для CLI.
Именно что, что Линком называется не библиотека. И не синтаксис. Так уж получается, что данный термин используют для обозначения и того, и другого. "Комплекса средств". В этом смысле утверждения "Линк это часть языка C#" и "Линк это часть фреймворка" могут рассматриваться как одинаково верные и как одинаково неверные, если собеседующему так больше хочется.
Как раз на мой взгляд основная часть Линка — это НЕ языковые расширения. Из последних полезны разве что экстеншин методы и лямбды, при том что оба формально связаны с Линком лишь косвенно. Кстати, экстеншин методы тоже не нужны. В том же Немерле очень даже удобно вызывать методы через пайпы.
А "со стороны фреймворка" Линк — это далеко не только библиотека с ФВП, это и абстрактное АСТ, и отдельный компилятор для выражений.
S>ну и как, сильно похоже на LINQ: S>Enumerable::Select(Enumerable::Where(Enumerable::Join(source, ... S>?
Смысл вопроса мне неясен. А seq.Select(...).Where(...) сильно похоже на Линк? Или Select(_,...) |> Where (_,...)?
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Именно что, что Линком называется не библиотека. И не синтаксис. Так уж получается, что данный термин используют для обозначения и того, и другого. "Комплекса средств". В этом смысле утверждения "Линк это часть языка C#" и "Линк это часть фреймворка" могут рассматриваться как одинаково верные и как одинаково неверные, если собеседующему так больше хочется.
Для меня все довольно однозначно. Линк без поддержки фреймворка имеет смысл, Линк без поддержки языка — нет. Потому я против того что бы рассматривать Линк отдельно от языка.
ВВ>Как раз на мой взгляд основная часть Линка — это НЕ языковые расширения. Из последних полезны разве что экстеншин методы и лямбды, при том что оба формально связаны с Линком лишь косвенно.
Это все равно что говорить о том что Generics — это не расширение платформы и язка, а классы в FCL.
ВВ>Кстати, экстеншин методы тоже не нужны. В том же Немерле очень даже удобно вызывать методы через пайпы.
Да и линк-то по сути не нужен, в 2.0 обходились без него, да и многими библиотеками, заточенными под линк, можно пользоваться без расширений языка.
ВВ>А "со стороны фреймворка" Линк — это далеко не только библиотека с ФВП, это и абстрактное АСТ, и отдельный компилятор для выражений.
Только по той милости что компиляторы в самом фреймворке. Еще раз, линк без поддержки фреймворка возможен.
S>>ну и как, сильно похоже на LINQ: S>>Enumerable::Select(Enumerable::Where(Enumerable::Join(source, ... S>>?
ВВ>Смысл вопроса мне неясен.
Я просто считаю что то что вызываются методы из неймспейса System::Linq, говорит только о том, что вызываются методы из этого неймспейса. ВВ>А seq.Select(...).Where(...) сильно похоже на Линк?
Довольно похоже, но на самом деле это может быть банальным fluent интерфейсом
ВВ>Или Select(_,...) |> Where (_,...)?
совсем не похоже
Здравствуйте, samius, Вы писали:
ВВ>>Именно что, что Линком называется не библиотека. И не синтаксис. Так уж получается, что данный термин используют для обозначения и того, и другого. "Комплекса средств". В этом смысле утверждения "Линк это часть языка C#" и "Линк это часть фреймворка" могут рассматриваться как одинаково верные и как одинаково неверные, если собеседующему так больше хочется. S>Для меня все довольно однозначно. Линк без поддержки фреймворка имеет смысл, Линк без поддержки языка — нет. Потому я против того что бы рассматривать Линк отдельно от языка.
Линк без поддержки фреймворка это просто синтаксис. Какой еще он может иметь смысл? По-моему в этом синтаксисе вообще смысла довольно мало.
ВВ>>Как раз на мой взгляд основная часть Линка — это НЕ языковые расширения. Из последних полезны разве что экстеншин методы и лямбды, при том что оба формально связаны с Линком лишь косвенно. S>Это все равно что говорить о том что Generics — это не расширение платформы и язка, а классы в FCL.
Нет, не все равно. Линк таки включает в себя библиотеку для работы с коллекциями в функциональном стиле, причем библиотека эта спокойно может использоваться и без синтаксиса.
ВВ>>А "со стороны фреймворка" Линк — это далеко не только библиотека с ФВП, это и абстрактное АСТ, и отдельный компилятор для выражений. S>Только по той милости что компиляторы в самом фреймворке.
У Линка свой компилятор выражений, если что.
S>Еще раз, линк без поддержки фреймворка возможен.
Возможен синтаксис. Но 1) линк это не только синтаксис и 2) линк возможен и без синтаксиса.
ВВ>>Смысл вопроса мне неясен. S>Я просто считаю что то что вызываются методы из неймспейса System::Linq, говорит только о том, что вызываются методы из этого неймспейса.
А я считаю, что методы из этого неймспейса — это часть Линка. Такая же, как и встроенный в C# синтаксис.
ВВ>>А seq.Select(...).Where(...) сильно похоже на Линк? S>Довольно похоже, но на самом деле это может быть банальным fluent интерфейсом
В сухом остатке для удобного использования все инфраструктуры Линка достаточно лишь синтаксиса, позволяющего "по месту" объявлять делегаты. Все. Можно использовать Линк, а возможности C# — только в рамках 2.0.
Здравствуйте, divergo, Вы писали:
_>>Но фраза "объект имеет тип IEnumerable" вводила его в полный ступор.
D>Подобные вещи меня однозначно вгоняют в ступор + меланхолия + пропадает желание работать в этой компании. D>Не только Вы ищите профессионалов, но соискатели хотят работать в профессиональном окружении. D>Не являясь мега-гуру, и то понимаю, что классный спец никогда так не скажет. D>У хорошего специалиста и речь грамотная, ну или пусть пишет только код, и не собеседует.
Ну да, с меланхоликом жить тяжко, на то они и вопросы, чтобы выявить то, что нужно выявить. Кроме писать код, надо ещё с другими людьми уметь работать и общаться.
21.02.2011 12:55, genre пишет:
> У тебя свое виденье системы тестирования или дизайна, у кандидата свое. > И дальше что?
И это очень хорошо, если у него есть видение.
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Здравствуйте, samius, Вы писали:
S>>Для меня все довольно однозначно. Линк без поддержки фреймворка имеет смысл, Линк без поддержки языка — нет. Потому я против того что бы рассматривать Линк отдельно от языка.
ВВ>Линк без поддержки фреймворка это просто синтаксис. Какой еще он может иметь смысл? По-моему в этом синтаксисе вообще смысла довольно мало.
var, анонимные типы — это не синтаксис.
S>>Это все равно что говорить о том что Generics — это не расширение платформы и язка, а классы в FCL.
ВВ>Нет, не все равно. Линк таки включает в себя библиотеку для работы с коллекциями в функциональном стиле, причем библиотека эта спокойно может использоваться и без синтаксиса.
Не сильно спокойно.
ВВ>>>А "со стороны фреймворка" Линк — это далеко не только библиотека с ФВП, это и абстрактное АСТ, и отдельный компилятор для выражений. S>>Только по той милости что компиляторы в самом фреймворке.
ВВ>У Линка свой компилятор выражений, если что.
В FW 2 его нет, если что.
S>>Еще раз, линк без поддержки фреймворка возможен.
ВВ>Возможен синтаксис. Но 1) линк это не только синтаксис и 2) линк возможен и без синтаксиса.
LINQ без интеграции с языком? Интригует
ВВ>А я считаю, что методы из этого неймспейса — это часть Линка. Такая же, как и встроенный в C# синтаксис.
Но тогда придется считать частью линка многие другие методы, которые к FW не имеют отношения:
Maybe<U> Select<U>(Maybe<T>, Func<T, U>)
ВВ>В сухом остатке для удобного использования все инфраструктуры Линка достаточно лишь синтаксиса, позволяющего "по месту" объявлять делегаты. Все. Можно использовать Линк, а возможности C# — только в рамках 2.0.
Это только возможность вызова методов, не более. Интеграции в язык нет.
Здравствуйте, out-of-the-way, Вы писали:
OOT>В ООП исходят из того что тип это набор того что можно с этим типом сделать, экземпляр класса реализующего IEnumerable имеет тип IEnumerable. Тип это интерфейс, а класс это его конкретная реализация. Возникает небольшая путаница на счёт классов которые не реализуют интерфейсов, но на практике проблем не возникает.
Здравствуйте, michael_isu, Вы писали:
L>>Кто знает, в каком контексте был задан этот вопрос.
_>вопрос был такой — какого типа может быть переменная list:
_>var e = list.GetEnumerator();
IEnumerator? Мне кажется или вы сами на свой вопрос не смогли оветить?
Здравствуйте, samius, Вы писали:
ВВ>>Линк без поддержки фреймворка это просто синтаксис. Какой еще он может иметь смысл? По-моему в этом синтаксисе вообще смысла довольно мало. S>var, анонимные типы — это не синтаксис.
Что характерно это и не Линк. В языках, где нет анонимных типов, но есть, скажем, тюплы, ВНЕЗАПНО оказывается, что тюплы могут выполнять эту функцию не хуже. Интересно, они после этого становятся "частью Линка"?
S>>>Это все равно что говорить о том что Generics — это не расширение платформы и язка, а классы в FCL. ВВ>>Нет, не все равно. Линк таки включает в себя библиотеку для работы с коллекциями в функциональном стиле, причем библиотека эта спокойно может использоваться и без синтаксиса. S>Не сильно спокойно.
Спокойно, если не забывать, что экстеншин-методы и лямбды это все же синтаксические добавления в языке "общего назначения", а не строго привязанные к Линку. Если в языке есть хотя бы *аналогичные* механизмы, то Линк более чем юзабелен.
ВВ>>>>А "со стороны фреймворка" Линк — это далеко не только библиотека с ФВП, это и абстрактное АСТ, и отдельный компилятор для выражений. S>>>Только по той милости что компиляторы в самом фреймворке. ВВ>>У Линка свой компилятор выражений, если что. S>В FW 2 его нет, если что.
В FW2 и Линка нет, если что.
S>>>Еще раз, линк без поддержки фреймворка возможен. ВВ>>Возможен синтаксис. Но 1) линк это не только синтаксис и 2) линк возможен и без синтаксиса. S>LINQ без интеграции с языком? Интригует
А что добавление нового синтаксиса — это единственная интеграция с языком, которую ты можешь представить?
ВВ>>А я считаю, что методы из этого неймспейса — это часть Линка. Такая же, как и встроенный в C# синтаксис. S>Но тогда придется считать частью линка многие другие методы, которые к FW не имеют отношения: S>Maybe<U> Select<U>(Maybe<T>, Func<T, U>)
Не понял — ни причинно-следственной связи, ни вывода.
ВВ>>В сухом остатке для удобного использования все инфраструктуры Линка достаточно лишь синтаксиса, позволяющего "по месту" объявлять делегаты. Все. Можно использовать Линк, а возможности C# — только в рамках 2.0. S>Это только возможность вызова методов, не более. Интеграции в язык нет.