Содержание

ɯǝʚɯо ņıqнqvиʚɐdu) / RUVDS.com corporate blog / Habr

Многие начинают путь к изучению программирования, открыв поздним вечером Google. Обычно ищут что-то вроде «Как выучить…». Но как тот, кто ищет подобное, решает, какой именно язык программирования выбрать?

Кто-то, начитавшись сайтов и блогов крупнейших компьютерных компаний, рассуждает так: «В Кремниевой долине что ни слово –  то Java. Думаю, это – то, что мне нужно». Бывает и так: «Haskell. Он ведь на пике популярности. Страшно подумать, что будет дальше. Определённо – Haskell». И даже так: «Этот суслик на логотипе Go – такая няшка. Хочу знать Go».

Некоторые, движимые стремлением научиться программировать, ищут вот что: «Какой язык программирования выучить первым?».

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

Кликабельно:

Если рассмотреть эту схему, окажется, например, что Ruby подходит тем, кто ребёнком любил лепить из пластилина.

Выбор первого языка программирования может стать увлекательным занятием, как полусерьёзные опросники, вроде: «Кто вы из героев Квентина Тарантино?».

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

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

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

  • Рынок труда.
  • Долгосрочные перспективы языка.
  • Сложность изучения языка.
  • Что именно вы сможете создать в процессе изучения, и, показав окружающим, поддержать мотивацию.

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

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

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

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

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

Основы информационных технологий и обучение программированию



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

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

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

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

И те, кто принимают решения о том, чему учить на курсах по программированию, обычно придерживаются всяческих официальных источников, регулярно публикующих отчёты с рейтингами языков. Среди таких отчётов, например, TIOBE Index. А вот — таблица лидеров по версии IEEE.


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

Так, в 2014-м году Python обошёл Java, став самым популярным языком программирования в ведущих курсах по информационным технологиям в США.


И я уверен, что ещё одно изменение обязательно произойдёт, да что там говорить – это уже происходит.

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

Вот результат опроса, который проводился на Stack Overflow в 2016-м году. В нём участвовало 49397 разработчиков. Более половины из них используют JavaScript.

Без JavaScript невозможна разработка веб-интерфейсов, а в последнее время, благодаря Node.js, растёт актуальность JavaScript в серверном коде. Этот язык стремительно распространяется и в другие области, такие, как разработка игр и интернет вещей.

Среди программистских вакансий JavaScript упоминается чаще, чем другие языки, если не брать в расчёт Java. Вот данные с крупнейшего агрегатора вакансий Indeed.com.

Неслучайно и то, что мы, на freecodecamp.com, собрали сообщество разработчиков, занятых проектами на JavaScript с открытым исходным кодом. За прошедшие два года более 5000 человек воспользовались Free Code Camp для того, чтобы найти свою первую работу в роли программиста.

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

Но подходит ли JavaScript именно вам? Стоит ли ему становиться вашим первым языком программирования? Рассмотрим подробнее те факторы выбора языка, о которых я говорил выше.

Фактор №1: рынок труда


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

Как я уже говорил, в объявлениях о вакансиях чаще всего упоминается Java. На втором же месте стоит JavaScript.

Но в случае с JavaScript надо учесть одну важную вещь. Хотя язык существует уже два десятка лет, лишь сравнительно недавно он превратился в серьёзный инструмент, с помощью которого гиганты вроде Netflix, Walmart и PayPal создают полноценные приложения.

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

Вот данные с Indeed.com, здесь показано соотношение вакансий и соискателей.


Итак, что мы видим. На одно место Java-разработчика приходится 2.7 программиста. В сфере вакансий, где требуется знание PHP, а также в среде iOS-разработки, складывается похожая ситуация.

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

Фактор №2: долгосрочные перспективы


JavaScript-проекты на GitHub получают, в среднем, в два раза больше pull-запросов, чем проекты на Java, Python или Ruby. И, кроме этого, JavaScript растёт быстрее, чем любой другой популярный язык.

Вот соответствующие данные GitHub Octoverse:

На экосистему JavaScript, кроме того, благотворно влияют серьёзные инвестиции, как финансовые, так и выражающиеся в человеческом капитале талантливых инженеров, от таких компаний, как Google, Microsoft, Facebook и Netflix.

Например, вклад в язык программирования с открытым исходным кодом TypeScript (расширенная версия JavaScript со статической типизацией) внесли более 100 разработчиков. Многие из них – сотрудники Microsoft и Google, которые получают зарплату за эту работу.

Подобную форму совместной работы компаний в среде Java найти сложнее. Например, Oracle, которая фактически владеет Java, поглотив Sun Microsystems, часто судится с компаниями, которые пытаются работать над этим языком.

Фактор №3: сложность изучения языка


Вот карикатура о сложности языков программирования от XKCD.

Большинство программистов согласится с тем, что высокоуровневые скриптовые языки сравнительно легки в изучении. JavaScript подпадает под эту категорию, вместе с Python и Ruby.

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

Фактор №4: проекты, которые можно создать, используя полученные знания


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

Повсеместное распространение JavaScript привело к такому знаменитому высказыванию Джефа Этвуда, сооснователя Stack Overflow: «Любое приложение, которое можно написать на JavaScript, будет в итоге написано на JavaScript».

С течением времени это высказывание, которое ещё называют «Законом Этвуда», не утрачивает актуальности.

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

Python страдает от похожих проблем. Вот что по этому поводу написал Джеймс Хэг в статье о том, что пришла пора отказаться от Python, как от основного языка, используемого при обучении программированию. Ученик спрашивает: «Как мне дать эту вот игру, которую я написал, друзьям? Или, это будет даже лучше, можно ли как-нибудь записать её на мой телефон, чтобы я мог показать её всем в школе, а им не пришлось бы её устанавливать?». Учителю же, если речь идёт о Python, остаётся лишь хмыкнуть. В двух словах тут и не ответишь.

Если же говорить о JavaScript, то вот живые ответы на вышеупомянутый вопрос. Это – приложения, которые написали члены сообщества Free Code Camp в CodePen, пользуясь браузером.

Вот игра «Simon», созданная в стиле 1970-х.


Вот – реализация математической игры Джона Конвея «Жизнь».

Вот – страница поиска для Wikipedia, стилизованная под «Звёздные войны».

А вот – игра-«рогалик» с традиционным подземельем.

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


Сначала как следует изучите один язык. Затем принимайтесь за следующий.

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

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

  • Изучение C – это отличный способ разобраться с тем, как, на самом деле, работают компьютеры, в частности, в плане управления памятью. C особенно хорош в высокопроизводительных вычислениях.
  • C++ отлично подходит для разработки игр.
  • Python нет равных в научных и статистических расчётах.
  • Java пригодится тем, кто видит себя программистом в крупной компании.

Но сначала, повторюсь, стоит изучить JavaScript.

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

Возражение №1. JavaScript – язык медленный


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

JavaScript (речь идёт о Node.js) на порядки быстрее, чем Python, Ruby и PHP. Его быстродействие приближается к C++, Java и Go. Вот результаты одного весьма серьёзного теста производительности для различных языков программирования.

Возражение №2. В JavaScript нет статической типизации


Как Python и Ruby, JavaScript – это язык с динамической типизацией. И это, с одной стороны, удобно, а с другой – способно завести разработчика в лабиринт ошибок. Вот, например, здесь мне хочется, чтобы переменная exampleArray была массивом. Я записываю в массив значения, проверяю его длину, то есть – количество содержащихся в массиве элементов. Выглядит это так:
exampleArray = [1, 2]
-> [1, 2]
exampleArray.length
-> 2

Затем я случайно записываю в переменную строку, при этом, что ещё хуже, благодаря особенностям строкового типа данных в JavaScript, я вполне могу получить длину того, что считаю массивом, обратившись к свойству length:
exampleArray = "text"
-> "text"
exampleArray.length
-> 4

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

Если же вам, в первом языке программирования, совершенно необходима статическая типизация, я всё равно рекомендую начать с JavaScript. После этого вы сможете быстро освоить TypeScript. Вот что говорит на эту тему Алекс Эверлоф: «Для того, чтобы освоить TypeScript, нужно время, но, если вы уже знаете JavaScript, всё будет гораздо быстрее и проще».

Возражение №3. Я очень хочу создавать мобильные приложения, поэтому JavaScript не для меня


Даже если так, я всё равно советую сначала изучить JavaScript. И, кстати, он вполне подходит для разработки мобильных приложений, причём, как их клиентской, так и серверной частей. А именно:
  1. В экосистеме JavaScript имеются несколько инструментов для разработки полноценных мобильных приложений. Например, это Angular Cordova и React Native.
  2. Для того, чтобы ваше мобильное приложение делало что-нибудь по-настоящему интересное, вероятно, ему понадобится серверная часть, построенная на некоей подходящей платформе, вроде Node.js + Express.js.

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

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

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

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

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

habr.com

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

Введение 

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

Среди массы различных языков программирования новичку в IT очень сложно выбрать направления для дальнейшего развития, потому что каждый язык занимает определенную ячейку. Наиболее популярные, языки в «современном программировании», это: Java, Python, Objective-C, PHP, C, C++, C#, JavaScript и Ruby. Форумы и специализированные сайты переполнены тематикой «Что выбрать?» и «Куда развиваться?». И мы нашли оптимальную схему выбора ветки развития юным программистам.

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

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

  • Деньги
    Часто, наиболее распространенной причиной изучения программирования служит мнение о том, что программисты много зарабатывают. Да, это действительно так. Зарплаты хороших программистов могут заставить позавидовать даже некоторых менеджеров высшего звена. Но это достигается годами упорного труда, само мотивации и углубления в современные информационные технологии. Кроме того, дабы получать по-настоящему достойную зарплату, стоит сразу нацеливается на работу в хорошей крупной компании. Или же иметь идею на миллион и открывать свой start-up.
     
  • Перспективы
    Казалось бы, относительно недавно стоило появится первом персональному компьютеру – и нате Вам! – программисты стали одними из наиболее востребованных работниками современного рынка. Действительно, наш век – это век информационных технологий, быстроразвивающийся и динамический. Сейчас спрос на специалистов IT-сферы растет как никогда, и вряд ли стоит ждать на него спад. Все больше и больше современных компаний готовы предложить «теплое местечко». Сколько их – Google, Microsoft, EPAM прочие.
     
  • Динамичность
    Каждому человеку присуща толика любознательности. Но есть люди, у которых страсть изучать что-то новое просто в крови! Что же, в таком случае программирование – это именно то, что вам нужно. На данный момент существуют десятки различных направлений: мобильная разработка, настольные приложения, веб-программирование, игры, сколько их… А уж сколько для этих направлений было разработано технологий и программ – не счесть. Работая в сфере IT вы можете быть уверенным, что никогда не дадите себе заскучать!
    Итак, раз мы разобрались с нашими мотивами и разложили все по «полочкам», приступим же непосредственно к выбору первого языка программирования!

Какой язык программирования выбрать?

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

Вот график наиболее востребованных направлений области информационных технологий:

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

  • Я бы хотел разрабатывать сайты
    С этим направлением не все так просто. Есть Front-End разработка сайтов – это все, что вы видите на экране. Создание веб-страниц, программ для них, стилей и много чего прочего. В таком случае вам стоит обратить свое внимание на JavaScript и HTML & CSS. А есть Back-End – разработка непосредственно программ для серверов – тех алгоритмов, которые, собственно говоря, и будут управлять страницами, сайтом и прочим. Здесь все несколько сложнее, так как сразу же появляется хороший выбор из Python, Java, C#, и PHP. Каждый из этих языков обладает как серией достоинств, так и набором откровенных недостатков. В качестве этакого старта советуем рассмотреть Python.
     
  • Настольные приложения для домашних ПК
    Тут бесспорными лидерами выступают такие популярные языки, как Java и C#. С одной стороны, обучение Java несколько проще и быстрее, чем C#, с другой, набор возможностей, которыми может похвалится C#, на порядок выше.
     
  • Работа с базами данных
    Ну, тут все однозначно: следует начинать с SQL! Администрирование, работа с реляционными базами данными и прочее, что так необходимо в современно IT-мире. Здесь можно рассмотреть вступление в язык запросов.
     
  • Игры-игры-игры!
    Геймерами не стают, ими рождаются. Наслаждаетесь современными продуктами игровой индустрии и сами бы хотели привнести что-то в этой увлекательный виртуальный мир? Тогда, определенно, вам стоит обратить свое внимание на С++.     

Здесь можно посмотреть статистику языков программирования по популярности:

            

Статистика поиска соискателей по языкам и пла

itvdn.com

«Какой язык программирования выбрать новичку?» – Яндекс.Знатоки

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

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

Языки для разработки сайтов

Если у вас нет опыта разработки, начните с азов. HTML — язык разметки, основа для дальнейшего продвижения в веб-разработке. Знание гипертекстовой разметки поможет создавать статичные страницы. Следующий этап — JavaScript. С его помощью можно добавить сайту интерактивности. Во front-end разработке это необходимый минимум.

Back-end или серверную часть сайта можно писать на PHP, Python, Ruby, Java, C#. У каждого языка своя экосистема, большая инфраструктура. Чтобы выбрать фаворита, подумайте в какой сфере вы бы хотели работать, и проанализируйте, какие языки в ней чаще используют разработчики.

Языки для разработки игр

Об универсальности Python уже говорилось, и в геймдеве он тоже пригодится. 2D и 3D-игры, простые квесты и RPG — это далеко не все, что можно написать на «змеином языке». Скрипты Python хорошо взаимодействуют со многими движками, что позволяет использовать их для более эффективного и простого кода, даже если игра написана на другом языке.

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

Классика для создания игр — C++. При всей сложности в изучении этот язык крайне востребован. Он гибкий и компилируемый. Оттеснить C++ с позиций лидера в игрострое пока никому не удаётся, но игроделы часто обращаются к ещё одному языку С-синтаксиса — C#. Стоит отметить, что в последнее время всё большую популярность для создания игр набирает среда Unity, которая лучше всего взаимодействует с C#.

Языки для разработки приложений

Если речь идёт о мобильных приложения, важно определиться, для какой ОС они создаются. Нативные разработки под Android пишутся на Java, под iOS — на Objective C и Swift, под Windows — на C#. Однако многие популярные приложения являются гибридными: интерфейс делается на нативном языке, внутренности дорабатываются на других: HTML5, JavaScript и тому подобных.

Для десктопных приложений пригодятся C++, Python, Java, C#. Каждый язык имеет свои нюансы. Код на Python легко собирается в один exe-файл, который не требует от пользователя установки дополнительных компонентов. Java и C# вынуждают владельца ПК установить фреймворки, что может повлиять на популярность приложения у потребителя. При этом разработки на этих языках легко дорабатываются под нужную платформу и отличаются быстрой производительностью. C++ —  надёжный выбор с минусом в виде низкой скорости разработки. Зато программы на этом языке экономно расходуют системные ресурсы и имеют высокую производительность.

yandex.ru

10 самых влиятельных языков программирования последних 50 лет и их создатели

В IT-вселенной существует множество языков программирования. С каждым годом их становится всё больше и больше. Например, сравнительно недавно появились языки Scala, Kotlin, Go и Closure. Но история говорит нам о том, что выживут лишь немногие из них.

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

Языки — это важнейшая составляющая индустрии программирования. Их часто обсуждают, критикуют, их, с течением времени, улучшают. Они у всех на слуху, но их историю, хотя бы то, как зовут их создателей, знают далеко не все. Такое менее характерно для популярных языков. Например, все знают о том, что Джеймс Гослинг — это отец Java. Но далеко не каждый программист знает о том, кто создал Perl, Pascal, Lisp или Erlang.

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

Топ-10 языков программирования и их создатели


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

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

1. Java — Джеймс Гослинг



Джеймс Гослинг

Java — это один из самых популярных и успешных языков программирования. Java создал доктор Джеймс Артур Гослинг. Он известен как «отец Java».

Изначально разработкой и поддержкой Java занималась компания Sun Microsystems. С января 2010 года, после того, как компанию Sun купила Oracle, этим занимается Oracle.

В основу Java положен принцип WORA («Write Once Run Anywhere», «Написано один раз, работает везде»). Платформонезависимость Java стала одной из фундаментальных причин успеха этого языка в корпоративной среде.

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

2. C — Деннис Ритчи



Деннис Ритчи

Деннис Макалистэйр Ритчи, американский компьютерный специалист, занимался созданием языка программирования C в 1967 — 1973 годах в AT&T Bell Labs.

Язык C всё ещё весьма популярен. Он широко используется в системном программировании. Он старше Java, но не сдаёт своих позиций.

Деннис Ритчи, кстати, создал ещё и всемирно известную операционную систему Unix. Сделал он это вместе со своим давним коллегой Кеном Томпсоном.

Если сравнить популярность Денниса Ритчи с популярностью Билла Гейтса или Стива Джобса, то окажется, что сравнивать тут почти нечего. Но мало кто может сравниться с ним в том, какой вклад он сделал в мир информационных технологий. Об этом стоит знать каждому программисту. Если вы хотите изучить C — взгляните на эту специализацию на Coursera.

3. С++ — Бьёрн Страуструп



Бьёрн Страуструп

Бьёрн Страуструп родился 30 Декабря 1950 года в городе Орхус, в Дании. Он известен благодаря созданию и разработке широко используемого языка программирования C++. 

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

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

Если вы хотите изучить С++ с нуля — рекомендую взглянуть на этот учебный курс. В нём хорошо сочетаются теория и практика.

4. Python — Гвидо ван Россум



Гвидо ван Россум

Язык Python разработал Гвидо ван Россум из Центра математики и информатики (CWI). Python — это высокоуровневый язык общего назначения. При его проектировании особое внимание уделялось хорошей читабельности кода. Его синтаксис считается чистым и выразительным.

В США Python почти заменил Java в научной среде. В частности, это выражается в том, что современные студенты начинают осваивать программирование с изучения Python, а не C или Java, как это было раньше.

Python широко используется в разных сферах, в частности, в веб-разработке и в области информационной безопасности. Этот язык применяется в таких компаниях, как Google, Yahoo и Spotify. Вот хороший учебный курс по Python.

5. JavaScript — Брендан Эйх



Брендан Эйх

Если бы вы спросили меня о том, какой язык программирования можно назвать самым популярным в последние 5-10 лет, то я сказал бы, что это JavaScript. Он, совершенно определённо, господствует в мире клиентской веб-разработки, не в последнюю очередь — за счёт существующих JavaScript-библиотек. Кроме того, он пользуется серьёзной популярностью и в серверной среде — благодаря платформе Node.js.

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

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

Если вы хотите изучить JavaScript — к вашим услугам огромное количество материалов.

6. PHP — Расмус Лердорф



Расмус Лердорф

Язык PHP (изначально он назывался Personal Home Page Tools, что переводится как «Инструменты для создания персональных веб-страниц») создал в 1995 году Расмус Лердорф. Вне зависимости от того, насколько сильно вы этот язык ненавидите, вам никуда не деться от того факта, что он довольно-таки популярен при разработке серверных частей современных веб-проектов.

В настоящее время эталонная реализация PHP разрабатывается силами The PHP Group. PHP соперничал с технологиями Microsoft Active Server Pages (ASP) и Java Server Pages (JSP) и в итоге стал гораздо более востребованным, чем они. Это — опенсорсный язык, который используется такими интернет-гигантами, как Facebook, Wikipedia, WordPress и Joomla.

Если вы хотите изучить PHP — загляните сюда.

7. Perl — Ларри Уолл



Ларри Уолл

Perl — это высокоуровневый, динамический, интерпретируемый язык программирования общего назначения. Его создал Ларри Уолл в середине 1980-х. Своей популярностью Perl обязан замечательными возможностями по обработке текстов.

Perl всё ещё является основным языком, используемым для разработки скриптов в UNIX-системах. Perl используется в сфере компьютерной графики, в приложениях для работы с базами данных, в сфере сетевого программирования. Среди компаний, которые используют этот язык, можно отметить IMDB, Amazon и Priceline. Вот хороший учебный курс по Perl.

8. Ruby — Юкихиро Мацумото



Юкихиро Мацумото

Язык Ruby был создан Юкихиро Мацумото в середине 1990-х в Японии. Программирование на Ruby — занятие увлекательное. Если вы пробовали веб-фреймворк Ruby on Rails, то вы меня поймёте.

Воздействие на Ruby оказали такие языки, как Perl, Ada, Lisp, Smalltalk. Этот язык создан в расчёте на то, чтобы писать программы на нём можно было бы быстро и приятно.

Ruby, в основном, используется при разработке веб-приложений. В частности, этот язык применяется в таких компаниях, как Twitter, Hulu и Groupon.

Вот учебный курс по Ruby.

9. Lisp — Джон Маккарти



Джон Маккарти

Язык Lisp (LISt Processing language, язык обработки списков) был разработан Джоном Маккарти. Это — один из старейших высокоуровневых языков, которые используются по сей день.

Я никогда не изучал Lisp, но говорят, что этот язык является прародителем таких языков функционального программирования, как Haskell, Erlang и Scala. Этот язык используется в самых разных сферах. В частности — в военной. По Lisp существует не так уж и много учебных курсов. Вот — один из них.

10. Pascal — Никлаус Вирт



Никлаус Вирт

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

Итоги


Я поделился с вами моим рассказом о 10 языках программирования и об их создателях. Все, о ком я рассказал, внесли серьёзный вклад в развитие IT-индустрии. Без них современный мир был бы совсем другим.

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

habr.com

как стартовать и куда двигаться? / Habr

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

Я, будучи недавно в такой же ситуации, гуглила, искала мануалов на Хабре (кое-что нашла: Десять советов начинающим программистам, Начинающему программисту про стартапы и не только…), но в итоге всё же была вынуждена обратиться за советом к одному хорошему человеку, который составил для меня вот такой план. С разрешения этого человека размещаю данный план на Хабре – вдруг он пригодится и кому-то ещё. (Тем более, что перечисленные книги относятся к «золотому фонду» литературы в данной сфере и проверены временем.)

UPD: Новичкам советую обратить внимание на комментарии — там активно и аргументированно корректируется этот план.

Этап I. Основы

Нортон «Программно-аппаратная организация IBM PC»
Эта книга, несмотря на свою давность, относятся к тем, что пока отнюдь не устарели. Как новичок подтверждаю – повествование вполне понятно и для почти полного чайника в IT.

Гук «Аппаратные средства IBM PC»
А эту книгу стоит прочитать «поверх» – она расскажет о том, как дела в данной сфере обстоят сейчас.

Этап II. Hardware

Шаг 1

Морс, Алберт «Архитектура микропроцессора 80286»
Почему тут берётся за основу именно микропроцессор 80286 – станет понятно по изучении трудов первого этапа.

Шаг 2

Гук «Аппаратные интерфейсы ПК»

Гук «Интерфейсы устройств хранения»

Этап III. Операционные системы

Шаг 1

Таненбаум «Архитектура компьютера»

Шаг 2

Колисниченко, Аллен «Linux: полное руководство»
От общей теории переходим к изучению конкретной операционной системы – на примере Linux.

Немет, Снайдер, Хейн «Руководство администратора Linux»

Этап IV. Собственно программирование

Шаг 1

Керниган, Ричи «Язык программирования С»
Почему первым для освоения выбран именно язык Си? Как мне рассказали знающие товарищи, он поможет достичь правильного «программистского мышления», чего было бы сложно достичь, начиная изучение, скажем, с Паскаля. Кроме того, язык Си по-прежнему используется в наши дни и подходит как для прикладного, так и для системного программирования.

Шаг 2

Кнут «Искусство программирования»:
Том 1. Основные алгоритмы
Том 2. Получисленные алгоритмы
Том 3. Сортировка и поиск

Бентли «Жемчужины программирования»

Зачем осваивать эти труды? Как уже отмечали на Хабре – «наверное, нигде больше, чем в айти, не изобретается такое огромное количество велосипедов». Данные книги помогут этого избежать – и попутно будут прививать умение писать не просто код, а хороший код.

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

Закономерный вопрос новичка: сколько времени займёт изучение всего этого? По прогнозам моего советчика, у человека, который может тратить на изучение программирования только вечера и выходные, на прочтение и осмысление литературы первых трёх этапов уйдёт полгода-год. На четвёртый этап тоже даётся год – чтение должно сопровождаться практикой по самостоятельному составлению программ. Как получится на самом деле – время покажет.

Буду крайне благодарна за ваши советы и уточнения.

habr.com

Какие языки программирования лучше изучать начинающим специалистам

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

История языков программирования

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

Топ языков программирования

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

Предлагаем вам список языков программирования, которые были самыми востребованными в 2018 году:

  • JavaScript
  • Java
  • C
  • C++
  • Python
  • C#
  • PHP
  • Go
  • Visual Basic .Net

Что начать изучать, чтоб не прогадать?

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

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

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

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

  • Что вам хочется делать?

Достаточно простой вопрос, с помощью которого можно понять, какой язык программирования нужен вам. Если вы хотите создавать сайты, верстать странички и видеть то, что делаете, то вам нужно начать с FrontEnd разработки. Поможет вам в этом JavaScript. Если же вы поклонники продукции Apple и Стива Джобса, хотите программировать для iOS – выбирайте Swift. Есть языки, которые заточены под определенные функции, как язык R под анализ данных.

  • Какая у вас цель обучения?

Вы пришли в IT, чтобы зарабатывать большие деньги? Или вы хотите стать вторым Марком Цукербергом, Линусом Торвальдсом или Тимом Бернерсом-Ли? Первое говорит о том, что вам понадобится изучить широкий спектр языков, нет разницы с какого начинать. А второе – то же самое, только усерднее и глубже в несколько раз.

  • Какой язык программирования самый востребованный на рынке?

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

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

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

Какой язык программирования лучше?

Спорный вопрос. Смотря, что понимать под словом «лучший». Тут можно оценивать по скорости и простоте написания или скорости выполнения кода. Если оценивать по первому критерию, то под него попадают языки парадигмы ООП (объектно-ориентированного программирования): С++, Java, Python. Конечно, это не означает, что эти языки лучшие. Поэтому оставим поиски ответа на этот вопрос вам.

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

issoft.by

Программировать с нуля. «Сейчас» — самое подходящее время, чтобы начать


(Иллюстрации к статье А.П. Ершова «Программирование — вторая грамотность»)

Стив Джобс не написал ни строчки кода, Билл Гейтс — написал. Пол Грэм — первоклассный программист, Питер Тиль — юрист по образованию, сооснователь PayPal и владелец Palantir (написал ли он что-нибудь?), а Илон Маск в детстве написал свою игру и успешно её продал.

Никита truesnow из #tceh сказал мне, что на курсе «Врубаемся в Ruby» они научат программировать любого человека, даже с нуля. Я спросил его: «А с гуманитарием справитесь?» И мы задумались, были ли случаи, когда «гуманитарий» выучил язык программирования?

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

А у меня для вас есть три истории из моей жизни. Просто три истории.

История первая — ламер

Слово «ламер» я прочитал в «Компьютерре». Там давалось такое определение: «Ламер — отнюдь не безграмотный человек, не умеющий (как бы это помягче выразиться?) программировать». Окрылённый истиной я побежал и рассказал об этом друзьям-одноклассникам, но они предпочли поиграть в футбол, вместо того чтобы освоить суперспособности. Забавно, что потом все они зарабатывали программированием деньги, а я нет. Через неделю я записался в краевую станцию юных техников (КСЮТ), где был кружок по программированию. Там для новичков давали qbasic. А боги прогали на C.

Так вот как-то один из «богов» подозвал меня к монитору и спросил: «Так сможешь?». И показал прогу, которая ждала, когда пользователь введёт в командной строке любой символ, а потом поворачивала его на 90 градусов. Я был ошеломлен.

Наверное, меня это так зацепило, что я решил — во что бы то не стало, выучить все что можно, и стать самым крутым программистом. Заряда хватило на годы. Этот случай я позабыл, прошло несколько лет, и, вспомнив о нем, я написал не больше десятка строк на basic`e минут за 20. Программа работала идеально.

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

История вторая — первый шифр

Идея пришла внезапно. Пришла так, что не смог заснуть и сел кодить. Из шифров тогда я знал только про пляшущих человечков из Шерлока Холмса (а это класс 8 или 9, занимался программированием полгода-год). Мне захотелось написать шифр, чтобы нельзя было так просто его вскрыть простым анализом.

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

Вывод. Решать интересные задачи — это круто. Но гораздо круче придумывать и находить задачи самому.

История третья — триумф BASIC`а

Я уже 2 года «занимался» программированием. И тут в школе появилась… информатика. Меня почему-то отправили в слабую группу. Как узнал позже, моё лицо не понравилось преподавательнице и она посчитала, что я тупой. Мои друзья ворвались в кабинет к директору и сказали, что я занял призовое место на краевой олимпиаде по программированию. Начались, разборки, но мне было так пофиг, что я остался в слабой группе, где учили вводить цифры в Exсel. За первую неделю я сдал всю программу и спокойно ходил играть в Diablo 2 в компьютерный клуб.

А на олимпиаде был забавный случай. Разрешённые языки — C, Pascal, а я то был прожжённым бейсичником. Выкрутился. Задачу принимали в виде exe’шника, а я подсуетился и нашёл бейсик, который кует exe’шники. Программы проходили тесты, а сами тесты принимались на серваке. Одна задача была сугубо вычислительная. Давались координаты центров и радиусы двух окружностей. Требовалось выдать взаимное расположение окружностей в текстовом виде: пересекаются, касаются, одна в другой, совпадают, и прочие.

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

Вывод. Школа — зло. Результат — круто. Нестандартное мышление — прикольно. Обходной путь есть всегда.

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

У меня есть три ответа на этот вопрос. Они зависят от горизонта планирования:

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

— Цель на год-два — это бабло. За это время можно научиться создавать ценность и работать удаленно. Или учить других. Очень многие хотят научиться программировать.

пруф

сам поискал 8 сентября:

на русском в 1000 раз меньше:


— Цель на 5-10 лет — развитие в целом. Во-первых, вы улучшите своё мышление. Во-вторых, вы сделаете неоценимый подарок детям. Они получат несколько лет форы в изучении программирования и у вас появится много чудных моментов совместного написания программ. Для полного счастья останется научиться играть в компьютерные игры, но это вы скорее всего уже умеете.
Как научиться программировать

Есть заезженная картинка на этот счёт:

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

Если готовы приступить по-взрослому, то есть множество ресурсов для самообучения. От Coursera (раз, два) до всяких %имя%academy (codeacademy, htmlacademy и пр)

Если намерения совсем серьёзные, могу посоветовать курс «Врубиться в Ruby».

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

— Никита, почему именно Ruby?
— Все просто, мы нашли очень хорошего преподавателя.

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


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


А зомбяк не хотите ли? railsforZOMBIES.org

Про Lisp

«Однако я не думаю, что смогу убедить кого-нибудь (старше 25) выучить Lisp.» Пол Грэм, «Побеждая посредственность»

Начитавшись Грэма, осваиваю Lisp.
;; Welcome to L(λ)THW!
(let ((llthw '(learn lisp the hard way)))
  (format t "~{[email protected](~A~)~^ ~}, because ~{~A~^ ~} is easier!" llthw (cddr llthw)))

;; Common Lisp: Powerful, Expressive, Programmable, General Purpose, Multi-Paradigm.


Нашёл для себя удобную браузерную обучалку Learn Lisp The Hard Way

«За те годы, что я проработал в Viaweb, я прочитал множество объявлений о найме на работу. Примерно каждый месяц появлялся новый конкурент. Первое, что я делал после того, как проверял, доступна ли онлайновая демонстрация работы их программы, — смотрел список их вакансий. Через пару лет я научился отличать опасных конкурентов от неопасных. Чем больше отдавало IT-мэйнстримом от описания требуемых кандидатур, тем менее опасна была компания. Самыми безопасными были те, кому требовались специалисты по Oracle. О таких не стоило беспокоиться. Также мы были спокойны, если требовались разработчики на C++ или Java.

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

Ещё пара советов

  • Читайте Хабр. Например, вот это статья может очень помочь тем кто уже начал свой путь — «Почему научиться программировать так чертовски тяжело?» Или история успеха — «Как я сам научился программировать за 8 недель»
  • Читайте Пола Грэма. Он вдохновит заняться программированием кого угодно. Даже меня. Даже на Lisp.
  • Найдите единомышленников
  • Найдите вдохновляющую задачу
    напримерОбщие упражнения:
    Project Euler содержит более 500 математических задач (на теорию чисел, числовых систем и пр.), которые нужно решить, используя программирование на любом языке.
    Code Abbey хранит более 200 задач по программированию. За решения 125 из них выдают сертификат, чем мотивируют многих студентов.
    Rosalind — это ещё один сайт наподобие Project Euler, который предоставляет на выбор более 200 задач по биоинформатике.
    Codingbat.com дарит упражнения по Java и Python, как для новичков, так и для продвинутых программистов.
    codegolf.stackexchange.com – сайт, на котором публикуют и обсуждают программистские головоломки.
    Ruby Quiz — серия головоломок, в которых вас просят написать короткие программы различной сложности. Исходные решения описаны на Ruby, но их можно реализовать на любом языке.

    Задачи из олимпиад по программированию:
    UVa Online Judge — коллекция из сотен задач с олимпиад по программированию, с онлайн-системой проверки решений.
    TopCoder содержит сложные задачи на алгоритмы, собранные годами с разных соревнований. Также несколько раз в месяц проводит олимпиады по программированию.
    CodeForces похож на TopCoder, но содержит больше задач на соревнованиях и несколько особых фишек, включая «виртуальные соревнования».
    Timus — то же, что и UVA. Содержит задачи с последних соревнований (мирового и регионального уровня).
    SPOJ — похож на UVA, с огромным числом языков программирования на выбор.
    USACO содержит несколько задач на алгоритмы с руководством по их решению.

    Под определённые языки:
    Для Prolog, Lisp и подобных языков посетите P-99 и L-99, наборы из 99 задач для повышения вашей эффективности в данных языках.
    Python Challenge — объединяет загадки и головоломки, которые помогут вам серьёзно прокачаться в Python.
    4Clojure — набор упражнений по программированию, специально разработанных под Clojure, Lisp-подобный язык.

  • Соревнуйтесь
  • Играйте в Игры для программистов
  • Пишите код каждый день
  • Пишите о своих успехах и находках на Хабр

P.S.
Ещё интересные статьи с Хабра на тему быть/не быть программистом и как делать шаги на пути мастерства

P.P.S.
Алан Кэй делится яркой идеей об идеях. Архитектура, математика, обучение, программирование и много ещё интересного.

habr.com