@DigitalEmotions

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

Здравствуйте! Я - фронтэнд-говнокодер) Я немного знаю PHP, JS и jQuery (учил по learn.javascript.ru и Codeacademy), но у меня нет профильного технического образования и я не знаю очень многих вещей, вроде построения правильных алгоритмов, парадигм программирования и т.д.
Только сейчас мне пришло понимание, что без этого дальше двигаться невозможно.
Теперь вопрос - как лучше получать эти знания? Получить второе высшее? Или самостоятельно почитать какие-то книги? У меня нет цели стать крутым кодером, хочется знать все это, в основном, для себя.
  • Вопрос задан
  • 901 просмотр
Решения вопроса 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 полно видео по этой тематике. Главное желание, материала полно. Диплом не нужен.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы