Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Работа Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 3 4 5 6 7 8 9 [10] 11 12   вперед  Ctrl      все
 Re: Подскажите хорошие компании для дотнетчика?  [new]
Андрей Юниор
Member

Откуда: Москва
Сообщений: 693
softwarer
В общем, примерно как спагетти из goto - сегодня почти никто даже не представляет, как оно выглядело и почему так писали, но все выучили как отче наш, что goto - это плохо.

Выучить-то выучили, но уже даже не знают, что такое go to, а также не знают, что его не существует

Роберт Мартин "Чистая архитектура". Глава 4. Структурное программирование
Объявление вредным
В 1968 году Дейкстра написал редактору журнала CACM письмо под за-головком Go To Statement Considered Harmful («О вреде оператора Go To»)1, которое было опубликовано в мартовском выпуске. В статье он обосновал свою позицию в отношении трех управляющих структур.

И мир программирования запылал. Тогда у нас не было Интернета, поэтому люди не могли публиковать злобные мемы на Дейкстру и затопить его не-дружественными сообщениями. Но они могли писать — и писали — письма редакторам многих популярных журналов.

Не все письма были корректными. Некоторые из них были резко отрица-тельными; другие выражали решительную поддержку. И эта битва продолжалась почти десять лет.

В конце концов спор утих по одной простой причине: Дейкстра победил. По мере развития языков программирования инструкция goto все больше сдавала свои позиции, пока, наконец, не исчезла. Большинство современных языков программирования не имеют инструкции goto, а некоторые, такие как LISP, никогда ее не имели.

В настоящее время все программисты используют парадигму структурного программирования, хотя и не всегда осознанно. Просто современные языки не дают возможности неограниченной прямой передачи управления.

Некоторые отмечают сходство инструкции break с меткой и исключений в Java с инструкцией goto. В действительности эти структуры не являются средствами неограниченной прямой передачи управления, имевшимися в старых языках, таких как Fortran или COBOL. Кроме того, даже языки, сохранившие ключевое слово goto, часто ограничивают возможность пере-ходов границами текущей функции.

Пример настоящего go to, которого не существует, но с которым до сих пор борются:
class MyGotoClass
{
    void Func1()
    {
    Label1:
        goto Label2;
    }

    void Func2()
    {
    Label2:
        goto Label1;
    }
}
23 фев 21, 00:23    [22284991]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите хорошие компании для дотнетчика?  [new]
fkthat
Member

Откуда:
Сообщений: 4341
softwarer
Подсказываю: switch, break, continue, catch, finally - это всё формы goto :)

А также все остальное, кроме if. Если у меня дома электропечка с электричеством от тепловой электростанции, то это не значит, что я на дровах дома готовлю.
23 фев 21, 00:48    [22284996]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите хорошие компании для дотнетчика?  [new]
fkthat
Member

Откуда:
Сообщений: 4341
softwarer
Подсказываю: switch, break, continue, catch, finally - это всё формы goto :)

Интересно, что бы ты сам сказал на интервью челу, который бы заявил, что все это ему нафиг не упало, потому что есть goto и ему его всю жизнь было достаточно.
23 фев 21, 00:53    [22284998]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите хорошие компании для дотнетчика?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 64866
Блог
fkthat
Интересно, что бы ты сам сказал на интервью челу, который бы заявил, что все это ему нафиг не упало, потому что есть goto и ему его всю жизнь было достаточно.

Ты не понимаешь Человек, который поработал без исключений и реализовывал аналогичный механизм с помощью setjmp() - исключения ценит и любит, потому что они удобнее. Про "нафиг не упало" он в жизни не скажет, ибо работал без них и помнит, что было хуже. Потом появляется молодой, который при соответствующем гоноре начинает рассказывать, что наследование исключения - зло, потому что их можно плохо применить, и раньше пользовались кодами ошибок и goto, и это было лучше. Вот он будет говорить про "нафиг не упало" - ровно потому, что сам в реальности так не делает
23 фев 21, 01:56    [22285007]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите хорошие компании для дотнетчика?  [new]
fkthat
Member

Откуда:
Сообщений: 4341
softwarer
Потом появляется молодой, который при соответствующем гоноре начинает рассказывать, что наследование исключения - зло, потому что их можно плохо применить, и раньше пользовались кодами ошибок и goto, и это было лучше.

Ты уж определись - у тебя то "молодежь про goto вообще не знает", а теперь у тебя они наоборот "goto вместо исключений".

Сообщение было отредактировано: 23 фев 21, 02:58
23 фев 21, 03:05    [22285014]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите хорошие компании для дотнетчика?  [new]
fkthat
Member

Откуда:
Сообщений: 4341
Роберт Мартин "Чистая архитектура". Глава 4. Структурное программирование
В 1968 году Дейкстра написал редактору журнала CACM письмо под за-головком Go To Statement Considered Harmful

Роберт Мартин "Чистая архитектура". Глава 4. Структурное программирование
И мир программирования запылал.

Если бы он назвал статью "Goto statement is Evil", то флейма было бы еще больше
23 фев 21, 03:51    [22285015]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите хорошие компании для дотнетчика?  [new]
Андрей Юниор
Member

Откуда: Москва
Сообщений: 693
Погромисты Хэшкоды, SOLID - о чём вы все тут говорите, если вы не знаете ни go to, ни if-then-else
fkthat
softwarer
Подсказываю: switch, break, continue, catch, finally - это всё формы goto :)

А также все остальное, кроме if.

Из той же главы той же книги:
Роберт Мартин "Чистая архитектура". Глава 4. Структурное программирование
Доказательство
<...>
Однако в других случаях инструкция goto не вызывала этой проблемы. Дейкстра заметил, что эти случаи «доброкачественного» использования goto соответствуют простым структурам выбора и управления итерациями, таким как if/then/else и do/while. Модули, использующие только такие управляющие структуры, можно было рекурсивно разложить на доказуемые единицы.

Дейкстра знал, что эти управляющие структуры в сочетании с последовательным выполнением занимают особое положение. Они были идентифицированы за два года до этого Бёмом и Якопини, доказавшими, что любую программу можно написать, используя всего три структуры: последовательность, выбор и итерации.

Это было важное открытие: управляющие структуры, делающие доказуемой правильность модуля, в точности совпадали с набором структур, минимально необходимым для написания любой программы. Так родилось структурное программирование.
<...>

И короткое определение структурного программирование:
Роберт Мартин "Чистая архитектура". Глава 3. Обзор парадигм
Структурное программирование
Первой, получившей всеобщее признание (но не первой из придуманных), была парадигма структурного программирования, предложенная Эдсгером Вибе Дейкстрой в 1968 году. Дейкстра показал, что безудержное использование переходов (инструкций goto) вредно для структуры программы. Как будет описано в последующих главах, он предложил заменить переходы более понятными конструкциями if/then/else и do/while/until.

Подводя итог, можно сказать, что:

Структурное программирование накладывает ограничение на прямую передачу управления.


Сообщение было отредактировано: 23 фев 21, 10:44
23 фев 21, 10:44    [22285043]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите хорошие компании для дотнетчика?  [new]
bk0010
Member

Откуда:
Сообщений: 5029
Андрей Юниор
доказавшими, что любую программу можно написать, используя всего три структуры: последовательность, выбор и итерации.
Выбор можно заменить итерацией (if можно заменить while), так что двух достаточно.
23 фев 21, 13:35    [22285116]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите хорошие компании для дотнетчика?  [new]
Андрей Юниор
Member

Откуда: Москва
Сообщений: 693
bk0010
Выбор можно заменить итерацией (if можно заменить while), так что двух достаточно.

Вы предлагаете отказаться от if, заменив его условным циклом? И в чём разница будет?
23 фев 21, 18:25    [22285269]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите хорошие компании для дотнетчика?  [new]
fkthat
Member

Откуда:
Сообщений: 4341
Андрей Юниор
Вы предлагаете отказаться от if, заменив его условным циклом? И в чём разница будет?

Речь шла о том, каким минимальным кол-вом управляющих конструкций можно теоретически полностью обойтись. "Do-until" и "switch" заведомо избыточны, но никому отказываться от них в голову не придет.
23 фев 21, 19:28    [22285310]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите хорошие компании для дотнетчика?  [new]
Дикий Билл
Member

Откуда:
Сообщений: 9599
fkthat
но никому отказываться от них в голову не придет.

питон обходится без switch.
23 фев 21, 19:56    [22285322]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите хорошие компании для дотнетчика?  [new]
fkthat
Member

Откуда:
Сообщений: 4341
Дикий Билл
fkthat
но никому отказываться от них в голову не придет.

питон обходится без switch.

Ну и что хорошего? За столом можно обходиться без вилки и есть все только ложкой, только зачем, если удобней пользоваться и тем и другим.
23 фев 21, 20:03    [22285325]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите хорошие компании для дотнетчика?  [new]
Дикий Билл
Member

Откуда:
Сообщений: 9599
fkthat
Дикий Билл
пропущено...

питон обходится без switch.

Ну и что хорошего? За столом можно обходиться без вилки и есть все только ложкой, только зачем, если удобней пользоваться и тем и другим.

не знаю, мне кажется else if удобней чем switch.
23 фев 21, 20:06    [22285326]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите хорошие компании для дотнетчика?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 64866
Блог
Дикий Билл
не знаю, мне кажется else if удобней чем switch.

switch, по идее, эффективнее. Изначально он записывался так:

ON i GOTO label1, label2, label3, label4, label5

Именно поэтому КР сделали в Си реализацию с необязательным break-ом в конце, это соответствовало привычному мышлению и стилю кодирования того поколения. Ну а то, что требование брейка перетащили в последующие языки - это уже просто карго-культ, вызывающий гомерический хохот.
23 фев 21, 21:13    [22285358]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите хорошие компании для дотнетчика?  [new]
fkthat
Member

Откуда:
Сообщений: 4341
softwarer
Ну а то, что требование брейка перетащили в последующие языки - это уже просто карго-культ, вызывающий гомерический хохот.

На самом деле разумно. Если ты в C не ставил явно break, то выполнение кода продолжалось дальше по всем остальным case пока break не встречался. Я с трудом могу сходу придумать, когда такой сценарий мог бы быть очень уж полезным, а вот баг сделать при этом из-за банальной опечатаки (забыл break написать) очень легко. Шарп, впрочем, при этом ничуть не запрещает объединять несколько case-ов, если они относятся к одному блоку кода и между ними кода нет.
23 фев 21, 21:49    [22285366]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите хорошие компании для дотнетчика?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 64866
Блог
fkthat
На самом деле разумно.

В последующих словах ни одно так и не объяснило, чем же это разумно. Разумным было бы подразумевать break в конце секции в любом случае и, может быть, игнорировать его, если он там есть (либо ругаться - тут можно спорить, какой вариант правильнее). Но так было бы, если бы Java создавали в двухтысячных, а не в девяностых.
23 фев 21, 22:06    [22285373]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите хорошие компании для дотнетчика?  [new]
fkthat
Member

Откуда:
Сообщений: 4341
softwarer
Разумным было бы подразумевать break в конце секции в любом случае и, может быть, игнорировать его, если он там есть

Я тоже, кстати, так когда-то думал. Но тогда нельзя будет написать так:
switch(foo)
{
    case 1:
    case 2:
         ....
         break;
    case 3:
    case 4:
         ......
         break;
     default:
         .....
         break;
}
23 фев 21, 22:52    [22285385]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите хорошие компании для дотнетчика?  [new]
Андрей Юниор
Member

Откуда: Москва
Сообщений: 693
fkthat
Я тоже, кстати, так когда-то думал. Но тогда нельзя будет написать так:

Можно:
class SwitchTest
{
    static void Main()
    {
        Console.WriteLine("Coffee sizes: 1=Small 2=Medium 3=Large");
        Console.Write("Please enter your selection: ");
        string s = Console.ReadLine();
        int n = int.Parse(s);
        int cost = 0;
        switch (n)
        {
            case 1:
                cost += 25;
                break;
            case 2:
                cost += 25;
                goto case 1;
            case 3:
                cost += 50;
                goto case 1;
            default:
                Console.WriteLine("Invalid selection.");
                break;
        }
        if (cost != 0)
        {
            Console.WriteLine($"Please insert {cost} cents.");
        }
        Console.WriteLine("Thank you for your business.");

        // Keep the console open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
/*
Sample Input:  2

Sample Output:
Coffee sizes: 1=Small 2=Medium 3=Large
Please enter your selection: 2
Please insert 50 cents.
Thank you for your business.
*/

Выше правильно сказали: необходимость break в switch - это наследие, от которого нужно было избавиться при создании c#. Но что-то пошло не так.

Сообщение было отредактировано: 23 фев 21, 22:51
23 фев 21, 22:56    [22285388]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите хорошие компании для дотнетчика?  [new]
Дикий Билл
Member

Откуда:
Сообщений: 9599
Поискал, в Java пытаются избавиться от break :)

int count = 2;
int value = switch (count) {
  case 1, 3, 5 -> 12;
  case 2, 4, 6 -> 52;
  default -> 0;
};
23 фев 21, 23:09    [22285392]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите хорошие компании для дотнетчика?  [new]
hVostt
Member

Откуда:
Сообщений: 18991
17-77
и потом Dictionary<MyClassCompositeKey, MyClass> ?

а что за кейс?


Например, вытесняющий кеш со сложной политикой компактизации.

17-77
fkthat
Только зачем, если есть более подходящие структуры данных.

а в каком вашем кейсе hashset лучше чем dictionary ?


Когда нужно работать с обработкой больших наборов данных, где нужно получать пересечение, объединение, исключение, симметричные исключения, проверять подмножество, надмножество...

Подозреваю, в вашей практике тоже не доводилось с этим сталкиваться? )
Ну чтож. Тогда вам и не надо это знать. Даже для интереса, ибо зачем оно нафиг нужно?

Сообщение было отредактировано: 23 фев 21, 23:51
23 фев 21, 23:57    [22285406]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите хорошие компании для дотнетчика?  [new]
Андрей Юниор
Member

Откуда: Москва
Сообщений: 693
hVostt
Когда нужно работать с обработкой больших наборов данных, где нужно получать пересечение, объединение, исключение, симметричные исключения, проверять подмножество, надмножество..

Почему бы не решить такую задачу на РСУБД?
24 фев 21, 00:10    [22285414]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите хорошие компании для дотнетчика?  [new]
hVostt
Member

Откуда:
Сообщений: 18991
Андрей Юниор
hVostt
Когда нужно работать с обработкой больших наборов данных, где нужно получать пересечение, объединение, исключение, симметричные исключения, проверять подмножество, надмножество..

Почему бы не решить такую задачу на РСУБД?


Можно. Но и на современных РСУБД можно и программы целиком писать.

Суть в другом. Почти невозможно получить опыт применения всех инструментов. Но если человек себя позиционирует как C# программист и хочет развивать свой скилл в этом направлении, то знать основные и базовые вещи -- нужно, а также иметь какие-то знания и понимание об отдельных аспектах. Это огромный пласт знаний, зачастую нужно просто знать про наличие тех или иных решений, а не загружать в голову MSDN. Если вы их не знаете, для вас будет закрыт целый пласт возможных решений.
24 фев 21, 00:26    [22285420]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите хорошие компании для дотнетчика?  [new]
Андрей Юниор
Member

Откуда: Москва
Сообщений: 693
hVostt
Андрей Юниор
Почему бы не решить такую задачу на РСУБД?


Можно.

Я знаю, что можно. Вопрос почему в вашем случае не решить на РСУБД эту задачу? Конкретика нужна. И не я первый спрашиваю конкретику.

Пока всё, что вы написали в этой теме, звучит как "я знаю c#, поэтому все задачи решаю только на c#". А чем тогда все остальные программисты занимаются? Они работают, приносят деньги своим компаниям, им платят зарплаты. И тут вы один единственный на белом коне на c# решаете уникальные задачи на уникальном проекте, при этом платите по рынку. Так не бывает. Где-то в чём-то вы привираете. Возможно, везде по чуть-чуть: сложная задача возникает раз в год, платите ниже рынка, на собеседованиях завышенные требования.

Дело в том, что сложные задачи редко решают на языках общего назначения (ява, си шарп). Их обычно решают на системных языках (си, си++, раст). Пакуют в библиотеки, а потом весь мир пользуется. Писать на языках общего назначения всё подряд можно, конечно, но при таком подходе есть как минимум одна очевидная проблема: таких же извращенцев поискать надо, чтобы штат укомплектовать.
24 фев 21, 00:51    [22285430]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите хорошие компании для дотнетчика?  [new]
hVostt
Member

Откуда:
Сообщений: 18991
Андрей Юниор
Я знаю, что можно. Вопрос почему в вашем случае не решить на РСУБД эту задачу? Конкретика нужна. И не я первый спрашиваю конкретику.


Мы не обсуждаем никакой "мой случай".

Андрей Юниор
Пока всё, что вы написали в этой теме, звучит как "я знаю c#, поэтому все задачи решаю только на c#". А чем тогда все остальные программисты занимаются? Они работают, приносят деньги своим компаниям, им платят зарплаты. И тут вы один единственный на белом коне на c# решаете уникальные задачи на уникальном проекте, при этом платите по рынку. Так не бывает. Где-то в чём-то вы привираете. Возможно, везде по чуть-чуть: сложная задача возникает раз в год, платите ниже рынка, на собеседованиях завышенные требования.


Не понимаю к чему вы ведёте. Какой ещё "белый конь"? Не надо мне лепить свои бредовые ярлыки. Цитируйте, где я там позиционировал себя как "единственный на белом коне". А то выглядит, как трансляция фантазий.

Андрей Юниор
Дело в том, что сложные задачи редко решают на языках общего назначения (ява, си шарп). Их обычно решают на системных языках (си, си++, раст). Пакуют в библиотеки, а потом весь мир пользуется. Писать на языках общего назначения всё подряд можно, конечно, но при таком подходе есть как минимум одна очевидная проблема: таких же извращенцев поискать надо, чтобы штат укомплектовать.


Опять не понимаю к чему вы ведёте. Какие ж тогда должны быть знания у программиста C#? Никаких получается? И спрашивать ничего не надо? Ведь всё сложное написано уже на С++, а теперь с работой программиста справится даже обезьяна?

Какие-то опять школьные отмазки я слышу. "Да нафига мне эта ваша матиматега с историей?"
24 фев 21, 02:11    [22285440]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите хорошие компании для дотнетчика?  [new]
Дикий Билл
Member

Откуда:
Сообщений: 9599
hVostt


Когда нужно работать с обработкой больших наборов данных, где нужно получать пересечение, объединение, исключение, симметричные исключения, проверять подмножество, надмножество...



то есть самому не приходилось? :)
24 фев 21, 08:52    [22285460]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 3 4 5 6 7 8 9 [10] 11 12   вперед  Ctrl      все
Все форумы / Работа Ответить