Computer Science или что должен знать программист?
Программисты бывают разные. Мобильные разработчики на Kotlin и Swift, веб-программисты, использующие PHP, Python, Ruby, хардкорные электронщики на Си и Assembler. Главным их отличием является сфера, в которой они работают и используемый язык. Однако не редки случаи, когда, например, веб-разработчики уходят в mobile, электронщики в gamedev и т.д. А конкретно язык программирования вообще можно переучить за пару месяцев. Пропорции условны, а границы размыты. Языки и технологии меняются, и если всё так подвижно и непостоянно, что же объединяет всех этих людей? А объединяет их умение программировать в целом, не зависимо от языка, платформы и технологии. и знание английского языка, пока не поздно учи английский (вставка из «Криминальное чтиво»)
Умение же программировать складывает из практического навыка написания программ и теоретической базы из различных областей Computer Science. Какие алгоритмы нужно знать программисту, нужно ли ему разбираться в компьютерах, системах счисления, делить в уме столбиком и что вообще должен знать программист в широком смысле этого слова. На эти вопросы вам сегодня постарается ответить Макс — один из автора YouTube-канала PyLounge. Поехали!

Скажем так, Computer Science — это наука, объединяющая в себе различные области знаний, которые будут полезны специалисту, работающему с компьютерами и вычислениями. В общем-то это знания, которые пригодятся программисту. Самые необходимые из них, те, которые встречаются на практике постоянно я сейчас максимально кратко и перечислю.
Алгоритмизация (в целом). Суть в том, что не нужно заучивать реализацию чужих алгоритмов, а стараться развивать своё алгоритмическое мышление, чтобы ты сам мог составлять алгоритмы. Декомпозировать задачу и выявлять нужную последовательность действий. Развить эти навыки можно решая задачи и разбирая готовые алгоритмы, а не заучивая их. Кстати у нас на канале есть ролик «Как решать задачи по программированию». Ознакомьтесь, если интересно.
Оценка сложности алгоритмов. Да, да. Это то самое большое О. Кроме него есть ещё Тета и Омега, но в принципе можно обойтись и просто О-большим. Действительно важно хотя бы примерно прикидывать временную сложность алгоритма. Нужно понимать какой участок кода тормозит всё твою программу, почему O(n^2) хуже, чем O(n*log(n)), как следует переделать код чтобы добиться этого O(n*log(n)) и почему вот так лучше вообще не делать.

Это поможет вам писать нормально работящий код, который не будет решать 5 секундную задачу 15 минут на разогнанном I9. Сейчас уже недостаточно просто уметь решать задачу. Нужно уметь её решать максимально эффективным образом.
Кодировки — UTF-8, Windows-1251, ASCII и т.д. Очень многие программисты мучаются с различными проблемами, связанными с кодировками. Поэтому ориентируясь в этом хотя бы на минимальном базовом уровне, вы знатно облегчите себе жизнь.
Парадигмы программирования. Что такое объектно-ориентированное, функциональное, логическое программирование. Чем они отличаются, их преимущества и недостатки. Это поможет тебе выбрать наиболее подходящий инструмент и подход для максимально эффективного решения твоей задачи. Потому что язык и технология это в первую очередь просто инструменты, которые надо уметь грамотно выбирать под советующую работу.
Техники и приемы программирование. Стоит ознакомиться с понятием рекурсии, мемоизации, динамического, линейного программирования и тому подобного. А также понимать, что, где и когда (вставка Что, Где, Когда) лучше применять. Это поможет сделать твой код гораздо эффективнее и качественнее.
Архитектура компьютера. Хотя бы примерно понимать, что такое память в компьютере, зачем нужна, какая быстрее и т.д. Почему копировать объект 1000 раз не самая лучшая идея, зачем нужно кешировать информацию и т.д. Также неплохо бы разобраться в особенности вычислений процессором, видеокартой. Как грамотно распоряжаться программными ресурсами. Да и вообще полезно знать, как и что там работает в этой коробке под столом.
Ориентироваться в структурах данных. Списки, деревья, очереди и т.д. Просто зачем нужна каждая структура, какие, когда эффективнее использовать. Вот необходимо на проекте решить какую-то задачу, а ты такой «О, чем-то это задача похоже на историю с графами». Есть зацепка, начинаешь гуглить графы, алгоритмы решения задач на графах, библиотеки для этого. Поверь, твоя жизнь станет сильно легче, если конфиг настроек для бота ты будешь хранить в словаре, а не в массиве. Опять-таки, тебе не нужно уметь с нуля собственными руками реализовывать этот словарь, хеш-таблицу (хотя можно, ничего неподъёмного там нет). Просто надо знать, что она существует и когда обычно её применяют.
Базы данных. Для backend’деров это отче наш. SQL, запросы, таблицы, связи один ко многим, 1 к 1, многие ко многим, миграции. Что такое реляционные базы, не реляционные. Где лучше какие применять и почему. Это тот раздел, без которого точно не обойтись.
Архитектура программного обеспечения. Ранее я упоминал, что недостаточно чтобы программа просто работала. Она должна работать эффективно. Эффективно не только в плане производительности. Важно уметь писать код качественно, чтобы его было легко сопровождать, расширять. Серьёзное программирование это сложный итеративный процесс, зачастую комодный. Поэтому качественно спроектированная программа сделает вашу жизнь и жизнь других разработчиков лучше. Тут приходится понимание построение архитектуры ПО и грамотное использование паттернов (шаблонов) проектирование (GoF, GRASP, Enterprise). Кроме того, не мешало бы овладеть общепринятыми практиками (SOLID, KISS, DRY и т.д.)
Устройство Сети. Весь мир потихоньку переезжает в онлайн. Поэтому было бы неплохо разбираться в том, как работает Интернет. Опять-таки на базовом уровне. Что такое протоколы, сокеты, DNS, IP-адреса, зачем оно всё нужно и как между собой взаимодействует.
Важная заметка. Математика, в частности логика, комбинаторика, дискретка тоже входит в Computer Science. Поэтому коротко. Математика — круто. Математика точно нужна, но не всем и не всегда. Вообще математика для программиста эта тема довольно обширная и холиварная, заслуживающая отдельного обстоятельного разговора. Поэтому сюда я её включать не стал. Однако держу в курсе.
Best practice. Наверное, Не совсем про Computer Science. Но мне кажется, необходимо ознакомиться как принято писать код именно на вашем языке/стеке. Программирование есть программирование. Но согласитесь, в каждом омуте водятся свои черти. Поэтому будьте добры играть по их правилам или не играть вовсе.
Под конец я очень хочу порекомендовать ознакомиться с книжкой Феррейра Фило «Теоретический минимум по Computer Science». Она коротенькая, но даёт отличное общее понимание всего того, что тебе пригодится (и не отправит начинающего в психушку, как, например, труды Кнута). В том числе в этой книге есть и совсем немного про тот самый матан. Настоятельно призываю ознакомиться. Опытных вряд ли заинтересует, а для новичков самое то.

Как ты понял не нужно идеально всё знать наизусть. Достаточно разбираться в базовых понятиях, принципах и понимать, что, когда применять. Если ты понимаешь, что тебе нужно, но недостаточно глубоко знаешь это, всегда можно заглянуть в Интернет или справочник, спросить у кого-то. Когда ты выберешь специализацию, то будешь уже разбираться отдельных веща непосредственно на деле, когда коснёшься этого, предметно. Например, если решишь программировать ядро Linux, будешь подтягивать знания ОС и т.д.
Базовое понимание — это твой скелет. На которой в последствии ты будешь наращивать мясо из тонкостей, деталей и специфики.
Если я упустил что-то важное из виду, то обязательно напиши об этом в комментариях.
В некотором смысле программирование похоже на рисование. Сначала у вас есть только чистый холст и материалы. Нужно использовать сочетание науки, искусства и ремесла, чтобы определить, что со всем этим делать. (с) Эндрю Хант (Andrew Hunt)
P.S. Есть также видеоверсия данной статьи. Кому интересно, welcome на YouTube.
Scientific Computing is nowadays the “third pillar of science”, standing right next to theoretical analysis and experiments for scientific discovery.
Computation becomes crucially important in situations such as:
- The problem at hand cannot be solved by traditional experimental or theoretical means, such as attempting to predict climate change
- Experimentation may be dangerous, e.g., characterization of toxic materials
- The problem would be too expensive or time-consuming to try to solve by other avenues, e.g. determination of the structure of proteins
Furthermore, computer simulations can be embedded in optimization algorithms for optimal designs, e.g. the optimal design of aircrafts in the computer instead of experience driven trial and error designs with the support of expensive wind tunnel experiments.
Another characteristic of Scientific Computing is that it is a multidisciplinary activity. Generally, it involves experts in the application at hand, and also applied mathematicians and computer scientists that help to implement computational solution.
But what is Scientific Computing ?
The question is answered in [Golub&Ortega]* as follows:
… Scientific Computing is the collection of tools, techniques, and theories required to solve on a computer mathematical models of problems in Science and Engineering.
A majority of these tools, techniques, and theories originally developed in Mathematics, many of them having their genesis long before the advent of electronic computers. This set of mathematical theories and techniques is called Numerical Analysis (or Numerical Mathematics) and constitutes a major part of scientific computing. The development of the electronic computer, however, signaled a new era in the approach to the solution of scientific problems. Many of the numerical methods that had been developed for the purpose of hand calculation (including the use of desk calculators for the actual arithmetic) had to be revised and sometimes abandoned. Considerations that where irrelevant or unimportant for hand calculation now became of utmost importance for the efficient and correct use of a large Computer System. Many of these considerations – programming languages, operating systems, management of large quantities of data, correctness of programs – were subsumed under the new discipline of Computer Science, on which scientific computing now depends heavily. But mathematics itself continues to play a major role in scientific computing: it provides the language of the mathematical models that are to be solved and information about the suitability of a model (Does it have a solution? Is the solution unique?) and it provides the theoretical foundation for the numerical methos and, increasingly, many of the tools from computer science.
In summary, then, scientific computing draws on mathematics and computer science to develop the best way to use computer systems to solve problems from science and engineering.
*Gene H. Golub and James M. Ortega. Scientific Computing and Differential Equations – An Introduction to Numerical Methods. Academic Press, 1992.
Computer Science
Computer Science, или компьютерные науки, — это наука о методах и процессах сбора, хранения, обработки, передачи, анализа и оценки информации с использованием компьютерных технологий, которые обеспечивают возможность ее применения для принятия решений. В России Computer Science называют информатикой, но могут употреблять этот термин по-разному в зависимости от контекста.

Освойте профессию «Data Scientist»
Существуют схожие области, например, наука о данных или программная инженерия. Некоторые из них можно считать частью Computer Science, но разница в терминах все же есть: компьютерные науки — более широкое понятие. Они изучают компьютерные технологии и представление информации в целом, а не отдельные сферы, такие как разработка.
Для глубокого понимания Computer Science нужен хороший математический аппарат. В отличие от многих прикладных IT-направлений, эта сфера сильно связана с математикой. Компьютерные науки могут изучать в высших учебных заведениях на технических специальностях, посвященных информационным технологиям. Но осваивать их можно и самостоятельно.
Профессия / 24 месяца
Data Scientist
Дата-сайентисты решают поистине амбициозные задачи. Научитесь создавать искусственный интеллект, обучать нейронные сети, менять мир и при этом хорошо зарабатывать. Программа рассчитана на новичков и плавно введет вас в Data Science.

Кто пользуется Computer Science
- Разработчики, в особенности высокого уровня. Чтобы начать программировать, глубокое понимание компьютерных наук не нужно, но по мере развития человеку становятся нужны алгоритмы, теоретические знания, понимание, как устроены компьютеры и сети. Все это относится к Computer Science. Разработчик в любой сфере может столкнуться с необходимостью ее знать.
- Системные архитекторы и аналитики высокого уровня, которые работают с понятиями, имеющими отношение к CS.
- Инженеры, которые работают с компьютерными технологиями в дата-центрах или прокладывают сети, системные администраторы и другие специалисты.
- Ученые, которые изучают компьютерные науки как фундаментальную, научную дисциплину. Они могут заниматься в том числе теоретической информатикой или дискретной математикой. Это, например, преподаватели в вузах или другие специалисты-теоретики.
Для чего нужно знать компьютерные науки
Computer Science рассказывает, как устроены компьютерные системы, как в них представляется, хранится и передается информация, по какой логике они работают, — это помогает программировать эффективнее. С такими знаниями можно более результативно применять те или иные решения, решать более сложные задачи, избегать ошибок.
Существуют области, где понимание компьютерных наук нужно с самого начала. Это, например, системное администрирование или Data Science. Первое напрямую связано с инженерией, второе — с математикой и наукой о данных. Без понимания CS просто не получится усвоить теорию: она основана на информатике. Сюда же относится низкоуровневое программирование, близкое к «железной» части компьютеров.
Computer Science — это база, на которой строятся теоретические знания. С ней человек лучше понимает, что делает, быстрее учится и растет в профессиональном плане.

Станьте дата-сайентистом и решайте амбициозные задачи с помощью нейросетей
Что входит в компьютерные науки
Computer Science очень обширна, поэтому мы не сможем привести полный список сфер, которые в нее входят. Приведем примеры теоретических и практических дисциплин, относящихся к ней.
Математика
Математический анализ, линейная алгебра и другие дисциплины тоже важны, но больше всего связи с информатикой имеет дискретная математика. Она изучает «прерывистые», конечные, то есть дискретные структуры. На математике основано огромное количество алгоритмов, которые используются в разных отраслях IT. К дискретной математике относят теорию графов, конечные автоматы, комбинаторику и многие другие сферы.
Теоретическая информатика
Это фундаментальная наука, которая посвящена информации: тому, как она представляется, хранится и передается. Теоретическая информатика работает с абстрактными понятиями и теориями. Понятие «фундаментальный» означает, что эта наука не подразумевает создания чего-либо на практике: она может описать новый подход к хранению информации, но не реализовать машину, которая так ее хранит. К теоретической информатике можно отнести теорию информации и теорию кодирования — последняя посвящена преобразованию информации в коды. К этому же направлению относят изучение алгоритмов и устройства языков программирования.
Криптография и информационная безопасность
Эта отрасль изучает методы защиты информации от несанкционированного доступа, перехвата или прослушивания. Базовое понимание принципов информационной безопасности нужно всем, кто имеет дело с вебом, глубокие знания — пентестерам, этичным хакерам и специалистам по ИБ.
Читайте также Кто такой «белый» хакер
Языки программирования
Компьютерные науки — не то же самое, что программирование, хотя сферы связаны. CS изучает не столько особенности языков и умение их применять, сколько их внутреннее устройство в целом. Это то, как устроены языки программирования, какая у них структура, каким образом они реализованы и на чем строятся. Проектирование языков программирования, их классификация, анализ относятся к компьютерным наукам.
Архитектура компьютеров
Этот раздел рассказывает, как устроена компьютерная техника внутри, по какому принципу работают составные части: процессор, различные узлы и блоки памяти, другие структуры. Дисциплина сосредоточена на структуре внутреннего устройства. Для описания того, как все работает с точки зрения физики и электротехники, существуют другие направления, например компьютерная инженерия. Она тоже относится к Computer Science.
В первую очередь знание архитектуры компьютеров нужно низкоуровневым и системным программистам. Большинство популярных языков сейчас работают на «высоком» уровне, то есть близком к человеку. Но такие языки написаны на более низкоуровневых, а те, в свою очередь, на еще более низкоуровневых. Уровень постепенно понижается вплоть до машинных кодов. Так что в конечном итоге понимание архитектуры может понадобиться любому разработчику.
Теория искусственного интеллекта
К этой огромной сфере относят все, что связано с «умным» поведением компьютерных систем. Это робототехника, компьютерное зрение и обработка компьютером естественного языка — ее еще называют NLP. Сюда же относятся машинное обучение, теория нейронных сетей и многое другое.
Такие знания в основном нужны специалистам, занятым в соответствующих отраслях. Например, разработчику из сферы Machine Learning они понадобятся с первых дней работы, а фронтендер может не столкнуться с ними за годы. Но иметь хотя бы поверхностное понимание работы ИИ все равно стоит.
Информационные сети
Этот раздел изучает сеть: то, как она устроена, каким образом передает информацию. Он описывает сетевые протоколы, их особенности и безопасность. Понимание сетей может понадобиться любому, кто имеет дело с разработкой интернет-сайтов, приложений или распределенных систем. Они важны специалистам по информационной безопасности, администраторам, инженерам и многим другим.
Базы данных
Вокруг баз данных — структурированных хранилищ информации — существует отдельная дисциплина. Она описывает подходы к хранению данных, организации связей между ними и доступа. Отдельные знания из этой дисциплины нужны всем разработчикам. Глубоко ее понимать обязаны администраторы БД и люди, которые специализируются на работе с СУБД — системами управления базами данных.
Алгоритмы
Изучение, создание и применение алгоритмов — это отдельный большой раздел науки. Он имеет огромное практическое применение: алгоритмы нужны, чтобы решать сложные прикладные задачи или оптимизировать код. Простой пример — сортировка: разные алгоритмы имеют различную эффективность и скорость работы, и для решения той или иной задачи можно подобрать свой. И таких примеров очень много. Поэтому хороший IT-специалист должен быть знаком с основными алгоритмами из своей сферы.
Слово «алгоритм» означает последовательность действий, определенный принцип выполнения задачи. Оно образовано от имени древнего среднеазиатского математика Аль-Хорезми. Алгоритмы тесно связаны с дискретной математикой и с теорией информации. Они оперируют математическими понятиями и решают в том числе задачи, которые изначально описала дискретная математика.
Data Scientist
Дата-сайентисты решают поистине амбициозные задачи. Научитесь создавать искусственный интеллект, обучать нейронные сети, менять мир и при этом хорошо зарабатывать. Программа рассчитана на новичков и плавно введет вас в Data Science.

Статьи по теме:
Делимся ресурсами для поиска и подборкой возможностей для студентов в IT, которыми можно воспользоваться прямо сейчас
Подборка вузов со стоимостью обучения, проходными баллами и приятными бонусами
Делимся подборкой задач с ответами, а также опытом успешных руководителей, HR-специалистов и трудоустроившихся айтишников
MSc Scientific Computing with Data Science
Are you a recent graduate in a Physical or Life Science who would like to learn more about computing and how it is applied to advance scientific research? This programme will help you achieve your goals. Schools in the Faculty of Science are all ranked in the top 5 for research in the UK (THE analysis of REF 2021) and Bristol is ranked in the top ten in the UK for Natural Sciences (QS 2023). Develop your skills in coding, machine learning and high-performance computing and learn how to apply these to cutting-edge computational problems drawn from across the sciences.
Scientific computing is an interdisciplinary field that uses computer science, data science and digital technology to solve problems across a wide range of subject areas, including maths, engineering, biology, physics, chemistry, geography and earth sciences. Whatever your scientific background, this programme will train you in coding and data science, building on your core scientific knowledge and giving you a robust appreciation of what can be achieved by combining these skills.
You will master modern programming languages, data science and machine learning algorithms, and apply them to problems in your chosen science. You will understand the main software engineering concepts and principles involved in scientific computing and data science and use them to model complex scientific systems, giving you an edge in a competitive and fast-changing labour market. Through project work, industrial networking and visits, you will have opportunities to build contacts, opening up additional job opportunities once qualified.
Most of your core teaching will be delivered by academics linked to Bristol Scientific Computing (BriSC), who are based in the Faculty of Science. BriSC brings together experts from across the University whose teaching and research focus on applying the latest computational techniques to key scientific problems, such as changes in the earth’s atmosphere, the reactions of molecules or how galaxies are formed. The learning of programming languages and computational techniques is most effective when it is practice-based. Therefore, the computing units in this programme are mainly delivered through interactive workshops and student-led activities, supported by seminars and tutorials.
The MSc in Scientific Computing with Data Science builds on the University of Bristol’s unique strengths and facilities as a world-class centre for supercomputing, data science and data-intensive research.
Key information
Programme duration One year full-time Start date September 2024 Application deadline
Overseas applicants: 24 July 2024.
Home applicants: 9 August 2024.
Please note that due to high demand, some programmes may close earlier than advertised. Early applications are advised to avoid disappointment. Places are limited and allocated on a continuous basis from September 2023 until all places are filled.
Delivery method On-Campus Location
Awards available MSc
On demand academic talks
Hear directly from an academic giving you a deeper insight into this programme.
Programme structure
This programme will admit students with any scientific background. Prior computing experience is useful but not essential; you will be streamed according to your computing knowledge to bring everyone to the same level at the end of your initial coding course.
You will take 80 credit points of compulsory units covering:
- Scientific programming using modern interpreted and compiled languages
- Research software engineering best practice, including version control, modern programming environments and testing
- Data analysis methods including data manipulation and cleaning, regression and machine learning
- Data visualisation
- Numerical methods
In addition, you will take a 20 credit point group project, applying coding and data analysis to problems set by industrial and academic partners, as well as choosing additional credits from a range of final year options from our undergraduate programmes (depending on your qualifications and timetabling).
To complete your studies, you will carry out a 60 credit point individual research project, which you can choose from a selection proposed by project supervisors. This project will provide you with first-hand experience in planning, running, documenting, and presenting a substantial piece of original work, applying your computing skills to a cutting-edge challenge in science.
Visit our programme catalogue for full details of the structure and unit content for our MSc in Scientific Computing with Data Science.
World-leading research
The University of Bristol is ranked fifth for research in the UK (Times Higher Education).
94% of our research assessed as world-leading or internationally excellent.
Entry requirements
An upper second class honours degree (or international equivalent) in Natural/Physical Sciences (e.g. Chemistry, Physics, Earth Science, Geology, Geographical Sciences, Environmental Sciences). Degrees in Life Sciences (e.g. Biochemistry, Pharmacology, Molecular Biology, Computational Biology, Biophysics, Cell biology, Molecular biology, Physiology, Anatomy, Zoology, Plant sciences, Neuroscience, Psychology, Virology, Microbiology, Immunology, Medicine) will need to demonstrate competency in Maths with at least one undergraduate Maths module at 2.1 or above. Engineering or Mathematics and Statistics degrees will also be considered if applicants have a minimum of 5 science modules at 2.1 or above. Computing experience is not essential.
Unfortunately we cannot consider applicants with Computer Science degrees for this programme.
For applicants who are currently completing a degree, we understand that their final grade may be higher than the interim grades or module/unit grades they achieve during their studies.
We will consider applicants whose interim grades are currently slightly lower than the programme’s entry requirements. We may make these applicants an aspirational offer. This offer would be at the standard level, so the applicant would need to achieve the standard entry requirements by the end of their degree. Specific module requirements may still apply.
We will consider applicants whose grades are slightly lower than the programme’s entry requirements, if they have at least one of the following:
- evidence of significant, relevant work experience with minimum of 6 months working at solving scientific problems or as a technician.
- a relevant postgraduate qualification.
If this is the case, applicants should include their CV (curriculum vitae / résumé) when they apply, showing details of their relevant work experience and/or qualifications.
See international equivalent qualifications on the International Office website.
Admissions Statement
Read the programme admissions statement for important information on entry requirements, the application process and supporting documents required.
English language requirements
If English is not your first language, you will need to reach the requirements outlined in our profile level E.
Fees and funding
UK: full-time £15,100 per year Overseas: full-time £34,100 per year
Fees are subject to an annual review. For programmes that last longer than one year, please budget for up to an 8% increase in fees each year.
Alumni discount
University of Bristol students and graduates can benefit from a 25% reduction in tuition fees for postgraduate study. Check your eligibility for an alumni discount.
Funding for 2024/25
Further information on funding for prospective UK and international postgraduate students.
Career prospects
This MSc provides graduates with the skills needed for successful careers in computing, data analysis and scientific research in private and public sector roles. Through interactive workshops and project work, you will develop a strong foundation in how to apply modern computing to solve problems in science, providing you with an edge in a competitive and fast-changing labour market. In addition, project work provides you with an opportunity to build contacts, with the potential to open up additional career opportunities once qualified. This will be supported by opportunities for networking with industrial users of scientific computing through lectures, visits and, where appropriate, projects. This will be an intense and focussed programme for experienced learners. Projects provide extensive opportunities to develop skills in communication, presentations, technical writing, project management and group work, as well as developing networking skills and industry contacts.
