Системное программирование и объектно -ориентированный дизайн - на что обратить внимание [закрыто

softwareengineering.stackexchange https://softwareengineering.stackexchange.com/questions/22993

Вопрос

Следующий семестр (начинается чуть менее 5 недель), я принимаю системные программирование и одновременно. Очевидно, SP сосредоточена на работе в C на Linux, и у меня есть только Java и Python Experience, поэтому я немного нервничаю по этому поводу.

Для тех из вас, кто взял их в университет, на что мне следует обратить внимание?

Я уже взял компьютерную организацию, которая включала обзор сборки. За исключением реализации петель в сборке, я находился в диапазоне от B+ до A- в проектах сборки. Однако строительство была другой историей.

Это было полезно?

Решение

Что ж, именно то, что вам понадобится, будет зависеть от класса, хотя некоторые общие знания, скорее всего, будут удерживать. Я бы посоветовал получить книгу C, предназначенную для программистов Java. Это, вероятно, укажет на основные ловушки и поможет вам переходить.

Самые большие предметы, которые вы будете беспокоиться в C, о том, о чем вы на самом деле не беспокоитесь на Java, - это указатели и управление памятью. Ссылки на Java-это технически указатели, но они серьезно смягчены указателями, и из того, что я видел, программисты Java на самом деле не видят их как указатели, которые они являются, и часто испытывают некоторые проблемы с указаниями изначально. Иду рука об руку с этим, что у вас не будет коллекционера мусора, поэтому все, что выделяется на кучу, должно быть не только вручную распределить, но вам придется вручную отключить его, когда вы ' с этим покончил. Итак, вам придется познакомиться с malloc а также free. Анкет У вас также не будет занятий, и структуры в C не могут иметь в них функции, поэтому вы обычно не программируете в C объектно-ориентированным образом. Это может быть или не иметь большого значения для вас. Это означает, однако, что то, что вы будете изучать в своем курсе программирования систем, и ваш объектно-ориентированный курс дизайна, вероятно, будет очень другим.

OOD должен быть скорее продолжением того, что вы знаете, обучая вас, как лучше программировать объектно-ориентированным образом. Системные программирование, с другой стороны, гораздо больше о том, чтобы падать и грязно и грязно, и будет гораздо более низким уровнем в том, что он имеет дело. Оба действительно важны для того, чтобы быть хорошим программистом.

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

Другие советы

Не бойтесь - это только код

У Java и C есть очень похожий синтаксис, поступающий из того же семейства языков. Как говорили другие, ваши самые большие препятствия будут обучать указатели (подсказка: Они просто косвенные) и управление памятью. Внезапно все те массивы, на которые вы объявляли в своей Java, должны быть избавлены от. Как и любой предмет, как только вы проведите, что все это так, он внезапно станет простым.

В целом, речь идет больше о изучении среды, в которой вы будете работать, а не на некотором языковом синтаксисе и конструкциях. Программирование Linux сильно отличается от общего программирования Java. Один полагается на API операционной системы, все указатели C и структуры, а другой, как правило, намного проще, потому что он находится на более высоком уровне абстракции, это гораздо больше.

Развитие мышления

Возможно, способ для вас подходить к этому поддерживать две рабочие среды в качестве виртуальных машин (параллели или VMware приходят на ум). Один предназначен исключительно для разработки C -кода, другой для Java и без их смешивания. Вы можете использовать разные темы для рабочего стола, чтобы усилить различное мышление (черный для C, синий для Java или что -то еще). Каждый раз, когда вы приходите на работу в тех или других средах, у вас есть много визуальных сигналов, чтобы способствовать соответствующему мышлению, необходимому для выполнения работы.

Мне всегда было трудно посещать занятия с противоположными очками в том же семестре.

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

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

Мой личный опыт работы с классами OOD заключался в том, что вам нужно было перейти на почти теоретический уровень абстракции, чтобы получить полную кредит и что системы систем, как правило, были большей теорией, чем кодом, потому что было не разумно создавать большую часть функции ОС в одном семестре Анкет

Если вы никогда не делали ни C или ассемблер, будьте готовы понять Java и Python на совершенно новом уровне. Несмотря на то, что у вас уже есть какой -то класс SCI SCI, который рассказал вам, как работают память и ссылки, вы почти наверняка не полностью его не хватаете.

Войдите в него с открытым разумом и открытым сердцем. C это прекрасная вещь, но совсем не так, как Python прекрасен. Это красиво, так же, как красивый нож.

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

Лицензировано под: CC-BY-SA с атрибуция
scroll top