Как уже указывали многие, очень важно проводить различие между языком высокого уровня и языком низкого уровня.
Языки высокого уровня реализуют множество конструкций, которые позволяют нам, маленьким людям, переводить наши идеи как можно ближе к оригиналу. У нас есть объектно-ориентированный дизайн, ориентированный на данные дизайн, прототипно-ориентированный дизайн ... Все это предназначено для того, чтобы дать людям преимущество в описании вещей в удобочитаемой и понятной форме.
Почти во всех случаях это снижает производительность (по отношению к языкам ассемблера, которые являются лишь слоем абстракции от машинного кода). Даже некоторые вещи, которые считаются хорошей практикой в объектно-ориентированном проектировании, заставляют компьютер выполнять ненужную работу, которая просто снижает производительность. Это может быть что угодно, от ненужных загрузочных хранилищ, промахов кэша (как инструкций, так и данных) из-за паршивого моделирования данных программистами. Геттеры и сеттеры попали на первое место среди регулярных ОО-проектов. И сразу после них программисты, которые не думают о том, что пишут.
На более низком уровне ваша задача - успокоить компьютер, а не чувство эстетики. Вы манипулируете регистрами, адресами памяти, загрузкой, записью данных. Это должно быть так, как нравится данной аппаратной архитектуре.
Я не согласен с некоторыми идеями ваших учителей о передовой практике, особенно если они применяются на языках высокого уровня. Как я уже сказал, если это не мешает производительности, выглядит красиво и читабельно, это становится вашим стилем выполнения задач. И наказывать индивидуальность, на мой взгляд ... Ну, скажем так, не приятно.
И самое главное, вы должны успокоить учителей. С ними может быть сложно справиться. Даже если они не правы, вы должны принять это и играть в их игру. Попробуйте аргументировать свою сторону, спросите, чего они хотят от вас, и у вас все будет хорошо.
Удачи вам!