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

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

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

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

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

С тех пор я изучил каждую новую концепцию, применив ее к этому медиаплееру. Я изучил NodeJs на Raspberry Pi, я изучил WPF, внедрение зависимостей, открытие/закрытие, шаблон стратегии, шаблон декоратора и шаблон посетителя. Я изучал разные языки, VB, VB.NET, C# и C++.

В то время, когда я узнал обо всем этом, с открытым исходным кодом не было ничего особенного — до Github, как и до Stackoverflow, оставалось несколько лет. Я использовал Apress и CodeProject, код был разделен в zip-файлах. В значительной степени мне приходилось строить все самому, но при этом я многое узнал о внутренней работе и мелких деталях.

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

Это привело к тому, что многие люди стали очень полагаться на эти библиотеки и фреймворки — в конце концов, если не изобретать велосипед заново, процесс ускоряется. Разговаривая сегодня с программистами, я возвращаюсь к истокам, чтобы построить фундамент знаний, который поможет им понять выбор, который они сделают позже. Я всегда чувствую, что есть много упущенных возможностей учиться — очень немногие люди могут даже не знать, в чем необходимость C# Async/Await и Tasks, потому что никогда не ощущалась боль от необходимости делать new Thread() и вызывать .Join() . Когда эти библиотеки или фреймворки используются просто так, это может привести к тому, что все будет казаться гвоздем.

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

Итак, ваш следующий личный проект — создайте свой собственный фреймворк для внедрения зависимостей, создайте свой собственный фреймворк для обмена сообщениями, напишите свою собственную базу данных.