Чем отличается информатика от программирования в компьютерных системах
Из списка 25 самых перспективных профессий США по версии ресурса Glassdoor 12 относятся к сфере информационных технологий. Среди них:
- Архитектор высоконагруженных web-серверов;
- Разработчик пользовательских интерфейсов;
- Аналитик данных;
- Специалист по машинному и глубокому обучению;
- Продакт-менеджер и другие.
«Высокие финансовые перспективы в профессии влияют на стоимость образования. На западе большинство программ высшего образования платные. Но в России в ведущих технических вузах больше половины мест на программы бакалавриата — бюджетные. При этом некоторые программы в России имеют международные аккредитации, а значит ничем не уступают по качеству. Можно сделать вывод, что у российских школьников есть возможность получить качественное образование международного уровня вне зависимости от финансовых возможностей семьи».
IT-специальности
В сфере IT множество программ обучения. В этой статье разберемся, какие базовые специальности представлены в российских технических вузах.
Условно все специальности можно разделить на три категории:
Компьютерные науки — в этой категории происходит создание или улучшение программных продуктов, а не физических устройств. Например, разработка интерфейсов, тестирование программного обеспечения, анализ данных, информационная безопасность. К этой категории относятся специальности «прикладная математика и информатика», «программная инженерия», «информационная безопасность».
Инженерные специальности — для тех, кому нравится «работать с железом» и при этом немного программировать. Эти специальности обычно объединяет то, что для поступления надо сдавать ЕГЭ по физике, а не по информатике. Например, это специальность «Инфокоммуникационные технологии и системы связи» или «Информатика и вычислительная техника».
Управление — если есть желание работать с людьми. Например, управлять командой разработки или командой, осуществляющей внедрение продукта.
Здесь и далее перед названием специальности будет указан числовой код — это код специальности по ОКСО ( Общероссийский классификатор специальностей по образованию ). По нему можно найти интересующую специальность в любом вузе России.
Компьютерные науки
- Линейная алгебра и геометрия;
- Математический анализ;
- Функциональный анализ;
- Дискретная математика и другие.
- МФТИ — 301
- НИУ ВШЭ — 303
- МГУ — 440 (нужно сдать 5 экзаменов)
- МГТУ им. Баумана — 238
В связи с этим базовые математические дисциплины занимают меньший объем в учебных планах по сравнению с предыдущей специальностью. Зато больше времени уделяется различным языкам и методам программирования.
- НИУ ВШЭ — 300
- МГТУ им. Баумана — 289
- МАИ — 260
Другая часть сотрудников занимается «Яндекс.Поиском», разрабатывает поисковые алгоритмы — например, в каком порядке информация будет ранжироваться в результатах выдачи. Перед ними каждый день стоит большое количество сложных математических задач. В случае если вам интересна математика, анализ данных, машинное обучение, искусственный интеллект, создание наукоемких программ, то вам стоит присмотреться к «Прикладной математике и информатике». Если вам ближе технологический процесс, который состоит из большого количества этапов, начиная с выявления предпочтений пользователей и заканчивая выводом продукта на рынок, то вам прямая дорога в «Программную инженерию».
2.10.03.01. Информационная безопасность — программа ориентирована на подготовку специалистов, обладающих современными методами защиты информации. Студенты этой программы изучают базовый курс математических дисциплин, общую физику, а также криптографию, защиту информации и передачу данных в качестве профильных дисциплин. В ВШЭ часть курсов по этой специальности ведется на английском языке. Не путайте с компьютерной безопасностью: она похожа по названию, но находится в инженерном блоке. Эта специальность больше про защиту информации на уровне «железа», а не на уровне программ.
Чтобы стать профессионалом в этой области, необходимо иметь широкое понимание разных разделов фундаментальной математики и представление обо всех отраслях информационных технологий, а также знать все текущие тренды. Такие специалисты ищут уязвимости в программных продуктах, которые зачастую находятся в использованных в них технологиях. Например, в JavaScript библиотеке, которую используют все, допущена уязвимость: если мы про нее знаем, то можем получить данные из всех web-приложений, которые ее используют.
Инженерные специальности
11.03.02 Инфокоммуникационные технологии и системы связи — программа, ориентированная на работу в сфере инфокоммуникационных технологий, в области технологии и разработки технических средств обработки и хранения всех видов информации, ее приема и передачи на любые расстояния. Будущим специалистам необходимо будет разбираться в работе операционных систем и в элементах программирования. В основном они работают с физическими устройствами, а не с программами.
02.09.03.01. Информатика и вычислительная техника — программа для инженеров, специализирующихся на робототехнике и проектировании систем реального времени. Кроме математических дисциплин в программу входит курс физики. Выпускники этого профиля создают программно-аппаратные комплексы, закладывая в него программные решения. OCR — программно-аппаратный комплекс (сочетание железа и софта), именно их учатся делать на этой специальности.
Управление
5.38.03.05 Бизнес-информатика. Что обычно изучают студенты: менеджмент, бизнес-аналитику, бизнес-процессы, а также интеграцию информационных систем в процесс работы. Целевой выпускник программы — сотрудник консалтинговой компании с навыками бизнес-аналитики и автоматизации бизнес-процессов, с хорошим пониманием возможностей информационных технологий и их спектра, но без прикладных навыков программирования (либо на базовом уровне).
02.09.03.03. Прикладная информатика — можно сказать, что программа тоже ориентирована на подготовку управленцев в области информационных технологий и интеграторов, но более узкоспециализированных. В чистом виде специальность «Прикладная информатика» встречается редко, гораздо чаще встречаются, например, «Прикладная информатика в экономике» или «Прикладная информатика в строительстве» — это всегда применение специализированных для этой отрасли программ и подходов автоматизации и цифровизации.
В современном мире не только университеты участвуют в образовании будущих программистов. Во многих крупных IT-компаниях есть бесплатные программы обучения и стажировок, ориентированных на студентов старших курсов. Обычно приложения о стажировках публикуют на сайтах и в социальных сетях университетов.
В пользу программирования
Новички в сфере информационных технологий окружены стереотипами и из-за этого им бывает сложно начать учиться. Ведь многие считают, что хорошими программистами становятся только очень умные и талантливые люди. На самом деле IT-специалисты — это обычные люди, которые испытывают страсть к созданию компьютерных программ, игр и приложений. Чтобы писать код не обязательно быть гением. Куда важнее иметь интерес к сфере и быть дисциплинированным. Люди не выигрывают олимпийские игры просто благодаря хорошей генетике. Их спортивные достижения — это, в первую очередь, результаты упорных тренировок. Так что и программистами не рождаются, ими становятся.
Тем более программирование само помогает приобрести особый тип мышления, благодаря которому IT-специалисты так легко справляются с математическими и логическими задачами. Они обращают внимание на детали, легко моделируют ситуации в повседневной жизни и способны оценивать объекты, полагаясь на большое количество факторов. Ученые при помощи МРТ установили, что во время работы над кодом активируются те же отделы мозга, что отвечают за естественные языки. Так что программирование положительно влияет как на мыслительные процессы, так и на память.
Не забывайте, что программирование — это не просто владение одним языком. На самом деле это целый набор навыков: работа с кодом, эффективное взаимодействие с членами команды, декомпозиция задач, оформление и ведение документации, тестирование, само кодирование на языке программирования, причем часто не на одном.
Как мы видим, любой желающий, приложив достаточно усилий, может стать «тем самым программистом, который родился гением и поэтому работает в лучшей IT-компании».
Что поможет?
Не стоит игнорировать возможности саморазвития. Тем более, сегодня всю необходимую информацию о программировании можно найти в интернете. Студенты, которые еще до поступления в вуз успели собрать десяток сайтов и приложений, в будущем будут на голову выше своих одногруппников. Онлайн-курсы, книги, форумы, тематические сайты — все это позволит собрать хорошую базу знаний и для этого даже не нужно выходить из дома.
Подбирая материалы для чтения, обращайте внимание на год выпуска издания. В сфере информационных технологий все меняется очень быстро, поэтому не стоит приобретать материалы десятилетней давности. Например, книга Роберта Мартина «Чистый код» учит грамотно писать на языке программирования.
«Искусство программирования» — фундаментальная монография известного американского математика и специалиста в области компьютерных наук Дональда Кнута, посвященная рассмотрению и анализу важнейших алгоритмов, используемых в информатике. В 1999 году книга была признана одной из двенадцати лучших физико-математических монографий столетия.
Если у вас в ходе изучения возникают вопросы, то вы всегда можете задать их более опытным пользователям. На ресурсе «Хабр» желающие публикуют собственные статьи на компьютерные темы, рассказывают, с какими трудностями столкнулись во время работы и как с ними справились. На сайте можно найти ответы практически на все вопросы начинающих специалистов.
Некоторые Youtube-каналы прорабатывают сразу несколько тем. Например, канал «Гоша Дударь», в первую очередь, о Game Development. На канале много видеоуроков по созданию игр на различных движках (Unity, Unreal Engine, Game Maker, Corona SDK), а также по играм без движков (С++, Java или Python). При этом автор охватывает и разработку сайтов, и мобильную разработку, и веб-программирование, и языки программирования. Еще у некоторых факультетов бывают свои каналы, куда они выкладывают часть лекций.
Некоторые предпочитают более развлекательные форматы обучения. Например, игры. Одна из самых известных — это JavaRush. Это многопользовательская браузерная игра, которая помогает выучить языки программирования. Курс разбит на 40 уровней. Вы можете перейти на следующий уровень, только если решили большую часть задач текущего уровня. Начиная с маленьких и легких и заканчивая большими и очень полезными. Каждый, дошедший до конца, получит 500+ часов практического опыта. Так что это хороший вариант совместить приятное с полезным.
Также можно попробовать присоединиться в профессиональному сообществу. В Москве, например, действует Московский клуб программистов. Здесь можно неформально пообщаться со специалистами, которые собираются каждые две недели, чтобы обсудить интересные им темы и поделиться знаниями.
Не стоит концентрироваться на одном направлении. Наиболее эффективно будет выбрать несколько способов, например, онлайн-курсы + книги + изучение материалов на специализированных ресурсах. Помните, что чем больше времени вы будете посвящать программированию, тем быстрее вы наберетесь знаний и опыта.
Выводы
IT-сфера очень разнообразна и требует различных навыков: веб-разработка, построение интегрированных корпоративных систем, создание нейросетей и моделей машинного обучения. Сейчас наибольших спрос рынка на фронтенд и мобильных разработчиков, растет спрос на специалистов по анализу больших данных и машинному обучению.
Для наукоемких отраслей программирования хорошая подготовка по базовым математическим дисциплинам необходима также, как навыки программирования на языке и навык постоянного самообучения.
Для того, чтобы понять, какую именно специальность выбрать, нужно проанализировать учебный план и дополнительные возможности, которые предоставляет вуз.
Самое главное, о чем стоит помнить — программист создает себя сам. Очень важно участвовать в проектах, получать практический опыт начиная с первого курса, проходить дополнительные онлайн курсы на открытых образовательных платформах, участвовать в олимпиадах по программированию и хакатонах.
Я новичок в информатике и программировании, и мне было интересно, есть ли разница между информатикой и программированием? и вы можете выбрать, чтобы учиться только один из них в университете, или оба?
они так же далеки друг от друга, как геология и рытье канав Информатика - это то, что вы платите, чтобы учиться. Программирование - это то, за что вам платят. Разница в том, что заставляет вас использовать плавную сортировку вместо пузырьковой сортировки.Информатика - это изучение того, что могут делать компьютеры; программирование - это практика, заставляющая компьютеры делать вещи.
Взгляните на курсы / учебные планы, предлагаемые интересующими вас университетами, чтобы узнать, является ли этот курс курсом CS, курсом программирования, чем-то еще (например, разработкой программного обеспечения) или даже комбинацией вышеперечисленного. Многие курсы, рекламируемые как «информатика», предлагают значительный программный компонент, который может быть таким, чтобы вы могли применять теоретические части курса на практике, или может быть ради них самих, чтобы вы могли научиться навыкам создания программ.
Очень хороший ответ, хотя он не отвечает практической части вопроса;) Важно отметить, что большинство курсов по компьютерным наукам вообще не имеют отношения к теоретической CS, так как TCS, по крайней мере, так же отделен от практической CS, как и CS от программирования. Я не думаю, что вы должны привязывать CS (несмотря на название) слишком близко к компьютерам: в первую очередь, это изучение информации . Просто случается, что термин «компьютер» охватывает большинство различных физических инструментов, которые мы используем для работы с информацией, поэтому практически любое изучение информации будет включать программирование компьютера. Таксономия может подойти под прозвищем информатики. Но это не кажется мне подходящим под CS. Полезно в междисциплинарном смысле, но CS неразрывно связан с тем, что мы можем сделать с компьютерами, IMO. Я мог бы сделать ваше определение «компьютера» более общим, но не определение CS.Предостережение: «Компьютерные науки» стали запутанной областью в наше время, потому что (по крайней мере, в Соединенных Штатах) университеты не имеют степеней в «программировании». Это означает, что люди, интересующиеся программированием, должны зарегистрироваться для получения степени информатики, и в качестве реакции на это программы информатики делают упор на программирование все больше и больше.
Тем не менее, сама информатика является строго математической наукой - вычислительная математика могла бы быть более подходящим термином. Он включает в себя изучение теории графов, алгоритмической сложности, формальной логики, автоматов и вообще любой логической структуры, которая может описывать преобразование или реакцию на входные алгоритмы. Компьютерный ученый в классическом смысле мог бы рассуждать о правилах, которые управляют любой вычислительной системой (включая современные компьютеры), не обязательно зная детали реализации на текущей архитектуре. Хорошие знания в области компьютерных наук дают вам возможность разрабатывать (или вспоминать) эффективные, масштабируемые алгоритмы, предвидеть логические сокращения и разумно рассуждать о том, что можно отслеживать.
Напротив, программирование - это то, что делает человек, когда использует язык программирования для преобразования алгоритма в то, что может сделать машина. (Это должно сделать очевидной тесную связь с информатикой и откуда большая часть путаницы.) Программист (по отношению к среде и языку) должен быть в состоянии взять практически любой набор алгоритмов и преобразовать их в форму как человека - и машиночитаемым путем написания кода. Хорошие знания в программировании (как и большинство степеней CS) позволяют вам писать лучший код, где «лучший» код легче понять другим и более успешно выражать алгоритм, который вы реализуете.
Конечно, существует большое количество перекрестных помех, и высокий уровень опыта в одной из них будет в значительной степени соответствовать опыту разработки в другой - как отмечалось, майор CS почти всегда является компетентным программистом, и опытный программист подобрал много принципов CS. Подумайте, физика и инженерия.
Хороший способ запомнить разницу заключается в следующем: если ему требуется компьютер, чтобы увидеть, работает ли он, он программирует - если вы можете сделать это с помощью карандаша и бумаги, это компьютерная наука.
Несколько лет назад я изучал алгоритмы и сложность. Восхитительно чистая область, где каждая концепция чётко определена, каждый результат построен на предыдущих доказательствах. Когда узнаёшь факт в этой области, ты можешь на него положиться, поскольку сама математика вывела его. Даже у несовершенных результатов, как приближение и вероятностные алгоритмы, есть строгий анализ их несовершенства. Другие дисциплины информатики, вроде сетевой топологии и криптографии, имеют такой же удовлетворительный статус.
А теперь я работаю с разработкой ПО, и это невыносимо скользкая тема. Ни одна концепция точно не определена. Результаты оцениваются с характеристиками «обычно» или «в целом». Сегодняшние исследования могут или не могут помочь завтрашней работе. Новые подходы часто опровергают предыдущие методы, а сами ярко горят недолгое время, а потом выходят из моды, когда всплывают их ограничения. Мы верили в структурное программирование. Затем начали верить в языки четвёртого поколения, потом в объектно-ориентированные методы, потом в экстремальное программирование, а теперь, может быть, в open source.
Но программирование — это именно то место, где происходит контакт шины с асфальтом. Мало кого волнует, действительно ли равняется , чисто ради красоты вопроса. Компьютерная область имеет дело с компьютерами. Это написание программ для решения реальных человеческих проблем и работа этих программ на реальных машинах. Согласно тезису Чёрча-Тюринга, всё компьютерное оборудование по существу эквивалентно. Так что пока компьютерная архитектура классная, реальным ограничением в информатике остаётся проблема создания программного обеспечения. Нам нужны программы, которые можно собрать за разумное время и за разумную стоимость, которые работают примерно так, как планировали дизайнеры, и работают без ошибок.
Имея такую цель, я всегда был озабочен одним вопросом (как и многие другие исследователи): почему программисты не могут получить более строгие результаты, как в других областях информатики? Если спросить иначе, «Какую часть архитектуры и конструкции программ можно сделать формальной и доказумой?» Ответ на этот вопрос находится на рисунке 1.
Рисунок 1: Яркая линия в информатике
Темы выше этой линии принадлежат к разработке программного обеспечения. Области исследования ниже этой линии — основные предметы информатики. У последних есть ясные, формальные результаты. Для открытых проблем в этой области мы ожидаем получения новых результатов, которые будут формально сформулированы. Эти темы основаны друг на друге: криптография на сложности, а компиляторы на алгоритмах, например. Более того, мы верим, что доказанные результаты в этих областях останутся таковыми и через 100 лет.
Так что это за яркая линия, и почему ниже неё нет ни одной из тем программирования? Линия — это качество под названием «прямое человеческое участие». У разработки ПО есть такое качество, а у традиционной информатики его нет. Результаты из дисциплин ниже линии могут быть использованы людьми, но эти результаты напрямую не подвержены влиянию людей.
У разработки ПО есть неотъемлемый человеческий компонент. Например, эксплуатационная надёжность ПО представляет собой возможность понимания, нахождения и исправления человеком дефектов программной системы. На эксплуатационную надёжность могут влиять некоторые формальные понятия информатики — может быть, цикломатическая сложность графа контроля программного обеспечения. Но эксплуатационная надёжность критически зависит от людей и их способности постигать значение и замысел исходного кода. На вопрос, обладает ли конкретная программная система высокой эксплуатационной надёжностью, невозможно ответить просто механически изучив ПО.
То же самое с безопасностью. Исследователи использовали некоторые формальные методы, чтобы узнать влияние программной системы на здоровье и собственность людей. Но никакая дискуссия о безопасности программ не может считаться завершённой без обращения к человеческому компоненту изучаемой системы. Аналогично для разработки требований. Мы можем разработать любые техники опроса, чтобы добиться от заинтересованных сторон точных требований, и можем создать различные системы для их записи. Но никакой объём исследований в этой области не изменит того факта, что сбор требований часто предусматривает разговор или наблюдение за людьми. Иногда эти люди сообщают нам правильную информацию, а иногда — нет. Иногда люди лгут, возможно, по уважительным причинам. Иногда люди честно пытаются передать правильную информацию, но не могут этого сделать.
Это наблюдение приводит к Тезису Коннелла:
Разработка программного обеспечения никогда не будет строгой дисциплиной с подтверждёнными результатами, поскольку в неё вовлечена деятельность человека.
Это экстра-математическое утверждение о границах формальных систем. Я не имею никаких доказательств за или против. Но факт в том, что человеческие проблемы остаются центральными вопросами разработки программного обеспечения:
- Что должна делать эта программа? (требования, юзабилити, безопасность)
- Как должна выглядеть программа внутри, чтобы её легко было починить и модифицировать? (архитектура, дизайн, масштабируемость, переносимость, расширяемость)
- Как долго займёт её написание? (оценка)
- Как мы должны её разрабатывать? (кодирование, тестирование, измерение, конфигурация)
- Как следует эффективно организовать работу команды? (менеджмент, процесс, документация)
Мой тезис объясняет, почему разработка ПО настолько трудная и такая скользкая. Проверенные методы одной команды программистов не работают для других команд. Исчерпывающий анализ прошлых проектов может быть бесполезен для хорошей оценки следующего. Каждый из революционных инструментов разработки помогает по чуть-чуть, а затем не соответствует своим великим обещаниям. Причина в том, что люди слишком мягкие, разочаровывающие и непредсказуемые.
Прежде чем перейти к последствиям моего утверждения, рассмотрим три вероятных возражения:
Тезис реализует сам себя. Если какая-то область разработки программного обеспечения вдруг решена строго, то вы можете просто изменить определение разработки ПО, чтобы исключить из него эту проблему.
В чём-то это возражение верное, но не во всём. Я утверждаю, что набор дисциплин, обычно называемый разработкой программного обеспечения, будет и дальше по существу бросать вызов строгому решению. Узкие аспекты некоторых проблем могут поддаваться формальному подходу, но их успех будет лишь на периферии ключевых проблем разработки.
Статистические результаты в программировании уже опровергают этот тезис.
Эти методы в целом решают проблему оценки и включают в себя Function Point Counting, COCOMO II, PROBE и другие. Несмотря на свой математический вид, эти методы не являются доказательствами или формальными результатами. Такая статистика — просто попытка квантифицировать субъективный человеческий опыт по прошлым софтверным проектам и экстраполировать его на будущие проекты. Иногда работает. Но внешне строгие формулы в этих схемах — это свинья с губной помадой, если использовать современное выражение. Например, одна из формул в COCOMO II выглядит так: , где , а — это набор из пяти факторов масштабирования, таких как «гибкость разработки» и «сплочённость команды». Сама формула выглядит строго, но в ней доминирует показатель, составленный из человеческих факторов.
Формальные процессы разработки, такие как метод «чистой комнаты», постепенно находят строгие, доказуемые методы. Они поднимают яркую линию, чтобы перенести под неё ранее размытые темы.
Действительно, исследователи формальных процессов демонстрируют прогресс в решении разных проблем. Но их можно уличить в нарушении самого первого возражения в этом списке: они слишком узко определяют разработку ПО, чтобы она поддалась строгому решению. Формальные методы просто удобно для себя истолковывают любую проблему, которая основана на человеческом участии и интерпретации. Например, ключевым элементом формальных методов разработки является создание строгих, недвусмысленных спецификаций. Эти спецификации затем используются для проведения (и доказательства) последующих этапов разработки. Конечно, формальный метод может содержать недвусмысленную схему семантической нотации. Но никакой формальный метод не содержит точного рецепта, как перевести в недвусмысленное состояние смутные мысли людей о том, что должна делать программа.
Вопреки этим возражениям я заявляю, что разработка ПО по существу отличается от традиционной, формальной информатики. Первая зависит от людей, а вторая — нет. Это приводит нас к Заключению Коннелла:
Следует прекратить попытки доказать фундаментальные результаты в разработке ПО и признать, что существенные достижения в этой области будут лишь общими рекомендациями.
Например, Дэвид Парнас в 1972 году написал замечательную научную статью «О критериях разложения системы на модули». Она описывает простой эксперимент, который Парнас провёл с альтернативными стратегиями дизайна ПО, одна с сокрытием информации, а другая с глобальной видимостью данных. Затем на основе этого маленького эксперимента он вывел несколько заключений и привёл рекомендации. Ничего в статье не является доказанным, и Парнас не гарантирует, что следуя рекомендациям каждый получит аналогичный результат. Но статья содержит мудрые советы и сильно повлияла на популярность объектно-ориентированных языков программирования.
Другой пример — это огромная работа Института программной инженерии в Университете Карнеги — Меллон, известная как CMMI. CMMI начиналась как модель процесса разработки ПО, а теперь разрослась и включила в себя также другие типы проектов. Объём CMMI примерно 1000 страниц — не считая примеров, интерпретаций и обучающих материалов — и она представляет более 1000 человеко-лет работы. Многие крупные организации использовали её и добились значительного прогресса в своих процессах разработки ПО и продуктах. Но в CMMI нет ни единого твёрдо доказанного результата. Это просто набор (хорошо проработанных) предложений, как организовать софтверный проект на основе методов, которые были эффективны для других организаций в прошлом. На самом деле Институт программной инженерии констатирует, что CMMI — это даже не процесс, а скорее мета-процесс, детали которого заполняются каждой организацией.
Другие области исследований в том же духе — это паттерны дизайна, стили архитектуры, рефакторинг на основе сомнительных методов, гибкая методология разработки и визуализация данных. Эти дисциплины могут частично содержать проверенные результаты, но в целом нацелены на системы, которые изначально содержат человеческое участие. Чтобы внести ясность: ключевые темы информатики (ниже яркой линии) — жизненно важные инструменты для любого разработчика. Знания алгоритмов важны при проектировании высокопроизводительных приложений. Теория массового обслуживания помогает проектировать ядро операционной системы. Методология «чистой комнаты» тоже полезна в некоторых ситуациях. Анализ статистики может пригодиться при планировании похожих проектов с похожей группой участников. Но формализм — это просто необходимое, а не достаточное условие для хорошей разработки. Давайте для примера рассмотрим строительство и архитектуру (то есть дома и здания).
Представьте блестящего инженера-строителя, лучшего в мире эксперта по строительным материалам, зависимости деформаций от напряжений, распределению нагрузок, защите от сдвига ветров и подземных толчков, и т. д. Этот парень занесён в записные книжки архитекторов во всех странах, чтобы звонить ему для консультаций по каждому строительному проекту. Будет ли этот мифический инженер-строитель настолько же хорош в проектировании зданий, которые он анализирует? Совсем нет. Он может теряться в разговорах с клиентами, неспособен проектировать приятные для проживания места, его фантазии не хватает, чтобы придумать решения для новых проблем, и он до чёртиков скучен. Техника строительства полезна для реальных архитекторов, но её недостаточно для хорошего проекта. Удачная архитектура требует креативности, концепции, междисциплинарного мышления и гуманизма.
Таким же образом и классическая информатика полезна в разработке ПО, но её никогда не будет достаточно. Проектирование хорошего программного обеспечения тоже требует креативности, концепции, междисциплинарного мышления и гуманизма. Это наблюдение освобождает исследователей процесса разработки программного обеспечения. Они могут тратить время на изучение успешных методов — накапливая совокупность коллективных знаний для будущих практиков. Мы не должны втискивать разработку ПО в рамки расширения информатики на математической основе. Это не сработает и может отвлечь нас от полезных открытий, которые ещё ждут своего времени.
Выражение признательности
Благодарю Стива Гомера за дискуссию, которая разожгла мой интерес к этому вопросу.
Я новичок в области компьютерных наук и программирования, и мне было интересно, есть ли разница между информатикой и программированием? и вы можете выбрать для изучения только одного из них в университете, или оба из них?
Информатика - это исследование того, что компьютеры могут делать; программирование - это практика создания компьютеров.
Взгляните на курсы /программы, предлагаемые вузами, которые вас интересуют, чтобы узнать, является ли курс курсом CS, курсом программирования, чем-то другим (например, Software Engineering) или даже комбинацией из вышеперечисленного. Многие курсы, которые рекламируются как «компьютерные науки», предлагают значительный компонент программирования, который может быть таким, что вы можете использовать теоретические части курса на практике или, возможно, сами по себе, чтобы вы могли изучить навыки создания программ.
Предостережение: «Компьютерная наука» в наше время стала грязной областью, потому что (по крайней мере, в Соединенных Штатах) университеты не имеют степеней в «программировании». Это означает, что люди, заинтересованные в программировании, должны зарегистрироваться для получения степени «Компьютерные науки», а в качестве реакции на то, что программы «Компьютерные науки» все больше подчеркивают программирование.
Тем самым, сама компьютерная наука - математическая наука strong . Вычислительная математика могла бы быть лучшим термином. Он включает изучение теории графов, алгоритмической сложности, формальной логики, автоматов и вообще любой логической структуры, которая может описывать преобразование или ответ на входные алгоритмы. Ученый-компьютер в классическом смысле может рассуждать о правилах, которые регулируют любую вычислительную систему (включая современные компьютеры), не зная подробностей реализации текущей архитектуры. Сильный фон в области компьютерных наук дает вам возможность разрабатывать (или отзывать) эффективные, масштабируемые алгоритмы, предвосхищать логические сокращения и разумно рассуждать о том, что доступно.
Напротив, программирование - это то, что человек делает, когда использует язык программирования , чтобы преобразовать алгоритм во что-то, что может сделать машина. (Это должно сделать очевидную интимную связь с информатикой и где большая часть путаницы исходит.) Программист (относительно среды и языка) должен иметь возможность принимать практически любой набор алгоритмов и преобразовывать их в форму как человека - и машиночитаемый путем написания кода. Сильный фон в программировании (как и большинство степеней CS) позволяет вам писать лучший код - где «лучший» код легче понять другим и более успешным в выражении алгоритма, который вы реализуете.
Конечно, существует большое количество перекрестных помех, и высокий уровень опыта в одном будет сильно соответствовать развивающемуся опыту в другом - как уже отмечалось, главный специалист CS почти всегда является грамотным программистом, а опытный программист взял множество принципов CS. Подумайте о физике и технике.
Хороший способ запомнить разницу заключается в следующем: если для этого требуется компьютер, чтобы увидеть, работает ли это его программирование, - если вы можете сделать это с помощью карандаша и бумаги, это компьютерная наука.
Информатика не больше о компьютерах, чем о астрономии телескопы. Эдсгер Дейкстра
Программирование - это создание компьютерной программы.
Я бы переформулировал ваш вопрос как «В чем разница между информатикой и программной инженерией?» В конце концов, оба они связаны с программированием.
Компьютерная наука - это аортальное исследование того, что такое вычисление, а что есть и что невозможно. Он рассматривает такие вещи, как Теория Гёделса и проблема с остановкой.
Разработка программного обеспечения - это то, как писать программы, которые выполняют то, что они были предназначены для работы, и являются надежными.
Если программирование является плотницким, тогда информатика - это архитектура /дизайн.
Edit
Дополнительная информация: в столярных изделиях вас интересуют такие вещи, как то, что нужно для создания вещей (рамка, затем пол, затем внутренние стены, затем гипсокартон и т. д.). Как вы его создаете, так что требуется меньше времени на создание, но его можно изменить позже.
В случае архитектуры (ее часть как CS в любом случае) вы занимаетесь такими вещами, как каковы возможности материалов, насколько большой пучок необходим для поддержки этого диапазона стены /крыши?
Аналогично CS - это теоретические возможности компьютеров, где программирование касается практического применения этих знаний.
Информатика - это программирование, поскольку физика - это машиностроение.
Информатика является теоретической, она требует научного и математического подхода к информации и ее вычислению.
Компьютерное программирование практично, это процесс проектирования, написания, тестирования, отладки и поддержки исходного кода компьютерных программ.
Это разные, но связанные с ними поля. Оба выиграли друг от друга.
Степень в области информатики намного шире по охвату и охватывает теорию, лежащую в основе вычислений. A степень в компьютерном программировании , с другой стороны, сосредоточена на разработке кодирования или программирования навыки учащихся путем обучения их на разных языках программирования. Если вы в замешательстве, вы можете просмотреть детали обеих этих программ в Калифорнийском колледже Сан-Диего. Это может дать вам некоторую ясность относительно объема этих степеней!
Компьютерная наука : Это исследование решения проблем с помощью компьютеров /вычислительных методов.
Компьютерное программирование: это часть процесса решения этой проблемы, которая составляет область информатики. Компьютерное программирование - всего лишь малая часть компьютерных наук.
Программирование - это люди. Люди читают, пишут и поддерживают код. Информатика - это математика - они реализуют и описывают алгоритмы.
Программирование (разработка) - это зарабатывание денег. Наука - это открытие новых вещей.
Читайте также: