Мой опыт обучения студентов и работы с людьми, изучающими только языки высокого уровня, показывает, что они склонны мыслить на определенном высоком уровне абстракции и предполагают, что «все приходит бесплатно». Они могут стать очень компетентными программистами, но в конечном итоге им приходится иметь дело с некоторым кодом, который имеет проблемы с производительностью, и тогда это начинает их укусить.
Когда вы много работаете с C, вы действительно думаете о распределении памяти. Вы часто думаете о структуре памяти (и о расположении кеша, если это проблема). Вы понимаете, как и почему некоторые графические операции стоят очень дорого. Насколько эффективно или неэффективно поведение определенных сокетов. Как работают буферы и т. Д. Я считаю, что использование абстракций на языке более высокого уровня, когда вы знаете, как это реализовано ниже, иногда дает вам «этот дополнительный секретный соус», когда вы думаете о производительности.
Например, в Java есть сборщик мусора, и вы не можете напрямую назначать вещи в память. Тем не менее, вы можете сделать определенные дизайнерские решения (например, с настраиваемыми структурами данных), которые повлияют на производительность по тем же причинам, по которым это будет проблемой в C.
Кроме того, и в более общем плане, я считаю, что для опытного программиста важно не только знать нотацию большого O (которую преподают в большинстве школ), но и то, что в реальных приложениях также важна константа (которую школы пытаются игнорировать) . Мой неофициальный опыт показывает, что люди, владеющие обоими языковыми уровнями, как правило, лучше понимают константу, возможно, из-за того, что я описал выше.
Кроме того, многие системы более высокого уровня, которые я видел, взаимодействуют с библиотеками и инфраструктурами более низкого уровня. Например, некоторые коммуникации, базы данных или графические библиотеки. Некоторые драйверы для определенных устройств и т. Д. Если вы опытный программист, возможно, вам даже придется рискнуть, и это поможет хотя бы иметь представление о том, что происходит.
person
Uri
schedule
16.01.2010