Обучение программированию. часть 2
в алгоритмах и принципах работы более-менее крупных прикладных программПо-моему то, о чём ты просишь, не написано ни в одной книжке. Тебе нужна практика.
Сам я в свое время познакомился с крупными проектами на работе, когда нужно было кое-чего в проекте править. При этом главный архитектор и программист мне все рассказал и нарисовал, как что с чем взаимодействует в проекте, и почему сделано именно так.
Так что посоветовать литературу по архитектуре и проектированию программ не могу, разве что Гради Буч.
ах да. ещё одна заморочка. я читаю технический английский, но большие объемы текста меня дико раздражают. наверно из-за разности скорости чтения на русском и английском.
Ну у нас видимо разные понятия о крупности проектов о в любом случае идти работать программистом я не собираюсь. так что возникает вопрос как ещ набраться опыта?
Если хочешь покопаться во внутренностях большого проекта, то может быть вот это поможет:
нужно найти большой проект на питоне, хорошо документированный и комментированный. А потом по кусочкам с ним разобраться, дописав что-нибудь своё для него в конце
1. Техника написания кода - нарабатывается практикой. Практиковаться можно на каких-угодно задачках. Можно попрорешивать задачники по программированию любого курса любого факультета, где есть программирование на машинах. Можно какие-нибудь старые/текущие олимпиады порешать.
2. Знание алгоритмов. На практике вещь нужная, но без нее можно обходиться первое время. Читать лучше всего Кормена (Кормен, Лейзерсон, Ривест. "Алгоритмы: построение и анализ" практиковать - на каких-нибудь олимпиадках. В реальной практике анализ более важен, чем знание алгоритмов - чтобы понимать, что будет работать быстро, а что - медленно.
3. Проектирование своей (большой) программы с нуля. Ну... Тут процесс творческий, прочитать какую-нибудь книжку и сразу научиться не получится, хотя попытки написать такую книжку были. Так появились модель тяжелой разработки ПО, UML и связанные с ними вещи. Я бы не стал лезть в ту степь не имея вообще никакого опыта проектрования ПО.
4. Разобраться в существующем коде. Тут нужно копать в сторону твоих инструментов: тебе нужно какое-нибудь IDE, которое позволит находить объявления и исползования класов и функций, удобно искать по исходному коду. Ну и опять таки практика: чем больше читаешь чужой код - тем лучше получается.
ООП - инстурмент проектирования. Мощный, но сложный. Сначала будет созадвать трудности, потом (когда освоишь его) - окупится. Наверное...
Итого: 1+2 можно отрабатывать на любых алгоритмических задачах. Например, архивы каких-нибудь олимпиад. Пункт 3 - брать и пробовать. И анализировать свои ошибки. Насчет того, какое ПО выбрать для пункта 4 - надо просить совета у тех, кто имеет опыт хакания опенсорсных проектов на питоне.
Попытался сунуться в исходный ход других программ (а конкретно zim - такой менеджер заметок. я его использую и хотел подправить) и понял что нихера не смыслю в алгоритмах и принципах работы более-менее крупных прикладных программ. Во-первых там повсюду классы и ООП (а я с трудом смог за уши притянуть использование классов когда писал скрипты для форума. и то без них я бы написал быстрее а во-вторых я просто плохо представляю как например написать простейший текстовый редактор с нуля.Конечно, чем крупнее проект, тем он должен быть сложнее и непонятнее, иначе он бы не был крупным и сложным проектом. Если ты изучишь один проект, это не даст тебе никаких знаний об остальных, потому что все они сложны и уебищны по-своему. Каждый писался несколькими поколениями быдлокодеров, при этом уже второе поколение не имело понятия, как устроена программа в целом и пихало свои правки по принципу "если сразу не упало, то все ок".
Алгоритмов никаких на самом деле там нет, потому что быдлокодеры, которые пишут эти проекты, никаких алгоритмов не знают. Ну может найдешь сортировку пузырьком в паре мест.
Вот паттерны программирования уже другое дело, это модное словосочетание и все его знают, а значит должны уметь пихать их везде, где можно, чтобы было что написать в резюме. Так что если увидишь, что задача сравнения двух строк решается десятком классов с интригующими именами типа Visitor или Factory, то это оно, можешь смело изучать.
Об open source проектах вообще забудь, там все еще хуже. Их в основном пишут или совсем опустившиеся быдлокодеры и юные студенты, которые ничего не знают, но считают себя умнее всех, либо мощные гуру, способные написать Линукс за ночь, считающие архитектуру, патерны и т.п. подпорками для слабаков.
а во-вторых я просто плохо представляю как например написать простейший текстовый редактор с нуля.
Текстовый редактор пишут еще на первом-втором курсе ВМК. так что выботать тебе придётся еще ой как много
вопрос 2 ради интереса
а ты писал какие либо достаточно огромные прикладные программы с кучей ООП
приходилось ли учавстовать в проектах , где работа идёт в комманде?
Текстовый редактор пишут еще на первом-втором курсе ВМК. так что выботать тебе придётся еще ой как многоя думаю я где-то на этом уровне и остановлюсь (1-2 курв вмк) больше мне для себя и не надо
а ты писал какие либо достаточно огромные прикладные программы с кучей ООПС кучей ООП - нет, большие программы - да, в команде - да.
приходилось ли учавстовать в проектах , где работа идёт в комманде?
счас нашёл http://algolist.manual.ru/ и читаю там про алгоритмы, пытаюсь решать задачки.
так где можно почитать хороший документированный код на питоне?Django?
пугает только то что этож весьма навороченная фигня для новичка или нет?
пугает только то что этож весьма навороченная фигня для новичка или нет?Нет. Как раз фигня достаточно простая и понятная для новичка, за счет этого достаточно распространенная.
Для больших (относительно) проектов есть смысл посмотреть в сторону всяких фреймворков.
Мне больше всего понравились django и gae. И там и там есть MVC, есть хорошие доки, есть примеры внедрений.
Читай про них и будет тебе счастье.
Как альтернативу джанге советую заботать pylon, он сейчас набирает силу (http://pylonshq.com/)
ты еще Zope вспомни. я так и не смог понять what is it.
Как альтернативу джанге советую заботать pylon, он сейчас набирает силу (http://pylonshq.com/)Где-нибудь можно про эту силу прочитать?
http://stackoverflow.com/questions/48681/pros-cons-of-django...
http://jordanovski.com/django-vs-pylons
И еще несколько статей оттуда по ссылкам прочитал — не нашел про силу ничего.
мне больше нравится nagare. Правда для неё придётся отдельное окружение ставить: stackless-python. Тру-компонентный подход с минимумом работы с html и java script
Оставить комментарий
YUAL
Как быстро летит время. Вроде совсем недавно (а оказывается, что в феврале) я создавал про то с чего лучше начать обучение программированию вообще и питону конкретно. Недавно (а на самом деле три месяца назад) у меня дошли руки и я таки прочитал пару книжек по питону (и ещё пару каких-то руководств кривых, но это шлак). Пописал простенькие программки в духе вычисления факториала и т.п. Потом написал немного скриптов для вытягивания разной статистики с форума, написал эмулятор игры жизнь.Попытался сунуться в исходный ход других программ (а конкретно zim - такой менеджер заметок. я его использую и хотел подправить) и понял что нихера не смыслю в алгоритмах и принципах работы более-менее крупных прикладных программ. Во-первых там повсюду классы и ООП (а я с трудом смог за уши притянуть использование классов когда писал скрипты для форума. и то без них я бы написал быстрее а во-вторых я просто плохо представляю как например написать простейший текстовый редактор с нуля.
Короче чтоб такого почитать по интересующему меня вопросу? я так понял это называется паттерны программирования. ну и вообще. может кто чё умное скажет.
UPD: счас читаю шеня, но чё-то мне поднадоело решать абстрактные задачки