Ответы пользователя по тегу Программирование
  • Что лучше изучать: математику или программирование?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Зачем я постоянно отвечаю на такие вопросы?

    Учись, учись и ещё раз учись. Я вот тоже где-то в твоём возрасте захотел осилить ИБ, даже профильный бакалавриат отучился, да вот... Не то это всё, ну не то. Но есть и плюсы, на данный момент очень много нерешённых проблем, которые решать как-то всё таки надо, да и подходов даже к их решению качественно не сложилось, другое дело физика - с ней всё проще, видишь, записываешь, выводишь модель, подтверждаешь, повторить. В ИБ всё сложнее, тут какие-то машины Тьюринга, теоремы ВЫП, 3-ВЫП и прочая ересь, да, в этом есть своя красота и логика, но уж чего точно здесь не встретить - так это простоты.

    К вопросу о математике, она простая. Самое сложное и контр-интуитивное что тебе потребуется в ИБ - так это теория вероятностей. Вот простейшая задачка: есть 8 шкатулок, с вероятностью 50% в одну из них положили рубль, потом открыли 7 шкатулок подряд и рубля в ней не нашли. С какой вероятностью в последней, восьмой шкатулке окажется рубль? Это очень простая, в некотором смысле даже классическая задача в теории вероятностей, охватывающая базовые вещи, решать её имеет смысл именно что в лоб, без использования всяких ухищрений. Это не сложно, там одна формула, но понять её на качественном уровне не так-то просто, но любое помехоустойчивое (WiFi) и энтропийное (7zip) кодирования эксплуатирует эти идеи во всей своей красе. Рекуррентные выражения, вычеты, поля и операции над его элементами, да щепотка комбинаторики, в общем-то большего и не требуется. Очень логичная, с ограниченным набором правил.

    Из литературы читаем Кормена (и решаем задачки в нём) и конкретную математику Кнута. Его искусство на любителя. Начать лучше с конкретной, если не понравится - то нечего и соваться.

    Алсо. Отдельная история со скрипт кидди. Лично по мне это должна быть чрезвычайно низкооплачиваемая должность ибо по сути от бабушки, умеющей включать ПК, такой ремесленник мало чем отличается. Объём данных возрастает, ну да ладно. Немного сложнее быть аналитиком, тут потребуется не просто ПК включать, но и отчёты писать, но в целом он не сильно дальше ушёл, а современное ПО нередко само отчёты составляет, только печатай и подпись ставь.

    UPD. Немного системы не помешает (искать очень просто, выделяем ISBN, ПКМ, отправить в гугл, радуемся):
    1. Талмуд "от и до", очень помог в своё время и помогает иногда до сих пор. Алгоритмы. Построение и Анализ, Кормена, Лейзерсона и других. 978-5-8459-2016-4
    2. Высокоэффективная и чрезвычайно информативная, простая и сложная, интересная и потрясающая. Конкретная Математика. Кнут, Грэхэм, Паташкин 978-5-8459-1923-6
    3. Кибернетика? Преобразования фурье? Без паники! Цифровая Обработка Сигналов. Юкио Сато. 978-5-94120-251-5
    4. Что это? Манга? Про статистику? Да ну! Занимательная Статистика от Сина Такахаши. 978-5-94120-244-7
    Ответ написан
  • Как сделать одинаковую силу прыжка в unity?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    GetComponent<Rigidbody>().velocity += new Vector(0, jumpPower); // зависит от оси, по которой прыгаем


    Впрочем, при применении AddForce по сути происходит всё тоже самое, только делится на массу (второй закон Ньютона). Поэтому проблема скорее в бесконечных прыжках. Можно сделать небольшой тайм-аут на прыжок, чтобы ограничить скорость роста.
    Ответ написан
    2 комментария
  • Как объяснить девушке что такое "некрасивый" код?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Начни с того, что код - это чертёж. Всего лишь. И красивым может быть сам чертёж. Конечно, смотреть на ровно, прилежно, опрятно начерченное архитектурное решение приятнее, чем на сделанный на скорую руку на туалетной бумаге без инструментов левой ногой подобие чертежа. Но и за тем и другим кроется то самое архитектурное решение. И совсем другой вопрос элегантность, стройность и банальная работоспособность этого решения.
    Ответ написан
    2 комментария
  • С чего начать алгоритмическую торговлю?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Для начала спросите себя, действительно ли вы этого хотите? Во-первых, вероятность того, что кто-то даст торговать реальными деньгами на реальном рынке стремится к нулю. Окей гугл, форекс кухни. Во-вторых, какие-бы современные алгоритмы не были бы использованы, всё таки по-настоящему эффективных алгоритмов нет. Почему? Нет, серьёзно задали этот вопрос? А вы действительно всё ещё хотите в финансы? Ну ладно, банально потому, что достаточно (не идеально, а лишь достаточно) эффективный алгоритм лишил бы работы бОльшинство трейдеров. Как бы нам не хотелось верить в деньги из воздуха (хотя технически деньги и правда из воздуха, так как при изготовлении используется органические соединения, содержащие углерод как основной компонент, источник которого - атмосфера, углекислый газ точнее - фотосинтез; простите, не удержался)... В общем, как бы нам не хотелось верить в деньги из воздуха - спекуляции - зло, необходимое зло свободного рынка. По той простой причине, что роль санатора рынка они выполняют как нельзя плохо (рисковые вложения сегодня ну очень популярны), стабилизацией они тоже занимаются посредственно (благо агенства вроде Bloomberg строят рейтинги, ограждая крупных игроков, да да - игроков, рынка от излишне спекулятивных операций), ну а что до материальных благ, то и тут они ну совсем не создают; сродни голодным волкам, бросающимся на любой кусок мяса, даже тот, который их кормит. Но! Даже к этим голодным волкам вас не допустят - мало денег. Нет. Ну очень мало денег. Капля не в море, но в океане. Контракты на миллиарды и триллионы долларов заключаются еженедельно, ежедневно, ежечасно. С целью получить выгоду хотя бы в тысячу долларов. Единственный удел простого смертного - кухни, разной степени никчёмности. Выиграть тут можно, но знайте одно - владелец кухни всегда, всегда в плюсе. Те крохи, что останутся трейдерам поделят самые удачливые. А потому, что не дадут вам поиграть на адекватных плечах, ибо 1:20 - самый нереальный максимум, что может себе позволить опытный трейдер. Риск, штука которую можно рассчитать. Но выбирая плечо больше - есть неиллюзорная вероятность потерять ВСЕ вложения.

    Ну ладно, если всё ещё желаете попытать счастье здесь, то напомню. Алгоритма нет. Да не потому, что никто не делится. Если бы был алгоритм - это сразу бы заметили. Есть лишь жалкие попытки, тучи систем анализа данных, но серьёзные решения всегда принимает человек.
    Вообще, существует грубо три варианта работы алгоритма. Первый, кибернетический - анализ сигнала. Точнее - сигналов. Кибернетика - наука об обратных связях. То что в мире финансов они есть - абсолютно точно. В какой-то степени - самый результативный способ. Если смотреть по прошлому. Сколько-нибудь далёкое будущее предсказывать ну абсолютно не умеет.
    Второй, алгоритмический. Датамайнинг сложным конечным автоматом. Без построения систем диффиринциальных уравнений, а банальным множеством захардкоженных условных переходов. Можно точно сказать, таким пользуется абсолютное большинство.
    Ну и третий, нечёткие алгоритмы, генетика, нейронные сети. В общем и целом, самое перспективное направление. Суть - создать ИИ, или хотя бы его подобие. Проблемы две - сугубо философская "имеем ли мы право" и сугубо техническая "возможности". В остальном - флаг в руки. Однако стоит понимать, что ИИ здесь нужен тот, который будет не принимать решения, а рассчитывать риски. Решение может и решка принять. А вот подсчитывать риски - основная задача здесь - не умеет никто, даже человек считает их весьма и весьма грубо. Просто кто-то чуть более удачлив, ибо рассуждая об успешных трейдерах мы забываем упомянуть про миллионы погоревших его коллег. Не потому, что они тупые или не прозорливые, нет, просто потому, что им не повезло.
    Ответ написан
    21 комментарий
  • Как перехватить сигнал с видеокарты?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Ну и какой мы хотим сигнал перехватить? Экран? Для этого есть фрейм граберы. А можно подключить композит и отдельной платой собирать аналог. Да и цифровой HDMI пусть и передаёт цифру, таки физика всё равно остаётся - снимаем напряжение и дело в шляпе, разве только делать это придётся очень быстро, да ещё и ошибки корректировать. Из софта можно хукнуть directx или opengl, но там скорее всего не будет шейдеров - издержки конвейера, или же создать виртуальный монитор, но здесь сложности с аппаратным ускорением. Есть более специализированные методы, вроде отслеживания участка памяти или общение с видеокартой посредством одного из множества API. Но эти способы очень платформозависимые.
    Ответ написан
    9 комментариев
  • Как составить уравнение?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    print random.choice([i for i in xrange(25, 326, 25)])


    Я к тому, что кроме приведения (0, 1] к требуемому промежутку можно использовать более простые методы. Тем более, два рандома не айс, если они честные, то есть их мало или они медленные. В вашем языке программирования (вернее, в вашей библиотеке) скорее всего есть что-то подобное.
    Ответ написан
    Комментировать
  • Кнут - "Искусство программирования", как осилить?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Да как же это смешно... Звучит примерно так: имеется интерес освоить хирургию, да только я туп на анатомию и биологию, да и руки кривые, ещё и дрожат. Если не в ладах с математикой, то Кнут не поможет. И вообще, веб-программирование так же относиться к математике, как балет к кулинарии. Сидите смирно и не парьтесь на этот счёт, вероятность того, что Кнут вам чем-то поможет в работе исчезающе мала, тогда как навредить он может на раз-два: можно запросто поймать себя на создании велосипедов.

    Впрочем, варианты есть. Первое, что надо осознать - это дискретная математика. Начинается с арифметики, но вполне можно освоить её параллельно. Тут подойдёт что угодно, хоть учебник за первый-второй курс почти любой технической специальности. Алсо, у самого Кнута есть КонКретная математика. Вполне себе годная писанина, правда для того чтобы проще читалось таки надо иметь хотя бы базовые понятия из дискретной математики: поля с кольцами, да пару свойств. Глубоко копать не стоит. И если что, я предупреждал.

    Впрочем, вместо кнута рекомендую Кормена. Очень даже вещь в себе: её читают как на первом курсе, так и диссертации по ней пишут. И читается проще, и зубодробительной математики в ней нет.
    Ответ написан
    9 комментариев
  • Какие западные айти сайты полные профессионалов Вы знаете?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Серьёзно?
    Stackexachanges, reddit, a little more.
    Ответ написан
    Комментировать
  • Путь в быдлокодеры или как стать программистом с 0?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Тостер никогда не был тем =(

    Ну а по делу... Пробуйте! Нет, вот прямо сейчас открываем codeacademy, khanacademy или codecombat.
    Ответ написан
    Комментировать
  • Книги по математике для программистов?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Всё сложно.

    Если кратко: обязательно Кнут и Кормен, остальное по желанию. Первую надо иметь как набор настольных томиков, читать не обязательно =) Я серьёзно, одна из немногих книг, что просто лежа рядом на столе повышает интеллект на 10. Кормен, ну, он другой. Его надо вдумчиво читать и выполнять упражнения. Все. То есть желательно, можно выборочно, структура книги весьма и весьма это позволяет. Математики почти нет, зато есть именно алгоритмы и структуры. Собственно, то, что программисту и надо. Выполнение всех упражнений повышает интеллект на 100500, так что этот вариант явно предпочтительнее, однако банальное наличие этой книги интеллект не повысит =)

    Из чисто математических ресурсов очень рекомендую khan academy - нашикарнейший портал невыносимо крутых знаний. Но самое крутое, что я там пока вижу - это ответ на мой вопрос. Там всё очень упорядочено, от правила Бернулли — Лопиталя до закона Чебышева, от начал Аль-Хорезми, до проблем тысячелетия. В общем, очень круто, очень структурировано и очень... Просто очень. Хотя надо уточнить - он не чисто математический, у него есть чисто математический раздел.

    UPD.
    Dmitry напомнил мне про Кнута, Грэхема с Поташниковым. Мало того, что личности сами по себе довольно интересные, так ещё и книга поистине получилась замечательная. И хотя можно долго спорить о необходимости программисту иметь определённые познания в математике - лично я почувствовал определённое просвещение, прочитав эту книгу.
    Ответ написан
    2 комментария
  • Как реализовать систему эффектов (модификаторов) накладываемых на игрока?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Вообще, последующая реализация сильно зависит от текущей архитектуры. Лично я бы сделал что-то вроде такого (python рулит):

    class Modifiable:
    	base = {"strength": 10}
    	mod = {"strength*": 2, "strength+", -3}
    
    	def __init__(self, **kwargs):
    		pass
    
    
    class Hero(Modifiable):
    	def __init__(self, **kwargs):
    		pass
    		
    	@property
    	def strength(self):
    		return self.base["strength"] * self.mod["strength*"] + self.mod["strength+"]


    Суть примерно ясна, к тому же можно пойти дальше и запилить класс - ObjectProperty и ObjectModificator со всеми необходимыми методами, а потом аккурат умножать, вызывая перегруженный __mul__.
    Ответ написан
    Комментировать
  • Язык программирования под конкретную задачу + с нуля + хорошая база?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    На самом деле, можно выбрать JS или Python. В контексте Python'а поставленная первая задача решается на раз два, вот пару советов, которые могут помочь в дальнейшем (естественно, в контексте получения быстрого результата):
    + забейте на классы и красивый код, пишите как можно быстрее, итоговый вариант будет мерзким и ужасным, однако результат не заставит себя ждать
    + используйте мощь Python'а - генераторы, списки (и слайсы), лямбды и много-много сахара
    + начните с pygame: тут не будет красивых менюшек из коробки, однако, что важнее, будет достаточно удобный с точки зрения Python API, и рисование и звук.

    К слову, Python можно относительно легко компилировать в JS, а есть ещё и on-the-fly парсер на JS. Так что сделать web-версию не составит огромного труда.

    Окей, что до ресурсов, то codeacademy, coursera очень хорошие варианты. Ну и официальная документация тоже одна из лучших (по языкам).

    Единственная сложность, так это выбрать двойку или тройку. Советую тройку - с либами в основном всё хорошо, да и разница не настолько колоссальна (в основном это print стал настоящей функцией, когда был невесть чем). Да и забавно - python 2.x очень легко конвертируется в python 3.x подключением пары либ и парой импортов из __future__.

    Теперь о том, как это можно экстраполировать на остальные задачи. Матан совсем не обязательно и легко поднимается по требованию. Было бы не плохо быстро поднять технический английский (дабы понимать термины), хотя здесь проблем совсем не должно быть - сам технический IT-русский на 80% из английского. Программировать контроллеры на Python сложно, но можно. Понимать вэб и 1С-программистов не составит труда, так как в основном они и не программисты.

    Относительно JS могу сказать, что он и простой и сложный одновременно. Задумывался он максимально простым, и отчасти он таким получился. Однако уродцем он получился ещё тем. В этом видео очень интересно показано. И там ещё много таких тонких моментов. Хотя на самом деле, он действительно очень интересен и многое умеет. Да и разработка идёт полным ходом, а браузеры спешно имплементируют новшества.
    Ответ написан
    4 комментария
  • Фрактальное сжатие изображений?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Ну тут всё просто. Разбивая изображение на доменные и ранговые нам надо оставить как можно меньше, собственно, доменных. Современные алгоритмы выглядят примерно так - на изображений нет никаких блоков, берём два случайных блока и пытаемся выбрать из них ранговый. Получилось - круто. Нет - плохо. Это подойдёт для любых изображений, на каких-то специальных можно попытаться найти структуру и как-то исходить от неё. На самом деле, алгоритм может быть даже будет работать очень долго, останавливается он опять же по прихоти. Например, когда сжатие внезапно стало тысячекратным в общем-то можно и не продолжать.

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

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Да ладно, парни. Ну хватит уже, к чему такие сложности? Берём и читаем. Вообще совсем не обязательно читать про архитектуру и абстракции именно по своему языку, хотя javascript в этом плане родился уродом.

    Ок. Полиморфизм ни в коем случае нельзя рассматривать отдельно от других фундаментальных понятий - абстракция, инкапсуляция и наследование. Объект и подобные прилагаются из аксиом (хотя это-то тоже аксиомы).

    Собственно, представим себе рядом стакан, кружку, чайник, кофемашину, велосипед и скейт. Что между ними всеми общего? Ну как минимум то, что они есть. То есть это - объекты, которые были созданы. Но как они были созданы? Скорее всего на заводе производителя по чертежам. Ок, чертежём назовём конструктор. Ну а класс? А что это такое? А его нет в нашей вселенной - эта сущность есть абстракция, что живёт лишь в наших мыслях. В реальном мире её нет и никогда не будет, такова уж физика - ей по барабану, что птицы и млекопитающие имеют дальних родственников - она лишь обеспечивает возможность естесственного отбора. А уж родственников друг другу находим мы, люди.

    С объектами и классами разобрались, а что же там с нашими стаканами и велосипедами. Мы уже поняли, что всё это объект, то есть грубо можно все объекты наследовать от какого-нибудь суперпредка, суперкласса, что и реализовано в некоторых языках. Но что другого общего между скейтом и стаканом, например? Конечно, можно углубляться и считать, что они все из молекул, и они все из твёрдых веществ. Однако это всё бред и СПГС, так что ответ прост - да ничего. То есть это совершенно разные объекты с совершенно разным функционалом. Более того - естесственно компьютерные модели и иерархии будут сильно отличатся от физик и химий. И это нормально, вопрос об адекватностях моделей ставиться лишь когда модель неадекватна, а до тех пор пилить можно что угодно, лишь бы работало.

    Вот. У нас есть супер-предок Object, от которого дефолтно наследуются все объекты. Допустим, то что объекты состоят из атомов и есть то, что наследуют все объекты. Но все дополнения и правки - полиморфизм. Так, из атомов мы слепили колёса и приделали на доску - ок, это скейт. На него можно встать и катиться, а сильно извернувшись и полетать в трёх метрах над землёй, прямо таки излучая своё яркое эго. В то время как стакан - это мы слепили из атомов плотную ёмкость, из которой вода не выливается под действием силы тяжести. И прямое применение стакана - налив воды опрокинуть его над ртом, чтобы вода вытекла прямо в желудок. Так делают настоящие пацаны, не заботясь об икоте или страхе утонуть, так что вот - полиморфизм.

    Однако что с остальным? У нас ещё абстракция, инкапсуляция и наследование. Ок, начнём с наследования, так оно наиболее близко. Вот что у нас общего между стаканом и кружкой? Ну в оба можно налить воду, но у кружки есть ручка чтобы держаться. То есть можно придумать некий общий класс - ёмкость. Однако что это за класс? Можно например за этот класс взять стакан, тогда все ёмкости по дефолту стаканы, а всё остальное - видоизменённые стаканы. Но кому-то больше нравяться кувшины, например некоторые чики насят их на голове, считая что это удобно. Ну и пусть носят, но как-то же решить надо, что главнее и идеальнее. Так вот - недостяжимый идеал и есть главный - это называется абстрактный класс. То есть ёмкость, что невозможно создать, для которого нет полного чертежа. А все чертежи, что дополнили до полного - есть наследованные классы от класса ёмкость.

    Тут мы подошли к абстракции. Вот такое иерархическое наследование приводит нас к, возможно главной, идее ООП. Вот мы взяли и выделили всё, куда можно налить воду в отдельный класс, нарисовали общий чертёж, но специально не доделали его, оставив зазор для будущих творцов, и назвали чертёж - ёмкость. Тысячи лет изобретатили всех миров создают свои ёмкости, одна лучше другой. Для разных людей - по разному, конечно. Но каждый раз группировать молекулы стекла определённым образом - непростая задача. Поэтому ремесленники пошли на хитрость, они создали тайный совет ремесленников мира и решили делиться друг с другом своими наработками. То есть создавать мелкие чертежи и объявлять классом, например, извлистой ручки в форме ленты Мёбиуса, например. Возможно такая ручка удобно только инопланетным существам, но чертёж создан и к нему можно ссылаться при создании своего чертежа. Таким образом мы абстрагируемся от низкоуровневой задачи "формирования ёмкостей посредством перемещения молекул" к "конструированию ёмкости посредством совмещения деталей, элементов". Это и есть абстракция.

    Но мы подошли к последнему пункту - инкапсуляция. Она неразрывна с абстракцией, и по сути благодаря ей она и работает. Инкапсуляция - это своеборазный клей (или синяя изолента), которым склеивают разные чертежи в один. То есть совмещение деталей для создания своей - это и есть инкапсуляция. Причём при совмещении мы можем не описывать детали этого совмещения (то есть члены класса могут быть приватными), таким образом помогая абстрагироваться тем, кто этот чертёж использует. Вот посмотрим на чайник - что это такое? Это стакан (или кружка) к которому снизу (а может внутри по середине?) приклеен нагревательный элемент. Пустив по нему ток, согласно инкапсулированному в нагревательный элемент закону Ома, будет выделяться тепло и нагреваться вода. А кофемашина? Это куда более сложное устройство, с множеством насосов, ёмкостей, шлюзов, измельчителей и чайников. И всё склееное клеем. А может синей изолентой. Это снова инкапсуляция.

    Таким образом, абстракция невозможна без инкапсуляции и наследовании, как невозможен полиморфизм без, собственно, наследования. Ну а полиморфизм невозможен ещё и без инкапсуляции, которая банально бесполезна без наследования и полиморфизма. Вот такие тут треугольники с пирогами. Жаль только про пирог наврали. И про день рожденье.
    Ответ написан
    3 комментария
  • В каких сферах программирования активно используется математика?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    В общем и целом, вам всё тут расписали. Однако немного дополню своим скромным мнением:

    Основы арифметики и булевой логики нужны везде. Да что там основы - чем глубже тем лучше.

    Теперь матан. @newross прав - в кибернетике, та что обработкой сигналов занимается, там полно матана. Он, конечно, не адовый, но дифференцировать, интегрировать и раскладывать в фурье, а также строить корреляции и автокорреляции придётся много. Причём сигналы везде, вокруг - радиосигнал bluetooth, GSM, FM, звуковые, видео кодеки, изображения - всё это тоже сигналы. Дискретные или непрерывные. Ну и конечно прикладнуха - везде где требуется матан и автоматизация рассчётов - там полно работы для программиста-математика.

    Фуан вот используется намного реже. Он вообще редко используется где-либо, обычно это какая-то экзотика, где требуются серьёзные физические модели - всякое авиационном, космическое, гидро- моделирование. В общем, в основном прикладное программирование, то есть придётся не столько программировать, сколько разбираться в мат. части.

    Ещё кое-что про анализы - в силу конечности компьютерных ресурсов, имеют место быть постоянные переходы от гладкого и бесконечного к дискретному и конечному путём банальных ограничений, пределов, интегрирований и дроблений. Так что без дискретной математики делать нечего вообще в наукоёмких областях. А дискретка по сути и есть программирование. Какие-то её части прокрались во все области - от медиа до каналов передачи данных и их защиты. Хоть она и относительно простая, в ней огромные пробелы. И понятное дело до гомоморфизмов редко доходит, но вот всякие законы больших чисел используются на полную катушку. Ну, здесь вам и теории графов, и теории чисел, и комбинаторики, и логика. Да что там, алгебра то с её 2+2 - дискретная математика. В общем, как и сказал - по сути информатика и есть приложение к дискретке.

    Всё остальное используется ровно тогда, когда до этого доходит дело, разве только самые основы структур и пространств. Ну и из преобразований арифметика и анализ. Всё остальное - самая обычная прикладнуха. Вот нужно математикам посчитать что-нибудь быстро, тут появляются прикладные программисты.
    Ответ написан
    Комментировать
  • Почему Unity3D создает такой большой exe файл?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Ахах, ну что за люди? Нет, ну ладно hello world был бы 200 метров (и такое может быть), но чтобы жаловаться за 14 мегабайт. Ведь для этих деревьве можно скриптов на пару игр накидать, а будут те же 14 мегабайт. Ну, или чуть чуть больше.

    Объясняю. Работает Unity на Mono. Он требует runtime, то беж виртуальную машину, чтобы запускать специальный код, а также набор библиотек. Собственно, я даже немного удивлён, от чего ж так мало. Судя по всему, ненужные компоненты вырезаются и пара скриптов таки ещё удвоют размер. И всякие дополнительные компоненты также его будут сильно увеличивать.

    Нет, этот вопрос был бы весьма кстати, если бы Вы использовали Ogre вместо Unity, C++ вместо C#, OpenGL вместо дикой смеси оного и DirectX. Но Вы используете тучу возможностей тучной Unity и после этого жалуетесь, что размер очень большой.

    Впрочем, RTFM. Возможно поможет.
    Ответ написан
    2 комментария
  • Питон. Как изучать?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Окей, берём nginx, включаем cgi, и накатываем like this. Вот вам и PHP-style на питоне. Вместо echo используем print.

    Но, это не комильфо. Хотя, что забавно, python весьма юзабелен в таком виде, отсутствие логики и связности процессов (всё таки каждое обращение - загружается отдельный libpython.so) сводят на нет любые большие проекты.

    Так что смотря что Вам больше нравиться. Хочется больше велосипедов? Flask Вам в руки. Хочется быстрого развёртывания? Привет, django. Ищете хардкора? BaseHTTPServer имеет почти всё, что нужно, а чего нет - можно и самим придумать. А если требуется надёжность, возможно имеет смысл взглянуть на руби-стек, ибо пусть django и мейнстрим, пусть он и не сильно новый, всё таки у RoR аудитория больше и сообщество посильнее, тем более что магии в ruby более чем достаточно.
    Ответ написан
    Комментировать
  • Какую первую книгу по программированию выбрать?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Если знания нулевые, как Вы говорите, начните с изучения базового синтаксиса. Java сегодня имеет довольно богатый, пусть и очень стандартный синтаксис: классы и интерфейсы, наследование, переменные и члены класса, методы и уровни доступа, управляющие операторы (циклы, условия), анотации, система пакетов. Вроде всё. Пусть этот список станет поводом для того, чтобы прочитать это в рамках java где угодно, будь то wikipedia, аль coursera, да хоть Шилтд. К слову, здесь не сильно важен язык программирования. Если до этого хоть что-нибудь изучали, втянете за пару дней. Иначе изучение может растянуться на пару недель.

    Вот после этого уже можно копать вглубь. Здесь я бы рекомендовал вами упомянутого Кормена и Кнута. Первого нужно читать вдумчиво, выполнять все упражнения (каждое выполненое упражение это +10 к интеллекту). Кнута можно просто полистать. Оба годяться как справочники, но Кнут будто создавался таким образом. Математики у Кнута много больше и если Кормен может что-нибудь доказать "абы как", то Кнут себе такого не позволит. Из-за чего его читать долго и нудно: можете смело пропускать доказательства и возвращаться как было что-то не понятно. В любом случае, их читать действительно сложно. Осилите хотя бы Кормена - медаль Вам уготована.

    Но и язык нужно знать и понимать. Поэтому здесь пора заняться и тем, для чего java предназначена - энтерпрайзом. А именно, умением не столько программировать, сколько разрабатывать продаваемые продукты. Здесь подойдёт филосифия java для начала. Когда наследование перестанет Вас пугать (или наоборот, пройдёт время чересчур увлечённого наследования всего и вся), можно приступить к банде четырёх. В то же время, умея строить сложную архитектуру, мы всё ещё смутно знаем что под капотом у java. Так что можно почитать про оптимизации в JVM (читал англ, не знаю есть ли перевод), ну и покопаться в openjdk, если будет излишняя увереность, лишнем не будет.

    Собственно, это roadmap на очень долгое время. С самых начал до седой старости будете изучать java. Вполне возможно, что к тому времени, как начнёте банду четырёх (если начнёте), уже подойдёт долгожданная java 2.0 и всё нижеописанное потеряет значение, но чем чёрт не шутит? К слову, Кормен, и Кнут, и философия, и банда четырёх остануться, это скорее фундаменальные книги.
    Ответ написан
    Комментировать