Как перерасти из кодера в программиста?
=========================================

 День добрый.  

Поясню вопрос:   

Кодер (для меня) - человек, который способен писать хороший код  

Программист - специалист, которые разбирается во многих аспектах языка на котором работает, а также в смежных областях, вроде математики.  

На данный момент я могу себя позиционировать как C++ кодер - знание и использование всех стандартов до 17 включительно, умение работать с многопоточными примитивами, умение оптимизировать код, разбираться с чужим и т. д.  

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

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

 Думаю хорошие программисты все идеалисты. Именно поэтому им все время не нравиться то, что они делают. Сегодня тебе кажется, что ты пишешь красивый код. А через месяц смотришь на свой тот же код, и думаешь: - "блин что за урод это писал, ну как так можно".)) 

 Кодер и программист это одно и то же, как мне кажется.  

С лингвистической точки зрения это тот человек который владеет языком машины.  

Тот кто умеет писать код - то есть умеет заставить машину работать.  
  

На самом деле в природе такое разделение:  
  
**1) слесари монтажники** (работают в рамках готовой архитектуры) 90% популяции  
**2) инженеры** (разрабатывают архитектуры) 10% популяции  
  

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

> и ищу оптимальные методы на протяжении нескольких часов

  

"Преждевременная оптимизация — корень всех зол."  
  

> писать красивый и эффективный код

  

Наверно скорее красивый. Как Вы оцениваете эффективность, если сами пишите, что не имеете представления о структурах данных и классических алгоритмах.  
  

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

Смежные области сами подтянутся по мере необходимости. 

> Пока что штудирую книги по алгоритмам, но мне этого кажется мало

Есть ещё необъятный пласт - бизнеслогика. Там математикой не особо пахнет. Это особое колдунство. 

 Я думаю, что всё у тебя нормально. Депрессивыне мысли в нашей профессии встречаются. Если хочешь перемен, то найди(смени) работу, где у вас будет четкий дедлайн до которого у тебя не будет времени над обдумыванием а как вот тут красиво, а как вот здесь подправить. Просто берешь и делаешь, и всё.  

Ну и книги книги читать 

<https://habr.com/post/251747/>  

[https://tproger.ru/curriculum/computer-science-ste...](https://tproger.ru/curriculum/computer-science-step-by-step/) 

 Ваша проблема в том, что вы не планируете разработку программы.  

Задайте себе вопрос: что я смогу написать за сегодня?  

И постарайтесь это написать.  

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

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

Если вы найдёте способ программу объёмом, допустим, в 10 человеколет написать за 5 человеколет, то это уже будет сделать экономически выгодно. Вы начнёте искать варианты финансирования своего проекта.  

Так и создадите успешную компанию по разработке ПО.  

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

Но чем больше вы знаете, тем дороже стоит ваше время, и года через три у вас уже не будет этого месяца. Поэтому вам надо научиться программировать быстро, то есть экономически эффективно.  

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

 >>Программист - специалист, которые разбирается во многих аспектах языка на котором работает, а также в смежных областях, вроде математики.  
  

Математика уже "Смежная область"? Дональд Кнут плачет кровавыми слезами.   
  

>>На данный момент я могу себя позиционировать как C++ кодер - знание и использование всех стандартов до 17 включительно,   
  

Со всеми версиями компиляторов и фрэймворков? Хотел бы я посмотреть на человека, который знает весь Boost/Qt/SDL/Gtk.   

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