Pull to refresh

Comments 39

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

Как выпускник ЛЭТИ, советую поставить его в конце списка (на всякий случай, если в другие не получится).

как выпускник ИТМО, тоже бы не сказал, что универ дал сильное развитие в плане CS, начал работать на втором курсе и промышленный кодинг показал насколько обучение отстает. Книги, самообучение и реальные проекты, опен сорс сильно помогает. Пиши код!

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

Вспоминается поговорка: Кто не писал свои контейнеры - не имеет сердца, а кто тащит их в продакшн не имеет мозга.

Самые большие проблемы у вас начнутся когда вы начнёте работать в команде. Это будет работа с системами контроля версий. И самое сложное - чтение и понимание чужого кода (часто не лучшего качества). Всегда старайтесь сначала понять почему что-то написано именно так, и не предлагайте сразу всё переписать с нуля (если просто не поминаете чужой код), пока у вас не будет достаточно весомых аргументов. С опытом это пройдёт.

Какой ВУЗ выбрать - не имеет особого значения. Я так вообще закончил только Гомельский машиностроительный техникум и три курса БГУИР. Вуз это в первую очередь друзья и связи, и только потом источник знаний. Самообразование и постоянная практика в разы эффективнее.

Независимо от вуза.

  1. Изучай и пробуй разные технологии, максимально разные. Попробуй java, python, typescript, rust, haskell

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

C/C++ сложные для старта, и многие вещи не пригодятся в других языках. Если нет цели связать свою жизнь с ними, то сразу учить другие языки было бы полезнее. Еще, по моему опыту поиска работы в 2021 году, на них мало интересных вакансий(на мой взгляд), много вакансий в гос и окологос. Например, делать embedded системы для военных. С секретностью, и другим геморроем, типа полного отсутствия удаленки. Из-за этого, сам перешел с С++ на С#, и нисколько не жалею об этом.

Голосую за C#. Гораздо более продвинутый язык по сравнению с С++ и не тащит кучу легаси. Хотя не такой популярный на линуксе.

А насчет аллокаторов, писать свои приходится одному из тысячи С++ программистов.

Безусловно, C# или Python будут удобнее, однако C++ позволяет мне лучше разобраться в устройстве всех операторов, устройстве работы ЯП с операционной системой. Никто не помешает мне сменить ЯП в будущем.

Для перечисленного не нужен именно C++, достаточно C, с него и следует начать.

Си прост и понятен, и для низкоуровневого системного программирования это именно то, что нужно.

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

Очередной новичок собравшийся изучать "устройство работы ЯП с операционной системой" через C++. Идея достаточно наивная и Вам правильно написали - учите сразу нужный язык, если не хотите быть вечным студентом. А если есть желание погрузиться в низкоуровневые аспекты, то изучение архитектуры ОС и ассемблера вам в помощь.

Чем плох C++? Я же сказал, что хочу заниматься десктоп разработкой, либо гейм девом. В данном случае C++ в связке с Qt или UE5 является отличным решением, не так ли?

Если конечный язык всё же С++, то изучать Qt это очень хорошее решение (с UE5 не знаком). И не только с точки зрения поиска работы. Qt очень грамотно спроектирован и хорошо ставит мозги на место у начинающих разработчиков - приходит понимание как оно всё и должно быть. Плюс, при работе с gui достаточно легко воспринимаются различные аспекты ооп и архитектуры.

Ок, спасибо за совет! На данный момент практикуюсь с SFML, дальше уже посмотрю

наставления или рекомендации от более опытных программистов

Не то чтобы наставления или рекомендации, но, скажем так, флэш-форвард: https://habr.com/ru/articles/497114/.

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

Вот все пишут что ВУЗ не очень нужен, как и диплом - а я вот не соглашусь. В универе мне рассказали и про алгоритмы, базы данных, сети, базовая математика - да много чего. Опять же диплом не совсем никчемная бумажка - при прочих равных это даст какие никакое преимущество. Есть места, куда до сих пор просят диплом, особенно если ты джун без опыта.

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

UE я бы не рекомендовал для начала. Может Qt или веб.

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

UFO landed and left these words here

Думаю разбирать UE5

В UE слишком много неинтуитивных и специфичных концептов, которые будут скорее тормозить нежели помогать с обучением, плюс цикл удовольствия у него чертовски длиннный - компиляться будет по тысячу лет даже на маленьких проектах. Предложил бы взять движок попроще (cocos2d-x/js/py, LOVE), а то и вовсе собрать собственный на основе какого-нибудь SFML.

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

Обязательно выучите базовые вещи в программировании: асимптотический анализ и структуры данных - данные темы сильно помогут в оптимизации кода Вашей программы. Плюсом будет хорошее понимание организация памяти процесса в операционных системах, на первых порах точно нужно знать: стэк, куча; В дальнейшем будет полезно (почитайте на досуге): виртуальная память, типы страниц(.text, .data, .bss, .noinit), маппинг страниц памяти / маппинг файлов в виртуальную память. Так же лучше выучить работу с процессами и методы межпроцессного взаимодействия (IPC). Выучите системы сборки: GNU Make, CMake. Что такое статические и динамические библиотеки и как их линковать в Ваш проект. Обязательно выучите средства отладки: GDB и Valgrind - они сильно облегчат жизнь

По многопоточности можно пробежаться в порядке усложнения темы. Доки по стандартной библиотеки C++ для многопоточности - https://en.cppreference.com/w/cpp/thread

  • Потоки: раздел Threads

    • Будет полезно понимание как процессор выполняет больше потоков, чем у него физических потоков, что такое переключение контекста и как оно влияет на производительность

  • Проблема состояния гонки (race condition) и методы её решения:

    • Критические секции: раздел Mutual exclusion

    • Условные переменные: раздел Condition variables

    • Атомики: раздел Atomic operations

  • Ассинхронные операции: раздел Futures

  • Так же будет полезно знать про корутины (удобно использовать в многопоточных программах): https://en.cppreference.com/w/cpp/language/coroutines

Обратите внимание на коллекцию библиотек C++ Boost - там есть много удобных вещей. Так же не плохо знать API операционных систем: WinAPI и POSIX API; хоть это и уровень Си, но применим в C++ (лучше изучать после Boost, чтобы не строить велосипедов).

Совет по набиванию руки: придумайте себе пет-проект(желатнльно посложней), не бойтесь строить велосипеды в учебных целях, чаще работайте с коммандной строкой.

Можешь пожалуйста предложить идею пет-проекта

UFO landed and left these words here

Я кстати делал игру в консоли, прикольно было. Может тогда лучше плотно сесть на изучение Qt5, как думаешь?

По личному опыту: На ранних этапах изучения C++ делал шутан с видом сверху на Qt5 + QML. На C++ Qt создавал элементы через QQuickPaintedItem, а через QML размещал на "сцене". Проект торчал в топе таск менеджера по RAM из-за огромных утечек и люто лагал, поскольку главный цикл гонял все обработки событий + коллизию объектов в одном потоке. Понял я это только спустя время уже когда клепал другой пет-проект))

Совет: почитай про пул потоков (из теории можно почитать про системы массового обслуживания(СМО)), советую его использовать для обработки эвентов в игре ассинхронно. Так же чекай проект Valgrind'ом на утечки памяти. Подучи киллерфичу Qt - сигналы/слоты (не помню, но помоему они по дефолту юзают тред пул). Если хочешь сделать игру сетевой в Qt модуль QNetwork вполне неплохой.

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

Благодарю вас за развернутые ответы!

Посмотрите лекции Константина Владимирова на Ютубе. Они действительно потрясающие. Не только, кстати, для начинающих.

Видел его лекции, настоящий профессионал! Когда перейду на следующую ступень изучения обязательно буду смотреть его!

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

Откуда вы все это берёте то? С чего вдруг бесконечное страдание с исключительно специфичными «приколами» крестов сделает проще понимание другого языка?

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

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

Кто и зачем поставил перед вами, на первом году изучения программирования, в принципе, написать свой аллокатор?! Не хороший человек какой-то имхо.

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

Заказал себе книгу "Чистый Код", давно хочу ее почитать.

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

Смотрю людей продолжают «прогревать» некой «исключительностью» плюсов. Не ведитесь.

Получается, что для хорошей практики нужно начинать разбирать SFML, Qt5 или OpenGL. Это позволит мне оставить консоль и начать разрабатывать полноценные приложения. Что из этого лучше выбрать?

Главное что-то законченное, на любых библиотеках, не пытайтесь писать все «с нуля». Если про пейнт - то самое очевидное тут - Qt.

Насколько я понял, Qt лучше подходит длч создания десктопных приложений, а SFML для создания инди-игр, верно?

Да, Qt - в целом для сложного UI, SFML - игры.

Благодарю! А можете пожалуйста порекомендовать материалы для изучения Qt(в интернете все советуют Шлее) или SFML? Особенно интересно будет почитать про SFML(теорию, возможно, примеры создания каких-то игр итд), заранее спасибо!

Мне в первые годы изучения помогло прочитать книгу "Дизайн и эволюция C++", чтобы понять, почему язык получился такой сложный. Это дало какое-то базовое чувство языка и прибавило уверенности при его использовании.

По шаблонам самая полная информация, на мой взгляд, содержится в томике "Шаблоны C++. Справочник разработчика".

Спасибо, постараюсь прочитать!

В МГТУ на ИУ-7 как первый выбор. Я закончил ИУ-8 в 2007 — нормально, но спецпредметы на семёрке были явно актуальнее и полезнее. А так на восьмерке где-то с середины четвертого курса я к половине профильных предметов потерял интерес и сосредоточился на самообразовании и собственных проектах, что, оглядываясь назад, было правильно, хоть и сказалось на оценках (до которых впоследствии вообще никому не было дела). Если бы я сейчас подавался и надо было выбрать три кафедры по порядку, то написал бы ИУ-7, ИУ-12, ИУ-9.

Одно большое "но". В списке нет МФТИ и МГУ (ВМК). Наиболее головастые и способные ребята учились именно там. Если бы я мог вернуться на 25 лет назад и дать себе молодому совет, то порекомендовал бы приложить дополнительные усилия, чтобы попробовать пройти на физтех и ВМК.

А так я готовился два года на заочных и очно-заочных курсах в Бауманке, потом с первого раза набрал максимальный балл на их олимпиаде (т.к. задачи были похожи на те, что давались на курсах) и мог выбрать любую кафедру с общагой, что и сделал. А олимпиады на физтехе и ВМК завалил, там были группы задач, которые я впервые видел, например системы на решение в целых числах. Я бы может и разобрался сам, но точно не за отведённое время. Ребята, которые прицельно готовились, потом говорили, что знали, какого типа задачи будут, и натренировались заранее. Это всё было еще до введения ЕГЭ.

Sign up to leave a comment.

Articles