@DigitalEmotions

Как лучше получить базовые знания по программированию?

Здравствуйте! Я - фронтэнд-говнокодер) Я немного знаю PHP, JS и jQuery (учил по learn.javascript.ru и Codeacademy), но у меня нет профильного технического образования и я не знаю очень многих вещей, вроде построения правильных алгоритмов, парадигм программирования и т.д.
Только сейчас мне пришло понимание, что без этого дальше двигаться невозможно.
Теперь вопрос - как лучше получать эти знания? Получить второе высшее? Или самостоятельно почитать какие-то книги? У меня нет цели стать крутым кодером, хочется знать все это, в основном, для себя.
  • Вопрос задан
  • 906 просмотров
Решения вопроса 2
magalex
@magalex
Архитектор распределённых систем управления
Поставить перед собой задачу (например написать тетрис или змейку) и реализовать её.
Ответ написан
Комментировать
@LeonidShifrin
Разработчик, Wolfram Research Inc. PhD, Physics
Изучите один из функциональных языков. Проще всего начать со Scheme. Это поставит Вам мышление правильно, и даст общее понимание принципов программирования. Вам уже советовали SICP, я еще от себя добавлю HTDP (How to design programs) - как раз рассчитана на начинающих. Порешайте на нем алгоритмические задачи. Хороший источник - Project Euler. По более общим задачам посмотрите Rosetta Code. Не ставьте задачу сразу начать применять это к Вашим приложениям, просто спокойно развивайтесь.
На первом этапе постарайтесь по минимуму использовать готовые библиотеки - разве что для проверки.

Постепенно переходите к более сложным задачам. Не зацикливайтесь на чисто алгоритмических задачах - они хорошо ставят мышление, но в реальной жизни лишь часть кода полностью алгоритмизуется, и дизайн кода занимает большее место чем именно алгоритмы (если не брать более специализированные области вроде ML). Если не брать математические задачи, то хорошие задачи возникают в областях работы с текстами, преобразования данных. Скажем, упрощенный вариант HTML или XML парсера, или задачи по анализу текстов, или например перевод данных из одного формата в другой. Напишите пару простых интерпретаторов. Реализуйте парсер для какого-нибудь языка (возможно, его упрощенного варианта). Не стесняйтесь находить ресурсы с тем, что близко в Вашим задачам, и читать чужой код (это необходимо!) - но и не работайте по принципу copy - paste.

Неплохой задачей будет например реализовать парсер и интерпретатор для какого-нибудь trading - языка, вроде metastock, с парой десятков основных финансовых индикаторов. И к нему в довесок - собственный упрощенный парсер скажем CSV формата - так что Вы сможете загружать данные по стокам и прогонять торговые стратегии целиком на собственном коде. Ну и например, генератор HTML - отчета с графиком и точками входа и выхода для данной стратегии, плюс отчетом о доходности. Можете потом поднять простое web-приложение, которое будет гонять торговые стратегии на исторических данных, хранящихся скажем как CSV файлы - и все это на Scheme. Потом можете перейти на использование реальной БД. Это уже будет в совокупности неплохой проект. Чем меньше будете использовать готовых библиотек - тем лучше, цель здесь - учеба, а не максимальная эффективность.

Почувствуйте как средства языка позволяют писать лучший код. Освойте на практике основные принципы: отделение интерфейса от имплементации, факторизация общего кода, сокрытие информации, модуляризация кода, отделение поведения от состояния (это общие), ну и вкусные вещи от функционального стиля - преимущества неизменяемого состояния, функции высшего порядка, замыкания, рекурсия, рекурсивные структуры данных, метапрограммирование.

После этого, Вам станет понятным многое из того, что при другом подходе придется просто запоминать и брать на веру, в более распространенных языках типа Java или Python. Вы будете в состоянии отличить действительно важные черты языка от чисто утилитарных. В том числе, Вы сможете увидеть и слабые места изучаемых языков, отсутствие определенных важных абстракций, и как эти проблемы решаются. В конечном счете, Вы сможете на глубоком уровне освоить другие языки в гораздо более сжатые сроки. И не станете бездумным адептом той или иной модной сейчас религии (ООП, шаблоны проектирования, и т.д.) - а будете понимать место этих вещей в общей картине.

И еще один момент: если у Вас хромает Английский, подтяните его. Специально этим не нужно заниматься, просто читайте литературу на Английском - всегда. Это сделает Вас частью большего сообщества, даст доступ к гораздо большей базе ресурсов. На более продвинутом уровне, это важно еще и потому, что Вам будет легче писать код, когда Вы начнете думать на Английском - он ближе к формальным языкам.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
@JihadTV
Вот отличный вариант https://map.hexlet.io/stacks/php
Другой вариант - изучайте SICP, TAPL. После них 100% лвлап в кодинге будет.
Ответ написан
Комментировать
angrySCV
@angrySCV
machine learning, programming, startuping
ну изучай книжки, там типа основы алгоритмов и структур данных, потом типа продвинутые алгоритмы и дополнительные структуры данных, потом там чёнить типа контесты порешай.
ну и само собой читай чужие проекты, исходники, и пиши свои.
Ответ написан
Комментировать
@sergeystepanov1988
Забей и иди работать. Заказчику нужен результат, а не твои алгоритмы. За 5 лет работы программистом я понял следующую мысль очень отчетливо: habrahabr.ru/post/256175
P.S. И да, диплом все таки нужен. Но что парадоксально, его потребуют именно там, где как раз нужны будут эти самые алгоритмы. В основном это крупные компании по разработке программного обеспечения, где культура кода стоит во главе угла.
Ответ написан
Комментировать
@Remixez
Есть много книг по алгоритмам и тому подобное.
Также на Youtube полно видео по этой тематике. Главное желание, материала полно. Диплом не нужен.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы