Re[6]: Ваши коллеги
От: -n1l-  
Дата: 01.09.13 05:38
Оценка:
Здравствуйте, MxMsk, Вы писали:

MM>Здравствуйте, -n1l-, Вы писали:


N>>Т.е. то, что абстрактный класс в самом деле — статический класс можно узнать и помнить, но все эти фишки умещаются в первое отличие.

MM>Ни разу не статический, а такой, который нельзя инстанцировать.
Так и хочется рихтера вам подарить и тому кто вам плюсик поставил.
Re[6]: Ваши коллеги
От: -n1l-  
Дата: 01.09.13 05:47
Оценка: +1
Здравствуйте, nightcode, Вы писали:

N>Здравствуйте, -n1l-, Вы писали:


N>>Ок, но тогда вы просто обязаны ответить на следующие вопросы...

N>1. чувствуется баттхерт
N>2. ты дотнетчик

Это не злость или зависть или желание что-то доказать(на вашем языке баттхерт), это простое непонимание.
Re[6]: Ваши коллеги
От: -n1l-  
Дата: 01.09.13 05:52
Оценка:
Здравствуйте, samius, Вы писали:

S>Здравствуйте, -n1l-, Вы писали:


S>Не согласен. Даже если взять чисто абстрактный класс, он уже будет отличаться от интерфейса даже при отсутствии реализации каких либо методов.

Ну так потому, что он на в самом деле статический.

S>Зачастую (в том же дотнете) это непересекающиеся вещи.

Для языка да, а для компилятора нет.

S>Наборы сигнатур — это как раз общее, а не отличающее.

Нууу ок.

N>>То, что для абстрактного класса можно пользоваться всякими фишками наследования, это тоже относится к первому отличию.

S>Для интерфейса тоже можно пользоваться всякими фишками наследования. Это относится к общему.
Да ну? Что я могу обращаться через класс к интерфейсу и вызывать метод интерфейса?
Нет. Я должен его определить в классе.


N>>Дополните меня?

S>Хотя бы то что класс можно унаследовать лишь от одного класса, но реализовать множество интерфейсов.
Это ограничение языка, а не особенность интерфейсов.
S>Интерфейс не может содержать объявления кроме методов, свойств и событий экземпляра, а абстрактный класс может содержать все остальное.
Здрас-те пришли к первому отличию.

S>Я докапался до того что слово "все" обычно подразумевает завершение перечисление отличий. А их вон еще сколько. И я ведь не все еще назвал.

Ну так назовите.
Re[4]: Ваши коллеги
От: -n1l-  
Дата: 01.09.13 06:04
Оценка:
Здравствуйте, nightcode, Вы писали:

N>Здравствуйте, -n1l-, Вы писали:


N>>Фактически да, но если абстрагироваться до их использования, они очень похожи.

N>чем ? ну да, и тому и другому требуется реализация, все, больше ничего общего
В абстрактном классе можно определить обычный метод с телом, что-то выполняющим и вызывать этот метод из наследника.
Не обязательно каждый метод абстрактном классе помечать атрибутом abstract.
Re[5]: Ваши коллеги
От: devcoach  
Дата: 01.09.13 06:04
Оценка: :)
Здравствуйте, -n1l-, Вы писали:

N>Ок, но тогда вы просто обязаны ответить на следующие вопросы.

N>Какие задачи для java вы считаете хорошими?
N>Какие по вашему мнению задачи решаются на c# кроме сайтов и десктоп приложений, хотя десктоп это все таки не лафа.
N>Считаете ли вы, что задачи которые решаются на java на c# сделать невозможно?
N>Решали ли вы какие-то сложные задачи на c#.
N>Встречали ли вы тех, кто такие задачи решал?

1) "Хорошие задачи" в контексте этого топика, это задачи, которые требуют глубокого понимания базовых принципов.
2) Я нигде не говорил о том, что на C# хороших задач нет.
3) Речь идет лишь о том, что C# это в бОльшей степени сайтики и декстоп, и в меньшей степени сложный server-side, и в еще меньшей степени еще более солжное системное программирование. Как следствие, "хороших" задач в C# меньше в относительном исчислении по сравнению с Java/C/C++. Как следствие следствия — спецы C# в среднем менее квалифицированы.

async/await — хз, как это работает;
volatile — да хз, хрень какая-то
и т.д. и т.п.
Re[4]: Ваши коллеги
От: devcoach  
Дата: 01.09.13 06:06
Оценка:
Здравствуйте, nightcode, Вы писали:

N>нет, благодаря опыту

А что такое "опыт"?

N>это вообще что-то типа азбуки, ты еще укажи, что клавиатурой надо уметь пользоваться

N>я не понимаю, что такое "базовые знания", то что ты выше указал это ну максимум юниор какой-нить зеленый имеет право не знать
Это примеры, сопоставимые с тем, что спросил автор — про async/await. Да, это действительно простые вещи, и я об этом писал выше — никакого rocket science. Да, это действительно должен знать каждый уважающий себя программист.
Но ведь это же не я тут развел спор. Это ваши коллеги утверждают, что дескать "эти знания нам сто лет в обед не сдались".
Re[4]: Ваши коллеги
От: -n1l-  
Дата: 01.09.13 06:14
Оценка:
Здравствуйте, nightcode, Вы писали:
N>нет, благодаря опыту
Потрясающий ответ.
— Почему этот старый мудрец такой мудрый?
— Потому что он старый.

N>это вообще что-то типа азбуки, ты еще укажи, что клавиатурой надо уметь пользоваться

Согласен.

N>я не понимаю, что такое "базовые знания", то что ты выше указал это ну максимум юниор какой-нить зеленый имеет право не знать

Вообще под термином "базовые знания" должны подразумеваться алгоритмы и структуры данных и джун их должен знать прежде всего. Но предыдущий оратор явно имел ввиду какие-то специфические знания платформы.
Re[6]: Ваши коллеги
От: -n1l-  
Дата: 01.09.13 06:23
Оценка:
Здравствуйте, devcoach, Вы писали:

D>1) "Хорошие задачи" в контексте этого топика, это задачи, которые требуют глубокого понимания базовых принципов.

Что вы понимаете под базовыми принципами?
D>2) Я нигде не говорил о том, что на C# хороших задач нет.
А я не спрашивал есть или нет, я спрашивал "какие"?
D>3) Речь идет лишь о том, что C# это в бОльшей степени сайтики и декстоп, и в меньшей степени сложный server-side, и в еще меньшей степени еще более солжное системное программирование. Как следствие, "хороших" задач в C# меньше в относительном исчислении по сравнению с Java/C/C++. Как следствие следствия — спецы C# в среднем менее квалифицированы.
Что вы понимаете под server-side? Что вы понимаете под системным программированием?
Вы встречали людей которые занимаются встраиваемыми системами?
Вы встречали людей, которые пишут драйвера на java?

D>async/await — хз, как это работает;

D>volatile — да хз, хрень какая-то
D>и т.д. и т.п.
Это уже другая тема.
Re[5]: Ваши коллеги
От: devcoach  
Дата: 01.09.13 06:27
Оценка:
Здравствуйте, nightcode, Вы писали:

N>а мы вот перешли на scala, так это вообще караул — спецов просто нет, ни хороших, ни плохих, хоть обратно на яву возвращайся

А что вас толкнуло перейти на Скалу, если не секрет? Как принималось это решение?

У нас на Скале пишут GUI, что в принципе, еще кое-как обоснованно — много всяких кложурок надо фигачить в тех же листенерах.
Re[7]: Ваши коллеги
От: devcoach  
Дата: 01.09.13 06:44
Оценка: +1
Здравствуйте, -n1l-, Вы писали:

N>Здравствуйте, devcoach, Вы писали:


N>Что вы понимаете под базовыми принципами?

Читайте самый первый пост в топике.

N>А я не спрашивал есть или нет, я спрашивал "какие"?

Что за вопрос? Такие, которые требуют глубокого понимания принципов работы компьютера, порой вплоть до железяк. Пример — погуглите по слову Disruptor.

N>Что вы понимаете под server-side? Что вы понимаете под системным программированием?

Ок, "системное программирование" — не совсем корректный термин. Давайте так — низкоуровневое программирование. "Низость" — понятие относительное. Server-side — все то, что относится к серверу — как обработчики конкретных запросов, так и сам сервер. Когда вам надо, например, захэндлить запрос от клиента внутри IIS, и вы оперируете высокоуровневыми понятиями — энтити там всякие, SQL запросики — это высокоуровневое программирование. Когда вам надо, например, сам сервер написать, и вы оперируете сокетами, массивами байт, паритесь о многопоточности — это инзкоуровневое программирование. Разумеется, есть и промежуточные варианты.
Так вот, чем "ниже" уровень решаемой задачи, тем больше базовых знаний требуется для ее решения.

На C# задачи, в большинстве своем, высокоуровневые, потому программисты могут запросто не знать азов и быть низкоквалифицированными. Какие задачи — такой и специалист.
На C/C++/Java низкоуровневых задач значительно больше ввиду того, что эти языки применимы на разных платформах. Как следствие, спецов, которые знают основы, в относительном исчислении больше.

D>>async/await — хз, как это работает;

D>>volatile — да хз, хрень какая-то
D>>и т.д. и т.п.
N>Это уже другая тема.
Это как раз то, о чем идет речь в топике.
Re[8]: Ваши коллеги
От: anonym_anonymous  
Дата: 01.09.13 06:57
Оценка: 1 (1)
Здравствуйте, devcoach, Вы писали:

D>На C# задачи, в большинстве своем, высокоуровневые, потому программисты могут запросто не знать азов и быть низкоквалифицированными. Какие задачи — такой и специалист.

D>На C/C++/Java низкоуровневых задач значительно больше ввиду того, что эти языки применимы на разных платформах. Как следствие, спецов, которые знают основы, в относительном исчислении больше.

Свеном с sql.ru — ты, что ли? Там тебя забанили, сюда прилез?
Re[7]: Ваши коллеги
От: MxMsk Португалия  
Дата: 01.09.13 07:06
Оценка: +1
Здравствуйте, -n1l-, Вы писали:

MM>>Ни разу не статический, а такой, который нельзя инстанцировать.

N>Так и хочется рихтера вам подарить и тому кто вам плюсик поставил.
Спасибо, но у меня уже есть. CLR via C#, 3d Edition:

If the class is abstract, the compiler-produced default constructor has protected accessibility;

Этого достаточно для понимания того, что абстрактный класс не является статическим, который не может иметь экземплярного конструктора.

Если недостаточно, можно открыть главу Static Classes, в которой перечислены ограничения, накладываемый на статический класс. В частности:

The class must define only static members (field, methods, properties, and events).

Абстрактный класс легко может объявлять экземплярные члены. Да, собственно, именно такие он и содержит на 99%.
Re[8]: Ваши коллеги
От: -n1l-  
Дата: 01.09.13 07:35
Оценка:
Здравствуйте, devcoach, Вы писали:

Ок, ну все понятно. Давайте абстрогируемся. Представим, что вы специалист c++, который работает с ком портом считывая с него данные. Данные приходят к вам в виде массива из десятичных чисел типа byte. Далее вы проводите какие-то обычные арифметические операции типа умножения и деления и отсылаете результат в файл.
Я — программист которые эту же задачу решает на асме, но в отличии от вас, предположим мне нужно все эти арифметические операции реализовать. Т.е. у меня задача та же самая, но реализация "ниже" как вы выразились.
А теперь вопрос, могу ли я сказать, что вы как специалист хуже чем я, раз я решаю задачу на языке в котором меньше возможностей?
Второй вопрос, что вам мешает понимать, как работает арифметика компьютера программируя на более высокоуровневом языке.
Еще раз сделаю акцент на вашей логике.
Вы берете разработчика, который пишет в основном сайты на asp.net и начинаете принижать его компетенцию за то, что он не писал каких-то сложных абстрактных серверов и систем. Позже вы эти выводы обобщаете на всех.
Я вот например, абсолютно уверен в том, что программируя на с++ можно вообще не знать как работает программный стек.
Другое дело, что я бы не использовал с++ если бы мне не была критически важна производительность.

Ну ладно, предположим, что специалисты программирующие на с++ все очень круты.
Но java? Java такой же фреймворк как и дотнет? Java то чем обходит?

D>Это как раз то, о чем идет речь в топике.

Мы как бы отошли от контекста топика, если что.
Re[8]: Ваши коллеги
От: -n1l-  
Дата: 01.09.13 07:41
Оценка: :)
    abstract class A
    {
        
    }

    static class B
    {
        
    }



.class private abstract auto ansi beforefieldinit ConsoleApplication1.A
       extends [mscorlib]System.Object
{
} // end of class ConsoleApplication1.A

.class private abstract auto ansi beforefieldinit ConsoleApplication1.A
       extends [mscorlib]System.Object
{
} // end of class ConsoleApplication1.A


В чем отличие? Правильно, от статического класса нельзя наследоваться. Перечитайте рихтера.
Re[8]: Ваши коллеги
От: -n1l-  
Дата: 01.09.13 07:42
Оценка:
Не так скопировал:


.class private abstract auto ansi sealed beforefieldinit ConsoleApplication1.B
       extends [mscorlib]System.Object
{
} // end of class ConsoleApplication1.B

.class private abstract auto ansi beforefieldinit ConsoleApplication1.A
       extends [mscorlib]System.Object
{
} // end of class ConsoleApplication1.A
Re[9]: Ваши коллеги
От: devcoach  
Дата: 01.09.13 08:15
Оценка: +1
Здравствуйте, -n1l-, Вы писали:

N>Вы берете разработчика, который пишет в основном сайты на asp.net и начинаете принижать его компетенцию за то, что он не писал каких-то сложных абстрактных серверов и систем. Позже вы эти выводы обобщаете на всех.

Вы совершенно неверно интепретируете то, что я написал выше. Вот вы пишете: "я могу реализовать калькулятор как на высокоуровневом C#, так и на ассемблере". Ну ок, вы пришли к выводу, что все то, что можно сделать с помощью высокоуровневых инструментов, можно сделать и с помощью низкоуровневых. Ну спасибо, что проговорили очевидные вещи. Но я то говорю про обратное — не все, что можно сделать с помощью низкоуровневых инструментов можно сделать с помощью высокоуровневых. Поэтому спец, который знает, как все работает "под капотом", использует высокоуровневые инструменты везде, где это возможно, а где нет — переходит к низкоуровневым. Более того, крайне важный момент — понимание из каких низкоуровневых инструментов составлена высокоуровневый, он принимает более правильные решения о том, какой высокоуровневый инструмент использовать. Благодаря этому же он может лучше прогнозировать, а грамотное прогнозирвоание — один из важнейших скиллов архитектора.

Вот вам простейший пример из недавней практики. Мне нужно было сделать HTTP клиента, который общается с HTTP сервером. Банальщина. Но, мне нужна была особая поддержка обработки серверного ответа 100-Continue. Благодаря моим знаниям того, как работает HTTP протокол, и того, как реализованы два наиболее распространенных клиента, я быстро пришел к выводу, что они мне не подходят. Если бы я этих основ не знал, то я сначала взял бы один клиент, потом написал бы какой-то код, код бы не заработал, я бы его стер, потом взял другой клиент, его бы попробовал, он бы тоже не подошел, и т.д. В итоге — я убил бы кучу времени в никуда. Но я знал основы, поэтому быстро понял, что в лоб эту задачу не решить. И нашел другое правильное решение, не написав ни одной лишней строчки кода.

N>Ну ладно, предположим, что специалисты программирующие на с++ все очень круты.

N>Но java? Java такой же фреймворк как и дотнет? Java то чем обходит?
Вы шутите? Кроссплатформенность — слышали про такое7 Только не надо мне говорить про Mono. Что бы оно дозрело до того, что бы компании смело брали его в продакшн, еще лет 10 пройдет как минимум.
То есть инструментарий то что у Java, что у .Net один. Но у .Net я могу применять эти инструменты только под Виндой, а на Java — в любом окружении. Это и предопределяет то, что на Java можно спокойно писать серверные продукты, зная, что они пойдут в наиболее стабильном и востребованном серверном окружении — unix/linux-like операционках.
Re: Ваши коллеги
От: neFormal Россия  
Дата: 01.09.13 08:24
Оценка:
Здравствуйте, cocacola, Вы писали:

C>Но вот я смотрю на некоторых своих коллег, реально, до их уровня мне не дойти в силу наверно ограниченных способностей что-ли.


пиши больше кода для бога кода!

C>Как у вас с этим на работе? Какой уровень ваших коллег?


копают, разбираются. молодцы, короче говоря.
...coding for chaos...
Re[7]: Ваши коллеги
От: samius Япония http://sams-tricks.blogspot.com
Дата: 01.09.13 08:50
Оценка:
Здравствуйте, -n1l-, Вы писали:

N>Здравствуйте, samius, Вы писали:


S>>Не согласен. Даже если взять чисто абстрактный класс, он уже будет отличаться от интерфейса даже при отсутствии реализации каких либо методов.

N>Ну так потому, что он на в самом деле статический.
На самом деле это чушь.

S>>Зачастую (в том же дотнете) это непересекающиеся вещи.

N>Для языка да, а для компилятора нет.
Пердлагаю объявить абстрактный класс с абстрактным методом, заменить ключевое слово abstract на static и почитать, что скажет компилятор.

S>>Наборы сигнатур — это как раз общее, а не отличающее.

N>Нууу ок.

N>>>То, что для абстрактного класса можно пользоваться всякими фишками наследования, это тоже относится к первому отличию.

S>>Для интерфейса тоже можно пользоваться всякими фишками наследования. Это относится к общему.
N>Да ну? Что я могу обращаться через класс к интерфейсу и вызывать метод интерфейса?
Что значит обращаться "через класс"? Но да, обращаясь к интерфейсу вы вызываете метод интерфейса, в то время как у класса может быть свой метод с такой же сигнатурой.
N>Нет. Я должен его определить в классе.
Естественно.


N>>>Дополните меня?

S>>Хотя бы то что класс можно унаследовать лишь от одного класса, но реализовать множество интерфейсов.
N>Это ограничение языка, а не особенность интерфейсов.
S>>Интерфейс не может содержать объявления кроме методов, свойств и событий экземпляра, а абстрактный класс может содержать все остальное.
N>Здрас-те пришли к первому отличию.
Нет, не пришли. Т.к. объявление != реализация.

S>>Я докапался до того что слово "все" обычно подразумевает завершение перечисление отличий. А их вон еще сколько. И я ведь не все еще назвал.

N>Ну так назовите.
Пожалуйста. У объявлений в классе можно указывать модификатор видимости. У интерфейса — нет.
Или вам все отличия указать? Боюсь,что я не подписывался. Еще раз. Я лишь опроверг ваш тезис о том что "Все" после одного отличия.
Re[9]: Ваши коллеги
От: samius Япония http://sams-tricks.blogspot.com
Дата: 01.09.13 08:58
Оценка: 6 (1)
Здравствуйте, -n1l-, Вы писали:

N>
N>.class private abstract auto ansi beforefieldinit ConsoleApplication1.A
N>       extends [mscorlib]System.Object
N>{
N>} // end of class ConsoleApplication1.A

N>.class private abstract auto ansi beforefieldinit ConsoleApplication1.A
N>       extends [mscorlib]System.Object
N>{
N>} // end of class ConsoleApplication1.A

N>


N>В чем отличие? Правильно, от статического класса нельзя наследоваться. Перечитайте рихтера.


Во-первых, статический класс — это термин высокоуровнего языка, а не CIL. ECMA-335 не содержит упоминания "static class". Если честно, содержит ровно одно в rationale от 11.10.1.4.
А раз это не термин CIL, то искать серьезные отличия на уровне CIL не стоит, т.к. CIL просто не имеет соответствующей специфики для представления статических классов. Вы бы еще в машинных кодах разницу поискали.
Re[10]: Ваши коллеги
От: MxMsk Португалия  
Дата: 01.09.13 09:05
Оценка: +1
Здравствуйте, samius, Вы писали:

S>Во-первых, статический класс — это термин высокоуровнего языка, а не CIL. ECMA-335 не содержит упоминания "static class". Если честно, содержит ровно одно в rationale от 11.10.1.4.

S>А раз это не термин CIL, то искать серьезные отличия на уровне CIL не стоит, т.к. CIL просто не имеет соответствующей специфики для представления статических классов. Вы бы еще в машинных кодах разницу поискали.
Угу. Если следовать его логике, то локальные переменные, попавшие в лямбду, надо называть полями класса.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.