С чего начать, чтобы стать айтишником, если вы далеки от IT
В статье мы расскажем, какие шаги предпринять, с чего начать и как построить свое обучение, чтобы стать айтишником, если вы далеки от ИТ.
В первую очередь, вам нужно решить, почему вы идете в ИТ. Вам нравится делать сайты, создавать программы для операционных систем, продумывать дизайн или тестировать? Это решение станет отправной точкой в процессе обучения.
В зависимости от выбора, вы сможете определить для себя программу обучения, подготовить план и подобрать первые источники: книги, сайты или онлайн-курсы.
Если ваших знаний языка не хватает на свободное чтение, начать следует именно с него. Английский будет нужен не только для коммуникаций, вам придется много читать и искать в интернете на английском. Это может быть как техническая документация или ответ на StackOverflow, так и просто интересная тематическая статья на Medium.
Это второй важнейший навык, после знания иностранного языка, который жизненно необходим при обучении. Важно научится правильно формировать запросы и отсеивать ненужную информацию еще на странице выдачи.
Для начала узнайте, чем отличается бит от байта, изучите базовые термины и концепции информатики, узнайте про условия, циклы и прерывания. Как работает процессор, зачем нужен веб-сервер и что за ascii – все это нужно знать, чтобы начать углубляться в ту область, которая вам интересна.
Структуры данных и алгоритмы – фундаментальные для разработки и ИТ понятия. Вам не расскажут о них как следует на прикладных курсах по программированию, поэтому изучите эти вещи самостоятельно.
Для начала разберитесь с терминами стек, дерево, очередь, хеш. Для понимания алгоритмов необязательно зарываться в теорию графов, но как минимум понять quicksort – должно быть вашей целью.
Ознакомиться с концепцией объектно-ориентированного программирования будет полезно независимо от того, какой язык вы выбрали и как собираетесь его применять. ООП – один из самых популярных стилей разработки, поэтому вам нужно не только знать определения основных концепций (наследование, инкапсуляция, полиморфизм), но и понимать, как они работают, уметь реализовать их в коде программы.
Если вы уверенно овладели синтаксисом интересующего вас языка программирования, стоит узнать как он работает с разными типами баз данных, а заодно узнать о видах БД и их различиях.
Даже если ваш язык обычно не взаимодействует с базой данных напрямую (например, JavaScript), вам нужно знать что происходит в этой области разработки: вы лучше будете понимать, как работает программа в целом.
Переучиться и сменить профессию можно всегда и в любом возрасте. Важно лишь помнить, что это очень долгий и сложный процесс. И чем позднее вы за это возьметесь, тем сложнее вам будет.
Чтобы стать айтишником, нужно настроить себя на долгий процесс изучения азов и непрерывное самообучение в течении всей карьеры. Запаситесь терпением, ведь между началом обучения и первой работой может пройти много месяцев и даже лет.
proglib.io
Обучение программированию с нуля: с чего начать изучение в домашних условиях
Каждый раз, с трудом преодолевая жизненные преграды, хочется взять и перекроить этот мир под себя. К сожалению, мы не рождены творцами этой вселенной. Тем, кто хочет удовлетворить свои амбиции создателя, остается лишь виртуальный мир.
Хотя для творения здесь понадобится не столько волшебство и знание рун, сколько знание основ программирования. Поэтому для всех начинающих творцов виртуальной реальности мы поведаем о том, как научиться программировать.
Как бы ни хотелось этого признавать, но в реальности программирование является не таким уж волшебным делом. Создание кода порой можно сравнить с хождением босыми ногами по морскому дну, устланному острыми каменными обломками.
Чтобы стать программистом, нужно быть не только умным, но еще терпеливым и настырным. Обучение программированию всегда сопровождается головой болью, красными от недосыпания глазами и отрешенным взглядом. Именно по нему можно легко узнать программиста.
Многие начинающие обучение считают написание кода чуть ли не самой романтической профессией. Особенно увеличилось количество желающих познать программирование после просмотра фильма «Матрица». Именно главный герой этой картины Нео подтолкнул многих к становлению на путь постижения программных наук:
Но большая часть начавших изучение бросают его уже через несколько недель. И основной причиной этого является неправильно выбранное направление обучения, методика или даже учебник по программированию.
После развала СССР все отечественные ВУЗы долгое время даже и не пытались перекроить свою систему обучения под потребности современного рынка. Не являлись исключением из этого правила и технические ВУЗы.
Программирования как отдельной отрасли и специализации не существовало как таковой. Его основы преподавались лишь как привязка к другим инженерным дисциплинам. И даже те крохи знаний, которые давались студентам в этой области, не соответствовали современным стандартам и утратили свою актуальность еще 20-30 лет назад.
В странах бывшего СССР основным языком программирования, преподаваемым в технических ВУЗах, был Бейсик.
Ситуация кардинально не изменилась и через 10 лет. Лишь некоторые учебные заведения, учуяв веяния нового времени, в начале двухтысячных года начали перекраивать свое обучение под мировые стандарты. И только с этого момента программирование стало восприниматься как отдельная профессия и специализация обучения:
В это же время стали появляться различные специализированные коммерческие курсы и учебные заведения. Но качество преподавания и даваемых в них знаний находились на крайне низком уровне. Не хватало грамотных профессионалов, способных обучить новичков не только теоретическим знаниям, но и практическим навыкам программирования.
А это в профессии программиста является наиболее важным аспектом. Поэтому большинство из сегодняшних гуру российской IT-индустрии начинали свое обучение программированию с нуля самостоятельно.
В некоторой мере такая тенденция сохраняется и по сей день. Хотя в наше время количество профессионалов, занимающихся преподаванием, заметно возросло.
Постижение программных наук характеризуется не только тяжелым обучением, но и его началом. Новичку порой трудно не только начать самостоятельное обучение, но и определиться с координатами отправной точки процесса. Поэтому мы постараемся помочь вам обойти все эти трудности:
Прежде чем ломать зубы об гранит науки, следует определиться, с чего начать изучение программирования. На первых этапах очень трудно определиться со специализацией. Поэтому начнем с подбора первого языка.
Чаще всего выбор падает на язык программирования C (си). Именно с него большинство новичков во всем мире начинают свое обучение. На основе C было создана основная часть программных языков, и во многом они наследуют его структуру и синтаксис.
Изучая C, вы постигаете основы не одного языка программирования, а сразу нескольких.
Рассмотрим особенности этого языка, делающего его оптимальным для изучения:
- Простая для понимания основа – часть встроенных возможностей языка для простоты вынесена в отдельно подключаемые библиотеки. К таким элементам относится большая часть математических функций и методов для работы с файловой системой;
- Оптимально подогнанная система типов – благодаря простому набору типов данных и строгой типизации уменьшается риск допущения ошибок в процессе написания программного кода;
- Направленность C на процедурный тип программирования, при котором соблюдается четкая иерархия всех элементов кода;
- Доступ к памяти машины с помощью указателей;
- Минимальное количество поддерживаемых ключевых слов;
- Поддержка области действия имен;
- Поддержка пользовательских типов данных (объединения и структуры).
Проще говоря, C – это то, с чего следует начинать новичку перед тем, как научиться программированию на других языках.
Для обучения программированию недостаточно одного лишь желания и наличия компьютера с выходом в интернет. Для написания программ на C вам потребуется специализированное программное обеспечение – компилятор.
Компилятор – специальная программа, переводящая программный код в форму, понятную для компьютера.
Вот несколько специализированных компиляторов с поддержкой языка C:
- Microsoft Visual Studio – профессиональный инструмент, поддерживающий множество языков, в том числе и несколько серверных. Подойдет для новичков, если брать его «на вырост»:
- Borland C++ — бесплатный компилятор, идеально подходящий для начинающего обучение. В отличие от предыдущего инструмента, отличается ясным и понятным интерфейсом. Поэтому его освоение не вызовет особых трудностей даже при самостоятельном освоении азов программирования:
- Code::Blocks – бесплатная среда разработки, поддерживающая написание кода на нескольких языках. Средний по сложности освоения вариант:
Что касается специализированной литературы, то советовать книги определенных авторов мы не будем. Тут, как говорится, выбирайте, что душе угодно. Потому что в большинстве случаев подбор самоучителя по программированию – это индивидуальный процесс. Используйте тот источник, который больше подходит именно для вас.
Да и в интернете можно найти очень много информации. Например, на нашем сайте специализированной литературе по IT тематике посвящен целый раздел.
После освоения основ программирования у многих сразу появится вопрос, куда двигаться дальше. Уже на этом этапе обучения следует задумываться о выборе основной специализации в области программирования. Вот те, которые больше всего востребованы на современном рынке:
- Веб-программирование – здесь понадобятся знания PHP, CSS и HTML;
- Разработка приложений под мобильную операционную систему Android – данная платформа построена на основе Java. Поэтому потребуется знание основ этого языка;
- C# (си sharp) – дальний потомок C. На основе C# построена веб-технология ASP.net от Microsoft.
И последний совет всем начинающим. Перед тем, как приступить к обучению программированию с нуля, следует запастить терпением. А также: таблетками от головной боли, кофе, чаем и побрить череп наголо. Потому что во время постижения программных наук, обучающиеся часто вырывают волосы со своей головы вместе с корнем. Удачного старта!
www.internet-technologies.ru
как стартовать и куда двигаться? / 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, вроде бы понравилось. И последний вариант — хобби, которое переросло в работу.
Если с вами ничего из вышеперечисленного не произошло, значит, у вас есть выбор из четырёх вариантов:
- Самообразование. Этот вариант можно использовать как самостоятельно, так и в паре с другими методами. В интернете полно сайтов, книг и приложений, которые помогают изучать различные языки программирования и технологии. Но это самый тяжёлый путь для начинающих.
- Университет. Если вы оканчиваете школу и хотите быть программистом, тогда идите в университет. Если не за знаниями, тогда за корочкой. Она может послужить бонусом при устройстве на работу. Хотя и какие-то знания вы тоже получите. Но не забывайте заниматься и самообучением. К выбору вуза стоит подойти очень ответственно. Внимательно изучите программы обучения и выбирайте лучшие технические вузы.
- Ментор. Будет очень неплохо, если вы найдёте человека, который согласится помочь вам и направит вас в правильную сторону. Он подскажет подходящие книги и ресурсы, проверит ваш код, даст полезные советы. Кстати, мы уже писали о полезном ресурсе, где вы сможете найти ментора. Наставника можно искать среди знакомых программистов, на IT-тусовках и конференциях, на онлайн-форумах и так далее.
- Специализированные практические курсы. Попробуйте поискать в своём городе курсы, где вас обучат какому-нибудь языку программирования или технологии. Я был приятно удивлён количеством таких курсов в Киеве, в том числе бесплатных и с последующим трудоустройством.
Какой язык, технологию и направление выбрать
Когда вы станете программистом, через годик-другой будете вольны выбирать любой язык, который вам нравится. Но при выборе первого языка программирования новичок должен учитывать следующие критерии:
- Наличие на рынке вакансий. Конечная цель этого пути — найти работу программистом. А это будет трудно сделать, если на рынке вакансий никто не будет искать разработчиков на вашем языке программирования. Проверьте сайты с вакансиями, посмотрите, кого больше ищут, выпишите десяток языков. И переходите к следующему критерию.
- Низкий уровень вхождения. Если вам придётся потратить длительное время на изучение языка, это может отбить у вас охоту к программированию вообще. Почитайте о тех языках, которые вы выбрали выше. Просмотрите литературу, которую нужно будет прочитать, чтобы изучить эти языки. И выберите те, о которых пишут, что они лёгкие, или которые вам показались лёгкими. Такими языками могут оказаться PHP, Ruby, Python.
- Кайф от процесса. Если вам не нравится писать код на выбранном языке, вы не будете получать удовольствия от этого процесса, от работы и от жизни. А оно вам надо? Делайте правильный выбор.
Также вам придётся определиться с направлением программирования. Мобильное, десктопное, игры, веб, низкоуровневое программирование и так далее. Самые популярные и относительно лёгкие отрасли — разработка под веб, мобильные и десктопные клиенты. Под каждое направление может подходить один язык и совсем не подходить другой. То есть при выборе языка программирования также стоит отталкиваться и от этого фактора.
В любом случае изучите веб-технологии. Это язык разметки HTML, стили CSS и JavaScript, который позволит сделать вашу страницу динамической. На следующем этапе изучите серверный язык (Python, PHP, Ruby и другие) и подходящие для него веб-фреймворки. Изучите базы данных: практически в каждой вакансии программиста это упоминается.
Как получить начальный опыт
Без опыта вы не получите работу. Без работы вы не получите опыт. Замкнутый круг реальной жизни. Но ничего страшного, мы из него выберемся.
Во-первых, не стоит ждать, пока вы прочитаете все книги по выбранному языку программирования. Начинайте писать свои первые строки кода уже после второй главы книги. Выполняйте все задания из книг, перепечатывайте примеры, разбирайтесь в них. Усложняйте примеры и задания из книг своими идеями. Создавайте свои задачи к пройденному материалу. Решайте эти задачи.
Во-вторых, вам нужно найти свои первые проекты. Это, наверное, самый сложный вариант, но рабочий. Вам придётся самому искать заказы, выполнять их, заморачиваться с оплатой. Для новичка это архисложно, но зато затем все остальные варианты покажутся плёвым делом. Выполненные проекты можно будет записать в опыт и показать вашему будущему работодателю. Реальные проекты являются большим плюсом в вашем резюме.
Если вы знаете английский язык, регистрируйтесь лучше на англоязычных биржах. Рынок там больше. Если не знаете английского, учите его. А пока что вам доступны русскоязычные биржи фриланса. Ищите небольшие проекты, которые соответствуют вашему уровню знаний или чуть выше него. Подайте заявку на пару десятков таких заданий. И приготовьтесь получить море отказов. Но если одна-две заявки выстрелят, у вас будет шанс получить реальный опыт.
Ещё одним неплохим вариантом для получения реального опыта является open source. Таким проектам всегда нужны новые люди, пусть даже и новички. Вы можете поискать в проекте баги или посмотреть в баг-трекере и предложить методы их решения. Найти такие проекты легко на GitHub или других сервисах для хостинга кода. Не стесняйтесь задавать там вопросы.
Четвёртый вариант получения опыта — помощь знакомым программистам. Попросите их передать вам маленькие и несложные задания. Если что-то не будет получаться, у вас всегда будет к кому обратиться. И при этом вы будете участвовать в реальном проекте.
Последний способ — собственные проекты, различные хакатоны или работа в коворкинге. Свои проекты сложно начинать самому, лучше поискать знакомых или друзей.
Почему стоит выбрать Python
Давайте немного подробнее поговорим о выборе первого языка программирования. Первый язык должен быть простым и популярным на рынке. Таким языком является Python. Я очень советую выбрать именно его в качестве первого языка программирования.
Код программы на Python читабелен. Вам даже не нужно быть программистом, чтобы в общих чертах понять, что происходит в программе. Из-за несложного синтаксиса Python вам понадобится меньше времени для написания программы, чем, например, на Java. Огромная база библиотек, которая сэкономит вам кучу сил, нервов и времени. Python является высокоуровневым языком. А значит, вам не нужно особо думать о ячейках памяти и о том, что там разместить. Python — язык широкого назначения. И он такой простой, что даже дети могут его выучить.
Справедливости ради стоит упомянуть и о других языках программирования. Java может стать неплохим выбором для новичка. Этот язык популярнее, чем Python, но и немного сложнее. Зато инструменты для разработки гораздо лучше проработаны. Стоит только сравнить Eclipse и IDLE. После Java вам будет проще перейти к работе с низкоуровневыми языками программирования.
PHP — ещё один очень популярный язык. И, мне кажется, он даже проще, чем Python. Очень легко найти себе ментора или решение какой-нибудь проблемы на форуме. Всё потому, что в мире существует огромное количество PHP-программистов разного уровня. В PHP нет нормального импорта, есть множество вариантов решения одной и той же задачи. А это усложняет обучение. И PHP заточен исключительно под веб.
Языки C и C# очень сложны для новичка. Ruby — хороший выбор в качестве второго языка, но не первого. JavaScript — очень простой язык, но ничему хорошему он вас не научит. А задача первого языка программирования всё-таки научить вас чему-то правильному, задать какую-то логику.
Важен ли английский язык
Важен! Не знаете? Учите. Знаете? Совершенствуйте. Учитесь читать, писать, слушать и говорить на английском. Делайте упор на техническую литературу. Слушайте англоязычные подкасты. Читайте англоязычные учебники по программированию.
Что нужно знать, кроме языка программирования
Конечно же, кроме языка программирования и английского, нужно знать что-то ещё. А вот что — зависит от направления, которое вы выберете. Веб-программист обязан знать HTML, CSS, JavaScript. Десктоп-программист учит API операционной системы и различные фреймворки. Разработчик мобильных приложений учит фреймворки Android, iOS или Windows Phone.
Всем нужно выучить алгоритмы. Попробуйте пройти курс на Coursera или найти подходящую для себя книгу по алгоритмам. Кроме этого, нужно знать одну из баз данных, паттерны программирования, структуры данных. Стоит также познакомиться с репозиториями кода. Хотя бы с одним. Обязательно знание систем версионного контроля. Выбирайте Git, он самый популярный. Вам нужно знать инструменты, с которыми вы работаете, операционную систему и среду разработки. И главный навык программиста — уметь гуглить. Без этого вы не проживёте.
Последние шаги
Вам нужно подготовить резюме. Не просто резюме, а хорошее резюме. Не стоит писать там лишней информации, но и умалчивать о своих умениях тоже не нужно. После того как вас пригласят на интервью, вы должны к нему подготовиться. Пройдитесь по материалу, который указан в вашем резюме. Вы должны быть уверены в своих знаниях. Просмотрите проекты, над которыми вы работали, вспомните технологии, которые вы применяли. И вперёд — к светлому будущему с новой профессией программиста.
lifehacker.ru
Программировать с нуля. «Сейчас» — самое подходящее время, чтобы начать
(Иллюстрации к статье А.П. Ершова «Программирование — вторая грамотность»)
Стив Джобс не написал ни строчки кода, Билл Гейтс — написал. Пол Грэм — первоклассный программист, Питер Тиль — юрист по образованию, сооснователь 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 "~{~@(~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
Как выучить программирование с нуля
Как учить программирование с нуля
1. Самостоятельно
Если вы обладаете железной силой воли и горите желанием стать программистом, то можете добиться своей цели с помощью самообразования. Это не самый простой и короткий путь: вам придётся самому разбираться в информационном хаосе и бороться с прокрастинацией. Зато вы можете учиться в удобное время за относительно небольшие деньги или же совсем бесплатно.
Начинать проще всего с интерактивных онлайн-курсов. В Сети есть множество площадок, материалы которых доступно объясняют основы программирования и задают направление для дальнейшего развития. Особое внимание уделяйте тем курсам, которые обучают на примерах реальных проектов, то есть поэтапно рассказывают, как создавать конкретную программу или сайт.
Платформа с бесплатными курсами по веб-разработке freeCodeCampЗапомните, что у вас ничего не получится без практики. Учитесь по проектно-ориентированным курсам и пытайтесь сами писать разобранные в них программы и сайты. Ищите лекции на YouTube с разбором проектов, которые вы бы хотели разрабатывать. Сначала копируйте работу других людей и анализируйте её. Затем пробуйте отходить от оригинала, экспериментируйте, изменяйте отдельные элементы, пока не сможете создавать что-то уникальное.
Помимо курсов и видеолекций, к вашим услугам официальная документация, доступная на сайтах языков, и книги. Когда разберётесь в основах, поищите свежие издания с подзаголовком Best Practices по выбранному языку программирования. Такие книги содержат лучшие приёмы разработки.
Обязательно поставьте перед собой цель создать свой проект и постоянно работайте над ним.
Это поможет закрепить полученные знания и понять, какой информации вам ещё не хватает. Ваши навыки будут развиваться вместе с проектом. Когда закончите его, работайте над новым — более сложным.
Если у вас возникнут трудности в процессе обучения или разработки, вы всегда сможете обратиться по любому вопросу к сообществам программистов вроде «Тостер» и Stack Overflow. Вам, например, помогут решить какую-нибудь задачу, выбрать хороший курс или укажут на ошибки в коде.
Сервис вопросов и ответов на технологические темы «Тостер»Оттачивать навыки удобно на специальных площадках, где можно посоревноваться с другими программистами, решая с помощью кода различные практические задачи. В числе таких сервисов — Codewars, TopCoder и HackerRank.
Если почувствуете, что ваше развитие зашло в тупик, или захотите ускорить обучение, попробуйте следующие варианты.
13 советов тем, кто изучает программирование самостоятельно →
2. С помощью ментора
Ментор — персональный наставник, который указывает на ошибки, предупреждает о подводных камнях, помогает прокладывать курс обучения. Полезная рекомендация, полученная в нужный момент, может избавить вас от многих проблем и сэкономить массу времени. Поэтому ментор никому не помешает.
Узнайте, есть ли среди ваших знакомых разработчики. Возможно, кто-нибудь из них захочет вам помогать. Если таких людей вы не знаете, можете поискать их в сообществах программистов. К примеру, на том же «Тостере». Только услуги менторства стоят недёшево, а за просто так тратить много времени на незнакомых людей никто не желает.
3. У преподавателей «живых» курсов
Дистанционные и очные курсы с преподавателями, которые обучают программистов с нуля, стали невероятно популярными за последние годы. В рамках этого формата вам также предстоит очень много работать самостоятельно. Зато вы будете заниматься по профессионально подготовленной программе, а решения задач будет проверять живой человек. К недостаткам курсов можно отнести высокую стоимость обучения.
Популярные русскоязычные онлайн-площадки, которые занимаются системной подготовкой программистов: «Нетология», GeekBrains и Loftschool.
Если предпочитаете заниматься очно, можете поискать образовательные центры, которые обучают программированию в вашем населённом пункте. К сожалению, такие заведения чаще всего присутствуют только в больших городах. В качестве примера можно привести компьютерную академию «ШАГ», у которой есть филиалы в нескольких странах.
4. В университете
Если у вас много времени в запасе и вы уверены, что хотите связать жизнь с программированием, можете изучать компьютерные науки в университете. Но имейте в виду, что традиционные учебные заведения отстают от прогресса, так что современные языки программирования и прочие технологии вам придётся осваивать самостоятельно.
С другой стороны, университет даст фундаментальные знания математики, алгоритмов и других областей, которые помогут вам стать высококлассным программистом. За годы усердной учёбы вы сформируете правильный тип мышления, благодаря которому будете схватывать всё на лету в профессиональной сфере.
Как выбрать направление и язык
В ИТ-индустрии можно выделить несколько направлений, в каждом из которых используют свой набор языков. Перечислим основные направления в порядке возрастания сложности:
- Веб-разработка. Популярные языки: JavaScript, PHP, Python, Ruby.
- Мобильная разработка. Популярные языки: Java, Swift.
- Разработка игр и программ для настольных компьютеров. Популярные языки: C++, C#, C.
- Big Data, машинное обучение. Популярные языки: Python, R, Scala.
На что обратить внимание при выборе
Чтобы сделать правильный выбор направления и, в частности, языка, учитывайте следующие факторы: сложность освоения и количество обучающих материалов в Сети, ваши личные предпочтения (что именно хотите разрабатывать) и востребованность языка на рынке труда.
График востребованности языков на международном рынке труда / research.hackerrank.comВостребованность языка в вашем регионе легко проверить на сайтах для поиска работы. Просто откройте раздел для разработчиков ПО и посмотрите количество доступных вакансий.
ИНФОГРАФИКА: Какой язык программирования учить первым →
Если не можете определиться
Если вы в замешательстве, присмотритесь к JavaScript — языку, на котором написан почти весь веб. Многие организации и программисты советуют новичкам выбирать именно этот язык в качестве первого.
Например, основатель образовательного ресурса freeCodeCamp Квинси Ларсон рекомендует JavaScript всем начинающим. Ларсон приводит очень простые аргументы:
- JavaScript относительно легко освоить. А чтобы написать что-то и запустить на этом языке, достаточно иметь редактор кода и браузер.
- JavaScript — самый востребованный язык на международном рынке труда и у него большие перспективы. В экосистему JavaScript инвестируют крупные компании вроде Google, Microsoft и Facebook.
- У JavaScript очень широкая сфера применения: от сайтов и браузерных игр до мобильных приложений.
Кроме того, вокруг этого языка сформировалось крупное сообщество разработчиков. Высокий интерес к JavaScript обеспечивает огромное количество курсов, книг и другого образовательного контента.
Что ещё должен знать программист: математика и английский?
Любому программисту не помешает глубокое понимание математики. Для таких направлений, как разработка игровой графики или большие данные, математический ум — это необходимость. Но что касается веб-разработки и создания несложных программ, то в большинстве случаев без математики можно обойтись. Хотя среди профессионалов на этот счёт нет единого мнения.
А вот понимание английского, хотя бы на уровне беглого чтения документации, обязательно для всех программистов. Официальные документы и большая часть образовательных материалов появляются в первую очередь на английском языке. Книги часто устаревают ещё до того, как выходит перевод. Кроме того, знание английского открывает перспективы для работы со всем миром.
Как выучить английский язык: всё самое интересное и полезное →
Как получить первый опыт и первую работу
Чтобы найти первую работу в качестве программиста, вы должны иметь портфолио. Это созданный вами проект, а лучше несколько, которые демонстрируют все ваши умения разработчика. В программу большинства курсов входит разработка проектов, которые могут войти в ваше портфолио.
Очень ценным пунктом в резюме будет наличие опыта работы, особенно командной разработки. Но где его взять, если вы ищете первую работу?
- Выполните несколько заказов на биржах фриланса. Это могут быть «Фрилансим» или Upwork. Предлагайте свои услуги бесплатно, тогда к вам придут первые заказчики.
- Найдите единомышленников и создайте с ними общий проект. Люди объединяются для таких целей почти на каждой образовательной площадке, где есть курсы по программированию.
- Выберите курсы, организатор которых помогает с трудоустройством. Например, в GeekBrains после обучения открывается доступ к стажировкам от разных компаний, в том числе — оплачиваемым. GeekUniversity и «ШАГ» гарантируют трудоустройство своим выпускникам.
Перед собеседованием не забудьте поискать в Сети списки задач и вопросов, которые часто задают соискателям.
lifehacker.ru
Термины IT для начинающих / СоХабр
Заголовок придумал не я, а моя подруга; она же и явилась причиной написания этого материала. Так сложились обстоятельства, что ей, человеку, далекому от мира IT, пришлось ежедневно сталкиваться с различными специфичными терминами, и она в них терялась; не могла сообразить, что такое сервер, и почему в одних случаях он «экологически чистый в Германии», а в другом — запускается у кого-то на ноутбуке. Также сложно было объяснить ей, что такое консоль. В общем, для облегчения процесса общения я решил написать объяснение некоторых терминов на более-менее доступном языке (надеюсь), и она предложила поделиться написанным с сообществом Хабра.Вдруг кому-то еще понадобится донести до кого-то те же самые понятия. Чтобы не искать каждый раз доступные объяснения/аналогии, можно просто дать ссылку на готовый материал.
Ассемблер
Языки программирования, инструкции которых являются инструкциями процессоров. Максимально низкоуровневые языки, позволяющие сильно оптимизировать выполнение программы, но на них тяжело писать. Так как разных процессоров много, то и ассемблеров много разных бывает.
Интерпретатор
Программа, принимающая на вход текст другой программы на каком-либо языке и построчно его исполняющая.
Компилятор
Программа, принимающая на вход текст другой программы на каком-либо языке и преобразовывающая его в ассемблер.
Транслятор
Программа, принимающая на вход текст другой программы на каком-либо языке и переводящая его в текст эквивалентной программы на другом языке.
ООП
Объектно-Ориентированное программирование. Принцип, при котором данные представляются в виде объектов (структур данных), объединяемых в классы. Класс — это семейство объектов, обладающих схожим поведением. Например, можно представить класс Array, все экземпляры которого будут массивами, их можно будет сортировать, разбивать и т.д., но при этом содержимое каждого объекта будет своим. ООП объявляет три главных свойства: наследование, инкапсуляция, полиморфизм.
Наследование
Принцип ООП, реализация которого дает возможность создавать классы-потомки каких-то классов предков. При этом по умолчанию наследуются все их свойства и функции, но, при этом можно добавлять новые либо заменять старые. Пример: класс Автомобиль и класс Самосвал. Самосвал наследует от Автомобиля 4 колеса, двери и т.п., и ко всему этому добавляет откидной кузов.
Применительно к программированию: У нас есть класс String (‘this is a string’). Мы можем создать класс-потомок NameString (‘John Black’), который может использовать точно так же, как и предок, но добавлять возможность извлечения имени и фамилии. Что-то вроде такого:
full_name - NameString.new("John Black")
full_name.first_name # John
full_name.last_name # Black
Инкапсуляция
Принцип ООП, реализация которого скрывает детали внутренней реализации класса извне, давая лишь интерфейс. К примеру, у автомобилей есть коробка передач, педали и спидометр. Это позволяет нам управлять им, не задумываясь о том, внутри него установлен двигатель внутреннего сгорания или электродвигатель, используется бензин либо дизельное топливо. Такое умышленное «незнание» позволяет сильно облегчить использование класса.
Пример из программирования: сортировка может быть реализована разными способами. Пузырьком, быстрая, пирамидальная, море всяких разных. А ты знай себе пишешь
`array.sort()` и не паришься.
Полиморфизм
Еще один принцип ООП, позволяющий использовать единообразно все классы, являющиеся потомками одного родителя. К примеру, принцип управления машинами с уже упомянутыми электродвигателями и ДВС особо не отличается. Поэтому, научившись использовать один класс, можно легко использовать и остальные.
Пример:
if params['login'].like_name?
login - NameString.new(params['login'])
else
login - params['login'] # просто String
# Здесь можно login использовать как обычную строку, независимо от того,
# является ли она экземпляром String либо его потомка NameString
Абстрактный класс
Класс, служащий лишь для того, чтобы быть предком других классов, объекты самого абстрактного класс создавать нельзя. Например, класс «Средство передвижения». Это слишком общий класс и у него нет объектов, но есть потомки: «Автомобиль», «Мотоцикл», «Самолет» и т.д.
Пиксель
Минимальный элемент на мониторе, способный изменять свой цвет.
Разрешение экрана
Количество пикселей по вертикали и горизонтали диспеля. От величины этого показателя зависит четкость изображения. В хваленой ретине разрешение такое высокое, что считается, что человеческий глаз не способен различить отдельные пиксели, настолько они мелкие.
Процессор
Сердце компьютера. На нем производятся основные вычисления (а вся работа компа — это вычисления). В процессе развития IT архитектура процессоров развивалась, и сейчас в маленьком квадратике размеров с упаковку от презерватива вмещаются сотни миллионов транзисторов. В общем, главные части процессора — регистры (грубо говоря, переменные), АЛУ (арифметическо-логические устройства), кэш разных уровней. В многоядерных процессорах эти наборы дублируются, позволяя одновременно выполнять несколько задач. В одноядерных системах мнимая одновременность (музыку воспроизводить и в браузере вкладки одновременно открывать) реализуются с помощью квантования процессорного времени. Это значит, что каждая задача выполняется по кусочкам, а не полностью, и задачи постоянно чередуются. Таким образом, выполнение каждой отдельной задачи происходит медленнее, зато выполняются они как будто одновременно.
Кэш
Очень быстрая, но небольшая по объему область памяти. Используются для быстрого доступа к частым данным. Если нужных данных в кэше нет, процессору приходится обращаться к оперативной памяти через шину, а это долго (по сравнению с кэшем, который располагается непосредственно в процессоре).
Оперативная память (RAM: random access memory)
Достаточно быстрая область памяти, характеризующаяся тем, что время доступа к конкретному блоку не зависит от его расположения (в отличие от жесткого диска, в котором считывающая головка должна подъехать к определенному сектору на определенной дорожке). Плата за скорость — зависимость от энергопотребления. То есть при выключении компа содержимое оперативной памяти теряется. При включении режима гибернации в винде содержимое памяти записывается на жесткий диск, и при возобновлении работы состояние системы восстанавливается.
Видеокарта
Устройство, предназначенное для вычислений, требуемых для обработки и создания изображения, отправляемого на монитор. Работает гораздо быстрее, чем основной процессор, за счет того, что узкоспециализировано. Особо требовательны к видеокарте игры (всякие тени/отражения/лучи света требуют геометрических и математических преобразований в очень большом количестве).
Материнская плата
Связующее звено между всеми компонентами компьютера. На ней располагаются всякие разъемчики.
СКВ (система контроля версий)
Программа, предназначенная для контроля изменений файлов и хранящая историю версий. В разных СКВ по-разному поддерживается ветвление и объединение разных веток. Ветки нужны для параллельной работы нескольких программистов над одной создаваемой программой либо для параллельного развития нескольких версий одной и той же программы.
Git (гит)
Одна из СКВ. Распределенная, т.е. данные хранятся не только на центральном сервере, но и на компьютере каждого из разработчиков. Позволяет и поощряет легкое создание веток и последующего их объединения (есть СКВ, в которых ветвление происходит сложнее).
deploy (развертывание)
Процесс запуска приложения на сервере, а именно: копирование самого приложения, генерация необходимых конфигурационных файлов, остановка старой версии и запуск новой. В больших сервисах может быть очень сложным процессом.
Сервер
1. Компьютер, на котором запущен какой-либо сервис (программа), к которой имеет доступ другие компьютеры. Одна машина может выполнять сразу несколько задач: быть почтовым сервером, файловым хранилищем и еще чем-нибудь.
1. Постоянно работающая программа, принимающая входящие соединения, как-либо обрабатывающая входные данные и что-либо возвращающая. Например, почтовый сервер: в ответ на логин/пароль выдает почту пользователя.
База данных
Программа, реализующая хранение данных и их извлечение.
SQL (Structured Query Language)
Язык запросов, с помощью которого можно извлекать какие-то конкретные требуемые данные из БД. Например, посты блога, автором которых является Вася Пупкин, а дата публикации — от 2000 до 2010 года.
Консоль
В сфере IT — черненькое окошко. Предоставляет примитивный интерфейс для программ, которые не требуют сложного GUI (graphic user interface).
bash
Одна из консолей, а также одноименный язык, на котором можно под эту консоль писать программы.
MVC
Способ организации структуры приложений: Model-View-Controller. Модель отвечает за хранение и логику обработки данных, view (представление) — за их (внезапно) представление, а контроллер описывает реакцию модели на внешние воздействия. Я создаю сайты на Ruby on Rails, этот инструмент использует MVC. Например, есть модель Post, у которой есть атрибуты автор, время создания, опубликованность и т.д. Представление — это, грубя говоря, HTML код, который служит для создания страниц с этим постом (отображения, редактирования, создания). А контроллер служит для взаимодействия внешнего мира с моделью: в зависимости от пути в адресной строки он вызывает разные методы модели и вызывает генерацию разных представлений.
HTML
HyperText Markup Language — язык разметки гипертекста. Содержимое сайтов без их внешнего оформления: таблицы, контейнеры, параграфы, переносы строк и ссылки.
CSS
Cascade StyleSheets — каскадные таблицы стилей. Описывают внешнее оформление сайтов.
JS
Javascript. Язык, на котором описывается реакция страницы на действия пользователя.
HTTP
HyperText Transfer Protocol — протокол передачи гипертекста. Набор правил, по которым страницы сайтов передаются от сервера к клиенту (браузеру).
HTTPS
S for Secure. Защищенная версия HTTP, при которой все передаваемые данные шифруются, делая практически бессмысленным прослушивание канала. Поэтому сидя в интернете через макдаковский вайфай лучше набирать адрес не vk.com (который преобразуется к виду http://vk.com), а https://vk.com. Кстати, в андроидовском приложении есть возможность передачи данных через безопасное соединение, очень полезная штука при использовании публичных wifi. Например, если подключаться в Макдаке к http://vk.com, а не https://vk.com, то любой желающий может перехватить авторизационные данные от твоего профиля, и использовать ВК от твоего имени.
Ruby on Rails
Фреймворк (набор классов) для построения сайтов. Обладает обширными возможностями, достаточно сложный в освоении, но легкий в использовании. Использует архитектура MVC. Написан на Ruby.
Граф
Структура данных, представляемая в виде набора объектов и связей между ними. Объекты также называются вершинами графа. Существуют различные алгоритмы на графах, например, реализующие поиск кратчайшего пути в графе между заданными точками.
Сложность алгоритма
Зависимость времени работы алгоритмы от размера набора входных данных. К примеру, если магазины расположены в ряд, и у тебя уходит _t_ времени на посещение каждого магазина, то при размере торгового ряда в _n_ у тебя будет уходить _nt_ времени на посещение всех магазинов. Но у каждого человека своя константа _t_, главное, что j, общее время зависит от _n_ линейно. То есть время обхода магазинов является величиной, сравнимой с _n_: `T — O(n)`.
Если бы магазины были расположены на площади квадрата со стороной _n_, то `T — O(n^2)`
Linux
Открытая операционная система, изначально которую создал Линус Торвальдс (он же создал git). Состоит из ядра и набора пакетов (пакет — это программа). Дистрибутив Linux — это опреленный набор пакетов, поставляемый вместе с ядром. Так как эта операционная система открыта, создавать дистрибутивы могут все, кому не лень, но у наиболее известных дистрибутивов есть сформировавшиеся команды, их разрабатывающие. Популярные дистрибутивы:
— Ubuntu
— Debian
— Mint
— RedHat (эта платный корпоративный дистрибутив, отличается хорошей безопасностью и стабильностью, а также круглосуточной техподдержкой)
— Gentoo (очень сложный в настройке, но быстрый)
P.S. В этих объяснениях упор был сделан на доступность и понятность, поэтому могут быть некоторые неточности. Да и сам я не претендую на истину в последней инстанции, так что если найдутся какие-то косяки — с готовностью исправлю.
sohabr.net