Задать вопрос
@khomaldi
разбираюсь потихоньку

Основы, алгоритмы, проектирование. Как начать?

Здравствуйте. Мои шаги в мире программирования начинались с чтения книг типа "Научу писать код". Потом я понял, что эти книги совсем не эффективны для меня. Так я перешёл к изучению языков сразу за станком. То есть.. пишу скрипт на php, например. Встаёт вопрос "как разбить строку по разделителю?" Иду в поисковики, нахожу explode, потом php.net, смотрю документацию по этой функции.

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

Простите, если ваши глаза вытекли от вопросов подобного рода. (Думаю, они задаются стабильно раз в неделю, как и "Какой язык учить" или "С чего начать изучать программирование?")
  • Вопрос задан
  • 3523 просмотра
Подписаться 17 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 7
Olek1
@Olek1
Главное понимать, что компьютер по сути очень тупой, но скотина выносливая, порой даже очень. Он может выполнять только то, что вы ему скажете, его недостаток в том, что он не умеет видеть мелочи, и "додумывать" их за вас сам. Ему надо "объяснять" всё как ребёнку.
Ответ написан
@Zanak
Похоже у вас в голове все смешалось.
1. Что такое разработка программ? Думаю, ни чему не противоречит сказать, что это написание кода на избранном языке, направленное на решение задачи, поставленной перед разработчиком. Решение может использовать сколько угодно много алгоритмов, либо не использовать вовсе, кроме тех, что реализованы в стандартной библиотеке языка.
2. Алгоритмы? Алгоритм - это формальное описание решения проблемы, как правило, не привязанное ни к одному из языков программирования, и не являющееся самостоятельной программой. Например: поиск всех подстрок в тексте - это алгоритм, который может быть использован в программе, но сам программой не является.
3. Структуры данных? Структуры данных - это способ организации информации в памяти и/или на диске, для более оптимального ее использования, или применения к ней алгоритмов. Например: графы и алгоритмы на них.
4. Шаблоны проектирования? Шаблоны проектирования, в оригинале design patterns - это решения типовых ситуаций при проектировании приложений. Речь идет о достаточно крупных приложениях, хотя сложно выделить четкий критерий, когда приложение можно назвать крупным. В мире web приложений самый известный шаблон - это MVC, хотя вебом его применимость не исчерпывается.

С чего начать:
1. Знакомство с языком. Без знания языка все остальное бессмысленно. Начать лучше с известных языков, по которым много литературы и большое комюнити: C/C++, C#, Java, php7, python, JavaScript. Не гонитесь сразу за несколькими языками. Не гонитесь за новомодными языками, вроде go, rust или elixir, они решают проблемы, которые вам еще только предстоит понять. Не гонитесь за экзотическими языками, вроде lisp, haskel, erlang или ocaml, у них есть свои почитатели, но это не самый простой способ начать программировать. Выберете, что вам ближе, компилируемые, или скриптовые, со строгой типизацией или динамической, и вперед.
2. Потренируйтесь в реализации отдельных алгоритмов. Это позволит вам закрепить знание выбранного языка, расширит ваш кругозор и научит выделять эти алгоритмы в процессе решения более сложных задач. Здесь фундаментальный труд Дональда Кнута "Искуство программирования" вам в помощь, хотя одной этой книгой тема конечно не исчерпывается.
3. Теперь можно браться за задачи посложнее. Один нюанс, если вы пойдете в веб разработку: с нуля системы сейчас ни кто не пишет, все используют фреймворки. Возможно, было бы не плохо, покопаться в устройстве парочки таких продуктов, а в идеале, попробовать построить свой велосипед, чтобы лучше понять что, и как устроено и работает.
Ответ написан
Комментировать
solotony
@solotony
покоряю пик Балмера
Слова "алгоритмы, деревья, паттерны проектирования, шаблоны и т.д." для меня далеки. Подскажите, с чем начинать осваивать эту базу, которая применяется (как я понял с habr и форумов, где подглядываю логику) повсеместно в проектах хорошего уровня.


учи теорию. читай кнута. а иначе привыкнешь говнокодить и будешь всю жизнь говнокодить.
Ответ написан
@jazzus
Начинать полюбому с практики. Это в разы лучше по всем параметрам:
Занимаясь практикой, ты неизбежно учишь теорию
Ты не только узнаешь, что такое массив, но и ЗАЧЕМ он существует в этом мире
Практика формирует из тебя человека дела, а не любителя волейбола
С практикой ты достигаешь целей, которые можно пощупать или увидеть, а значит мотивация сама по себе (без психотренингов) будет несоизмеримо сильнее чем «завтра я выучу еще 2 новых термина и буду знать 2 новых термина, офигеть».
Стресс и дофамин от ожидания антилопы у водопоя сделают твое зрение острым, пальцы, бьющие по клаве - точными и быстрыми и память твоя будет запоминать все: как ты тратишь 3 часа на поиск решения проблемы и, как ты ее решаешь.
В теории память работает только в результате самоизнасилования т.к. мозг твой не дурак и не будет тратить драгоценные ресурсы на качественное запоминание того, что и так есть в книге. И да - данное понимание неизбежно приходит с развитием логики, которая также развивается исключительно в процессе практики программирования. Поэтому:
Основы, алгоритмы, проектирование. Как начать?

Легко. Бери Laravel и php неизбежно подтянется в процессе)
Ответ написан
Комментировать
syryshka
@syryshka
Журналист. PR/SMM-менеджер. Фотограф
Первое с чего Вам нужно начинать - это с работы в команде в конкретной, сильной IT-компании Junior-м. Не идите в крупные компании типа Kaspersky Labs, Epam, iTransition. Лучше в маленький стартап, например в Австралии.
Второе - это техника. Только Apple, два монитора для проекта и четкое понимание чем Вы хотите заниматься - UX/UI, PHP, Javascript(наиболее популярный язык программирования). Из среды разработки - Xcode, intellij idea, ресурсоемкий, atom с поддержкой node.js, git.
Третье - Вам важно понимать сам проект и его значимость. Яркий пример прекрасной игры - TLA с сюжетом на листе бумаги в клетку.

И последнее - посещайте митапы(Onliner - Минск, DevOps Engineer - Москва), Вам важно понимать к какому языку программирования Вас тянет. Вы освоите любой язык программирования тогда, когда сможете освоить его логику и методологию.
Ответ написан
tema_sun
@tema_sun
Вы все правильно делаете, хотя возможно это не самый быстрый путь.
Решение реально сущетвующих задач дает в тыщу раз больше опыта, чем чтение голой теории. Да, это будет говнокод первые пару сотен раз, но это процесс обучение и так у всех.
Главное, не переставайте задавать вопросы и пробуйте решить задачу лучшими способами. Возвращайтесь к своему когду через полгода-год и смотрите на него с ужасом, и думайте что за идиот это написал.

Короче, это долгая исотрия. Нет волшебной книжки, которую можно прочитать и стать крутым прогером.

Значительно ускорить процесс можно ментором, но он захочет много денег.
Ответ написан
Комментировать
iCoderXXI
@iCoderXXI
React.JS/FrontEnd engineer
Всё, что умеет компьютер - это взять данные "там-то", что-то вычислить, положить или отправить "туда-то"... Весь сложный функционал крутится вокруг этих простых функций. Поэтому без структур данных и алгоритмов никуда.

У каждой структуры данных своё предназначение. Есть относительно простые структуры, например плоский массив. Есть сложные навороченные структуры, типа JSON на мегабайты, но они всегда комбинируются из простых.

Есть простые алгоритмы, например просуммировать все числа из массива, или вычислить среднее. Есть сложные алгоритмы, которые так же комбинируются из простых.

Каждую структуру данных и каждый алгоритм нужно пощупать, прочувствовать, понять и овладеть. Плюс научиться декомпозировать задачи, определять где какие структуры данных и алгоритмы требуются, реализовывать их по отдельности, отлаживать, доводить до рабочего вида, и композировать, снова отлаживать и доводить до рабочего вида.

В целом это и есть процесс программирования. И тут нужно 99% упорной практики и щепотка теории.

Если достаточно упорно и долго практиковать, то со временем, многие решения уйдут на подкорку и будут получаться автоматически, не задумываясь, тогда можно переключаться на более сложные абстракции, типа паттернов и пр.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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