Задать вопрос
  • Какие книги читать и изучать, чтобы стать настоящим программистом, а не кодером?

    @qassarb
    Ребята, просто хочу поделиться историей от себя.
    Я 4 года назад понял, что хочу стать разработчиком.
    И чуть более 3 лет не мог выбрать язык.
    То за ПХП взялся, бросил, не понравилось чего - то, так же пробовал повникать в что такое С, С++, и производные, скриптовые. И в этом году остановился на Java. I found it!!!!!!: )
    Во всех случаях читал литературу, но тут я понял чем больше знаешь основы, тем лучшим будет твой код. Когда знаешь, как устроены алгоритмы того же, скажем, компилятора, легче понимать архитектуру и анализировать переходы состояний.
    Если кого Java интересует, то очень рекомендую www.intuit.ru/studies/courses/16/16/info
    Вязовика. Курс хоть и старенький, некоторые вещи устарели, но уже в ходе курса начинаешь понимать. Терпения!
    BR
    Ответ написан
    Комментировать
  • Какие книги читать и изучать, чтобы стать настоящим программистом, а не кодером?

    @veitmen
    Добрый день.

    К сожалению нет "серебряной" книги. Нет четкого пути.

    Обязательно почитайте статью, с хабра, которую Вам скинули. И пропустите все через себя. Советы хороши, но Вы должны понимать, что все люди уникальны и путь становления у всех разный. Также все зависит от того, кем Вы хотите стать. Например я, как человек разрабатывающий Enterprise приложения, не очень любит "олимпиадников". Но это я, у других людей свое мнение.

    Стать хорошим программистом можно разными путями. Почитайте главу про личные качества программиста из книги "Совершенный код" Макконела. Сравните себя с описанием. Очень интересно. :)

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

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

    Ищите более опытных товарищей. Это самое-самое главное. Без наставников очень сложно. НО выбирайте с умом, а то потом будете академическим "быдлокодером". :)

    Найдите работу.

    Не заморачивайтесь. Если Вам нравится программировать, то просто читайте и пишите код. Вы и так станете хорошим проггером. Не бойтесь критики, особенно от самых злых и беспощадных критиков. Приветствуйте любые советы по улучшению. Но никогда не верьте на слово. :) Все перепроверяйте. "Быдлокодеры" есть и они хотят утянуть всех на свою сторону, что-бы не выделяться. :) :)
    Ответ написан
    1 комментарий
  • Какие книги читать и изучать, чтобы стать настоящим программистом, а не кодером?

    @betasked
    Кодить, кодить и кодить!!!
    И периодически сравнивать свой код с гуру. Анализировать. Переписать код заново. Опять анализировать. Искать ответы на конкретные вопросы в книгах.
    Ответ написан
    2 комментария
  • С чего начать изучение веб разработки на Python, человеку абсолютно не знакомому с backend?

    @Masterme
    Работа с веб отличается от работы с не-веб одной простой вещью:
    - сервер (апач, нжинкс и т.п.) получает запрос (а запрос - это строка) от браузера,
    - сервер обращается к приложению, передавая ему эту строку как аргумент,
    - приложение возвращает результат (тоже строку),
    - сервер отдаёт полученную строку в браузер.
    Конкретно для питона такое подключение скрипта к веб-серверу решается с помощью WSGI.
    Как это сделать. В настройках веб-сервера вы указываете документ_рут вашего приложения и скрипт с колбэком. Конфигурация для апача:
    <VirtualHost *:80>
         ServerName mysite
         DocumentRoot /var/sites/mysite/public
         WSGIScriptAlias / /var/sites/mysite/script.wsgi
     </VirtualHost>

    Колбэк - это функция в глобальном неймспейсе, называющаяся всегда application. Выглядит она примерно так:

    def application(environ, start_response):
        status = '200 OK' 
        output = 'Hello World!'
    
        response_headers = [('Content-type', 'text/plain'), ('Content-Length', str(len(output)))]
        start_response(status, response_headers)
    
        return [output]

    Когда апач получит запрос - он через wsgi запустит функцию application, а полученный от неё результат выдаст в ответ на запрос.

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

    Теперь неочевидный нюанс. Дело в том, что обычно апач в нормальном состоянии отдаёт статику как статику. А если подключить к нему wsgi - то wsgi начнёт перехватывать и запросы к статике тоже. В джанго такая ситуация решается через жопу (что доказывает, что джангодрочеры - альтернативномыслящие), а именно: предлагается создать поддомен для статики и раздавать её сервером без wsgi, нжиниксом каким-нибудь, либо отдавать статику скриптом. Оба варианта, мягко говоря, спорные. Я считаю намного лучше и гибче третий вариант:
    <VirtualHost *:80>
         ServerName mysite
         DocumentRoot /var/sites/mysite/public
         RewriteEngine on
         RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
         RewriteRule (.*) /index.py/$1 [L,QSA,PT]
         WSGIScriptAlias /index.py /var/sites/mysite/script.wsgi
      </VirtualHost>

    (Обсуждается здесь.)
    Ответ написан
    20 комментариев
  • Какой Web-framework использовать?

    @sormon
    инженер-программист =)

    Я рекомендую Flask. У Django, к сожалению, слишком сильная привязка к своему ORM, да и не только. Для flask есть очень много разных расширений, та же админка. По ORM, можно использовать как SQLAlchemy, так и вообще что по душе будет. А еще, есть такая вкусняшка для jinja2 — pyjade, позволяет писать шаблоны в стиле Jade/Haml. Очень клевая вещь =)

    Ответ написан
    Комментировать
  • Что изучать веб-программисту самоучке, кроме самого языка?

    Нужно изучать то, что требуется. Если задались таким вопросом, значит почувствовали, что вот тут что-то делаете не так. Возьмите и загуглите "<язык программирования> как сделать <вещь>". Но при этом не забывайте изучать более полно, а не ограничиваться одной статьей и рваться в бой. Прочитали про технологию, прочитайте еще пару статей. Постарайтесь понять какие минусы и недостатки, как и где эта технология применяется. Как оптимизировать ее. Это и есть база. Плюс этого способа в том, что не требует сразу тратить много времени. По сути, вы будете делать тоже самое, что и сейчас, но более полно, более основательно подходить к изучению. Со временем накопиться тот самый бэкграунд.

    А всякий матанализ скорее всего и не пригодится. Дискретка еще возможно, но тоже редко. Согласитесь, 80% кодинга — рутина :) Если вы не используете этого в работе, то они вам не помогут, а когда столкнетеся с реальной задачей, то, наверняка, сами захотите ее загуглить.

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

    Если хотите самой-самой базы, то возьмите книгу по интересующему языку — это лучший способ. Просмотрите все системные функции (не заучивайте, а просто просмотрите, чтобы представлять возможности языка). У php-программистов частая ошибка — писать свои велосипеды (особенно по обработке массивов), хотя есть очень много нативных функций, которые работают быстрее.
    По алгоритмам — читайте то, что используете. Например, в вебе нужны сортировки, редко что-то сложнее. Поэтому погуглите алгоритмы сортировки.
    Изучать то, что вы не используете полезно, но скучно и быстро забывается.
    Прочитайте про паттерны, хотя инфа о них, как правило, трудно воспринимается, кроме тех, что используете реально. Например, active record для работы с базой. Последнее и будет полезным.
    Для улучшения практического скилла советую читать чужой код и смотреть скринкасты опытных людей. Такие вещи часто богаты мелкими-оптимизациями. А если автор еще и озвучивает ход своих мыслей при проектировании функционала, вообще замечательно. (Именно этим полезны курсы по питону на udacity, например.)

    p.s^ Старайтесь знать все о чем-то и что-то о всем :)
    p.s.s^ длинновато вышло :(
    Ответ написан
    2 комментария
  • Что изучать веб-программисту самоучке, кроме самого языка?

    barmaley_exe
    @barmaley_exe
    Онлайн-курсы чем не угодили? Там и теория, и практика и с кровати вставать не надо.

    Если говорить предметно, то:
    1. Алгоритмы. Must have для программиста. Тут можно посоветовать известную книгу Кормена и Ко «Алгоритмы: Построение и анализ». Практиковаться можно на известных архивах вроде тимуса или площадках вроде codeforces.
    2. Дискретная математика. Тоже важная область. Сюда можно приписать теорию графов, логику, комбинаторику, основы теории вероятностей. Сильно пересекается с предыдущим пунктом.

    3. Что касается матана и теории чисел: особо углубляться без нужды не советую. Из матана хватит дифференциально-интегрального исчисления (с базой в виде пределов, конечно же). Обязательно линейную алгебру: матрицы, вектора, определители. Это следует изучать вместе с аналитической геометрией. Каких-то книг я, к сожалению, порекомендовать не могу.
    Есть ещё вычислительная математика (как решать задачи матанализа, дифуров, алгебры на компьютере), но, мне кажется, чем ближе компьютеры становятся к обычному человек, чем глубже проникают в нашу жизнь, тем менее важной становится эта область.

    Ну и что-нибудь про проектирование, ООП и паттерны. По паттернам библией считается книга банды четырёх, по ООП вроде прилична книга Гради Буча «Объектно-ориентированный анализ и проектирование». Но я не читал её.
    Ответ написан
    6 комментариев
  • CMS/CMF для удобного создания кастомных админок?

    @northicewind
    Сделал довольно большое кол-во проектов на джанге и никогда бы не посоветовал использовать её для кастомных админок. Сама по себе админка джанги это не админка в прямом понимании, а скорее scaffold. Можно привести высказывание автора Grappelli о проблемах фронтенда в джанге. Можно, конечно свои Admin Site написать и все шаблоны переопределить(и такое бывало), но тогда смысл от админки джанго не большой.
    Джанго — хороший и надежный инструмент и у него много полезных батареек, но админка на полноценную батарейку не тянет.

    Если вам нужен действительно гибкий инструмент для создания интерфейсов администратора с возможностью точечной доработки, то я бы советовал отойти от динамической генерации и посмотреть в сторону статической. Как это устроено в Ruby on Rails и Yii Framework. Мне довелось на практике сравнить оба подхода и второй оказался значительно более гибким. Можно подготовить шаблон и от него отталкиваться при создании базовых страниц, а что-то более сложное можно допилить руками.

    Кстати если возьмете Yii, то можно будет бесплатно использовать Editor WYSIWYG

    P. S. Если нужна все-таки динамическая админка, то из того, что использовал неплохо себя показала Active Admin для RoR. Почти без хардкода и более современный вид из коробки.
    Ответ написан
    1 комментарий
  • Python for Android. Как начать?

    mysticmirage
    @mysticmirage
    Питон для Андроида — достаточно мозгозатратное занятие.
    Я бросил эту затею, хотя иногда слежу за проектами, подающими надежду в этом направлении.

    Если нужно создавать игры, то это PyGame for Android — pygame.renpy.org
    Если нужно бизнес-приложения, то это Kivy — kivy.org (их гитхаб — github.com/kivy/python-for-android)

    Недостатки первого:
    1. проект не развивается
    2. ориентирован на создание игр
    3. только arm-архитектура
    4. поддерживается только одно касание

    Достоинства первого:
    1. ниже порог вхождения — достаточно легко устанавливается (не без бубна, но легче, чем kivy)
    2. куча документации по самой PyGame, которую можно использовать при разработке

    Недостатки второго:
    1. требует от устройства поддержку gles 2.0 (даже для простенького интерфейса)
    2. везде с собой тянет библиотеку для построения интерфейсов
    3. нужно постараться, чтобы установить всё это добро (кросс-компиляция и всё такое)

    Достоинства второго:
    1. любая поддерживаемая Андроидом архитектура
    2. проект развивается
    3. поддержка мультитач
    4. использует наработки PyGame for Android

    По поводу sl4a — он не позволяет создавать обособленные пакеты — требуется отдельно установленный интерпретатор Питона. По этой причине я его не рассматриваю.

    В любом случае, стоит быть готовым к тому, что размер пакета будет минимум 3 МБ даже в случае HelloWorld — каждое приложение будет тянуть с собой интерпретатор и стандартную библиотеку.

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

    igrishaev
    @igrishaev
    Фласк — очень хороший фреймворк, удобный и понятный. Его главное достоинство и минус одновременно — Фласк накладывает гораздо меньше ограничений на разработчика по сравнению с Джанго, например. Поэтому продумывать структуру пакетов и файлов вам придется самостоятельно. Но это не так страшно, понимание приходит уже с первым проектом.

    Крупные проекты на Фласке могут разбиваться на составные части — Блюпринты. Это аналог приложений в Джанго. Блюпринт может иметь свое адресный префикс, свои шаблоны, формы, модели. С помощью них можно постепенно наращивать функциональность проекта.

    Правда, для Фласка меньше документации и готовых решений, но основные из них — SqlAlchemy для БД и WTForms для html-форм — работают очень хорошо, на порядок лучше Джанговских аналогов.
    Ответ написан
    Комментировать
  • Flask для больших проектов

    @realduke
    Ну и добавлю еще, что мнение, что Flask не подходит для больших проектов — заблуждение. Конечно, фразу «большой проект» можно по-разному трактовать, проект может быть с сильно большой кодобазой, а может быть довольно высоконагруженным, может еще какой-то смысл можно вложить, не знаю. В Flask есть лишь одно ограничение, которое нужно учитывать при разработке — это context local objects. Вот именно оно вносит некоторую сложность при наличии большой кодобазы, т.к. несколько объектов, определенных в github.com/mitsuhiko/flask/blob/master/flask/globals.py, являются глобальными, и для их использования их нужно явно импортировать, в результате можно легко выстрелить себе в ногу. Для высоконагруженных проектаов с умеренным объемом кода проекта я не вижу проблем. Связка nginx + gunicorn + приложение может выдерживать нормальные нагрузки даже на одной машине. Если проект сильно большой, то никто не мешает задеплоить несколько фронтэндов и использовать балансировщик.

    Flask — это лишь небольшая обертка над Werkzeug в виде класса, который выступает в роли callable объекта для WSGI, клей для Jinja, API для расширений, ну и несколько вкусняков в виде блюпринтов и сигналов. Кода не много и он легко читается.
    Ответ написан
    1 комментарий
  • Flask для больших проектов

    @realduke
    Непонятно, что конкретно интересует!

    Flask ничем не отличается от других Python фреймворков. Если использовать связку Flask + SQLAlchemy + WTForms, то это считай тот же Django, только без contrib и админки. Изначально нужно быть готовым к самостоятельному созданию организации структуры проекта, т.е. где конфиги положить, где модели, где тесты и т.д. Есть несколько проектов-заготовок, которые это упрощают.

    Несколько ссылок по теме:

    github.com/mitsuhiko/flask/wiki/Large-app-how-to
    github.com/swaroopch/flask-boilerplate
    github.com/semirook/flask-kit
    github.com/imlucas/flask-tool
    github.com/klen/Flask-Foundation

    У Flask сейчас довольно много расширений, проверенные лежать тут flask.pocoo.org/extensions/. Много других можно найти тут crate.io/?has_releases=on&q=flask. Рекомендуется конечно учитывать что некоторые могут быть криво написаны или морально устарели.

    По устройству проектов еще можно поискать готовые приложения. Они есть тут flask.pocoo.org/community/poweredby/, те, которые с исходниками. Еще на гитхабе много чего, можно поискать по импортам, где используется Flask, в простейшем случае так как-то github.com/search?l=Python&q=from+flask&ref=searchresults&type=Repositories.
    Ответ написан
    2 комментария
  • Перспективные языки программирования

    sl_bug
    @sl_bug
    Любой. Если вы супер отличный специалист в выбранной вам области, то проблем с «боготворением» вас не будет.
    Ответ написан
    Комментировать
  • Полезные Django apps?

    d43
    @d43
    django-debug-toolbar
    django-crispy-forms (создаем сложные формы с поддержкой Twitter Bootstrap прямо из forms.py)
    django-compressor (компилирует LESS, SASS, сжимает CSS, JS)
    django-easyfilters (позволяет создавать фильтры по типу тех, что в админке; см. демо)
    Ответ написан
    Комментировать
  • Что выбрать для разработки веб-приложений?

    un1t
    @un1t
    Рекомендую Python+Django. У джанги большое сообщество хорошая документация, множество готовых компонентов. На питоне есть и другие хорошие фреймворки, но у джанги самое большое сообщество, поэтому это идеальный вариант для вникания в веб-разработку.
    Ответ написан
    Комментировать
  • Бумажные книги по C#, MVC4 и сопутствующим технологиям?

    pletinsky
    @pletinsky
    Простите, я понимаю что вы не хотите слышать таких ответов.

    Но ей богу — забейте вы уже на книжки.

    1) Ну на крайний случай выжимки с сайтов, где все коротко написано с типичными примерами.
    2) Мсдн конечно — там уж точно уровень не английской литературы — написано все по простому в одном стиле. Пару дней с переводчиком даже если — привыкнете.
    3) Ну и практика и поисковик. Застрял — погуглил — дальше делаешь.
    4) Участие в проекте с опытными разработчиками — основа роста. Там вы будете писать код в общем стиле, используя тот подход который есть в остальном приложении. Там не будет стопперов, которые вы не сможете прогуглить. Работа в паре в идеальном варианте.

    Ей богу — вовсе не книжки позволят расти в профессиональном плане быстро. Да — матчасть важна — но на более высоком уровне чем изучение того, как работать с конкретными фреймворками.
    Если совсем плохо с английским можно использовать книжку как справочник в реальном времени на проекте, но возможно хватит и электронного варианта.
    Ответ написан
    3 комментария
  • Какова производительность CakePHP?

    eox425
    @eox425
    Как уже писал комрад opium, xprof — отличная тулза для профилирования РНР приложений.
    Если вас интересует субъективное мнение и особенности архитектуры…
    В принципе самым слабым местом существующих РНР фреймворков является реализация ORM, кэширования и шаблонизации.
    По личному субъективному опыту могу сказать что Yii и Symfony2 имеют самые эффективные реализации этого стафа.
    Но у Symfony2 намного более развита инфраструктура, комьюнити… и в целом он для меня намного удобней.
    По поводу того что Symfony медленее Yii могу лишь сказать что только в dev mode, в продакшене разницы особо не чувствуется. CakePHP по производительности почти догоняет kohana. В большинстве случаев на производительность самого фреймворка влияет использование Dependency Injection и других паттернов, а также немного паттерн самого ORMа — Active Record или Object Mapping.

    APC не тортъ. Лучше если вы возьмете xcache и будете кэшировать в нем байткод приложения и запросы к базе.
    memcached не тортъ для кэширования запросов БД если у вас только одна машина. Т.е. memcached хорошо использовать в кластере. В остальных случаях xcache быстрее так как он реализован в виде плагина к РНР.

    Не раз был свидетелем мем. лика memcached… не забывайте задавать ttl объектов в кэше! Это довольно распространенная ошибка. Реализовуйте поддержку etags и if-modified-since хеддеров для http кэширования каждой страницы по mark-tagged принципу. И тогда за nginx'ом вам вообще не придется беспокоится о производительности фреймворков…
    Некоторые Yii извращенцы на офф. форуме фреймворка писали что если использовать с xcache параллельно eaccelerator, то можно добиться довольно впечатляющих результатов. Не знаю правда ли это… но советую вам проверить.

    Вообще я перелез с РНР фреймворков (перепробовал почти все актуальные) на Grails чем вполне доволен.
    Сейчас практикую связку angular.js на node.js < — json-rpc/rest --> grails/play2.
    Смысл в том что бы шаблоны на сервере и клиенте были одинаковыми… хочу написать об этом статью.
    Позволяет сэкономить кучу времени и самое главное — привет клиентская шаблонизация без гемороя и вреда для SEO.
    Ответ написан
    1 комментарий
  • Как стать программистом java? (Java для начинающего)

    @jorikburlakov
    Ну эта тема подымалась на хабре не раз. Так что всегда сначала пользуйся им.

    1) Хорстман «Java Core» 8-изд два тома, Эккель «Thinking in Java» желательно в оригинале.
    2) Видио лекции, Лекции по Java, там поищешь своего уровня.
    Ответ написан
    Комментировать
  • Какой Web-framework использовать?

    avalak
    @avalak
    Я за Flask. У него под капотом Werkzeug + интеграция с Jinja 2 «искаробки». Довольно удобно реализовывать REST через MethodView. В нём нет ничего лишнего (ни форм, ни ORM/AR. функционал легко наращивается через расширения), но он не аскетичен как Bottle.
    Для работы с assets есть Flask-Assets
    Ответ написан
    4 комментария
  • Что изучать, PHP или Rails?

    1. Если вопрос стоит о скорейшем зарабатывании денег на фрилансе, то изучать PHP и несколько популярных CMS и модулей к ним, поскольку большинство задач это «доработать», «написать модуль» и т. п. Потом фреймворки.

    2. Если же о наборе как бы теоретических знаний, о постановке стиля программирования, то с RoR, хотя бы одно приложение посерьезнее туториала для себя написать с соблюдением всех рекомендуемых практик, а потом уже переходить на PHP.
    Ответ написан
    Комментировать