Верен ли такой подход к изучению программирования?
====================================================

 Здравствуйте. Я постигаю азы разработки на Android. Решил начать с калькулятора. До этого писал лишь лабы на C и простенькие задачи на java, т.е. кроме пузырька, верчения строк и матриц в консоли я ничего не делал.  
  

Калькулятор почти готов, но меня просто угнетает то, что я не сам его написал.  

Да, полностью сам сверстал UI, но логику практически полностью скопировал, конечно, досканально в ней разобравшись.  

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

Верно ли направлен вектор? В будущем, перейдет ли количество при таком подходе в качество? 

 В современном мире 80% задач решается копипастом чужого кода и небольшой правкой. (Британские учены доказали).  

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

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

Т.е как-то так:  

- Копипастим  

- Разбираемся почему и как оно работает  

- Удаляем все, создаем новый проект и пишем все с нуля без подсказок (ручками).  
  

Такой подход будет более эффективен.  
  

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

 Ну собственно 99,9% программистов берут такой вектор развития. Оставшийся процент видимо те у кого нет интернета :)  
![29437996.jpg](http://d.gr-assets.com/books/1457364208l/29437996.jpg)  

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

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

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

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

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

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

Ибо подход должен быть интеллектуальным, а не категоричным "да/нет".  

Если "да" - то есть ставить целью в рамках любой задачи раскопать все на свете до последнего бита, то придется копать все стандартные библиотеки, платформы, IDE, ОС (а че? вдруг пригодится? бывает) - то сами понимаете, никакого времени не хватит, и реальный заказчик такое времяпрепровождение не оплатит.  

А если "нет" - то есть всегда и везде плавать на поверхности - то вы будете не уникальны и многое не осилите.  
  

Т.е. отталкиваемся от задач, а откуда же брать сами задачи?  

А их берем из более глобальных целей: фриланс, работа в конторе, такие-то направления...  

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

 Ну, во-первых, всегда надо с чего-то начитать. Во-вторых, зачем изобретать велосипед. Если есть готовый код то почему бы его не использовать. С другой стороны и злоупотреблять копипастом то же не стоит. Часто густо встречаются вопросы типа "Где найти компонент ...", "У кого есть код ..." . Простое правило: "Знаешь где скопировать - копируй, не знаешь - напиши сам (не забудь дать скопироват другим)" 

 Читать чужой код не менее полезно, чем писать свой. Особенно если это хороший чужой код. 

> Калькулятор почти готов, но меня просто угнетает то, что я не сам его написал

  

ДНК свою ты тоже не писал, но не тебя же это не угнетает, верно? А она сама себя копипастила миллиарды лет без зазрения совести. Бери пример с ДНК  

Главный двигатель прогресса твоего взросления как программиста это то насколько ты быстро научишься копипастить, понимать возможности и ограничения твоих инструментов  

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

Попробуй найти изъяны в твоем коде сам. Потом попроси опытных товарищей. Потом перепиши. Потом повтори снова N раз. Ставь каждый раз более сложные цели, не бойся больше читать чужой код чем писать сам(большинство профессиональных программистов больше читают чем пишут). И да прибудет с тобой сила! 

 Копипаста - зло.   

Так и дезигнером стать не далеко - знай себе копипасти да формочки лепи.  

Лучше всего как уже сказали - понять чужой код и написать свой. 

 Есть такие люди, которым чтобы выучиться, достаточно посмотреть как это делают другие. Увидев реализацию чего-либо я, например, стараюсь это воспроизвести, некоторые куски кода переписываю вручную. И не стоит комплексовать из-за этого. Как говорят "Психолог - это не тот, кто знает ответы на вопросы, а тот, кто знает, как их искать". 

> Калькулятор почти готов, но меня просто угнетает то, что я не сам его написал.

  

Это важный вопрос. Пока ничего не пишешь сам, копирование чужого может казаться лёгким. Но однажды ты хочешь написать свою программу и ты задумываешься "А будет ли она моей? Не будет ли там чужих кусков под какими-то чужими правами?". Хорошо, если там ничего особенного не будет (свободные лицензии и всё такое). Но может быть и так, что ты станешь зарабатывать на своей программе (совершенно неожиданно для себя самого). И тогда автор какого-нибудь куска, которого не было никогда видно, тут же проснётся и спросит тебя "А где моя доля за труд?". Ты захочешь её (его часть) убрать и тут столкнёшься со вторым вопросом, лежащим в той же плоскости "А как её убрать? Я же не умею, потому что привык только копировать".  
  

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

  

Это важный вопрос. Да, все копируют код по мере возможности, есть даже такая директива: можешь скопировать или написать - скопируй. Но это относится к тем, кто уже умеет писать это всё. Это очень важное отличие - дурачка, который копирует, и профессионала, который копирует. Если ты не умеешь, то рано или поздно придётся что-то делать своими силами (писать с нуля или сильно переделывать чьё-то) и ты не сможешь, потому что никогда себя не развивал в этом. А мозг устроен очень просто: если ты задействовал в нём какие-то центры, то они всё запоминают и задействуют потом; если же ты не задействовал нужные центры, то мозгу просто нечего вспоминать. Копирование кода не задействует синтезирующие части мозга.