Содержание

Обучение программированию онлайн — а все ли так просто как кажется? / Habr

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

Так как цена был подъемная (10 000 р. за основы языка — java core) и в QA знание языка программирования является жирным плюсом — то я, недолго раздумывая, согласился.
Постараюсь кратко описать плюсы, минусы, а также свои впечатления от данного мероприятия.

Начну с плюсов


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

Для участников курсов весь вспомогательный материал расшарен и находится в открытом доступе.Все видеозаписи занятий выкладывались на google диск, а книги и доп. материалы можно было найти на гит лаб. Там же задавалась домашка. Для программирования использовали IntelliJ IDEA, домашку для проверки отправляли в репозиторий на Bitbacket через GIT (да-да, с ним тоже обучали работать). Несомненный плюс онлайна заключается в том, что все необходимое для занятий расположено на трех соседних вкладках браузера.

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

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


4) План занятий ( опять же как + так и — ) занятия проводились 2 раза в неделю преимущественно в будни, но иногда переносилось на выходные. Начинались около 8-9 часов вечера и длились 2-3 часа. Каждое занятие стартовало с повторения материала и разбора сложных задач. Так что если укладываться в график занятий и стараться вовремя сдавать домашку то можно добиться неплохих результатов. О минусах ниже.

5) Цена — 10 000р. за 3 месячный курс изучения основ джава, а также периодические консультаций с личным наставником — очень демократично как по мне(в данный момент стоимость не знаю, может и поднялась).

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

Теперь минусы


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

2) Расписание занятий. Занятия начинались часов в 8-9 вечера, так чтобы все успели прийти с работы и что то перекусить. Но я максимум что успевал сделать — это прийти с работы к началу занятий и разогреть еду. Ел обычно уже в процессе, что не способствовало усвоению материала, да и пищи тоже. Так что как по мне одно занятия надо определенно переносить на выходные.
Опять же моё видение. После 23-00 мой мозг наотрез отказывается воспринимать новую информацию и хочет спать. А ситуация когда занятие доходило до 12 ночи были очень частыми. Это негативно отражалось на восприятии материала.

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

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

4) Перспективы. Опять же все очень индивидуально. Я ушел через полтора месяца. Совсем не успевал учить материал и к 10 часам вечера уже во всю храпел на занятиях. Так что, если вы располагайте достаточным количеством времени (требует около 10-20 часов в неделю), можете воспринимать материал по скайпу и хотите освоить профессию разработчика, затратив на это минимально необходимое количество сил и времени – тогда этот вариант для вас. Но если бы все было так просто, то разработчиком становился каждый второй…дерзайте!

Спасибо за внимание, всем добра!

habr.com

Go как язык для обучения программированию / Habr

tl;dr: Go достаточно многословный и строгий язык программирования с очень предсказуемой и стремительной кривой обучения, что делает его крайне удачной технологией для обучения программированию новоприбывших!

Я только приехал из штатов, после Google Code-In 2014 Grand Prize Trip, отдохнувший и веселый. Какое-то время думал написать отчет о том, чем призеры там занимались, как нас приняли в Mountain View и обо всем этом, но в какой-то момент понял, что все это совершенно бесполезно. Совсем недавно я по воле случая должен был помочь своему товарищу с домашкой по информатике (там было что-то вроде selection sort). Реализация требовалась на паскале, а я паскаль знаю очень плохо, как впрочем и другие неактуальные, по большей мере, языки программирования, вроде Ada.

В меня ударила молния и укусил гофер, после чего мое тело мутировало в какую-то кунг фу Go хренотень. Иными словами, я задумался о возможном потенциале моего любимчика среди новых технологий, Go, в качестве языка для обучения программированию новоприбывших (читай: школьников). Мне кажется, у Go есть все, что в принципе может быть нужно подобной программе и даже чуточку больше (например, в школе могли бы затрагивать тему параллельного, ни в коем случае не concurrent, программирования, которую не затрагивают, просто потому что FPS вообще не умеет гонять два куска кода одновременно). Под катом, собственно, мои мысли на этот счет. Кстати, пользуясь случаем, хочу передать привет divan0! Большое спасибо за твою просветительскую деятельность в тематическом хабе: Go действительно нуждается в огласке, ведь много людей до сих пор считают, что это какая-то страшная поделка уровня Plan9 из 80-х и к тому же, без обобщенного программирования (в каждой шутке есть доля шутки), а ты рассказываешь людям очень правильные вещи на понятном для них языке! Никакого дисклаймера не будет, но я настоятельно не рекоммендую воспринимать содержимое статьи абсолютно серьезно, ведь я человек, у которого есть целых
два
гофера: синий и розовый!

Довод №1. Многословность и строгость

Меня безумно раздражает слово «многословность», но если я уже взялся писать статью, то надо переводить verbose на русский. Почему многословность это хорошо? Многословность упрощает понимание кода на экране, так как при недостаточной многословности у читающего могут возникать вопросы уровня «А что эта штука ваще делает?». Можно долго упираться в крайности типа Haskell vs Cobol, но суть и так понятна. Почему многословность это плохо? Адепты религии
DRY
неоднократно напоминают мне о том, что в Go нет генериков (обобщенное программирование). Вместо генериков предлагают бутсрапинг или кодогенерацию. Тем не менее, архитектура языка программирования это всегда определенные сделки: ручное управление памятью против сборщика мусора, генерики против бутстрапинга, динамическая типизация против статической, это можно продолжать вечно.

Что касается строгости, то тут Go меня очень радует. Компилятор никогда не идет на уступки с программистом и любая, казалось бы, мелочь, которая в компиляторах других ЯП выльется в неприметный warning, тут — будет ошибкой компиляции. Не играешь по правилам спецификации языка — не получишь бинарник, все просто. Компилятор до того придирчив, что валит компиляцию при виде неиспользованного модуля. По-моему, это просто обосраться, как волшебно, особенно если тебе 15 лет, ты только пришел в программирование и хочешь сделать все «по-быстрее». Я прямо сплю и вижу школьника за компьютером, который пытается скомпилировать программу, но терпит фиаско; затем, проговаривая в голове все маты, которые он только знает, возвращается в редактор, чтобы убрать modulename из include-списка. Жестко? Еще бы! Но знаете, такая жесткость, она воспитывает!

Довод №2. Потрясная кривая обучения

В архитектуру Go заложена простота. Пайк где-то говорил, я уже не помню где, что они действительно вырезали все, что можно было вырезать. Ради этой простоты, в Go нету трех типов циклов (C-way), а всего один (и это без потери выразительности!), в Go нету продвинутой системы типов (но есть волшебные интерфейсы!) и в таком духе. Я уверен и даже готов поставить на это свои тапки (дорогие тапки, к слову, заграничные), что обычный такой школьник не станет читать спецификацию языка, так что не буду упоминать о ней. Так или иначе, язык, ввиду своей простоты и умеренной многословности, обеспечивает стремительную и предсказуемую кривую обучения. Но хотя бы факт того, что память-то managed, уже снимает кучу проблем уровня «так это что получается, вот эта функция у меня протекает? не может быть!».

О том, что опытный программист полностью осваивает Go, со всеми его подводными камнями, за несколько выходных, уже неоднократно говорили, но это в контексте статьи не имеет смысла. Я не занимался обучением детишек на Go, так что суровых чисел у меня нет, но я предлагаю пораскинуть извилинами. Какие три вещи забирают, на этапе обучения, больше всего времени? Чемпион, это, очевидно, ручное управление памятью и мистер «я умудрился посадить сборщик мусора на половину рантайма» в языках с managed памятью. Второе место, безусловно, занимает тематика ссылки-указатели в разных контекстах (косяки уровня «присвоил не по ссылке, а по значению»). Замыкает тройку мистер ООП, а точнее проблемы, которые возникают в реализациях ООП: «так он приватный или нет?», «деструктор мне таки делать виртуальным?», «а как наследовать два класса одновременно???» и подобные.

В Go память управляется автоматически, а значит, накосячить тут сложно. Существует правило, которое позволяет четко определить (в большинстве случаев), передавать переменную по значению или по ссылке: «Если ты собираешься передать право владения над переменной, то надо передавать по ссылке, иначе — по значению. Стандартный набор проблем с ООП не появится, потому что Go прибегнул к очень красивым решениям касательно объектно-ориентированного программирования. А именно, Pike & Co. выпилили классы, всякое „ambiguous“ наследование и прочую инкапсуляцию, предлагая структуры, интерфесы, embedding. Проблему инкапсуляции решили до безобразия интересно: все поля структуры, которые начинаются с символа верхнего регистра идут наружу, а все остальное остается внутри.

Я обрисовал картину, а выводы уже делать вам. Мне кажется, что все очень даже волшебно.

Довод №3. Многопоточное программирование

Я считаю, что детям уже в школе очень важно давать навыки работы с многопоточными приложениями. Знаете ли, мало прикольного в том, что студент, опыт которого так или иначе сводится к проектам уровня laba3, попадает в реальный проект, где одновременно выполняется много кода, все ресурсы надо закрывать на мьютексы, к тому же это все надо еще покрыть тестами… Компьютеры уже давно могут параллельно выполнять несколько задач (parallel != concurrent), за счет архитектуры процессоров и этим нужно пользоваться. Я считаю, что рядом с некоторыми классическими реализациями некоторых алгоритмов надо также давать параллельные их реализации. Того же selection sort, например.

Go избавился от злых и страшных потоков, на замену которым пришли горутины. Я думаю, что работать с корутинами (=задачами), на уровне понимания, куда легче, чем с потоками. Канал, казалось бы, просто очередь, но плюхи на уровне синтаксиса делают работу с ним интуитивно понятнее и куда очевиднее. Как бы долго я не нахваливал корутины, каналы и select, так или иначе мы все равно упираемся в мьютексы. Тем не менее, я думаю, что это все равно лучше, чем то, что мы видим сегодня в других языках, особенно говоря в контексте обучения.

Немного о Python

Какое-то время пайтон считается очень хорошим языком для обучения. Аргументы: интерпретируется, типизация, curly brackets — gotta go! Я не хочу лишний раз поднимать срач, но могу сказать, что по части кривой обучения, Python очень подлая штука. А еще у меня есть мнение, что программист начинает ценить достоинства и уважать недостатки динамической типизации только после определенного времени проведенного со статической типизацией. Я не считаю, что новоприбывшему стоит велосипедить-куралесить с динамическими типами, пока он толком не поймет, что такое тип вообще. К сожалению, для талантливого программиста Алеши из 8А это не так очевидно.
Конец

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

habr.com

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

Почему так важен план обучения

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

 

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

 

 

И вот новичок делает запрос в гугл “Курсы программирования” и перед ним открывается несколько десятков тысяч результатов с курсами.

 

Курсов программирования по созданию сайтов существует огромное количество: Курсы PHP, курсы HTML и CSS, курсы по Javascript, курсы по Yii2, курсы по MySQL и многие другие.

 

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

 

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

 

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

 

Кто-то не зная основ объектно-ориентированного программирования, сразу скачивает курсы по Паттернам проектирования или не зная основы Javascript, пытается изучать курсы по Angular JS.

 

А иногда, не понимая что, Javascript и Java — это совсем разные языки и имеют разные предназначения, начинает смотреть курсы онлайн по Java. И на этом этапе у них совсем руки опускаются и они оставляют идею стать программистом или откладывают ее в “долгий” ящик, думая что научиться создавать веб-сайты для них слишком сложно.

 

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

 

 

Шесть шагов как стать веб-программистом

 

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

 

Шаг первый. Научитесь верстать.

 

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

 

С помощью этой технологии, вы научитесь из обычной картинки формата JPEG или PSD макета Photoshop программировать внешний вид сайта, чтобы верстка сайта корректно открывалась в браузере.

 

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

 

Обязательно нужно тренироваться. С помощью HTML и CSS попробуйте создать 10 — 20 страниц вашего будущего веб-сайта.

 

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

 

Вы можете скачать курс по технологиям HTML и CSS в интернете или вы можете посмотреть наш курс бесплатно онлайн в личном кабинете

 

 

Шаг второй. Фреймворк Bootstrap.

 

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

 

Изучайте Bootstrap только после того, как в полной мере освоили предыдущий шаг HTML и CSS.

 

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

 

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

Официальную документацию для самостоятельного изучения Bootstrap вы можете найти по адресу http://getbootstrap.com/ или можете смотреть наш курс по данному фреймворку в FructCode.

 

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

 

 

Шаг третий. Программирование.

 

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

 

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

 

Изучение PHP начните с процедурного процедурного подхода в программировании. Изучите основные понятия любого высокоуровневого языка программирования: Переменные, Типы переменных, Массивы, Циклы, Функции и другое. Именно в такой последовательности.

 

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

 

Когда разберетесь более-менее с процедурным программированием на PHP, изучайте Объектно-ориентированное программирование (ООП).

 

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

 

Системы написанные с помощью объектно-ориентированного программирования можно масштабировать и расширять до гигантских систем.

 

Когда изучите основы ООП на языке PHP, перепишите созданные ваши скрипты на процедурном подходе к программированию, в объектно-ориентированном стиле.

 

 

Шаг четвертый. База данных MySQL и CRUD.

 

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

 

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

 

С помощью языка запросов SQL, вы сможете “создавать”, “получать”, “обновлять”, “удалять” информацию из базы данных. Так вы перейдете к CRUD. Эти четыре буквы с английского языка расшифровываются как CREATE(создавать) — READ(читать) — UPDATE(обновлять) — DELETE(удалять).

 

Основы по языку запросов и администрированию MYSQL вы можете прочитать здесь

 

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

 

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

 

 

 

Полный и интерактивный курс по PHP и MySQL вы можете пройти здесь

 

Шаг пятый. MVC фреймворк.

 

Изучите простой php фреймворк, например Codeigniter. На этом шаге вам нужно будет перенести верстку вашего сайта, созданную на предыдущих этапах, в фреймворк. Основная задача — это понять паттерн MVC. Расшифровывается MVC как MODEL(модель) — VIEW(вид) — CONTROLLER(контроллер).

 

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

 

Создайте на простом PHP фреймворке и на паттерне MVC, сначала CRUD приложение, а затем и ваш первый веб-сайт.

 

Курс по фреймворку CodeIgniter доступен на сайте FructCode

 

 

После этого, создайте еще 3 — 5 веб-сайтов для себя, друзей, коллег, родственников. Это прибавит вам опыта и эти сайты пригодятся вам в качестве портфолио, когда вы решите, что готовы попробовать создавать сайты за деньги.

 

 

Шаг шестой. Изучение других технологий.

 

После того, как вы получили начальный опыт в программировании и возможно стали уже получать первые деньги за создание веб-сайтов, изучайте Composer, GIT, основы Linux, Javascript.

 

Затем переходите к более сложные фреймворки, такие как Yii2 или Laravel.

 

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

 

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

 

Рассчитывайте прохождение данных шагов минимум на 6 — 12 месяцев.

 

По всем технологиям вы можете гуглить, например: Что такое MVC php.

 

 

Заключение

 

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

 

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

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

 

И здесь вам поможет наставник.

 

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

 

Вы разберетесь в терминологиях ООП, такие как объекты, классы, инкапсуляция, полиморфизм, создадите профессиональный веб-сайт КИНОМОНСТЕР и в момент, когда вы захотите все бросить, получите “волшебный мотивационный пинок” 🙂

 

И если вы будете выполнять все домашние задания и проходить тестирования, результат вас точно не разочарует!





Читайте также




Все материалы с сайта wh-db.com и ru.wh-db.com защищены авторским правом. Копирование, публикация, продажа и распространение материала строго запрещены.

ru.wh-db.com

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

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

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

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

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

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

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

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

  1. Декстопные программы. Этот тип ПО предназначен для персональных компьютеров (разные плееры, конвертеры, текстовые процессоры и так далее).
  2. Антивирусное программное обеспечение (ПО для устранения вирусов и шпионских программ). Разработчики антивирусов должны иметь общие представления о криптографии и различных алгоритмах шифрования данных.
  3. Приложения для смартфонов и планшетов. Наиболее востребованное ответвление современного программирования. Для разных операционных систем требуется знание своего языка. Статьи для разработчиков под IOS, WinPhone и Android подскажут новичку, с чего начать изучать программирование с нуля для смартфонов и планшетов.
  4. Игровое ПО для персональных компьютеров. Такие игры, как правило, имеют заранее прописанный сценарий, который пользователь должен пройти. Для написания нужно иметь познания в области построения графических трехмерных элементов.
  5. Онлайн-игры. Довольно популярные сегодня типы ПО. Соответственно, разработчики также востребованы на рынке труда.
  6. Работа с веб-технологиями. Создание сайтов. Web-программирование с нуля освоить достаточно просто, ведь логика написания сайтов и скриптов намного легче, чем создание ПО со сложным алгоритмом работы.

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

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

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

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

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

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

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

Язык Java

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

  1. Изучите базовые элементы кода (объявление переменных, условия, циклы и так далее). Познание этих основ кода поможет писать сложную программную логику.
  2. Регулярно посещайте такие онлайн-сервисы, как HourOfCode. Они помогают визуализировать написанный код, что поможет лучше понимать процесс разработки.
  3. Будьте в курсе последних версий Java и старайтесь использовать только самые новые фреймворки.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Итог

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

fb.ru

С какого языка изучать программирование? | Обучение

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

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

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

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

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

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

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

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

Вывод: начинать изучение надо с TurboBASIC или TurboPASCAL. Подчеркиваю, что с турбо-вариантов. Изучение начинать после знакомства с алгеброй. Как вариант допустимо изучение программирования до знакомства с алгеброй, но тогда на примере языка программирования BASIC вводить алгебраические понятия. Но это в том случае, если идет индивидуальное обучение.

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

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

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

shkolazhizni.ru

Языки программирования в школе — Викиучебник

Материал из Викиучебника — открытых книг для открытого мира

Исходный вариант статьи (А. В. Ворожцов, Языки программирования в школе) опубликован в журнале «Потенциал».

Уроки по информатике в школе и вузе: какой язык программирования выбрать? Насколько глубоко его изучать и нужно ли вообще в школе изучать языки программирования? Есть мнение, что учащихся нужно знакомить с различными языками и различными стилями программирования. Видимо, наиболее подходящими учебными языками программирования сегодня являются Форт, Ruby, Python, Си, Паскаль и Java.

Первым кодировки на бумаге придумал Паскаль. В одной строке умещалось от 0 до 255 символов. Первым языком электрического типа считается Планкакюль. Его изобретателем считается немец Конрад Цузе. Элементы ячейки располагались в две строки. В первой писались натуральные, а во второй аргументы. Один из 4ех его компьютеров был частично из консервных банок. Использовалась двуличная система в одной ячейке. Один элемент заряжен положительно, а другой отрицательно. Мнения о том, какой язык лучше преподавать в школе, разнятся: от того, что программирование изучать не нужно, а следует просто поднимать компьютерную грамотность и осваивать офисные программы (как на Западе), до того, что нужно изучать операционные системы и несколько языков программирования различных уровней абстракции и с различными парадигмами. Это крайние случаи, но золотую середину найти непросто. В первую очередь, нам нужно определить цель. Научить школьников логически и алгоритмически мыслить? Познакомить с компьютерами на бытовом уровне, чтобы школьники умели пользоваться интернетом, электронной почтой и текстовыми редакторами? Заложить базовые знания, необходимые для будущих инженеров, математиков, физиков и специалистов по информационным технологиям? А может, нам нужно каждого школьника познакомить с программированием как явлением, чтобы он представлял потенц

ru.wikibooks.org

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

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

Евгений Охотников, автор блога Размышлизмы eao197.

Для ответа на этот вопрос нужно сперва ответить еще на один: а для чего нужно учить язык программирования? Если для того, чтобы начать сразу зарабатывать программированием, то здесь нужно идти от конъюнктуры: посмотреть по сторонам, определить куда проще всего устроиться junior-программистом и взяться за изучение именно этого языка (выбор тут будет из чего-то вроде Java, PHP, JavaScript и т.д.).

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

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

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

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

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

Это работало 25 лет назад. Надеюсь, если найти адекватную замену для Бейсика (например, Python или Ruby, но без погружения в ООП), то эта же цепочка будет работать и сейчас. Она должным образом отформатирует мозги новичка и станет хорошим тестом на профпригодность. После чего можно будет изучать все, что захочется — хоть Java, хоть JavaScript, хоть C++, хоть Prolog, хоть Haskell.

 

Никита Прокопов, tonsky.livejournal.com.

JavaScript:

  • Минималистичный — самое необходимое можно изучить очень быстро;
  • Почти не парит мозг инфраструктурой. IDE и среда исполнения это браузер, компиляции и сборки нет, зависимости можно подключить напрямую из сети;
  • Динамический, позволяет интерактивную разработку. Когда не знаешь как правильно писать, важно как можно быстрее попробовать возможные варианты;
  • Сразу можно делать все интересные вещи: графику, UI, видео, аудио, анимации, сеть;
  • С прицелом под любое возможное устройство;
  • Бесконечное количество справочных ресурсов;

 

Reangd, автор блога Программист — это звучит гордо.

Начинать нужно с чего-то такого, что не отобьет на первых парах желание. Язык должен быть таким, чтобы сел — перепечатал из книги строчку и она уже что-то делает. Чтобы все было понятно, без магических заклинаний вроде public static void main, когда для понимания каждого слова приходиться читать по паре глав. Чтобы установка, компиляция и запуск были простые, без необходимости изучать для этого новый язык вроде make-а. Чтобы писать на нем можно было везде, вплоть до телефонов, а не иметь прибитый гвоздями к одной платформе язык. Чтобы было большое комьюнити и куча учебных материалов на всех языках. Чтобы можно было и ООП пописать и функциональщину потрогать. Чтобы учить было легко и при написании не приходилось сильно задумываться как ту или иную вещь сделать, но при этом достаточно строгий, не позволяющий строки в числа неявно конвертировать. Пожалуй все, хочется только добавить, что задерживаться на нем не нужно, как только поняли, что программирование нравится обязательно должен последовать 2, 3, 4 языки.

Ах да, про сам язык то забыл сказать — конечно же Python.

 

Анастасия Казакова (@anastasiak2512), C/C++ разработчик, менеджер по продуктовому маркетингу CLion, кросс-платформенной среды для разработки на C и C++ от компании JetBrains.

Хотя для меня первым языком программирования был C, я бы не советовала начинать с него. Мне сейчас кажется, что самый правильный вариант, это какой-нибудь функциональный язык. Возьмите Lisp, Scala, OCaml, Haskell. Почему? Чтобы ответить, сначала скажу, что программирование — это алгоритмы, и начинать надо с них. Но чтобы изучать алгоритмы и их практическое применение, нужен инструмент для работы с ними, язык. Почему же именно функциональный?

Во-первых, отсутствие лишнего. Программа на функциональном языке будет содержать только то, что нужно для выражения идеи/алгоритма. Это краткость чрезвычайно важна, так как позволяет отделить мух от котлет. Язык — это инструмент для выражения алгоритма в терминах, понятных машине. Чем больше «машинных» деталей, тем поначалу хуже. Конечно, со временем, станет интересно копаться в деталях реализации того или иного объекта, структуры данных, организации той или иной области памяти. Тут всегда можно будет открыть C и начать изучать адресную арифметику. Но начинать с этого, это все равно что изучать инструмент вперед цели, для которой он служит.

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

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

 

Сергей Зефиров, thesz.livejournal.com.

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

Поэтому это какой-либо Лисп или какой-либо типизированый ФП (Хаскель, Агда, Скала).

 

Андрей Карпов, технический директор ООО «СиПроВер», один из создателей анализатора PVS-Studio (публикации на Хабрахабр).

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

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

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

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

 

Роман Душкин, автор множества книг и организатор конкурсов по функциональному программированию.

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

Я бы начал с электронных таблиц. MS Excel или Google Spreadsheet — это то, что требуется. Как сказал кто-то из корифеев ФП, MS Excel — это наиболее широко используемая система функционального программирования. Действительно, если поднатореть в формулах, то можно делать много забавных и очень нетривиальных вещей, даже не влезая в дебри VBA (а вот этого точно не нужно, я категорически против VBA). Современные электронные таблицы предлагают вполне серьезный инструментарий по обработке данных, их поиску, выборке и другим операциям. Учитывая то, что ячейки и формулы в электронных таблицах составляют взаимосвязанные цепочки чистых вычислений без побочных эффектов — это то, что надо для первичного вхождения в парадигму чистого ФП. При помощи функций электронных таблиц можно эмулировать практически все чистые (не монадические) функции первого порядка модуля Prelude языка Хаскелл. Можно, при умении и расторопности, эмулировать и функции высших порядков.

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

 

Антон Лебедевич, автор блога о мониторинге и статистике mabrek.github.io.

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

 

Alex Ott, alexott.net.

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

  • Обучение алгоритмическому мышлению и организации программ. Для многих людей, не являющихся программистами, это часто сложная проблема. В этой части необходимо показать, как создаются программы, и из каких кусочков они создаются (циклы, ветвление, присваивание). Это самое правильное место, где можно заложить правильный стиль написания программ, например, объяснить опасность присваиваний глобальным переменным в многопоточных программах и т.д. Для этой части необходим очень простой язык, не перегруженный синтаксисом и машинно-зависимыми вещами. Тут хорошо подходит SICP + Schema, поскольку синтаксис максимально прост, и не зависит от компьютера (например, можно работать с любыми числами, не опасаясь переполнений и т.п.).
  • Обучение основам компьютерной архитектуры и т.п. Это обзорная часть для всех — как представляются числа, как устроена память, функции операционной системы, и т.п., так что люди смогут рассуждать о времени выполнении, и почему, например, не стоит каждый раз читать данные из файла в цикле. Тут уже можно взять Python или что-то подобное…
  • Обзор алгоритмов и т.п. Объяснение сложности алгоритмов в применении к конкретному языку, например, когда стоит использовать список vs array, какая сложность стандартных функций и т.п.
  • Обучение решению класса задач. Тут уже сложнее, поскольку у каждого своя специфика, зависящая от требований — наличия библиотек, необходимости итеративной разработки и т.п.. Для «ученых» это может быть Python/R, для big data — Java 8 или Scala, для около-железячников, особого выбора кроме C нет, и т.д.

 

Андрей Листочкин (@listochkin), программирует на JavaScript, Rust, Ruby, Java и многих других языках. В институте учил Pascal, Delphi, SQL, Prolog, Lisp, ассемблер, из всего этого больше всего понравился Prolog. Помогает вести одно из крупнейших чат-сообществ разработчиков в Украине и Восточной Европе Dev-UA, организует Rust и JS митапы, выступает на конференциях и иногда помогает вести подкаст DevZen.

У меня два ответа на этот вопрос.

1. Тот, какой нужен. Скажем, вам 12 лет, вы любите Майнкрафт и хотите написать для него мод. Моды под Майнкрафт пишутся на Java, поэтому учите Java. Или, например, вам 35 и вы хотите что-то такое особенное посчитать в Google Spreadsheets, а там сложные формулы пишутся на JavaScript, поэтому учите JavaScript.

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

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

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

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

В то же время для Haskell есть изумительная книга Learn You a Haskell for Great Good!, а для Мака — прекрасный комбайн, чтобы поставить и начать писать код: Haskell for Mac. Это редактор с подсветкой синтаксиса, подсказками, визуализацией данных и REPL. То, что доктор прописал, и стоит совсем недорого.

 

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

Дополнение: Десять мнений: что отпугивает от работодателя на интервью

Метки: Десять мнений, Языки программирования.

eax.me