Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
знание и понимание алгоритмов — это полезное качество
Разница между тем, хранится знание в сером веществе или в электронном виде где нибудь на сервере — только в скорости доступа
ну там просто все, на пальцах, за полчаса можно дойти— я верю что вы дойдете, а вот кодер — нет. Неужели не встречали таких? С другой стороны, обратный случай тоже нередок — перекачанный в теории индивид начинает через губу всех учить, хотя его код очевидно никуда не годится.
Само по себе _программирование_, в смысле написания кода — это ремесло. Можно и не знать «как», «почему» и «зачем», но при этом писать действительно замечательный код. Более того, при этом можно даже учить других это делать :-) Но, без «как», «почему» и «зачем» кроме, собственно написания кода, в наше с вами области знаний ничего делать-то и нельзя. Хорошая «новость» для некоторых из вас, заключается в том, что в подавляющем большинстве случаев вы будете заниматься т.н. прикладными задачами, которые суть и есть «задачи по написанию кода». Т.к. они уже давно все решены, и все что будет требоваться от вас, это записать это решение на каком-то конкретном языке.
А нужно ли знать программисту алгоритмы?
Понимать что значит, что задача просто не решается и требуется перебор
требуется перебор (NP,
Как научиться понимать — посмотреть в таблицу известных алгоритмов с указанной стоимостью
По сути, да, нужно просто выучить список того, что уже открыто
Мало выучить список, неплохо бы еще понимать, что там зачем.
O(1) < O(log(N)) < O(N) < O(N*log(N)) < O(N^2) < O(N^3)… < O(a^N) < O(N!)
Разве формальное описание не обязательно понимать?
Да это тоже просто, каждый цикл обычно дает множитель N.
Поиск по упородоченным структурам (дереву, куче, отсортированному массиву) дает множитель log(N).
Все остальное можно узнать в описании либы.
Ахаха, лол, может тогда и вспомните какая функция связывает h и n?
O-нотация это смежные знания, они не делают программиста лучше или хуже.
Самого беглого знакомства достаточно.
Поиск по дереву — O(log n)
цепляетесь к несущественным мелочам, которые очевидны.
O(h) = O(log n) для почти всех упорядоченных деревьев.Только для сбалансированных. Для обычных упорядоченных ничего больше O(h) = O(n) гарантировать нельзя.
O(h) = O(log n) для почти всех упорядоченных деревьев.
Все что касается умения анализировать и формализировать задачи из реального мира
И все, человек уже может работать программистом.
Получить работу программистом, работать программистом, получать за это деньги, двигаться по карьерной лестнице
Ха, а ничего, что вы только что влезли в область работы аналитика?Если не влезать в область работы аналитика — то аналитики такого напридумывают…
Область работы аналитика является подмножеством области работы программиста.
Если вы делаете проект (хорошо, назовем его «проектик», а то некоторые начинают воротить нос, если слышат слово «проект» в отношении работы, которая делается командой меньше десяти человек и стоит меньше пары миллионов денег) в одиночку
вы будете собирать полные и непротиворечивые требования
Когда-то в былые времена только так мы и работали
Почему это не называется?
Проводя анализ, вы делаете работу аналитика.
Потому что без этого вы проект не выполните.
Значит, конкретно «вы» или пришли в эту профессию уже в 21 веке, или изначально попали в какой-то центр космических технологий.
А у нас в _этой стране_ в 1990-е годы такое только-только зарождалось, и было редким исключением, а не правилом профессиональной разработки.
Работа бухгалтера, как и доярки, для написания программы не требуется. А вот системный анализ требуется.
И человек на должности системного аналитика по своей профессии, в отличии от бухгалтера, тоже программист.
Потому что нельзя писать для заказчика программы, не собрав его требований и не вникнув в них. Если вы это не сделаете, заказчик её у вас не купит.
А у вас в профиле написан 1981-й год рождения. Вам было 19 лет, когда начался 21 век. Так что где-то вы врёте.
Полагаю, ни мне, ни кому-либо из других читателей форума факт вашей эмиграции не интересен.
Как только вы садитесь, и думаете, как написать программу, чтобы она соответствовала требованиям на входе, вы уже проводите системный анализ.
Часть работы программиста — анализ, разработка архитектуры, написание кода, тестирование, т.е. все те работы, которые выполняют сотрудники с квалификацией программиста.
Только какое отношение это имеет к вопросу?
Вас сразу после школы куда взяли сыном полка, в Oracle или Microsoft?
Ну так вы не в эмиграции были, а где-то в СНГ? И в 90-е годы? И в 19 лет? И у вас на предприятии использовалась полноценная современная методика разработки? Ну пусть не совсем современная, пусть не эджайл, но хотя бы водопадец?
Я же говорю, врёте
Так вот, системный анализ это еще и часть процесса проектирования
Ему нужна квалификация программиста для рисования картинок?
Нужна, естественно, хотя бы на базовом уровне.
Абсолютно верно, для сбора требований нужны скиллы коммуникаций, и не нужны скиллы знания Java
Моделирование, аналитика — это та самая смежная часть
An effective analyst can think at multiple levels of abstraction. Sometimes you must drill down from high-level information into details. In other situations, you’ll need to generalize from a specific need that one user described to a set of requirements that will satisfy many members of a user class. Critically evaluate the information gathered from multiple sources to reconcile conflicts, separate user “wants” from the underlying true needs, and distinguish solution ideas from requirements.
Tools ranging from the venerable flowchart through structured analysis models (data flow diagram, entity-relationship diagram, and the like) to contemporary Unified Modeling Language (UML) notations should be
part of every analyst’s repertoire. Some will be useful when communicating with users, others when communicating with developers. The analyst will need to educate other stakeholders on the value of using these techniques and how to read them.
Здесь речь идет о том, что не стоит пересаживать на сбор требований человека из разработки.
А теперь вы лучше скажите, если вам в команду понадобится молодой аналитик с целью «выучить и получить отдачу», где вы его будете брать? Какого он будет профессионального профиля, из какого учебного заведения?
Разработчик-кодер — это также дальнейшая специализация программиста.
А пришло в программирование это все от того, что большинство computer science-ученых довольно посредственные математики, адекватного инструмента придумано не было, взяли то что учили в университете на первом курсе без особого понимания.
А вы знаете какие-то известные теоремы доказанные Кнутом?
Да, сейчас многие хотят эту дыру заткнуть какими-то комбинаторными понятиями, амортизационный анализ из той же оперы, но там где начинается комбинаторика, там заканчивается наука.
Для практики же полезен бенчмарк, где учитываются статистика данных, реальное количество данных и т.д. Асимптотика вообще может не отражать реальное положение дел.
select count(*) from geo_table where ST_DWithin(geo_point, ST_Point(user_lng, user_lat)::GEOGRAPHY, 25000)
rtree-либой пользоваться намного проще
Расскажите случаи, когда вам действительно очень помогло знание алгоритмов
Или, например, нежелание понимать область коллеги по работе — «не, я узкий специалист». Университет (ну или то что вы причисляете к науке) от этого отучивает.Проводил собеседование десятков вчерашних студентов ведущих вузов. К сожалению универ не отучивает от такой модели. Непонятно за счет чего он должен отучивать.
На период работы, предшествующий переезду (время оформления документов для переезда в США) зарплата — 80,000-120,000 рублей в месяц. Начальная зарплата после переезда в США — $85,000 в год
К сожалению, или к счастью, меня больше интересует мнение работодателей и их бизнеса
которую для простоты называют «программист»
кому (или для чего) должен знать алгоритмы человек, который называет себя программистом
Интересно знать, кому (или для чего) должен знать алгоритмы человек, который называет себя программистом?И как же должен называться специалист, от которого требуется имитация отжига; Монте-Карло… далее по списку? Вы уже установили, что это не программист. Тогда кто же?
Никогда не понимал зачем задавать вопрос, если ответ тебя всё равно не интересует.
Повторюсь, в России для того, чтобы быть программистом, надо удовлетворять требованиям профессионального стандарта. А там как раз перечислены требования.
Умения: Применять стандартные алгоритмы в соответствующих областях
Знания: Алгоритмы решения типовых задач, области и способы их применения
Если у меня будут технологии Intel — инвесторы в очередь выстроятся, чтобы хоть немного приобщиться к подобной бизнес-бомбе.бугага. Прости, реально смешно. Нахапать деньги инвестора и зарабатывать — разные вещи. От слова вообще.
Не подскажите, как злоумышленник может ЗАШИФРОВАТЬ данные моим ключом? Если его у него нет.
private static License Decrypt(byte[] array)
{
License lic;
if (sExponent == 0)
{
GetKeys();
}
try
{
//расшифровка
BigInteger encrLic = new BigInteger(array);
BigInteger decrLic = BigInteger.ModPow(encrLic, sExponent, sModulus);
byte[] decr = decrLic.ToByteArray();
//десериализация
MemoryStream config = new MemoryStream(decr);
BinaryFormatter serial = new BinaryFormatter();
lic = (License)serial.Deserialize(config);
} catch(Exception e)
{
Log.AddLog(e.ToString());
return null;
}
return lic;
}
RSAEncrKey
в качестве открытой экспоненты лежит то, что в закрытом ключе лежит в поле D
(закрытой экспоненты), а экспонента используется стандартная (0x010001
, в base64 — AQAB
). Т. е. всё вывернуто.e
вместо d
и наоборот в теории можно, но e
не должно быть легкоугадываемым (или тем более известным, как в данном случае). Ну и dP
, dQ
, invQ
должны строится против нового d
, а не оставаться построенными на основе старого d
.В-третьих, у меня нет доступа к серверу лицензии и заказчик не хочет его давать. [...] Ну а так, да, я совершаю типичную операцию цифровой подписи
Просто, криво реализованную Майкрософтом.
Эти два тезиса противоречат друг другу. Вы не можете совершать операцию цифровой подписи, ее — или не ее — совершает сервер.
Так как я научил клиент расшифровывать данные без открытого ключа(на самом деле, я изначально напутал с терминологией, назвав открытым ключом шифрующий, а открытый — это не шифрующий, это тот, который можно передать открыто), то я гордо сказал, что совершаю операцию цифровой подписи…
Так как обычно данные превышают размер ключа, то, для увеличения быстродействия алгоритма проверки цифровой подписи, сами данные передаются открыто, а шифруется только хэш этих данных.
подпись считается от хэша, а не от данных, потому что так эффективнее с точки зрения вычислений
В цифровой подписи всегда есть два экземпляра данных — те, которые подписаны, и сама подпись. У вас так же?
Нет, у меня только данные.
Потому что, если он не был сгенерен без использования закрытого ключа, я не смогу его расшифровать в 32 байта, один из которых — контрольный.
Аналогично: студент-химик переливает реактивы в пробирках, хотя на производстве никто ничего переливать не будет; студент-токарь вытачивает детали на станке, которые никогда в жизни больше вытачивать не будет; пианист играет гаммы и этюды, которые никогда больше не сыграет, и так везде.
пианист играет гаммы и этюды, которые никогда больше не сыграет,
А нужно ли знать программисту алгоритмы?