Pull to refresh

Это знает любой студент-программист

Reading time 7 min
Views 27K

Краткое введение


В статье пойдет речь о вещах, которые сотни раз описаны в талмудах по CS: об общепринятых стилях кодирования, о документировании кода, об юнит-тестах и т.п. Это крошечный сборник советов для студентов начальных курсов IT-специальностей. Сумбурный текст и повторения необходимы для лучшего пережевывания материала.

Статья предназначена для начинающих студентов-программистов.


1 Если программа выдает верный результат, наша работа закончена


В зависимости от квалификации и заинтересованности преподавателя в качестве обучения студента, такое правило может означать, что:
  1. весь код будет написан в функции main;
  2. имена переменных выбраны, исходя из правила «чем меньше букв, тем лучше» (особо продвинутые программисты пользуются транслитом);
  3. все данные, которые могут быть намертво запечатаны в код, будут намертво запечатаны;
  4. проверки на неправильные значения, null и пр… что это?
Почему такое отношение к своему коду встречается так часто у студентов, которые только-только начали программировать? На самом деле, такой результат можно объяснить очень просто: для основной части технических дисциплин, преподаваемых в ВУЗе, учебные программы разработаны давно, и опробованы на поколениях студентов, в то время как в области ИТ-дисциплин, особенно, связанных с программированием, культура преподавания у нас по-настоящему сформироваться не успела (если вы учитесь на ВМК, поздравляю). Поэтому студент привык, что принятое преподавателем задание обычно означает, что студент тему усвоил.

Если студент выполнил курсовую по ТММ или задания по сопромату, скорее всего, он что-то знает. В программировании это не так: если вы написали функцию, вычисляющую n-ый член последовательности Фибоначчи, использовав рекурсию в C++ вот так, вы ничего не знаете. Вам повезло, если преподаватель не принял у вас эту глупость, но таких преподавателей, на самом деле, немного. Более того, вам могут дать задание «реализовать функцию вычисления n-ого члена последовательности Фибоначчи с помощью рекурсии».

Выводы:
  1. студенту начальных курсов ИТ-направлений нужно быть дисциплинированным: то, что дает и спрашивает преподаватель — лишь малая часть знаний, необходимых для реальной работы в должности даже Junior-программиста;
  2. обязательно читайте книги и статьи по темам, которые вы проходите, и смежным;
  3. вникайте в суть происходящего — вы должны понимать, как работает ваша программа с момента запуска и до завершения;
  4. взрастите в себе маленького гнусавого перфекциониста рефакторинга (не забудьте приручить его после выпуска из университета);
  5. если вы уже что-то понимаете в программировании, присоединяйтесь к open-source проектам (для начала можно просто ознакомится с кодом из реальных проектов, программировать свое будете потом).
Необходимо отметить, что многие «best practice» из реальных проектов и советы матерых программистов для студента являются вредными — не нужно использовать готовую функцию сортировки из стандартной библиотеки, потому что вам надо понять, как это работает.

2 Зачем здесь писать функцию/класс/метод? Это можно сделать проще!


Основной недостаток заданий для будущего программиста на лабораторных/курсовых в ВУЗах — их синтетическая природа. Эта ситуация выправляется к старшим курсам, но, по опыту наблюдения за своими согруппниками, реальные задания даются слишком поздно — студент уже привык писать код «лишь бы сдать», обычно это дурной код.

Зачем все-таки писать отдельную функцию для печати результата и отдельную для его получения в виде значения? Обычно такие функции получаются по 2-3 строчки — зачем усложнять, тратить время? Ответ простой: чтобы научиться правильно писать код. Это сейчас вы вызываете функцию 1 раз за всю работу программы, в реальном же проекте это будет оправдано легкостью поддержки, отладки, повторного использования кода и т.д.

Почему возникает ситуация, в которой студент может сдать дурно пахнущий код? Ответ не такой простой, как это может показаться. Преподаватель учит всю группу сразу, и принимает работы, зачастую исходя из среднего уровня знаний студентов. Мотивировать же всю группу на дополнительный необоснованный труд — задача преподавателя, с которой многие не справляются. В дополнение к этому можно вспомнить, что «предварительная оптимизация — зло», и весь этот дополнительный рефакторинг никому не нужен — кодом-то и пользоваться не будут. Посему, в глазах программиста-практика, коим зачастую является преподаватель, такой труд тоже не очень-то обоснован.

Выводы:
  1. «Следи за собой, будь осторожен». Рассматривайте любые задания, как вызов; попробуйте выполнить задание так, чтобы вам самому понравилось, чтобы результат можно было показать другу или выложить в открытый доступ. Если вы выполняете, казалось бы, ерундовую курсовую, сделайте небольшой проект для себя на тему курсовой, выложите в открытый доступ, и дайте ссылки знакомым; уверен, такой опыт будет на пользу.
  2. Не экономьте на времени и буквах. Конечно, вы можете сделать все лабораторные в последний момент за ночь, но от таких забегов на короткие дистанции вы не извлечете никакой пользы.
  3. Создайте вспомогательные библиотеки, которыми вы будете пользоваться в дальнейшем — там могут находится простейшие функции, но такой опыт будет полезен, т.к. вы «на своей шкуре» поймете, что такое повторное использование кода и его поддержка.

3 Язык C никому не нужен, все пишут на Java/C#/PHP/etc


Такие высказывания часто можно услышать в университетских коридорах. Я не могу сказать, что это голословные утверждения, — в реальной обстановке программист работает за деньги, чтобы делать проекты, которые, вообще говоря, продают вездесущие менеджеры. Задача фирмы — получение прибыли, а на рынке увеличить свою прибыль можно, уменьшив расходы (себестоимость). Да простят меня экономисты, но вкратце это так. Поэтому наиболее популярными являются языки и фреимворки, которые позволяют писать код быстрее и понятнее.

Пусть вас не смущает то, что я поставил в один ряд C и PHP, да ещё и etc. Речь не об области применения, а о сомнениях студента в актуальности знаний, которые он получает на парах.

Почему же стоит изучать С? Я считаю, что можно найти массу ответов, начиная с «чтобы понимать, что происходит на низком уровне» до «он много где используется, поэтому такое знание пригодится даже на рабочем месте». Любой такой ответ будет правилен, и, быть может, успокоит революционный настрой студента, но на самом деле ответ кроется не в области применения языка, а в специфике университетского образования. Иначе говоря, это просто хороший язык, как и Паскаль, на котором можно проиллюстрировать многое из теоретического курса университетских дисциплин. Напомню, что университет дает (должен давать) фундаментальные знания, изучение же какого-то языка в процессе обучения необходимо для того, чтобы демонстрировать теорию на практике и закреплять эти знания.

Выводы:
  1. Будьте терпеливы. Я уверен, что вы ещё не очень четко представляете, чем конкретно будете заниматься в ближайшие 10-15 лет. Полученные сейчас знания могут понадобиться впоследствии.
  2. Если вам понравился какой-то язык программирования или технология, выполняйте задания, как на требуемом языке, так и на этом, даже если это будет писанина «в стол». Лучше, конечно, показать преподавателю, и обсудить, почему то или иное решение больше подходит для задания.
  3. Читайте блоги и статьи по тематике ваших любых языков, технологий, а так же по тематике требуемых образовательной программой. Так вы сможете многое узнать об области и границах применения этих технологий в реальных проектах.

4 Свой проект? Зачем? Есть же много готовых способов для решения задач


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

В качестве примера могу представить случай из жизни. На первом курсе нашей группе творчески-мыслящий аспирант дал задание «создать сайт группы», задание должно было выполняться группами по 2-3-4 человека. Я чуть было не выпал в осадок, когда услышал от согруппников, что они для задания собираются написать собственную CMS, и попытался объяснить, что затея безумна по своей природе. Я их тогда убедил. Недавно эти молодцы пошли работать на кафедру, я застал их за установкой софта на полтора десятка компьютеров. На вопрос, почему бы не автоматизировать эту нудную работу, был получен ответ: «как? Да и вообще, нам и так не плохо, мы никуда не торопимся».

Выводы:
  1. Скорее всего, на вашей кафедре занимаются программированием, попробуйте предложить свою кандидатуру. Сначала такая работа может показаться не очень интересной, но, поверьте, вы получите опыт работы в команде над более-менее реальными задачами — это лучше, чем сидеть дома и болтать на форумах о программировании.
  2. Установите хорошие отношения с руководством кафедры, познакомьтесь с аспирантами. Это пригодится вам, когда вы захотите продвинуть что-то свое в учебный план, или организовать кружок/факультатив.
  3. Программируйте небольшие мелочи для себя, выкладывайте в свободный доступ, делитесь с друзьями. Вы почувствуете пользу на старших курсах, а после и на работе.

5 VCS? Unit-testing? Документация? Я же один работаю над своими крошечными лабораторными/курсовыми, мне все это не нужно


Эта проблема не относится напрямую к студентам, скорее это более широкая проблема. Поэтому я оправляю вас на тематические форумы, к статьям из серии «зачем это нужно».

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

Заключение


Я решил удалить все, что было написало дальше (ещё несколько советов), по следующей причине: статья задумывалась, как объяснение некоторых феноменов, с которыми можно встретиться в студенческой жизни на технических специальностях, связанных с ИТ, поэтому повторение прописных истин, доступных в любом хорошем учебнике по программированию, или статье «для новичков», я считаю, не вписывается в формат этой заметки.

Поэтому: читайте, ищите, экспериментируйте, не останавливайтесь перед сложностями, и сделайте, наконец, свой маленький проектик под open-source лицензией!
Tags:
Hubs:
+131
Comments 129
Comments Comments 129

Articles