Что же касается того, что не весь регистровый файл виртуализируется (не создается полной копии процессора), то это обусловлено как техническими сложностями, так и логической ненужностью виртуализации, например, регистров, отвечающих за страничную память. Если все threads приписанные к одному процессу по определению разделяют между собой одно адресное пространство (так как адресное пространство это и есть сам процесс), то нет нужды сохранять регистры, отвечающие за страничную память. Другие регистры не сохраняются потому, что они предназначены для разработчиков самой ОС и не используются в прикладных программах. Часто их виртуализация вообще невозможна ввиду архитектуры CPU. Но всегда виртуализируется весь регистровый файл application уровня — GPR, floating-point регистры, флаги прикладного уровня, всякие SIMD-регистры.
Нет, не согласен. И легковесные, и настоящие threads подразумевают виртуализацию регистров процессора, их сохранение при диспетчеризации – они всегда эмулируют множество процессоров с индивидуальными значениями в их регистрах. В регистрах живут локальные переменные процедур, и даже если нет преемптивной многозадачности, то все равно нужно обеспечивать каждому thread свои индивидуальные регистры, как будто бы он исполняется на настоящем отдельном процессоре. Даже setjmp в C сохраняет значения регистров, что уж говорить о любой реализации многозадачности, даже если она не преемптивная. Даже у самого тривиального (быть может, в свою очередь тоже эмулируемого) стекового процессора, у него все равно есть указатель команд и указатель стека. Их и придется виртуализировать, чтобы создать абстракцию threads. Давайте не будем вносить путаницу и называть тредами гипотетические средства параллельного исполнения в скриптовом языке, не транслируемом никогда в машинный код – так можно далекой зайти. Если же мы говорим об универсальном решении, то неизбежно у нас возникает задача виртуализации процессора с его регистрами.
Что касается подачи on-line vs через юристов — наша компания обращалась раньше к юристам не только потому, что они помогают грамотно составить заявку, но и потому, что по их собственным утверждениям :) так легче защитить эту заявку. Экзаменатор из USPTO будет пытаться отклонить патент, будет находить всякие неувязки и чужой prior art и на этом основании пытаться отклонить заявку. Типа это его основное желание — отклонить. А наши юристы с ним типа грамотно перепишутся — и убедят его в нашем приоритете и правильности формулировок. А без юристов это якобы (подчеркиваю — со слов самих юристов) это сделать сложно.
Но юристы стоят больших денег. Тут упомянули 15000 рублей (как я понял) за provisional application? А 1500$ не хотите? :) Полноценная защита патента обходится через юристов западных примерно в 10K$. Есть практический опыт. Но нужно отметить плюс их работы — патенты-то реально получены.
Очень интригует возможность обойтись без уплаты 10K$ с новым патентом. С одной стороны Вы верно говорите — on-line патентование не просто так существует. С другой стороны, если куча народа платит патентным адвокатам по 10K$ за их работу, и несмотря на возможность он-лайн патентования они не остались без работы — значит есть и в них какой-то смысл…
Вот в чем вопрос для меня открытый…
Цель-то наша не просто подать заявку, а получить патент. Причем не какой попало, а такой, который не смогут обойти конкуренты. Сайт USPTO я читал, но есть много нюансов, остающихся за рамками формального изложения. Но помогает практический опыт. Поэтому предлагаю им меняться. :)
Один пример я уже привел выше (о значении claims). Какой-нибудь специалист российской школы может думать, что самое главное в патенте — это подробное и в то же время обобщенное описание самого изобретения. Это тоже важно, но суд будет решать другой, главный вопрос:
1). Были ли нарушены claims патента. Не вопрос о том, было ли реализовано нечто, похожее на описанный алгоритм — а конкретно было ли реализовано нечто, что четко подпадает под claims этого патента.
И во вторую уже очередь:
2). Насколько валидны сами claims: не описываете ли Вы в них чье-то изобретение, сделанное до Вас (имеете ли именно Вы prior art), не пытаетесь ли Вы патентовать «общее знание», реализует ли Ваш метод то, что Вы констатируете в своих claims.
По сути текст патента нужен в первую очередь для того, чтобы обосновать его claims в процессе защиты заявки (ну и может быть в будущем). Но главная защитная сила патента, когда он работает — именно в «what is claimed».
Есть и много других интересных нюансов — например, стоит ли ссылаться на чужие смежные или предшествующие патенты. Оказывается для успешной защиты заявки и для облегчения работы экзаменатору в USPTO желательно упомянуть все действительно смежные патенты.
Так же настоятельно рекомендуется упомянуть научные публикации, на которых базируется Ваш собственный новый вклад, чтобы Вас не обвинили другие в заимствовании идей из их патентов (в том числе поданных позже Вашей заявки). Вы всегда сошлетесь на то, что эти идеи были опубликованы в научной печати ранее.
Я видел попытку задним числом подать патенты, прямо покрывающие то, что изложено в чужих научных работах — ведь USPTO не может читать все публикации, и USPTO не знает о факте попытки закрыть своим патентом чужие наработки. И выдает патент. А затем его получатель может сказать Вам — вы продаете лицензию на технологию, которая, в частности, нарушает и claims моего патента, а не только Вашего… Если Вы сослались на научные работы – уже в этой части отсекли другим возможность «примазаться» к Вашему патенту.
Так же нужно учесть, что в общем случае заявка публикуется только через 18 месяцев (начиная с даты приоритета) и поэтому в течение полутора лет изобретатель не может быть уверен в том, что он имеет приоритет — он не видит чужих заявок, поданных в предыдущие 18 месяцев. Получение патента дело не быстрое, хотя бывают и какие-то загадачные отклонения от процедуры. Например, могут опубликовать заявку через год с момента подачи, и выдать патент уже через 18 месяцев.
Provisional Application нужно для того, чтобы застолбить за собой приоритет (если повезет). Далее в течение года нужно подать полноценную заявку — но благодаря provisonal application у Вас есть защита приоритета в тот период, пока Вы над ней работаете (если Вам повезло и Вас никто не опередил). Но даже если Вы сразу подадите полноценную заявку — Вы не будете знать, имеете ли Вы приоритет на самом деле. Заявки публикуются не сразу, а через 18 месяцев. Поэтому выполняя поиск на сайте USPTO Вы не видите, кто чего успел подать до Вас — заявки, поданные в последние 18 месяцев для Вас невидимы. Полтора года Вы ждете опубликования всех предыдущих чужих заявок и только после этого убеждаетесь, что Вы были первым (или не были). При этом в случае, если Вас кто-то опередил – деньги, уплаченные USPTO (и/или юристам) Вам никто не вернет. :)
Сколько, по Вашим сведениям, будет стоить полноценный патент, получаемый вот так, без юристов и какова вероятность его получить? Меня уверяют, что вероятность самому получить патент существенно ниже. Так же вопрос — как по-Вашему отсутствие профессионально prior art searching повлияет на получение патента?
И еще замечу, что самое главное в патенте с точки зрения enforcement — это claims, а не подробное описание изобретения. О ключевом значеии claims знаю не понаслышке – у меня есть успешный опыт получения US патента и консультирующие нашу компанию юристы объяснили ключевое значение claims для любого возможного суда. Важно не просто описать свое изобретение, но и кратко, и в то же время четко и одновременно с этим :) максимально широко сформулировать по пунктам — ЧТО КОНКРЕТНО (!) Вы защищаете. Настолько широко, насколько это не повредит получению патента (чтобы не получить обвинение в попытке патентовать общее знание или в пересечении с чужими патентами). Патент без хорошо продуманных claims бесполезен.
О provisional applications знаем и пользуемся — но мне очень интеерсен Ваш опыт работы с USPTO без юристов, услуги которых стоят очень серьезных денег. :)
Попробуйте начать с нуля любую компанию и заработать больше, чем Вы потратите на свою семью за тот же период времени при условии не снижать уровень жизни по сравнению с текущим. Затем попробуйте заработать столько денег, чтобы кроме содержания своей семьи Вы смогли оплачивать хотя бы одного наемного работника с хорошей зарплатой (тоже имеющего семью), причем стабильно. То есть так, чтобы у того была уверенность, что завтра Ваша компания не разорится и его высокая зарплата никуда не исчезнет. Чтобы он самоотверженно на Вас работал, а не относился к Вашей компании как к чему-то временному и одномоментному. Если Вам для этого нужны инвестиции – попытайтесь убедить кого-нибудь дать Вам такое количество денег, чтобы их хватило на оплату даже этого единственного программиста, а так же на жизнь Вашей семьи в течение полутора лет как минимум. Но при этом добейтесь от инвестора таких условий, чтобы Вы остались владельцем бизнеса и могли самостоятельно принимать в нем ключевые решения, а так же чтобы при следующем раунде инвестиций Вы тоже сохранили контроль над компанией. Вы уже ощутите сполна, что такое быть предпринимателем…
Теперь представьте себе, что Вам нужно 10 работников, и просуществовать нужно 10 лет. Причем не просто как-то протянуть это время, а руководить этим 10 работниками так, чтобы они совместно сделали нечто, из-за чего Вы попадете на обложку «Форбс».
Вы можете обижаться на мои слова, но правда жизни состоит в том, что Вы в данный момент – заменимы, а этот человек для данной компании незаменим. Именно он ее создал, в том числе это выражается в том, что он нашел вас (коллектив), заинтриговал своими идеями и деньгами, он в течение многих лет платил вам настолько хорошо, что этого хватало вашим семьям на жизнь (хотя в последнее время Вы лично недовольны). Он вас умело мотивировал, раз по сей день вы (команда) не разбежались по другим фирмам. И он руководил вашей деятельностью и координировал ее настолько хорошо, что о компании пишет «Форбс».
Если Вы считаете, что можете обойтись без него – уйдите в другую компанию, ведь не бывает проектов, о которых пишет «Форбс» и у которых нет конкурентов. Или даже попробуйте основать свою компанию. Только хорошо и много раз подумайте перед этим о том, что потеряете и уверены ли Вы, что приобретете больше. Пообещает ли Вам кто-то намного лучшие условия и выполнит ли он обещание? Не разорится ли та другая (или Ваша) компания через год…
Вообще скажу по своему небольшому опыту – начать свой бизнес невероятно сложно именно для тех людей, кому не пофик, чем заниматься и кто хочет получать от этого бизнеса фан, а не только деньги. Чем интересней и сложнее то, чем ты занимаешься – тем тяжелее создать свой бизнес и завоевать место под Солнцем.
IMHO — Вы можете быть просто гениальным программистом на PHP (или на чем угодно другом), Ваша голова может быть переполнена креативными идеями – но не факт, что у Вас вообще ну хоть что-то получится в плане бизнеса когда планка высока – Вам нужно не просто создать, но и «донести» до людей нечто уникальное, благодаря чему попадаешь на обложку «Форбс». :)
Хорошо бы указать источники данных, а так же их актуальность (в каком году составлялись таблицы), ну и совершенно непонятен вопрос легальности этой информации. Информация может быть самой замечательной, но если она добыта нелегально, то ни в одном серьезном проекте использовать ее нельзя и хорошо бы знать об этом заранее. Причем информация может содержать скрытые метки, которые позволят в будущем легальным владельцам засудить всех пользователей этих данных.
У нас в МСС были конечно законы газовой динамики, но там вообще одномерный случай рассматривался…
Да, именно — глубокое исследование сферических коней в вакууме, и никаких практических примеров. Это же программисты, а не будущие физики-теоретики, им бы лучше если уж и изучать акустику, то практические аспекты из их будущей реальной жизни, на примере синтеза 3D-звука или конкретного алгоритма компрессии (типа DTS, например). Зачем им понимать, как физически возникает звук в материале и как он распространяется в среде в таких подробностях, будто бы они будут конструировать акустические пушки LRAD, когда они не с физикой будут работать, а может быть кодировать/декодировать звук по готовым алгоритмам. Если это программисты именно! А не математики, физики, специалисты по вычислительным методам на стыке наук.
Все-таки подавляющему большинству программистов не нужны ни дифуры, ни глубокие познания в алгебре как в науке. Они не будут доказывать теоремы, это не их работа! В лучшем случае они будут использовать готовые результаты, полученные профессиональными математиками.
Программистам нужны общие представления о математике, поэтому я и не спорю, что математика в объеме первого курса МГУ/СПбГУ полезна для развития мозга и как основа для будущего изучения каких-то отдельных направлений, если вдруг возникнет потребность. Но дифуры, ТФКП, матфизика или даже алгебра на глубоком уровне понимания нужны только тем, кто сознательно решил специализироваться конкретно на моделировании физических процессов или, скажем, на разработке кодеков.
Но, например, системному программисту не нужен полный фундаментальный курс математики. Подавляющее большинство программистов никогда не будут ничего моделировать через дифуры. Даже если они работают в Microsoft над ядром Windows — им не нужна вся эта высшая математика! Зато им остро нужен фундаментальный курс собственно программирования в широком смысле слова — структуры данных, алгоритмы, методы организации вычислений, технология разработки программ и так далее.
Плюс нужны практические (без доказательства всех теорем от нуля) познания в ряде областей математики, тесно связанных с программированием. Но не глубокая теория, такая, которой учат будущих математиков. Даже работая в Microsoft или в Oracle над ядрами соответствующих систем, программист не будут решать системы линейных уравнений в вещественных числах и никогда не столкнутся с вопросами сходимости и точности вычислений при решении таких систем. Никогда и нигде не применит ТФКП.
Если только он не занимается моделированием физических процессов профессионально — но это же отдельная область! Этим занимаются единицы и им действительно нужна и математика, и физика. Остальным же достаточно общих представлений.
С криптографией аналогичная ситуация. Что более важно для специалиста по computer science — иметь широкие познания в области существующих алгоритмов шифрования и схем аутентификации с их «подводными камнями», а так же знать приемы их эффективной реализации, или же уметь доказывать китайскую теорему об остатках через теорию групп расписав выкладки на салфетке на вечеринке, но не представлять, как эффективно реализовать быстрое умножение на «C»? (Понятно, что в идеале лучше и то и другое — но что приоритетней, когда на все нет времени и нужно делать выбор?)
Да, кто-то захочет стать разработчиком оригинальных криптографических алгоритмов. Он может тогда пойти получать истинное математическое образование. Честь ему и хвала. Но подавляющее большинство системных программистов, которые будут имплементировать эти алгоритмы в библиотеках и использовать их в своих системах, не нуждаются в умении оценивать их криптостойкость аналитическим путем.
Давайте начнем с оценки сложности алгоритмов. Программист должен уметь КАЧЕСТВЕННО ОЦЕНИВАТЬ сложность. Ему не нужно находить точное выражение для оценки сложности, не нужна и точная асимптотика. Вы знаете, что для огромного количества тривиальных (казалось бы) задач, вообще не существует точных оценок сложности? Поиск верхних и нижних границ сложности для сотен фундаментальных алгоритмов является нерешенной математической проблемой. Для многих задач не доказана их NP-полнота. Что там далеко ходить — знаете ли Вы, что математики до сих пор не установили какова сложность операции перемножения двух обыкновенных матриц общего вида! И это в тривиальных-то задачах такая неясность, что уж говорить о задачах из реального мира…
Поэтому точная оценка сложности редко кому нужна. И в реальной практической работе программиста ему не нужна высшая математика такого уровня, которая потребуется для оценки сложности а-ля Кнут. Зато нужно уметь прикидочно оценивать сложность реальных алгоритмов, не прибегая при этом к мега-нетривиальной математике. На нее попросту нет времени, точная оценка может и месяцы занять.
Более того, той математике, которая нужна для оценки сложности некоторых алгоритмов, могут вообще не учить в ВУЗе — она может оказаться за пределами ВУЗовской программы. Чтобы ее понять нужно завершить математическое образование в университете и пойти заниматься научной работой в аспирантуру. Или читать самостоятельно монографии и работать своей головой месяцы и годы. Это нужно ПРОГРАММИСТУ, как Вы считаете? IMHO это интересует только истинных математиков, программисты же подождут их окончательного вердикта.
Ну вот сейчас поступают иначе — куда-то в боковую ветвь вынесли все то, что относится к программированию и алгоритмам, зато на фундаментальном уровне, заложив железобетонную основу, читают математику с физикой. Что в результате мы имеем? Тех самых «быдлокодеров», которых все ругают по форумам! А откуда они, блин, берутся? Никто не задумывался??? У них же у всех ТОТАЛЬНО дипломы ВУЗов! Иногда бывших госуниверситетов с их фундаментальнейшей программой.
Это вообще две РАЗНЫЕ проблемы. Отсутствие в России нормального среднего специального образования для «казуальных» программистов, типа обычных Web-программистов делающих типовые сайты это одна проблема, а неправильное преподавание computer science в университете и пропасть между академической средой, компаниями и студентами — это другая, самостоятельная проблема.
Я пишу сейчас именно о том, что обучение программированию именно в рамках университетского курса построено в корне неправильно, так как людей грузят высшей математикой (дифференциальными уравнениями, математической физикой, теорией функций комплексной переменной, топологией, сопротивлением материалов, дифференциальной геометрией — в зависимости от ВУЗа, факультета, конкретной специальности).
Да о чем вообще можно говорить, когда даже ПО ЧАСАМ на факультете прикладной математики — процессов управления ФИЗИКИ (влючая матфизику) читают больше, чем собственно программистских дисциплин!
Не нужно придумывать виртуальный СССР!
Точно так же в СССР шли в ВУЗы, чтобы откосить от советской армии. И для тех же «корочек» — чтобы иметь шансы стать начальником, а не рядовым сотрудником. Точно так же переписывали друг у друга конспекты прогулянных лекций. И больше половины группы не могло объяснить толком, почему они оказались именно на этой специальности. А зачеты и тройки многие получали, похлопав наивными виноватыми глазками перед преподавателем.
При этом если сейчас все-таки уровень преподавания подтянулся и в ВУЗах есть хорошие преподаватели, то во времена позднего СССР с программированием была полная задница. Преподавателей могли учить студенты. Исключения из этого правила были единичными.
При этом интернета не было и ознакомиться с работами западных специалистов можно было только по немногочисленным переведенным книгам в публичной библиотеке. Литературы было очень мало, а того же Кнута (как и прочую редкую литературу) можно было или купить на удачу в «Старой Книге» если ОЧЕНЬ-очень повезет, или же заказать (если книга переиздается) и больше года ждать, пока тебе придет открытка, а затем стоять в очереди в книжном магазине с утра пораньше, пока не раскупили.
Если с трудоустройством по специальности в СССР и было легче, то не для всех специальностей и еще благодаря распределению, которое в России отменили. А не из-за того, что в СССР готовили супер-специалистов, а сейчас готовят «быдлокодеров». Наоборот, сейчас уровень преподавания конкретно программирования (computer science) намного выше.
В каком-то смысле так и происходит — только косвенно. На Западе крупные компании частично финансируют ВУЗы или выделяют гранты под конкретные исследования, по ходу дела присматриваясь к молодым специалистам, своим потенциальным сотрудникам. А студенты присматриваются к компаниям и что не менее важно получают представление о том, что сейчас реально востребовано, какие технологии находятся на переднем крае исследований. Так в нормальной системе образования происходит постепенная интеграция программиста в профессиональную среду — он уже в процессе обучения контактирует с будущим работодателем или даже начинает косвенным образом на него работать. А ведет эту работу обычно профессор, имеющий множество научных публикаций, человек с именем из академической среды, вызывающий доверие у корпораций и поэтому получающий щедрые гранты на свои исследования. Поэтому на Западе нет зияющей пропасти между ВУЗом, академической средой, research & development и прочими подразделениями крупных компаний.
Если обучение платное, как в США, то люди еще и имеют четкое представление о том, зачем они пришли в ВУЗ и почему именно на эту специальность, а не на другую. По мере обучения они не только знакомятся с теми, с кем видимо будут работать в одной области и возможно даже с кем-то в одной компании, но и устанавливают первые контакты с профессионалами в компаниях или же постепенно интегрируются в академическую среду, если выбирают для себя путь остаться в чистой науке. Изучают то, что находится на переднем крае науки и техники и более того — сами начинают принимать участие в создании технологий будущего. В том числе работают над известными open source проектами на гранты корпораций и фондов.
А советские ВУЗы могут гордиться своей фундаментальной математической программой, оторванной от реальности и еще тем фактом, что большинство их выпускников не работает по той специальности, по которой они получили диплом, а многие учатся там вообще для получения отмазки от армии, «ради корочки», потому, что туда пошли друзья/подруги, чтобы найти жениха/потому, что там много клевых диффченок и т.п.
Не понимаю такого однобокого подхода и надменности.
Вам же не приходит в голову идея о том, что врачей нужно учить математике в течение 5 лет, параллельно на втором плане читая им кое-что из медицины. Типа пусть университет даст им фундаментальное математическое образование и разовьет мозг, а медицине-то они как-нибудь сами потом научатся, на работе. Благо по сравнению с математикой это вообще не наука, а так, практический навык. Да и вообще, зачем им ВУЗ? Могут пойти в техникум или на платные курсы и там подучиться…
Вы убеждены, что математику нельзя понять, если она читается в ограниченном объеме «по верхам», ей нужно учиться именно 5 лет фундаментальным образом. При этом Вы считаете, что программирование можно освоить в техникуме. Так ведь и математике можно пойти учиться в техникуме, вот только какой результат-то будет?
Ваше отношение к программированию как к вторичному предмету или одному из частных разделов математики — заблуждение. Программирование сейчас настолько необъятная область, что ее изучению можно посвятить всю жизнь, особенно если вдаваться глубоко в каждое из направлений (и затрагивать смежные области, связывая задачи программирования с той же математикой, например).
Так что пусть кафедры математических факультетов готовят специалистов в таких областях программирования, где не обойтись без высшей математики. Но в университетах должно быть представлено и программирование как таковое, читаемое как основная дисциплина и сопровождаемое изучением основ математики. Знаний математики в объеме первого курса советского университета предостаточно, плюс можно дополнительно прочитать курс лекций по булевой алгебре, полям Галуа, БПФ/вейвлетам и комбинаторике (может еще что-то забыл, но не суть). Причем в первую очередь практический курс, а не глубокую теорию с доказательствами всех теорем от нуля. Весь фундаментальный курс математики из университета БОЛЬШИНСТВУ программистов не нужен. Не «быдлокодерам» он не нужен, а в том числе и будущим ведущим специалистам знаменитых фирм не нужно столько математики.
Если же ничего не менять в преподавании программирования, то так и будут приходить устраиваться на работу в программистские компании люди с высшим образованием и красными дипломами, которые прекрасно берут интегралы и даже знают, что такое гомотопическая эквивалентность, но зато не знают, как проинвертировать второй бит в числе и делают три ошибки в программе бинарного поиска в массиве.
Но юристы стоят больших денег. Тут упомянули 15000 рублей (как я понял) за provisional application? А 1500$ не хотите? :) Полноценная защита патента обходится через юристов западных примерно в 10K$. Есть практический опыт. Но нужно отметить плюс их работы — патенты-то реально получены.
Очень интригует возможность обойтись без уплаты 10K$ с новым патентом. С одной стороны Вы верно говорите — on-line патентование не просто так существует. С другой стороны, если куча народа платит патентным адвокатам по 10K$ за их работу, и несмотря на возможность он-лайн патентования они не остались без работы — значит есть и в них какой-то смысл…
Вот в чем вопрос для меня открытый…
Один пример я уже привел выше (о значении claims). Какой-нибудь специалист российской школы может думать, что самое главное в патенте — это подробное и в то же время обобщенное описание самого изобретения. Это тоже важно, но суд будет решать другой, главный вопрос:
1). Были ли нарушены claims патента. Не вопрос о том, было ли реализовано нечто, похожее на описанный алгоритм — а конкретно было ли реализовано нечто, что четко подпадает под claims этого патента.
И во вторую уже очередь:
2). Насколько валидны сами claims: не описываете ли Вы в них чье-то изобретение, сделанное до Вас (имеете ли именно Вы prior art), не пытаетесь ли Вы патентовать «общее знание», реализует ли Ваш метод то, что Вы констатируете в своих claims.
По сути текст патента нужен в первую очередь для того, чтобы обосновать его claims в процессе защиты заявки (ну и может быть в будущем). Но главная защитная сила патента, когда он работает — именно в «what is claimed».
Есть и много других интересных нюансов — например, стоит ли ссылаться на чужие смежные или предшествующие патенты. Оказывается для успешной защиты заявки и для облегчения работы экзаменатору в USPTO желательно упомянуть все действительно смежные патенты.
Так же настоятельно рекомендуется упомянуть научные публикации, на которых базируется Ваш собственный новый вклад, чтобы Вас не обвинили другие в заимствовании идей из их патентов (в том числе поданных позже Вашей заявки). Вы всегда сошлетесь на то, что эти идеи были опубликованы в научной печати ранее.
Я видел попытку задним числом подать патенты, прямо покрывающие то, что изложено в чужих научных работах — ведь USPTO не может читать все публикации, и USPTO не знает о факте попытки закрыть своим патентом чужие наработки. И выдает патент. А затем его получатель может сказать Вам — вы продаете лицензию на технологию, которая, в частности, нарушает и claims моего патента, а не только Вашего… Если Вы сослались на научные работы – уже в этой части отсекли другим возможность «примазаться» к Вашему патенту.
И еще замечу, что самое главное в патенте с точки зрения enforcement — это claims, а не подробное описание изобретения. О ключевом значеии claims знаю не понаслышке – у меня есть успешный опыт получения US патента и консультирующие нашу компанию юристы объяснили ключевое значение claims для любого возможного суда. Важно не просто описать свое изобретение, но и кратко, и в то же время четко и одновременно с этим :) максимально широко сформулировать по пунктам — ЧТО КОНКРЕТНО (!) Вы защищаете. Настолько широко, насколько это не повредит получению патента (чтобы не получить обвинение в попытке патентовать общее знание или в пересечении с чужими патентами). Патент без хорошо продуманных claims бесполезен.
О provisional applications знаем и пользуемся — но мне очень интеерсен Ваш опыт работы с USPTO без юристов, услуги которых стоят очень серьезных денег. :)
Теперь представьте себе, что Вам нужно 10 работников, и просуществовать нужно 10 лет. Причем не просто как-то протянуть это время, а руководить этим 10 работниками так, чтобы они совместно сделали нечто, из-за чего Вы попадете на обложку «Форбс».
Вы можете обижаться на мои слова, но правда жизни состоит в том, что Вы в данный момент – заменимы, а этот человек для данной компании незаменим. Именно он ее создал, в том числе это выражается в том, что он нашел вас (коллектив), заинтриговал своими идеями и деньгами, он в течение многих лет платил вам настолько хорошо, что этого хватало вашим семьям на жизнь (хотя в последнее время Вы лично недовольны). Он вас умело мотивировал, раз по сей день вы (команда) не разбежались по другим фирмам. И он руководил вашей деятельностью и координировал ее настолько хорошо, что о компании пишет «Форбс».
Если Вы считаете, что можете обойтись без него – уйдите в другую компанию, ведь не бывает проектов, о которых пишет «Форбс» и у которых нет конкурентов. Или даже попробуйте основать свою компанию. Только хорошо и много раз подумайте перед этим о том, что потеряете и уверены ли Вы, что приобретете больше. Пообещает ли Вам кто-то намного лучшие условия и выполнит ли он обещание? Не разорится ли та другая (или Ваша) компания через год…
Вообще скажу по своему небольшому опыту – начать свой бизнес невероятно сложно именно для тех людей, кому не пофик, чем заниматься и кто хочет получать от этого бизнеса фан, а не только деньги. Чем интересней и сложнее то, чем ты занимаешься – тем тяжелее создать свой бизнес и завоевать место под Солнцем.
IMHO — Вы можете быть просто гениальным программистом на PHP (или на чем угодно другом), Ваша голова может быть переполнена креативными идеями – но не факт, что у Вас вообще ну хоть что-то получится в плане бизнеса когда планка высока – Вам нужно не просто создать, но и «донести» до людей нечто уникальное, благодаря чему попадаешь на обложку «Форбс». :)
Программистам нужны общие представления о математике, поэтому я и не спорю, что математика в объеме первого курса МГУ/СПбГУ полезна для развития мозга и как основа для будущего изучения каких-то отдельных направлений, если вдруг возникнет потребность. Но дифуры, ТФКП, матфизика или даже алгебра на глубоком уровне понимания нужны только тем, кто сознательно решил специализироваться конкретно на моделировании физических процессов или, скажем, на разработке кодеков.
Но, например, системному программисту не нужен полный фундаментальный курс математики. Подавляющее большинство программистов никогда не будут ничего моделировать через дифуры. Даже если они работают в Microsoft над ядром Windows — им не нужна вся эта высшая математика! Зато им остро нужен фундаментальный курс собственно программирования в широком смысле слова — структуры данных, алгоритмы, методы организации вычислений, технология разработки программ и так далее.
Плюс нужны практические (без доказательства всех теорем от нуля) познания в ряде областей математики, тесно связанных с программированием. Но не глубокая теория, такая, которой учат будущих математиков. Даже работая в Microsoft или в Oracle над ядрами соответствующих систем, программист не будут решать системы линейных уравнений в вещественных числах и никогда не столкнутся с вопросами сходимости и точности вычислений при решении таких систем. Никогда и нигде не применит ТФКП.
Если только он не занимается моделированием физических процессов профессионально — но это же отдельная область! Этим занимаются единицы и им действительно нужна и математика, и физика. Остальным же достаточно общих представлений.
Да, кто-то захочет стать разработчиком оригинальных криптографических алгоритмов. Он может тогда пойти получать истинное математическое образование. Честь ему и хвала. Но подавляющее большинство системных программистов, которые будут имплементировать эти алгоритмы в библиотеках и использовать их в своих системах, не нуждаются в умении оценивать их криптостойкость аналитическим путем.
Поэтому точная оценка сложности редко кому нужна. И в реальной практической работе программиста ему не нужна высшая математика такого уровня, которая потребуется для оценки сложности а-ля Кнут. Зато нужно уметь прикидочно оценивать сложность реальных алгоритмов, не прибегая при этом к мега-нетривиальной математике. На нее попросту нет времени, точная оценка может и месяцы занять.
Более того, той математике, которая нужна для оценки сложности некоторых алгоритмов, могут вообще не учить в ВУЗе — она может оказаться за пределами ВУЗовской программы. Чтобы ее понять нужно завершить математическое образование в университете и пойти заниматься научной работой в аспирантуру. Или читать самостоятельно монографии и работать своей головой месяцы и годы. Это нужно ПРОГРАММИСТУ, как Вы считаете? IMHO это интересует только истинных математиков, программисты же подождут их окончательного вердикта.
Я пишу сейчас именно о том, что обучение программированию именно в рамках университетского курса построено в корне неправильно, так как людей грузят высшей математикой (дифференциальными уравнениями, математической физикой, теорией функций комплексной переменной, топологией, сопротивлением материалов, дифференциальной геометрией — в зависимости от ВУЗа, факультета, конкретной специальности).
Да о чем вообще можно говорить, когда даже ПО ЧАСАМ на факультете прикладной математики — процессов управления ФИЗИКИ (влючая матфизику) читают больше, чем собственно программистских дисциплин!
Точно так же в СССР шли в ВУЗы, чтобы откосить от советской армии. И для тех же «корочек» — чтобы иметь шансы стать начальником, а не рядовым сотрудником. Точно так же переписывали друг у друга конспекты прогулянных лекций. И больше половины группы не могло объяснить толком, почему они оказались именно на этой специальности. А зачеты и тройки многие получали, похлопав наивными виноватыми глазками перед преподавателем.
При этом если сейчас все-таки уровень преподавания подтянулся и в ВУЗах есть хорошие преподаватели, то во времена позднего СССР с программированием была полная задница. Преподавателей могли учить студенты. Исключения из этого правила были единичными.
При этом интернета не было и ознакомиться с работами западных специалистов можно было только по немногочисленным переведенным книгам в публичной библиотеке. Литературы было очень мало, а того же Кнута (как и прочую редкую литературу) можно было или купить на удачу в «Старой Книге» если ОЧЕНЬ-очень повезет, или же заказать (если книга переиздается) и больше года ждать, пока тебе придет открытка, а затем стоять в очереди в книжном магазине с утра пораньше, пока не раскупили.
Если с трудоустройством по специальности в СССР и было легче, то не для всех специальностей и еще благодаря распределению, которое в России отменили. А не из-за того, что в СССР готовили супер-специалистов, а сейчас готовят «быдлокодеров». Наоборот, сейчас уровень преподавания конкретно программирования (computer science) намного выше.
Если обучение платное, как в США, то люди еще и имеют четкое представление о том, зачем они пришли в ВУЗ и почему именно на эту специальность, а не на другую. По мере обучения они не только знакомятся с теми, с кем видимо будут работать в одной области и возможно даже с кем-то в одной компании, но и устанавливают первые контакты с профессионалами в компаниях или же постепенно интегрируются в академическую среду, если выбирают для себя путь остаться в чистой науке. Изучают то, что находится на переднем крае науки и техники и более того — сами начинают принимать участие в создании технологий будущего. В том числе работают над известными open source проектами на гранты корпораций и фондов.
А советские ВУЗы могут гордиться своей фундаментальной математической программой, оторванной от реальности и еще тем фактом, что большинство их выпускников не работает по той специальности, по которой они получили диплом, а многие учатся там вообще для получения отмазки от армии, «ради корочки», потому, что туда пошли друзья/подруги, чтобы найти жениха/потому, что там много клевых диффченок и т.п.
Вам же не приходит в голову идея о том, что врачей нужно учить математике в течение 5 лет, параллельно на втором плане читая им кое-что из медицины. Типа пусть университет даст им фундаментальное математическое образование и разовьет мозг, а медицине-то они как-нибудь сами потом научатся, на работе. Благо по сравнению с математикой это вообще не наука, а так, практический навык. Да и вообще, зачем им ВУЗ? Могут пойти в техникум или на платные курсы и там подучиться…
Вы убеждены, что математику нельзя понять, если она читается в ограниченном объеме «по верхам», ей нужно учиться именно 5 лет фундаментальным образом. При этом Вы считаете, что программирование можно освоить в техникуме. Так ведь и математике можно пойти учиться в техникуме, вот только какой результат-то будет?
Ваше отношение к программированию как к вторичному предмету или одному из частных разделов математики — заблуждение. Программирование сейчас настолько необъятная область, что ее изучению можно посвятить всю жизнь, особенно если вдаваться глубоко в каждое из направлений (и затрагивать смежные области, связывая задачи программирования с той же математикой, например).
Так что пусть кафедры математических факультетов готовят специалистов в таких областях программирования, где не обойтись без высшей математики. Но в университетах должно быть представлено и программирование как таковое, читаемое как основная дисциплина и сопровождаемое изучением основ математики. Знаний математики в объеме первого курса советского университета предостаточно, плюс можно дополнительно прочитать курс лекций по булевой алгебре, полям Галуа, БПФ/вейвлетам и комбинаторике (может еще что-то забыл, но не суть). Причем в первую очередь практический курс, а не глубокую теорию с доказательствами всех теорем от нуля. Весь фундаментальный курс математики из университета БОЛЬШИНСТВУ программистов не нужен. Не «быдлокодерам» он не нужен, а в том числе и будущим ведущим специалистам знаменитых фирм не нужно столько математики.
Если же ничего не менять в преподавании программирования, то так и будут приходить устраиваться на работу в программистские компании люди с высшим образованием и красными дипломами, которые прекрасно берут интегралы и даже знают, что такое гомотопическая эквивалентность, но зато не знают, как проинвертировать второй бит в числе и делают три ошибки в программе бинарного поиска в массиве.