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

2 года назад я написал статью о классификации знаний в области программирования. Это было на волне интереса и моей активной деятельности по самообразованию в компьютерных науках. Написал статью и забыл о ней. Публиковать на Хабре не собирался. В конце концов, она базируется на моем личном опыте и знаних, которые могут оказаться весьма субъективны.

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

До повторения кода, основанного на определенных условиях. Как выполнить код, основанный на нескольких условиях, где есть много вариантов. Курс базового программирования разделен на 10 уроков в два часа и направлен на предоставление полезных элементов для изучения основ информатики и разработки веб-приложений, настольных и мобильных приложений. Целью курса является предоставление полезных инструментов для изучения основных механизмов разработки программного обеспечения, позволяющих участникам, при желании, проводить самостоятельное изучение, а также разработку базового программного обеспечения.

Недавно, на фоне постоянно поступающих вопросов «как научиться программированию?», я вспомнил про этот материал и перечитал его. Прошло уже 2 года, пополнился опыт, добавились знания, изменились взгляды. Но эта статья для меня не утратила актуальности, и я не нашел почти ничего, что хотел бы в ней изменить. Мне показалось, что она все же достойна публикации. И, возможно, кому-то она поможет в собственном профессиональном развитии.

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

Нужны ли мне специальные инструменты? Базовых навыков работы с компьютером достаточно. Вам не нужен какой-либо конкретный инструмент, любой портативный компьютер в порядке. Нет, программное обеспечение, которое они обслуживают, является открытым и бесплатным, мы загружаем все вместе.

Но прежде, чем «запустить» материал, еще небольшое отступление. О том, почему вообще я все это писал. Дело в том, что у нас в странах бывшего СССР с образованием в области IT очень туго. С одной стороны нет программ обучения, которые подготовят специалистов на должном уровне (наверное, за очень редкими исключениями, которые можно отнести к погрешности). С другой стороны, из-за широких возможностей самообразования, программисты и не спешат учиться в ВУЗах - все стремятся начать практиковать как можно раньше. Часто изучается только одно направление (например PHP+Mysql - самое популярное) и в бой. Причем, на этом все заканчивается. В итоге у нас огромное количество программистов, которые и базовых вещей не знают. Отсюда вытекают проблемы с качеством кода, и с эффекивностью алгоритмов, с велосипедированием.

Да, цель состоит в том, чтобы предоставить инструменты, чтобы сделать первое простое программное обеспечение самостоятельно. Но основная цель заключается в создании основ для действительно изучения «механизмов» и «методов» на базе разработки программного обеспечения, которые позволяют автономно продолжать процесс обучения.

Некоторое время она также занималась разработкой веб-сайтов и мобильных устройств. Курс будет активирован с минимум 5 участниками на модуль. Участие в курсе будет считаться подтвержденным после получения заполненной формы и подписано вместе с получением оплаты членского взноса банковским переводом.

Но программирование - это полноценная область знаний, которая требует в том числе и инженерной подготовки. Точно так же, как строительство или телекоммуникации. Да, построить дом (особняк) можно своими руками и без образования. А поднять большинство сайтов можно прочитав пару книг по PHP и HTML. Но многоэтажку без специальной подготовки не построишь, как и Гугл не напишешь, не зная основ.

У всех возникла новая задача. Это не всегда легко, и мы не всегда бесстрашны. Вот почему, для вызова, который мы называем нашим курсом «Основы программирования», мы решили дать вам указания и советы, чтобы вы чувствовали себя уверенно, сидя на клавиатуре.

Почему Основы программирования - отличный курс для начинающих без опыта программирования?

Мы консультировали наших лучших студентов и преподавателей на курсе и делились с вами своим опытом, рекомендациями и советами. Программа разработана с презумпцией того, что большинство студентов, обучающихся по курсу, не имеют опыта программирования. Один из наших ученых четвертого класса проводит параллель обучения в Университете программного обеспечения и университетов. Главный девиз в программировании - «Не открывать заново горячую воду», - говорит Тони.

Возможности для самообразования в компьютерных науках сейчас огромны. Единственное, чего не хватает, - это системности подготовки. Как разобраться, что и в какой последовательности изучать? Мне кажется, что этот материал поможет разложить по полочкам области знаний в компьютерных науках и составить для себя программу изучения по книгам. Выбор книг - тема отдельная, в рамки статьи не входит, но это можно обсудить в комментариях.

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

Определяет атмосферу во время тренировки как «приятное и подстрекательство к вопросам». Помимо теории, в класс входит много практики - только во второй части есть помощники, которые готовы помочь всем и ответить на любые вопросы об упражнениях. Некоторые из преимуществ языка. Интуитивная среда разработки; Многие вспомогательные средства; Достаточно гибкая разработка любых приложений - то есть, подразумевает серьезное развитие за пределами первоначального уровня. Его можно использовать как для изучения принципов объектно-ориентированного программирования, так и для концепций функционального программирования - двух очень разных подходов к написанию кода.

Поехали.

Меня иногда спрашивают, что нужно выучить, чтобы стать программистом. Вопрос несколько наивный, т.к. нормально ответить на него по-моему невозможно. Т.е. для начала нужно выяснить, каким программистом нужно стать. Да и вообще, программистом ли? Кроме того, на рынке востребованы как высококвалифицированные дорогие специалисты, так и “рабочая сила”. Пакет знаний и опыта первых и вторых отличается в значительной степени.

Как мы подходим к материалу, который мы изучаем в Основах программирования?

Ответ, который мы получаем от всех лекторов и студентов на этот вопрос, уникален: серьезно. Филипп говорит, что для некоторых людей участие в подготовительном курсе по программированию - эксперимент; для других это четкий шаг к цели, а именно к профессии. В любом случае, нужно подойти с терпением, любопытством и упорством. В мире, где практически все вокруг нас управляется программным обеспечением, знание того, как программировать, даже на базовом уровне, становится обязательным условием для того, чтобы называть человека грамотным.

Но, не смотря на такую расплывчатость вопроса, дать ответ на него все же можно. Можно описать примерный максимум знаний, которые так или иначе относятся к программированию. Собственно, этот максимум обычно и стремятся преподать в ВУЗах на специальностях, в названии которых фигурирует слово “программист”.

Я учился на программиста в колледже, потом в университете. Именно университет немного разложил по полочкам понимание и взаимосвязь дисциплин, относящиеся к так называемым компьютерным наукам. Пусть знания, которые там давали, были недалекими и немного устаревшими, но системный подход у них был сформирован неплохой. Спустя годы практики после окончания обучения я пришел к выводу, что ВУЗовская классификация дисциплин вполне хороша и позволяет ответить на вопрос, что же следует знать любому программисту.

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

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

Конечно, знать все невозможно. Да и не нужно. Кроме того, какие-то вопросы нужно знать глубоко, а в других достаточно поверхностного обзорного понимания. По-этому в зависимости от специализации некоторые дисциплины более актуальны, некоторые менее. Но общие базовые знания необходимы почти по всем из них для любого инженера-программиста, от системщика до веб-разработчика.

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

Где решать проблемы с упражнениями?

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

В предыдущем абзаце я специально ввел термин “инженер-программист”. Как-то получается так, что программист - это не обязательно инженер. Даже из определения Википедии следует, что инженер - это в первую очередь проектировщик. Это тот, кто создает, т.е. проектирует системы. А в практике программирования проектирование нужно не всегда. Иногда достаточно кодирования: используя данный набор технологий, слепить что-то работающее. Типичный пример - стадо корпоративных или маркетинговых сайтов на джумлах, ворпрессах, друпалах и т.д. Это уровень техника, не инженера. Это уровень среднего образования. И работать техником можно даже после окончания курсов какого-либо языка программирования, крепкая теоретическая база там не нужна.

Как подготовиться к вступительному экзамену?

В системе более 30 экзаменов, которые проверяют все темы преподаваемого материала, а также осуществляют логическое мышление. Тони советует: Станьте более трудными задачами, усложняйте уже решенные, попробуйте разные решения. Нет лучшей подготовки, чем решение проблем с предыдущих экзаменов. Студент, который может справиться с 70% задач сам по себе, не вызывает беспокойства по поводу его работы.

Эдо дает хорошую идею - как только задача будет решена самостоятельно, посмотрите на решение автора. Таким образом, вы можете изучить достаточно полезные методы для решения проблемы. Для вступительного экзамена требуется, чтобы учащиеся имели твердую подготовку, о которой мы говорили выше, а также трезвую оценку времени и возможностей. Если по заданному заданию учащиеся берут меньше максимального количества очков и не знают, где их ошибка, было бы лучше продолжить следующую задачу, где они также набирают очки, а не убивают время до окончания экзамена для привлечения других, например, 30 пунктов от текущей задачи.

И, возвращаясь к инженерам-программистам, я хочу предложить свой граф дисциплин, которые изучают программисты. Очевидно, что одни дисциплины активно используют знания других, либо вовсе вырастают из других. Соответственно для полного понимания “верхнего” предмета, необходим какой-то уровень понимания нижнего.

Граф состоит из предметов (дисциплин) и разбит на уровни. Самый нижний - Общая база - вообще отношения к компьютерным наукам не имеет. Он приведен только для того, чтобы показать, на чем базируются дисциплины компьютерных наук.

Иван советует делать регулярные перерывы, поскольку они также являются фактором хорошей работы и препятствуют так называемому выгорание. По словам Преслава, важно построить устойчивое алгоритмическое мышление, решая множество задач, а не механизм решения конкретных задач.

Формула успеха по Тони следующая: Код. Приходите на подготовку к экзамену. Приходите, когда у вас есть свободное время и решайте проблемы с друзьями. Приходите на наставнические собрания вашей или другой группы, спрашивайте, читайте, пишите. И что-то чрезвычайно важное - не забывайте отдыхать! Делайте регулярные перерывы, отвлекайте себя. Если у вас есть трудности с задачей, сделайте перерыв, прогуляйтесь. Затем повторите попытку, удалите запись и начните снова.

Между дисциплинами существуют 2 вида связей: использование (обычная стрелка) и расширение (контур стрелки). Использование подразумевает необходимость фрагментарных знаний другого предмета, а расширение - необходимость как минимум обзорных, но полных знаний расширяемой дисциплины.

Первый уровень из CS (computer science) - Специальная база . Это стартовая площадка для любого программиста по четырем фронтам:

Рекомендации всем потенциальным студентам

Сашо собирает весь свой опыт в следующем советнике по приему советников программ: Не пропустите лекции, напишите домашнее задание, оцените других, чтобы увидеть новые типы ошибок и типов кода, решить все задачи экзамена. В общем, не думайте, что вы в школе или университете. Это нечто совершенно новое, дать ему все и получить все.

Эдо пошел так же, как сотни людей берут на себя ответственность каждый месяц и прекрасно знают, что иногда это может казаться невозможным и безнадежным. Самое главное не потерять энтузиазм, чтобы справиться с предстоящими проблемами. Преслав предупреждает: «Приготовься на многие ночи, наполненные мечтами о матрицах и битах».

  1. арифметические основы ЭВМ (системы счисления и операции с числами, логические операции);
  2. физические основы ЭВМ (полупроводники, транзисторы, логические элементы, схемы, интегральные микросхемы);
  3. теория алгоритмов (алгоритмы и структуры данных; сложность, эффективность; способы представления информации в памяти);
  4. языки программирования (задача и понятие ЯП, уровни, типы языков, абстракция, уровни абстракции, трансляция/компиляция, шаблоны, принципы, парадигмы - обзор).

Специальная база предлагает фундаментальные теоретические знания, на которых строятся дисциплины более высоких уровней. Для среднего программиста необходимы обзорные знания по всем предметам специальной базы. Для некоторых специализаций требуется углубленное понимание теории алгоритмов (прежде всего - разработчикам разного рода библиотек).

Обучение программированию детей в первом классе?

Если вы также захотите отправиться в приключение под названием «Основы программирования», обязательно зайдите на следующий БЕСПЛАТНЫЙ курс. Однако Европейский Союз обладает лишь несколькими компетенциями в области образования; процесс принятия решений предоставляется государствам-членам. Такие страны, как Великобритания, Эстония или Финляндия, уже начали преподавать основы программирования на первых уровнях школ.

Базовые образовательные программы чешских начальных школ даже не учитывают этого, преподавание программирования носит добровольный характер. Возможность создать компьютерную таблицу, или быть опытными в использовании Интернета в настоящее время один из основных навыков, постоянно эскалация развития цифровых технологий предполагает, что сегодня с низким, и это будет еще хуже.

Уровнем выше располагаются дисциплины, которые являются базовыми именно в программировании. По-этому я назвал этот уровень Основы . В него входят:

  1. архитектура ЭВМ (процессоры, микроархитектура, память, шины, ввод/вывод);
  2. обработка информации (теория информации, статистика, модели, поиск данных, лингвистические аспекты, обработка информации средствами табличных процессоров);
  3. основы C/C++ (базовые свойства языка, синтаксис, указатели, ввод/вывод, массивы, основы STL).

Следом за Основами идет Уровень 1 . Это первый прикладной уровень, и особо нетерпеливые могут начать коммерческую практику, овладев этим уровнем. Он включает 5 дисциплин:

Люди, которые хотят работать в течение нескольких лет, должны иметь базовое представление о том, как создавать программное обеспечение, веб-сайты или приложения. По словам председателя Школы образовательной информатики Петра Наске, она не предназначена для программиста для каждого ребенка. Но, изучая секреты программирования, дети должны приобретать ряд других навыков, таких как аналитическое и критическое мышление и развитие творческой деятельности.

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

  1. основы ASM (развитие архитектуры ЭВМ в направлении программирования, написание простейших драйверов и алгоритмов, ассемблерные вставки в C/C++);
  2. C/C++ (ООП, разработка прикладных приложений, библиотеки, WinAPI, make utils, параллельное программирование).
  3. операционные системы (архитектура ОС, процессы, межпроцессное взаимодействие, потоки, планирование, работы с памятью и переферией, POSIX-системы);
  4. системный анализ (предметная область, бизнес-процессы, потоки, диаграммы, принципы и теория системного анализа);
  5. базы данных (теория множеств, виды СУБД, реляционные СУБД, модели данных, SQL, конкретные БД).

Следующий уровень - Уровень 2 - развивает предыдущий. Кстати, компьютерные сети попали в него только по той причине, что для их изучения желательно (но не обязательно) предварительно освоить операционные системы. По развитости этот предмет ближе все-таки к первому уровню.

Уровень 2 включает:

  1. разработку ПО (жизненный цикл ПО, этапы разработки, основы ведения программных проектов, инструменты);
  2. анализ данных (Data Mining, OLAP, машинное обучение, нейронные сети, ИИ);
  3. компьютерные сети (по уровням стеков TCP/IP и/или ISO/OSI “от и до”, протоколы, сетевое программирование на C/C++);
  4. языки программирования с управляемым кодом (управляемый код, виртуальные машины, сборщики мусора, юнит-тестирование, собственно практика на C# или Java);

Уровень 3 - последний уровень для среднего программиста. Он самый объемный и включает только те дисциплины, которые непосредственно связаны с разработкой ПО. Всего их получилось 6:

  1. разработка UI и юзабилити (принципы построения интерфейсов пользователя);
  2. управление командами и проектами (методологии разработки и другие вопросы управления);
  3. тестирование ПО (обзорно: виды тестирования, инструменты);
  4. веб-технологии (HTTP-протокол, веб-сервер, CGI, кэширование и проксирование, клиентское программирование);
  5. распределенные системы (архитектуры распределенных систем, протоколы сетевого взаимодействия компонентов, инструменты, принципы, подходы к построению распределенных систем, отказоустойчивость, большие данные, высокие нагрузки);
  6. интерпретируемые языки программирования (особенности, основы по двум-трем языкам, практика по одному-двум языкам: JS, PHP, Python, Ruby).

Все, что идет выше, - расширенные Экспертные знания . По большому счету этот уровень можно расширять неограниченно, добавляя в него смежные с разработкой дисциплины и наиболее сложные аспекты разработки ПО. Я привел 3 примера - разработка компиляторов, разработка операционных систем и построение архитектур больших программно-аппаратных систем, либо архитектур, рассчитанных на особо высокие нагрузки. Зависимости к нижним уровням га графе не рисовал, т.к. получится слишком много стрелок, идущих через все уровни, вплоть до Общей базы. Наверное, широкие зависимости - это один из признаков вопросов экспертного характера. Здесь как раз подтверждается то, что экспертный уровень требует самых широких знаний и хорошего опыта.

Интересно в графе то, что он не только показывает предпочтительный порядок изучения предметов, но также:

  1. дает возможность понять, какие дисциплины нужны больше, какие меньше для работы в определенной специализации (просто выбрать основной предмет специализации и смотреть по связям и удаленности до других);
  2. дает понимание, как изучать компьютерные науки, если начинать не с фундаментальных основ, а с прикладных знаний (например, PHP) - можно двигаться по связям в стороны и вниз - собственно именно таким был мой личный путь развития (и я никак не могу назвать его самым легким, эффективным и оптимальным).

Граф - это модель. А хорошая модель как правило дает ответы сразу на множество вопросов. Я поставил перед собой задачу сделать хороший граф, близкий к реальности. Естественно, он основан на моем личном опыте и не претендует на идеал. Я старался сделать его наиболее объективным. И еще раз напоминаю, что это граф для программиста. Т.е. для тестировщика, сисадмина и других близких к программированию профессий он будет более или менее близким, но явно другим.

P.S. Убедительная просьба не развивать холивары на тему, что должен и что не должен знать программист. Это личный выбор каждого и статья совсем не об этом. Здесь приведена классификация знаний и взаимосви между ними. Это интересно не всем, это нужно не всем.

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

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

Второй аспект заключается в том, что, чтобы стать разработчиком нужно обладать определенным характером. Обучение программированию требует очень много терпения, потому что когда вы допустили ошибку в небольших участках, вам придется переделывать всю программу с нуля. А потом вдруг обнаружится, что ошибка была в другом месте... Или ее вообще не было. Терпение необходимо и в поиске информации, изучении новых программ и в работе с клиентами, которые не всегда (или почти всегда) не удовлетворены вашими трудами с первого или даже с четвертого раза.

Любопытство, желание учиться также являются важными элементами, но они легко могут быть сгенерированы, если вы при этом реализуете свои мечты.

Нужно быть осторожным при выборе языков программирования, выбрать самые приятные сердцу и уму языки программирования и начать с ними работать. Следует помнить, что язык программирования является лишь средством, чтобы улучшить что-то в программах. Все навыки, приобретенные в любом языке программирования, пригодятся вам и в работе с другим языком. Так, например, Паскаль будет развивать отличные навыки в построении алгоритмов. Все вещи начинаются с малого и как в детстве человек научился делать первые шаги, пока не научился ходить плавно, так и все студенты сначала делают много ошибок.

Особое положение на рынке труда занимают программисты 1С, в частности, настройщики программы 1С Торговля, 1С склад и т.д. Такие специалисты высоко оплачиваются.

Итак, топ-10 навыков, которые необходимы были программистам в 2011 году:

1) Знание основных языков программирования. HTML, CSS, JavaScript, DHTML, HTML 5, последний стандарт W3C, который включает в себя аудио-и видео-вложения, базы данных.

2) Понимание всех трех сред Web Development
NET, PHP и Java. Современный веб-разработчик должен быть экспертом по крайней мере в одной из них, и шапочно знаком с двумя другими. Вы должны также знать и фреймворки.

3) Знать Rich Internet приложения (RIA). Flash, AIR и Flex. Microsoft Silverlight и JavaFX, обеспечивающие функциональность Интернет. AJAX.

4) Знания, как оздать веб-службы или интегрировать сторонние реализации в вашем проекте. XML, SOAP, JSON, REST.

5) Динамические языки программирования. Новые языки программирования появлялись в течение последних тридцати лет. Некоторые до сих пор выделяются, особенно те, которые ориентированы на динамические функции, такие как Python, F#, Groovy, Ruby, Ruby On Rails.

6) Иметь свои Soft Skills.

7) Понимание проблем DNS и доменов

8) использование гибких методологий

Большинство компаний-разработчиков сегодня покупают в Agile концепции развития. Любой веб-разработчик, который понимает Agile концепции будет востребован работодателями.

9) знание мобильных технологий

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

10) Умение создавать чистый код