Я программист, 24 года. Рост 170. Параметры 90-60-90. Хочу поделиться опытом с институтских времен. На что нужно обращать внимание в процессе обучения (исходя из моих наблюдений), что может пригодиться в будущем. Расскажу, в какие моменты и какой прогресс наблюдался. Как не опускать руки, если скучно учиться, и в чем искать мотивацию.
![image](https://habrastorage.org/r/w780q1/getpro/habr/post_images/1f2/1ba/64d/1f21ba64d7d29f5f8429778800b87eb0.jpg)
У меня в школе информатика была только в 10 и 11-м классах. Изучали мы язык QBasic. Писали программы не более, чем на 30 строк. На фоне остальных одноклассников вроде получалось неплохо справляться с заданиями, да и окружающие говорили, что «программисты сейчас нужны». Когда я шла учиться на программиста, не представляла вообще, что это такое.
На первых трех курсах у меня всё ещё не было полного понимания и представления, чем буду заниматься. На первом и втором курсе были семестры с изучением языка С. Все остальные предметы заключались в ознакомлении с областями, которые помогут в программировании. Некоторые предметы отдельные товарищи не дооценивали, а зря.
На первых двух курсах мои программы представляли из себя, не побоюсь слова, говнокод (когда я открывала старые программы на более старших курсах, то я сама была в шоке от оформления кода). Я видела на одной строке несколько вызываемых функций, операторы, и всё это могло писаться без пробела. С первого по четвертый курс преподы в основном только требовали от нас знания языка, применение изученных алгоритмов в решении задачи. Нам даже ничего не говорили о стиле программирования, а что студенту «работает же – не трогай». Всё изменилось с середины четвёртого курса. Когда мы более менее справлялись с поставленными задачами, преподаватели стали делать замечания по оформлению кода. У меня даже есть отчеты, исчерканные, со стрелочками и рекомендациями для изменения расположения кусков кода. «Чистота» кода на первых трех курсах у меня была почти на нуле. Но потом ты стараешься писать код должным образом, чтоб не стыдно было показать другим.
Так что, не бойтесь показывать свой код более опытным программистам, вашим одногруппникам, не бойтесь критики, ведь лучше раньше осознать свои ошибки и научиться писать читабельный, грамотный код. Участвуйте в открытых проектах или хотя бы посмотрите, как пишут программы, например, на github. К тому же сейчас есть книги с рекомендациями по стилю написания кода, что может помочь привить «чистоту кода» уже на начальных стадиях обучения.
Я впервые познакомилась с системами контроля версий на пятом курсе. И очень благодарна преподу, который заставлял нас вести разработку лабораторных работ в git. Познав все преимущества и гибкость распределенных систем, имея опыт работы с SVN и git, я отдаю предпочтение git. И даже не смущает работа в git bash, хотя существуют и графические приложения для работы Git-ом.
Многие не берут в счет некоторые предметы. Мол скучно, да и вряд ли мне это пригодится. Как показывает практика, это ещё аукнется. У большинства моих знакомых на собеседовании спрашивали именно то, что они упускали. Вот несколько вещей, знание которых мне пригодилось и не раз.
У нас был целый предмет, на котором можно было оттачивать навыки по составлению регэкспов – теория компиляторов. Сначала мы писали простенькие лексические анализаторы, позже стали писать программки и для синтаксического разбора. После знакомства с регэкспами можно увидеть, что они нужны и для парсинга файлов, и для проверки корректности данных (тот же IP-адрес проверить). И да, любят давать на собеседованиях задания, связанные с регулярными выражениями.
Как же работает процессор, как выполняются вычисления, как работает память, обрабатываются прерывания и много другое. Знание о представлении чисел в машине, о процессе выполнения операций с числами в дополнительном/обратном коде однозначно пригодится любому программисту, работающему с компьютером или ПЛИС, микроконтроллером и т.п.
Работа с потоками, использование механизмов синхронизации, администрирование и др. На одном из собеседований спрашивали, что из себя представляет мьютекс. Кто-то из-за непонимания сути вопроса начнет рассказывать о lock() и unlock() функциях для работы с мьютексом. Но на самом деле нужно донести, что этот механизм синхронизации представляет из себя пассивное ожидание. В зависимости от того, по какому направлению вы собираетесь работать, определяется жизненная необходимость этого знания. Но и вообще знать и помнить о подобных вещах не повредит.
При изучении работы ОС и драйверов, впервые собирали ядро Linux, хотя раньше для меня это было чем-то загадочным.
Полезно для общего развития. Но пока в работе не особо пригодилось. Хотя нет: когда на лекции нам начали рассказывать об упакованных и неупакованных структурах, я задумалась, а есть ли такое в языке С. Да, я не знала, что есть такое понятие, как битовые поля.
И вот эта теория может пригодиться на практике. Например, если у вас какое-то длинное выражение в if, его скорее всего можно упростить с помощью карт Карно или другого метода минимизации булевой функции.
Мне пригодились знания о расчете CRC-кодов для контроля целостности передаваемой информации при обмене. У нас была даже целая лекция о том, что это такое и как сделать правильный выбор полинома.
Знакомство с различными протоколами, с работой и видами конфигураций сети оказалось полезным.
Это лишь небольшая часть того, что может пригодиться вам в дальнейшей работе (высшая математика не исключение). Это небольшой список знаний, который активно используется мной. Да, много в институте нам рассказывали вскользь, просто для ознакомления, но благодаря этой базе, знаешь, куда копать, когда нужно решить возникшую задачу. И поскольку на последних двух курсах у нас было много предметов по специальности, значительный прогресс и применение знаний на практике приходятся именно на последние годы обучения.
Неоднократно сейчас слышу от более молодых сотрудников: «Доучился уже до вротого(n-го) курса, а скучные лекции, занятия, преподы только желание убивают». Мне в этом плане, наверное, повезло немного больше. Было у нас несколько преподавателей (они еще работают в других компаниях), смотря на которых ты думаешь: «Хочу быть таким же». Их наставления, истории из жизни вдохновляли. Благодаря таким людям у студентов появляется огонь в глазах.
Если в институте ваши преподы неинтересно читают лекции по бумажке, не дают интересные задания для лабораторных занятий, то не надо бросать программирование (у меня есть парочка знакомых, которые действительно бросили программирование), не успев начать. Сейчас многие компании проводят бесплатные семинары и предоставляют бесплатное обучение/стажировку летом. Поверьте, пообщавшись с опытными программистами, почувствуете себя иначе. К тому же после стажировки у вас появляется возможность остаться там работать.
Несмотря на то, что большую часть знаний программист получает из самообучения, получаемые знания в институте могут быть полезны. Никогда не знаешь, что тебе может пригодиться в будущем. Так что не нужно столь скептически относиться к посещаемым лекциям, семинарским и лабораторным заданиям. Если вы хотите быть программистом, вы им станете, но придется для этого попотеть и не сдаваться при встрече с трудностями.
![image](https://habrastorage.org/getpro/habr/post_images/1f2/1ba/64d/1f21ba64d7d29f5f8429778800b87eb0.jpg)
У меня в школе информатика была только в 10 и 11-м классах. Изучали мы язык QBasic. Писали программы не более, чем на 30 строк. На фоне остальных одноклассников вроде получалось неплохо справляться с заданиями, да и окружающие говорили, что «программисты сейчас нужны». Когда я шла учиться на программиста, не представляла вообще, что это такое.
На первых трех курсах у меня всё ещё не было полного понимания и представления, чем буду заниматься. На первом и втором курсе были семестры с изучением языка С. Все остальные предметы заключались в ознакомлении с областями, которые помогут в программировании. Некоторые предметы отдельные товарищи не дооценивали, а зря.
Проучившись в институте, осознаешь важность следующих вещей
Coding style
На первых двух курсах мои программы представляли из себя, не побоюсь слова, говнокод (когда я открывала старые программы на более старших курсах, то я сама была в шоке от оформления кода). Я видела на одной строке несколько вызываемых функций, операторы, и всё это могло писаться без пробела. С первого по четвертый курс преподы в основном только требовали от нас знания языка, применение изученных алгоритмов в решении задачи. Нам даже ничего не говорили о стиле программирования, а что студенту «работает же – не трогай». Всё изменилось с середины четвёртого курса. Когда мы более менее справлялись с поставленными задачами, преподаватели стали делать замечания по оформлению кода. У меня даже есть отчеты, исчерканные, со стрелочками и рекомендациями для изменения расположения кусков кода. «Чистота» кода на первых трех курсах у меня была почти на нуле. Но потом ты стараешься писать код должным образом, чтоб не стыдно было показать другим.
Так что, не бойтесь показывать свой код более опытным программистам, вашим одногруппникам, не бойтесь критики, ведь лучше раньше осознать свои ошибки и научиться писать читабельный, грамотный код. Участвуйте в открытых проектах или хотя бы посмотрите, как пишут программы, например, на github. К тому же сейчас есть книги с рекомендациями по стилю написания кода, что может помочь привить «чистоту кода» уже на начальных стадиях обучения.
Сделай свою жизнь проще – используй системы контроля версий
Я впервые познакомилась с системами контроля версий на пятом курсе. И очень благодарна преподу, который заставлял нас вести разработку лабораторных работ в git. Познав все преимущества и гибкость распределенных систем, имея опыт работы с SVN и git, я отдаю предпочтение git. И даже не смущает работа в git bash, хотя существуют и графические приложения для работы Git-ом.
Нужно изучать матчасть
Многие не берут в счет некоторые предметы. Мол скучно, да и вряд ли мне это пригодится. Как показывает практика, это ещё аукнется. У большинства моих знакомых на собеседовании спрашивали именно то, что они упускали. Вот несколько вещей, знание которых мне пригодилось и не раз.
Регулярные выражения
У нас был целый предмет, на котором можно было оттачивать навыки по составлению регэкспов – теория компиляторов. Сначала мы писали простенькие лексические анализаторы, позже стали писать программки и для синтаксического разбора. После знакомства с регэкспами можно увидеть, что они нужны и для парсинга файлов, и для проверки корректности данных (тот же IP-адрес проверить). И да, любят давать на собеседованиях задания, связанные с регулярными выражениями.
Архитектура ЭВМ
Как же работает процессор, как выполняются вычисления, как работает память, обрабатываются прерывания и много другое. Знание о представлении чисел в машине, о процессе выполнения операций с числами в дополнительном/обратном коде однозначно пригодится любому программисту, работающему с компьютером или ПЛИС, микроконтроллером и т.п.
Знание о работе ОС
Работа с потоками, использование механизмов синхронизации, администрирование и др. На одном из собеседований спрашивали, что из себя представляет мьютекс. Кто-то из-за непонимания сути вопроса начнет рассказывать о lock() и unlock() функциях для работы с мьютексом. Но на самом деле нужно донести, что этот механизм синхронизации представляет из себя пассивное ожидание. В зависимости от того, по какому направлению вы собираетесь работать, определяется жизненная необходимость этого знания. Но и вообще знать и помнить о подобных вещах не повредит.
При изучении работы ОС и драйверов, впервые собирали ядро Linux, хотя раньше для меня это было чем-то загадочным.
Аппаратные языки программирования
Полезно для общего развития. Но пока в работе не особо пригодилось. Хотя нет: когда на лекции нам начали рассказывать об упакованных и неупакованных структурах, я задумалась, а есть ли такое в языке С. Да, я не знала, что есть такое понятие, как битовые поля.
Теория автоматов
И вот эта теория может пригодиться на практике. Например, если у вас какое-то длинное выражение в if, его скорее всего можно упростить с помощью карт Карно или другого метода минимизации булевой функции.
Информационная безопасность
Мне пригодились знания о расчете CRC-кодов для контроля целостности передаваемой информации при обмене. У нас была даже целая лекция о том, что это такое и как сделать правильный выбор полинома.
Сети
Знакомство с различными протоколами, с работой и видами конфигураций сети оказалось полезным.
Это лишь небольшая часть того, что может пригодиться вам в дальнейшей работе (высшая математика не исключение). Это небольшой список знаний, который активно используется мной. Да, много в институте нам рассказывали вскользь, просто для ознакомления, но благодаря этой базе, знаешь, куда копать, когда нужно решить возникшую задачу. И поскольку на последних двух курсах у нас было много предметов по специальности, значительный прогресс и применение знаний на практике приходятся именно на последние годы обучения.
Отсутствие мотивации может отбить желание учиться
Неоднократно сейчас слышу от более молодых сотрудников: «Доучился уже до вротого(n-го) курса, а скучные лекции, занятия, преподы только желание убивают». Мне в этом плане, наверное, повезло немного больше. Было у нас несколько преподавателей (они еще работают в других компаниях), смотря на которых ты думаешь: «Хочу быть таким же». Их наставления, истории из жизни вдохновляли. Благодаря таким людям у студентов появляется огонь в глазах.
Чтобы внушить чувства другим, вы сами должны быть поглощены ими. Чтобы вызвать слезы у других, вы сами должны заплакать. Чтобы убедить других, вы сами должны верить.
(Уинстон Черчилль)
Если в институте ваши преподы неинтересно читают лекции по бумажке, не дают интересные задания для лабораторных занятий, то не надо бросать программирование (у меня есть парочка знакомых, которые действительно бросили программирование), не успев начать. Сейчас многие компании проводят бесплатные семинары и предоставляют бесплатное обучение/стажировку летом. Поверьте, пообщавшись с опытными программистами, почувствуете себя иначе. К тому же после стажировки у вас появляется возможность остаться там работать.
Что бы сказать напоследок
Несмотря на то, что большую часть знаний программист получает из самообучения, получаемые знания в институте могут быть полезны. Никогда не знаешь, что тебе может пригодиться в будущем. Так что не нужно столь скептически относиться к посещаемым лекциям, семинарским и лабораторным заданиям. Если вы хотите быть программистом, вы им станете, но придется для этого попотеть и не сдаваться при встрече с трудностями.