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

 Всем привет ! Ситуация на данный момент у меня такая: Я знаю инструменты для решения задачи и даже знаю как должна задача работать. Но когда дело доходит до программирования.Порой не знаю что и как написать чтоб это все выполнялось.Хотя повторюсь еще раз 
> знаю и инструменты и знаю как должна работать программа

  

И от этого внутри очень неприятно.  

Хочу раз и навсегда исправить этот нюанс в себе и для этого подготовил ряд вопросов:  

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

Какие книги на эту тему прочитать ?   

Какие курсы/практики лучше использовать для это ?  

И когда вы только начали программировать,сталкивались ли с этим? 

 практика. от простого к сложному 

> И когда вы только начали программировать,сталкивались ли с этим?

  

В первые несколько лет работы алгоритмическое мышление и знание алгоритмов мне вообще не требовались. Да и сейчас не приходится писать собственных реализаций балансировки красно-чёрного дерева или обхода ориентированного графа. 

> знаю и инструменты и знаю как должна работать программа

 - иди от обратного, тебе надо знать **как будет работать сам процесс**, а уже потом к абстрактному процессу ты начинаешь цеплять куски кода. То есть сам принцип сначала появляется в голове и потом воплощается в коде.  

То есть например тебе надо вывести новости на странице по категории, для этого тебе надо как-то сказать какую категорию ты хочешь отобразить, затем вытащить все новости из хранилища и отобразить отсортировав. Вот у тебя нарисовались 3 шага, дальше отрабатывай каждый шаг с помощью того языка программирования который знаешь. 

 Раз ты знаешь, как должна работать программа, то в чем проблема описать все действия? Вероятнее всего ты плохо знаешь "инструменты".  
  

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

Алгоритм - это лишь порядок действий. Ты не можешь записать с клавиатуры порядок действий?  
  

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

Любую задачу можно распилить на части - шаги. Последовательность шагов - это и есть алгоритм.  

После этого каждый шаг нужно написать на нужном тебе языке. Всё, задача выполнена.  
  

Возможно тебе будет проще, если накинешь пример задачи, с которой у тебя возникли такие трудности. Мы попробуем показать на этом примере. 

 Нельзя стать фехтовальщиком, почитав книги и посмотрев видяшки. Нужно потратить много времени на практику.  
  

По какой-то, совершенно непонятной причине, многие новички относятся к программированию, как к чему-то, что можно изучить теоретически и сразу пользоваться. Но нет.  

Нужно потратить МНОГО времени на практику.  
  

Поэтому:  

> знаю и инструменты и знаю как должна работать программа

  

Как долго вы пользуетесь этими инструментами для решения задач, и как много программ вы написали?  

Почему вы считаете, что вы знаете инструменты? Знаете их названия и что они делают в общих чертах? Не путайте это с реальным умением пользоваться инструментом.