Всем доброго дня! Две недели назад я решил стать IT-инженером :) и начать осваивать Computer Science буквально с нуля. Вкратце расскажу о себе: мне 34 года, имею два высших образования. Первое "Финансы и кредит" (НИУ ВШЭ, если что, не шарага какая-нибудь), и второе юридическое, по гражданско-правовой специализации. В целом, я к своим годам сделал хорошую карьеру в банковской сфере. Но вообщем, все это мне жутко надоело, и теперь я хочу стать IT-инженером.
Хочу сразу отметить, что у меня все хорошо с точными науками. На "финансах и кредите" в Вышке нас несколько лет насиловали всеми видами алгебры, анализа и тер.вера. Вроде-как всё сдавал без проблем.
Записался я, сейчас, на полугодовые курсы питон-разработчика, начнутся через 3 недели. Это сейчас единственная возможность приобщиться к IT не поступая на первый курс ВУЗа. Но я прекрасно понимаю, что курсы питона (учитывая, что самый простой язык программирования)- это не мой уровень и не то, к чему я хочу прийти.
В связи с этим, прошу дать мне несколько советов:
-Стоит ли мне начинать сейчас читать книги по архитектуре машины (вроде Харриса) или по операционным системам (вроде Таненбаума) или это будет слишком сложно на моем этапе?
-Начинать ли мне познание computer science с принципов работы микропроцессора и памяти, или сначала лучше освоить пользовательские функции высокоуровневых языков программирования?
-Может быть есть какое-то чтиво (или видео) для таких чайников как я?
Спасибо, что прочитали такой длинный текст, заранее спасибо за ответы, и всем хорошего настроения!
Сначала определитесь с направлением в IT. Это как в медицине: область очень обширна, одни направления могут вообще никаким образом не пересекаться с другими. Одних только базовых направлений несколько десятков, внутри которых также несколько десятков более конкретных специальностей.
ValdikSS, Ну и еще интересно все, что связано с робототехникой, т.к. это можно применять для автоматизации на производстве. Но как я понял, рынок вакансия в "автоматизации производства" небольшой и зарплаты значительно меньше.
Лично я бы посоветовал бы вас начать с C++. Сразу кажу, не из-за того что... Да чёрт его знает. В двух словах. Питон отличается от других языков программирования (Императивно - Декларативных), так что не очень хороший старт. Почему? Потому что у вас будет направление только Питон и, масимум Реакт. Я НЕ ГОВОРЮ ЧТО ЭТО ПЛОХОЙ СТЕК.
Для примера, почему я предлагаю начать с C++. Вы детально разберёте работу с памятью, типами данных, структурами и алгоритмами. Отсюда у вас буде уже очень мощная база для выхода куда угодно, та хоть в микроконтроллеры. Вообще отсюда можно идти уже во многих направлениях, C#, php, Java и т.д.
Но опять же, это моё субъективное мнение, что я считаю C++ лучше чем Python
UPD: да и C++ могли лучше прокачивает чем Python. На Python обычно очень много школьников начинают, на C++ работают инженеры)) Илон Маск начинал с программирования на C++ )))
Я тоже, уже сейчас понимаю, что С++ лучше питона, но курсы по С++ для новичков с нуля, сложно найти. Мне на одних курсах сказали, что полных нулей они не берут. Видимо мне придется идти осваивать "С" уже после питона....
Есть еще нюанс, что я хочу получить сертификат питон-разработчика, европейского образца. Такую возможность дает школа, находящаяся в Берлине. Учат они на русском языке, и у них, опять-же только питон.
Мой план таков, что после получения этого сертификата я буду учить С++ уже в какой-нибудь Российской школе.
Но время- самый ценный ресурс. Что мне сейчас, паралельно с питоном начать читать... вот вопрос.
DevMan, потому что на C++ есть ООП что даёт большое пространство для изучения. Те же паттерны, СДА, http и сетевые запросы, всё можно на C++ выучить и много другого.
VasiliyGubenkov, пока прочитайте о программировании. Питон это всего лишь язык программирования, инструмент реализации. Вы должно в первую очередь думать как программист, уметь программировать, а не знать язык. Так что начните с какого-небудь ООП, паттерны проектирования и т.д.
DevMan, это отлично, но я ничего не говорил вам читать. Опять же, я уточнил в ответе, что это моё мнение. Лично я считаю, что человеку лучше начинать изучать C++ чем Python
Nik Faraday, а почему именно плюсы, если уж с низкоуровневого идти (а в этом реально есть смысл), то лучше начинать с Rust, ИМХО.
В плюсах 1000 и 1 способ отстрелить себе ногу:
- overflow signed int - UB
- void foo(int &x, int &y) { bar(x, ++y); } - UB, потому что алиасинг мать его и компилятор имеет право вычислять аргументы в любом порядке...
- получить dangling pointer - раз плюнуть, и опять UB
В Rust очень строгий компилятор, первые пару месяцев с ним боришься, потом он меняет твоё мышление раз и на всегда и начинаешь лучше писать уже на любом языке.
Теоретически в safe коде UB не бывает (на практике он может прорасти из unsafe какой-нить кривой библиотеки), а unsafe помечен явно.
VasiliyGubenkov, ну и кстати, недовно общался с учителем информатики про обучение программированию на python, было это в контексте долбанутости задач на программирование в ЕГЭ.
С одной стороны ЕГЭ на нормальные баллы можно писать только на Python, ибо в других языках, которые там разрешают, потратишь всё доступное время на одну единственную задачу, а в Python почти все ЕГЭ задачи решаются в пару строк, надо только знать что импортировать из его стандартной библиотеки.
С другой стороны, те кто начинают с Python почти всегда сливаются в последствии в ВУЗах, ибо не осиливают программирование на других языках, требуется сначала вычистить мозг от того подхода, которым готовили к ЕГЭ.
Ну или вот прямо сейчас у меня занимается человек, изучает Rust с баграундом уже нормальной разработки на Python. Многие вещи ему даются очень тяжело. И он такой у меня не первый. А вот люди с бэкграундом плюсов проходят мой индивидуальный курс по Rust раза в 3 быстрее (в среднем 2 месяца против 6) и идут уже искать вакансии на нём.
С третьей стороны, у питона локаничный синтаксис и возможность сделать многие вещи просто. Опять же ИМХО, но это чуть ли не единственный язык из актуальных на рынке, где можно обучать без постоянных забеганий вперед, без "а вот эту магическую строчку мы поймём через несколько занятий, но без неё здесь работать не будет" (когда обучаю людей Rust, такое регулярно происходит, а на плюсах думаю такое будет ещё чаще).
VasiliyGubenkov, ну и в целом, я согласен здесь с теми, кто топит за практику и базу. Идеальный баланс - это 80% практики и 20% теории, но раз теории так мало в ней должна быть самая база.
С другой стороны, те кто начинают с Python почти всегда сливаются в последствии в ВУЗах, ибо не осиливают программирование на других языках, требуется сначала вычистить мозг от того подхода, которым готовили к ЕГЭ
Дмитрий Беляев, спасибо) мне сложно тут что-то комментировать, потому что во всех остальных науках, что я изучал в жизни, начинать надо было с основ теории.
Знаете,как у электриков есть поговорка "не знаешь закон ома, сиди дома' т.е. нет смысла разбираться в чем-то сложном, если человек не понимает что ват=вольт*ампер
Вот и сейчас мне кажется, что мне нужно что-то очень базовое почитать, чтобы потом, в момент програмирования на высокоуровневом языке, впринципе понимать, что происходит....
VasiliyGubenkov, вот тут я делал видос про то как computer science и математика пересекается с программированием, теория полезна, но пересекается с программированием лишь в небольшой части. Программирование - достаточно практическая вещь, без практики тот объём информации просто не оседает в голове.
у электриков есть поговорка "не знаешь закон ома, сиди дома'
ошибка электрика может стоить ему жизни, ошибка программиста - нет.
Более того, 80% работы программистом Вы будете иметь дело с ошибками, своими или других программистов, это особенность программирования и это норма. Научится ошибаться и исправлять свои ошибки можно только на практике. А если Вы учились в РФ, то с большой вероятностью Вас натаскивали на "не ошибаться".
Не нужно тебе все эти архитектуры изучай от глобального к локальному.
Понимание глобальных процессов намного важнее чем понимание локальных:
1. Для начала разберись как работает "Интернет" - сервера, DNS, маршрутизация, сертификаты.
2. Далее разберись как работает "Браузер" - подключение, авотризация, куки, HTML, CSS, JS.
3. Изучай как работает "операционная система" - загрузчик, ядро, конфигурация, графический интерфейс
4. И вот тут уже только: разделение памяти, процессы, архитектура процессоров.
Но вообщем, все это мне жутко надоело, и теперь я хочу стать IT-инженером.
Это всё равно, что хотеть быть инженером, вместо того, чтобы что-то проектировать или хотеть быть писателем, вместо того, чтобы писать (с)
Айтишная среда битком набита людьми, которым с детства интересно было копаться в компьютере. Человек, который полжизни шел мимо, не имеет против них никаких шансов.
Начитываться теории, чтобы когда-то в будущем стать каким-то абстрактным IT-инженером - тупиковый путь.
Теория должна тут же закрепляться практикой - а какой практикой чайник подопрет Таненбаума?..
Помню как мы в ПТУ, на информатике начинали осваивать программирование. На Бейсике рожицы рисовали. Используя линии, круги и прочие примитивы. В дальнейшем, надо было составить блок-схему алгоритма приготовления чая. Типо: взять пакетик, есть ли сахар, положить сахар, есть ли кипяток, если да, то залить кипяток в кружку и т. п. :)