Обучение программированию. часть 2

YUAL

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

kokoc88

в алгоритмах и принципах работы более-менее крупных прикладных программ
По-моему то, о чём ты просишь, не написано ни в одной книжке. Тебе нужна практика.

zorin29

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

YUAL

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

YUAL

Ну у нас видимо разные понятия о крупности проектов :) о в любом случае идти работать программистом я не собираюсь. так что возникает вопрос как ещ набраться опыта?

tokuchu

Если хочешь покопаться во внутренностях большого проекта, то может быть вот это поможет:
http://code.google.com/p/kernel-janitors/
Хотя возможно и не в тему и не о том. :)

yroslavasako

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

salamander

У тебя тут 4 совершенно разных аспекта в одной куче лежат
1. Техника написания кода - нарабатывается практикой. Практиковаться можно на каких-угодно задачках. Можно попрорешивать задачники по программированию любого курса любого факультета, где есть программирование на машинах. Можно какие-нибудь старые/текущие олимпиады порешать.
2. Знание алгоритмов. На практике вещь нужная, но без нее можно обходиться первое время. Читать лучше всего Кормена (Кормен, Лейзерсон, Ривест. "Алгоритмы: построение и анализ" практиковать - на каких-нибудь олимпиадках. В реальной практике анализ более важен, чем знание алгоритмов - чтобы понимать, что будет работать быстро, а что - медленно.
3. Проектирование своей (большой) программы с нуля. Ну... Тут процесс творческий, прочитать какую-нибудь книжку и сразу научиться не получится, хотя попытки написать такую книжку были. Так появились модель тяжелой разработки ПО, UML и связанные с ними вещи. Я бы не стал лезть в ту степь не имея вообще никакого опыта проектрования ПО.
4. Разобраться в существующем коде. Тут нужно копать в сторону твоих инструментов: тебе нужно какое-нибудь IDE, которое позволит находить объявления и исползования класов и функций, удобно искать по исходному коду. Ну и опять таки практика: чем больше читаешь чужой код - тем лучше получается.
ООП - инстурмент проектирования. Мощный, но сложный. Сначала будет созадвать трудности, потом (когда освоишь его) - окупится. Наверное...
Итого: 1+2 можно отрабатывать на любых алгоритмических задачах. Например, архивы каких-нибудь олимпиад. Пункт 3 - брать и пробовать. И анализировать свои ошибки. Насчет того, какое ПО выбрать для пункта 4 - надо просить совета у тех, кто имеет опыт хакания опенсорсных проектов на питоне.

Papazyan

Попытался сунуться в исходный ход других программ (а конкретно zim - такой менеджер заметок. я его использую и хотел подправить) и понял что нихера не смыслю в алгоритмах и принципах работы более-менее крупных прикладных программ. Во-первых там повсюду классы и ООП (а я с трудом смог за уши притянуть использование классов когда писал скрипты для форума. и то без них я бы написал быстрее а во-вторых я просто плохо представляю как например написать простейший текстовый редактор с нуля.
Конечно, чем крупнее проект, тем он должен быть сложнее и непонятнее, иначе он бы не был крупным и сложным проектом. Если ты изучишь один проект, это не даст тебе никаких знаний об остальных, потому что все они сложны и уебищны по-своему. Каждый писался несколькими поколениями быдлокодеров, при этом уже второе поколение не имело понятия, как устроена программа в целом и пихало свои правки по принципу "если сразу не упало, то все ок".
Алгоритмов никаких на самом деле там нет, потому что быдлокодеры, которые пишут эти проекты, никаких алгоритмов не знают. Ну может найдешь сортировку пузырьком в паре мест.
Вот паттерны программирования уже другое дело, это модное словосочетание и все его знают, а значит должны уметь пихать их везде, где можно, чтобы было что написать в резюме. Так что если увидишь, что задача сравнения двух строк решается десятком классов с интригующими именами типа Visitor или Factory, то это оно, можешь смело изучать.
Об open source проектах вообще забудь, там все еще хуже. Их в основном пишут или совсем опустившиеся быдлокодеры и юные студенты, которые ничего не знают, но считают себя умнее всех, либо мощные гуру, способные написать Линукс за ночь, считающие архитектуру, патерны и т.п. подпорками для слабаков.

freako

В ответ на:
а во-вторых я просто плохо представляю как например написать простейший текстовый редактор с нуля.
Текстовый редактор пишут еще на первом-втором курсе ВМК. так что выботать тебе придётся еще ой как много

freako

В ответ на:

вопрос 2 ради интереса
а ты писал какие либо достаточно огромные прикладные программы с кучей ООП
приходилось ли учавстовать в проектах , где работа идёт в комманде?

YUAL

Текстовый редактор пишут еще на первом-втором курсе ВМК. так что выботать тебе придётся еще ой как много
я думаю я где-то на этом уровне и остановлюсь (1-2 курв вмк) больше мне для себя и не надо

salamander

а ты писал какие либо достаточно огромные прикладные программы с кучей ООП
приходилось ли учавстовать в проектах , где работа идёт в комманде?
С кучей ООП - нет, большие программы - да, в команде - да.

YUAL

так где можно почитать хороший документированный код на питоне? можно не сильно большой навороченный проект. сойдет небольшая программа.
счас нашёл http://algolist.manual.ru/ и читаю там про алгоритмы, пытаюсь решать задачки.

pilot

так где можно почитать хороший документированный код на питоне?
Django?

YUAL

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

pilot

пугает только то что этож весьма навороченная фигня для новичка или нет?
Нет. Как раз фигня достаточно простая и понятная для новичка, за счет этого достаточно распространенная.

chriselwart

Мое вот личное мнение о python - язык очень крутой и функциональный, но его практически бесконечная сила сосредоточена в его модулях. Практически под любую задачу можно найти готовое решение/библиотеку и его использовать.
Для больших (относительно) проектов есть смысл посмотреть в сторону всяких фреймворков.
Мне больше всего понравились django и gae. И там и там есть MVC, есть хорошие доки, есть примеры внедрений.
Читай про них и будет тебе счастье.

lisnayt289

Вообще текстовый редактор пишется на ура в wxpython без особых проблем(рекомендую
Как альтернативу джанге советую заботать pylon, он сейчас набирает силу ;) (http://pylonshq.com/)

chriselwart

ты еще Zope вспомни. я так и не смог понять what is it.

pilot

Как альтернативу джанге советую заботать pylon, он сейчас набирает силу ;) (http://pylonshq.com/)
Где-нибудь можно про эту силу прочитать?
http://stackoverflow.com/questions/48681/pros-cons-of-django...
http://jordanovski.com/django-vs-pylons
И еще несколько статей оттуда по ссылкам прочитал — не нашел про силу ничего.

yroslavasako

мне больше нравится nagare. Правда для неё придётся отдельное окружение ставить: stackless-python. Тру-компонентный подход с минимумом работы с html и java script
Оставить комментарий
Имя или ник:
Комментарий: