Честь и хвала. У меня несколько иные были интересы (больше ассемблер + разное железо). И, как видим, этот алгоритм даже в вузах не дают.
Хз, у меня на 2 или 3 курсе его давали, причем на физфаке. Школьники-олимпиадники тоже его знают — в олимпиады любят такие задачки вставлять. Просто не все помнят, а кто-то может пробухал лекцию. Я вот, например, пробухал алгоритм Каргера как недавно выяснилось (спустя кучу лет). Просто подготовка у нас в стране очень-очень неравномерная. Но вообще компьютерная геометрия — это отдельная и очень большая часть математики на котрую по идее должны натаскивать только на определенных специальностях, ну вот, например, на кафедре автоматизации систем вычислительных комплексов ВМК МГУ, а вот чуваки с какой-нибудь механики мехмата МГУ вряд ли будут в курсе что там и как, зато им можно нейросети давать.
Т.е. специализация. Она у всех разная:
У меня несколько иные были интересы (больше ассемблер + разное железо)
Ну я вот как раз от этого и отошел в сторону программ где не надо соображать, как уложиться в 512 байт RAM (некоторый линейки MSP430 нас радают просто гигантскими размерами RAM и ROM)
Ну формально нет. Но вообще мода называться программистом после написания Hellow world — плохая практика. В итоге мы имеем — вычислительная мощность растет, а функционал — нет, зато патчем первого дня размером с программу уже никого не удивишь.
Единственное, что может спасти — это специализация и разделение труда. Я вот чойт туго дружу с квантерионами (ну не нравятся они мне, чисто религия), поэтому ТрыДэ стараюсь обходить стороной, хотя зря наверное.
А анализ и проектирование — это больше для людей сидящих на верхнем уровне иерархии — архитектору, тимлиду. Но без этого вообще никуда. А тот же анализ будет ограничен компетенциями разработчика. Вот я, например, вроде как нормально разбираюсь в задачах оптимизации (пофиг чего вообще), так что достаточно легко могу сообразить как например написать программу, которая, например, оптимизирует логистику какой-нибудь здоровенной компании или отфильтровать радиосигнал/акустический сигнал от всякого мусора: эха, интермодуляций, утечек и прочей хрени, или обучить нейросеть убивать всех человеков объезжать препятствия. А вот буквально относительно недавно сделали меня на структурах и организации данных, так-то. Мне правда все равно, т.к. это все равно не мой профиль. В общем я не уверен что смогу успешно работать с хитрыми базами данных, да и не интересно мне это. А в сторону FPGA (тоже ведь прораммирование между прочим) я вообще стараюсь не лезть.
Короче как правильно скрестить человека и задачу — это та еще задача и как я обратил внимание, её не всегда успешно решают.
Ну в общем анализ и проектирование это необходимое условие, но не всегда достаточное для успешного говнокодинга.
А, еще есть определенная категория погроммистов, которые очень быстро обучаются, но у них все равно имеется какой-нибудь серьезный бэкграунд: продвинутый лицей, олимпиады, не самый рядовой вуз.
Зачем мне писать свой кривой велосипед, если можно взять проверенную реализацию, в которой учитываются граничные случаи?
Я в другом посте привел простой пример — обращение матрицы, это наверное одна самых распространенных операций вообще:
1) Разложение Холецкого — работает только с положительно-определенными симметричными матрицами
2) LU-разложение — работает только с невырожденными матрицами
3) QR-разложение — может работать с разными матрицами, но не все реализации устойчивые (я встречал в стандартных библиотеках разные варианты) и скорость выполнения уже не айс
4) SVD — переваривает все и с высокой точностью, но медленно, очень медленно.
Возьмете стандартную библиотеку, а там будут реализованы все 4 способа, какой выберите если никогда не слышали алгоритмы факторизации матриц? По-умолчанию разработчики либ обычно подсовывают SVD, шоб пользователь не испытал батхерд, когда попытается засунуть любую случайно сгенерированную матрицу.
Что касается определения точки в многоугольнике, то самых разных вариаций решений этой задачи я уже видел десятка 2, а в библиотеке может оказаться несколько реализаций:
а) Для выпуклых многоугольников (это самое простое)
б) Для простых многоугольников
в) Для ортогональных многоугольников (т.к. для них можно написать просто сверхсветовую реализацию)
г) Для многоугольников общего вида и
если можно взять проверенную реализацию, в которой учитываются граничные случаи?
и это может оказаться самая медленная реализация из возможных (а может и нет, если писал гений оптимизированных вычислений), если она действительно будет переваривать все виды многоугольников да еще на длинных вычислениях. На основании чего разработчик будет делать выбор, если его знания ограничены первыми 6-ю классами школы?
Или другой пример, в FarseerPhysics (теперь VelcroPhysics) и Box2D используются 2 разных подхода для бинарных операций над полигонами общего вида, а еще для Convex ecomposition в первом используется и Ear clipping algorithm, и Bayazit algorithm, а в Box2D только Ear clipping algorithm. Какой сами будите использовать, какой другу посоветуйте?..
Святая вера в идеально стандартное решение — это уже какая-то религия походу.
Если математику будет нужно сделать подключение к БД на C#, а Гугл будет выдавать всякий шлак, как ему математика поможет найти среди него правильное решение?
Подключение БД к C# — это рутина, которая итак описана в MSDN и книжках по .NET, туда его гугл и отправит. А вот на основании чего он будет делать выбор в пользу Array, Dictionary, LinkedList, List, Queue, Stack и т.д. вот это уже куда интереснее, погроммисты которые учились на погроммиста в универе и в отличии от меня не забивали на какую-нибудь дискретку и тому подобное, знают эту разницу без привязки к языку. Внезапно это все математика и там начинаются такие вещи как вычислительная сложность вставок, удаления, поиска, получения по индексу и прочие страшные О.
Гугл будет выдавать всякий шлак, как ему математика поможет найти среди него правильное решение?
Если он ище вопрос по математике и алгоритмам, то:
а) Он сможет задавать более уточняющие запросы, т.к. знает что примерно надо найти, так что шлака внезапно станет меньше
б) Он отфильтрует весь шлак и школьный говнокод
в) Некоторые вещи (по которым он специализируется) он и искать не будет по памяти сразу сделает (если память хорошая)
д) В отличии от чувака с улицы он будет в курсе, что полезные вещи не только на Гугле ищутся, а например, на IEEEXplore или ScienceDirect, наверняка кто-то знает еще больше.
Не вода, а подтверждение моей точки зрения, что важнее анализ и проектирование, а не доскональное знание одной предметной области.
Ок, Гугл! Используя только анализ и проектирование, напишите мне программку, которая будет мне синтезировать антенную решетку с максимальным уровнем SSL и с учетом всяких дополнительных ограничений (угол качания луча, ширина луча, нули ДН, динамический диапазон и т.д., в общем сам с помощью гугла догадайтесь). Если кажется что это слишком сложно и оторвано от жизни, то хотя бы напишите программу оптимальной расстановки мебели в хрущовке…
Может и есть, но об этом ничего не сказали, значит тут 2 случая:
1) Многоугольники общего вида — феил, т.к. задач не решена
2) Чувак просто не понимает возможную сложность и объемы задачи — феил, т.к. люди просто не разобрались в задачи и когда наступит час Х все будут ломать голову над тем, почему все не работает
Плюс пункт 3): там нехорошая операция деления (она вообще-то не такая уж и тривиальная с точки зрения машины), а это уже погрешность вычислений. Так что на простых многоугольниках этот алгоритм тоже может ВНЕЗАПНО зафейлиться — иногда это не критично, иногда нет… хотя есть аналогичные алгоритмы без деления
Соответственно добавим еще и пункт 4) нет никакого обоснования почему решили именно так, а не иначе. Алгоритмов то полно, каждый из них имеет свои достоинства и недостатки — и именно этим надо оперировать, а не:
нагугленная за час
погоняли на множестве тестов
Ну и все это еще приправлено целочисленными аргументами (откуда? зачем? почему?). В общем либо совсем что-то узкоспециализированное, либо очередной говнокод, который потом будет обрастать костылями и в итоге все придет к:
Его реализация алгоритма была страницы две кода, недели 1.5-2 по времени.
Меня всегда такая святая простота умиляла.
Ну и хвалиться что нагуглил такой алгоритм несколько странно: я такую же фигню писал в школе на Паскале, а тогда гуглов не было, а интернет был через соседа по dialup модему. Современные школьники на олимпиадах тоже его вспоминают, студенты у которых были хоть какие-то азы вычислительной геометрии напишут сходу — он простой и элегантный, но уровнем не сильно круче использования скалярного произведения и гуглить тут будет только человек который вообще никогда не слышал про вычислительную и компьютерную геометрию — в этом ничего зазорного нет, но не хвалиться же этим…
Crossing number algorithm, Франклин (вроде даже еще живой), думаю это года 70-80, вытекает напрямую из теоремы Жордана (XIX век). Такой сейчас любой школьник на Паскале напишет и без гугла даже (внезапно). Ничего особенного.
Гуглите дальше, пока не нагуглите без операции деления (я даже подсказку дал).
погоняли на множестве тестов
Плохо гоняли. Вы заставили меня усомниться в эффективности Ваших тестов. Работать будет только для простых многоугольников (гуглите что такое простой многоугольник если не знайте), что также напрямую вытекает из теоремы Жордана. Ну да, еще и деление.
Ссылки бы было интересно увидеть на либы и цены.
Вы же вроде бы гугл-гуру? Разве нет?
Пожалуйста тыц Можете потыкать на этой страничке, чтоб посмотреть как меняется цена не забудте еще добавить НДС (18%) и не забываем что ценовая политика зависит от того, кто покупает. Дистрибьютер кстати тоже маржу иметь хочет. Кстати это без Rogue Wave IMSL, на это придется отдельно раскошелится (благо стоит не дрого), а есть еще и другие аддоны. тыц тыц тыц тыц
Более вероятно, что программисты загуглят «point in polygon», прочитают википедию, загуглят названия алгоритмов, и выберут подходящую реализацию.
Хз, за 10 лет наблюдений обнаружил, что находят только 2 самых простых способа: использование скалярного произведения или райкастинг. И то, и то — школьный уровень, человек и без гугла должен сообразить. Первый работает только для выпуклых многоугольников, для второго надо учитывать граничные случаи.
А вот для этого нужно умение анализировать информацию и разбираться в предметной области. А не учить все подряд из всех разделов математики.
Тут все упирается в вопрос что Вам нужно.
Можно быть стильным, модным молодежным и использоваться халявный Python/NumPy — только вот скорость там будет мягко говоря уровня черепахи.
BLAS — сейчас де-факто стандарт API для создания библиотек линейной алгебры. Так что BLAS'ов на самом деле много, тот Intel MKL (который тоже бесплатный) этот BLAS содержит, есть Boost C++, который в себе содержит тот же самый uBLAS, вроде как тоже бесплатный, но вот Intel MKL будет уже быстрее.
Основные проблемы начинаются когда:
1) Нужно больше функционала чем просто перемножение и вращение матриц, Фурье и т.п., что можно и самому без особого труда написать. Например, работа с гигантскими разряженными матрицами, просто гигантские матрицы, всякие хитрые солверы (например, какую-нибудь хитрую реализацию Нелдера-Мида), там вообще много чего может быть. Например, в Matlab, в Global optimization toolbox для генетических алгоритмов используется запатентованный Mathworks оператор мутации, а результаты с ним заметно лучше. В общем всегда в платных библиотеках функционала куда больше и там есть то, исходники чего Вы никогда не найдете.
2) Производительность — Intel MKL это уже хорошо и быстро, но иметь компилятор C/Fortran от Intel — лучше, а это уже денег стоит (там разное лицензирование и уже цены от 4 и до 32 тыщ долларов). В общем реально высокопроизводительные вещи стоят уже денег. Всегда.
3) Всякие мелкие тонкости, например, совместимость — ну вот самая распространенная проблема это совместимость по бинарникам. Вставляли недавно одну бесплатную билиотечку, которая реализует L-BFGS, причем с возможность наложения ограничений (вообще BFGS unconstrained алгоритм, но математики не просто так хлеб едят) и еще всякие вкусные солверы (я бы сказал что нетривиальные, я писал проще) и тут начались проблемы с ошибками памяти (причем только под Windows и совсем какие-то рэндомные). Берем исходники, вставляем их в наш проект, немного их правим, компилируем — все работает зашибись, вот только лицензия там GPL… В итоге все сводится к тому, что надо: а) платить, или б) писать самим, а это тоже время-деньги, или в) искать другое решение, которое внезапно оказывается тоже платным.
А еще есть всякие штуки типа многопоточности, векторизации и т.д.
4) Нужны дополнительные компоненты. Есть вот даже такой термин Business Intelligence(или просто BI) — нужно обрабатывать большие объемы данные, анализировать их и выводить в удобно-читаемом виде. Там Вам будет и математика и кучу интерфейнсых мозголомок. Начинаем писать такие штуки сами — тратим время и соответственно деньги. Начинаем использовать халявные библиотеки — все зашибись пока данных не становится слишком много, даже банальная отрисовка графика (только отрисовка!) начинает вешать всю систему (см. п.2), а ведь эти графики должны быть интерактивными… Естественно есть куча готовых высокопроизводительных компонент, например, BI Dundas, который стоит денег… много денег (на сайте даже цены не указаны, т.к. с каждой компании разработчиков бабло стригут индивидуально)
5) Язык программирования. Это отдельная тема. Хорошо быть C/C++ или Fortran программистом. Fortran де-факто язык математического программирования для которого написано десятки тысяч самых разных библиотек, С/С++ тоже неплох и на него оперативно переписывают фортрановские библиотеки. Но вообще и Fortran и C/C++ программисты дорогие, найти их сложно, на C/C++ ее и разработка часто оказывается дороже. Зато каждую обезьяну можно научит писать на Java и C# — таких программистов полно, а вот с библиотеками… гхм, ну вот например .NET до версии 4.5 не поддерживал SIMD, сейчас вроде как начал поддерживать, но как-то не возбуждающе. Выбор библиотек здесь уже куда более куций, библиотеки которые дадут и перфоманс и легкое внедрение — стоят уже деньги, например, ILNumerics или NMath. Можно взять какой-нибудь Accord.NET, но он будет медленный (см. п.2)
6) Особенности лицензирования — то что можно быку (творить всякие безобразия), то не позволено Юпитеру, а Цезаря за это так вообще в Сенате закололи. Например, Advanced Simulation Librar — офигенная штука для высокопроизводительных симуляций бесплатная, пока ты ей дома пользуешься для лабораторок каких-нибудь, а вот для коммерческого пользования рано или поздно придется платить. Или, например, ALGLIB (Delphi, C/C++, C# и т.д.) имеет двойную лицензию — можно использовать на халяву, но там не будет ни многопоточности, ни векторизации, ни интеграции с MKL, ни нативных HPC (higth-perfomance computing) — т.е. медленно, а самое главное халява по GPL, либо платите бабки и все это будет и даже исходники дадут (см. п.1,2,3)
Т.е. все зависит от потребностей и возможностей. Что бы сразу было все, работало быстро и легко интегрировалось (самые главные качества любой библиотеки) — стоит денег или это белый единорог. За какие-то базовые вещи никто денег брать не будет — понятно что за БПФ никто не заплатит, его итак можно быстро написать. С линейной алгеброй дела будут обстоять еще сложнее — т.к. быстро крутить-верететь матрицами сложно.
В любом случае, даже обходясь совсем-совсем готовой библиотекой надо понимать что там внутри происходит. Например, Вы можете найти псевдобратную матрицу с помощью: LU-разложение, разложения Холецкого, QR-разложения, SVD. LU-разложение работает только с невырожденными матрицами, т.е. на практике малоприменимый метод, разложение Холецкого работает только для положительно-определенных матриц и точность оставляет желать лучшего, а QR-разложение в общем-то неустойчивое (для устойчивого нужно использовать модифицированный алгоритм Грама-Шмидта), самым точным и надежным будет SVD-разложение… и самым медленным (а еще оно в своей основе использует QR-разложение). Ну в нахождение псевдообратной матрицы необходимо для получения МНК-решения системы линейных уравнений, а такие задачи встречаются абсолютно везде, фактически любую практическую задачу пытаются свести к МНК.
Просто при разработки игр требования несколько жестче — с одной стороны необходимо писать производительный код, а с другой стороны — игра это маленькая математическая симуляция выдуманной реальности. Поэтому сразу все всплывает.
Но в других областях математика тоже постоянно всплывает, просто принято обычно все это маскировать «а давайте возьмем вот это фреймоворк» — иногда это даже спасает, или просто люди пишут говнокод не пытаясь разобраться в вопросе и быстрей коммитеть. Было дело — общался с чуваком, который писал какую-то штуку типа онлайн-магазина (в группе разработчиков естественно) и к тому моменту когда он дошел до истории как они прикручивали вейвлет-преобразование я уже был офигевший.
Все зависит от задач и от того насколько добросовестно подходят к её решению. Вообще в русском языке есть такое понятие как «халтура». Большая часть погроммистов именно что халтурит — кто-то осознано, кто-то неосознано, но халтурят, причем массово — целыми конторами. Благо в IT полно задач, которые при современных условиях (вычислительные мощности, обилие библиотек, фреймворков, развитые инструменты разработки) позволяют халтурить. Но вот игры — как раз задача не из этой области, прокатить на халтурку — не получится (но народ пытается, и даже наблюдаются какие-то успехи на этом фронте...)
Еще игры делаютя при крайне ограниченном бюджете, так что рулят человеке оркестры. В тоже время придя в какой-нибудь Синопсис можно всю жизнь лепить кнопочки и не вникать, что же там делает вон тот яйцеголовый чувак за соседним столом — просто разделение труда и компания может себе это позволить.
Да это так.
Причем через некоторое время становится абсолютно по барабану: считать прочностные характеристики зданий, или рассчитывать логистику крупной компании. Можн ос легкостью переходить с задачи на задачу, которые вообще никак друг с другом не связаны.
Ну если не придираться к словам, то да, так оно есть. Но другими словами:
1. Надо понимать, т.е. знать математику (это не имеет отношение к зазубриванию теорем, к слову сказать именно опыт в доказательстве теорем очень хорошо прокачивает мозги)
2. Надо вникать в предметную область.
Но тут все же есть разделы математики, которые надо обязательно. Я вот например, постоянно сталкиваюсь с тем, что мои знания дискретной математики мягко говоря неглубокие, линал я тоже зря прогуливал. А вот в тервере, матстатистике, ТФКП, функане, непрерывной оптимизации в силу своего первого образования вроде более-менее норм. Так что риски Фишера сходу кластеризирую, ТрыДэ фигурки тоже буду вертеть как хотеть, а вот решить задачу разбиения графа — придется долго и мучительно читать. А делать приходиться и первое, и второе, и третье...., и десятое — и абсолютно без разницы что ты пилишь: ERP, билинговую систему, CAD, ГИС и т.д.
1. Начнем с того что надо знать что гуглить. Как правило все практические задачи покрывают сразу несколько разделов математики. Ну вот я сейчас потихонечку пилю задачку где захвачено сразу: глобальная оптимизация и мета-эвристические алгоритмы (метод имитации отжига, генетические алгоритмы, роевой интеллект и т.д.), задачи на обход графа (дискретная математика в принципе базовый минимум для программиста), задачи на раскраску графов, дискретная оптимизация, градиентные методы (Нелдер-Мид, BFGS и т.д.), компьютерная/вычислительная геометрия и внезапно еще потребовалась физика и метод конечных элементов, хотя задача к физике не имеет никакого отношения, ну и т.д. Вообще задача не особо сложная, давно известная и уже 100500 раз решенная, но конечным решением никто естественно не поделится, а охватывает она целую кучу разделов математики :-)
2. Некоторые вещи гуглятся с трудом, если не знать конкретно, что это такое. Если Вы загуглите Kraftwerk 2, то Яндекс и Гугл буду подсовывать второй студийный альбом германской группы Крафтверк, а не алгоритм быстрой оптимизации упаковки. Добавления слов optimization и algorithm поможет слабо (хотя Гугл уже начнет подавать надежды), и так пока не добавите что-нибудь типа VLSI, placement, force-directed и прочие ключевые слова из контекста именно этого алгоритма, хотя и тут гугл с яндексом будут подсовывать много хлама. И это ситуация, когда название алгоритма известно точно, а если еще нет, то что тогда? Наедятся на то что 1 млрд обезьян чисто теоретически могут написать Войну и Мир?
3. Чтобы применять алгоритм, нужно знать тонкости, нужно понимать как работает алгоритм, какие у него особенности. Программисты никогда не слышавшее про вычислительную геометрию на вопрос определения точки внутри многоугольника, начинают выдавать простыни тормозящего говнокода, а потом еще и удивляются почему алгоритм отрабатывает не все случаи, после чего начинают добавлять костыли, когда всего-то надо написать 19 строчек кода включая комментарии, скобочки и пропуски широко-известного Winding number algorithm (который впрочем тоже имеет ограничения применения). Но это еще простая и рутинная задача, а если что-нибудь посложнее? Ну я уже неоднократно наблюдал как погроммисты пренебрегавшие в свое время математикой, по 2-3 недели не могут написать Simulated Annealing — алгоритм 30-и летней давности и уровнем математики 1-го курса любого вуза. Крайний раз чувак перепутал знак «больше»-«меньше» и долго не мог понять почему не работает, когда ему об этом сообщили.
4. Алгоритм — это не более чем абстрактная заготовка. Нет никаких универсальных алгоритмов, а любой метод описывает только общие принципы решения задачи. А вот для каждой конкретной задачи придется все равно писать специфическую реализацию. Это только для учебных задач можно переписать из книжки простой алгоритм и он даже заработает.
5. Возвращаясь к Гугл нельзя не отметить, что зачастую по теме выдается всякий шлак. Если запросить чего-нибудь про Генетические алгоритмы, то там в большинстве случаев будет научпоп 70-ых годов про бинарные хромосомы и одноточечный/многоточечный кроссовер. Ну вот для решения задачи коммивояжера (около 2-х лет проработал на проекте где эта задачка была одной из основных частей ПО) это уже работать не будет, благо эта задачка учебно-типовая гугл осилит, а если что-то посложнее? А вот для чего-то посложнее операторы мутации и кроссовера (а это все математические операторы) придется разрабатывать самому в зависимости от задачи (см. пункт 4).
6. Алгоритмов много, просто тьма. Одну и туже задачу можно решить несколькими десятками алгоритмов, каждый из которых имеет свои достоинства и недостатки — без знания предметной области и без определенного математического бэкграунда оптимального решения не будет никогда (если вообще появится, знаю пару кодерских контор, которые так зафейлили очень жирные заказы). Еще очень распространенная проблема, когда алгоритмы применяют неправильно. Или другой пример, сейчас пошла мода на нейросети и все давай пихать их во все щели, даже туда, где обычный МНК справится.
7. Все любят петь про библиотеки. Так вот хорошие и быстрые библиотеки, которые нас избавят от написания своей реализации умножения матриц, уже стоят денег, ну от 8 до 32 тыщ. долларов за 1 рабочее место. И все равно надо понимать, что и для чего это делается, иначе будет пустая трата денег.
8. Ну и последнее. Программирование — это всего лишь часть прикладной математики, не более чем инструмент для реализации тех или иных математических методов решения практических задач. Научить синтаксису языка N можно любую обезьяну, вот только программируют не ради программирования.
Вы вообще о чем? Какие фрилансиры, какие работники? Это вообще к чему?
Вроде уже который раз объясняю: сабж — отношения двух юридических лиц: одно заказало разработку у другого. Фирма-разработчик может использовать свои наработки в дальнейшем как угодно, если иное не было оговорено в договоре.
Причем здесь вообще трудовые отношения про которые вы все гнете и гнете? Они регулируются совершенно другими нормативными актами если говорить об РФ.
Продукт сотрудника произведенный в рабочее время есть собственность фирмы.
Я еще раз повторю если с первого раза не дошло: работник продает свой труд, который и является его продуктом и это не одно тоже, что и продукт фирмы. И работник волен распоряжаться своим трудом как угодно, никто не имеет права мешать сотруднику работать по совместительству в нескольких организациях, выполняя схожую работу или просто заниматься чем-то схожем дома, если он не привлекает для этого ресурсы фирмы, иначе бы уже давно каждого второго осудили бы. Но всегда можно придти к соглашению: а) добровольному, б) обоюдному в) за дополнительную плату соглашению прописанному, например, через NDA.
И если вы отдадите его, скажем, конкурентам как свою собственность — вас засудят. И тут было несколько статей с подобными примерами.
Кого отдадите? За что засудят? Вы снова мешайте все в кучу. Работник может отдать конкуренту только свой труд. Знайте, это такая целесообразная, сознательная деятельность человека, направленная на удовлетворение потребностей индивида и общества, как намекает вики. Никаких ограничений на перепродажу своего труда нет, чай не в рабовладельческом обществе живем.
Вы искренне пытаетесь натянуть фрилансеров на работников. Фрилансер-вася это та же фирма, что и студия Лебедева. Это не работник, это бизнес-мен, какой бы смешной его оборот ни был. Со всеми вытекающими.
Ну вообще-то это Вы почему-то решили проводить параллели между трудовыми отношениями и отношениями двух юрлиц о чем изначально шел разговор. Хотя в США действительно не делают никакой разницы, там и ТК нет — что с работниками, что с фирмами заключают договора и контракты. А в российском законодательстве фрилансер-Вася, если он не имеет хотя бы жалкой приставки ООО и студия Лебедева не одно и тоже — первый физлицо, второй юрлицо. Деятельность юрлиц регулируется ГК, с физлицом можно заключать договоренности регулируемые как ТК, так и ГК, но если обнаруживается что трудовые отношения маскируются гражданскими, то будет плохо.
Если мне программист скажет, что напишет модуль, но модуль его, а право на модуль мое, я резонно попрошу платить не за часы, а цену аналогичного модуля на маркете.
Просите сколько угодно, только в любом случае придется придти к обоюдному соглашению, иначе никто ничего не получит. И если в маркетплейсе так дешево, то почему сразу там не купили?
Потому что условия покупки аналогичны — с фига я должен платить за «разработку»? Риски мне, а прибыль программисту?
Ну в итоге мы и пришли к тому, что "государственность" заказа еще ни о чем не говорит, тем более о монополии — все исключительно по ситуации.
Просто вот любит народ все редуцировать и сводить к простым схемам, а так низя, надо быть гибким. Ну и абсолютная монополия на что-либо — зло, хотя любой будет к не стремится. И кстати получается шо вот эта статья, которую мы так радостно комментируем, как раз вот о попытке монополизировать одной Компани часть рынка любыми средствами.
Ну надо было такой исход предвидеть изначально и указать в договоре. АшотСофт мог согласиться, а мог и отказать (т.к. берет копейки зная что потом перепродаст продукт несколько раз).
С другой стороны никого же смущает, что дешевые сайты делается в конструкторах и использованием совершенно идентичных шаблонов?
Использование единой кодовой базы в разных (но однотипных) проектах и для разных заказчиков вполне рядовое явление при разработки софта. Уж не ради ли этого было придумано сначала модульное программирование, а затем и ООП?
Но передача программы со всеми потрохами и всякими копирайтам на исходный код — да, бывает. Но это реально дорого (и исполнитель больше бабла захочет и придется потратиться на кучу всякой фигни), а самое главное это имеет смысл, ну когда результат ну совсем инновационный, дабы получить преимущество перед конкурентами. Перед кем вот только собирается получать преимущество государство внутри себя — я хз. Те же мериканцы, абсолютно лояльно относятся к перепродажам разработок внутри страны, но экспорт технологий наружу всегда ограничивают, причем для всех, даже если компания и близко не подходила к госконтрактам, естественно компаниям это не нравится.
Просто надо понимать, что каждая сторона имеет свои интересы и они приходят к компромиссу через договор. Если там написано "отдать все" то придется отдавать все, а если нет — то и нет.
Ну т.е. тут нет простых и прямолинейных правил — все исключительно как договорятся.
Но, если компания А продает свой продукт Х только компании В, тот тут 2 варианта: Либо продукт Х говно полное и его покупает компания В в силу неэкономических причин, а например, из-за родственных связей, либо компания В десятикратно переплачивает и продукт Х действительно дает ей конкурентное преимущество.
Правда как еще выше выяснилось, шо люди отождествляют результат труда (т.е. финальный продукт) с продуктом наемного работника, хотя вот как раз в случае наемного работника — его труд и есть продукт (и он может его перепродавать хоть десятерым). А потом еще пытаются это натянуть на отношения двух юрлиц — типа компания исполнитель это наемный работник компании заказчика, я думаю что если сюда зайдут юристы, то они офигеют :-)
Ну и еще у меня есть подозрение шо не всем в школе рассказали про отмену крепостного права...
Не, ну правда что касается интеллектуальной собственности — то там действительно все сложно, поэтому передача прав на ИС всегда оговаривается, шо нибудь в стиле, если вы в процессе работы/исполнения заказа изобретете супер-пузырьковую сортировку, то расскажите как это работает и передадите права на нее нам, а мы получим патент и укажем там, что выявляцтесь изобретателем, ну и т.д. (если обратить внимание, то в патенте отдельно указываются изобретатели и правобладатели)
Ну я в таких случаях сообщаю, шо если не нравится такая логика, то ищите другого.
Все просто — каждый вид работ стоить своих денег, а крепостное право отменили в 1861 году, если кто не в курсе.
А труд сотрудника покупайте по трудовому договору и соответственно по трудовому законодательству — ограничивайте право собственности на результат труда за счет выполнения дополнительных условий: пенсии, страхования, невозможности расторгнуть договор без согласия работника и много других затратных вещей. Еще и полностью обеспечивайте необходимые условия труда (и инструменты). Но это не значит, шо сотрудник автоматом не может выполнять точно такую же работу в своих интересах в нерабочее время ;-) Понимайте? Продукт сотрудника — это его труд, который он может перепродавать кому угодно. Работодатель не получает монопольного права на использования труда сотрудника только за то что его взял на работу, он просто его покупает на какое-то время. А если еще хотите, что бы сотрудник не делился секретами, то значит придется еще и за секретность доплачивать. NDA бывают разные.
Но трудовые отношения к этому сабжу не имеют никакого отношения от слова "ну вообще никак" — не надо натягивать сову на глобус — это антигуманно. Тут вообще-то отношения двух юрлиц: Все хотелки заказчика должны быть отражены в договоре — если просто покупает продукт, то это одно, если покупайте интеллектуальную собственность — то это уже куда более серьёзнее и дороже, а если еще и хочешь получить эксклюзивные права на все и на вечно — то такими вещами должна уже ФАС интересоваться.
Но в Штатах, например, как такового трудового законодательства нет — все определяется договорами и торговаться будут за каждый пункт. Хотите картинку? Пожалуйста. Хотите картинку Роялти Фри (в РФ к сожалению еще не все в курсе)? Ну ОК. Хотите уникальную картинку, шоб у других тоже не было? Пожалуйста, ценник х10. Не нравиться? Ищите другого?
Вы же не надеюсь не считайте, что купив один раз стул в IKEA, получайте эксклюзивное право: Продавать стулья только вам?
И раз Вы тут упомянули игры, то открою страшную тайну — очень много игровых ресурсов были созданы один раз (например звуки оружия), а потом многократно перепродавались разным компаниям. Если не нравится такой расклад — то можете купить эсклюзив, исключительно для себя — это будет дороже.
Если это дотации или гранты — то ничего не должен.
Ну т.е. реально половина патентов Теслы выполнены в рамках грантов, но принадлежат они исключительно Тесле. Ну т.е. реально да, американское правительство дает бабки Маску, за то что он огораживает свою интеллектуальную собственность. Делает это потому что кроме Маска, никто не хочет собирать электромобили и осваивать Марс. Было бы в США штук 20 компаний производящих аналоги Теслы — никаких бы дотаций и грантов не было бы.
Вот в области космоса у Маска уже есть некоторые конкуренты — там ведь не только SpaceX раззевает варюшку на бюджет NASA.
Наверняка там есть и прямые инвестиции уже с какими-то обязательствами. Наверняка имели место и кулуарные договоренности (о которых мы никогда не узнаем). Но факт есть факт — правительство США дает бабки Маску на то что бы он продолжал делать электромобили, продавал их и извлекал из этого выгоду для себя. Иначе просто никто не будет этим заниматься, т.к. сейчас это убыточно.
Ну в любой человеческой популяции найдется парочка особей-фанбоев, которые из чистых помыслов на голом альтруизме готовы подсобить любыми методами (а то Вы срачи на тему какого цвета карандаш вкуснее?) Это еще в народе медвежьей услугой называют.
Так что такие комментарии вполне могут быть из той же оперы.
Вас что конкретно интересует? Интеллектуальная собственность и технологии с патентами принадлежат ему — вон у Tesla Motors уже больше 300 патентов если не больше. Срок действия патентов по 20 лет, причем половина патентов получены по государственным грантам. Так что ближайшие 20 лет копию Теслы никто сделать не может, ну кроме Маска или того, кому он их перепродаст.
У вас уникальная способность находить нестадартные аналогии и строить никак не связанные пары утверждений. В стиле: Найдите общее между ботинком и карандашом :-)
Когда вы нанимайте работника сделать ремонт — вы не можете ему запретить сделать точно такой же ремонт другому. А еще вас абсолютно не касается на что он потратит свою прибыль. При этом вы можете с ним заключить соглашение ща дополнительную сумму шоб он делал ремонты только для вас вас 5 лет, покрывая ожидаемую упущенную прибыль.
С плотником тоже самое.
Когда вы нанимайте сотрудника — это трудовые отношения, не надо прикидываться дурачком и мешать их с другими видами взаимоотношений. Кстати NDA с работником заключается отдельно и строгость NDA как правило компенсируется (за пределами РФ по крайней мере). А можете не заключать, если уверены что он не сольет в своем блоге что-то важное.
Все регулируется договорами. Вы же тут пытайтесь выдать свой взгляд (идущий в разрез с реальностью) за истину и натягивай сову на глобус, вот что странно :-)
Хз, у меня на 2 или 3 курсе его давали, причем на физфаке. Школьники-олимпиадники тоже его знают — в олимпиады любят такие задачки вставлять. Просто не все помнят, а кто-то может пробухал лекцию. Я вот, например, пробухал алгоритм Каргера как недавно выяснилось (спустя кучу лет). Просто подготовка у нас в стране очень-очень неравномерная. Но вообще компьютерная геометрия — это отдельная и очень большая часть математики на котрую по идее должны натаскивать только на определенных специальностях, ну вот, например, на кафедре автоматизации систем вычислительных комплексов ВМК МГУ, а вот чуваки с какой-нибудь механики мехмата МГУ вряд ли будут в курсе что там и как, зато им можно нейросети давать.
Т.е. специализация. Она у всех разная:
Ну я вот как раз от этого и отошел в сторону программ где не надо соображать, как уложиться в 512 байт RAM (некоторый линейки MSP430 нас радают просто гигантскими размерами RAM и ROM)
Единственное, что может спасти — это специализация и разделение труда. Я вот чойт туго дружу с квантерионами (ну не нравятся они мне, чисто религия), поэтому ТрыДэ стараюсь обходить стороной, хотя зря наверное.
А анализ и проектирование — это больше для людей сидящих на верхнем уровне иерархии — архитектору, тимлиду. Но без этого вообще никуда. А тот же анализ будет ограничен компетенциями разработчика. Вот я, например, вроде как нормально разбираюсь в задачах оптимизации (пофиг чего вообще), так что достаточно легко могу сообразить как например написать программу, которая, например, оптимизирует логистику какой-нибудь здоровенной компании или отфильтровать радиосигнал/акустический сигнал от всякого мусора: эха, интермодуляций, утечек и прочей хрени, или обучить нейросеть
убивать всех человековобъезжать препятствия. А вот буквально относительно недавно сделали меня на структурах и организации данных, так-то. Мне правда все равно, т.к. это все равно не мой профиль. В общем я не уверен что смогу успешно работать с хитрыми базами данных, да и не интересно мне это. А в сторону FPGA (тоже ведь прораммирование между прочим) я вообще стараюсь не лезть.Короче как правильно скрестить человека и задачу — это та еще задача и как я обратил внимание, её не всегда успешно решают.
Ну в общем анализ и проектирование это необходимое условие, но не всегда достаточное для успешного говнокодинга.
А, еще есть определенная категория погроммистов, которые очень быстро обучаются, но у них все равно имеется какой-нибудь серьезный бэкграунд: продвинутый лицей, олимпиады, не самый рядовой вуз.
Я в другом посте привел простой пример — обращение матрицы, это наверное одна самых распространенных операций вообще:
1) Разложение Холецкого — работает только с положительно-определенными симметричными матрицами
2) LU-разложение — работает только с невырожденными матрицами
3) QR-разложение — может работать с разными матрицами, но не все реализации устойчивые (я встречал в стандартных библиотеках разные варианты) и скорость выполнения уже не айс
4) SVD — переваривает все и с высокой точностью, но медленно, очень медленно.
Возьмете стандартную библиотеку, а там будут реализованы все 4 способа, какой выберите если никогда не слышали алгоритмы факторизации матриц? По-умолчанию разработчики либ обычно подсовывают SVD, шоб пользователь не испытал батхерд, когда попытается засунуть любую случайно сгенерированную матрицу.
Что касается определения точки в многоугольнике, то самых разных вариаций решений этой задачи я уже видел десятка 2, а в библиотеке может оказаться несколько реализаций:
а) Для выпуклых многоугольников (это самое простое)
б) Для простых многоугольников
в) Для ортогональных многоугольников (т.к. для них можно написать просто сверхсветовую реализацию)
г) Для многоугольников общего вида и
и это может оказаться самая медленная реализация из возможных (а может и нет, если писал гений оптимизированных вычислений), если она действительно будет переваривать все виды многоугольников да еще на длинных вычислениях. На основании чего разработчик будет делать выбор, если его знания ограничены первыми 6-ю классами школы?
Или другой пример, в FarseerPhysics (теперь VelcroPhysics) и Box2D используются 2 разных подхода для бинарных операций над полигонами общего вида, а еще для Convex ecomposition в первом используется и Ear clipping algorithm, и Bayazit algorithm, а в Box2D только Ear clipping algorithm. Какой сами будите использовать, какой другу посоветуйте?..
Святая вера в идеально стандартное решение — это уже какая-то религия походу.
Подключение БД к C# — это рутина, которая итак описана в MSDN и книжках по .NET, туда его гугл и отправит. А вот на основании чего он будет делать выбор в пользу Array, Dictionary, LinkedList, List, Queue, Stack и т.д. вот это уже куда интереснее, погроммисты которые учились на погроммиста в универе и в отличии от меня не забивали на какую-нибудь дискретку и тому подобное, знают эту разницу без привязки к языку. Внезапно это все математика и там начинаются такие вещи как вычислительная сложность вставок, удаления, поиска, получения по индексу и прочие страшные О.
Если он ище вопрос по математике и алгоритмам, то:
а) Он сможет задавать более уточняющие запросы, т.к. знает что примерно надо найти, так что шлака внезапно станет меньше
б) Он отфильтрует весь шлак и школьный говнокод
в) Некоторые вещи (по которым он специализируется) он и искать не будет по памяти сразу сделает (если память хорошая)
д) В отличии от чувака с улицы он будет в курсе, что полезные вещи не только на Гугле ищутся, а например, на IEEEXplore или ScienceDirect, наверняка кто-то знает еще больше.
Ок, Гугл! Используя только анализ и проектирование, напишите мне программку, которая будет мне синтезировать антенную решетку с максимальным уровнем SSL и с учетом всяких дополнительных ограничений (угол качания луча, ширина луча, нули ДН, динамический диапазон и т.д., в общем сам с помощью гугла догадайтесь). Если кажется что это слишком сложно и оторвано от жизни, то хотя бы напишите программу оптимальной расстановки мебели в хрущовке…
1) Многоугольники общего вида — феил, т.к. задач не решена
2) Чувак просто не понимает возможную сложность и объемы задачи — феил, т.к. люди просто не разобрались в задачи и когда наступит час Х все будут ломать голову над тем, почему все не работает
Плюс пункт 3): там нехорошая операция деления (она вообще-то не такая уж и тривиальная с точки зрения машины), а это уже погрешность вычислений. Так что на простых многоугольниках этот алгоритм тоже может ВНЕЗАПНО зафейлиться — иногда это не критично, иногда нет… хотя есть аналогичные алгоритмы без деления
Соответственно добавим еще и пункт 4) нет никакого обоснования почему решили именно так, а не иначе. Алгоритмов то полно, каждый из них имеет свои достоинства и недостатки — и именно этим надо оперировать, а не:
Ну и все это еще приправлено целочисленными аргументами (откуда? зачем? почему?). В общем либо совсем что-то узкоспециализированное, либо очередной говнокод, который потом будет обрастать костылями и в итоге все придет к:
Меня всегда такая святая простота умиляла.
Ну и хвалиться что нагуглил такой алгоритм несколько странно: я такую же фигню писал в школе на Паскале, а тогда гуглов не было, а интернет был через соседа по dialup модему. Современные школьники на олимпиадах тоже его вспоминают, студенты у которых были хоть какие-то азы вычислительной геометрии напишут сходу — он простой и элегантный, но уровнем не сильно круче использования скалярного произведения и гуглить тут будет только человек который вообще никогда не слышал про вычислительную и компьютерную геометрию — в этом ничего зазорного нет, но не хвалиться же этим…
Crossing number algorithm, Франклин (вроде даже еще живой), думаю это года 70-80, вытекает напрямую из теоремы Жордана (XIX век). Такой сейчас любой школьник на Паскале напишет и без гугла даже (внезапно). Ничего особенного.
Гуглите дальше, пока не нагуглите без операции деления (я даже подсказку дал).
Плохо гоняли. Вы заставили меня усомниться в эффективности Ваших тестов. Работать будет только для простых многоугольников (гуглите что такое простой многоугольник если не знайте), что также напрямую вытекает из теоремы Жордана. Ну да, еще и деление.
Вы же вроде бы гугл-гуру? Разве нет?
Пожалуйста
тыц
Можете потыкать на этой страничке, чтоб посмотреть как меняется цена не забудте еще добавить НДС (18%) и не забываем что ценовая политика зависит от того, кто покупает. Дистрибьютер кстати тоже маржу иметь хочет. Кстати это без Rogue Wave IMSL, на это придется отдельно раскошелится (благо стоит не дрого), а есть еще и другие аддоны.
тыц
тыц
тыц
тыц
Хз, за 10 лет наблюдений обнаружил, что находят только 2 самых простых способа: использование скалярного произведения или райкастинг. И то, и то — школьный уровень, человек и без гугла должен сообразить. Первый работает только для выпуклых многоугольников, для второго надо учитывать граничные случаи.
Вода.
Можно быть стильным, модным молодежным и использоваться халявный Python/NumPy — только вот скорость там будет мягко говоря уровня черепахи.
BLAS — сейчас де-факто стандарт API для создания библиотек линейной алгебры. Так что BLAS'ов на самом деле много, тот Intel MKL (который тоже бесплатный) этот BLAS содержит, есть Boost C++, который в себе содержит тот же самый uBLAS, вроде как тоже бесплатный, но вот Intel MKL будет уже быстрее.
Основные проблемы начинаются когда:
1) Нужно больше функционала чем просто перемножение и вращение матриц, Фурье и т.п., что можно и самому без особого труда написать. Например, работа с гигантскими разряженными матрицами, просто гигантские матрицы, всякие хитрые солверы (например, какую-нибудь хитрую реализацию Нелдера-Мида), там вообще много чего может быть. Например, в Matlab, в Global optimization toolbox для генетических алгоритмов используется запатентованный Mathworks оператор мутации, а результаты с ним заметно лучше. В общем всегда в платных библиотеках функционала куда больше и там есть то, исходники чего Вы никогда не найдете.
2) Производительность — Intel MKL это уже хорошо и быстро, но иметь компилятор C/Fortran от Intel — лучше, а это уже денег стоит (там разное лицензирование и уже цены от 4 и до 32 тыщ долларов). В общем реально высокопроизводительные вещи стоят уже денег. Всегда.
3) Всякие мелкие тонкости, например, совместимость — ну вот самая распространенная проблема это совместимость по бинарникам. Вставляли недавно одну бесплатную билиотечку, которая реализует L-BFGS, причем с возможность наложения ограничений (вообще BFGS unconstrained алгоритм, но математики не просто так хлеб едят) и еще всякие вкусные солверы (я бы сказал что нетривиальные, я писал проще) и тут начались проблемы с ошибками памяти (причем только под Windows и совсем какие-то рэндомные). Берем исходники, вставляем их в наш проект, немного их правим, компилируем — все работает зашибись, вот только лицензия там GPL… В итоге все сводится к тому, что надо: а) платить, или б) писать самим, а это тоже время-деньги, или в) искать другое решение, которое внезапно оказывается тоже платным.
А еще есть всякие штуки типа многопоточности, векторизации и т.д.
4) Нужны дополнительные компоненты. Есть вот даже такой термин Business Intelligence(или просто BI) — нужно обрабатывать большие объемы данные, анализировать их и выводить в удобно-читаемом виде. Там Вам будет и математика и кучу интерфейнсых мозголомок. Начинаем писать такие штуки сами — тратим время и соответственно деньги. Начинаем использовать халявные библиотеки — все зашибись пока данных не становится слишком много, даже банальная отрисовка графика (только отрисовка!) начинает вешать всю систему (см. п.2), а ведь эти графики должны быть интерактивными… Естественно есть куча готовых высокопроизводительных компонент, например, BI Dundas, который стоит денег… много денег (на сайте даже цены не указаны, т.к. с каждой компании разработчиков бабло стригут индивидуально)
5) Язык программирования. Это отдельная тема. Хорошо быть C/C++ или Fortran программистом. Fortran де-факто язык математического программирования для которого написано десятки тысяч самых разных библиотек, С/С++ тоже неплох и на него оперативно переписывают фортрановские библиотеки. Но вообще и Fortran и C/C++ программисты дорогие, найти их сложно, на C/C++ ее и разработка часто оказывается дороже. Зато каждую обезьяну можно научит писать на Java и C# — таких программистов полно, а вот с библиотеками… гхм, ну вот например .NET до версии 4.5 не поддерживал SIMD, сейчас вроде как начал поддерживать, но как-то не возбуждающе. Выбор библиотек здесь уже куда более куций, библиотеки которые дадут и перфоманс и легкое внедрение — стоят уже деньги, например, ILNumerics или NMath. Можно взять какой-нибудь Accord.NET, но он будет медленный (см. п.2)
6) Особенности лицензирования — то что можно быку (творить всякие безобразия), то не позволено Юпитеру, а Цезаря за это так вообще в Сенате закололи. Например, Advanced Simulation Librar — офигенная штука для высокопроизводительных симуляций бесплатная, пока ты ей дома пользуешься для лабораторок каких-нибудь, а вот для коммерческого пользования рано или поздно придется платить. Или, например, ALGLIB (Delphi, C/C++, C# и т.д.) имеет двойную лицензию — можно использовать на халяву, но там не будет ни многопоточности, ни векторизации, ни интеграции с MKL, ни нативных HPC (higth-perfomance computing) — т.е. медленно, а самое главное халява по GPL, либо платите бабки и все это будет и даже исходники дадут (см. п.1,2,3)
Т.е. все зависит от потребностей и возможностей. Что бы сразу было все, работало быстро и легко интегрировалось (самые главные качества любой библиотеки) — стоит денег или это белый единорог. За какие-то базовые вещи никто денег брать не будет — понятно что за БПФ никто не заплатит, его итак можно быстро написать. С линейной алгеброй дела будут обстоять еще сложнее — т.к. быстро крутить-верететь матрицами сложно.
В любом случае, даже обходясь совсем-совсем готовой библиотекой надо понимать что там внутри происходит. Например, Вы можете найти псевдобратную матрицу с помощью: LU-разложение, разложения Холецкого, QR-разложения, SVD. LU-разложение работает только с невырожденными матрицами, т.е. на практике малоприменимый метод, разложение Холецкого работает только для положительно-определенных матриц и точность оставляет желать лучшего, а QR-разложение в общем-то неустойчивое (для устойчивого нужно использовать модифицированный алгоритм Грама-Шмидта), самым точным и надежным будет SVD-разложение… и самым медленным (а еще оно в своей основе использует QR-разложение). Ну в нахождение псевдообратной матрицы необходимо для получения МНК-решения системы линейных уравнений, а такие задачи встречаются абсолютно везде, фактически любую практическую задачу пытаются свести к МНК.
Но в других областях математика тоже постоянно всплывает, просто принято обычно все это маскировать «а давайте возьмем вот это фреймоворк» — иногда это даже спасает, или просто люди пишут говнокод не пытаясь разобраться в вопросе и быстрей коммитеть. Было дело — общался с чуваком, который писал какую-то штуку типа онлайн-магазина (в группе разработчиков естественно) и к тому моменту когда он дошел до истории как они прикручивали вейвлет-преобразование я уже был офигевший.
Все зависит от задач и от того насколько добросовестно подходят к её решению. Вообще в русском языке есть такое понятие как «халтура». Большая часть погроммистов именно что халтурит — кто-то осознано, кто-то неосознано, но халтурят, причем массово — целыми конторами. Благо в IT полно задач, которые при современных условиях (вычислительные мощности, обилие библиотек, фреймворков, развитые инструменты разработки) позволяют халтурить. Но вот игры — как раз задача не из этой области, прокатить на халтурку — не получится (но народ пытается, и даже наблюдаются какие-то успехи на этом фронте...)
Еще игры делаютя при крайне ограниченном бюджете, так что рулят человеке оркестры. В тоже время придя в какой-нибудь Синопсис можно всю жизнь лепить кнопочки и не вникать, что же там делает вон тот яйцеголовый чувак за соседним столом — просто разделение труда и компания может себе это позволить.
Причем через некоторое время становится абсолютно по барабану: считать прочностные характеристики зданий, или рассчитывать логистику крупной компании. Можн ос легкостью переходить с задачи на задачу, которые вообще никак друг с другом не связаны.
1. Надо понимать, т.е. знать математику (это не имеет отношение к зазубриванию теорем, к слову сказать именно опыт в доказательстве теорем очень хорошо прокачивает мозги)
2. Надо вникать в предметную область.
Но тут все же есть разделы математики, которые надо обязательно. Я вот например, постоянно сталкиваюсь с тем, что мои знания дискретной математики мягко говоря неглубокие, линал я тоже зря прогуливал. А вот в тервере, матстатистике, ТФКП, функане, непрерывной оптимизации в силу своего первого образования вроде более-менее норм. Так что риски Фишера сходу кластеризирую, ТрыДэ фигурки тоже буду вертеть как хотеть, а вот решить задачу разбиения графа — придется долго и мучительно читать. А делать приходиться и первое, и второе, и третье...., и десятое — и абсолютно без разницы что ты пилишь: ERP, билинговую систему, CAD, ГИС и т.д.
2. Некоторые вещи гуглятся с трудом, если не знать конкретно, что это такое. Если Вы загуглите Kraftwerk 2, то Яндекс и Гугл буду подсовывать второй студийный альбом германской группы Крафтверк, а не алгоритм быстрой оптимизации упаковки. Добавления слов optimization и algorithm поможет слабо (хотя Гугл уже начнет подавать надежды), и так пока не добавите что-нибудь типа VLSI, placement, force-directed и прочие ключевые слова из контекста именно этого алгоритма, хотя и тут гугл с яндексом будут подсовывать много хлама. И это ситуация, когда название алгоритма известно точно, а если еще нет, то что тогда? Наедятся на то что 1 млрд обезьян чисто теоретически могут написать Войну и Мир?
3. Чтобы применять алгоритм, нужно знать тонкости, нужно понимать как работает алгоритм, какие у него особенности. Программисты никогда не слышавшее про вычислительную геометрию на вопрос определения точки внутри многоугольника, начинают выдавать простыни тормозящего говнокода, а потом еще и удивляются почему алгоритм отрабатывает не все случаи, после чего начинают добавлять костыли, когда всего-то надо написать 19 строчек кода включая комментарии, скобочки и пропуски широко-известного Winding number algorithm (который впрочем тоже имеет ограничения применения). Но это еще простая и рутинная задача, а если что-нибудь посложнее? Ну я уже неоднократно наблюдал как погроммисты пренебрегавшие в свое время математикой, по 2-3 недели не могут написать Simulated Annealing — алгоритм 30-и летней давности и уровнем математики 1-го курса любого вуза. Крайний раз чувак перепутал знак «больше»-«меньше» и долго не мог понять почему не работает, когда ему об этом сообщили.
4. Алгоритм — это не более чем абстрактная заготовка. Нет никаких универсальных алгоритмов, а любой метод описывает только общие принципы решения задачи. А вот для каждой конкретной задачи придется все равно писать специфическую реализацию. Это только для учебных задач можно переписать из книжки простой алгоритм и он даже заработает.
5. Возвращаясь к Гугл нельзя не отметить, что зачастую по теме выдается всякий шлак. Если запросить чего-нибудь про Генетические алгоритмы, то там в большинстве случаев будет научпоп 70-ых годов про бинарные хромосомы и одноточечный/многоточечный кроссовер. Ну вот для решения задачи коммивояжера (около 2-х лет проработал на проекте где эта задачка была одной из основных частей ПО) это уже работать не будет, благо эта задачка учебно-типовая гугл осилит, а если что-то посложнее? А вот для чего-то посложнее операторы мутации и кроссовера (а это все математические операторы) придется разрабатывать самому в зависимости от задачи (см. пункт 4).
6. Алгоритмов много, просто тьма. Одну и туже задачу можно решить несколькими десятками алгоритмов, каждый из которых имеет свои достоинства и недостатки — без знания предметной области и без определенного математического бэкграунда оптимального решения не будет никогда (если вообще появится, знаю пару кодерских контор, которые так зафейлили очень жирные заказы). Еще очень распространенная проблема, когда алгоритмы применяют неправильно. Или другой пример, сейчас пошла мода на нейросети и все давай пихать их во все щели, даже туда, где обычный МНК справится.
7. Все любят петь про библиотеки. Так вот хорошие и быстрые библиотеки, которые нас избавят от написания своей реализации умножения матриц, уже стоят денег, ну от 8 до 32 тыщ. долларов за 1 рабочее место. И все равно надо понимать, что и для чего это делается, иначе будет пустая трата денег.
8. Ну и последнее. Программирование — это всего лишь часть прикладной математики, не более чем инструмент для реализации тех или иных математических методов решения практических задач. Научить синтаксису языка N можно любую обезьяну, вот только программируют не ради программирования.
Вроде уже который раз объясняю: сабж — отношения двух юридических лиц: одно заказало разработку у другого. Фирма-разработчик может использовать свои наработки в дальнейшем как угодно, если иное не было оговорено в договоре.
Причем здесь вообще трудовые отношения про которые вы все гнете и гнете? Они регулируются совершенно другими нормативными актами если говорить об РФ.
Я еще раз повторю если с первого раза не дошло: работник продает свой труд, который и является его продуктом и это не одно тоже, что и продукт фирмы. И работник волен распоряжаться своим трудом как угодно, никто не имеет права мешать сотруднику работать по совместительству в нескольких организациях, выполняя схожую работу или просто заниматься чем-то схожем дома, если он не привлекает для этого ресурсы фирмы, иначе бы уже давно каждого второго осудили бы. Но всегда можно придти к соглашению: а) добровольному, б) обоюдному в) за дополнительную плату соглашению прописанному, например, через NDA.
Кого отдадите? За что засудят? Вы снова мешайте все в кучу. Работник может отдать конкуренту только свой труд. Знайте, это такая целесообразная, сознательная деятельность человека, направленная на удовлетворение потребностей индивида и общества, как намекает вики. Никаких ограничений на перепродажу своего труда нет, чай не в рабовладельческом обществе живем.
Ну вообще-то это Вы почему-то решили проводить параллели между трудовыми отношениями и отношениями двух юрлиц о чем изначально шел разговор. Хотя в США действительно не делают никакой разницы, там и ТК нет — что с работниками, что с фирмами заключают договора и контракты. А в российском законодательстве фрилансер-Вася, если он не имеет хотя бы жалкой приставки ООО и студия Лебедева не одно и тоже — первый физлицо, второй юрлицо. Деятельность юрлиц регулируется ГК, с физлицом можно заключать договоренности регулируемые как ТК, так и ГК, но если обнаруживается что трудовые отношения маскируются гражданскими, то будет плохо.
Просите сколько угодно, только в любом случае придется придти к обоюдному соглашению, иначе никто ничего не получит. И если в маркетплейсе так дешево, то почему сразу там не купили?
Не платите, делайте все сами.
Ну в итоге мы и пришли к тому, что "государственность" заказа еще ни о чем не говорит, тем более о монополии — все исключительно по ситуации.
Просто вот любит народ все редуцировать и сводить к простым схемам, а так низя, надо быть гибким. Ну и абсолютная монополия на что-либо — зло, хотя любой будет к не стремится. И кстати получается шо вот эта статья, которую мы так радостно комментируем, как раз вот о попытке монополизировать одной Компани часть рынка любыми средствами.
Ну надо было такой исход предвидеть изначально и указать в договоре. АшотСофт мог согласиться, а мог и отказать (т.к. берет копейки зная что потом перепродаст продукт несколько раз).
С другой стороны никого же смущает, что дешевые сайты делается в конструкторах и использованием совершенно идентичных шаблонов?
Использование единой кодовой базы в разных (но однотипных) проектах и для разных заказчиков вполне рядовое явление при разработки софта. Уж не ради ли этого было придумано сначала модульное программирование, а затем и ООП?
Но передача программы со всеми потрохами и всякими копирайтам на исходный код — да, бывает. Но это реально дорого (и исполнитель больше бабла захочет и придется потратиться на кучу всякой фигни), а самое главное это имеет смысл, ну когда результат ну совсем инновационный, дабы получить преимущество перед конкурентами. Перед кем вот только собирается получать преимущество государство внутри себя — я хз. Те же мериканцы, абсолютно лояльно относятся к перепродажам разработок внутри страны, но экспорт технологий наружу всегда ограничивают, причем для всех, даже если компания и близко не подходила к госконтрактам, естественно компаниям это не нравится.
Просто надо понимать, что каждая сторона имеет свои интересы и они приходят к компромиссу через договор. Если там написано "отдать все" то придется отдавать все, а если нет — то и нет.
Ну т.е. тут нет простых и прямолинейных правил — все исключительно как договорятся.
Но, если компания А продает свой продукт Х только компании В, тот тут 2 варианта: Либо продукт Х говно полное и его покупает компания В в силу неэкономических причин, а например, из-за родственных связей, либо компания В десятикратно переплачивает и продукт Х действительно дает ей конкурентное преимущество.
Да. Все правильно. Именно это я хотел сказать.
Правда как еще выше выяснилось, шо люди отождествляют результат труда (т.е. финальный продукт) с продуктом наемного работника, хотя вот как раз в случае наемного работника — его труд и есть продукт (и он может его перепродавать хоть десятерым). А потом еще пытаются это натянуть на отношения двух юрлиц — типа компания исполнитель это наемный работник компании заказчика, я думаю что если сюда зайдут юристы, то они офигеют :-)
Ну и еще у меня есть подозрение шо не всем в школе рассказали про отмену крепостного права...
Не, ну правда что касается интеллектуальной собственности — то там действительно все сложно, поэтому передача прав на ИС всегда оговаривается, шо нибудь в стиле, если вы в процессе работы/исполнения заказа изобретете супер-пузырьковую сортировку, то расскажите как это работает и передадите права на нее нам, а мы получим патент и укажем там, что выявляцтесь изобретателем, ну и т.д. (если обратить внимание, то в патенте отдельно указываются изобретатели и правобладатели)
Ну я в таких случаях сообщаю, шо если не нравится такая логика, то ищите другого.
Все просто — каждый вид работ стоить своих денег, а крепостное право отменили в 1861 году, если кто не в курсе.
А труд сотрудника покупайте по трудовому договору и соответственно по трудовому законодательству — ограничивайте право собственности на результат труда за счет выполнения дополнительных условий: пенсии, страхования, невозможности расторгнуть договор без согласия работника и много других затратных вещей. Еще и полностью обеспечивайте необходимые условия труда (и инструменты). Но это не значит, шо сотрудник автоматом не может выполнять точно такую же работу в своих интересах в нерабочее время ;-) Понимайте? Продукт сотрудника — это его труд, который он может перепродавать кому угодно. Работодатель не получает монопольного права на использования труда сотрудника только за то что его взял на работу, он просто его покупает на какое-то время. А если еще хотите, что бы сотрудник не делился секретами, то значит придется еще и за секретность доплачивать. NDA бывают разные.
Но трудовые отношения к этому сабжу не имеют никакого отношения от слова "ну вообще никак" — не надо натягивать сову на глобус — это антигуманно. Тут вообще-то отношения двух юрлиц: Все хотелки заказчика должны быть отражены в договоре — если просто покупает продукт, то это одно, если покупайте интеллектуальную собственность — то это уже куда более серьёзнее и дороже, а если еще и хочешь получить эксклюзивные права на все и на вечно — то такими вещами должна уже ФАС интересоваться.
Но в Штатах, например, как такового трудового законодательства нет — все определяется договорами и торговаться будут за каждый пункт. Хотите картинку? Пожалуйста. Хотите картинку Роялти Фри (в РФ к сожалению еще не все в курсе)? Ну ОК. Хотите уникальную картинку, шоб у других тоже не было? Пожалуйста, ценник х10. Не нравиться? Ищите другого?
Вы же не надеюсь не считайте, что купив один раз стул в IKEA, получайте эксклюзивное право: Продавать стулья только вам?
И раз Вы тут упомянули игры, то открою страшную тайну — очень много игровых ресурсов были созданы один раз (например звуки оружия), а потом многократно перепродавались разным компаниям. Если не нравится такой расклад — то можете купить эсклюзив, исключительно для себя — это будет дороже.
Если это дотации или гранты — то ничего не должен.
Ну т.е. реально половина патентов Теслы выполнены в рамках грантов, но принадлежат они исключительно Тесле. Ну т.е. реально да, американское правительство дает бабки Маску, за то что он огораживает свою интеллектуальную собственность. Делает это потому что кроме Маска, никто не хочет собирать электромобили и осваивать Марс. Было бы в США штук 20 компаний производящих аналоги Теслы — никаких бы дотаций и грантов не было бы.
Вот в области космоса у Маска уже есть некоторые конкуренты — там ведь не только SpaceX раззевает варюшку на бюджет NASA.
Наверняка там есть и прямые инвестиции уже с какими-то обязательствами. Наверняка имели место и кулуарные договоренности (о которых мы никогда не узнаем). Но факт есть факт — правительство США дает бабки Маску на то что бы он продолжал делать электромобили, продавал их и извлекал из этого выгоду для себя. Иначе просто никто не будет этим заниматься, т.к. сейчас это убыточно.
Так что такие комментарии вполне могут быть из той же оперы.
У вас уникальная способность находить нестадартные аналогии и строить никак не связанные пары утверждений. В стиле: Найдите общее между ботинком и карандашом :-)
Все регулируется договорами. Вы же тут пытайтесь выдать свой взгляд (идущий в разрез с реальностью) за истину и натягивай сову на глобус, вот что странно :-)