Я бы сделал это:
Путь A: Полутипичный метод
Изучайте язык с более упорядоченным синтаксисом, таким как Java, C # или Python. Perl - безумно полезный инструмент, но он также очень свободен в плане того, как он позволяет вам что-то делать. Другие языки, которые я перечислил, намного, намного меньше.
Получить книгу о структурах данных на указанном языке.
Получить книгу по алгоритмам на указанном языке.
Получить полный и эффективный код Java / C # / Независимо от версии Python.
Путь B: Путь Просвещения Джоэла Спольски (или Смерть, сделай свой выбор)
Получить книгу "Код"
Получить K & R "Язык программирования C"
Получить структуру и интерпретацию компьютерного программирования
Что касается метода, метод 1 научит вас программированию более упорядоченным образом. В некоторой степени концепции компьютерных наук (теории сложности пока нет, поверьте мне) и предоставляют вам язык, который лучше подходит для работы в проектах с другими людьми и для создания более крупных приложений.
Метод 2 более хардкорный, это гораздо более фундаментальный подход с «Кодексом», объясняющим основы, K & R вводит материал машинного уровня, а SICP вводит концепции более высокого уровня. Это гораздо сложнее, но более целенаправленный путь.
В любом случае, дайте себе время. Рим не был построен за один день, и у него нет навыков программирования, даже если вы гений в этом. Программирование Питера Норвига за 10 лет - обычное эссе, на которое я указываю людям.
Приложение:
Что касается доступных бесплатных вещей: Python the Hard Way, как указано ниже, является хорошим началом, оттуда, Как думать как компьютерный ученый, является разумным продолжением.
Существует множество ресурсов по Алгоритмам, и, честно говоря, вы, вероятно, могли бы переключать шаги 3 и 4 без проблем. Имейте в виду, что здесь действительно начинает появляться математика, поэтому никогда не бойтесь просить о помощи, когда доберетесь до этой стадии. Это, кажется, разумное бесплатное руководство .
На самом деле не существует связного бесплатного эквивалента Code Complete, хотя Code вроде Pythonista выглядит довольно солидно. Главное - сконцентрироваться на том, чтобы сделать ваш код читабельным, как только вы освоите основы. Это не «необходимо» так же, как правильный синтаксис всего кода, но это значительно облегчает жизнь, когда вы выходите за рамки небольших программ или работаете над чем-то в течение длительного периода времени.
Вы можете обнаружить, что я сосредоточился в основном на Python, потому что это самый простой из трех, чтобы найти хорошо написанные бесплатные вещи. Я думаю, что уроки Java от Oracle хороши, но они немного суховаты и не очень хороши для начинающих. C # находится в аналогичной ситуации, хотя и не страдает от отсутствия документации.
Кроме того, ваша первая CS шутка / каламбур: вы хотите «рефакторинг» своего образования, а не Backtrack.