Я б це зробив:
Шлях А: Напівтиповий метод
Вивчіть мову з більш регульованим синтаксисом, таким як 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 за висловом, хоча код як Pythonista здається досить солідним. Найважливіша річ - зосередитись на тому, щоб зробити ваш код читабельним, коли у вас є основні принципи. Це не "потрібно" так само, як правильний синтаксис коду є правильним, але це робить життя набагато простіше, коли ви виходите за рамки невеликих програм або працюєте над чимось протягом тривалого періоду.
Ви можете виявити, що я зосередився переважно на Python, це тому, що найпростіше з трьох знайти добре написані безкоштовні речі. Я думаю, що навчальні програми Java від Oracle чудово підходять, але вони трохи сухі і не чудові для початківців. C # перебуває у подібній ситуації, хоча жоден не страждає від браку документації.
Крім того, ваш перший жарт CS / каламбур: ви хочете "Refactor" вашу освіту, а не Backtrack.