Я школьник. Вроде связан с программирование давно, но этому занятию совсем безолаберно относился, а когда осознал стало поздно. Не в этом даже суть. Моя задача на текущий момент заработать себе диплом. Идеальная цель олимпиада ИТМО по информатике, но там тоже есть программирование хотя и совсем несложное.
На одно ИТМО я боюсь полагаться, хочется попробовать взять Ломоносова, 2ой уровень, хотя бы чуток далек, как мне кажется, от серьезных олимпиадных контестов, куда мне дорога закрыта. Мои знания очень узкие: реализовать бин. поиск, qsort, слиянием, ДП, Длинная, простейшие структуры данных. Собственно скудный набор. Причем все это я пишу, решаю, реализовываю на очень медленной скорости, с ошибками, долго их пытаюсь от дебажить. Т.е. еще и код сам по себе выходит скверный, некачественный. Даже простые задачи иногда решаю очень громоздко, не эффективно.
Я осознаю, что это все решается временем и тренировками. У меня его катастрофически мало. Я хотел бы у вас узнать, какие есть пособия, может советы, которые смогут мне помогут хотя бы ускорить процесс написания и дебага программ.
Улучшить понимание выполнения, компиляции программ. Я в этом деле по сути профан, но попытаюсь аккуратно свои мысли донести до вас. Т.е. чтобы у меня не было ошибок связанных при работе с типами, т.е. когда идет преобразования short в int, при работе с числами с плавующей. И всякие такие моменты. Есть книга Таненбаума "Архитектура компьютера". Но она дико большая даже для свободного чтения в маршрутке, и там много лишнего, даже если и есть что-то полезное.
И второй вопрос: есть ресурсы informatics.mccme.ru acmp.ru и книга competitive programming.
Informatics - давно с ним работаю, решаю потихоньку задачки. На всякую динамику (Например, Расстояние по Левенштейну), на рекурсию раньше, задачки решал по нескольку дней. Очень долго, и когда на олимпиаде получаю задачи соответственно быстро не могу ничего решить. Как я понял по рассказу друга, он большинство задач тупо решал с другим условием, поэтому проблем особых не возникает узнать метод, а потом его реализовать. У меня проблема в этом всегда. Ну только если "Найдите максимум, посчитайте кол-во всех ..," я понимаю, что, вероятнее, динамика.
acmp.ru - 0 теории, много задач, раньше пытался на нем решать, только после лекций преподавателя, толку 0.
competitive programming - новая книга, вообще не представляю, что можно от нее ждать. Любезно поделился друг, сказал полезно будет. Но я думаю, что с ней нужно много работать, сейчас для меня не лучший вариант.
Простите за кашу, за много лишних слов.
Заранее большое спасибо. Думаю, по наводящим вопросам, я смогу потом сделать из этого трепа более менее конкретную проблему и вопрос.
Главная все-таки цель: увеличить время написания и качество кода. Меньше времени на дебаг, меньше ошибок, меньше разбираться в треше, который я пишу, т.е. меньше всякий треш писать.
Сперва школьное образование, учебники, вступительные курсы - самая база.
Дальше обычно идут задачки, онлайн-курсы - для простенького закрепления и освоения.
Но нормальное становление идет так:
Просто пишешь программы. Много. Или много мелких или одну крупную. Решаешь конкретные задачи. Написал свой калькулятор. Написал себе программу, которая выводит расписание в html, написал сайт по сбору статистики матчей в дотку и работаешь с этой статистикой чтобы прикинуть порядок сборки или еще какие-то моменты. Написал свой скрипт бэкапа важных документов. Написал свой конвертер-ресайзер фоток.
Главное чтобы конечный результат выполнения программы был понятен лично тебе, и ты мог сам решать когда он тебя устраивает, а когда допилить.
Между написанием программ читаешь различные книжки, и уже тогда, когда у тебя есть ПРАКТИЧЕСКИЙ опыт написания программ, ты в книжках можешь наткнуться на более удачное решение проблемы, с которой ты сталкивался и уже писал велосипед.
Быстрых методов стать хорошим программистом, прочитав книжку - не выйдет, ибо без личного опыта долбления лбом об стену, тебе будет непонятно что именно ты прочитал и насколько это важно.
Правильный совет тебе уже дали в первом ответе - что нет какой-либо суперовой книжки. Все книжки - относительные, и не смогут сделать за 2 месяца из новичка олимпиадника. Поэтому просто пробуй программить и парралельно читать просто популярные книжки по тому языку, который ты сейчас используешь.
Как вам сказали, такой книги нет. И быть не может. Ни одна книга не может покрыть каждый трюк и технологию используемую в программировании. Методы, которые являются официально одобренным способом решить задачу в одном языке, могут быть восприняты как признак плохого стиля и малого опыта в другом. Некоторые не могут быть применены к данному языку вообще; некоторые имели смысл раньше, но считаются вредными сейчас, если ты не пишешь для старых систем; некоторые полезны при каком-то определённом стиле программирования, но бесполезны при другом, причём оба этих стиля широко используются.
Расписывать ли структуру приложения перед тем как приступить к написанию или использовать подход "пишем как придётся, потом отрефакторим"? Оба этих подхода работают. Просто нужно понимать, когда какой использовать. И это подводит к основному.
Программирование это опыт. Никакое количество книжек не сделает тебя программистом если не писать код. Невозможно полноценно понять ни один совет из книжек по проектированию, паттернам, best practice и т.п., если ты ни разу не столкнулся с проблемами, которые они решают. Поэтому: macode.ru
Ну конечно есть чудо-книга, которая заменит вам многолетний опыт разработки. Только все столь коварны, что не скажут какая же это книга. И поисковые системы данные про нее тоже удаляют моментально. Почему бы вам не подумать о причинах, которые вам помешали найти такую книгу самому?
Мекаель: О чем и речь: им не нужны умные, им нужны верные. Вот уже и мотивация появилась для скрывальщиков из этой бредовой теории. И, главное, в это проще поверить чем в отсутствие чудо-книги.
"Я осознаю, что это все решается временем и тренировками. "
Я не надеюсь, что сейчас соберется вся аудитория toster и дружно решит мою проблему. Я думал, что вы поможете натолкнуть на то, в какой из возможных вариантов подготовки увеличит мою продуктивность и шансы на олимпиаде Ломоносова, на ИТМО быстро реализовать какой-нибудь перебор задачки.
Это может быть книга, рассказывающая про устройство ПК, может быть это нарешивание задач на informatics, на другом более полезном для меня ресурсе, может competitve programming стоит прочитать пару глав, в которой написаны советы на тему "Спортивное программирование", может мне вообще стоило бы просто лучше разобраться в языке, от этого возможно проблем. Мне трудно разобарться, я решил с вами посоветоваться.
Владимир Мартьянов: Я еще раз говорю, что я понимаю, что я прочитаю книгу и напишу любой код.
Вот вы пишете программу, без отступов, просто в столбик, а потом вам дают совет, что если писать и делать отступы больше, и как-то пытаться отдельные блоки кода аккуратно обособлять, код будет более читабельным и писать будет легче. Это не значит, что вы вдруг стали в разы быстрее дебажить или писать. Но вам стало легче, вы сдвинулись с места.
Я прошу подобной помощи. КНИГУ, в которой я смогу столкнутся со своими ошибками.
Владимир Мартьянов: Браво. Вы программируете так жу здорово, как шутите?
Спасибо, что попытались помочь, а не тапками закидали. Сказать парочку советов из рода "Competitive programming - немного рановато, решай на informatics больше вариантов нет и т.п." зачем? Я лучше пару шуток опушу о том, как этот школьник хочется все и сразу и какие валенки нынче растут.
Дмитрий, советов по олимпиадному программированию у меня нет, но есть совет по поводу общения: вот таких ребят, как выше, которые либо доводят вашу точку зрения до абсурда, либо и вовсе выдумывают её за вас, и начинают опровергать именно её, а не вашу реальную — их просто игнорьте и времени на них не тратьте, конструктива обычно от них ждать не приходится. И уж конечно не обращайте внимание на их попытки личных выпадов. Удачи :)
Не буквально за два дня. У меня есть пару месяцев. Чтобы я эти месяци не слил на изучения Pyhton как лучший способ писать быстро и эффективно, я решил посоветоваться.