Ответы пользователя по тегу Программирование
  • Python Какая принципиальная разница в записи условия?

    Позволю себе добавить к словам других комментаторов: обычно лучше не делать "громадные условия", их трудно читать. Почти всегда можно как-нибудь оптимизировать и сократить, например, разложив его на отдельные переменные, или составляя список и натравливая на него any() / all(), или вынося это всё в отдельную функцию с кучей assert, вместо условия ловя AssertionError.
    Ответ написан
    Комментировать
  • В чём разница между операндом и литералом?

    # "Hello world" - литерал
    print("Hello world")
    
    # somevariable - не литерал
    print(somevariable)
    
    # сложение - бинарная операция
    # x и 3 - операнды
    # а 3, кроме того, и литерал
    x + 3
    Ответ написан
    1 комментарий
  • Пути создания виртуального тренажера?

    Не вполне понятно, какой процесс вы намереваетесь моделировать: можно ли его считать дискретным, или есть непрерывные составляющие; какая требуется визуализация; почему вы упоминаете дифференциальные уравнения; насколько высока вычислительная сложность.

    Я бы сказал, что существуют следующие методы решения задачи.

    Настольное приложение на Python. Python для сколь-нибудь сложных систем более удобный язык, чем JavaScript, потому что вы можете легко разложить вашу симуляцию на классы, описать взаимоотношения между ними. Есть много структур данных: списки, очереди, словари, что угодно, - не надо делать свой класс prioritized queue, например. Есть всяческие оптимизированные инструменты вроде numpy, scipy.

    Есть фреймворки для разработки приложений: pygame и более новый kivy. О kivy я ничего сказать не могу. О pygame могу сказать, что её API мог бы хорошо смотреться двадцать лет назад, но не сегодня. Python гибкий язык, на нём можно писать гораздо более человекопонятные библиотеки.

    Кроме того, на pygame без дополнительных библиотек вам придётся руками, из прямоугольников и окружностей, рисовать графики, схемы, etc, - то есть вы много времени потратите на вспомогательные вещи вместо того чтоб разрабатывать вашу симуляцию. Возможно, библиотеки для этих вещей существуют, но я мало знаком с разработкой настольных приложений на Python, не могу сказать.

    Наконец, чтобы распространять ваше приложение, потребуется сделать установщик, собрать его в .exe специальным инструментом, обновлять его как-то. Всё это довольно муторно и вселяет тоску.

    Клиентское приложение на JS, как писали уважаемые участники обсуждения выше, лишено многих из этих недостатков. У пользователей будет доступ к вашей программе отовсюду, не нужно ничего устанавливать на компьютер. К вашим услугам Canvas, SVG и при необходимости WebGL. И море, нет, - океан разнообразных JS-библиотек, которые позволяют быстро и удобно делать графику, диаграммы, анимацию, визуализации любого сорта.

    Недостатки, с которыми встречался я, когда занимался чем-то подобным:

    • Отсутствие удобных структур данных. В JavaScript есть корявые списки, с которыми работать неудобно. Но я думаю, что сейчас этот недостаток нивелируется развитием самого языка и появлением библиотек типа underscore.js.
    • Неудобство и лапшевидность получающегося кода в результате отсутствия нормального наследования. Ну тут снова: библиотек для того же наследования существует множество; есть requirejs и модули; ну и вообще, сейчас я бы сделал это всё иначе :)
    • Медленность вычислений. Весьма относительная вещь, потому что программу можно при желании сильно оптимизировать; для большинства таких симуляций, о которых речь шла у меня, производительность проблемой не была.
    Гибридный вариант. Веб-приложение, на бэк-енде работает процесс, выполняющий расчёты; на фронт-енде работает клиентский код, который общается с пользователем и визуализирует результаты. Для больших симуляций - очевидно лучший вариант, но и самый сложный. И клиент и сервер имеют каждый свою объектную модель, и в некотором смысле одно и то же, получается, нужно дважды реализовывать.

    Поэтому, как итог - я бы предложил вам остановиться на варианте 2 (клиентский код на JS), а со временем, если симуляция окажется ну очень сложной - можно перейти к варианту 3, опираясь на накопленный опыт. Частично вынести из уже написанного приложения часть расчётов на сервер. Как пример: отдельный процесс по заданным параметрам с визуализацией вы считаете на клиенте, а если нужно посчитать сто процессов и найти какие-то усреднённые характеристики - это выносится на сервер. Просто и логично.

    Если интересно - пишите на почту, можно пообщаться. Я ни в коем случае не являюсь специалистом, но пока учился в вузе - немного интересовался темой, читал книги/статьи и писал простенькие программы по дискретно-событийному моделированию экономических процессов в качестве курсового проекта.
    Ответ написан
    1 комментарий
  • Как изучить язык приближенно к 100%?

    Почитайте статью В. Зуева "Редкая профессия". Узнаете, какой самый лучший способ полностью изучить язык: написать для него компилятор или интерпретатор.

    Внимание, вопрос: а зачем?
    Ответ написан
    1 комментарий
  • Как уйти с распутья технологий?

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

    Я занимаюсь Python/Django, мы делаем веб-приложения. Если интересно пообщаться - напишите мне в Skype или на почту, в профиле есть контакты.
    Ответ написан
    4 комментария
  • Имеются ли в сети написанные программы для построения ассоциативных правил?

    Не уверен, что именно вы имеете в виду, так как с предметной областью (базы правил и их разрешение) только собираюсь познакомиться. Однако недавно наткнулся на нечто подобное: https://habrahabr.ru/post/280974/ (W!Mi) Может быть, это оно.

    Ещё есть полноразмерные системы бизнес-правил (Business Rule Management System) и есть небольшие библиотеки для их использования (на Python точно есть несколько разных, но названия не вспомню сходу).
    Ответ написан
    Комментировать
  • Где применить свой "таланты" программиста?

    А это плохо, что идей нет. Идеи должны быть всегда. Идея - это мечта, а если вы не мечтаете - может быть, у вас недостаточно знаний, чтобы зарождались мечты, нет почвы, на которой они могли бы расти. Вопрос в том, есть ли у вас достаточно упорства и желания для занятий самообразованием.
    Ответ написан
    Комментировать
  • Музыка для кодинга, под что вы программируете?

    - По настроению - спокойная классика вроде "Лунной сонаты" или, наоборот, что-то энергичное, вроде скрипичных произведений Паганини.
    - Вокальные произведения и опера - лучше на малопонятных для меня языках и/или что-нибудь хорошо знакомое, дабы не отвлекать мозг вслушиванием в слова.
    - Ну и тишина.
    Ответ написан
    Комментировать
  • Какой есть software для создания анимированной диаграммы бизнес процесса?

    Посмотрите на BPMS (Business Process Modeling Systems, системы моделирования бизнес-процессов). Скажем, на BizAgi.

    Там вы можете описать свой процесс в виде схемы в нотации BPMN, запустить его и посмотреть анимацию. Насколько я помню, всё это возможно и в базовой бесплатной версии.

    Ещё альтернатива - системы имитационного моделирования бизнес-процессов (simulation modeling), например - AnyLogic. Там и 2D, и 3D симуляции рисуют. Тоже есть бесплатная версия, с недавнего времени.
    Ответ написан
    Комментировать
  • Какой ЯП выбрать для следующей ситуации?

    Представляется, что описанная многопочтенным сэром ситуация - сугубо гипотетическая, поскольку у тов. tuccar очевидное хобби - задавать всё более изощрённые вопросы о языках программирования разной степени экзотичности. Я возьму на себя смелость порекомендовать достойному топикстартеру оставить это бесплодное занятие и наконец уже что-то попрограммировать самому.
    Ответ написан
    1 комментарий
  • Наука или computer science?

    Зависит от ваших приоритетов. Что вам нужно в жизни?

    Да, зарплата у учёного даже на Западе в среднем меньше, чем зарплата высококвалифицированного программиста. Особенно сейчас, в век бума IT. Но бум этот не может быть вечным, в отличие от непрерывно растущих потребностей человечества в энергии.

    Мне кажется, если есть возможность заниматься ITER, способности это делать, склонности к этой области - не надо упускать. Коли нефть - это покидающее нас "вчера", а управляемая реакция распада - набирающее силу, несмотря на проблемы и трагедии, "сегодня", то термоядерный синтез - это едва видная на горизонте заря неизбежного "завтра". Если сумеете эту зарю разжечь - люди будут долго помнить вас после смерти. Если для вас это важно, конечно.
    Ответ написан
    1 комментарий
  • Как из математика адаптироваться-переквалифицироваться в программиста?

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

    Думается, прежде всего стоит определиться, - для чего вам нужно программирование. Вы хотите программировать для своей профессиональной математической деятельности? Матмоделирование? Матфизика? Железо?

    Предположим, что вы с этим определились, - и тогда стоит вопрос выбора инструмента. Например:

    Mathematica, коли вы с ней ещё не знакомы. Мультипарадигменная среда программирования чего угодно. Некоторая сумасшедшесть Стивена Вольфрама, кажется, идёт ей даже на пользу.

    Функциональные языки программирования общего назначения включают уже упомянутые Haskell, LISP, Scheme, Clojure. Я бы предложил Scala, которой занимаюсь сейчас сам. Вам, вероятно, легко дадутся лямбда-исчисление и теория категорий, на которых оно всё работает. Основа - JVM, в этом есть и слабые, и сильные стороны; преимущество в том, что вы сможете писать и веб-приложения, и настольные, и мобильные.

    C++ - это та ещё заморока; упоминаю его потому, что существуют книжки Александра Степанова - "Elements of Programming" и совсем недавно изданная "From Mathematics to Generic Programming", кои описывают программирование с точки зрения абстрактной алгебры. Базируются на языке, основанном на C++. Я не думаю, что с этого следует начинать, книжки трудные; но может быть, вам будет интересно просто полистать или сделать пометку на будущее.

    Функциональщики терпеть не могут мутабельность (изменяемость) значений. Их инструменты - теории типов, множеств, категорий, лямбда-исчисление. Степанов же утверждает, что реальная машина имеет память, ячейки которой изменяемы по определению, и посему функциональщики витают в облаках и отрываются от бренной земли. Те в ответ обзывают его старпёром, застрявшим в далёком прошлом. В общем, жизнь продолжается.

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

    Ещё некоторые моменты, которые вам могут быть интересны.

    Конкретная математика за авторством Кнута, Грэхема, Паташника представляет собой учебник по математическим методам, которые авторы считали полезными в разработке программ.

    Упоминание Искусства программирования Кнута стало уже обязательным в каждой теме об обучении программированию. Однако, живой человек, живущий не на необитаемом острове, вряд ли способен проработать оную книгу целиком. Скорее можно использовать её как справочник и как источник вдохновения.
    Ответ написан
    Комментировать
  • Видеоуроки - есть ли польза?

    Субъективно - скорость усвоения информации с видеоуроком заметно меньше, чем с книгой. Особенно когда уже знаком с темой до некоторой степени. Уже всё стало понятно, скучаешь в ожидании, руки сами тянутся хабр открыть.

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

    Ещё один вариант - воспользоваться Wolfram SystemModeler или иным специальным средством для математического моделирования. Такие программы уже умеют рисовать графики и анимацию. Готовые модели можно экспортировать, в том числе и для Web.
    Ответ написан
    Комментировать
  • Как правильно сформулировать исключение?

    Может, не стоит превращать вводимое число в int. Пусть будет строка. Можно тогда написать s.endswith('11').
    Ответ написан
  • Куда катится программирование?

    Всё очевидно же. Человеки не нужны, нам нужно больше роботов :)

    На самом деле, ваш вопрос гораздо шире собственно программирования. Что будут делать люди, когда роботы станут изготавливать пищу, одежду, жильё и всё более совершенные копии самих себя; когда автомобили и самолёты будут передвигаться вполне самостоятельно; когда, таким образом, большая часть человеческих профессий исчезнет по причине того, что роботы выполняют человеческую работу дешевле и качественней.

    Думаю, что программирование как раз вне зоны риска: оно никуда не денется ближайшие полвека точно. Несмотря на описанный вами прогресс, большинство ныне создаваемых программ довольно глупы и прямолинейны; они лишены малейшей гибкости и способности реагировать на нестандартные, не предусмотренные разработчиками ситуации. Если сравнить их с живыми существами, - уровень приспособляемости, наверняка, куда ниже самой примитивной бактерии. Может быть, на уровне бактериофага.

    Когда мы будем массово и просто создавать программы столь же умные, как средний домашний кот? Желательно, со столь же симпатичной мордой.

    Пока что умных программ мало и средний программист такие не пишет.

    Наслоение абстракций в современных программных системах приводит к тому, что мы не используем возможности наших вычислительных устройств на полную катушку. Мощности современного смартфона, может быть, хватило бы, чтоб его использовать как мозги для Терминатора; а в нём браузер тормозит. Абстракции, конечно, необходимы, но мы в большинстве случаев не умеем строить их так, чтобы не платить за это столь большую цену в производительности (привет, Python).

    Как результат всего вышесказанного, степень автоматизации в нашей реальности пока что оставляет желать много, много лучшего. См. бюджеты внедрения ERP-систем для автоматизации предприятий: это семизначные суммы и, если не ошибаюсь, порядка 80% провальных проектов.

    Короче говоря, на век нашего поколения работы хватит точно. Ну а дальше? А там, глядишь, физики доберутся до аппаратной реализации первых полноценных квантовых компьютеров; и вперёд: совершенно новые парадигмы, новые языки, новые методы обработки информации.
    Ответ написан
  • Какие посоветуете книги по олимпиадному програмированию для начинающих веб-разработчиков?

    Вы хотите участвовать в олимпиадах? Если так, то вряд ли там будет возможность использовать JavaScript. Кроме того, в олимпиадах много математики, для этого JavaScript подходит плохо. Хотя бы потому, что в нём неудобные (IMHO) массивы.

    Ну и потом, коли вы начинающий разработчик, почему так ограничиваете себя единственным языком? Изучайте новые языки, развивайтесь, расширяйте кругозор. Если C++ пугает, займитесь Python, он много проще. И инструментарий для математики есть, и на современных олимпиадах разрешают его использовать. Он вам и для веба пригодится, не вечно же вам callback-и городить. :)
    Ответ написан
  • Нужно ли начинать изучение программированию с книг, а не с ЯП?

    Я тут посмотрел другие ваши вопросы. Они все связаны с одной и той же темой: в каком направлении начать изучение программирования, да в какой последовательности, да какой язык выбрать.

    Вы слишком много сомневаетесь, пытаясь найти сразу самый лучший путь, и слишком боитесь ошибиться. Так можно бесконечно колебаться, не решаясь сделать первый шаг.

    С моей точки зрения, вам стоит прямо сейчас, без дальнейших сомнений, взять какой-нибудь несложный язык программирования, - пусть Python, - и приняться за работу. Выберите себе какой-нибудь проект, который вам интересно было бы сделать. Да хоть возьмите задачки из "Конкретной математики", если она вам так нравится. Там уже в первой главе есть. И пишите, пишите, пишите код.

    Да, он будет плохой. Да, будет много ошибок. Но вся жизнь программиста состоит в том, чтоб исправлять свои и чужие ошибки, это реальность. Программирование - это практическая деятельность. Невозможно научиться ей, лишь читая книжки.

    Если знаете английский - есть видеокурсы по программированию на Python на Coursera, Udacity, codecademy, где там ещё, - много их. Если не знаете - есть переведённый на русский учебник за авторством Лутца. Но английский, вообще говоря, знать надо.

    Теперь, что касается фундаментальных книг. Я сам читал "Конкретную математику", но продвинулся недалеко. Считаю, что у человека должен быть стимул и интерес изучать вещи; тогда лишь их изучение будет плодотворным. В обратном случае, даже если вы заучите что-то, мозг выбрасывает ненужную информацию.

    Пишите код и много. Когда вы почувствуете, что не хватает знаний о красно-чёрных деревьях - возьмёте Кнута и прочтёте. Надоест динамическая типизация в Питоне - пойдёте штудировать C/C++. Захотите писать под микроконтроллёры - выучите ассемблер.

    Короче говоря, не бойтесь начать.
    Ответ написан
  • Какую тему диплома выбрать (Программирование)?

    Вопросы такого рода весьма умилительны. Позволю себе высказаться и прошу заранее меня извинить за резкость.

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

    Представляется, диплом обязан быть интересным для дипломанта, иначе мотивация его делать - никакая.

    Итого, вы хотите, чтобы вам подсказали тему в программировании, которая лично вам интересна, притом, что вы сами не сумели её найти в течение периода обучения. Кроме того, вы не указали, как вы себя оцениваете как программиста и какие проекты вам вообще по плечу. Вы даже близко не описали, что вам вообще в жизни интересно. Какого ответа вы ждёте?

    Ну вот навскидку несколько тем, касающихся веб-программирования.
    - Сделайте красивый и удобный в использовании ORM для какой-нибудь экспериментальной СУБД (мне вот нравится OrientDB), напишите веб-приложение с его использованием и обоснуйте, чем оная СУБД лучше, а чем хуже традиционных реляционных, для использования в веб-разработке.
    - Напишите веб-приложение, которое будет аккумулировать какой-нибудь вид открытых данных (статистика выборов; бюджетов; доходов-расходов; миграции; и т.п.) по муниципальным образованиям, субъектам, странам, по этим данным прогонять какие-нибудь алгоритмы и чего-то на их основании анализировать.
    - Займитесь Semantic Web - тема широкая, можно много чего сделать. Большая часть сделанного в этой области - страшно до безобразия и к практическому использованию непригодно. Человекопонятного редактора онтологий нет.

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

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

    - Обратите внимание на другие образовательные IT-проекты, например, acodemy.ru, codecademy.com и так далее. Можно позаимствовать опыт. Не говорю уже о монстрах - Coursera, EdX, Udacity.
    - Для организации своей системы ДО можно использовать специально предназначенные для этого движки. Acodemy.ru есть такой движок, но, видимо, он уже скорее мёртв, чем жив. Авторы то ли потеряли к нему интерес, то ли что, хотя идея - многообещающая, курсы, которые они уже успели сделать, очень неплохи. Есть ещё Stepic. Есть необычные, но перспективные встраиваемые инструменты вроде Google Oppia. Движки монстров вроде EdX тоже доступны к использованию, они в open source, но по слухам довольно сложны.
    - Не недооценивайте важность интерактивных демонстраций и постоянного закрепления теории практикой.

    Идея очень хороша сама по себе; сам тоже пытался заниматься программированием со школьниками (очно), но пока по всяким объективным причинам пришлось приостановить это дело.
    Ответ написан
    Комментировать