Ответы пользователя по тегу Программирование
  • Для новичка лучше учить ЯП исходя из задач, которые хочется решать или наиболее простой язык?

    voidnugget
    @voidnugget
    Программист-прагматик
    Есть один важный аргумент против питона, ruby и php - относительно низкая производительность, и следовательно невозможность разработки полноценных "реактивных" решений. Node.js будет шустрее, а golang с Java (J2SE) и подавно...

    Нужно выбирать язык исходя из полноты, качества поддержки и зрелости существующих инструментариев.
    Если это вэб - лучше ити в сторону meteor + react <-> express + mongo и не парить одно место.
    Если нужна производительность бэкенда - лучше смотреть в сторону ванильной Java с netty, это Vert.x.
    Касательно зрелости и качества поддержки - история умалчивает, но аналогов особо то в других платформах нету.
    Ещё стоит разобраться со вторым Angular'ом когда он выползет с альфы, правда там сначала был TypeScript, а теперь Dart + JS :x

    Главным аргументом против Java является ужаснейший Overhead разнообразных J2EE поделок с сервлетами, подавляющее большинство существующих решений использует именно это окружение - по сравнению с ванильным Netty, Overhead составляет 1 к 30. Scala тоже имеет довольно большой overhead, но он не является проблемой, вот скорость компиляции просто ужасна - в ~100 раз медленнее Java. Для того что бы эффективно выполнять задачи в Scala (Python / Erlang / Clojure etc) - нужно проводить 80% времени в интерпретаторе, не всем это по душе, да и мешает внедрению нормального CI с TDD/BDD. Имхо Groovy более юзабелен сейчас чем Scala, особенно для скриптов, и оверхед у него минимальный (при правильном приготовлении), и скорость компиляции не доставляет неудобств.

    C# + asp.net решение двузначное, я не знаю как сейчас обстоят дела с OpenSource проектами в оных местах - последние два года ситуация обещала исправится (CLR заOpenSource'или), но чуда так и не произошло.

    Long story - short. Если тремя предложениями, то ...
    Стоит вообще забить на Python, учить JS Meteor Express React MongoDB и опционально Dart со вторым Angular.
    Также важно научится собирать фронтэнды gulp'ом со всякими минификаторами, livereload'ами (browsersync), stylus node-sass jshint jscs csslint jsbeautifier ... и прочим барахлом. Ruby'сткий Sass с compass'ом стоит обходить стороной из-за слоупочности.
    Ответ написан
    6 комментариев
  • Это говнокод или норма JS?

    voidnugget
    @voidnugget
    Программист-прагматик
    1. Это код человека не удосужившегося поискать любую существующую библиотеку интернационализации, либо ознакомившегося с Intl'ом для которого есть вполне вменяемые полифилы.
    2. Это характеризует его как человека который хочет делать "хорошо", а получается "как всегда" из-за недостатка знаний и опыта.
    Ответ написан
    1 комментарий
  • Язык для написания небольших программ?

    voidnugget
    @voidnugget
    Программист-прагматик
    C питона можно собрать exe'шку.
    Ответ написан
  • Какая IDE для обычной C?

    voidnugget
    @voidnugget
    Программист-прагматик
    Atom с ctags тоже хорошо работает.
    Ответ написан
    3 комментария
  • Можно ли назвать человека программистом, если он занимается геймдевом?

    voidnugget
    @voidnugget
    Программист-прагматик
    Берём
    1. Среднестатистические алгоритмы используемые в современных играх
    2. Мат модели шейдеров и прочего графического барахла
    3. Стохастические сетевые алгоритмы для стабильного мультиплеера
    4. Генетические алгоритмы для тестирования в песочницах
    5. Алгоритмы передачи и упаковки ресурсов по приоритетам, ещё и в Р2Р сетях

    Понимаем что это выходит далеко за рамки любого распространенного CRUD'a, которым занимается 80% "реальных программистов".

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

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

    Людей, способных начать игру и довести до конца - тоже единицы.
    Если ваших родителей не устраивает зарплата в 1000-2000$ со старту, с расчёта в 10-12$ в час, то я уж и не знаю как лучше им так объяснить ...

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

    voidnugget
    @voidnugget
    Программист-прагматик
    В принципе хакерские скилы ничем примечательным в наше время особо не отличаются от того что было 10 лет назад. Нужно знать ассемблер и сишку - без плюсов и досконально, что бы фраза "Си (без плюсов) может быть очень даже ООП" не могла вызвать странную ухмылку на вашем лице и воспринималась довольно обыденно.

    1. Перво-наперво нужно научится пользоваться отладчиком OllyDbg, IDA и т.п.
    2. Потом нужно разобраться в архитектуре х86 на уровне понимания распределения прав доступа, работы с памятью и различных SIMD/MIMD операций.
    3. От ОС ничего не зависит - знания и навыки в kmdf/umdf и linux kernel device drivers дополняют друг друга. Также нужно разобраться с системными вызовами самих ОС и как это всё оперируются со стороны старых добрых glibc и т.п. вещей.
    4. Из языков нужно брать и эксперементировать со всем - даже в той же Java в рамках OpenJDK есть куча эксперементальных вещей, типа Project Graal и Project Sumatra, в которых очень даже полезно покулупаться ради собственного развития. Никогда не знаешь что найдёшь и как это можно будет потом использовать - главное искать и не останавливаться.
    5. Конвертируют полученные навыки и знания самыми разнообразными способами - лучше всего разрабатывать под ядрышка ОС различные вундервафли, становиться известным и ити работать в IBM / Intel. WhiteHat/GreyHat зароботки в постсовке нереальны, а BlackHat грозит сроком.
    Ответ написан
    Комментировать
  • Где хранить "кусочки" кода?

    voidnugget
    @voidnugget
    Программист-прагматик
    В github gist'ах
    Ответ написан
    Комментировать
  • Какие самые реальные и действенные проекты\работы\фриланс для python-программиста?

    voidnugget
    @voidnugget
    Программист-прагматик
    Пишу на питоне ещё с 15 лет (2.4+)... ненавижу его runtime и архитектуру. Язык хороший - реализация никакущая. Ну да его синтаксис достаточно упрощён, но и за синтаксический сахар приходится платить сложностями отладки и поддержки.

    Сейчас же почти все известные мне конторы не используют питон в продакшенах с более-менее высокой нагрузкой. Яндекс тому пример. Чаще питон используется для решения прикладных задач администрирования, так как это делается, к примеру, в SaltStack. Все дружно слезают с питона, РНР и рельсов на Golang, Java/Scala, и иногда даже Groovy - производительность выше в десятки раз, и managed runtime на много стабильнее. Правда в случае с JVM очень сильно раздувается куча в виду избыточности объектной модели (оператву жрёт как дурное, а я байтики считать привык). Сейчас это должно лечится с помощью Project Graal и Truffle, правда пока до этого дошёл только jRuby, который тоже в пару десятков раз быстрее Ruby. По идее и Groovy тоже должен переползти как-то ... Вот про jyton ничего не знаю.

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

    Фрилансить с питоном начать можно, но очень желательно опробовать ещё хотя бы пару окружений и фреймворков типа Groovy Grails, или Typesafe Stack. Сейчас требования рынка возросли в пару раз за последние два года - нужны ассинхронности/многопоточности, push-нотификации в мобильные приложения и по вэбсокетам/комету. И это всё с богатыми js-фронтендами на всяких там Angular'ах и React'ах. Естественно можно крутить костыли типа Celery / Gearmand / Beanstalk / RabidMQ, но накладные расходы на коммуникацию слишком большие :( Компилируемые языки со своими Managed Runtime'ами позволяют строить монолитные приложения в которых подобные решения избыточны в рамках одной и той же машины, а если это куча нод в кластере то нужно мерить/думать.

    Django сейчас сложно поддерживать так как он достаточно сильно развился за последние 3 года, и я очень сомневаюсь что сохранится совместимость новых версий со старыми.

    А вот с pyramid (pylons) и SQLAlchemy можно строить достаточно хорошие приложения. У них есть enterprise поддержка и соответствующие гарантии.

    Типовые задачи на питоне:
    - написать какой-то мелкий скрипт с Gui на PyQT / Pyside для какой-то аналитики и отрисовки графиков, иногда попадаются задачки с gstreamer'ом
    - написать какое-то простое RESTful CRUD приложение, в стиле "одна табличка БД - один контролеер", это конечно же тонна копипасты и мне больше нравятся DataMapper'ы по типу TastyPie. Иногда люди хотят чистого Tornado или Flask'a, так как им не нравится overhead в джанге и pylons.
    - написать скрипты для деплоя чего-то, обычно люди не знают про SaltStack.

    В плане архитектуры питонистам чужды различные SOA с CQRS-ES'ом, потому что сам компилятор не располагает. Хотя её достаточно просто поддерживать.

    Проблема всех проектов на Node.js / Python / Ruby это отсутствие долгосрочной поддержки библиотек и фреймворков - часто ломается обратная совместимость, и нужно постоянно следить за состоянием всех зависимостей. Опять же нужен TDD/BDD для того что это всё хорошо контролировать. Тестируешь руками - себя не уважаешь.

    Ну и вроде всё ...
    p.s. я опубликую на хабре статью сегодня-завтра "Freelance - you're doing it wrong" там поделюсь опытом работы и основными организационными проблемами в рамках удалённой работы и фриланса, покажу разницу между ними.
    Ответ написан
    6 комментариев