Вики программирование: Недопустимое название — Викиучебник

Содержание

Добро пожаловать в Вики! [Роботрек вики]

На этом портале вы найдете всю информацию, касающуюся проекта Роботрек.

To read wiki in English, please, click here.

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

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

Для программирования роботов вам необходимо установить среду программирования Роботрек IDE и научиться составлять программы в её визуальной среде.

Перед началом экспериментов нужно познакомиться с «сердцем и мозгом» всех наборов Роботрек — контроллером Трекдуино.

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

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

Если необходимо реализовать дистанционное управление роботом, можно использовать инфракрасный пульт дистанционного управления , либо организовать управление с телефона или планшета на Android по Bluetooth с помощью встроенного в контроллер Bluetooth-модуля и приложения Роботрек ПДУ (Android).


Список всех статей:


Наборы

Программное обеспечение

Дистанционное управление

100 готовых алгоритмов

Элементы питания

Видео инструкции

Электронные компоненты

Контроллеры

Датчики

Исполнительные устройства

start.txt · Последние изменения: 2021/02/20 14:22 — dustinskiy

Персональная Wiki в кармане / Хабр

Хочу представить хабр сообществу оффлайновое Wiki приложение bLADE Wiki.

Тип лицензии: Бесплатная
Поддерживаемые ОС: Windows XP|2003, Windows Mobile 5|6
Дополнительные требования к ОС: Microsoft .NET Framework 2.0
Автор: Dale Lane
Сайт автора
Сайт приложения
Форум
Новые версии
Пожелания к программе
Демонстрационное видео

Это небольшое приложение представляет собой персональную базу формата Wiki. Написана на языке программирования C#, с использованием .NET 2 Framework, исходные тексты не доступны, автор не планирует ими делиться. Система постоянно развивается, начиная с декабря 2006 года, то есть уже больше двух лет. Об интенсивности обновлений можно судить по блогу – в месяц выходит в среднем до 10 новых версий. Конечно, с течением времени новых версий стало меньше, это можно объяснить законченностью, продуманностью продукта. Он практически совершенен. Надо отдать должное автору, который с большим энтузиазмом прислушивается к просьбам пользователей и, в пределах своих возможностей, добавляет функционал (за что ему почет и уважение!).

Несколько слов о самом приложении

Параллельно существует 2 версии – для ПК и для мобильных устройств. Они несколько различаются по внешнему виду, но имеют полную совместимость между собой (файловая синхронизация с помощью ActiveSync). Подробнее можно почитать на сайте автора. Я буду описывать версию для ПК, так как не имею устройств на Windwos Mobile. Программа имеет возможность запускаться без инсталляции (Portable), что очень удобно для использования на USB носителе – все всегда с собой. Предназначена, как и большинство Wiki, для ведения персональной базы знаний, системы заметок. В отличии от древовидных систем, имеет плоское пространство имен внутри одной базы (баз может быть несколько). Каждая страница – файл в файловой системе, расширение файла настраивается. Тут должен упомянуть о некой особенности. Так как программа поддерживает юникод, каждая страница с русским заголовком генерирует файл в файловой системе с нечитаемым видом, вроде «%D0%9C%D0%BE%D0%B5.txt» это закодированное слово «Мое». В самом приложении все в порядке, все отображается правильно. Английские названия в файловой системе отображаются корректно (читабельно). На форуме 4pda есть человек, написавший подобное приложение (Wit Wiki), но с поддержкой русского в файловой системе, плюс присутствие конвертора синтаксиса для перехода с bLADE Wiki. Так как проект заснул, я все-таки предпочитаю оригинальную версию. Возможно, если найдутся люди, готовые разбудить автора, у проектора есть будущее. Я буду искренне рад этому! Если найдутся желающие развивать эту тему, человека можно без труда отыскать на 4pda.

О синтаксисе.

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

Как я использую bLADE Wiki.

Для меня это приложение послужило неким стимулом к использованию системы GTD. До этого я много раз пытался начать использовать какой-либо программный продукт для этих целей, но мне не удавалось найти ничего похожего. Может это звучит глупо, но среди сотен существующих приложений (платных и бесплатных), мне не удалось на чем-нибудь остановиться. То поиска на русском языке нет, то приложение очень навороченное и от этого неподъемное, то наоборот – слишком примитивное, то автор забросил свой проект, то приложение платное и т.д. Нет, мне не сложно заплатить за софт, просто чтобы понять для себя, подходит ли мне это ПО или нет, я должен попробовать его в течении достаточно долгого времени, а с демо-версиями я автоматически жестко привязан ко времени. На данный момент я веду в этом приложении хронометраж своего времени по методу сворачивающихся дневников Ильи Правского (improvement. ru). Выглядит это примерно так:

Каждый день с утра я создаю новую страничку и фиксирую там все более-менее значимые для меня события за день. Список дат на весь год я составил с помощью Excel. Для меня уже достижение, что уже месяц все записываю :). Конечно дело осложняется тем, что я не имею возможности использовать мобильную версию, так как моим телефоном является Nokia E71 (Symbian OS v9.2 s60 v3 fp1)… Но я нашел для себя выход из положения – синхронизация с Outlook и copy&paste. Пусть метод не автоматический, но он работает). Еще заметил за собой, что если отложить запись чего-либо в систему сегодня, то завтра уже половина дел забудется. Это также очень хорошо описано в описания метода (см. ссылку выше). Я мотивирую себя тем, что если я не буду поддерживать обязательное условие (записывать отчеты каждый день), то КПД моего развития будет ниже. Эта система – первая ступень к саморазвитию, по крайне мере для меня.

Преимущества и недостатки.

+простота использования, наглядность
+мобильность
+поиск
+поддержка нескольких баз
+возможность экспорта в HTML
+настраиваемый внешний вид
+быстрые внутренние и внешние ссылки
+возможность шифрования базы (но нужно аккуратнее с этим!)
-крякозябры в файловой системе
-отсутствие синхронизации с Symbian или MS Outlook
(-)отсутствие WYSIWYG редактора. Но привыкнуть можно быстро

P.S.

Это мой первый пост на Хабре, не судите строго :).

Вики Принт 57 Ф

Простая конструкция. Минимум подвижных деталей. Ручной отрыв чеков. Фискальный регистратор Viki Print 57 — экономичное решение для учета продаж и печати чеков на бумаге 57 мм.

Государственный реестр ККМViki Print 57 находится в государственном реестре контрольно-кассовой техники. Приказ №ЕД-7-2/468а от 26.10.2015

ХАРАКТЕРИСТИКИ

Поддерживаемое ПО:

  • Start

  • Set Retail 5

  • Set Retail 10

  • СБИС Розница

  • IIKO

  • R-Keeper (версия 7)

  • МойСклад Розница 2

  • 1С (Розница, Управление торговлей), платформа 8.3

  • LiteBox

  • Домино

54-ФЗ

  • Передача фискальных данным в ФНС

  • Работа с ОФД: «Такском», «Первый ОФД» (АО «Энергетические системы и коммуникации»), OFD. ru (ООО «Петер-Сервис Спецтехнологии»), «Эвотор ОФД», «ОФД-Я» (ООО «Ярус»)

  • Передача чеков на электронную почту или абонентский номер покупателя

  • Ввод данных покупателя по штрихкоду или QR-коду в приложении ФНС «Проверка чека»

Размер и вес:

Длина — 225 мм

Ширина — 124 мм

Высота — 100 мм

Вес — 0,8 кг

Печать

Ресурс печатающей головки 100 км

Скорость печати 100 мм/сек — печать чека на 10 позиций занимает 2 секунды

Печать изображений и QR-кодов Да.

Принтер выводит изображение на чек за секунду

Чек

Символов в строке До 42

Чековая лента

Ширина чековой ленты – 57 мм

Диаметр рулона – до 90 мм

Потребляемая мощность До 20W

Интерфейсы и электропитание

RJ-12Для денежного ящика

RS-232Для подключения к компьютеру

USBДля подключения к компьютеру по USB

Разъём электропитания

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

Гарантия1 год

Комплектация

Фискальный регистратор Viki Print 57, Блок питания 8,5 В в комплекте с кабелем

Документация

  • Паспорт

  • Инструкция налогового инспектора

  • Инструкция по эксплуатации

  • Паспорт ФН

Кабели

  • USB для подключения к компьютеру

  • RS­232 для подключения к кассовому терминалу или компьютеру

★ ACM SIGACT — Вики .

. | Информация

                                     

★ ACM SIGACT

SIGACT — особая группа ACM (АСМ), целью которого является поддержка исследований в области теоретической информатики. основал Патрик Фишер в 1968 году.

Главный орган — ежеквартальный бюллетень SIGACT News (SIGACT Новости), его интернет-версия — SIGACT News Online (SIGACT News онлайн).

Является соорганизатором ряда крупных ежегодных конференций:

  • ANALCO Analytic Algorithms and (Аналитические алгоритмы ANALCO) Combinatorics: (Комбинаторика) практикум по аналитической алгоритмы и комбинаторика.
  • SODA Symposium on Discrete (Симпозиум соды на дискретных) Algorithms: (Алгоритмы) симпозиум по дискретным алгоритмам, организованной в сотрудничестве с обществом промышленной и прикладной математики. вместе с SODA (Сода) состав спонсорских два ежегодных семинара.
  • SOCG Symposium on Computational (SOCG симпозиум по вычислительной) Geometry: (Геометрия) симпозиум по вычислительной геометрии до 2014 спонсировать вместе с SIGGRAPH.
  • PODC Principles of Distributed (Принципы PODC распределенных) Computing: (Вычисления) симпозиум по принципам распределенных вычислений авторами совместно с SIGOPS.
  • PODS Principles of Database (Стручки принципы базы данных) Systems: (Систем) симпозиум по принципам системы баз данных.
  • ALENEX Algorithms and (Алгоритмы ALENEX) Experiments: (Эксперименты) семинар по алгоритмам и экспериментов.
  • POPL Principles of Programming (Принципы программирования POPL) Languages: (Языки) симпозиум по принципам языков программирования.
  • COLT Conference on Learning (Конференция Кольт на обучение) Theory: (Теория) конференции по теории обучения до 1999.
  • SPAA Symposium on Parallelism (Симпозиум SPAA на параллельность) in Algorithms and (в алгоритмах) Architectures: (Архитектур) симпозиум по параллелизма в алгоритмах и архитектурах.
  • STOC Symposium on the (Симпозиум в наличии на) Theory of Computing: (Теория вычислений) симпозиуме по теории вычислений.

Конференция COLT (Кольт), PODC, PODS (Стручки), POPL, SODA (Сода) и STOC часто цитируется по citeseerx и libra (весы).

Награды:

  • Премия Дейкстры для работы в области распределенных вычислений присуждается совместно с SIGOPS, EATCS и частных компаний.
  • Премии Геделя за выдающиеся работы по теории вычислительных систем, вместе с EATCS.
  • Премия Дэнни Люин на лучшую студенческую работу.
  • Приз За лучшую работу на симпозиуме по теории вычислений ACM STOC (АСМ КТВЗР) и Симпозиум по основам информатики IEEE FOCS (СТАНДАРТ IEEE УДФ).
  • Награда за выдающиеся заслуги ACM SIGACT.
  • Премии кнута (Award of the whip) — за выдающийся вклад в Основы информатики присуждается совместно с Техническим комитетом по математические основы информатики вычислительной сообщества IEEE.
  • Лоулер премии за гуманитарный вклад в информатику ACM (АСМ), дается в сочетании с SIGACT.
  • Награда Kanellakis для теоретического прогресса и демонстрации эффектов на практике премии вычислений ACM (АСМ), дается в сочетании с SIGACT.

Википедия — свободная энциклопедия

Избранная статья

Прохождение Венеры по диску Солнца — разновидность астрономического прохождения (транзита), — имеет место тогда, когда планета Венера находится точно между Солнцем и Землёй, закрывая собой крошечную часть солнечного диска. При этом планета выглядит с Земли как маленькое чёрное пятнышко, перемещающееся по Солнцу. Прохождения схожи с солнечными затмениями, когда наша звезда закрывается Луной, но хотя диаметр Венеры почти в 4 раза больше, чем у Луны, во время прохождения она выглядит примерно в 30 раз меньше Солнца, так как находится значительно дальше от Земли, чем Луна. Такой видимый размер Венеры делает её доступной для наблюдений даже невооружённым глазом (только с фильтрами от яркого солнечного света), в виде точки, на пределе разрешающей способности глаза. До наступления эпохи покорения космоса наблюдения этого явления позволили астрономам вычислить расстояние от Земли до Солнца методом параллакса, кроме того, при наблюдении прохождения 1761 года М.  В. Ломоносов открыл атмосферу Венеры.

Продолжительность прохождения обычно составляет несколько часов (в 2004 году оно длилось 6 часов). В то же время, это одно из самых редких предсказуемых астрономических явлений. Каждые 243 года повторяются 4 прохождения: два в декабре (с разницей в 8 лет), затем промежуток в 121,5 года, ещё два в июне (опять с разницей 8 лет) и промежуток в 105,5 года. Последние декабрьские прохождения произошли 9 декабря 1874 года и 6 декабря 1882 года, а июньские — 8 июня 2004 года и 6 июня 2012 года. Последующие прохождения произойдут в 2117 и 2125 годах, опять в декабре. Во время прохождения наблюдается «явление Ломоносова», а также «эффект чёрной капли».

Хорошая статья

Резня в Благае (сербохорв. Масакр у Благају / Masakr u Blagaju) — массовое убийство от 400 до 530 сербов хорватскими усташами, произошедшее 9 мая 1941 года, во время Второй мировой войны. Эта резня стала вторым по счету массовым убийством после создания Независимого государства Хорватия и была частью геноцида сербов.

Жертвами были сербы из села Велюн и его окрестностей, обвинённые в причастности к убийству местного мельника-хорвата Йосо Мравунаца и его семьи. Усташи утверждали, что убийство было совершено на почве национальной ненависти и свидетельствовало о начале сербского восстания. Задержанных сербов (их число, по разным оценкам, составило от 400 до 530 человек) содержали в одной из школ Благая, где многие из них подверглись пыткам и избиениям. Усташи планировали провести «народный суд», но оставшаяся в живых дочь Мравунаца не смогла опознать убийц среди задержанных сербов, а прокуратура отказалась возбуждать дело против кого-либо без доказательства вины. Один из высокопоставленных усташей Векослав Лубурич, недовольный таким развитием событий, организовал новый «специальный суд». День спустя дочь Мравунаца указала на одного из задержанных сербов. После этого 36 человек были расстреляны. Затем усташи казнили остальных задержанных.

Изображение дня

Эхинопсисы, растущие на холме посреди солончака Уюни

что это за энциклопедия, как работает Wiki-движок и особенности создания статьи в Wikipedia

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

Ссылки на Wikipedia можно услышать на телевизионных ток-шоу (из уст высокопоставленных чиновников и известных политиков), прочитать в публикациях СМИ.

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

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

«То, что написано в Wikipedia это истинна».

Может потому что подвергается проверкам и несоответствующие действительности сведения исправляются более сведущими в теме пользователями?

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

История создания онлайн энциклопедии Wikipedia

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

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

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

Кто основатель Википедии

Так кто же они, эти Джимми Уэйлс и Ларри Сэнгер, ныне известные, как создатели проекта Википедия?

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

  • «У нас каждая кухарка будет редактировать всемирную энциклопедию», решили Джимми Уэйлс и Ларри Сэнгер, после очередной чашечки капучино. .. )))

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

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

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

Преимущества ресурса

В чем основное преимущество Википедии перед БСЭ или Britannica?

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

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

У кого спросить? Где узнать?

  • Wikipedia спешит на помощь всем жаждущим знаний!

Задайте в поиске Google или Яндекса абсолютно любой вопрос на тему «что это» и одним из первых ответов будет ссылка на универсальный справочник – Википедию.

Интересно, почему пользовательскую сетевую энциклопедию не назвали «Всезнайка»?

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

Администраторы вики-энциклопедии застенчиво называют такие крайне болезненные инвазии «контентом рекламного характера».

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

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

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

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

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

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

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

Особенности wiki-движка

Технологическая платформа для реализации интернет-ресурса, на котором пользователи сами могут создавать, публиковать и редактировать контент, классифицируется как «вики-движок» – специфическая разновидность CMS (система управления сайтом).

В 1995 году программист из США Говард Каннингем (Howard Cunningham), будучи проездом в аэропорту солнечного Гонолулу, прокатился на местной достопримечательности – вики-вики шаттле. Это такой маленький автобус-челнок, перевозящий путешествующих от терминала к терминалу.

Wiki – это слово на гавайском языке, означающее «быстро». Популярная сетевая легенда гласит, что именно эта местная идиома послужила прототипом названия интернет-энциклопедии.

Мистер Каннингем разработал первую вики-CMS и назвал ее WikiWikiWeb, что как бы намекало на простоту и скорость публикации и редактирования контента пользователями вики-проекта.

В дальнейшем сложилось три основных типа wiki-платформ.

  1. Публичные вики со свободным доступом посетителей к редактированию и созданию контента.
  2. Корпоративные – как понятно из названия, системы для обмена документами и совместной работы над проектами в удаленном формате в рамках одной организации.
  3. Частные вики-CMS для реализации персональных дневников, путевых журналов, все то, что сегодня называется web-log или блог.

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

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

Как работает свободная энциклопедия изнутри

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

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

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

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

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

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

  • Wikipedia – плод коллективного труда

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

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

Стоит еще раз подчеркнуть – каждый опубликованный в статьях Википедии факт подтверждается ссылкой на сторонний респектабельный источник.

Как создать статью в Википедии (регистрация и оформление)

Если вы хотите написать статью в Википедию о чем-то важном, скорее всего, кто-то уже это сделал до вас.

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

Для этого воспользуйтесь встроенным поисков внутри сервиса или ищите материал через запрос в браузере вида http://ru.wikipedia.org/wiki/Название_темы

Для продвинутых пользователей имеется удобный Мастер статей, встроенная программа по адресу ru.wikipedia.org/wiki/Википедия:Мастер_статей, которая проведет автора по всем этапам от регистрации до окончательной публикации с последующим чистовым редактированием.

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

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

Теперь возвращаемся в «Мастер постов» и можем приступать к публикации поста.

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

  1. Введение
  2. Предмет
  3. Значимость
  4. Источники
  5. Содержимое
  6. Конец

Например, на этапе «Предмет» вам надо выбрать о чем вы хотите писать, если думаете создать пост в Википедии о себе, то система автоматом перекинет в конец, выдав сообщение, что здесь это делать запрещено.

Так что знайте, что в Wiki нельзя создать статью о себе любимом. )))

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

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

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

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

Только выберите предварительно её поместить в Черновик или сделать Общедоступной.

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

В противном случае такая статья обречена и ее 100% удалят.

Почему нельзя заказать статью в Wikipedia, кто их пишет

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

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

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

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

На этом все, если у вас был опыт работы в Wiki жду комментарии.

Запускаем конкурс на лучший рассказ о применении 3D-печати!

3Dtoday приглашает всех желающих принять участие в творческом конкурсе на лучший рассказ о реальном применении 3D-печати и 3D-принтеров. На кону новенький смартфон, смарт-часы и призы спонсоров — филаменты от компании My3D и лицензии на Компас-3D Home от компании «Аскон».

Призовой фонд:

Лучшая работа: смартфон Xiaomi Redmi 9, три катушки пластика от My3D на выбор призера (из наличия) и электронная лицензия на Компас-3D Home.

Приз читательских симпатий: умные часы Amazfit Bip U Pro, две катушки пластика от My3D на выбор призера (из наличия) и электронная лицензия на Компас-3D Home.

О спонсорах:

Мy3D — молодая, динамично развивающаяся и целеустремленная компания, занимающаяся производством и продажей расходных материалов для 3D-печати по FFF/FDM технологии. Приоритеты компании: использование только качественного первичного сырья, проверенных добавок и компонентов, проведение испытаний перед реализацией продукта, самые выгодные цены за филаменты высокого качества.

Производственная линия My3D оснащена современным оборудованием, специалисты предприятия тщательно следят за качеством сырья, красителей и добавок, соблюдением регламента сушки и переработки гранул, и осуществляют двойной контроль качества перед отгрузкой товаров. В настоящее время в ассортимент My3D входят филаменты их АБС, включая негорючий вариант, АСА, ПЛА, ПЭТГ, СБС, ударопрочного полистирола и нейлона.

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

С 1989 компания разрабатывает свой флагманский продукт КОМПАС-3D — систему трехмерного моделирования, построенную на собственном математическом ядре C3D. В 2012 году появилась версия КОМПАС-3D, доступная для домашних пользователей — КОМПАС-3D Home.

Как будут определены победители

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

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

Можно так

Или так

Или даже так

Сроки

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

Важно!

Для участия в конкурсе не забудьте добавить хештег #3dmay. Если все-таки забудете, сообщите нам на почту [email protected] или [email protected], и мы все исправим. Конкурсные статьи просим публиковать в разделах «Применение» и «Творчество». 

Всем удачи!

реализаций Python — Python Wiki

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

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

Варианты CPython

Это реализации, основанные на ядре среды выполнения CPython (фактическая эталонная реализация Python), но с расширенным поведением или функциями в некоторых аспектах.

  • CrossTwine Linker — комбинация CPython и дополнительной библиотеки, предлагающей улучшенную производительность (в настоящее время проприетарная)

  • Stackless Python — CPython с упором на параллелизм с использованием тасклетов и каналов (используется dspython для Nintendo DS)

  • Pyston — ответвление CPython, первоначально разработанное в Dropbox, но теперь независимыми разработчиками, ориентированное на производительность, включая ускорение байт-кода и облегченный JIT.

  • Cinder, форк CPython от Instagram, содержащий ряд оптимизаций, таких как переписывание байт-кода и JIT-компилятор «метод за раз».

  • unladen-swallow — «ветвь оптимизации CPython, предназначенная для полной совместимости и значительно более быстрой», первоначально рассматриваемая для слияния с CPython в соответствии с PEP 3146, но теперь не поддерживаемая

  • wpython — повторная реализация CPython использует wordcode вместо байт-кода

  • eGenix PyRun — среда выполнения Python (библиотека CPython + std), сжатая в один двоичный файл размером 3-4 МБ

Сокращенные варианты Python

Они предоставляют подмножество полной языковой + стандартной библиотеки для использования во встроенных сценариях (см. Также тему EmbeddedPython).

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

Другие реализации

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

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

Рабочие исполнения

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

  • PyPy — Python на Python, включает JIT-компилятор трассировки

  • Jython — Python на Java для платформы Java

  • IronPython — Python на C # для среды CLR / .NET и IronPython Community Edition (IPCE) проекта FePy

  • GraalPython — Python на Java с использованием JIT-компилятора Graal и среды реализации интерпретатора Truffle

  • Brython — способ запуска Python в браузере посредством перевода на JavaScript

  • CLPython — Python на Common Lisp

  • HotPy — виртуальная машина для Python, поддерживающая оптимизацию и преобразование байт-кода (в собственный код) с использованием информации о типе, собранной во время выполнения

    900 14

  • pyjs — (формально Pyjamas) компилятор Python в JavaScript плюс среда Web / GUI

  • PyMite — Python для встраиваемых устройств

  • pyvm — связанная с Python виртуальная машина и программный пакет, обеспечивающий практически автономный Система «пользовательского пространства»

  • RapydScript — язык, подобный Python, который компилируется в JavaScript

  • SNAPpy — «подмножество языка Python, оптимизированное для использования во встроенных устройствах с низким энергопотреблением» (очевидно, проприетарный)

  • tinypy — минималистичная реализация Python в 64К кода

  • Transcrypt — Python 3. 6 в прекомпилятор JavaScript с компактным и быстрым сгенерированным кодом, исходными кодами, встроенной минификацией, дополнительной статической проверкой типов, поддержкой JSX

Предварительные реализации

Следующие реализации кажутся незавершенными; они могут не работать с типичными программами:

Extensions

Обычно они являются частью CPython (или какой-либо другой реализации), но меняют поведение реализации:

  • Psyco — специализированный компилятор JIT для CPython, заброшенный, работает только для CPython 2.6.

Составители

Эти компиляторы обычно реализуют что-то близкое к Python, хотя некоторые компиляторы могут налагать ограничения, которые изменяют характер языка:

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

  • Nuitka — компилятор Python в C ++, использующий libpython во время выполнения, пытаясь оптимизировать время компиляции и выполнения.Взаимодействует со средой выполнения CPython.

  • MyPyC компилирует полностью типизированный код Python в расширение C на основе mypy.

  • 2c-python — статический компилятор Python-to-C, очевидно переводящий байт-код CPython в C

  • Compyler — попытка «транслитерировать байт-код в сборку x86» (сейчас отказано)

  • GCC Python Front-End — текущая работа по компиляции кода Python в инфраструктуре GCC

  • Pyc — выполняет статический анализ для компиляции программ Python, использует методы, аналогичные Shed Skin

  • Shed Skin — Python-to -Компилятор C ++, ограниченный неявно статически типизированным подмножеством языка, для которого он может автоматически выводить эффективные типы посредством анализа всей программы

  • unPython — компилятор Python в C, использующий аннотации типов

  • VOC — транспилятор, который преобразует байт-код Python в байт-код Java.

Числовые ускорители

  • Numba — оптимизирующий компилятор времени выполнения с поддержкой NumPy для Python

  • Pythran — опережающий компилятор для подмножества Python с акцентом на научные вычисления

  • Copperhead — чисто функциональный Python для параллельных данных, компилируется в несколько -core и GPU backends

  • Parakeet — компилятор времени выполнения для числового подмножества Python

Похожие, но разные языки

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

  • Alore — компилируемый язык с необязательной типизацией и синтаксисом, вдохновленным Python / Ruby; планируется построить мост Алоре-Питон; усилия по разработке были перенесены на mypy (см. ниже)

  • Boo

  • Cobra

  • Converge — вдохновленный Python, Haskell, Icon и Smalltalk, предоставляет макросы, которые можно оценить во время компиляции

  • Delight — на основе языка программирования D

  • Genie — на тех же основах (Gtk +, GNOME), что и язык программирования Vala, предположительно вдохновленный Boo

  • mypy — Python с необязательной статической типизацией и некоторым локальным типом вывод

  • Mython — расширяемый вариант языка программирования Python, очевидно, интерфейс для CPython

  • Nim — статически типизирован, компилируется в C, C ++ и JS, имеет параметризованные типы, макросы и т. д.

  • Pythonect — язык, ориентированный на поток данных, использующий базовый синтаксис выражений Python, реализованный на Python и интегрированный с th e Среда Python

  • Roket Secured Language — интерпретатор Python-подобного языка для приложений, где требуется «ограниченное выполнение Python»

  • Serpent — вдохновлен Python, поддерживает сборку мусора в реальном времени и несколько виртуальных машин в отдельные потоки (дополнительная информация)

  • Serpentine — язык с синтаксисом, подобным Python для виртуальной машины Dalvik

  • Trylon — в значительной степени вдохновлен Smalltalk

  • Wirbel — компилируемый язык с ограничениями, аналогичными Shed Skin ( статически типизированные имена, списки не могут смешивать элементы разных типов), более не активно разрабатываются по состоянию на 21.07.2011

Сравнения:

Тематические руководства

(Fun) Препроцессоры Python

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

Академические проекты

Реализации и компиляторы Python

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


Эта страница призвана заменить одну, ранее поддерживаемую как «личные заметки Кэмерона Лэйрда о разновидностях реализации Python». Также представляет интерес IntegratingPythonWithOtherLanguages, который, среди других вариантов, упоминает встраивания Python в другие языки.


Категория Реализации

Программирование на Python — Викиучебники, открытые книги для открытого мира

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

Существует несколько реализаций Python 3 (и старше): стандартная реализация, написанная на C, и PyPy, JIT-скомпилированная версия, написанная на RPython — подмножестве Python. Только для Python 2 есть Jython, написанный на Java, и IronPython, написанный на C # для среды .NET.

Intro [править | править источник]

A доступна версия для печати программы Python Programming. (редактировать)

A Доступна PDF-версия . (информация)

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

Обзор
Получение Python
Настройка
Интерактивный режим
Самопомощь

Основы [править | править источник]

Создание программ на Python
Переменные и строки
Базовый синтаксис
Последовательности (строки, списки, кортежи, словари, наборы)
Типы данных

Номера
Струны
Списки
Кортежи
Словари
Наборы
Базовая математика — дублирует «Операторы»
Операторы
Поток управления
Контроль принятия решений

Условные утверждения
Петли
Функции
Объем
Вход и выход
Файлы
Текст
Модули
Классы
Исключения
Ошибки
Исходная документация и комментарии
Идиомы
Управление пакетами
Python 2 vs.Python 3

Продвинутый [править | править источник]

Декораторы
Менеджеры контекста
Отражение
Метаклассы
Пространство имен
Производительность
PyPy
Cython
Однострочные символы командной строки
Советы и хитрости

Модули [править | править источник]

Стандартные библиотечные модули [править | править источник]
Стандартная библиотека
Регулярное выражение
Внешние команды
Инструменты XML
Электронная почта
Нарезание резьбы
Розетки
Программирование с графическим интерфейсом пользователя
Ткинтер
Интерфейс CGI
Веб-программирование WSGI
Извлечение информации с веб-страниц
Интернет
Сети
Math
Сторонние модули [править | править источник]
Базы данных — следует объединить со следующей главой
Программирование баз данных
число
Программирование игр на Python
4 квартал
Dbus
pyFormex
матплотлиб
Сортированные типы контейнеров
Excel
MS Word
Написание модулей расширения [править | править источник]
Расширение с помощью C
Расширение с помощью C ++
Расширение с помощью Pyrex
Расширение ctypes
Расширение с помощью Perl

Приложения [править | править источник]

Популярность
Ссылки
Авторы
Библиотечные модули
Условные обозначения

Викиверситет имеет учебные материалы по Python

  • Учебное пособие для не программистов по Python 2.6
  • Руководство для не программистов по Python 3
  • Python как язык сценариев в GIMP

Программирование — Scratch Wiki

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

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

Программирование с нуля

Процесс скриптов в Scratch.

В Scratch программирование часто называют «написанием сценария», потому что сценарий представляет собой стек или комбинацию блоков. Блоки — это код проекта, то есть они говорят ему, что делать. Блоки представлены в формате JSON, который интерпретируется на языке ActionScript. Формально сценарий — это программа, которая интерпретируется, а не компилируется. [1]

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

Текстовое программирование

Программирование в Greenfoot, Java IDE

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

  • C ++
  • Ява ​​
  • JavaScript
  • Python
  • Схема

Требуется ли расширенное программирование?

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

См. Также

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

Файлы cookie

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

Programming — Wikiquote

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

Цитаты по программированию на

[править]

  • Чем чище и приятнее программа, тем быстрее она будет работать. А если этого не произойдет, это будет легко сделать быстро.
  • Дважды меня спрашивали: «Молитесь, мистер Бэббидж, если вы введете в машину неправильные числа, получатся ли правильные ответы?» В одном случае этот вопрос задавал член верхней, а в другом — нижней палаты. Я не могу правильно понять, какая путаница идей может вызвать такой вопрос.
    • Чарльз Бэббидж, Отрывки из жизни философа (1864), гл. 5: «Разностная машина № 1»
  • Игра с указателями похожа на игру с огнем. Огонь, пожалуй, самый важный инструмент, известный человеку. При осторожном использовании огонь приносит огромную пользу; но когда огонь выходит из-под контроля, приходит беда.
    • Джон Барнс, Программирование на Аде 2012 , Cambridge University Press, 2014, стр. 189
  • Программист, как и поэт, работает лишь немного в стороне от чистой мысли.Он строит свои воздушные замки из воздуха, создавая напряжение воображения. Немногие средства творчества настолько гибки, их так легко отшлифовать и переработать, так легко можно реализовать грандиозные концептуальные структуры …
    Однако программная конструкция, в отличие от слов поэта, реальна в том смысле, что она движется и работает, производя видимые выходы отделены от самой конструкции. […] Магия мифов и легенд сбылась в наше время. Человек набирает правильное заклинание на клавиатуре, и экран дисплея оживает, показывая вещи, которых никогда не было и не могло быть.
  • Программирование компьютеров было таким увлекательным занятием. Вы создаете свою собственную маленькую вселенную, а затем она выполняет то, что вы ей приказываете.
    • Винт Серф, «отец Интернета», цитируется в интервью «Your Life: Vinton Cerf» с Дэвидом Франком в бюллетене AARP (декабрь 2016 г., том 57, № 10, стр. 28).
  • Компьютерные программы являются наиболее сложными, тонко сбалансированными и тонко переплетенными из всех продуктов человеческого труда на сегодняшний день.Это машины с гораздо большим количеством движущихся частей, чем у любого двигателя: части не изнашиваются, но они взаимодействуют и трутся друг о друга способами, которые сами программисты не могут предсказать.
    • Джеймс Глейк (2002) Что только что произошло: хроника с информационного фронтира . п. 19 цитируется по: Джордж Степанек (2005) Секреты программного проекта: почему программные проекты терпят неудачу . п. 10
  • Прикладное программирование — это гонка между разработчиками программного обеспечения, которые стремятся создавать программы, защищенные от идиотов, и вселенной, которая стремится производить более крупных идиотов.Пока что Вселенная побеждает.
    • Рик Кук, The Wizardry Compiled (1989) Ch. 6
  • Эффективное использование его способностей к абстракции следует рассматривать как одно из важнейших направлений деятельности компетентного программиста.
  • Компьютеры — это попытка человека сконструировать кошку: она делает все, что хочет, когда хочет и редко когда-либо в нужное время.
  • Если вы солгаете компьютеру, он вас достанет.
  • Не существует языка программирования, независимо от его структуры, который не позволял бы программистам создавать плохие программы.
    • Ларри Флон (1975) «Об исследованиях в области структурного программирования». СИГПЛАН Нет. , 10 (10), pp.16–17
  • Если я спрошу другого профессора, что он преподает на вводном курсе программирования, отвечает ли он гордо «Паскаль» или робко «Фортран», я знаю, что он обучение грамматике, набору семантических правил и некоторым готовым алгоритмам, позволяя студентам самостоятельно открывать для себя какой-либо процесс проектирования.
  • Независимо от того, насколько хороша демонстрация на репетиции, когда вы делаете ее перед живой аудиторией, вероятность безупречной презентации обратно пропорциональна количеству людей, которые смотрят, в зависимости от суммы денег. вовлеченный.
  • [Это] напоминает мне цитату из того, что всякий раз, когда он пытался объяснить программисту логическую структуру языка программирования, это было похоже на кошку, пытающуюся объяснить рыбе, что значит быть мокрым. .
  • Есть два способа создания дизайна программного обеспечения. Один из способов — сделать его настолько простым, чтобы явно не было недостатков. А другой способ — сделать его настолько сложным, чтобы не было явных недостатков.
  • Для меня программирование — это больше, чем важное практическое искусство. Это также гигантское начинание в области основ знания.
    • Грейс Хоппер, цитируется в Management and the Computer of the Future (1962) Sloan School of Management, p.277
  • Программирование: когда идеи превращаются в реальность.
  • Большая часть программного обеспечения сегодня очень похожа на египетскую пирамиду с миллионами кирпичей, сложенных друг на друга, без структурной целостности, но просто созданной грубой силой и тысячами рабов.
  • Преждевременная оптимизация — корень всех зол.
    • Дональд Кнут, «Структурированное программирование с помощью операторов Goto». Computing Surveys 6 : 4 (декабрь 1974 г.), стр.261–301, §1.
    • Преждевременная оптимизация — это корень всех зол (или, по крайней мере, большей их части) в программировании.
    • Кнут называет это «изречением Хора» 15 лет спустя в «Ошибках Tex», Software — Practice & Experience 19 : 7 (июль 1989 г.), стр. 607–685. Однако приписывание к К. А. Р. Хору сомнительно. [2]
      • Все три статьи перепечатаны в Knuth, Literate Programming , 1992, Center for the Study of Language and Information ISBN 0937073806
  • Самым важным в языке программирования является имя.Язык не будет успешным без хорошего имени. Недавно я придумал очень хорошее название, а теперь ищу подходящий язык.
  • «Современные компьютеры предназначены в первую очередь для решения заранее сформулированных задач или обработки данных в соответствии с заранее определенными процедурами. Ход вычислений может зависеть от результатов, полученных во время вычислений, но все альтернативы должны быть предусмотрены заранее. … Требование предварительной формулировки или предварительного определения иногда не является большим недостатком.Часто говорят, что программирование для вычислительной машины заставляет мыслить ясно, что оно дисциплинирует мыслительный процесс. Если пользователь может заранее продумать свою проблему, симбиотическая ассоциация с вычислительной машиной не нужна.
    • Дж. К. Р. Ликлайдер (1960) Симбиоз человека и компьютера | journal = Транзакции о человеческом факторе в электронике
  • Один на миллион — в следующий вторник.
  • У того, кто в молодости не взломал ассемблер, нет сердца.У того, кто поступает по-взрослому, нет мозгов.
    • Джон Мур [ цитата необходима ] , играя на французском, говоря, что «тот, кто не социалист в 20 лет, не имеет сердца. Тот, кто в 40 лет является социалистом, не имеет мозга».
  • Языки формируют то, как мы думаем, или нет.
  • Компьютерное программирование — это невероятное развлечение. Как и музыка, это умение, которое происходит из неизвестного сочетания врожденного таланта и постоянной практики. Как и рисунок, он может иметь множество целей — коммерческих, художественных и чисто развлекательных.Программисты имеют заслуженную репутацию тех, кто много работает, но им редко приписывают творческую лихорадку. Программисты говорят о разработке программного обеспечения на выходных, в отпуске и за обедом не потому, что им не хватает воображения, а потому, что их воображение открывает миры, недоступные другим.
  • Лучшая книга по программированию для непрофессионала — Алиса в стране чудес , но это потому, что это лучшая книга по любому предмету для непрофессионала.
  • Компьютерные науки смущают компьютер.
    • Алан Перлис, «Эпиграммы по программированию»
  • Продолжительный контакт с компьютером превращает математиков в клерков и наоборот.
    • Алан Перлис, «Эпиграммы по программированию»
  • Структурированное программирование поддерживает закон исключенной путаницы.
    • Алан Перлис, «Эпиграммы по программированию»
  • Есть два способа писать безошибочные программы; работает только третий.
    • Алан Перлис, «Эпиграммы по программированию»
  • Когда кто-то говорит: «Мне нужен язык программирования, на котором мне нужно только говорить то, что я хочу сделать», дайте ему леденец.
  • Программное обеспечение и соборы во многом похожи — сначала мы их строим, а потом молимся.
    • Сэм Редвин [Труды 4-го Международного семинара по программным процессам, Моретонхэмпстед, Девон, Великобритания, 11–13 мая 1988 г., Компьютерное общество IEEE]
  • Зачем беспокоиться о подпрограммах, если можно быстро печатать?
  • Инженер Netscape, имя которого не может быть названо, однажды передал указатель на JavaScript, сохранил его в виде строки, а затем передал обратно в C, убив 30 человек.
  • Настоящие программисты всегда путают Рождество и Хэллоуин, потому что 31 октября == 25 декабря.
  • Любой, кто хоть немного связан с компьютерами, согласен с тем, что объектно-ориентированное программирование (ООП) — это волна будущего. Возможно, каждый 50 из них действительно пытался использовать ООП, что во многом связано с его популярностью.
    • Стив Стейнберг, «Список шумихи», Wired , Vol. 1, No. 1, март / апрель 1993 г.,
  • Не позволяйте себе увлекаться комментариями… они могут ввести в заблуждение.
  • Однажды моя дочь зашла, посмотрела через мое плечо на какой-то код Perl 4 и спросила: «Что это, ругань?»
  • Второй закон Вайнберга: если строители строят здания так, как программисты пишут программы, то первый появившийся дятел уничтожит цивилизацию.
    • Джеральд Вайнберг цитируется в: Murali Chemuturi (2010) Освоение обеспечения качества программного обеспечения: передовой опыт, инструменты и методы для разработчиков программного обеспечения . п.ix
    • Ранее приписывался Деннису Холлу из Лаборатории Лоуренса в Беркли, в книге Клиффорда Столла «Яйцо кукушки» (1989), стр. 89. «Если бы люди строили дома так, как мы пишем программы, первый дятел уничтожил бы цивилизацию».
  • Просить эффективности и приспособляемости в одной программе — все равно что просить красивую и скромную жену. Хотя известно, что красота и скромность присущи одной и той же женщине, нам, вероятно, придется довольствоваться тем или другим.По крайней мере, это лучше, чем ничего.
  • Все проблемы в информатике можно решить с помощью другого уровня косвенного обращения.
  • Основная деятельность программирования — это не создание новых независимых программ, а интеграция, модификация и объяснение существующих.
    • Терри Виноград (1991) «За пределами языков программирования», в Искусственный интеллект и разработка программного обеспечения , изд. Дерек Партридж, стр. 317
  • Закон Завинского: каждая программа пытается расширяться до тех пор, пока не сможет читать почту.Те программы, которые не могут расширяться, заменяются теми, которые могут.

Клайв Томпсон, «Тайная история женщин в программировании»,

The New York Times , (13 февраля 2019 г.) [править]

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

  • Сейчас может показаться странным, что они были счастливы взять на себя случайного кандидата без абсолютно никакого опыта в компьютерном программировании. Но в то время почти ни у кого не было опыта написания кода. Дисциплины еще не существовало; в нем было исчезающе мало курсов колледжа и не было специальностей.(В Стэнфорде, например, не было кафедры информатики до 1965 года.) Поэтому вместо этого учреждения, которым требовались программисты, просто использовали тесты способностей для оценки способности абитуриентов мыслить логически.
  • Почти 200 лет назад первой женщиной, которую мы сейчас назвали бы программистом, была женщина: леди Ада Лавлейс. Будучи молодым математиком в Англии в 1833 году, она встретила Чарльза Бэббиджа, изобретателя, который изо всех сил пытался разработать то, что он назвал аналитической машиной, которая была бы сделана из металлических шестерен и способна выполнять команды if / then и сохранять информацию в памяти.Очарованный, Лавлейс осознал огромный потенциал такого устройства. Она поняла, что компьютер, который может изменять свои собственные инструкции и память, может быть гораздо больше, чем механический калькулятор. Чтобы доказать это, Лавлейс написал то, что часто считают первой компьютерной программой в истории, — алгоритм, с помощью которого аналитическая машина вычисляла последовательность чисел Бернулли. (Она не стеснялась своих достижений: «Этот мой мозг — нечто большее, чем просто смертный; как покажет время», — написала она однажды.)
  • Программирование

  • [A] вызвало первый всплеск культурного внимания, так много студентов спешили поступить на факультеты информатики, что университеты столкнулись с проблемой предложения: у них не хватало профессоров, чтобы обучать всех. Некоторые добавляли препятствия, курсы, которые студенты должны были пройти, прежде чем они могли быть приняты на специальность информатика. Наказание за рабочие нагрузки и занятия, которые охватывали материал с молниеносной скоростью, отсеивали тех, кто не понял его сразу. Все это способствовало созданию среды, в которой, скорее всего, справились бы те студенты, которые уже были знакомы с программированием — в основном молодые люди.«Каждый раз, когда в поле зрения вводятся эти фильтры на входе, это, в частности, снижает участие женщин», — говорит Эрик С. Робертс, давний профессор компьютерных наук, ныне работающий в Рид-колледже, который первым изучил этот вопрос. проблема и назвал это «кризисом мощности».
  • В 1991 году Эллен Спертус, ныне работающая в области информатики в колледже Миллс, опубликовала отчет об опыте женщин на уроках программирования. Она составила каталог ландшафта, населенного мужчинами, которые хихикали по поводу предполагаемой неполноценности женщин, и профессорами, которые говорили студенткам, что они «слишком красивы», чтобы изучать электротехнику; Когда некоторых мужчин в Карнеги-Меллон попросили перестать использовать изображения обнаженных женщин в качестве обоев рабочего стола на своих компьютерах, они сердито пожаловались, что это цензура, подобная той, которую практикуют «нацисты или аятолла Хомейни».
    Когда программирование закрывало двери для женщин в академических кругах, аналогичная трансформация происходила в корпоративной Америке. Появление того, что можно было бы назвать «культурным соответствием», изменило то, кто и почему при приеме на работу. Менеджеры начали выбирать программистов не столько из-за способностей, сколько из-за того, насколько хорошо они соответствуют типу личности: резкому, отстраненному мужчине-ботанику.
    На самом деле сдвиг начался намного раньше, еще в конце 60-х, когда менеджеры осознали, что мужчины-программисты разделяют растущую тенденцию быть антисоциальными изоляторами, превознося свои тайные технические знания над знаниями своих боссов.Программисты были «часто эгоцентричны, слегка невротичны», как выразился Ричард Брэндон, известный аналитик компьютерной индустрии, в своем выступлении на конференции 1968 года, добавив, что «частота появления бород, сандалий и других симптомов жесткого индивидуализма или нонконформизма заметно больше среди этой демографической группы ».
    В дополнение к тестированию на логическое мышление, как во времена Мэри Аллен Уилкс, компании начали использовать личностные тесты, чтобы выбрать именно такие качества язвительного одиночки. «Это стало очень сильным нарративом», — говорит Натан Энсменгер, профессор информатики Университета Индианы, изучавший этот переход.Охота на этот тип личности исключала женщин. Менеджеры могут пожать плечами и принять неопрятного, небритого и угрюмого мужчину, но они не потерпят женщину, которая ведет себя так же. Программирование все чаще требовало допоздна, но менеджеры утверждали, что слишком небезопасно, чтобы женщины работали в предрассветные часы, поэтому они запрещали им задерживаться допоздна с мужчинами.

См. Также [править]

Внешние ссылки [править]

faq — learnprogramming

Добро пожаловать

Добро пожаловать в / r / learnprogramming.Это список некоторых из наиболее часто задаваемых вопросов на этом сабреддите. Если ваш вопрос относится к одному из этих, на него, вероятно, уже много раз ответили, и вам следует попробовать использовать средства поиска Reddit (посмотрите на боковой панели), чтобы найти предыдущие ответы, прежде чем публиковать здесь.


Начало работы

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

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

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

  1. Найдите небольшую проблему или проект, которым вы хотите заняться. Вы можете попробовать создать инструмент для решения небольшой проблемы в своей жизни или попробовать реализовать интересную программу с нуля.Этот проект поможет мотивировать вас продолжать учиться программировать и даст вам возможность практиковаться в применении того, что вы изучаете.
  2. Проведите небольшое исследование, чтобы выяснить, какой язык программирования наиболее подходит для вашего проекта. (Рекомендации см. Ниже)
  3. Найдите единственный высококачественный ресурс для начинающих по этому языку и подпишитесь на него. (Опять же, см. Ниже)
  4. Дополните этот ресурс поиском в Google и задавая вопросы
  5. Со временем завершите несколько нетривиальных проектов, используя этот язык.

Вот некоторые вещи, которых мы рекомендуем избегать:

  1. Не просто пассивно следите за любым ресурсом, который вы используете. Выполняйте упражнения и домашние задания; практика — это абсолютно необходимая часть обучения программированию.
  2. Избегайте ненужного переключения между языками программирования; выберите один и придерживайтесь его. Это потому, что программирование — это, в конечном счете, решение проблем, а не языки программирования. Научиться решать проблемы сложно, и это навык, который можно отточить только на практике.Каждый раз, когда вы меняете язык, вы теряете время, которое могли бы потратить на практику, применяя полученные знания, чтобы улучшить свои навыки решения проблем.
  3. Не прекращайте учиться, когда закончите обучение. Программирование — это область, в которой всегда есть чему поучиться.

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

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

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

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

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

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

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

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

Где найти хорошие учебные ресурсы?


Как улучшить

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

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

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

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

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

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

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

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

  • Постоянно занимаюсь

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

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

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

  • Узнайте, как разложить проблемы

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

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

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

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

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

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

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

    См. FAQ: Как я могу улучшить свои навыки преобразования задач / задач в программы (Алгоритмическое мышление)? для получения дополнительных предложений.

  • Научитесь систематизировать

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

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

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

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

    Не «делайте» случайное дерьмо, пока вам не повезет — будьте систематичны в этом.

  • Не расстраивайтесь из-за необходимости отладки или Google

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

    Отладка (и борьба!) — важная часть кодирования. По возможности старайтесь избегать стресса или нетерпеливости. Отнеситесь к этому как к интересной охоте или головоломке!

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

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

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

  • Не бойтесь обращаться за помощью

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

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

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

    См. Наше руководство по заданию вопросов для получения дополнительной информации.

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

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

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

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

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

Идеи проекта:

Если вы пытаетесь создать проект, вот несколько списков идей, на которые вы можете ссылаться для вдохновения:

  • Большие списки:
  • Идеи проектов, сопровождаемые учебными пособиями или описаниями
  • Тематические проекты:
  • Другое:
    • http: // изящно.stanford.edu/ — Примечание: этот веб-сайт больше предназначен для учителей, которые ищут творческие идеи для заданий для своих вводных курсов по программированию, но он может служить хорошим источником вдохновения для самообучающихся.

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

  • Утилиты командной строки (ls, wget, curl и т. Д.)
  • Текстовый редактор
  • IDE
  • Средство просмотра изображений
  • Офисный пакет (что-то вроде Microsoft Office или Libreoffice)
  • Язык программирования (напишите интерпретатор или компилятор)
  • Веб-браузер
  • База данных (реляционная или нереляционная)
  • Веб-сервер
  • Система контроля версий

Практические упражнения:

Вот несколько хороших сайтов / ресурсов для начала:

  • На Reddit
  • Общие упражнения:
  • Тематические упражнения:
    • Project Euler — фокусируется на задачах, связанных с математикой (т.е. теория чисел, простые числа, системы счисления), предназначенные для решения программным способом.
    • CodeByMath — как Project Euler, но с возможно более простыми проблемами
    • Розалинд — имеет проблемы с поворотом биоинформатики.
  • Упражнения по соревновательному программированию:
  • Зависит от языка:
    • P-99 и L-99 — Набор из 99 основных задач, разработанных, чтобы помочь вам овладеть навыками пролога и лиспа соответственно.
    • 4Clojure — Набор упражнений по программированию, специально предназначенных для Clojure, варианта Lisp.
  • Другое:

Как я могу улучшить свои навыки преобразования задач / задач в программы (алгоритмическое мышление)?

Это один из наиболее часто задаваемых вопросов.

Общий ответ: Написанием большого количества программ.

Однако есть простое упражнение, которое поможет вам развить этот навык:

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

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

Я не могу придумать крутых новых идей для проекта. Мне просто не хватает творчества? Чем вдохновляются другие программисты?

Для начала, вот хорошая цитата Чака Клоуса о (не) ожидании вдохновения:

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

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

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

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

  • Попробуйте заново реализовать существующий проект. Так же, как начинающие музыканты начинают с каверов на песни, написанные другими людьми, было бы неплохо начать с повторного внедрения программ, созданных другими.Например, популярны 2D-аркадные игры — такие игры, как «Pong» или «Space Invaders», вполне подойдут новичкам и все равно многому вас научат. В FAQ есть ссылки на другие идеи проектов.
  • Попробуйте связать программирование с другим хобби. Программирование — очень полезный навык, поскольку вы можете применить его к широкому разнообразным областям, даже к тем, которые совершенно не связаны с информатикой. Например, если вас интересует политика, вы можете попробовать проанализировать пулы голосования и тенденции, если вас интересует музыка, вы можете попробовать написать цифровую деку, если вас интересует спорт, вы можете попробовать написать трекер фэнтези-футбола или предсказатель, если у вас есть бизнес, вы можете написать что-нибудь, что поможет вам отслеживать запасы… Здесь полезно иметь интересы за пределами информатики.
  • Постарайтесь отслеживать то, что вас раздражает. Если вы обнаружите в своей жизни что-то, что вам не нравится делать или что вам кажется повторяющимся, спросите себя, можно ли это что-то автоматизировать. Чтобы получить представление о том, что компьютеры могут автоматизировать, см. Раздел «Автоматизация скучных вещей». В этом руководстве используется Python, но вы можете делать все, что в нем упоминается, на любом языке программирования. Или, возможно, попробуйте поискать в Google «учебник по домашней автоматизации», чтобы узнать больше о физических решениях.

Где я могу найти примеры хорошего кода и проекты для изучения?

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

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

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

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

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

  • Что должен знать каждый специалист по информатике — Мэтт Майт

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

  • Диплом по информатике с открытым исходным кодом — Общество открытого исходного кода

    Дает более конкретную дорожную карту со ссылками в основном на курсы Coursera по каждой теме.

  • Обучай себя CS

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

  • Самообучающаяся программа по современным компьютерным наукам

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

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

Как мне начать и закончить большой проект?

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

Часто на этом этапе помогает Rubber Duck Debugging .Объяснение проблемы или концепции кому-то (или чему-то), у кого нет никаких знаний или понимания, помогает получить более глубокое понимание проблемы. Поступая так, нужно гораздо больше думать о проблеме, что приведет к более глубокому пониманию.

Секунда: Не переходите сразу к компьютеру!

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

Это приводит нас к следующему.

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

Все в мире состоит из более мелких деталей.

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

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

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

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

Не смотрите на финальную картину в целом, она вас ошеломит. Беритесь за одну отдельную часть за раз.

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

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

Как мне за ним поспевать?

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

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

Дополнительная консультация:

  • Сначала полностью забудьте о коде и полностью представьте программу с точки зрения пользователя.
  • Напишите список функций, которые должна выполнять программа.
  • Напишите список функций, которых НЕ БУДЕТ иметь программное обеспечение. (Это убережет вас от лишних функций со словами «было бы здорово, если бы он мог это сделать …». Слишком большие программы — основная причина, по которой люди отказываются от них через несколько недель.)
  • Напишите несколько рисунков того, какие экраны увидит пользователь, и их рабочий процесс. Это не чертежи или не для того, чтобы показать, как они будут выглядеть, это больше для «сначала пользователь находится на этой странице, затем они могут перейти на эту страницу».Набросок поможет вам не забыть о больших вещах.
  • Узнайте, как использовать git, и получите учетную запись github. Это отлично подходит для резервного копирования, а также для проверки кода. (Игнорируйте чьи-либо комментарии, касающиеся стиля кода, в 99% случаев это непродуктивные дебаты.)

Общие опасения и опасения

Я слишком стар, чтобы писать код?

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

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

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

Что я должен выучить в первую очередь?

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

Единственные реальные предпосылки:

  • Вы умеете печатать (если только вы не используете язык с перетаскиванием, например Scratch)
  • У вас есть компьютер
  • Вы умеете гуглить / искать ответы самостоятельно

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

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

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

Должен ли я хорошо разбираться в математике?

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

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

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

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

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

В любом случае, если вы не очень хорошо разбираетесь в математике, вы определенно можете учиться и совершенствоваться! В конце концов, вы, по-видимому, тоже еще не очень хороши в программировании, но вот и вы, учитесь программировать.Посетите Khan Academy, и вы найдете здесь бесплатные уроки, начиная с основ математики. Также см. / R / learnmath для получения дополнительных ресурсов.

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

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

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

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

ДА . Вот ветка, в которой тема обсуждается с разных сторон. Таких еще много.

Трудно ли программировать?

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

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

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

Нормально ли для новичка проблемы с задачами и упражнениями?

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

Абсолютно да!

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

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

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

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

  1. Вы не бросаете вызов самому себе
  2. Вы не заставляете себя изучать что-то по-настоящему новое
  3. Вы не заставляете себя действительно убедиться, что понимаете материал, пытаясь применить его

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


Вопросы по обучению

Что значит «знать язык» или «уметь программировать»?

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

Я только начал изучать язык X. Стоит ли мне начинать изучать язык Y?

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

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

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

  1. Основы большинства языков очень похожи.Например, большинство языков обрабатывают операторы if примерно одинаково. Тратить время на изучение двух разновидностей по существу одного и того же материала не обязательно является хорошим использованием времени и потенциально может сбить с толку новичка.
  2. Самая сложная часть обучения программированию — это , а не изучение того, как работает язык программирования: это обучение тому, как решать задачи с помощью кода. Итак, вы хотите максимизировать количество времени, которое вы тратите на практику решения проблем с помощью кода, вместо того, чтобы тратить его на изучение более специфичных для языка мелочей / необходимость тратить силы ума на отслеживание разницы между языками.
  3. Гораздо легче выучить второй язык, если вы овладеете первым языком и приобретете хорошие навыки решения проблем.

Из этого правила есть некоторые исключения. Выучить второй язык вместе со своим первым — нормально, если:

  1. … второй язык — это не язык программирования. Например, было бы хорошо выучить языка разметки (например, HTML или CSS) вместе с языком программирования (например, C, C ++, C #, Java, JavaScript, Python, Ruby).
  2. … это необходимо для проектов, над которыми вы заинтересованы. Важно сохранять мотивацию к продолжению обучения, и если это означает изучение двух языков программирования одновременно, пусть будет так.
  3. … если у вас есть преданный учитель или наставник, который будет направлять вас. Компетентные учителя и наставники могут значительно упростить ваш учебный процесс, что с лихвой компенсирует любую неэффективность.

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

Как я могу получить / сохранить мотивацию к изучению программирования?

Отъезд / r / GetMotivated / и / r / GetDisciplined

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

Вот несколько прошлых обсуждений по этой теме:


Как начать работу с X?

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

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

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

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

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

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

Обязательно ознакомьтесь с часто задаваемыми вопросами / r / gamedev, прочтите руководство / r / gamedev «Как приступить к работе» и выполните поиск прошлых тем на / r / gamedev и / r / learnprogramming.

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

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

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

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

Как мне начать создавать мобильные приложения / приложения для Android / приложения для iOS / приложения для Windows phone?

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

  • Приложения Android кодируются в основном на Kotlin или Java — дополнительную информацию см. В разделе часто задаваемых вопросов / r / androiddev.
  • Приложения iOS

  • написаны либо на Objective-C, либо на Swift — дополнительную информацию см. На боковой панели / r / iosprogramming и их вики (размещенных на Github).
  • Приложения

  • для Windows Phone написаны на C #, Visual Basic или Javascript — дополнительные сведения см. На боковой панели / r / WPDev.

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

См. Список ресурсов по разработке мобильных приложений для получения дополнительной информации. Вот прошлый тред по теме: http: // redd.it / 352f09

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

Как мне автоматизировать вещи?

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

Другой жизнеспособной кроссплатформенной альтернативой является Python. Автоматизация скучных вещей с помощью Python — отличный учебный ресурс.

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


Какие самые лучшие …

/ u / thekodols составил список из более чем 150 «лучших» вопросов и ответов в этом посте, охватывающий различные языки, инструменты и темы.


Терминология и словарь

В чем разница между информатикой, компьютерной инженерией, программной инженерией, программированием и кодированием?

CS / CE / SE и программирование / кодирование

Информатика (CS), компьютерная инженерия (CE), программная инженерия (SE), программирование и кодирование — это термины, которые взаимосвязаны, но тонко отличаются друг от друга, что часто затрудняет их различение для новичков.

Первое различие, которое вы должны сделать, — это различать CS / CE / SE и программирование / кодирование. CS, CE и SE — это все областей обучения . Сказать «Я изучаю информатику» было бы похоже на «Я изучаю химию» или «Я изучаю литературу». Напротив, программирование и кодирование — это действий, — это то, чем вы занимаетесь. Используя метафору, изучение CS / CE / SE было бы похоже на изучение теории музыки, а изучение программирования / программирования было бы похоже на обучение игре на определенном инструменте.

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

Еще одно отличие состоит в том, что, хотя CS / CE / SE — это то, что вы можете изучать, обучение программированию — это то, что приходит только через практику. Фактически, большинство университетов и школ будут официально учить один язык для обучения основам кодирования, а затем сосредоточиться на обучении CS, CE и SE, а вам останется научиться программировать, практикуясь и выполняя домашние задания.

CS против CE против SE

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

Более подробный обзор можно найти здесь: http://www.reddit.com/r/learnprogramming/comments/2k569h/eli5_computer_science_vs_software_engineering_vs/

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

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

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

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

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

TL; DR — C, C ++, Objective-C и C # — это , а не разных разновидностей одного и того же языка.

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

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

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

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

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

Java связана с JavaScript так же, как виноград связана с грейпфрутом.

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

Классы и интерфейсы

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

/ u / donsagiv написал отличный и простой ELI5 (ссылка на оригинальный комментарий):

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

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

Бойскаут — это класс, а значок плавания — это интерфейс, который он реализует. .

Каждый объект класса, экземпляр которого создается, имеет одинаковые функции (например, посещение периодических собраний, униформы и т. Д.). Если класс реализует интерфейс, класс ДОЛЖЕН иметь возможность выполнять функции, указанные в интерфейсе (например, плавание, гребля на каноэ). Некоторые классы нельзя использовать в определенных частях вашего кода, если они не реализуют этот интерфейс (например, для сплава по реке требуются значки для плавания). Изменить: интерфейс — это абстракция, поэтому его нельзя создать.(Значок сам по себе не умеет плавать.) Подводя итог, можно сказать, что интерфейс — это контракт, которому должен следовать класс, чтобы класс его реализовал.

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

Интерфейсы

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

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


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

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

Два самых популярных DVCS — это git и Mercurial; которые вы используете, в основном зависит от личных предпочтений, но мы настоятельно рекомендуем вам использовать один из них.

Итак, как мне начать работу с контролем версий?

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

Хорошее краткое руководство по Mercurial находится здесь.

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

Что такое IDE? Должен ли я использовать один?

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

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

  • Использование IDE означает, что вам не нужно столько знать о процессе разработки, не нужно использовать интерфейс командной строки и не нужно настраивать эти инструменты для правильной совместной работы; IDE предлагает быстрый способ создания вашего кода и может даже написать часть кода за вас!

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

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


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

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

У многих новичков часто возникает вопрос, какую операционную систему им следует использовать — Windows, Mac или Linux.

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

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

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

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

Существует ряд хороших вариантов выполнения кода C # на других платформах, но некоторые инструменты Microsoft и .NET по-прежнему в первую очередь ориентированы на Windows.

Хотя вы можете разрабатывать приложения для Mac и iOS на любом компьютере, вы должны использовать Xcode на компьютере Mac для компиляции и отправки приложения в магазин приложений.

Наконец, стоит также отметить, что вы не «заблокированы» после того, как выбрали операционную систему — всегда можно запустить виртуальную машину (ВМ) с другой установленной операционной системой. Например, если у меня есть компьютер с Windows, было бы очень легко настроить виртуальную машину Linux, которую я мог бы использовать, не опасаясь, что она помешает моей существующей ОС Windows.

Какой компьютер / ноутбук мне выбрать?

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

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

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

  • Процессор Intel i5 (3,0+ ГГц)
  • 4+ ГБ RAM
  • Жесткий диск 200+ ГБ
  • (дополнительно) Твердотельный накопитель

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

Могу ли я устроиться на работу по программированию без степени в области компьютерных наук? Или вообще без какой-либо степени?

Да и да.

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

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

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

Этот вопрос снова в основном выходит за рамки этого субреддита — вопросы, связанные с карьерой, лучше задавать в / r / cscareerquestions и обращаясь к их обширной вики. Также см. / R / cscareerquestionsEU, если вы живете в ЕС.

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

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

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

Этап 1. Составьте выдающееся резюме

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

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

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

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

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

Некоторые дополнительные примечания:

  • Ваши проекты не обязательно должны быть визуально яркими.Большинство рекрутеров сосредоточатся на вашем резюме (и часто будут читать только ваше резюме!), А рекрутеры с техническим образованием поймут, что не все интересные проекты имеют или нуждаются в удобном интерфейсе. Что, вероятно, более важно, вы можете честно описать свой проект в своем резюме таким образом, чтобы продемонстрировать сложность проделанной вами работы.

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

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

  • Некоторые люди также посещают учебные курсы отчасти для того, чтобы ускорить процесс создания соответствующего резюме / портфолио. Просто не забудьте изучить вопрос, прежде чем отправиться на буткемп: некоторые из них хороши, а некоторые — откровенное мошенничество. Прежде чем участвовать в каком-либо одном учебном лагере, попробуйте связаться с выпускниками этого учебного курса на таких сайтах, как Linkedin, чтобы узнать, что они чувствуют, попробуйте проверить, сообщает ли он о статистике в CIRR, попробуйте спросить людей в различных сообществах (не только на Reddit). )… Также см. Раздел часто задаваемых вопросов / r / cscareerquestion о буткемпах.

  • Если ваше резюме не привлекает много внимания, попробуйте опубликовать его для проверки в ветке еженедельных обзоров резюме / r / cscareerquestions или / r / cscareerquestionsEU.

Этап 2: пройти собеседование

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

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

  • Дает вам определенную задачу кодирования, обычно касающуюся структур данных и алгоритмов — особенно на начальном уровне. Чтобы узнать больше о том, как выглядят эти типы собеседований и как к ним подготовиться, подумайте о покупке или одолжении экземпляра «Cracking the Coding Interview».
  • Задавать вам вопросы, связанные с конкретной ролью, на которую вы проходите собеседование — e.грамм. интерфейсный веб-дизайн, безопасность, наука о данных …
  • Просить вас объединить программу вместе с вашим интервьюером, где вы совместно создаете или отлаживаете небольшую программу
  • Прошу вас выполнить какое-то домашнее задание
  • Прошу вас попробовать разработать высокоуровневую архитектуру какой-нибудь более крупной программы
  • Спрашивать вас об элементах, которые вы указали в своем резюме (иногда в целом, иногда с углубленным изучением одного проекта)
  • Просто поговорим о технологиях в целом

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

Также см. Вики / r / cscareerquestions — и, возможно, / r / cscareerquestionsEU, если вы живете в ЕС.


Что мне теперь делать?

Уже не новичок:

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

Программирование — это просто инструмент

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

Улучшение навыков программирования

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


Разное

Где я могу получить помощь в режиме реального времени? (например, через Discord, IRC)

Список аффилированных сообществ см. В разделе «Правила размещения сообщений»> «Связанные сообщества» и, в частности, в разделе «Помощь в реальном времени».

Обратите внимание, что / r / learnprogramming официально не связан ни с одним из сообществ, перечисленных на этой странице.Команды модераторов всех перечисленных сообществ отличаются и независимы от этого сообщества.

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

Попробуйте посетить / r / ProgrammingForKids и / r / CSEducation. Оба субреддита будут содержать полезные ресурсы и предложения о том, как обучать других.

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

Некоторые часто рекомендуемые ресурсы включают:

  • Scratch от MIT, языка программирования, предназначенного для детей от 8 до 16 лет.Этот язык основан на браузере и не требует установки программного обеспечения.
  • Code.org, веб-сайт, на котором собраны ресурсы по обучению детей программированию.
  • TeachTone.tech, бесплатная книга, предназначенная для людей с минимальным опытом преподавания CS и желающих изучить передовые педагогические практики.

Как я могу внести свой вклад в проекты с открытым исходным кодом?

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

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

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

Вот некоторые прошлые темы о работе над проектами с открытым исходным кодом.

У меня вопрос по C / Python / некоторому конкретному языку

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

Мой вопрос не был одним из этих; что теперь?

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

Попробуйте также проверить наш список связанных сообществ.

Да, вопрос, который я задаю, есть в FAQ, но я хочу получить ответы от реальных людей.

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

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

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

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

Esolang, эзотерические языки программирования вики

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

Почему бы не присоединиться к нам по IRC?

Для читателей

Рекомендуемый язык

Thue — это эзотерический язык программирования, основанный на идее «системы полутуэ»: система, которая определяет строки, которые можно переписать на некоторые другие строки; программа — это просто список строк поиска и возможных замен для них. Как недетерминированный язык, программа может остановиться, если есть какой-то способ достичь конечного состояния путем применения замен, даже если такие правила, как «всегда применять первую замену», приведут к бесконечному циклу.Никакого хранения данных не требуется, кроме одной строки, которая содержит все состояние запущенной программы, хотя это часто приводит к медленному запуску программ из-за задержек в передаче информации из одной части строки в другую. ( подробнее… )

Ранее представленные: Funciton · Brainfuck · Deadfish · Emmental · подробнее…

Для творцов

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

Если вы еще не дошли до этого, взгляните на список идей для вдохновения.

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

Мета

С апреля 2005 года 3167 статей было создано 81 633 редакциями, включая 2 520 эзотерических языков. Зарегистрировано 6928 пользователей, но большинство из них — спам-боты.

Наслаждайтесь замком в своей матрице прочности.

Написание веб-приложений — язык программирования Go

Введение

В этом руководстве рассматриваются:

  • Создание структуры данных с методами загрузки и сохранения
  • Использование пакета net / http для создания веб-приложений
  • Использование пакета html / template для обработки HTML-шаблонов
  • Использование пакета regexp для проверки пользовательского ввода
  • Использование крышек

Предполагаемые знания:

  • Опыт программирования
  • Понимание основных веб-технологий (HTTP, HTML)
  • Некоторые знания командной строки UNIX / DOS

Начало работы

В настоящее время для запуска Go требуется компьютер с FreeBSD, Linux, OS X или Windows.Мы будем использовать $ для представления командной строки.

Установите Go (см. Инструкцию по установке).

Создайте новый каталог для этого руководства внутри GOPATH и перейдите к нему:

$ mkdir gowiki
$ cd gowiki
 

Создайте файл с именем wiki.go , откройте его в своем любимом редакторе и
добавьте следующие строки:

основной пакет

Импортировать (
"fmt"
"io / ioutil"
)
 

Мы импортируем пакеты fmt и ioutil из Go
стандартная библиотека.Позже, по мере реализации дополнительных функций, мы будем
добавьте больше пакетов в это объявление import .

Структуры данных

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

 type Page struct {
    Строка заголовка
    Тело [] байт
} 

Тип [] байт означает «фрагмент байт ».(См. Срезы: использование и
внутренние детали для получения дополнительной информации о срезах.)
Элемент Body является байтом [] , а не
строка , потому что это тип, ожидаемый io
библиотеки, которые мы будем использовать, как вы увидите ниже.

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

 func (p * Page) save () error {
    имя файла: = p.Заголовок + ".txt"
    return ioutil.WriteFile (имя файла, p.Body, 0600)
} 

Сигнатура этого метода гласит: «Это метод с именем save , который
принимает в качестве получателя p , указатель на Page . Занимает
без параметров и возвращает значение типа , ошибка ».

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

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

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

Помимо сохранения страниц, мы также захотим загрузить страницы:

 func loadPage (строка заголовка) * Page {
    имя файла: = заголовок + ".txt"
    body, _: = ioutil.ReadFile (имя файла)
    return & Page {Title: title, Body: body}
} 

Функция loadPage создает имя файла из заголовка.
параметр, считывает содержимое файла в новую переменную body , и
возвращает указатель на литерал Page , построенный с правильным
значения заголовка и тела.

Функции могут возвращать несколько значений. Стандартная библиотечная функция
io.ReadFile возвращает [] байт и ошибку .
В loadPage ошибка еще не обрабатывается; «пустой идентификатор»
символ подчеркивания ( _ ) используется для удаления
возвращаемое значение ошибки (по сути, присвоение значения ничего).

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

 func loadPage (строка заголовка) (* Страница, ошибка) {
    имя файла: = заголовок + ".txt"
    body, err: = ioutil.ReadFile (имя файла)
    if err! = nil {
        вернуть ноль, ошибиться
    }
    return & Page {Title: title, Body: body}, nil
} 

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

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

 func main () {
    p1: = & Page {Заголовок: "TestPage", Body: [] byte ("Это образец страницы.")}
    p1.save ()
    p2, _: = loadPage ("TestPage")
    fmt.Println (строка (p2.Body))
} 

После компиляции и выполнения этого кода файл с именем TestPage.txt
будет создан, содержащий содержимое p1 .Файл будет
затем быть прочитанным в структуре p2 и ее элементе Body
выводится на экран.

Вы можете скомпилировать и запустить программу так:

$ go build wiki.go
$ ./wiki
Это образец страницы.
 

(Если вы используете Windows, вы должны ввести « wiki » без
« ./ » для запуска программы.)

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

Представляем пакет

net / http (интерлюдия)

Вот полный рабочий пример простого веб-сервера:


основной пакет

Импортировать (
    "fmt"
    "бревно"
    "net / http"
)

обработчик func (w http.ResponseWriter, r * http.Request) {
    fmt.Fprintf (w, «Привет, я люблю% s!», r.URL.Path [1:])
}

func main () {
    http.HandleFunc ("/", обработчик)
    log.Fatal (http.ListenAndServe (": 8080", ноль))
} 

Функция main начинается с вызова
http.HandleFunc , который сообщает пакету http
обрабатывать все запросы к корневому веб-каталогу ( "/ ) с помощью
обработчик .

Затем он вызывает http.ListenAndServe , указывая, что он должен
прослушивать порт 8080 на любом интерфейсе ( ": 8080" ).(Не
пока не беспокойтесь о его втором параметре, nil .)
Эта функция будет заблокирована до завершения программы.

ListenAndServe всегда возвращает ошибку, так как возвращает только при
возникает непредвиденная ошибка.
Чтобы зарегистрировать эту ошибку, мы завершаем вызов функции кодом log.Fatal .

Обработчик функции имеет тип http.HandlerFunc .
Требуется http.ResponseWriter и http.Запрос как
свои аргументы.

Значение http.ResponseWriter собирает ответ HTTP-сервера; письменно
к нему мы отправляем данные HTTP-клиенту.

http.Request — это структура данных, представляющая клиента.
HTTP-запрос. r.URL.Path — компонент пути
URL-адреса запроса. Конечный [1:] означает
«создать суб-фрагмент Путь от 1-го символа до конца».
Это удаляет начальный «/» из имени пути.

Если вы запустите эту программу и получите доступ к URL-адресу:

 http: // localhost: 8080 / обезьяны 

программа представит страницу, содержащую:

 Привет, я люблю обезьян! 

Использование

net / http для обслуживания вики-страниц

Чтобы использовать пакет net / http , его необходимо импортировать:

Импортировать (
"fmt"
"io / ioutil"
"бревно"
 "net / http" 
)
 

Давайте создадим обработчик viewHandler , который позволит пользователям
просмотреть вики-страницу.Он будет обрабатывать URL-адреса с префиксом «/ view /».

 func viewHandler (w http.ResponseWriter, r * http.Request) {
    title: = r.URL.Path [len ("/ view /"):]
    p, _: = loadPage (заголовок)
    fmt.Fprintf (w, "

% s

% s
", p.Title, p.Body) }

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

Во-первых, эта функция извлекает заголовок страницы из r.URL.Path ,
компонент пути URL-адреса запроса.
Путь повторно нарезается [len ("/ view /"):] для удаления
ведущий компонент "/ view /" пути запроса.
Это потому, что путь всегда начинается с "/ view /" ,
который не является частью заголовка страницы.

Затем функция загружает данные страницы, форматирует страницу строкой простых
HTML и записывает его в w , http.ResponseWriter .

Чтобы использовать этот обработчик, мы перепишем нашу функцию main на
инициализировать http , используя viewHandler для обработки
любые запросы по пути / view / .

 func main () {
    http.HandleFunc ("/ просмотр /", viewHandler)
    log.Fatal (http.ListenAndServe (": 8080", ноль))
} 

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

Давайте создадим некоторые данные страницы (как test.txt ), скомпилируем наш код и
попробуйте обслуживать вики-страницу.

Откройте в редакторе файл test.txt и сохраните строку «Hello world» (без кавычек).
в этом.

$ go build wiki.go
$ ./wiki
 

(Если вы используете Windows, вы должны ввести « wiki » без
« ./ » для запуска программы.)

Когда этот веб-сервер запущен, посещение http: // localhost: 8080 / view / test
должна отобразить страницу с названием «test», содержащую слова «Hello world».

Редактирование страниц

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

Сначала мы добавляем их в main () :

 func main () {
    http.HandleFunc ("/ просмотр /", viewHandler)
    http.HandleFunc ("/ редактировать /", editHandler)
    http.HandleFunc ("/ сохранить /", saveHandler)
    log.Fatal (http.ListenAndServe (": 8080", ноль))
} 

Функция editHandler загружает страницу
(или, если он не существует, создайте пустую структуру Page ),
и отображает HTML-форму.

 func editHandler (w http.ResponseWriter, r * http.Request) {
    title: = r.URL.Path [len ("/ edit /"):]
    p, err: = loadPage (заголовок)
    if err! = nil {
        p = & Страница {Заголовок: заголовок}
    }
    fmt.Fprintf (w, "

Редактирование% s

" + "
" + "
" + "" + "
", p.Title, p.Title, p.Тело) }

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

html / шаблон пакет

Пакет html / template является частью стандартной библиотеки Go.
Мы можем использовать html / template , чтобы сохранить HTML в отдельном файле,
позволяя нам изменять макет нашей страницы редактирования, не изменяя
базовый код Go.

Сначала мы должны добавить html / template в список импорта.Мы
также больше не будет использовать fmt , поэтому мы должны удалить это.

Импортировать (
 "HTML / шаблон" 
"io / ioutil"
"net / http"
)
 

Создадим файл шаблона, содержащий HTML-форму.
Откройте новый файл с именем edit.html и добавьте следующие строки:

 

Редактирование {{.Title}}

Измените editHandler , чтобы использовать шаблон вместо жестко запрограммированного
HTML:

 func editHandler (w http.ResponseWriter, r * http.Request) {
    title: = r.URL.Path [len ("/ edit /"):]
    p, err: = loadPage (заголовок)
    if err! = nil {
        p = & Страница {Заголовок: заголовок}
    }
    t, _: = template.ParseFiles ("edit.html")
    t.Execute (ш, р)
} 

Функция template.ParseFiles будет читать содержимое
edit.html и вернуть * template.Template .

Метод t.Execute выполняет шаблон, записывая
сгенерированный HTML для http.ResponseWriter .
Пунктирные идентификаторы .Title и .Body относятся к
п. Название и п. Тела .

Директивы шаблона заключены в двойные фигурные скобки.
Инструкция printf "% s". Body — это вызов функции
который выводит .Body как строку вместо потока байтов,
То же, что и звонок на fmt.Printf .
Пакет html / template помогает гарантировать, что только безопасные и
правильно выглядящий HTML создается с помощью шаблонных действий.Например, это
автоматически экранирует любой знак больше (> ), заменяя его
с & gt; , чтобы убедиться, что данные пользователя не повреждают форму
HTML.

Поскольку сейчас мы работаем с шаблонами, давайте создадим шаблон для нашего
viewHandler называется view.html :

 

{{.Title}}

[ редактировать ]

{{printf "% s" .Body}}

Измените viewHandler соответственно:

 func viewHandler (w http.ResponseWriter, r * http.Request) {
    title: = r.URL.Path [len ("/ view /"):]
    p, _: = loadPage (заголовок)
    t, _: = template.ParseFiles ("view.html")
    t.Execute (ш, р)
} 

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

 func renderTemplate (w http.ResponseWriter, строка tmpl, p * Page) {
    t, _: = template.ParseFiles (tmpl + ".html")
    t.Execute (ш, р)
} 

И измените обработчики, чтобы использовать эту функцию:

 func viewHandler (w http.ResponseWriter, r * http.Request) {
    title: = r.URL.Path [len ("/ view /"):]
    p, _: = loadPage (заголовок)
    renderTemplate (w, "вид", p)
} 
 func editHandler (w http.ResponseWriter, r * http.Request) {
    title: = r.URL.Path [len ("/ edit /"):]
    p, err: = loadPage (заголовок)
    if err! = nil {
        p = & Страница {Заголовок: заголовок}
    }
    renderTemplate (w, "редактировать", p)
} 

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

Обработка несуществующих страниц

Что, если вы посетите
/ просмотр / APageThatDoesntExist ? Вы увидите страницу, содержащую
HTML. Это потому, что он игнорирует возвращаемое значение ошибки из
loadPage и продолжает попытки заполнить шаблон
без данных. Вместо этого, если запрошенная страница не существует, она должна
перенаправить клиента на страницу редактирования, чтобы можно было создать контент:

 func viewHandler (w http.ResponseWriter, r * http.Request) {
    title: = r.URL.Path [len ("/ view /"):]
    p, err: = loadPage (заголовок)
    if err! = nil {
        http.Redirect (w, r, "/ edit /" + title, http.StatusFound)
        возвращаться
    }
    renderTemplate (w, "вид", p)
} 

Функция http.Redirect добавляет код состояния HTTP
http.StatusFound (302) и Location
заголовок HTTP-ответа.

Сохранение страниц

Функция saveHandler будет обрабатывать отправку форм.
находится на страницах редактирования.После раскомментирования соответствующей строки в
main , реализуем обработчик:

 func saveHandler (w http.ResponseWriter, r * http.Request) {
    title: = r.URL.Path [len ("/ save /"):]
    body: = r.FormValue ("тело")
    p: = & Страница {Заголовок: заголовок, Тело: [] байт (тело)}
    p.save ()
    http.Redirect (w, r, "/ view /" + title, http.StatusFound)
} 

Заголовок страницы (указанный в URL-адресе) и единственное поле формы,
Кузов , хранятся в новом Странице .Затем вызывается метод save () для записи данных в файл,
и клиент перенаправляется на страницу / view / .

Значение, возвращаемое функцией FormValue , имеет тип , строка .
Мы должны преобразовать это значение в [] байт , прежде чем оно поместится в
структура Page . Мы используем [] байт (тело) для выполнения
преобразование.

Обработка ошибок

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

Во-первых, давайте обработаем ошибки в renderTemplate :

 func renderTemplate (w http.ResponseWriter, строка tmpl, p * Page) {
    t, err: = template.ParseFiles (tmpl + ".html ")
    if err! = nil {
        http.Error (w, err.Error (), http.StatusInternalServerError)
        возвращаться
    }
    err = t.Execute (ш, р)
    if err! = nil {
        http.Error (w, err.Error (), http.StatusInternalServerError)
    }
} 

Функция http.Error отправляет указанный код ответа HTTP.
(в данном случае «Внутренняя ошибка сервера») и сообщение об ошибке.
Решение поместить это в отдельную функцию уже окупается.

Теперь исправим saveHandler :

 func saveHandler (w http.ResponseWriter, r * http.Request) {
    title: = r.URL.Path [len ("/ save /"):]
    body: = r.FormValue ("тело")
    p: = & Страница {Заголовок: заголовок, Тело: [] байт (тело)}
    ошибка: = p.save ()
    if err! = nil {
        http.Error (w, err.Error (), http.StatusInternalServerError)
        возвращаться
    }
    http.Redirect (w, r, "/ view /" + title, http.StatusFound)
} 

Будут сообщены все ошибки, возникающие во время p.save () .
пользователю.

Кэширование шаблонов

В этом коде есть неэффективность: вызовов renderTemplate
ParseFiles каждый раз при отображении страницы.Лучшим подходом было бы вызвать ParseFiles один раз в программе
инициализация, разбор всех шаблонов в один * Шаблон .
Тогда мы можем использовать
ExecuteTemplate
метод для рендеринга определенного шаблона.

Сначала мы создаем глобальную переменную с именем templates и инициализируем
это с ParseFiles .

 var templates = template.Must (template.ParseFiles ("edit.html", "view.html")) 

Функция шаблона.Must — удобная оболочка, вызывающая панику
при передаче значения ошибки , отличного от нуля, и в противном случае возвращает
* Шаблон без изменений. Здесь уместна паника; если шаблоны
не загружается, единственное, что нужно сделать, это выйти из программы.

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

Затем мы модифицируем функцию renderTemplate , чтобы вызвать
templates.ExecuteTemplate с именем соответствующего
шаблон:

 func renderTemplate (w http.ResponseWriter, строка tmpl, p * Page) {
    err: = templates.ExecuteTemplate (w, tmpl + ". html", p)
    if err! = nil {
        http.Error (w, err.Error (), http.StatusInternalServerError)
    }
} 

Обратите внимание, что имя шаблона — это имя файла шаблона, поэтому мы должны
добавить ".html " к аргументу tmpl .

Проверка

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

Сначала добавьте "regexp" в список import .
Затем мы можем создать глобальную переменную для хранения нашей проверки
выражение:

 var validPath = regexp./ (редактировать | сохранить | просмотреть) / ([a-zA-Z0-9] +) $ ") 

Функция regexp.MustCompile проанализирует и скомпилирует
регулярное выражение и вернуть regexp.Regexp .
MustCompile отличается от Compile тем, что он
паника, если компиляция выражения не удалась, а Compile вернет
ошибка в качестве второго параметра.

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

 func getTitle (w http.ResponseWriter, r * http.Request) (строка, ошибка) {
    m: = validPath.FindStringSubmatch (r.URL.Path)
    if m == nil {
        http.NotFound (ш, г)
        return "", errors.New ("неверный заголовок страницы")
    }
    вернуть m [2], ноль
} 

Если заголовок действительный, он будет возвращен вместе с nil
значение ошибки. Если заголовок недействителен, функция напишет
Ошибка «404 Not Found» для HTTP-соединения и возврат ошибки в
обработчик. Чтобы создать новую ошибку, мы должны импортировать ошибок
упаковка.

Давайте вызовем getTitle в каждый из обработчиков:

 func viewHandler (w http.ResponseWriter, r * http.Request) {
    title, err: = getTitle (w, r)
    if err! = nil {
        возвращаться
    }
    p, err: = loadPage (заголовок)
    if err! = nil {
        http.Redirect (w, r, "/ edit /" + title, http.StatusFound)
        возвращаться
    }
    renderTemplate (w, "вид", p)
} 
 func editHandler (w http.ResponseWriter, r * http.Request) {
    title, err: = getTitle (w, r)
    if err! = nil {
        возвращаться
    }
    p, err: = loadPage (заголовок)
    if err! = nil {
        p = & Страница {Заголовок: заголовок}
    }
    renderTemplate (w, "редактировать", p)
} 
 func saveHandler (w http.ResponseWriter, r * http.Request) {
    title, err: = getTitle (w, r)
    if err! = nil {
        возвращаться
    }
    body: = r.FormValue ("тело")
    p: = & Страница {Заголовок: заголовок, Тело: [] байт (тело)}
    err = p.save ()
    if err! = nil {
        http.Error (w, err.Error (), http.StatusInternalServerError)
        возвращаться
    }
    http.Redirect (w, r, "/ view /" + title, http.StatusFound)
} 

Введение в функциональные литералы и замыкания

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

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

func viewHandler (w http.ResponseWriter, r * http.Request, строка заголовка)
func editHandler (w http.ResponseWriter, r * http.Request, строка заголовка)
func saveHandler (w http.ResponseWriter, r * http.Запрос, строка заголовка)
 

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

func makeHandler (fn func (http.ResponseWriter, * http.Request, string)) http.HandlerFunc {
return func (w http.ResponseWriter, r * http.Request) {
// Здесь мы извлечем заголовок страницы из запроса,
// и вызываем предоставленный обработчик 'fn'
}
}
 

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

Теперь мы можем взять код из getTitle и использовать его здесь
(с небольшими изменениями):

 func makeHandler (fn func (http.ResponseWriter, * http.Request, string)) http.HandlerFunc {
    return func (w http.ResponseWriter, r * http.Request) {
        м: = действительный путь.FindStringSubmatch (r.URL.Path)
        if m == nil {
            http.NotFound (ш, г)
            возвращаться
        }
        fn (ш, г, м [2])
    }
} 

Замыкание, возвращаемое функцией makeHandler , является функцией, которая принимает
http.ResponseWriter и http.Request (в других
слов, http.HandlerFunc ).
Замыкание извлекает заголовок из пути запроса и
проверяет его с помощью регулярного выражения validPath . Если
заголовок недействителен, ошибка будет записана в
ResponseWriter , используя http.NotFound функция.
Если заголовок действителен, функция закрытого обработчика
fn будет вызываться с ResponseWriter ,
Запрос и заголовок в качестве аргументов.

Теперь мы можем обернуть функции-обработчики с помощью makeHandler в
main , прежде чем они будут зарегистрированы на http
упаковка:

 func main () {
    http.HandleFunc ("/ просмотр /", makeHandler (viewHandler))
    http.HandleFunc ("/ редактировать /", makeHandler (editHandler))
    http.HandleFunc ("/ save /", makeHandler (saveHandler))

    log.Fatal (http.ListenAndServe (": 8080", ноль))
} 

Наконец, мы удаляем вызовы getTitle из функций-обработчиков,
делая их намного проще:

 func viewHandler (w http.ResponseWriter, r * http.Request, строка заголовка) {
    p, err: = loadPage (заголовок)
    if err! = nil {
        http.Redirect (w, r, "/ edit /" + title, http.StatusFound)
        возвращаться
    }
    renderTemplate (w, "вид", p)
} 
 func editHandler (w http.ResponseWriter, r * http.Request, строка заголовка) {
    p, err: = loadPage (заголовок)
    if err! = nil {
        p = & Страница {Заголовок: заголовок}
    }
    renderTemplate (w, "редактировать", p)
} 
 func saveHandler (w http.ResponseWriter, r * http.Request, строка заголовка) {
    body: = r.FormValue ("тело")
    p: = & Страница {Заголовок: заголовок, Тело: [] байт (тело)}
    ошибка: = p.save ()
    if err! = nil {
        http.Error (w, err.Error (), http.StatusInternalServerError)
        возвращаться
    }
    http.Redirect (w, r, "/ view /" + title, http.СтатусНайдено)
} 

Попробуйте!

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

Перекомпилируйте код и запустите приложение:

$ go build wiki.go
$ ./wiki
 

Посещение http: // localhost: 8080 / view / ANewPage
должен представить вам форму редактирования страницы. Тогда вы сможете
введите текст, нажмите «Сохранить», и вы будете перенаправлены на только что созданную страницу.

Прочие задачи

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