Подскажите, где и как практиковаться в программировании (интересуют C-подобные языки и не только, вопрос о программировании вообще). понял - просто сухая теория бесполезна, унылые задачки по программированию, даже олимпиадные - унылы не меньше. графы, списки, стеки, очереди... - УГ. где их практическое применение? подскажите книги, сайты, где качать исходники и пр. полезные обучающие вещи. учиться никогда не поздно... Прошу не предлагать банальных книг, а также книг по структурам данных и алгоритмам, нужно что-то действительно приближенное к реальности. заранее спасибо
из-за технических проблем топ 2 раза добавился, прошу не удалять (сообщения могут добавляться в оба) и извинить за доставленные неудобства
Уверен? 1) очереди - пожалуй самая нужная вещь. Пример: - один поток извлекает запросы клиентов, кидает в очередь, а куча потоков разбираются данные из очереди выполняют все действия. - допустим логирование на основе очереди, когда важная скорость. К примеру программа должна писать в БД лог. Вся обработка данных идет асинхронно. И тогда запись в лог будет тормозить всю обработку. По этому данные добавляются по быстрому в очередь и потоки продолжают свою работу, а уже отдельный поток разгребает очередь и закидывает всё в базу. - абсолютно любые задачи, где данные поступают от большого числа потоков, но должны обрабатываться последовательно. синхронизация не всегда помогает. Или наоборот. один поток генерирует данные и ставит в очередь, а другие потоки извлекают. - множество программ работающих по асинхронной модели, или модели сообщений. Тогда очередь сообщений очень важная. т.е. часто используется в серверных приложениях. (работа с базой и обработка запросов клиентов) 2) стеки - менее популярны, но всёже. К примеру опять же на основе стеков реализуется один из видов очередей. Еще стеки примеряются для всяких отладочных и информационных удобств. пример на входу в функцию, помещается её имя в стек, на выходе извлекается. если в функции к примеру что-то не так пошло, то можно сохранить всю последовательность вызова функций и всяких прочих операций. Удобно для отладки клиентских приложений, когда ошибка случайна и дампы особой инфы не дают о состоянии переменных и прочих вещах. особенно когда переполнение буфера идет 3) списки - ну тут как бы вообще очень популярная вешь, особенно когда тебе надо хранить в памяти структры, но ты заранее не знаешь сколько их будет. по этому списки (в частности двусвязные) как раз и позволяют это сделать. т.е. списки это основы при работе с динамическим выделением памяти заранее для заранее неизвестного кол-ва элементов. объяснять что это повсеместно используется не буду. К томуже опятьже некоторые типы очередей строятся на основе списков (как альтернатива на основе стека) 4) графы - это уже для очень сложные программ по вычислению оптимального пути решения задачи. встречаются в бизнес приложениях и прочих. Так что само по себе это нигде не применяется, но при этом является связующем звеном более сложных вещей. Если так посмотреть, то очереди и списки применяются на компе практически везде, ты этого только не замечаешь Опять же алгоритмы, это по началу кажется что не нужно. А потом при работе и методы сортировки начинаешь использовать, и поиска кратчайщего пути, теорию графов вспоминаешь, синусы и косинусы и прочую тригонометрию, причем там где меньше всего этого ожидаешь. Так что не надо так категорично ко всему относится, если тебе пока что это не нужно, то это не значит, что это бесполезно. А вообще если хочешь что-то реальное - MSDN (для Win) и man (для *nix) и там будут описаны функций которые применяются повсеместно. Хочешь попрактиковаться в чем-то путном. напиши какое-либо сетевое приложение. Самый хороший вариант - заходишь на фриланс.ру и там смотришь самые простые заказы которые есть у людей. и потом сам для себя это реализовываешь. таким образом 1) набираешься опыта 2) делаешь реально востребованные вещи, наиболее приближенные к реальности 3) всегда есть идея, что реализовать. т.е. вся задача поглядеть идею для собственного саморазвития. Когда начинаешь реализовывать что-то, то начинаешь постепенно сталкиваться со множеством вещей, тем самым изучая не только язык, но и общие принципы программирования. т.е. всяческая литература нужна чтобы ты знал минимальные вещи, чтобы имел представления о неких процессах обработки данных и их реализации. И чтобы не изобретать велосипед. Как говорится - большое строится из малого. Вот это малое и даётся в книгах, а то, что ты построишь из этого - это уже зависит от тебя и твоего опыта.
понятно, еще раз всем спасибо. я все понял. попрошу модеров закрыть или вообще удалить все эти смежные темы (по практике программирования) еще в 3-х топах (+ 2 практический ассемблер)