AndreyMelnikov.MyBlog # мой блог: IT-марафон.

Все мои посты

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

drawing

В самом первом своем посте я озвучил достаточно мотивационный призыв, типа только вперед, только развитие, ни шагу назад! Но, все-таки, надо отдавать себе отчет, и понимать с какими техническими знаниями, так сказать, «скилл левелом» я начинаю свой путь?

Если говорить, что программирование я начал изучать в свои 30+ лет совсем с нуля - значит немного слукавить:) Программированием я начал увлекаться еще в школьные годы (тогда это был Pascal). Затем поступил и учился в Волгоградском Техническом Университете, на специальности «автоматизация и управление». Все это, так или иначе, косвенно касалось программирования, но все-же главная тема, немного проходила мимо. После окончания Университета, устроившись на работу в компанию сотовой связи инженером, о программировании пришлось забыть на многие годы.

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

Наверное, самым сложным для меня на подготовительном этапе был выбор языка программирования. Ранее я уже имел поверхностное знакомство с С++ и Java, но хотелось чего-то более модного и современного, чтобы погрузиться в него с нуля. Выбор пал на Python:) Одним из плюсов, конечно-же, стал более низкий порог входа для изучения данного языка, будем говорить начистоту, питончик - очень многое уже содержит «под капотом», то что, скажем, на C++ пришлось бы реализовывать руками. Ну и модные тенденции IT мира также сделали свое дело:) Я считаю, что гнаться за изучением сразу нескольких языков (а вдруг пригодится) не стоит. Лучше разобраться в одном, но очень хорошо, не распыляться. Разумеется, что потом со временем, скорее всего, ситуация заставит меня знать несколько языков. Но на данном этапе, пока этого не требуется.

Вобщем, с языком я определился. Далее последовало погружение в Python. Для меня стояла задача развить способность уверенно писать код и, конечно же, минимизировать количество ошибок в нем. Я практиковался по 4-5 часов в день на не очень сложных олимпиадных задачках по программированию. Затем приступил к классике: алгоритмам и структурам данных, попутно вникая в принципы ООП. Очень хорошим «проводником» в алгоритмы для меня, как новичка, стала книга Адитья Бхаргава «Грокаем алгоритмы». Очень скоро пришло понимание того, что свой код нужно уметь верифицировать. Пришлось поразбираться с библиотечкой unittest. Вообще, я считаю, разработчик должен выдавать максимально верифицированный и читаемый код после себя, - это признак не только хорошего уровня мастерства, но и хорошего тона. Ведь поддерживать и масштабировать твой код возможно придется кому-то другому.

Как и большинство людей, изначально я был пользователем ОС Windows, и все мое окружение для программирования также было установлено под эту ОС. Но с расширением своих познаний, я обратил внимание и на другие платформы (Mac, iOS, Android, Linux и ряд других ОС), и хорошо бы знать, хотя бы поверхностно, некоторые из них, ведь под эти платформы также пишется масса софта. Поэтому, для первого шага в этом направлении, пришлось установить второй системой Linux и заставить себя пересесть на нее, подняв все необходимое для моего обучения окружение. На Линуксе, кстати, это сделать проще и быстрее:)

Ну раз Python, то, скорее всего, дорога моя лежит в backend - подумал я, и начал интересоваться Web-разработкой, что это и как все взаимодействует, какие технологии применяются, как вообще устроена структура индустрии разработки софта. Кто такие Архитектор, Менеджер, Тим-Лидеры. Какие бывают методологии разработки (agile-подходы). Как взаимодействуют между собой разработчики (developers), тестировщики (quality assessors ), а также отдел support-a который обеспечивает обратную связь от пользователей по выпущенному программному продукту.

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

Итак, вернемся к Web. Ну раз Web - значит пришлось изучать механизм HTTP запросов, а также знакомиться и тренироваться с микрофреймворком Flask, изучать основы баз данных - ведь backend без использования БД никуда - ни в файлах же хранить информацию:) Как вытекающее из баз данных, пришлось изучить и разобраться на практике с основными моментами языка запросов SQL. А также c еще множеством разных сопутствующих тем и технологий таких как: работа с регулярными выражениями, синтаксис командной строки, система контроля версий Git и многое другое.

К отдельной теме, или ветке своего развития, я отнес бы изучение Machine Learning. И питончик тут пригодился, как нельзя кстати:) На данный момент ML - это достаточно перспективная, и бурно развивающаяся отрасль IT индустрии. Игнорировать современные тенденции нельзя, иначе можно всю жизнь посвятить изучению различных вебфреймворков, но прогресс уйдет без тебя. Конечно, на данный момент с нуля написать руками нейросеть, нормализовать из сырых данных необходимый dataset - я не смогу, но использовать популярные фреймворки, такие как Pandas, PyTorch или Fast.ai (ну и, конечно же, Гугл в помощь:) для решения несложных задач по распознаванию или классификации изображений вполне в состоянии. В этом направлении также стараюсь развиваться.

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

Назад к списку постов