Содержание

Как научиться программировать на любом языке — руководства на Skillbox

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

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

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

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

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

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

Начать можно со статистики на известных порталах, в мировых рейтингах и личных топах независимых разработчиков. Мы сравнили данные за 2018 год на некоторых из них.

Десятка лидеров по версии IEEE Spectrum. ТОП-10 на основе масштабной аналитики шведского разработчика Стефана Нильсона. Самый известный рейтинг языков программирования TIOBE index за январь 2019 года.

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

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

Еще немного лайфхаков для новичков в интервью с разработчиком.

Если у вас пока нет работы программиста, начинайте писать свой стартап-проект. Разумеется, из этого ничего не выйдет — в 99,99% случаев так и происходит. Зато вы получите бесценный опыт и «потрогаете» программирование своими руками.

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

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

Статистика распространенности языков по количеству вакансий на HeadHunter.

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

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

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

Изучайте блоги разработчиков — отечественные и англоязычные, — читайте статьи на «Хабре» и других ресурсах, следите за новостями фреймворка, с которым работаете.

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

Code_is_ok — open-source-инструмент для код-ревью от компании Badoo.

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

Старайтесь получать опыт, работая с самыми современными технологиями. Например, в случае с PHP нужно практиковаться на фреймворках, а не на LAMP — наборе программного обеспечения из Linux, Apache, MySQL и PHP. Первые сейчас популярны и быстро развиваются, а второе — пережиток прошлого.

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

Например, на событии выступает спикер из «Яндекса», рассказывая, что они стали хранить файлы иначе, чем раньше. Он не объяснит в деталях, что нужно делать, — лишь обозначит тезисы. Слушателям самостоятельно нужно вникнуть в тему и узнать, как реализовывать это.

Вот несколько широко известных профильных конференций для разработчиков:

Компании EPAM, «Яндекс», Google и другие, а также столичные вузы часто проводят бесплатные митапы для всех желающих.

Мероприятия полезны разработчикам, на них можно не только научиться новому, но и просто пообщаться, считает ведущий курса по Python в Skillbox Вадим Шандринов:

— Во-первых, можно отдохнуть и поесть пиццы. Без комментариев. Во-вторых, поговорить с другими программистами, расспросить, как они работают, поудивляться. И иногда возникает “вау”-эффект: а что, так можно было? По-новому смотришь на свои решения, переосмысливаешь их. В-третьих, на конференциях выступают спикеры, рассказывают о новинках и своих подходах к решению задач. Это очень помогает, когда хотел бы изучить новую библиотеку, но нет времени. А тут тебе всё рассказали, к тому же можно задать вопросы.

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

Курс «Профессия Java-разработчик»

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

  • Живая обратная связь с преподавателями
  • Неограниченный доступ к материалам курса
  • Стажировка в компаниях-партнёрах
  • Дипломный проект от реального заказчика
  • Гарантия трудоустройства в компании-партнёры для выпускников, защитивших дипломные работы

Как я сам научился программировать за 8 недель / Хабр

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

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

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

Получение начального понимания языка программирования Python и общих методов программирования (2 выходных дня):

  • Learn Python the Hard Way. Несмотря на название, это довольно простой способ, он делает изучение основных понятий очень легким, и большинство уроков займет менее 10 минут. Тем не менее, я обнаружил, что данный способ не работает для некоторых, более сложных тем, так что я рекомендую остановиться после урока 42 и двигаться дальше.
  • Google’s python class. Читайте заметки и / или смотрите видео и делайте все упражнения, пока вы не будете выполнять их правильно — не подсматривая в ответы
    . Борясь с упражнениями, которые я постоянно делал неправильно было очень полезным для меня в качестве полученного опыта, и я узнал бы гораздо меньше, если бы я просто посмотрел на ответы и пытался убедить себя, что я понял упражнение.

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

Получение начального понимания веб-фреймворка Django (1 выходной):

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

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

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

Получение более глубокого понимания Python / общих концепций программирования (4-8 выходных дня):

Опять же, я хотел бы рекомендовал попробовать каждый из них и посмотреть, какой вам понравится больше. Я делаю оба, но это, наверное, перебор.

Практика построения простых веб-приложений (2 выходных дня):

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

Вот и все. 8 недель (или меньше) и вы ушли от ничего не зная о разработке программного обеспечения до рабочего прототипа. Не так уж и сложно, так ведь?

Следующие шаги:

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

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

Оригинал: How I Taught Myself to Code in 8 Weeks

какой язык выбрать, с чего начать

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

Личностные качества для самообучения

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

  1. Оптимизм и жизнелюбие. Данные качества подпитывают открытость и восприимчивость человека, помогают добиваться своего, закрепляют готовность действовать. В процессе самообучения и работы будут возникать препятствия, вопросы и проблемы. Пессимиста это оттолкнет и заставит отступить от идеи освоения программирования. Оптимист будет вдохновляться результатами других и видеть в препятствиях лишь ступеньки на пути к овладению навыком.
  2. Гибкость мышления. Для создания игры, приложения или сайта недостаточно выучить языки программирования. Нужно уметь их применять. Для решения многих задач потребуются креативность и стрессоустойчивость. Придется переключаться с одного занятия на другое, что потребует быстрой адаптации. Часто вы будете вынуждены исправлять ошибки в коде. Лучше воспринимать это как шанс на улучшение навыка, а не как катастрофу.
  3. Смелость. В процессе изучения программирования с нуля вы постоянно будете сталкиваться с чем-то неизвестным. Если постоянно бояться и отступать после первой неудачи, освоить новый навык не удастся.
  4. Честность. Потребуется быть откровенным, чтобы признавать, что вы чего-то не знаете или не умеете. Честный человек всегда правильно анализирует свои возможности и реже попадает в неудобные ситуации. Ученик, который искренне верит в то, что уже достиг верха мастерства, в действительности останавливается на одном уровне.
  5. Самодисциплина. Вам придется регулярно усваивать новую информацию, слушать, читать, анализировать код, выполнять задания и т. д. При слишком редких занятиях вам не удастся изучить программирование дома, поскольку вы будете забывать уже пройденное. Частые уроки приведут либо к выгоранию, либо к перенапряжению.

Виды программирования, которым можно обучиться

Самая простая сфера для новичка — веб-разработка. Она подразумевает создание сайтов. Сюда можно отнести:

  • интернет-магазины,
  • социальные сети,
  • страницы-визитки,
  • форумы и т. д.

Одни программисты отвечают за визуальную составляющую сайтов, другие — за их функции. Некоторые способны выполнять сразу все задачи. Для создания сайтов чаще всего используют языки PHP, JavaScript, Ruby и Python.

Веб-разработкаВеб-разработчик создает новые сервисы и сайты или поддерживает и дополняет существующие. 

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

Если вас не пугают трудности, можно выбрать разработку программ и игр для ПК. В данном случае вам понадобятся языки C++, C, C#.

Как поступить, если не знаешь, что выбрать

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

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

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

program

Что необходимо знать

Перед началом обучения нужно знать, какие языки самые простые, зачем нужны компиляторы и т. д.

Школьные знания

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

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

Особенности обучения в России

В России в течение долгого времени программирование не воспринимали всерьез и преподавали только как второстепенную науку. Из языков в вузах чаще всего используют Basic. Он, как и Pascal, устарел. С его помощью возможно изучить основы, но уделять слишком много внимания Basic и Pascal не стоит.

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

С какого языка программирования начать

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

PascalPascal — один из наиболее известных языков программирования.

Работа с компиляторами

Компилятор — это программа, которая переводит код на понятный компьютеру язык. Самые распространенные компиляторы: Microsoft Visual Studio, Borland C++ и Code::Blocks. Новичкам лучше начать с Borland C++.

Что востребовано на рынке

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

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

Для эффективного обучения вам потребуются не только мотивация, но и источники информации и план.

Постановка цели на будущее

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

Постановка целиНеобходимо поставить цель на будущее и идти к ней.

Оценка собственных способностей

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

Систематизация и разработка плана обучения

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

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

Необходимые источники информации

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

Полезные советы для обучающегося

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

Изучение чужого кода

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

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

Написание собственных элементов

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

Использование отладчика

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

Обращение к англоязычным источникам

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

Как помочь с обучением школьнику

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

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

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

Самостоятельная работа

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

С помощью наставника

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

На курсах или в университете

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

Как получить опыт для трудоустройства

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

Как научиться программировать в 9 лет самостоятельно / Хабр

Многие считают, что в 9-10 лет можно программировать максимум на Scratch’е. Но это не так. В 9 лет можно и на C# Windows Forms программки пилить. Главное – желание.

С чего все началось


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

Я устроил DDoS атаку на Яндекс Я искал информацию, как работает компьютер. Во время поиска, мне на глаза попался видеокурс по шарпу. И началось…

Не всё так просто в этой жизни


Посмотрел первый урок «Что такое C# и зачем он нужен».

Я подумал:

«Зачем доучивать до конца? Установлю Visual Studio, понажимаю по кнопочкам (не на клавиатуре) и готово! Я — программист!»

Но не всё так просто.

Что это? Аааа! Помогите!

Начал бить по клавиатуре… Не в Visual Studio, а в Яндексе:
«Как программировать»
«Как программировать на C#»
«Уроки по C#»
И т.д.

Понеслась!

Нашёл сайты metanit.com и professorweb.ru. Читал…

Первые результаты


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

Оконные приложения


Скачал вот эту книжку. Называется «C# для школьников». В ней есть уроки создания Windows Forms приложений. Дерзал, делал.

Игры


Надоело писать скучные, никому не нужные приложения.
И у меня появилась идея! Сделать мини-игру на Windows Forms!
Называлась Adventure of Warrior.


Начал учить XNA. На 3-й день сделал игру.


Еще пробовал сделать псевдо-3d графику:


Конференции


Участвовал в конкурсах 2 раза.

Первый раз победил (с оговорками). Как я победил? Меня не пускали соревноваться с программистами из старшей школы. А я ж был третьеклассник. Пустили соревноваться с второклашками. Пока они рассказывали про поезда, как они работают, ПДД и т.д., пришёл я.
Показал игру, и всё — 1 место!

Второй раз не попал в призовые места. Хотя моя программка – так себе. Называется Alprog.RadioWave– приложение для прослушивания интернет-радио.

Переход на WPF


Спустя два года

Ура! Я умею писать на Windows Forms!

Тем временем, мне захотелось сделать что-то новенькое! Анимации, полупрозрачность элементов.
Ну почему GDI не умеет работать с видеокартой?! Он не тянет!

Ищу… Оооо! Нашёл! WPF!

MVVM? Что это??

Уже разозлился, подумал написать свой UI Фреймворк в Windows Forms на OpenGL.
Начал делать. Ой! Еще OpenGL учить надо! А как кнопку отрисовать? Текстуры в Photoshop’e делать?

Я переступил через порог «нихачу учиться! Я и так всё снаю!» и начал учить. Практика – вещь золотая в обучении.

Что сейчас?


А сейчас в 2019 году, когда мне 11 лет, я учусь на Xamarin.Forms и разрабатываю органайзер. Называется Alprog.Priority.

Первая версия называлась Alprog.XNote:

Уже на WPF

Вот основная:


Стал школьным «тыжпрограммистом». Информатику сдал экстерном. Если что, учителя ко мне обращаются (очень часто).

На уроках информатики приношу свой ноутбук и творю. Учитель информатики стал моим наставником.

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

Итоги


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

P.S. Ждите новых статей!

Что следует знать перед тем как «увлечься» программированием / Хабр

Вступление

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

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

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

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

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

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

Это как если вы пришли работать, скажем, крановщиком, вас в первый же день посадили в башню, и похлопали по плечу со словами «Ну, удачи!». А как же техника безопасности и базовое объяснение что делать, а чего делать не нужно? Как мне пользоваться инструментами? Что вообще у меня за инструменты в наличии? Что я должен знать перед тем как приступить к работе?

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

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

1. Терминал

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

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

Самообучение

25 вещей о терминале, которые должен знать каждый пользователь Mac (англ.)
How to be a terminal pro — серия отличных скринкастов от Tuts+
2. Регулярные выражения

Представьте себе, что вы решили выучить иностранный язык не вникая в его азбуку, алфавит или иероглифику. Конечно, это возможно. Но насколько это усложнит процесс и путь к пониманию сути вещей? Решение сомнительное, правда? Так вот, регулярные выражения (они же регексы, с ударением на первый слог) — это, объясняясь простым языком, в какой-то степени вспомогательная азбука любого программиста, или, выражаясь языком викисловаря — «формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов».

Выглядеть регекс может, например, так:

((?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,15})

Задача регулярных выражений — помочь программисту с поиском чего-либо. Сейчас объясню.

Если я в своей программе захочу найти все слова, частью которых является слово car (car, carrot, cartoon), мой регекс будет выглядеть так:

/car/

Если же меня интересует только слово car, я напишу:

/\bcar\b/

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

«Ну поиск, кому оно надо? Я же буду учиться программировать, а не искать слова!» — наверняка подумаете вы. Я вас услышал и даже понял. Так что если вы все еще сомневаетесь в необходимости заморачиваться с регулярными выражениями, просто поверьте мне на слово — они вам пригодятся. Многие книги и скринкасты используют регексы в примерах, вообще не объясняя, что происходит — авторы думают, что вы уже владеете этими азами и особенно не акцентируют внимание на разжевывании написанного.

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

Самообучение

Скринкасты от Tuts+ — Regular expressions up and running
3. Софт для разработки — знай свое оружие

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

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

div>(header>ul>li*2>a)+footer>p (используется плагин Emmet, если кому интересно)

Самообучение

Готовим Sublime для front-end
Tuts+ — Sublime Text 2 first steps
4. Система контроля версий

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

Резонный вопрос: «Зачем мне этот Гитхаб осваивать, ведь мне пока нечего выкладывать?» А причин на то несколько. Помимо содержания собственных репозиториев, GitHub, во-первых, поможет вам осознать себя частью огромного сообщества разработчиков (возможно, кто-то из читающих сейчас ухмыльнулся, но поверьте, это действительно важно, особенно на ранних стадиях обучения!). Кроме того, вы сможете взглянуть на чужой исходный код и научитесь правильно его скачивать и «форкать» (копировать). В дальнейшем GitHub частенько будет всплывать в различных онлайн-курсах и скринкастах, и, конечно же, их авторы будут уверены в том, что вы знаете, как Гитхабом пользоваться. Поэтому если у вас найдется немного времени на неделе, сделайте себе одолжение — попробуйте Git.

Самообучение

Tuts+ Git essentials
Try Git
5. История и культура

Этот пункт, скорее, вспомогательный, но если программиста которым вы восхищаетесь зовут Стив Джобс, то прошу вас, продолжайте чтение. Программирование имеет богатую и интересную историю (говорю вам как историк по первому диплому), в которой следует поковыряться хотя бы для общего образования. Занимаясь чем-либо, всегда полезно знать, откуда у этого чего-либо растут ноги. Кроме того, я искрене считаю, что без знания истории предмета невозможно полностью понять его суть, и, следовательно, достичь предельных успехов в его освоении. Поэтому если по прошествии некоторого времени такие имена, как Линус Торвальдс или же Грейс Хоппер не будут для вас пустым звуком — уважение вам и респект!

Помните — тот, кто не изучает историю, повторяет ее ошибки.

Заключение

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

Никогда не сдавайтесь!

языки, движки и все, что нужно знать начинающему разработчику — руководства на Skillbox

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

А если добавите механику получения опыта, повышения уровней, прокачки навыков, — игра станет походить на RPG. Механика — такая же важная составляющая игры, как и сюжет или графика.

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

  • если добавить стрельбу, то будет экшн;
  • если игрок будет безоружен, — стелс;
  • если ещё и замки нужно взламывать, то это уже головоломка или пазл.

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

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

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

Пример анимации двумерного персонажа

Для анимации 2D-объектов создаётся текстура по типу той, что на изображении выше. Она разбивается на равные части, которые сменяют друг друга. То есть игрок сначала видит первый кадр, который потом сменяется на второй, а затем на третий — это создает иллюзию движения.

Анимация в действии

Если брать 3D-модель, то используется скелетная анимация — модель как бы нанизывается на специальный каркас (скелет) с подвижными частями. Движение этих частей прописывается в коде.

На скриншоте видно, как персонаж сгибает руку в местах с точками (вершинами). Таких точек может быть очень много, если требуется сложная анимация — жесты, мимика и так далее.

Создаётся анимация так: прописываются точки координат или захватываются движения реального актера.

Первый способ сложный, но дешёвый, потому что от программиста требуется только прописать движения — сдвинуть точку A1 на координаты (50,240).

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

Почему научиться программировать так чертовски тяжело? / Блог компании Hexlet / Хабр

Привет, Хабр!

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

  • С чего начать обучение программированию?
  • У вас есть курс по Java для новичков, но я слышал, что нужно изучать Python, правда ли это?
  • На других сайтах все просто и понятно, а у вас какие-то компиляции и тесты!
  • Непонятно зачем нужен этот ваш курс по алгоритмам, в реальной жизни все алгоритмы уже реализованы в стандартных библиотеках

Но сложнее всего объяснить новичку, грубо говоря, во что он ввязывается. Благодаря очень простым, игровым образовательным проектам многие считают, что программирование это очень легко, а наши виртуальные машины, где нужно запускать тесты и компилировать код – это надуманная сложность. Давно хотелось найти такой материал, который бы подготовил новичка к длинному и сложному пути к карьере программиста. И недавно наши коллеги из Viking Code School такой материал написали! А мы его перевели для вас.

Квинси Ларсон был просто “офисным парнем в костюме”. Он решил научиться программировать. Начал спрашивать людей вокруг. Изучил немного Руби, потом быстренько посмотрел на другие языки вроде Scala, Clojure и Go. Он изучил Emacs, а потом Vim, а потом раскладку Dvorak. Он втыкал в Линукс, копался с Лиспом и кодил на Питоне, и жил при этом в командной строке больше полутора лет.

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

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

Ох. Звучит знакомо?

Фаза 1: Медовый месяц

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

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

С другой стороны, движение «Learn to Code” проделало фантастическую работу по удалению барьеров, и показало что кодить на самом деле довольно просто. Инструменты вроде Codecademy, Treehouse и Code School так мягко и за ручку подводят тебя к коду, что можно быть уверенным – я не просто смогу научиться программировать, я смогу стать полноценным разработчиком!

Внезапно, проблема не в страхе, а в избыточных надеждах и высоких ожиданиях.

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

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

Рисуем маршрут

Перед тем как перейти к Фазе 2, давайте взглянем взглянем на весь путь.

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

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

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

Мы рассмотрим уникальные испытания, которые ждут нас в следующих трех фазах, но для начала вкратце рассмотрим каждую фазу:

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

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

3. Пустыня отчаяния это долгий и одинокий путь через бездорожье, где каждое новое направление кажется верным, но часто вы просто ходите кругами и голодаете по ресурсам, которые могли бы помочь. Остерегайтесь “миражей мании” как сирен пустыни! Они уведут вас в никуда.

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

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

Давайте вернемся к фазе 2…

Фаза 2: Скала смятения

Итак, вы находитесь в фазе 1 – „Медовый месяц“. Вы заполняете пробелы и завершаете задачи, связанные с кодом в то время как ваша уверенность и возможности растут. Это не так уж плохо… К чему суета? Вы поднялись на «Гору иррационального изобилия»…

Будьте осторожны! Вы собираетесь переступить пропасть, которая ломает многих сильных учеников, вытесняя их в лагерь под названием „кодинг — это слишком тяжело“. Точный момент этого скачка происходит тогда, когда вы садитесь за клавиатуру, открываете свой текстовый редактор и пытаетесь в первый раз создать проект с нуля без каких-либо встроенных в браузер редакторов, костылей кода или полезных советов.

Блин…

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

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

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

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

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

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

Два ключевых фактора

Так в чем же на самом деле разница между первой и второй фазой? Почему фаза 2 («Скала смятения») так ужасна по сравнению с фазой 1 («Медовый месяц»)? Понимание этого поможет вам понять, что вашей вины абсолютно нет в том что, ваше путешествие выглядит так, как мы только что описали.

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

Фактор 1: плотность ресурсов

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

Введите в поисковике «Уроки программирования», и на вас обрушится стена из нужных и полезных инструментов, таких как статьи, видеоролики и учебники. И, честно говоря, это здорово! Никогда раньше не было так много способов, чтобы начать учиться программированию.

К сожалению, на более поздних этапах плотность ресурсов быстро падает. Любой, кто прошёл от стадии новичка до среднего уровня, может подтвердить, что существует БОЛЬШАЯ разница между количеством имеющихся ресурсов в самом начале и тогда, когда вы впервые ищете помощь самостоятельно, без посторонней поддержки.

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

Вот как выглядит плотность ресурсов в каждой фазе (большая концентрация линий указывает на большую плотность ресурсов):

Фактор 2: объем знаний

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

Когда вы только начали обучение, набор вещей, которые вам нужно понимать, ещё достаточно узкий. Каждому человеку, независимо от целей обучение, языка и предпосылок, необходимо изучить, что такое цикл «for», как построить логику условного оператора и познакомиться с основными структурами синтаксиса программирования. А зачастую даже и не приходится сталкиваться с некоторым из вышеприведенных базовых понятий, поэтому объем знаний на этом этапе является очень узким.

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

По мере продвижения к третьему этапу объем знаний станет расти. Теперь вы должны понимать, какие инструменты использовать, какие языки изучать, как писать модулярный код, знать основы CS и объектно-ориентированного программирования, обладать грамотным стилем кода и уметь искать ответы на вопросы (хотя бы в нескольких источниках). Каждый заход в Google или на сайт Hacker News погружает вас в огромное множество кроличьих нор и ошеломляет вас такими вещами, которых вы не знаете, но чувствуете, что должны их знать.

Вы не знаете, чего именно вы не знаете.

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

Фаза 3: Пустыня отчаяния

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

В сущности, это пустыня, где вы знаете, что где-то есть конец, но не знаете, как до него добраться:

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

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

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

Существует НАМНОГО больше вещей, которые предстоит узнать, чем вы, возможно, ожидали. Даже если вы в состоянии заставить работать некоторые приложения, то очень трудно не чувствовать себя слабым звеном в огромной цепочке становления настоящим профессионалом. Трудно измерить ваш прогресс. Как вы узнаете, что вам изучать, если изучаете только необходимые вещи?

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

Безусловно, до этого момента было трудно, но, возможно, вся эта история с веб-программированием и не такая сложная, в конце концов… Everything’s coming up Milhouse!

Фаза 4: Подъем благоговения

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

Это и есть «Подъем благоговения»:

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

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

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

Вы чувствуете, что уже должны стать разработчиком, но дистанция между кодом, который вы пишете и «профессиональной» рабочей средой не сокращается…

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

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

На что всё это похоже

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

Одно дело — знать путь, а другое дело — идти по нему. Давайте поможем вам начать.

Как дойти до конца живым

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

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

I: Как Выжить в «Медовом месяце»

Разнообразие доступных ресурсов в «Медовом месяце» доставляет много веселья. Они делают большую работу, чтобы сформировать вам нужный тип логического мышления, который вы должны будете развивать в течение последующих фаз. Это прекрасное время, чтобы начать учиться коду. Итак, пробуйте, наслаждайтесь, но не забывайте держать в голове эти два совета:
  1. Начните пробовать разные ресурсы, чтобы найти те, которые лучше вам помогают в обучении, ищите наиболее интересные для вас проекты. Это могут быть быстрые решения от KhanAcademy, упражнения в браузере от Codecademy, книга Learn to Program Криса Пайна или школа кода Try Ruby. В начале будьте открытыми для всего и игнорируйте наставления в стиле «вы должны учить только это». На данном этапе весь код одинаковый.
  2. Далее выберите один подходящий для вас ресурс и старайтесь придерживаться только его. Пройдите курс от начала до конца, чтобы получить все основные знания, которые вам помогут написать базовые скрипты и приложения. А в дальнейшем приготовьтесь начать создавать свои собственные проекты.
II: Выживание на «Скале смятения»

Почти каждый из вас пройдёт через «Скалу смятения», поскольку единственный способ стать разработчиком — это разрабатывать. Вы можете претендовать на эту профессию, подписавшись на статьи (или на туториалы, которые выдают за «полные» курсы), но этим вы будете только откладывать неизбежное. Учебники — это хороший способ решить начальные задачи, но в некоторой момент вы должны будете отучить себя от соски и столкнуться с реальным миром.

Вот три совета, которые помогут самостоятельно перейти к компилированию:

  1. Работайте с кем-то в паре, даже если он такой же новичок как и вы. Вы будете удивлены, насколько легче отладить кажущуюся неисправимой ошибку, если подключить ещё две пары глаз.
  2. Читайте больше чужого кода, чтобы познакомиться с хорошими паттернами. Постарайтесь понять, почему автор сделал именно так, а не иначе. Вы ведь не сможете стать писателем, не читая чужих книг, не правда ли? Мы подробно рассмотрим это в следующем посте, а сейчас, заострите своё внимание на мелких проектах и задачах, для которых другие люди уже написали решения.
  3. Начните с малого и программируйте постоянно. Вы должны думать о будущих крупных и интересных проектах, но для этого ваша отладка должна стать гладкой, а поиск ресурсов не должен составлять труда. Опыт вы ничем не замените.
III: Выживание в «Пустыне отчаяния»

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

Итак, вот ключи к выходу из «Пустыни отчаяния»:

  1. Поставьте перед собой определенную цель, которую вы хотите достичь, потому что в противном случае вы закончите тем, что устанете гоняться за своим хвостом, изучая различные виды интересных, но по большому счёту ненужных вещей. Но если у вас есть свободное время, то можете опустить этот совет…
  2. Найдите верный путь, который ведет прямо к поставленной цели и убедитесь, что он действительно направляет вас к ней. Вам нужно копать глубже и не искать ответ среди рекламных лозунгов, суперобложек и улыбающиеся лиц на веб-сайтах различных курсов на вопрос „поможет ли мне это достичь поставленной цели или нет?“
  3. Сконцентрируйте всё своё внимание и не отвлекайтесь, потому что, если вы относитесь к тем людям, которым интересно изучать код, вы также заинтересуетесь изучением других интересных вещей. В те моменты, когда программирование даётся тяжело, вы должны особенно сильно продвигаться вперед, а не браться осваивать другие модные занятия.

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

IV: Выживание на «Высоком подъеме»

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

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

Итак… Возможно ли это вообще?

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

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

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

Удачи!

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

Почему все так спешат?

Зайдите в любой книжный магазин, и вы увидите, как Teach Yourself Java за 24 часа вместе с бесконечными вариациями, предлагающими научить C, SQL, Ruby, алгоритмы и т. Д. За несколько дней или часов. Расширенный поиск Amazon по запросу [название: научить, себя, часов, с: 2000 и нашел 512 таких книг. Из первой десятки девять книг по программированию (вторая — по бухгалтерскому учету). Аналогичные результаты дает замена «учи себя» на «учись» или «часов» на «дни».»

Вывод таков: либо люди спешат учиться о программировании, или о том, что программирование как-то невероятно проще узнать больше всего на свете. Felleisen et al. отдают дань этой тенденции в своей книге How to Design Programs , когда они говорят «Плохое программирование — это просто. Идиоты могут выучить его за 21 день , даже если это манекенов ». Комикс Abtruse Goose тоже получил свое.

Давайте проанализируем, что такое заголовок Научитесь C ++ за 24 часа может означать:

  • Научитесь: За 24 часа у вас не будет времени написать несколько важные программы, и извлекать уроки из своих успехов и неудач с их.У вас не будет времени работать с опытным программистом и понять, каково жить в среде C ++. Короче, ты не успеет многому научиться. Таким образом, книга может говорить только о поверхностное знакомство, а не глубокое понимание. Как сказал Александр Поуп, небольшое обучение — опасная вещь.
  • C ++: Через 24 часа вы, возможно, сможете изучить синтаксис C ++ (если вы уже знаете другой язык), но вы не могли узнать много о том, как использовать язык.Короче говоря, если бы вы были, скажем, Базовый программист, вы можете научиться писать программы в стиле Базовый с использованием синтаксиса C ++, но вы не могли узнать, что такое C ++ на самом деле хорошо (и плохо) для. Так в чем смысл? Алан Перлис однажды сказал: «Язык, который не влияет на то, как вы думать о программировании, знать не стоит «. Один из возможных моментов: что вам нужно немного изучить C ++ (или, что более вероятно, что-то например, JavaScript или обработка), потому что вам нужно взаимодействовать с существующий инструмент для выполнения конкретной задачи.Но тогда ты не научиться программировать; вы учитесь выполнять эту задачу.
  • за 24 часа: К сожалению, этого недостаточно, так как следующий раздел показывает.

Научитесь программированию за десять лет

Исследователи (Блум (1985), Брайан и Хартер (1899), Хейс (1989), Simmon & Chase (1973)) показали это требуется около десяти лет, чтобы развить опыт в любом из множества зоны, в том числе шахматы, музыкальная композиция, телеграф работа, рисование, игра на фортепиано, плавание, теннис и исследования в нейропсихология и топология.Ключ совещательный практика: не просто делать это снова и снова, а бросать вызов самому себе с задачей, которая выходит за рамки ваших текущих возможностей, попробуй ее, анализировать вашу производительность во время и после выполнения и исправлять никаких ошибок. Потом повтори. И повторить еще раз. Кажется, нет настоящие ярлыки: даже Моцарт, который в 4 года был музыкальным вундеркиндом, Еще 13 лет до того, как он начал создавать музыку мирового уровня. В другого жанра, Битлз, казалось, ворвались на сцену с череда хитов №1 и появление на шоу Эда Салливана в 1964 году.Но с тех пор они играли в маленьких клубах Ливерпуля и Гамбурга. 1957 г., и, хотя на раннем этапе они приобрели массовую популярность, их первая великая критический успех, Sgt. Peppers , выпущен в 1967 году.

Малькольм Гладуэлл популяризировал эту идею, хотя он концентрируется на 10 000 часов, а не на 10 годах. Анри Картье-Брессон (1908-2004) использовал другую метрику: «Ваши первые 10 000 фотографий — ваши худшие». (Он не Ожидайте, что с цифровыми фотоаппаратами некоторые люди смогут достичь этой отметки за неделю.) Настоящий опыт может занять всю жизнь: Сэмюэл Джонсон (1709–1784) сказал: «Превосходство в любом отделе может быть достигается только трудом всей жизни; его нельзя покупать в меньшая цена ». И Чосер (1340-1400) жаловался:« Lyf такой короткий, ремесло так долго до lerne ». Гиппократ (ок. 400 г. до н. э.) известен отрывком« ars longa, vita brevis «, которая является частью более длинной цитаты» Ars longa, vita brevis, occio praeceps, Experimentum periculosum, iudicium difficile «, что на английском языке переводится как» Life is short, [the] craft долго, возможность мимолетная, коварный эксперимент, суждение трудно.» Конечно, ни одно число не может быть окончательным ответом: это не кажется разумным предположить, что все навыки (например, программирование, игра в шахматы, игра в шашки и музыка) может потребоваться одинаковое количество времени для освоения, и все люди займет ровно столько же времени. Так как Профессор К. Андерс Эрикссон сказал: «В большинстве областей замечательно, сколько времени даже самые талантливые люди нужны для достижения высочайшего уровня производительности. Число 10000 часов просто дает вам ощущение, что мы говорим годы от 10 до 20 часов в неделю, и те, кого некоторые люди утверждают, являются наиболее талантливыми людьми по-прежнему нуждаются в достижении высочайшего уровня.»

Итак, вы хотите быть программистом

Вот мой рецепт успеха в программировании:

  • Получите , заинтересовавшись программированием, и займитесь этим, потому что это весело. Удостовериться что это достаточно весело, так что вы будете готовы потратить свои десять лет / 10 000 часов.
  • Программа . Лучший способ обучения — это обучение при выполнении. Говоря более технически, «максимальный уровень производительность для физических лиц в данной области не достигается автоматически в зависимости от расширенного опыта, но уровень производительность может быть увеличена даже очень опытными людьми, поскольку результат сознательных усилий по улучшению.»(стр. 366) и «наиболее эффективное обучение требует четко поставленной задачи с подходящий уровень сложности для конкретного человека, информативная обратная связь и возможности для повторения и исправления ошибок. »(стр. 20-21) Книга Познание на практике: разум, математика и культура в повседневной жизни Life — интересный ссылка для этой точки зрения.
  • Поговорить с другими программистами; читайте другие программы. Это важнее чем любая книга или учебный курс.
  • Если хотите, проучитесь четыре года в колледже (или больше в колледже Высшая школа). Это даст вам доступ к некоторым вакансиям, требующим учетные данные, и это даст вам более глубокое понимание области, но если вам не нравится школа, вы можете (с некоторой самоотдачей) получить подобный опыт самостоятельно или на работе. В любом случае книжное обучение само по себе не быть достаточным. «Компьютерное образование не может сделать эксперта программист больше, чем изучение кистей и пигментов может сделать кто-то искусный художник «, — говорит Эрик Раймонд, автор книги The New Словарь хакеров .Один из лучших программистов, которых я когда-либо нанял, имел только высшее образование; он создал много отличного программного обеспечения, имеет свою собственную группу новостей и сделал достаточно акций, чтобы купить собственный ночной клуб.
  • Работа над проектами с другими программистами. Будь лучшим программистом по некоторым проектам; быть худшим для других. Когда ты лучший, вы можете проверить свои способности руководить проектом и вдохновлять другие с вашим видением. Когда ты хуже всех, ты узнаешь, что за мастера делают, и вы узнаете, что им не нравится делать (потому что они сделать это за них).
  • Работа над проектами после других программистов. Понять программу, написанную кем-то другим. Посмотри, что нужно для понять и исправить это, когда оригинальные программисты не вокруг. Подумайте, как разрабатывать свои программы, чтобы упростить тех, кто будет их поддерживать после вас.
  • Выучите минимум полдюжины языков программирования . Включите один язык, который подчеркивает абстракции классов (например, Java или C ++), тот, который подчеркивает функциональную абстракцию (например, Lisp, ML или Haskell), один который поддерживает синтаксическую абстракцию (например, Lisp), один который поддерживает декларативные спецификации (например, Prolog или C ++ шаблоны) и тот, который подчеркивает параллелизм (например, Clojure или Go).
  • Помните, что в «информатике» есть « компьютер ». Know сколько времени требуется вашему компьютеру, чтобы выполнить инструкцию, получить слово из памяти (с пропуском кэша и без него), считывание последовательных слов с диска и поиск нового места на диске. (Ответы здесь.)
  • Присоединяйтесь к языку стандартизация усилий. Это может быть комитет ANSI C ++ или может решить, будет ли ваш локальный стиль кодирования иметь 2 или 4 пробела уровни отступов.В любом случае вы узнаете, что другие люди как в языке, насколько глубоко они это чувствуют, и, возможно, даже немного о том, почему они так себя чувствуют.
  • Имейте здравый смысл, чтобы отказаться от усилий по стандартизации языка как как можно быстрее.
Учитывая все это, сомнительно, как далеко вы можете пройти, просто книжное обучение. Еще до рождения первого ребенка я прочитал все How До книг, и все еще чувствовал себя бестолковым новичком. 30 месяцев спустя, когда должен был родиться второй ребенок, вернулась ли я к книгам на освежить? Нет.Вместо этого я полагался на свой личный опыт, который оказался гораздо более полезным и обнадеживающим для меня, чем тысячи страниц, написанных экспертами.

Фред Брукс, в своем эссе No Silver Bullet определили план из трех частей для поиска отличных разработчики программного обеспечения:

  1. Систематически определяйте лучших дизайнеров как можно раньше.
  2. Назначьте профессионального наставника, который будет отвечать за развитие потенциального клиента и тщательно вести карьерный досье.
  3. Предоставляйте возможность развивающимся дизайнерам взаимодействовать и стимулировать друг друга.
Это предполагает, что некоторые люди уже обладают качествами, необходимыми для быть отличным дизайнером; задача состоит в том, чтобы как следует их уговорить. Алан Перлис выразился более лаконично: «Каждого можно научить лепить: Микеланджело пришлось бы научить, как этого не делать. Так и с великие программисты ». Перлис говорит, что у великих есть внутреннее качество, выходящее за рамки их обучения. Но причем тут качество взято? Это врожденное? Или они развивают это через усердие? Как Огюст Гюсто (вымышленный повар в Ratatouille ) говорит: «Готовить может любой, но только бесстрашный. может быть здорово.»Я думаю об этом больше как о готовности посвятить большой часть жизни к совещательной практике. Но возможно бесстрашный — способ резюмировать это. Или, как критик Гюсто, Антон Эго говорит: «Не каждый может стать великим художником, но великим художник может прийти откуда угодно «.

Так что покупайте книгу по Java / Ruby / Javascript / PHP; Вы будете наверное, получу от этого какую-то пользу. Но ты не изменишь свою жизнь, или ваш реальный общий опыт программиста за 24 часа или 21 день. Как о работе трудно постоянно улучшаться в течение 24 месяцев? Что ж, теперь вы кое-чего начинаете…


Список литературы

Блум, Бенджамин (ред.) Развитие талантов в молодежи , Баллантайн, 1985.

Брукс, Фред, No Silver Bullets , IEEE Computer, vol. 20, нет. 4, 1987, с. 10-19.

Брайан, W.L. & Хартер, Н. «Исследования по телеграфному языку: Приобретение иерархии привычек. Обзор психологии , 1899, 8, 345-375

Хейс, Джон Р., Полное решение проблем Лоуренс Эрлбаум, 1989.

Чейз, Уильям Г. и Саймон, Герберт А. «Восприятие в шахматах» Когнитивная психология , 1973, 4, 55-81.

Лаве, Жан, Познание на практике: разум, математика и культура в повседневной жизни Life , Cambridge University Press, 1988.


ответов

Примерное время для различных операций на типичном ПК:
выполнить типичную инструкцию 1 / 1,000,000,000 сек = 1 наносекунда
выборка из кэш-памяти L1 0.5 наносекунд
неправильное предсказание перехода 5 наносекунд
выборка из кэш-памяти L2 7 наносекунд
Блокировка / разблокировка Mutex 25 наносекунд
выборка из основной памяти 100 наносекунд
отправить 2 Кбайта по сети 1 Гбит / с 20000 наносекунд
Последовательное чтение 1 МБ из памяти 250 000 наносекунд
выборка из нового места на диске (поиск) 8000000 наносекунд
Последовательное чтение 1 МБ с диска 20000000 наносекунд
отправить пакет из США в Европу и обратно 150 миллисекунд = 150 000 000 наносек

Приложение: выбор языка

Несколько человек спрашивали, какой язык программирования им следует изучить в первую очередь.Однозначного ответа нет, но рассмотрите следующие моменты:
  • Используйте своих друзей . На вопрос «какая операционная система должна Я использую Windows, Unix или Mac? «, Я обычно отвечаю:» использовать что угодно ваши друзья используют «. Вы получаете преимущества, извлекая уроки из друзья компенсируют любую внутреннюю разницу между ОС или между языками программирования. Также подумайте о своих будущих друзьях: сообщество программистов, частью которого вы станете, если вы Продолжать. Есть ли у выбранного вами языка большое растущее сообщество или маленький умирающий? Есть ли книги, веб-сайты и онлайн-форумы получить ответы? Вам нравятся люди на этих форумах?
  • Будьте проще .Языки программирования, такие как C ++ и Java предназначены для профессиональной разработки большими командами опытные программисты, озабоченные эффективностью выполнения их код. В результате эти языки имеют сложные части, предназначенные для этих обстоятельств. Вы озабочены обучением программированию. Вам не нужны эти сложности. Вам нужен язык, который был разработан, чтобы его было легко выучить и запомнить одинокий новый программист.
  • Играть. Каким способом вы бы предпочли научиться играть на пианино: нормальный, интерактивный способ, при котором вы слышите каждую ноту, как только нажимаете клавишу, или «пакетный» режим, в котором вы слышите ноты только после того, как закончите целую песню? Понятно, что интерактивный режим облегчает обучение игре на фортепиано, а также программирование.Настаивайте на языке с интерактивным режимом и используйте его.
Учитывая эти критерии, мои рекомендации по первому программированию язык будет Python или Схема . Другой вариант — Javascript, не потому, что он идеально подходит для начинающих, но потому что для этого есть так много онлайн-руководств, таких как Учебник Ханской академии. Но твой обстоятельства могут отличаться, и есть и другие хорошие варианты. Если ваш возраст является однозначным числом, вы можете предпочесть Алиса или писк или Blockly (они также могут понравиться ученикам старшего возраста).Важный дело в том, что вы выбираете и начинаете.

Приложение: книги и другие ресурсы

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

Как научиться программированию? [Руководство для начинающих]

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

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

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

Как научиться программированию?

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

1. Ознакомьтесь с языком программирования

Знакомство с языком программирования — это первый шаг к изучению программирования. Люди часто начинают с C, C ++, Java или Python. Я лично предпочитаю C ++ вначале, поскольку он не слишком прост (как Python) и не слишком несовершенен с точки зрения библиотек (как C).C ++ довольно быстр и имеет хорошую библиотечную поддержку — лучшее из обоих миров! Кроме того, C ++ — хороший выбор для соревновательного программирования, потому что он довольно быстр и поддерживает стандартную библиотеку шаблонов (STL). Выбор первого языка очень субъективен и зависит от ваших интересов и целей. Возможно, вас заинтересуют интерфейс, серверная часть, разработка мобильных приложений, разработка игр, наука о данных и т. Д. Если ваша главная цель — получить работу, обязательно ознакомьтесь с нашей статьей о том, какой язык программирования лучше всего подходит для получения работы ?

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

2. Изучите структуры данных и алгоритмы

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

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

3. Запачкайте руки соревновательным программированием

После того, как вы изучите структуры данных и алгоритмы, вы должны начать решать проблемы на таких сайтах, как SPOJ, Codechef, Codeforces, Topcoder, Hackerrank, Geeksforgeeks и т. Д.Чем больше проблем решишь, тем лучше. Однако лучше решать проблемы в порядке возрастания сложности. Вы можете отсортировать проблемы в порядке убывания количества присланных решений и приступить к решению. Решив около 100 смешанных задач, вы убедитесь в своих навыках программирования.

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

4. Сделать проект

Теперь, когда вы усовершенствовали свои навыки решения проблем и программирования, пришло время создать несколько полезных приложений. Вы можете выбрать какой-нибудь популярный фреймворк для веб-разработки (Django, Flask, Ruby on Rails и т. Д.) И создать на нем проект. Создание приложения позволит вам почувствовать настоящую разработку программного обеспечения, что и делают большинство программистов.

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

5. Изучите

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

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

В настоящее время существует множество онлайн-ресурсов для изучения любой из вышеупомянутых областей. Но с изобилием доступных ресурсов новичку сложно найти отличный учебник из такого множества вариантов. Что бы вас ни интересовало, вы можете найти лучшие учебники, рекомендованные сообществом программистов, для этого языка / фреймворка на Hackr.io. Помимо руководств и курсов, на Hackr вы также можете найти лучшие книги и упражнения / проекты / практические задачи.

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

Это был мой подход к обучению программированию; вот как я научился программировать 🙂 Поскольку вы читаете эту статью, я предполагаю, что вы серьезно относитесь к изучению программирования, и это хорошо! Надеюсь, вы нашли эту статью полезной. Всего наилучшего для вашего обучения! Не стесняйтесь задавать мне свои вопросы / сомнения в комментариях.

Еще читают:

.

10 полезных советов, чтобы научить себя английскому

Вы любите изучать английский, но у вас нет времени?

Или вы хотите выучить больше английского, но не на вашем официальном уроке?

Если да, то у нас хорошие новости.

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

Фактически, вы можете стать самим себе учителем!

Да, верно.

Больше не нужно путешествовать по городу только для занятий английским.

Больше не нужно выполнять скучные грамматические упражнения.

Больше не нужно убирать дом для частного репетитора…

… потому что есть еще несколько удивительных и очень эффективных способов выучить английский язык — без помощи учителя английского языка.

Возможно, вы думаете: «Ни за что! Я все время делал это неправильно? »

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

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


Learn a foreign language with videos

10 полезных советов, чтобы научить себя английскому

1. Принимайте медленно

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

Ставьте реалистичные цели и посвящайте определенное количество времени изучению английского языка каждый день.Тридцать минут — это хорошо, но если вы можете сделать больше, это еще лучше. Изучение английского языка в одиночку означает, что вы можете выбрать время, место и метод обучения; однако очень легко сказать Я слишком устал или Я сделаю это завтра! Никто никогда не выучил язык с таким подходом, так что вам действительно нужно захотеть этого… вы можете это сделать!

2. Думайте как ребенок

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

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

3. Слушайте все и вся

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

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

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

4. Наслаждайтесь музыкой, чтобы учить английский

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

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

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

5. Используйте новости, чтобы учить английский

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

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

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

Чем больше вы слушаете и читаете новости на английском, вы сможете более активно участвовать в разговорах на английском языке — и больше не будете тихим иностранцем!

6.Смотрите фильмы, чтобы учить английский

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

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

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

7. Учите английский с YouTube

На YouTube есть все, что только можно представить. Здесь есть старые ситкомы, трейлеры к фильмам, телерекламы, обучающие видео и многое другое. Чем ты интересуешься? Тебя интересует музыка? Мода? Гольф? Дрессировка собак? Независимо от вашего интереса, введите его в область поиска на YouTube, выберите видео, затем посмотрите и послушайте.Когда вас интересует тема, у вас уже есть базовые знания по ней, поэтому изучение и понимание будет намного проще.

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

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

8. Карточки «сделай сам»

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

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

9. Английский клуб

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

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

10. Присоединяйтесь к языковым онлайн-форумам

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

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

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


И еще кое-что…

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

best English apps

Если вы хотите его посмотреть, возможно, он у FluentU.

С FluentU смотреть видео на английском очень просто. Как? Есть интерактивные подписи. Другими словами, вы можете нажать на любое слово, чтобы увидеть изображение, определение и полезные примеры.

best English apps

FluentU позволяет изучать увлекательный контент со всемирно известными знаменитостями.

Например, если вы нажмете на слово «принес», вы увидите следующее:

best English apps

FluentU позволяет вам нажать, чтобы найти любое слово.

С FluentU вы можете выучить словарь любого видео. Проведите пальцем влево или вправо, чтобы просмотреть другие примеры слова, которое вы изучаете.

best English apps

FluentU поможет вам быстро учиться с помощью полезных вопросов и множества примеров. Выучить больше.

Самая крутая часть? FluentU знает словарный запас, который вы изучаете.Он использует ваш словарный запас, чтобы порекомендовать вам примеры и видео. У вас действительно индивидуальный опыт.

Начните использовать FluentU на веб-сайте со своего компьютера или планшета или, что еще лучше, загрузите приложение FluentU из магазинов iTunes или Google Play.

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

Испытайте погружение в английский онлайн!

.

Научитесь информатике

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

Наша стандартная рекомендация для этого содержания — классическая Структура и интерпретация компьютерных программ , которая доступна в Интернете бесплатно как в виде книги, так и в виде набора видеолекций MIT.Хотя эти лекции великолепны, наше видео-предложение на самом деле представляет собой лекции SICP Брайана Харви (для курса 61A в Беркли). Они более изощренны и лучше ориентированы на новых студентов, чем лекции MIT.

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

С тех пор, как это руководство было впервые опубликовано в 2016 году, один из наиболее часто задаваемых вопросов заключался в том, порекомендуем ли мы теперь записи более поздней версии 61A, преподаваемой Джоном ДеНеро, и / или соответствующей книги Составление программ , которая «в традициях SICP», но использует Python.Мы считаем, что ресурсы DeNero также великолепны, и некоторые студенты могут в конечном итоге предпочесть их, но мы все же предлагаем лекции SICP, Scheme и Брайана Харви в качестве первого набора ресурсов, которые стоит попробовать.

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

Если вам не нравится SICP, попробуйте Composing Programs .Если это все еще не подходит, попробуйте How to Design Programs . Если кажется, что ни одно из этих действий не окупает ваши усилия, возможно, это знак того, что вам следует сосредоточиться на других темах в течение некоторого времени и вернуться к дисциплине программирования через год или два.

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

.