• Учить программирование с нуля. Языки программирования: с чего начать изучение? Какой язык, технологию и направление выбрать

    13.02.2024

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

    10. Выясните, почему вы хотите программировать

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

    9. Выберите правильный язык

    7. Попробуйте приложения для детей

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

    6. Воспользуйтесь бесплатными онлайн-тренингами

    Бесплатные онлайн тренинги и проекты (Codecademy , Hour of Code и др.) могут помочь вам в написании первой программы. Учебные пособия от Khan Academy, Codecademy, Code.org и других познакомят с основами программирования и всем необходимым для создания игры, сайта или другого проекта. Найдите нужный источник в зависимости от языка программирования, воспользовавшись . Это хорошая отправная точка, однако дальнейшее обучение вам нужно взять на себя.

    5. Пройдите онлайн-курс

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

    4. Бесплатные книги по программированию

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

    3. Изучайте, играя

    Иногда лучшим способом обучения являются игры. В то время, как многие учебники по программированию обучают вас программировать простые либо сложные игры, некоторые обучающие сайты сами являются играми: Code Combat и CodinGame - инструменты, используя которые вы можете весело провести время.

    2. Найдите наставника или станьте им

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

    1. Разберите чужой код

    Сегодня многих интересует, можно ли научиться программировать с нуля.

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

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

    Cодержание:

    Шаг первый. Подготовка

    Нередко начинающие программисты не могут достичь успеха по той простой причине, что изначально не смогли правильно расставить приоритеты.

    Они представляют данное ремесло как что-то романтическое, динамичное – прямо какой-то постоянный экшн.

    В фильмах этот процесс показывается совсем не таким, какой он есть на самом деле.

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

    Также в фильмах показывают, что программистом может стать любой человек без знаний, опыта и даже без серого вещества в мозге. В данном случае можно вспомнить фильм «Кадры».

    Так что если вы просто пропитались духом всевозможных кинолент и хотите самостоятельно начать «кодить», программирование – это явно не для вас .

    Вот вам правда о рассматриваемом ремесле – программирование это:

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

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

    https://youtu.be/nU0Fy5JXOtY

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

    Шаг второй. Выбор первого языка

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

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

    Но интересно, что в хороших учебных заведениях, а также на курсах студенты изучают языки в таком порядке:

    1 Pascal .

    2 C++ .

    3 PHP и все, что связано с веб-программированием, а также SQL (это система, предназначенная для работы с базами данных путем запросов).

    1. Веб (разработка сайтов, онлайн систем и все, что с этим связано) – html (хотя его нельзя назвать полноценным языком программирования), PHP, Perl, Python, Ruby, Java, Groovy, а также технология ASP.NET.
    2. Пользовательское ПО (всевозможные программы вроде справочников, браузеров, мессенджеров и тому подобное) – Delphi, C, C++, C#.
    3. Пользовательское ПО для мобильных устройств – Java, Objective-C.
    4. Машинные разработки (работы с микропроцессорами и другими устройствами, проектирование робототехники) – Assembler, модификации С.

    Кто-то также может внести в этот список так называемое программирование 1С. Не верьте профанам и ничего не знающим людям! Это совсем не программирование.

    Когда вы познакомитесь с основами рассматриваемой работы, то поймете, почему так можно говорить.

    Выбирайте то, что вам больше всего понравится.

    Совет: Сделайте свой выбор сразу! Вы должны точно знать, в каком направлении будете развиваться и что изучать в дальнейшем.

    Большинство специалистов также советуют начать свое обучение с Pascal. Такой вариант позволит

    Вам написать самые простые программки и иметь общее представление о рассматриваемом ремесле в целом.

    Можно сказать, что Паскаль – это некий мост. Человек, который просто хорошо знает математику, может перейти через него в мир программирования.

    Внимание! В какую бы компанию вы не устроились после обучения, вас будут переучивать под себя. Поэтому вы должны просто понимать сам принцип написания программ. А для этого нет ничего лучше, чем Pascal.

    Шаг третий. Изучение компиляторов

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

    Собственно, все свои программы вы будете писать, и выполнять именно в компиляторах.

    Если вы решили последовать нашему совету и начать с Паскаля, то вам следует скачать Free Pascal. Этот компилятор абсолютно бесплатный и распространяется на официальном сайте .

    Как видим, выглядит он достаточно «старомодно», но программирование начинается именно с этого. Кстати, компилятор C++ выглядит практически так же.

    Называется он Turbo C++ (скачать его можно ).

    Что касается Паскаля, то существует также GNU Pascal, Turbo/Borland Pascal, TMT Pascal и Virtual Pascal. А для С++ можно использовать Borland C++, +, Dev C++, GCC и Eclipse.

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

    Вот список наиболее популярных на сегодняшний день компиляторов в зависимости от направлений деятельности:

      Что касается Delphi , то компилятор там так и называется. Существует также Embarcadero Delphi и некоторые другие модификации. Делфи 7 можно скачать на многих сайтах, к примеру, . Если вы выбрали C, C++ или C#, то вам нужна Microsoft Visual Studio. Загрузить ее можно прямо на официальном сайте производителя.

      Если говорить об Assembler и других языках, которые практикуются в робототехнике , то здесь сразу необходимо скачать MASM , если вы работаете на Windows. А вообще, в зависимости от выбранной вами сферы деятельности и компании, на которую вы устроитесь работать, компиляторы могут быть самыми разными. Некоторые фирмы пишут собственные решения для обработки кода. Поэтому, если вы выбрали робототехнику, лучше изучить соответствующие книги и делать все, как там говорится. Об этом мы еще поговорим.

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

    Вот наиболее популярные из них:

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

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

    А теперь приступим к написанию вашего первого шифра (кода). Сделать это можно даже без книг и длинных инструкций.

    Шаг четвертый. Первый код

    Для первого кода мы будем использовать первый язык и первый компилятор, который мы советовали выбирать выше. Это Паскаль и Free Pascal.

    Одна из самых простых программ пишется следующим образом:

    1 Скачайте Free Pascal по ссылке выше и запустите его на своем компьютере.

    2 Введите следующее: «program [название];» . То есть если вы хотите, чтобы программа называлась «hello», необходимо ввести «program hello;».

    3 Введите инструкцию «begin» . Это означает, что код, который в дальнейшем нужно будет выполнить, начался.

    4 Используем одну из самых распространенных в Паскале конструкций «writeln(‘[какой-то текст]’);» . Она просто выводит на экран текст. Который содержится в скобках и кавычках. Мы введем сочетание «Hello, world!» . Обычно свой путь в большой мир разработок ПО начинают именно с этого. Таким образом, следующая строчка будет выглядеть как «writeln(‘Hello, world!’);» .

    5 Чтобы закончить исполняемый шифр, введите «end.» (обязательно с точкой в конце).

    6 Теперь нажмите кнопку «F9» , чтобы запустить то, что написали. Вы увидите, как на экране появились слова «Hello, world!» . Это и требовалось!

    Чтобы начать свое знакомство с другими языками, в книгах обычно также приводятся инструкции по написанию «Hello, world!» , то есть инструкции, которая просто выводит такой простой текст на экран.

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

    Шаг пятый. Пройдите онлайн тренинг

    Преимущество онлайн уроков в том, что вы все видите наглядно, причем от начала до конца.

    Поэтому новичкам лучше все-таки начинать свой путь именно с онлайн тренингов. Вот лучшие курсы на русском языке:

    Если вы выбрали Python, ознакомьтесь с трудом МакГрата «Программирование на Python для начинающих» .

    Шаг седьмой. Будьте в курсе

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

    Здесь речь идет вот о чем:

    Все это нужно для того, чтобы вы могли вовремя перестроиться.

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

    Ваши данные рассматривают, но говорят, что компании нужен специалист иного профиля.

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

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

    Все это позволит вам развиваться и работать в правильном направлении, не упуская драгоценное время.

    Это очень важно в наше время, так как тенденции программирования меняются не то, что за несколько месяцев, за несколько дней!

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

    Шаг восьмой. Найдите учителя

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

    Такой вариант имеет множество положительных сторон, главная из которых заключается в наличии персонального подхода к вам лично.

    Кроме того, если будут возникать проблемы, учитель поможет вам их решить. А найти наставника можно следующими способами:

    1 Поступите в ВУЗ . Да, программы обучения в постсоветских странах могут быть достаточно устаревшими, но основы, тот самый принцип программирования, некую основу всего постигнуть вы точно сможете

    2 Различные курсы. Существует огромное количество курсов, где люди собираются в каком-то офисе и преподаватель, точно так же как в ВУЗе, объясняет то или иное понятие. Обычно такие курсы проходят очень интенсивно, и ученики быстро осваивают нужную информацию.

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

    Шаг девятый. Анализируйте чужую работу

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

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

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

    Если конкретнее, вам нужно делать следующее:

    • думайте, как можно было бы оптимизировать шифр, то есть уменьшить листинг;
    • ищите ошибки и недоработки без компилятора и с ним;
    • Работа и, соответственно, заработок у вас в кармане! А если это не так, тренируйтесь дальше. Вы хотя бы узнали, какие задания нужно выполнять для приема на работу.

      В любом случае, уделяйте этому достаточно времени и тогда у вас все получится!

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

    Варианты изучения

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

    1. Специализированные курсы. Их стоимость намного меньше, чем уроки персонального репетитора. Стоит заметить, что множество работодателей положительно реагируют на наличие разнообразных сертификатов о завершении обучения в компьютерных академиях. Обратите внимание на курсы всемирно популярных компаний «Майкрософт» и «Циско».
    2. Удаленные бесплатные курсы. В интернете очень большое количество сервисов, с помощью которых вы сможете просмотреть курсы лекций Оксфорда, Гарварда и других именитых учебных заведений мира. Также существуют специальные платформы для тренировки практических навыков программирования. Более подробно об удаленном обучении и полезных интернет-сервисах читайте далее в статье.
    3. Самообучение. С чего начать изучение программирования с нуля, если вы не планируете записываться на курсы и тратить деньги? В таком случае проще всего заняться самообразованием. Начать изучение следует с прочтения основ, не углубляйтесь в теорию, сразу приступайте к практике, ведь только в процессе создания программы вы будете приобретать необходимые навыки.

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

    Как выбрать подходящее направление?

    Напрямую зависит от типа ПО, которые вы будете создавать в будущем:

    Если наиболее важную роль для вас играет размер заработной платы, обратите свое внимание на рынок вакансий. Сейчас самыми востребованными считаются разработчики, которые специализируются на языках Java, C#, ASP.NET, C++.

    Языки низкого и высокого уровней. Разница и области применения

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

    Высокоуровневые языки намного легче в применении, ведь они используют встроенные библиотеки для упрощения и визуализации кода. Большинство современного ПО пишется с помощью языков высокого уровня.

    Программирование с нуля: с чего начать приложений?

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

    1. Google Play. Магазин приложений для пользователей операционной системы "Андроид". Данная ОС имеет наибольшую долю пользователей на рынке. Для разработки приложений и игр используются языки java и C/C++. Наибольшей популярностью пользуются приложения-мессенджеры, клиенты социальных сетей, облачные хранилища, игры.
    2. Windows Mobile Store. Данный магазин стремительно набирает популярность вместе со смартфонами от компании «Майкрософт». В странах СНГ большинство пользователей предпочитают планшеты на платформе Windows Phone. Программирование приложений для такого магазина помогает заработать больше денег на монетизации, ведь, в отличие от "Андроида", практически все программы в магазине Windows распространяются на платной основе.
    3. App Store. Еще одна выгодная площадка для разработки (язык - Objective-C). Процесс создания программ для устройств компании Apple требует предустановленной среды разработки под названием Xcode. Следующим шагом нужно изучить Objective-C программирование с нуля. С чего начать написание кода, подскажет книга Дэвида Марка «Изучение С для Mac. Издание второе».

    Язык Java

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

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

    Программирование с нуля. С чего начать Java- и Web-кодинг?

    Язык Java широко используется в веб-разработке. Прежде чем начать полноценный процесс программирования, следует изучить Java, PHP, MySQL, HTML, CSS. Более подробная расшифровка этих понятий приведена ниже:

    1. Java - используется в написании утилит для сайтов и прописания логики функционала веб-страниц.
    2. PHP - язык для создания персональных страниц сайтов. Имеет скриптовую структуру. Лидирующий язык в создании популярных сегодня динамических веб-сайтов. PHP нужен, чтобы понять скрипты и программирование с нуля. С чего начать? C прочтения книги Джоша Локхата «PHP: Правильный путь».
    3. MySQL - система для руководства азами данных. Широко применяется в создании веб-сайтов, которые требуют хранения больших объемов сгруппированных данных.
    4. HTML - не является языком программирования. Это язык разметки, использующийся для написания базы веб-страницы (построения блоков, распределение текста и абзацев и так далее).
    5. CSS - каскадная таблица стилей. Используется только совместно с HTML для придания языку разметки стиля и внешнего вида.

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

    Web-программирование. Актуальность и особенности

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

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

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

    Создание приложений под операционную систему Windows

    Для разработки таких программ вам понадобятся познания языка C#. Бесплатный сервис от компании «Майкрософт» под названием Virtual Academy позволит вам выучить все особенности данного языка и попрактиковаться в написании простых приложений.

    Согласно новой политике «Майкрософта», все приложения выкладываются в магазин ПО, таким образом можно получить доступ к монетизации своего проекта.

    Семейство языков С (С, С++, С#). Особенности

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

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

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

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

    HourOfCode - веб-сервис от компании «Майкрософт». Он предназначен для того, чтобы наглядно показать ученикам, что такое цикл, переменная, класс, условия. Процесс обучения похож на игру.

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

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

    Получение начального опыта. Фриланс

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

    Итог

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

    Начало
    С чего мне начать?
    Какой язык программирования стоит выучить первым?
    Где можно найти качественные образовательные ресурсы?
    Как совершенствовать навыки
    Как перейти с начального уровня на средний?
    Где можно найти тренировочные упражнения и идеи для проектов?
    Как улучшить навык реализовывать задачи/задания в программах (алгоритмическое мышление)?
    Я не могу придумать классную идею для проекта. Мне просто не хватает креативности? Как другие программисты ищут вдохновение?
    Где можно найти примеры хорошего кода и проектов для обучения?
    Как выучить темы, которые рассматриваются в стандартных университетских программах по информатике?
    Как начать крупный проект и не забросить его?
    Распространённые страхи и опасения
    Я уже слишком стар для программирования?
    Есть что-то другое, чему мне сначала нужно научиться?
    Нужно ли мне хорошо знать математику?
    Я много гуглю или не знаю, как делать что-то, когда только собираюсь начать. Это плохо?
    Программировать сложно?
    Вопросы про обучение
    Что значит «знать язык» или «уметь программировать»?
    Я только что начал учить язык Х. Стоит ли мне начинать учить язык Y?
    Стоит ли учить более одного языка программирования одновременно?
    Это плохо, что у новичков иногда возникают проблемы с задачами и упражнениями?
    Как найти/поддерживать мотивацию, чтобы учиться программировать?
    С чего мне начать Х?
    С чего начать делать видеоигры?
    С чего начать делать веб-сайты/веб-приложения/веб-разработку?
    С чего начать делать мобильные приложения/приложения для Android/приложения для iOS/приложения для Windows Phone?
    Как автоматизировать что угодно?
    Терминология и словарь
    В чём разница между информатикой (computer science, CS), компьютерной инженерией (computer engineering, CE), программной инженерией (software engineering, SE), программированием и кодированием?
    С чём разница между Cи, C++, Objective-C и C#?
    В чём разница между Java и JavaScript?
    Инструменты и управление версиями
    Что такое управление версиями/контроль версий? Стоит ли мне его использовать?
    С чего начать использовать управление версиями?
    Что такое IDE? Стоит ли мне её использовать?
    Компьютеры и операционные системы
    Какую операционную систему мне следует использовать?
    Какой компьютер/ноутбук мне следует купить?
    Карьера и работа
    Можно ли заработать много денег на программировании?
    Можно ли получить работу в программировании, не имея диплома по информатике? Или вообще без высшего образования?
    Как войти в эту отрасль и получить стартовую должность?
    Что делать дальше?
    Больше не новичок
    Программирование - лишь инструмент
    Как улучшить навыки программирования
    Разное
    Как обучить программированию ребёнка?
    Как делать вклад в open source-проекты?
    У меня вопрос по Си/Python/другому языку.
    Там нет моего вопроса. Что мне делать?
    Да, мой вопрос есть в ЧаВо, но я хочу получить ответ от реального человека.
    Как редактировать вики /r/learnprogramming (включая эти ЧаВо)?

    С чего мне начать?

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

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

    1. Найти небольшую задачу или проект, который вам будет интересно решить. Можете попробовать создать инструмент для решения небольшой жизненной задачи или с нуля реализовать программу, которая вам кажется интересной. Такой проект мотивирует вас продолжать учиться кодить и даст возможность применить полученные знания на практике.
    2. Почитайте информацию о разных языках программирования, чтобы выбрать наиболее подходящий для вашего проекта. (См. рекомендации ниже).
    3. Найдите один качественный ресурс для новичков по этому языку и руководствуйтесь им. (Также см. ниже).
    4. Помимо этого ресурса, гуглите и задавайте вопросы.
    5. Выполните несколько оригинальных проектов на этом языке.
    1. Нельзя просто пассивно штудировать выбранный ресурс: делайте упражнения и домашние задания; практика – это незаменимая часть обучения программированию.
    2. Не переключайтесь без необходимости с одного языка на другой. Выберите один и придерживайтесь его, потому что главное в программировании - решать задачи, а не выучить языки. Научиться решать проблемы сложно, и этот навык можно отточить, только если постоянно тренироваться. Каждый раз, когда вы переключаетесь на другой язык, то теряете время, в которое могли бы тренироваться применять полученные знания, чтобы развить навыки решения задач.
    3. Не прекращайте учиться после того, как закончили какой-либо курс. Программирование - одна из тех областей, где всегда есть, чему учиться.

    И наконец, помните, что обучение программированию - долгий и трудный процесс. Если вам тяжело, не расстраивайтесь! Это абсолютно нормально, и многие люди годами учатся и тренируются, пока не почувствуют себя достаточно компетентными, чтобы искать работу или сделать вклад в серьёзный проект. К счастью, просто начинать учиться совсем не так сложно.

    Какой язык программирования стоит выучить первым?

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

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

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

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

    Я хочу научиться…

    • …разрабатывать приложения для iPhone - Swift (ещё)
    • …разрабатывать приложения для Android - Java (ещё)
    • …создавать веб-сайты - JavaScript, CSS, HTML5 (ещё)
    • …писать десктопные приложения для Windows - C#
    • …создавать 2D/3D-игры - JavaScript, C# или C++ (ещё)
    • …программировать Arduino/микроконтроллеры/роботов - Си
    • …заниматься научными/математическими вычислениями или анализом данных - Julia, Python, R или Matlab
    • …заниматься автоматизацией и разработкой скриптов - многие языки (Python, Ruby, Bash, Powershell, AutoHotKey…)

    Если в списке нет того, что вам нужно, поищите другие варианты на этих ресурсах:

    Если вы всё ещё не можете определиться с выбором, изучайте Python. Это хороший, доступный для начинающих программистов язык с огромным сообществом и множеством библиотек, с помощью которых можно сделать практически всё что угодно, начиная созданием игр, и заканчивая автоматизацией процессов дома или на работе и анализом данных для построения веб-сайта. Постарайтесь найти обучающий ресурс, в котором разобраны ключевые принципы и основы, прежде чем погрузиться в разработку более сложных приложений. Инструкции о том, как начинать изучение любого языка, можно найти на странице reddit getting started .

    Где можно найти качественные образовательные ресурсы?

    Как совершенствовать навыки

    Как перейти с начального уровня на средний?

    Типичный вопрос, который мы получаем от многих новичков, - «что дальше?» В частности, когда они пытались проработать какие-то уроки, пособия, курсы, но в итоге всё равно не смогли заполнить пробел между пониманием, как работает оператор if или цикл for, и как именно применять то, что они изучили, чтобы создать сложные и интересные программы.

    Переходить от обучающих материалов к сложному коду может быть затруднительно, и это обычное дело для тех, кто учится кодить. Такое явление очень хорошо описано в этой статье . Многие курсы (особенно коммерциализированные сайты по, обучающие программированию, вроде CodeAcademy) помогают тщательно разобраться с основами, но на этом завершаются, а новички остаются топтаться на месте.

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

    Вот несколько советов, как не сдаваться и что делать дальше.

    Перейдите с пассивного обучения на активное

    Вместо того, чтобы брать курсы и уроки, которые (как вы думаете) научат вас тому, чему вы хотите научиться, начните активно искать способы обучиться самостоятельно. Например, если вы понятия не имеете, как создать игру, загуглите «как написать игру на Х», где «Х» - это язык программирования, который вы собрались использовать. Если у вас всплыло сообщение об ошибке, которая вам незнакома, попробуйте загуглить её. Если вы хотите освоить машинное обучение - погуглите и найдите годную книгу, пособие или онлайн-курс.

    Вам будут нередко попадаться учебные пособия, разъясняющие, что именно вам следует делать, или по крайней мере статьи, которые дадут общее представление и подсказки о том, как составить более точные поисковые запросы. Тем более, нет ничего стыдного в том, чтобы искать источники новых знаний - как раз наоборот. Все программисты, как начинающие, так и профессиональные, постоянно делают две вещи: гуглят и учатся.

    Постоянно практикуйтесь

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

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

    (См. также ЧаВо: Где можно найти тренировочные упражнения и идеи для проектов и ЧаВо: Я не могу придумать классную идею для проекта. Мне просто не хватает креативности? Как другие программисты ищут вдохновение?)

    Научитесь декомпозировать задачу

    Пытаясь справиться с крупным проектом или задачей, прийти в отчаяние можно уже от того, насколько большими и устрашающими они выглядят. Вместо того, чтобы унывать, разбивайте задачу на всё более мелкие подзадачи (это называется декомпозиция), пока каждая отдельная подзадача не начнёт казаться вполне подъёмной и осуществимой.

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

    Если вы не уверены, как решить каждую из этих подзадач, продолжайте разбивать их дальше. Например, если вы не знаете, как определить победителя, то можете выделить ещё больше подзадач: как определить ничью, как определить вашу победу (если вы выбираете камень), как определить вашу победу (если вы выбираете бумагу) и как определить вашу победу (если вы выбираете ножницы).

    Если вы совсем не знаете, как сделать что-то (например, как заставить компьютер выбрать случайное значение), погуглите. В данном примере поиск «Х выбрать случайное значение» (где Х - используемый язык программирования) покажет несколько различных способов, которые вы сможете использовать. Иногда задачу получается разбить на множество частей без поисковика, а иногда без него не обойтись.

    Так, если вы учите Java и хотите научиться писать игры, но понятия не имеете, с чего начать или как разбить задачу на составляющие, загуглите «java игры уроки». Поиск даст несколько хороших источников, которые научат вас писать игры и (обычно автоматически) разбивать процесс написания игры на подзадачи поменьше.

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

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

    Больше советов смотрите в ЧаВо: Как улучшить навык реализовывать задачи/задания в программах (алгоритмическое мышление).

    Будьте систематичны

    Когда вы пишите и отлаживаете код, ни в коем случае не привыкайте просто пробовать сделать что-то, рассчитывая, что это случайно сработает. Будьте максимально чётки и последовательны - метод «проб и ошибок» здесь не подойдёт.

    Во время написания кода остановитесь на минуту и составьте на листе бумаги приблизительные план действий. Попробуйте нарисовать какие-то схемы или набросать что-то вроде псевдокода. Если вам придётся изменить свой план (что вы, скорее всего, и сделаете), подумайте, для чего вам нужно это изменение и каким будет ваш новый план действий. (Этот этап планирования - также подходящая возможность, чтобы потренироваться декомпозировать задачи!)

    Во время отладки кода ставьте чётки цели. Попробуйте мыслить, как учёный: проводите эксперименты, чтобы либо попытаться исправить баг, либо сузить область его поиска, и запишите результаты. Если ваша догадка/предпринятая попытка оказалась неверной или произошло что-то, чего вы не предусмотрели, остановитесь и разберитесь, в чём причина. Можете фиксировать эксперименты и тесты в блокноте, если это поможет вам придерживаться плана.

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

    Не делайте что попало, пока что-нибудь не сработает - будьте последовательны.

    Не расстраивайтесь, если приходится исправлять баги или гуглить

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

    Отладка (и трудности!) - неотъемлемая часть программирования. Если получится, постарайтесь не отчаиваться и не злиться. Отнеситесь к этому как к занимательному квесту или головоломке.

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

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

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

    Не бойтесь попросить помощи

    И наконец, если вы совсем не можете сдвинуться с места и понятия не имеете, что делать дальше, не стесняйтесь обратиться за помощью!

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

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

    Пройдите более интенсивный вводный курс

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

    Железное правило: если вводные курсы по программированию, которые вы проходили, не вызвали у вас особых трудностей или не содержали заданий, упражнений и мини-проектов, вам нужно поискать более требовательные курсы. Постоянная практика (и трудности!) - неотъемлемая часть учебного процесса.

    • https://www.reddit.com/r/learnprogramming/comments/3yqhuk/why_do_i_feel_like_ive_hit_a_wall_learning/

    Где можно найти тренировочные упражнения и идеи для проектов?

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

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

    Есть что-то другое, чему мне сначала нужно научиться?

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

    Вот единственные действительно необходимые условия:

    • Вы должны уметь печатать (если только вы не используете язык на основе подхода «drag-and-drop» вроде Scratch).
    • У вас должен быть компьютер.
    • Вы должны уметь самостоятельно гуглить/искать ответы на вопросы.

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

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

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

    Нужно ли мне хорошо знать математику?

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

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

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

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

    Если вы не очень сильны в математике, то в любом случае можете учиться и расти. Ведь в программировании вы, вероятно, тоже ещё не очень хороши, но всё равно собираетесь учиться кодить. Зайдите на Khan Academy и поищите бесплатные уроки, начинающиеся с базовых уровней и до более сложных.

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

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

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

    Я много гуглю или не знаю, как делать что-то, когда только собираюсь начать. Это плохо?

    Мы часто думаем: «если бы у меня было достаточно мотивации… тогда я мог бы…», хотя именно действие поддерживает мотивацию. Сначала идёт действие, потом - мотивация. Найдите небольшие конкретные программы, которые хотели бы создать. Избавьтесь от всего, что вас отвлекает. Установите расширения для браузера, блокирующие сайты вроде Reddit, Facebook и Twitter. На минуту представьте, насколько здорово будет ощущать, что вы стали более компетентным программистом.

    Вот несколько свежих веток по теме:

    С чего мне начать Х?

    С чего начать делать видеоигры?

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

    • Unity (C#): подходит для мобильных, десктопных, браузерных/онлайн и консольных 2D и 3D-игр
    • Construct2 (JavaScript): для мобильных, десктопных и браузерных/онлайн 2D-игр
    • Pygame (Python): движок для десктопных 2D-игр
    • LÖVE (LUA): подходит для десктопных 2D-игр

    Всегда помните, что ваша цель - разрабатывать игры, а не движки! Так что не нужно заново изобретать велосипед.

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

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

    • Блэкжек или крестики-нолики
    • Охота на Вампуса (правила)
    • игра в жанре choose-your-own-adventure на ваше усмотрение или клон Zork
    • Pong, Тетрис или клон Сапёра
    • Space Shooter с вертикальной или горизонтальной прокруткой
    • простой клон DOOM, Марио или Legend of Zelda

    Обязательно загляните в ЧаВо /r/gamedev , почитайте вводное руководство на /r/gamedev и поищите более старые ветки на /r/gamedev и /r/learnprogramming .

    С чего начать делать веб-сайты/веб-приложения/веб-разработку?

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

    Обычно большинство людей советует начинать с изучения HTML, CSS и Javascript (в таком порядке) - это три главных языка, которые поддерживают все веб-браузеры и на которых написаны все сайты.

    Больше информации можно найти в ЧаВо /r/webdev . Вот ещё один для начинающих.

    С чего начать делать мобильные приложения/приложения для Android/приложения для iOS/приложения для Windows Phone?

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

    • Приложения для Android пишутся преимущественно на Java - больше информации читайте в ЧаВо /r/androiddev .
    • Приложения для iOS пишутся на Objective-C или Swift - больше информации ищите на боковой панели /r/iosprogramming и в их вики (на GitHub).
    • Приложения для Windows Phone пишут на C#, Visual Basic или Javascript - больше информации ищите на боковой панели /r/WPDev .

    Вы также можете создать приложения, которые будут запускаться на всех трёх крупнейших платформах, с помощью технологий Phonegap и Titanium - приложения пишутся один раз с использованием HTML, CSS и Javascript, а запускаются на любой платформе.

    Однако не забывайте, что многие, если не все из указанных инструментов рассчитаны на тех, кто уже имеет предыдущий опыт в программировании. Если вы прежде никогда не занимались разработкой, может быть, вам лучше начать с изучения языка, по которому есть больше ресурсов специально для новичков. Когда вы приобретёте некоторый опыт и усвоите лежащие в основе программирования принципы, то вам станет намного проще учить новые языки и начинать изучение мобильной разработки. Раздел «С чего мне начать?» в нашем ЧаВо содержит больше информации о том, с чего нужно начинать.

    Как автоматизировать что угодно?

    Для Windows есть пара специальных языков программирования, такие как Autohotkey and AutoIt .

    Другая подходящая кросс-платформенная альтернатива - это Python . Automate the Boring Stuff with Python (Как автоматизировать рутину с помощью Python) - потрясающий образовательный ресурс.

    Если вы хотите автоматизировать MS-Office, используйте встроенный язык программирования Visual Basic for Applications (VBA). Сабреддит /r/vba посвящён программированию на VBA.

    Какие лучшие…

    Программирование vs. кодирование

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

    Напротив, если вы говорите «я кодер», то подчёркиваете, что занимаетесь исключительно разработкой кода, и в меньшей степени - остальными вещами.

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

    С чём разница между Cи, C++, Objective-C и C#?

    Cи, C++, Objective-C и C# - это не вариации одного и того же языка.

    Си - самый маленький и старый из этих языков. Изначально он создавался как системный язык программирования для операционной системы Unix и до сих пор широко используется в прикладном программировании.

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

    Objective-C - это строгое надмножество языка Си, поэтому любой рабочий код на Си также является рабочим кодом Objective-C. Этот язык далеко не так распространён, как Си или С++, и сегодня в основном используется в разработке для платформ OS X и iOS от Apple.

    C# не основан на Си ни в каком техническом плане. С# - это язык программирования общего назначения, созданный Microsoft и подобный Java. Он компилируется в промежуточную форму, которая запускается на виртуальной машине (CLR), в отличие от предыдущих трёх языков, которые компилируются в нативный машинный код. И хотя С# заимствует элементы синтаксиса из Си и С++ (как и Java), технически он с этими языками не связан.

    В чём разница между Java и JavaScript?

    Java и JavaScript связаны в той же степени, в которой связаны крем и крем-брюле.

    Аналогично предыдущему вопросу, с технической точки зрения Java и JavaScript никак не связаны. У них есть некоторые общие черты в синтаксисе, так как предком обоих был Си, но не более. В Википедии есть хорошее объяснение, откуда взялось это сходство в названиях: https://ru.wikipedia.org/wiki/JavaScript#JavaScript_%D0%B8_Java .

    Инструменты и управление версиями

    Что такое управление версиями/контроль версий? Стоит ли мне его использовать?

    Система управления версиями (Version Control System, VCS) - это инструмент, который отслеживает изменения в коде и даёт такие полезные возможности, как исправлять ошибки и просматривать, что в нём изменялось с течением времени. Современные распределённые системы также позволяют легко работать над одним и тем же кодом с другими программистами. И да, вам определённо стоит использовать систему управления версиями!

    Две самых популярных распределённых системы - это Git и Mercurial; которую именно использовать, в основном зависит от ваших личных предпочтений, но мы настоятельно советуем одну из них.

    С чего начать использовать управление версиями?

    Хорошее и краткое руководство по Mercurial - .

    Компьютеры и операционные системы

    Какую операционную систему мне следует использовать?

    Частый вопрос, который возникает у многих новичков, - какую из операционных систем им лучше использовать: Windows, Mac или Linux.

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

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

    Из этого правила есть два основных исключения:

    • Если вы хотите заниматься разработкой для Windows, покупайте компьютер на Windows.
    • Если вы хотите заниматься разработкой для Mac или iOS, покупайте Mac.

    Есть несколько хороших возможностей запуска кода на C# на других платформах , но некоторые инструменты Microsoft и.NET преимущественно ориентированы на Windows.

    Хотя вы сможете разрабатывать приложения для Mac и iOS на любом компьютере, вам придётся использовать Xcode на машине Mac, чтобы скомпилировать и загрузить ваше приложение в App Store.

    И наконец, следует отметить, что выбор той или иной операционной системы не ограничивает вас в действиях: всегда можно запустить виртуальную машину с установленной на ней другой операционной системой. Например, если у меня на компьютере установлена Windows, я могу легко настроить виртуальную машину Linux и использовать её не опасаясь, что она помешает работе существующей Windows.

    Какой компьютер/ноутбук мне следует купить?

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

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

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

    • центральный процессор Intel i5 (3.0+ ГГц)
    • оперативная память 4+ Гбайт
    • жёсткий диск 200+ Гбайт
    • (опционально) твердотельный накопитель

    Если есть возможность, лучше отдайте приоритет устройству с более производительным процессором и большим объёмом оперативной памяти, чем жёсткого диска: лишняя мощность процессора никогда не помешает. И наоборот, в основном для программирования не требуется большое дисковое пространство - только если вы не собираетесь работать с изображениями и видео или обрабатывать огромные наборы данных для машинного обучения и тому подобных вещей. Впрочем, такие вещи можно хранить в облаке.

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

    • Чем шире экран, тем меньше время работы от батареи (но чем меньшую вы настроите яркость, тем больше будет её ресурс)
    • Чем меньше экран, тем меньше на нём будет помещаться и тем чаще вам придётся переключаться между окнами/рабочими столами. В идеале на нём должны удобно для работы размещаться два окна.
    • Чем шире ноутбук, тем он тяжелее и тем тяжелее носить его с собой.

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

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

    Дополнительную информацию и более подробную помощь можно найти в следующих сабреддитах - в них предложены более индивидуализированные советы:

    Также тщательно взвесьте покупку хромбуков: вам придётся или настраивать их, или использовать онлайн-редакторы и IDE, а также понадобится постоянный доступ с интернет. Больше информации читайте по ссылкам:

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

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

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

    Если вас больше интересует машинное обучение или обработка естественного языка, имейте в виду, что можно арендовать машины с графическими процессорами в облаке с помощью сервисов вроде Web Services (AWS) или Google Compute Engine (GCE) по относительно низким ценам.

    Карьера и работа

    Можно ли заработать много денег на программировании?

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

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

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

    Более развёрнутые ответы на различные вопросы по поводу карьеры можно получить, задав их в /r/cscareerquestions .

    Как войти в эту отрасль и получить стартовую должность?

    В этом сабреддите этот вопрос немного не по адресу: вопросы на тему карьеры лучше задавать в /r/cscareerquestions и искать на их исчерпывающей вики-странице .

    Но в общем, ответы большинства людей сводятся к следующему:

    • Создайте убедительное портфолио оригинальных проектов, которое можно показать потенциальным рекрутерам и приложить к резюме. Это могут быть ваши школьные проекты, самостоятельные сторонние проекты, проекты из кружков в школе и университете, исследовательские или волонтёрские проекты, или проекты, сделанные во время практики или на предыдущих работах и т.д. Мощное портфолио показывает работодателям, что вы умеете успешно применять языки программирования, библиотеки и технологии для решения проблем, и даёт им возможность более точно оценить уровень ваших навыков.
    • Сначала лучше искать стажировку, а не полноценную работу. На стажировку проще попасть, а оплачиваются они обычно достойно.
    • Вам обязательно нужно хорошее понимание структур данных и алгоритмов. Большинство собеседований, особенно на стартовые должности, включают задания по кодированию - на веб-сайте или вживую, на белой доске.

    Что делать дальше?

    Больше не новичок

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

    Программирование - лишь инструмент

    Начиная программировать, вы, возможно, размышляли о будущем, когда узнаете, как создать второй reddit или невероятную графику, или же как выполнять различные алгоритмы. Что ж, если вы больше не считаете себя новичком, значит, программирование пополнило ваш арсенал инструментов. Теперь вам нужно научиться применять его и закрепить свои умения. Очень скоро вы сможете делать подобные вещи и будете узнавать всё о них.

    Как улучшить навыки программирования

    Многие люди, занимающиеся программированием, начинают бояться, что им недостаточно знаний. Поэтому многие стремятся усовершенствовать свои навыки. Но на данном этапе есть только один способ сделать это - практиковаться. Существует много сайтов и источников для тренировки, например, /r/dailyprogrammer , CodeWars , HackerRank , Project Euler и многие другие.

    Разное

    Как обучить программированию ребёнка?

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

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

    Также можете заглянуть на /r/ProgrammingForKids - сабреддит посвящён именно этому вопросу. Ресурсов множество.

    Как делать вклад в open source-проекты?

    Участвуйте в проектах группы /r/learnprogramming на GitHub ! Её создал jfredett специально для размещения проектов, с помощью которых начинающие программисты смогут освоить отрытую разработку, взаимодействуя с опытными программистами и менторами.

    Группа сформирована недавно, несколько людей занимаются её продвижением.

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

    Как редактировать вики /r/learnprogramming (включая эти ЧаВо)?

    Мы приветствуем ваш вклад, но чтобы получить право редактирования, вам нужен аккаунт, зарегистрированный не менее 30 дней назад и коммент-карма не менее 200 в данном сабреддите (не в целом на reddit). Как только эти условия будут выполнены, в заголовке вики появится кнопка «редактировать». Если вам не хватает времени или кармы, просто создайте обычный пост на тему с текстом, который хотите добавить: если он будет хорошего качества, кто-то из тех, кто может редактировать, почти наверняка опубликует его за вас.

    Как начать свой путь к карьере программиста с помощью самостоятельного изучения программирования? Это один из самых популярных вопросов на многих форумах, которым задаются практически все новички.

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

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

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

    Помимо всего вышеперечисленного, неплохой опыт можно получить в проектах «open source». Это шанс пообщаться с реальными разработчиками, получить от них ценные советы, а также шанс быть вовлеченным в реальную работу – в подобных проектах требуются и новички. Если же принять участие не вышло, не стоит отчаиваться, там можно изучать уже чей-то готовый код и попробовать модифицировать его самостоятельно.

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

    Похожие статьи