• Почему умножение работает быстрее деления?

    bingo347
    @bingo347
    Crazy on performance...
    По сути процессор умеет работать только с битами
    С целыми числами все выглядит давольно просто:
    1й бит числа определяет знак числа - 0 для положительных и 1 для отрицательных
    У нас есть операции для управления битами:
    • ~ инверсия
    • & конъюнкция
    • | дизъюнкция
    • >> сдвиг вправо
    • << сдвиг влево

    введем арифметические операции по порядку:
    1. Сложение, сводится по сути к сложению битов в столбик
    2. Отрицание или смена знака, -a выражается как ~a + 1
    3. Вычитание a - b выражается через a + -b
    4. Умножение, тут несколько вариантов, зависит от компилятора и его оптимизатора:
      1. Умножение на степени 2 можно представить сдвигом влево: a * 8 приводится к a << 3 т.к. 8 - это 3я степень 2
      2. Простые случаи вроде a * 3 можно заменить на a + a + a
      3. Случаи по сложнее a * 11 складывать a 11 раз само с собой не оптимально
        раскладываем 11 на степени 2: 11 = 8 + 2 + 1
        вычисляем (a << 3) + (a << 1) + a



    С вещественными числами все обстоит сложнее, они тоже представлены в виде битов, но часть битов отводится под целую часть, а часть под мантиссу
    По сути число хранится в экспоненциальной форме, где мантисса представляет степень 2, на которую нужно умножить целую часть
    Операции над вещественными числами с ненулевой мантиссой более затратны по количеству тактов процессора
    Здесь нам понадобятся такие вещи как экспонента и натуральный логарифм, которые можно вычислить в виде суммы ряда, так же через суммы ряда вычисляются многие другие математические функции
    Имея экспоненту и логарифм можно выразить степенную функцию
    Деление же можно представить через умножение и степени

    Вот такая вот высшая математика над двоичными числами происходит "за кадром" наших с виду простых программ :)
    Ответ написан
    Комментировать
  • Почему умножение работает быстрее деления?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    насчет "лучше умножать на 0,5" хз, потому что плавающая точка, но, наверно да

    а так все просто:
    современный комп, и комп 20 лет назад, и комп 30 лет назад - это обычный транзистор
    (когда изобретут фотонный проц - будет не обычный, хотя..)

    а обычный транзистор имеет всего два состояния: 0 (нет напряжения) и 1 (идет ток)

    и умеет транзистор этими двумя состояниями всего два действия:
    первое: сложение (0+1 = 1, 0+0=0, 1+1 = 01 и т.п.)
    второе: смена знака (честно - уже не помню как там куда идет ток в этом случае)

    все. больше ничего комп не умеет.

    потому арифметика реализуется примерно так:
    сложение: первое число СЛОЖ второе число
    вычитание: первое число СМЕНЗНАК второе число СЛОЖ первое число
    умножение: много раз СЛОЖ и занесение в стек, что тоже СЛОЖ
    деление: многораз СЛОЖ и зансение в стек + чуть меньше раз СМЕНЗНАК и снова в стек

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

    отсюда же растут ноги у точности плавающей точки - СЛОЖ и СМЕНЗНАК тоже нужно сделать кучу раз в зависимости от точности
    Ответ написан
    3 комментария
  • Книга для ПРОДЛЖЕНИЯ изучения Pascal?

    @viktorokh96
    Student, programmer
    Если вы ещё не читали "Песни о Паскале" , то просто люто рекомендую! Ни разу не пожалел что начал именно с этой книги. В качестве логического продолжения - Фаронов Turbo Pascal, желательно что бы потолще книжка была. В такой вы найдёте описание ООП библиотеки TurboVision, которая очень хороша для обучения азам ООП проектирования
    Ответ написан
    Комментировать
  • Как не распыляясь дотащить до front-end мидл девелопера?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    1.
    так и продвижение по карьерной лестнице

    Воспользуйтесь "профайлером". Другими словами Вашим руководителем. Всегда держите руку на пульсе. Если у Вас принято брать задачи из баг-трекера, то можно в довесок договориться с руководителем о следующей практике:
    "Прошу Вас еженедельно говорить мне одну штуку из числа прошедших за неделю из-за которой Вы бы уволили меня и еще одну штуку из числа прошедших за неделю за которую Вы бы выписали премию". Ответы записывать, отсматривать после каждой новой обратной связи от руководителя и вы будете в тренде, что надо по факту, что нахрен не надо делать! При этом будете в курсе: нужны ли коллективу или вот вот пинут? То есть всегда будете знать насколько Вы реально нужны.

    2.
    Имея факты на руках о реальной необходимости команде и того что ожидает руководитель и тех задачах в багтрекере можно поставить другой вопрос команде: "Какую боль чаще всего испытываем, но все как-то руки не дойдут?" и решая его будете нужны команде

    1 и 2 дают знания и карьеру
    Ответ написан
    Комментировать
  • Учить или придет с практикой?

    @alexdora
    Топ-менеджер
    Мой ответ: Нужна безусловно практика, но развиваться - значительно важнее.
    Теперь немного теории.
    Основная проблема современного образование - отсутствие объяснения зачем учить то или это, а также как быстрее учить. Знаете, мне папа в детстве объяснял - "математика нужна не для того, чтобы ты умел считать, а для того чтобы развивать мозги. Сейчас тебе сложно решить простое линейное уравнение, но в 11 классе ты их будешь считать в уме." Я запомнил это на всю жизни и мне это не раз помогало в жизни. Это из раздела аутотренинга. Что я получу, если сделаю это!
    Ну, :
    1. Порядок на столе, порядок в голове
    Многие не сядут что-то делать, пока кругом кавардак. Заставить себя убрать проще, если знаешь для чего. > создание мотивации
    2. Память.
    Память ассоциативна. Чтобы начать запоминать, требуется усваивать много информации. Зная что война закончилась в 1945 и что день космонавтики 12 апреля, можно легко запомнить что 12 апреля 1945 года умер 32 президент США Франклин Рузвельт. Чем больше зацепок в памяти, тем больше можно развить память увеличивая объем потребляемой информации за единицу времени.
    И обратная сторона, как раз ваша обучение "метрологии". Найдите с чем можно это все завязать. Уча что-то близкое и интересное вам, случайно выучить "метрологию".
    Это вам не интересно что-то учить. А можно дойти до небывалых высот, и нелюбимые предметы или какой-нибудь мусор который нужно запомнить будет отнимать вместо 8-10 часов, 20 минут времени. Пример: Сами подумайте, вот сидите вы и смотрите на 2 тома война и мир. И вам жизненно необходимо их прочитать, ну, к примеру баба сказала: не дам, пока не прочитаешь ;)
    Что легче сидеть и пытаться себя заставить прочитать это предполагая, что это займет чуть больше чем дохрена времени. Или имея в арсенале умение читать быстро, оценить...что на два тома у вас уйдет 2-3 часа.

    Стоит добавить!
    Не интересность предметов, является так же проблемой преподавателей. Они не интересно рассказывают и не умеют заинтересовывать учеников. Не все. Но большинство.
    Ответ написан
    Комментировать
  • Программа самостоятельного изучения c#?

    xztau
    @xztau
    Я
    C# это язык, который вы знаете (ну или за выходные освоить не проблема, зная С++). А вот технологии...........
    Как программировать на C# от O'Reilly на 3-4 месяца, затем Троелсен Язык программирования C#5.0 и платформа .NET 4.5 на 5-6 месяцев (особое внимание уделяем ADO net Linq и иже с ними.).
    Далее
    try (устроиться на работу, var tech = применяемые технологии на предприятии){
    работаем на предприятии добивая tech
    }
    catch(не знаю tech){
    учим tech
    }
    Ответ написан
    2 комментария
  • Программа самостоятельного изучения c#?

    newross
    @newross
    Product owner
    1. Освоить синтаксис и ознакомится с основными конструкциями языка.
    2. Писать много кода, собирать грабли.
    3. Прочитать Рихтера CLR via C#, понять как обходить собранные грабли.
    4. Писать еще больше кода и периодически заглядывать на Stackoverflow.
    Ответ написан
    1 комментарий
  • Домашняя сеть (IP TV, PC, notebook и ещё 2-3 гаджета) миф или реальность?

    oldbro
    @oldbro
    Отбросив торренты, все будет работать (у меня во всяком случае так) без особых трудов по конфигурации. Конечно, если мы обсуждаем домашнее использование. Но лучше старого доброго провода, в соотношении цена/качество, пока ничего не придумали. Если позволяет бюджет купите отдельную точку доступа для TV, настроите на разных каналах. Тем не менее, не ждите от iptv такой же динамики, как по проводу.
    А торренты и по кабелю займут всю возможную ШПП от прова, если в торентокачалке не ограничите.
    И мое личное мнение, если есть возможность IPTV подключить по проводу, подключайте по проводу. Я в итоге так и сделал.
    Ответ написан
    Комментировать
  • С чего начать изучение Linux?

    @maddimons
    Инженер связи
    Вряд ли кто оценит мой ответ, но тем не менее.
    Евгений, меня несколько лет назад то же мучил такой вопрос. Я тоже делал малые вещи сугубо по мануалам.
    Вы изучаете инструмент? Вы изучаете перфоратор или пылесос? Нет, вы идете от задачи. Если нужно пропылесосить, вы берете пылесос. Нужно сделать отверстие в бетонной стене? Вы берете перфоратор и особым образом его используете.
    Изучение любого софта должно быть по такому же принципу. Начните с задачи. Зачем вам Линукс, что вы от него хотите?
    Мое изучение началось с требование- изучить Астериск. А Астериск неотрывен от Линукса. Ну и понеслось.

    Начните с задачи и далее все пойдет быстро и сами не заметите, как станете профи.
    Ответ написан
    Комментировать
  • Поиск решения задачи, не похожей на предыдущие. Есть ли идеальный алгоритм?

    trevoga_su
    @trevoga_su
    может просто надо нормальное ТЗ ставить? вот люди и тупят, не понимая что в итоге от них хотите получить.
    Ответ написан
    Комментировать
  • Поиск решения задачи, не похожей на предыдущие. Есть ли идеальный алгоритм?

    @kstyle
    Надо учить включать мозги без шпаргалок (похожая задача фактически содержит в себе подсказку). А вы предлагаете создать идеальную шпаргалку вместо того, чтобы искать идеальную методику обучению, гарантирующую включение мозгов через полгода. Заменить работу учителя на инструкцию не получится.
    Ответ написан
    Комментировать
  • Поиск решения задачи, не похожей на предыдущие. Есть ли идеальный алгоритм?

    Foolleren
    @Foolleren
    Компас есть, копать не люблю...
    Давайте поразмышляем в отрыве от программирования.
    1) чтобы человек делал что-то его надо заставить, неважно чем и как, голодом, квартплатой, желанием выпендриться(психологи называют это самореализацией) или надраться вечером в пятницу
    2) чтобы человек делал это качественно ему должно это нравиться, вот второй пункт самый проблемный если человеку не нравится то чем он занят он думает над этим только в процессе работы над этим,( а то и совсем не думает), естественно это вызывает ступор в нестандартной ситуации когда надо включить весь мозг в работу, а не думать о своём, а руки что-то там клепают

    но давайте я вам расскажу как я решаю свои задачи которые мне приходится решать даже если они мне не нравятся
    1) надо определиться с тем что должно быть на выходе ( если я не понимаю что я должен получить я не могу этого сделать) по этому, чем точнее описание результата работы, тем она будет быстрее и качественнее выполнена.
    2)Надо определиться с тем что на входе( инструменты и материалы- в случае программирования данные)
    2,1)Вуаля! мы уже имеем чёрный ящик. У нас есть вход и выход, но нет наполнения.
    2,2)Проще всего когда это типовая задача - всё решено до нас и не один раз - можно загуглить, а иногда даже и скопипастить.-> конец
    3)После некоторого времени вопрашаний гугла выясняется что задача не такая и простая. Вот тут начинается самое весёлое - процесс творчества который сложно описать, но я попробую.
    3.1)Для начала, раз уж не получилось сразу заполнить наш чёрный ящик одной фигурой, разбиваем его на два поменьше, в результате мы имеем уже два чёрных ящика с неизвестным входом и известным выходом и на оборот.
    3.2)Пытаемся их состыковать поисками аналогичных решений в голове или интернэтах, ну... грубо говоря может кто-то уже делал что либо подобное, но с другими материалами или инструментами, и что можно сделать с имеющимися инструментами и материалами. (копать можно с любого конца или с двух сразу) находим кучу чёрных ящиков.
    4)Проверяем как стыкуются наши наборы чёрных ящиков поменьше, сошлось?-> конец,
    4,1)не складываются? Берём наиболее подходящий набор чёрных ящиков смотрим их содержимое
    4,2)находим причину нестыковки , пытаемся убрать лишнее или ищём ещё один чёрный ящик который позволит первые два достыковать, переходим к пункту 4

    резюмируя
    Нужна прежде всего мотивация надо заинтересовать человека, показать ему такой путь в котором его качественная работа это хорошее средство достижения его цели, если это получится он сам всё начнёт делать. Дальше ему понадобится только подсказывать направление, что бы он не сильно сбивался с курса.
    Ответ написан
    Комментировать
  • Тенденция к перехвату проектов/клиентов сотрудниками с последующим увольнением. Что делать?

    Регулярно сталкиваемся с этим явлением, радует что если с тебя копируют и перехватывают твои проекты, значит ты впереди. Проект закончится, а опыт не приходит так быстро, и собственные шишки. А для нас это повод стать лучше, придумывать куда идти лучше и чем ещё можно от таких фирм отличаться. Преимущество в том что вызнаете своего конкурента в лицо, вы сами его вырастили и знаете его плюсы и минусы. Некоторым клиентам можно это правильно преподнести. Не стоит расстраивается, это естественный процесс, когда специалист начинает мнить себя собственником и не видя всей работы, считает чем он хуже и почему он не может делать тоже самое, работая на себя. Можно только пожелать успехов новоиспеченному предпринимателю , и бессонных ночей. Наоборот, хорошо что такие люди отваливаются из команды быстрее, освобождая место для людей, которым можно будет доверять, и которые проверят себя временем!)
    Ответ написан
    Комментировать
  • Что должен знать junior С#?

    IamKarlson
    @IamKarlson
    ASP(?).NET, SQL-разработчик
    Джун должен точно знать что не все в работе программиста - это программирование. Если вы можете легко и связно изъяснятся, понимаете цикл разработки (описание-согласование,разработка, тестирование, интеграция) приложения и умеете читать(!! дада, многое что нужно действительно прочитать и сделать именно так), то у вас уже есть 50% успеха.
    По программированию, то что вы можете прям быстро-быстро освоить:
    asp.net webforms + EF5+jquery
    WebForms -действительно очень старая технология на данный момент, все просто фанатеют и бегают как угорелые за ASP.NET MVC. Но въехать сразу что куда там и как, джуну будет сложно (некоторые мидлы тяжко переваривают, хотя как по мне так все просто там, не зря ж модели основанные на MVC самые распространненные в мире : MVC, MVVM, MVP, MVT).
    С EF особо не извращайтесь (например с полной моделью дб). Возьми(те?) EF6 + code first, например, "хау ту" из гугла, и пройдитесь по мануалу. Создав приложение например, которое создает-отображает-модифицирует-удаляет записи из бд, открывайте Management Studio и смотрите что у вас получилось в бд. Напишите запросы на выборку данных соединенных из двух таблиц
    Если после проведенных действий вы уже можете написать запросы INSERT, SELECT, UPDATE, DELETE, то уже хорошо, никто не будет от вас ждать глубоких знаний SQL, но и теряться при виде хоть мало мальски сложно запроса нельзя. Плюс как сказал Станислав Макаров, нужно знать что такое транзакции и с чем их есть.
    У вас уже не должно вызывать ужас в глазах, приложение которое может это все делать и вы ориентируетесь в его коде. По asp.net'у научились использовать n-ое количество контролов: открываете список всех webforms контролов и прям по списку берете каждый и используете. Если вы будете представлять что есть такие-то и такие-то контролы, то вам будет легче не городить адовые конструкции из таблиц и всяких повторителей.
    По самому .NET: один из самых популярных вопросов "что появилось в .net версии %version%?" Поэтому чтобы не потерятся при ответе на такой вопрос, гуглите примерно так
    • Что появилось в .NET 2.0
    • Что появилось в .NET 3.0
    • Что появилось в .NET 4.0
    • Что появилось в .NET 4.5


    Еще очень популярная технология для шарпистов - это WCF. Если скилла написать простенький сервис не хватит, то хотя бы почитайте что это такое и с чем его едят.

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

    Ну и плюс все что выше описали, достаточно хорошие советы. Походите по ссылкам, почитайте статьи, посмотрите курсы. И самое главное если вы еще не начали, то начинайте учить английский. Грамматика в первую очередь. Банально составлять предложения это ОЧЕНЬ ВАЖНО. Вас никто не поймет если вы будете писать по-русски английскими словами, а вы будете если не возьметесь за грамматику сразу, наравне с программированием.
    Ответ написан
    4 комментария
  • Как одному успевать учиться в университете, делать домашнюю работу, готовить, стирать, убирать, в свободное время пилить свой проект и не повеситься?

    copist
    @copist
    Empower people to give
    Лёгких путей ищете?
    Выкинь верёвки, провода, шнурки, ремни и другие штуки, на которых можно повеситься.
    Ответ написан
    Комментировать
  • Как одному успевать учиться в университете, делать домашнюю работу, готовить, стирать, убирать, в свободное время пилить свой проект и не повеситься?

    platotel
    @platotel
    IT Product Manager
    1) Минимизировать. Понять, что если времени очень мало, то нужно отбросить ВСЁ лишнее и оставить самый минимум. Этот минимум - для каждого индивидуален. Главное - понять, что нужно именно ВАМ, а не тем, с кем вместе живёте (подозреваю, что вместе с родителями). Наверняка останется такой список: регулярная нормальная еда, чистая одежда, минимальная чистота вокруг (достигаемая уборкой раз в неделю). Какие-то дела можно делегировать (в обмен на деньги или на какую-то помощь). С едой лучше не рисковать. Или самому нормально готовить, или питаться в столовых/кафе. Не обязательно много времени готовить еду, чтоб хорошо есть. Мясо/рыбу можно очень просто и быстро готовить в духовке/сварить, каши/гарниры из крупы быстро варятся, если их перед сном залить горячей водой. Варёные яйца - и сытные, и быстро готовятся, и полезные. Вместо нарезки салатов можно мыть и есть сырые овощи/фрукты. Да и вообще - чем проще еда готовится, тем она, как правило, здоровее. И отличная еда - молочная продукция. Сыр, творог, кефир и т. д. И готовить не надо, и сытно, и полезно (в отличие от быстрых углеводов). Упрощение стирки - использование стиральной машинки (своей/у знакомых). Упростить уборку можно при помощи пылесоса. Рекомендую "сложные дела" делать в один из выходных - уборка, приготовление мяса/рыбы, - а остальное (закупка продуктов, приготовление гарниров, стирка) делать или с утра, или вечером.
    2) Зависит от целей. Предположу, что цель - продвижение проекта. Не обязательно для продвижения нужно искать связи в университете. Если предполагается, что связи нужны, чтобы выйти на инвесторов, то скорее предложу подумать, как обойтись без привлечения денег. Лучше тратить энергию на упаковку идеи, развитие продукта, продумывание маркетинговой стратегии, выхода на рынок, на поиск команды единомышленников.
    3) Прочитайте книгу "Заразительный". Очень хорошо написана. Даны 6 принципов, о которых нужно помнить, рассчитывая на вирусное распространение продукта. Больше подойдёт для В2С продуктов. Для общего понимания того, как развивать стартап, стоит почитать "Бережливый стартап". Даёт понимание того, что для стартапа самое важное - быстро проходить цикл цикл "создать-оценить-научиться".
    Ответ написан
    Комментировать
  • Как одному успевать учиться в университете, делать домашнюю работу, готовить, стирать, убирать, в свободное время пилить свой проект и не повеситься?

    gospodinmir
    @gospodinmir
    Security analyst
    Найди себе единомышленников. Производительность команды, как правило, выше одиночки-энтузиаста.
    Ответ написан
    Комментировать
  • Как одному успевать учиться в университете, делать домашнюю работу, готовить, стирать, убирать, в свободное время пилить свой проект и не повеситься?

    alexclear
    @alexclear
    A cat
    1) Расставить приоритеты таким образом, чтобы менее важные с Вашей точки зрения дела всегда выполнялись после более важных. Минусы такого подхода: до домашних дел вообще могут руки никогда и не дойти. Плюсы такого подхода: Вы будете заниматься тем, что действительно важно.
    2) Вместо налаживания связей в университете налаживайте связи в мире. Постоянно практикуйтесь в использовании английского языка, ходите на митапы, ездите на конференции, общайтесь с коллегами в IRC и других чатах, ведите блог, читайте блоги других специалистов.
    3) Это интернет, здесь всем можно предложить Ваш проект. Определите аудиторию, которой Ваш проект может быть интересен. Найдите, где место скопления этих людей (реальное или виртуальное) и придите туда. Хорошо продумайте подачу Вашего проекта, люди не любят спам.
    Ответ написан
    Комментировать