Разное

С чего начинается программирование: метод Франклина — статьи на Skillbox

Содержание

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

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

Как я сам узнал этот секрет

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

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

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

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

Мой приятель попал именно в такую ситуацию. Драйвера для его материнской платы не было. Но на дискете с драйверами прилагался текст драйвера на языке Си.

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

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

Шаг за шагом он добавил обработку всех команд и джойстик полностью заработал!

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

Когда я его спросил:

— Как же ты так во всем самостоятельно разобрался?

Он ответил:

— Играть очень хотелось!

Так я узнал секрет быстрого изучения программирования.

Что я говорил студентам?

Полная фраза звучала так: «Я поставлю пятерку автоматом, если в конце семестра вы принесете мне программу, которую сделаете для себя».

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

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

В чем же секрет этого способа изучения программирования?

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

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

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

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

Знания про запас

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

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

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

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

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

Методика обучения пошагово

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

Шаг 1. Выберите программу, которую будет сами использовать.

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

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

Шаг 2. Поищите аналоги и посмотрите, как они сделаны

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

Шаг 3. Сразу начните писать программу

Ни завтра, ни через полгода, а вот прямо сегодня. На том уровне знаний, который у вас сейчас есть. Написали текст и запустили на компиляцию. Вы можете возразить: «Да я даже не знаю, что такое компиляция?» Отлично, самое время узнать, что это такое.

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

Шаг 4. Заминка

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

Шаг 5. В зачет идет только код

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

Шаг 6. Пользуйтесь программой

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

Шаг 7. Друзья-тестировщики

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

Твердость и упорство

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

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

Краткая история программирования / С чего все начиналось / itProger

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

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

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

К первооткрывателям среди языков программирования относится Фортран – это сокращённое сочетание 2 слов: Formula и Translation. Создан уже в середине 50-х. До сих пор язык используется благодаря лёгкости и простоте написания, а также развитой системе библиотек для Фортран. Чаще используется для научных и инженерных подсчётов, а также активно применяется в физичке и остальных науках, связанных с математикой.

Узконаправленные языки

Из-за увеличения сфер использования ЭВМ появились и другие языки для отдельных разработок в новых сферах:

  • экономическое направление оставалось незанятым до появления Кобол;
  • Снобол – обрабатывает алгоритмы, связанные с текстами;
  • Лисп. Работает на основании алгоритмов для отработки символов. Активно используется для формирования искусственного интеллекта.

Уже в 1968 г. был впервые запущен конкурс, в котором главным местом являлось звание лучшего языка программирования для начала карьерного пути. Данные планировалось использовать для обучения специалистов. Победу одержал Алгол-68, но он остался малоизвестным, о популярности и речь не идёт.

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

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

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

Создание языка C

Развитие возможностей вычислительного оборудования привело к необходимости написания ёмких программ для управления ЭВМ. Это место по праву занял язык Си, который стал активно использоваться в 70-х годах. Явным достоинством языка является его универсальность. Он превосходит Паскаль благодаря наличию вложенных возможностей сотрудничества с разными машинными командами и подходящими частями памяти. 

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

Пролог и Ада

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

Только в 80-х годах был разработан язык Ада. Он расширяет классическое понимание и свойства языков того периода. Ада могла решать задачи в режиме реального времени и моделировать независимые решения.

Классификация

Сегодня разработаны классификации языков по уровню работы, это распределение самое распространённое. Выделяют 3 основных уровня:

  1. Низкий. Сюда относятся различные машинные языки или разновидности с символическим кодирование типа Ассемблера и Автокода. За основу взяты операторы машинных команд, только разработаны с привязкой к мнемоническому коду. Операндами являются уже не точные адреса, а символьное обозначение имён. Все модели разработаны для отдельных разновидностей ПК, они являются машинно-зависимыми. В подобных языках отмечается сильная зависимость языка от внутренних особенностей системы;
  2. Высокий. Языки встречаются куда чаще, они более удобны в использовании. К ним причисляются: Алгол, С, Пролог, Паскаль, Бейсик, Фортран и другие. Перечисленные языки не имеют жёсткой зависимости от машины, ведь они основываются на возможностях системы операндов, которые подобны для классовых алгоритмов. Недостатками высокого уровня являются большая ресурсоёмкость и медленное исполнение;
  3. Сверхвысокий. Представителей языков крайне мало, только APL и Алгол-68. Их считают сверхвысокого уровня из-за разработки сверхмощных операторов.

Согласно другой классификации языки делятся на:

  • символьные – Пролог, Лисп и Снобол;
  • вычислительные – Паскаль, С, Алгол, Бейсик, Фортран.
Направления развития

Информатика в современном мире развивается в 3 ключевых направлениях:

  1. Процедурное появилось в период активнейшего развития компьютеров и других вычислительных устройств, с тем пор широко используется. В процедурных направлениях присутствуют выраженные описания действий, необходимых к выполнению. Для получения результата всегда проводится определённая процедура, которую составляют различные последовательности манипуляций. Процедурные языки дополнительно разделяются на:
    • Структурные. В них используется один оператор для записи цельных алгоритмом: циклов, функцию, ветвлений и остального. Более известны: Паскаль, Ада и С.
    • Операционные. Применяют несколько различных действий. Среди самых известных разновидностей: Фокал, Фортран и Бейсик.
  2. Непроцедурные. Языки программирования имеют декларативную структуру, появление которой приходится на 70-е года. Активнее всего начали развиваться в 80-х годах после появления проекта формирования 5 поколения ЭВМ. Основная задача – создание возможностей для построения высокоинтеллектуальных машин. Они также разделяются на:
    • Функциональные. Программа выполняет исчисление определённой функции, которая берёт за основу другие относительно простые алгоритмы и более простые задачи. В основе функционального направления используется основной элемент – рекурсия. Она подразумевает расчёт значений функции с помощью задействования её в других элементах. В языке отсутствуют циклы и методика присваивания значений.
    • Логические. Программа вовсе не требует описание действий, её основу составляют соотношения данных и их значения. Только после расчёта можно получать ответы на вопросы. После перебирания известных параметров выводится ответ. В программе отсутствует метод или порядок обнаружения ответа, он неявным образом устанавливается языком. Ярким представителем является Пролог. Из направления полностью устранено алгоритмическое мышление, только статические отношения между объектами, а вся динамика сокрыта от разработчика и сводится к перебору данных.
  3. Объектно-ориентированные языки, все они являются разновидностью высокого уровня программирования. Подобные языки не нуждаются в описании чёткой последовательности манипуляций для получения результата задачи, но отдельные компоненты процедурного направления присутствуют. Пользователям значительно проще работать с такими языками, так как они обладают доступным и богатым интерфейсом. Лучшим примером подобного направления с визуальным общением является Object Pascal.

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

Активнее всего стали развиваться по мере распространения интернета, от чего стали широко применяться языки сценариев. Для создания сценариев чаще всего применяется Perl, а для Web-части пользуется популярностью JavaScript.

Основы программирования

#2 — Логика. Алгоритмы

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

Урок 1. Введение
Хороший мотивирующий ролик, короткий и наглядный. Чёрт возьми, мне захотелось действительно научиться программированию! Но моя задача другая: не выучить конкретные языки, а разобраться в «механике» и терминологии.

Урок 2. Логика и алгоритмы
На самом деле, мы все немного программисты. Мы живём и действуем по алгоритмам, которые мы или сами себе составили или получили от других людей. Только настолько к этому привыкли, что не замечаем отдельных команд, а воспринимаем всё, как единый поток действий.
В этом ролике предельно доходчиво рассказана, а главное — показана вся суть программирования. Дано фундаментальное понятие алгоритма, их виды, и показано, как устроен каждый вид алгоритма. А ещё для меня открытием стало то, что программист — профессия креативная! Да, несмотря на логическую основу действий. Здесь и полная свобода в коде, и правило DRY (Don’t repeat yourself, «Не повторяйся!»), и баланс между минимализмом решений и простотой улучшений… Не ожидал. Задумался.
ДЗ можно посмотреть в комментариях по ссылке:
https://loftblog.ru/material/1-logika-algoritmy/#comment-3602 Обсуждение приветствуется.

Урок 3. Типы данных и их виды
Три основных типа данных: числовые, строковые и булевые, теперь стали понятны. Николай Чернобаев, автор курса, не просто рассказал о типах данных, но и показал, и дал «поиграть»: вывести в консоль, перевести из одного типа в другой. Сделал все преобразования следом за ним, и у меня — получилось. А ещё немного заглянули в следующую тему: «Переменные». Это нужно, чтобы понять про сильную и слабую, динамическую и статическую типизацию. Вам уже интересно? Смотрите видео!

Урок 4. Основные структуры данных
Вот теперь я точно знаю, что такое переменные и массивы. Аналогия с коробками, полками и шкафами доходчива просто до безобразия. И хорошо, что рассказано только про основные структуры, Николай не стал грузить всякими стэками и хэшами, ещё успеем. Вот чем мне, методисту с 7-летним стажем, нравится Loftschool, так это тем, что здесь умеют учить. Поверьте, это можно сказать далеко не про каждую онлайн-школу.
И вот эта простота и лёгкость помогла мне перейти к экспериментам: я не просто повторял то, что показано на экране, а сам придумал и собрал элементарную структуру. Кому интересно, смотрите ДЗ по ссылке: https://loftblog.ru/material/4-osnovnye-struktury-dannyx/#comment-3603

Урок 5. Функции
Здесь главное о функциях, их объявлении и вызове, об аргументах функции. Пересказывать не буду, лучше посмотрите ролик.
Отличная аналогия: программа — это как исполнить песню, а функция — одно из действий в этой песне, например, «играть на барабане». Один взмах дирижёрской палочки, и функция «играть на барабане» вызвана. После того как партия барабана закончена, действие переходит к другим инструментам…
Понять, что такое «возврат значения функции» и что именно делает команда return, было сложнее. Чтобы разобраться, реализовал одну и ту же задачу в двух видах, с возвратом значения и без: https://loftblog.ru/material/5-funkcii/#comment-3607 Да, и списался в Телеграм с наставником курса по разработке Сашей Несвитом, он объяснил буквально за две минуты, что к чему.

Урок 6. Арифметические и логические операции
Вот здесь было действительно просто, всё как в пятом классе. Позволил себе поразвлекаться и собрал логическое сравнение, проверяющее, можно девушке замуж или нет? https://loftblog.ru/material/6-arifmeticheskie-i-logicheskie-vyrazheniya/#comment-3609 А какое сравнение соберёте в этом уроке Вы?

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

Урок 8. Циклы в программировании
Циклы — это интересно: инициализировать счётчик, проверить условие, прописать тело, обновить счётчик, повторить… Как попросишь, так и отсчитает. Разобрали 5 вариантов условных циклов, особенно понравился элегантный пример на суммирование элементов массива буквально в 4 строки. В качестве ДЗ сделал простейший цикл на перемножение двух переменных https://loftblog.ru/material/8-cikly/#comment-3611.

Урок 9. Инструменты программиста
В этом уроке рассмотрены в сравнении два важных инструмента разработчика: редактор кода (на примере Sublime Text 3) и интегрированная среда разработки (IDE, на примере PHPStorm). Обозначены ключевые возможности, главный функционал, показано, как работать. Я знаком с инструментами разработки, в основном применительно к HTML: в качестве редактора кода активно пользовал Notepad++, своеобразным аналогом IDE можно считать Adobe Dreamviewver, так что различия понятны. А для задачек на других языках, думаю, подберу что-то из бесплатных IDE (Google намекает на NetBeans) или всё-таки подружусь с Sublime Text 3. А какие инструменты используете Вы?

Урок 10. Первая программа: калькулятор на JavaScript
Автор курса, Николай Чернобаев, на моих изумлённых глазах меньше чем за 1.5 часа написал онлайн-калькулятор, причём с графическим отображением и подсказками. Естественно, здесь было использовано многое из предыдущих уроков, что-то было рассказано с нуля. Очень интересно, что показано не только само написание кода, но и вся разработка как проект, начиная с задумки и планирования на бумаге.

Урок 11. События
Дополнение к программе онлайн-калькулятора, созданного в предыдущем уроке. Когда в программе что-то происходит, например, какое-то действие пользователя, программа реагирует заранее определённым образом. В биологии есть стимул и реакция, в программировании есть событие и его обработчик. Вот так для меня будет понятнее.

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

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

Советы начинающим программистам микроконтроллеров / Хабр

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

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

Я категорически против такого подхода. Обычно это все заканчивается — либо ничем, либо забитые форумы с мольбами помочь. Даже если кому то помогают, то в 90% он больше никогда не всплывет на сайтах по электронике. В остальных 10% он так и продолжает заливать форумы мольбами, его будут сначала пинать, затем поливать грязью. Из этих 10% отсеивается еще 9%. Далее два варианта: либо таки до глупой головы доходит и все же происходит goto к началу, либо в особо запущенных вариантах, его удел копировать чужие конструкции, без единой мысли о том как это работает. Из последних зачастую рождаются ардуинщики.

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

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

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

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

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

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

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

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

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

Очень многие начинающие брезгуют изучением языка, поэтому если вы не будете как все, то сразу станете на две ступени выше остальных новичков. Так же не никакой разницы, где изучать язык. На мой взгляд, микроконтроллер для этого не очень подходит. Гораздо проще поставить какую нибудь Visual studio или Qt Creator и порешать задачки в командной строке.

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

5. Изучение ассемблера? Бояться его не нужно, равно как и боготворить. Не нужно думать, что умея написать программу на ассемблере, вы сразу станете гуру микроконтроллеров, почему то это частое заблуждение. В первую очередь это инструмент. Даже если вы не планируете использовать его, то все равно я бы настоятельно рекомендовал написать хотя бы пару программ. Это сильно упростит понимание работы микроконтроллера и внутреннего устройства программ.

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

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

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

Мною был проведен эксперимент: в наличии был студент, даташит и гугл переводчик. Эксперимент №1: студенту вручен даташит и дано задание самостоятельно найти нужные значения, результат — «да как я смогу», «да я не знаю английский», «я ничего не нашел/я не понял» типичные фразы, говорящие о том, что он даже не пытался. Эксперимент №2: тому же студенту, вручен все тот же даташит и тоже задание, с той разницей, что я сел рядом. Результат — через 5 минут он сам нашел все нужные значения, абсолютно без моего участия, без знания английского.

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

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

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

9. А как бы я сделал это, если бы находился на месте разработчиков? Могу ли я сделать лучше? Каждый раз задавайте себе эти вопросы, это очень хорошо помогает продвигаться в обучении. Например, изучите интерфейсы 1wire, i2c, spi, uart, а потом подумайте чем они отличаются, можно ли было сделать лучше, это поможет осознать почему все именно так, а не иначе. Так же вы будете осознавать, когда и какой лучше применить.

10. Не ограничивайтесь в технологиях. Важно что этот совет имеет очень тонкую грань. Был этап в жизни, когда из каждой подворотни доносилось «надо бы знать ПЛИС», «а вот на ПЛИС то можно сделать». Формально у меня не было целей изучать ПЛИСины, но и пройти мимо было никак нельзя. Этому вопросу было выделено немного времени на ознакомление. Время не прошло зря, у меня был целый ряд вопросов, касаемых внутреннего устройства микроконтроллеров, именно после общения с плисинами я получил ответы на них. Подобных примеров много, все знания, которые я приобретал в том или ином виде, рано или поздно пригодились. У меня нет ни единого бесполезного примера.

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

11. Если спросить начинающего радиолюбителя, что ему больше нравится программирование или схемотехника, то с вероятностью 99% ответ будет программирование. При этом большую часть времени эти программисты тратят на изготовление плат ЛУТом/фоторезистом. Причины в общем то понятны, но довольно часто это переходит в некий маразм, который состоит в изготовлении плат ради изготовления плат.

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

12. Следующий совет, особенно болезненный, мне очень не хочется его обсуждать, но надо. Часто мне пишут, мол ххх руб за ууу дорого, где бы подешевле достать. Вроде бы обычный вопрос, но обычно я сразу напрягаюсь от него, так как зачастую он переходит в бесконечные жалобы на отсутствие денег. У меня всегда возникает вопрос: почему бы не оторвать пятую точку и не пойти работать? Хоть в тот же макдак, хоть на стройку, потерпеть месяц, зато потом можно приобрести парочку плат, которых хватит на ближайший год. Да я знаю, что маленьких городах и селах сложно найти работу, переезжайте в большой город. Работайте на удаленке, в общем нужно крутиться. Просто жаловаться нет смысла, выход из ситуации есть, кто ищет его тот находит.

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

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

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

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

Еще в самом начале, когда микроконтроллеры были для меня хобби, я много помогал с курсовыми и дипломами разных вузов, просто чтобы оценить свой уровень. Могу сказать уверенно, что уровень в целом невысок вне зависимости от имени вуза. Учиться несколько лет, для того чтобы написать такой диплом, совершенно необязательно. Достигнуть этого можно самостоятельно за весьма короткий срок. И все же зачастую бывали моменты, когда студенты знали какой то предмет, который они проходили на 2-3 курсе, а я этого не знал. Хоть все эти знания и компенсировались самообразованием, но все же лучше было бы не тратить на это время.

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

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

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

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

16. Поздно ли начинать программировать в 20, 30, 40, 50 лет? Практика других людей показывает, что возраст вообще не помеха. Многие почему то не учитывают то, что есть целый пласт работы, которую молодые в силу своих амбиций не хотят делать. Поэтому работодатели предпочитают брать тех, кто будет ее тащить. Это ваш шанс зацепиться, а дальше все зависит только от вас.

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

Как играть в «программирование» или путь программиста. / Хабр

Я уже писал, что программирование – это игра, как и любая игра, она состоит из стадий или уровней. Что бы стать настоящим профессионалом, важно уметь проходить эти стадии. Порой это трудно, порой даже очень трудно, но согласитесь, от этого только интересней!
Сейчас я постараюсь выделить основные стадии и опасности, подстерегающие программиста на этом сложном, долгом и очень захватывающем пути. Попробую рассказать, как именно эти стадии проходить, что нужно делать, что бы не свернуть, и не оказаться одним из тех, кого я называю «НЕДОпрограммистами».

Стадия номер раз: Млять, чо за нах!?

Одна из двух самых опасных стадий! Стадия — убийца программистов! Это самая первая стадия, когда «простой смертный» счастливый, или недовольный жизнью человек, наслушавшись таких как я, прочитав статьи таких как я, увидев как, такие как я живут, поняв что это классно, решает стать программистом. И вот он идет в магазин, закупается неверными книжками, ибо никто из более опытных ничего не подсказал, и начинает их читать. Хуже того, пробует применять на практике! Далее обычно следующая картина: «Мля, мля, мля, мля, примеры из книжки не работают, этот оператор нигде не описан, из десяти строк первого листинга, я понял только две, и не факт что правильно! Какие мануалы!? Что такое мануалы!? Зачем их курить!? Что это!? Седой волос!? Откуда у меня седой волос!?» Ну а дальше, хорошая, или не очень книжка, отправляется в туалет, и служит вместо туалетной бумаги, в целях экономии…
Проблема в том, что на этой стадии, многие начинают зубрить тот или иной язык, когда на самом деле нужно разбираться в основах программирования, учиться составлять алгоритмы, и запастись терпением. Именно поэтому для начала, выбирают языки попроще, типа QBasik, или Pascal, но надо помнить, что привыкать к этим языкам не стоит, и написать на них бесплатную альтернативу photoshop’у не получиться. Для начала пойдут простые, совершенно бесполезные, программы, просто для того, что бы понять, что такое переменная, что такое массивы, циклы, условные операторы, как и где они применяются. Проще говоря, нужно научиться мыслить как программист, и тогда эта стадия будет пройдена.

Стадия номер два: Ааа, вот оно что…

И если первая стадия пройдена, то скорее всего «простой смертный» встал на путь истинный… Самое трудное позади, и можно начинать писать несложные, но полезные программы, на которые через 2-3 года без смеха смотреть будет сложно… Это стадия разочарований, стадия поиска стиля, и обретения мастерства. Стадия, когда вы показываете свой код знакомым программерам, а они над вами смеются, вместо того, что бы указать на ошибки, когда комп вешается каждые пол часа от бесконечных циклов, а вы не можете понять в чем проблема, когда программа вроде работает, но как-то не так, когда вы смотрите чужие листинги, и не понимаете ровным счетом ничего! На этой стадии, кроме продумывания алгоритма программы, встает так же вопрос его реализации, и уже не на qbasik’е или паскале, а на чем-то вроде delphi, c++ или php(perl, python). К черту языки 80-тых годов, на этой стадии пишутся полезные программы, которые работают не в черном ДОСовском окошке, но вы то не знали, что это будет на порядок сложнее… Если раньше вы говорили культурно, то теперь начинаете материться, ибо с этим компилятором по другому нельзя! Какая ошибка? Какой тип данных? Что ему не нравится? Зачем он меня мучает? Что плохого я сделал в жизни? Если попаду в ад, что угодно, любые муки, только не программировать на visual studio (Само собой только пример… надеюсь майкрософт меня не читает…)
Часто бывает такое, что наслушавшись про только что вышедшую, мега крутую игру, вы покупаете ее, проходите первый уровень, а во втором, при первом серьезном испытании, которое, в общем-то, проходимо, но требует времени, сил и сноровки, вы бросаете игру? Думаю что часто! Так же и с программированием. Тут все зависит от желания. Зачем вы начали программировать, и насколько вы хотите стать программистом. Что бы пройти этот этап, нужны не столько мозги (хотя куда ж без них) сколько усидчивость, и изучение нюансов языка программирования. Вот тут то и придется курить мануалы, сканить инет на предмет похожих ошибок и методов их решения, более внимательно изучать книжки, а в минуты отчаяния — молиться! Но как я уже сказал, этап проходим, все, что для этого надо – это запастись терпением и, не в коем случае, не зацикливаться на мысли: «Это невозможно!», т.к. ЭТО ВОЗМОЖНО! И вы знаете что это возможно!

Стадия номер три: Кажется я программист!

Обычно, эта стадия начинается следующим образом: «А не написать ли мне…» Выбирается довольно сложная и большая программа, дни сменяют ночи, время летит, девушка вас бросает, все деньги уходят на новые книги, в асе появляется новая группа «Программисты», в закладках браузера в основном программистские форумы – вы пишите большую, сложную программу. Возникают новые трудности: вы знакомитесь с базами данных, с инсталляторами, с ООП, и знакомство это не всегда проходит гладко. Однако у вас есть два помощника, которые всегда рядом с программистом на этой стадии: опыт предыдущей стадии, и вдохновение! А вдохновение — штука мощная… На этой стадии вам интересно писать! Вы довольно далеко зашли, и едва ли все бросите. Однако… Многие сходят именно тут, это в основном связанно с полным разочарованием в программировании. Как интересно было писать мини программки на первых двух стадиях, да, были сложности, но с высоты третьего уровня, они не кажуться такими уж непреодолимыми. А вот тут все скучнее! ООП? Зачем он? Все твердят про это ООП, я и без него обходился! А еще эти БД, целые книги выпускают только по проектированию базы данных! Отношения, связи, ключи… Чот мне разонравилось программирование!!!
Тут главное не падать духом! Не так уж все и сложно! Да, важно правильно спроектировать базу данных, но это ведь ваша первая серьезная программа! Да, ООП это вещь, и дальше без нее никак, но если вы пока не понимаете что за там классы, методы, зачем нужно наследование и т.д. оставьте это, пишите так, как вам нравиться, вы пока не профессионал, и получайте удовольствие от программирования. Полюбите программирование! Настанет день, и вы поймете все нюансы ООП, и сможете на ходу составлять sql запросы, не заглядывая в справочник, но пока, пишите как хотите, влюбитесь в программирование.

Стадия номер четыре: Мания величия.

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

Стадия номер пять: Не так уж я и крут…

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

В заключении.

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

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

В этой статье я попытаюсь Вам рассказать. как с нуля, в кратчайшие сроки, изучить 1С программирование 8.3 и 8.2. Причем не только изучить, но и монетизировать свои знания.

Программирование 1С с нуля — с чего начать?

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

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

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

Начинаем программировать в 1С

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

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

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

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

  • Начать читать книги по 1С программированию, начиная с самых простых (вроде «Простых примеров разработки»). Скорее всего, Вы не будете сразу понимать всё, но информация отложится в Вашей памяти, и её можно будет использовать в дальнейшем.
  • Просмотр видеокурсов по 1С онлайн- очень полезная и наглядная информация, тем более что достать большинство из них можно бесплатно.
  • Чтобы начать решать реальные практические задания, зарегистрируйтесь на бирже фриланса 1С и начните решать задания из архива. Тем самым Вы не только получите реальный опыт, но и поймете, какие виды услуг на рынке сейчас востребованы.

Монетизируем знания в 1С

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания — попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

Через некоторое время мы становимся этаким Middle 1C developer. Мы уже понимаем архитектуру 1С 8.2, умеем отличать дебет от кредита, смело общаемся с клиентом — в общем, мы полноценные специалисты, прошедшие этот путь с нуля. Становится вопрос — монетизация знаний. На самом деле, рынок услуг 1С чрезвычайно большой. И зарабатывать на нём можно очень приличные деньги. Рассмотрим основные способы продажи своих услуг:

Работа в 1С-Франчайзи

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

Необходимо всегда искать креативные варианты повышения выработки часов. Например, создать универсальную обработку, которую можно продавать всем клиентам. Работы в фирмах-франчайзи, как правило, огромное количество. У опытных программистов 1С получается «закрывать» до 300 часов в месяц, что в пересчете на среднюю ставку программиста 1С получается довольно неплохо. Мой личный рекорд — 400 часов.

Работа фрилансером/свой бизнес в 1С

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

Работа на внутреннем проекте («фикси»)

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

Видеокурс по программированию в 1С:

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

С чего начать программирование на php?

Переполнение стека

  1. Около
  2. Продукты

  3. Для команд
  1. Переполнение стека
    Общественные вопросы и ответы

  2. Переполнение стека для команд
    Где разработчики и технологи делятся частными знаниями с коллегами

  3. Вакансии
    Программирование и связанные с ним технические возможности карьерного роста

  4. Талант
    Нанимайте технических специалистов и создавайте свой бренд работодателя

  5. Реклама
    Обратитесь к разработчикам и технологам со всего мира

  6. О компании

Загрузка…

.

С чего начать? // Письменная лаборатория Purdue

Эта страница предоставлена ​​вам OWL в Университете Пердью. При печати этой страницы вы должны включить полное юридическое уведомление.

Авторские права © 1995-2018, Лаборатория письма и СОВ при Университете Пердью и Пердью. Все права защищены. Этот материал нельзя публиковать, воспроизводить, транслировать, переписывать или распространять без разрешения. Использование этого сайта означает принятие наших условий добросовестного использования.


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

Резюме:

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

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

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

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

Исследования

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

Наброски

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

Черчение

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

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

Доработка, редактирование, вычитка

Ревизия — это процесс, состоящий из:

  • Основные, радикальные, изменения в разные проекты проекта
  • Оценка выбора слов на протяжении всего проекта
  • Удаление абзацев, а иногда, довольно болезненно, целых страниц текста
  • Переосмысление всего проекта и его переработка по мере необходимости

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

  • Анализ согласованности тона и голоса на протяжении всего проекта
  • Исправление мелких ошибок в механике и типографике
  • Оценка логического потока мысли между абзацами и основными идеями

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

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

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

.

простых задач программирования

простых задач программирования

Каждый раз, когда я работаю TA на вводном уроке CS, где студенты изучают какой-либо язык программирования, у меня возникают проблемы с придумыванием хороших упражнений. Задачи из Project Euler и т.п. обычно слишком сложны для начинающих, особенно если у них нет сильного математического образования.

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

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

Это руководство было переведено на китайский язык компанией yifeitao. Простые проблемы программирования на китайском языке

Прежде чем начать

Обучение программированию означает обучение решению проблем с помощью кода. Концептуально нетрудно написать программу, решающую проблему, которую вы можете решить сами. Навык, который вам необходимо приобрести, — это очень точно продумать, как вы решите проблему, и разбить ее на шаги, которые настолько просты, что компьютер может их выполнить.Я рекомендую вам сначала решить несколько примеров проблемы вручную и подумать о том, что вы сделали, чтобы найти решение. Например, если задача состоит в сортировке списков, отсортируйте несколько коротких списков самостоятельно. Разумным методом было бы найти наименьший элемент, записать его, вычеркнуть из исходного списка и повторять этот процесс, пока вы не отсортируете весь список. Затем вы должны научить компьютер: 1) как находить наименьший элемент, 2) как его записывать, 3) как вычеркивать его и заключать в цикл.Затем продолжайте этот процесс разбивки задач до тех пор, пока не будете уверены, что знаете, как написать необходимую программу.

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

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

Это плохой пример:

 
// Эта функция проверяет, четное ли число
def f (x):
  // вычисляем x по модулю 2 и проверяем, равен ли он нулю
  если по модулю (x, 2) == 0:
    // число четное
    вернуть True
  еще:
    // число нечетное
    return False
  

Ту же самую идею будет намного легче понять, если вы напишете ее так:

 
def is_divisible (число, делитель):
  вернуть по модулю (число, делитель) == 0

def is_even (число):
  return is_divisible (число, 2)
  

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

Элементарно

  1. Напишите программу, которая выводит на экран «Hello World».
  2. Напишите программу, которая запрашивает у пользователя его имя и приветствует его именем.
  3. Измените предыдущую программу таким образом, чтобы только пользователи Алиса и Боб встречались со своими именами.
  4. Напишите программу, которая запрашивает у пользователя число n и выводит сумму чисел от 1 до n
  5. Измените предыдущую программу так, чтобы в сумме учитывались только числа, кратные трем или пяти, например 3, 5, 6, 9, 10, 12, 15 для n = 17
  6. Напишите программу, которая запрашивает у пользователя число n и дает ему возможность выбирать между вычислением суммы и вычислением произведения 1,…, n .
  7. Напишите программу, которая печатает таблицу умножения чисел до 12.
  8. Напишите программу, которая печатает всех простых чисел. (Примечание: если ваш язык программирования не поддерживает числа произвольного размера, вы можете распечатать все простые числа вплоть до самого большого числа, которое вы можете легко представить.)
  9. Напишите игру в догадки, в которой пользователь должен угадать секретное число. После каждого предположения программа сообщает пользователю, было ли их количество слишком большим или слишком маленьким. В конце должно быть напечатано количество необходимых попыток. Если они вводят одно и то же число несколько раз подряд, засчитывается только одна попытка.{k + 1}} {2k-1} = 4 \ cdot (1-1 / 3 + 1 / 5-1 / 7 + 1 / 9-1 / 11 \ ldots).

    Списки, строки

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

    1. Напишите функцию, которая возвращает самый большой элемент в списке.
    2. Функция записи, которая переворачивает список, желательно на месте.
    3. Напишите функцию, которая проверяет, присутствует ли элемент в списке.
    4. Напишите функцию, которая возвращает элементы на нечетных позициях в списке.
    5. Напишите функцию, вычисляющую промежуточную сумму списка.
    6. Напишите функцию, которая проверяет, является ли строка палиндромом.
    7. Напишите три функции, которые вычисляют сумму чисел в списке: с использованием для -цикла, и -цикла и рекурсии.(При наличии этих конструкций на выбранном вами языке.)
    8. Напишите функцию on_all , которая применяет функцию к каждому элементу списка. Используйте его для печати первых двадцати идеальных квадратов. Совершенные квадраты можно найти, умножив каждое натуральное число на себя. Первые несколько полных квадратов: 1 * 1 = 1 , 2 * 2 = 4 , 3 * 3 = 9 , 4 * 4 = 16 . Например, двенадцать не является полным квадратом, потому что не существует натурального числа м , так что м * м = 12 .(Этот вопрос непрост, если ваш язык программирования затрудняет передачу функций в качестве аргументов.)
    9. Напишите функцию, объединяющую два списка. [a, b, c] , [1,2,3] [a, b, c, 1,2,3]
    10. Напишите функцию, которая объединяет два списка, поочередно принимая элементы, например [a, b, c] , [1,2,3] [a, 1, b, 2, c, 3] .
    11. Напишите функцию, которая объединяет два отсортированных списка в новый отсортированный список. [1,4,6] , [2,3,5] [1,2,3,4,5,6] .Вы можете сделать это быстрее, чем объединять их с последующей сортировкой.
    12. Напишите функцию, которая вращает список на k элементов. Например, [1,2,3,4,5,6] , повернутый на два, становится [3,4,5,6,1,2] . Попробуйте решить эту проблему, не создавая копию списка. Сколько операций обмена или перемещения вам нужно?
    13. Напишите функцию, которая вычисляет список первых 100 чисел Фибоначчи. Первые два числа Фибоначчи — это 1 и 1. Число Фибоначчи n + 1 может быть вычислено путем сложения числа Фибоначчи n, и n-1, числа Фибоначчи.Таким образом, первые несколько: 1, 1, 1 + 1 = 2, 1 + 2 = 3, 2 + 3 = 5, 3 + 5 = 8.
    14. Напишите функцию, которая принимает число и возвращает список его цифр. Таким образом, для 2342 он должен вернуть [2,3,4,2] .
    15. Напишите функции, которые складывают, вычитают и умножают два числа в их представлении списка цифр (и возвращают новый список цифр). Если вы амбициозны, вы можете реализовать умножение Карацубы. Пробуй разные базы. Какая лучшая база, если вам важна скорость? Если вы не смогли полностью решить указанное выше упражнение с простыми числами из-за отсутствия больших чисел в вашем языке, теперь вы можете использовать свою собственную библиотеку для этой задачи.
    16. Напишите функцию, которая принимает список чисел, начальную базу b1 и целевую базу b2 , интерпретирует список как число с основанием b1 и преобразует его в число с основанием b2 (в форма списка цифр). Так, например, [2,1,0] в базе 3 преобразуется в базу 10 как [2,1] .
    17. Реализуйте следующие алгоритмы сортировки: сортировка по выбору, сортировка вставкой, сортировка слиянием, быстрая сортировка, сортировка Stooge.Поищите описания в Википедии.
    18. Реализовать двоичный поиск.
    19. Напишите функцию, которая принимает список строк и печатает их, по одной в строке, в прямоугольной рамке. Например, список ["Hello", "World", "in", "a", "frame"] печатается как:

        *********
      * Здравствуйте *
      * Мир *
      * в    *
      * а *
      * Рамка *
      *********  
    20. Функция записи, которая переводит текст на Pig Latin и обратно. Английский переводится на Pig Latin, беря первую букву каждого слова, перемещая ее в конец слова и добавляя «ау».«Быстрая коричневая лисица» становится «Hetay uickqay rownbay oxfay».

    1. Напишите программу, которая выводит все возможности поставить + или - или ничего между числами 1,2,…, 9 (в этом порядке) так, чтобы результат был 100. Например, 1 + 2 + 3 — 4 + 5 + 6 + 78 + 9 = 100
    2. Напишите программу, которая берет продолжительность года (в дробных днях) для воображаемой планеты в качестве входных данных и создает правило високосного года, которое минимизирует разницу в солнечном году планеты.
    3. Реализовать структуру данных для графиков, позволяющую изменять (вставку, удаление). Должна быть возможность хранить значения на краях и узлах. Для этого проще всего использовать словарь (node, edgelist).
    4. Напишите функцию, которая генерирует точечное представление графика.
    5. Напишите программу, которая автоматически генерирует для вас эссе.
      1. Используя образец текста, создайте ориентированный (мульти-) граф, где слова текста являются узлами, а между и и v , если за и следует v в вашем образце текст.Множественные вхождения приводят к множеству ребер.
      2. Произведите случайное блуждание по этому графику: начиная с произвольного узла выберите случайного преемника. Если преемника не существует, выберите другой случайный узел.
    6. Напишите программу, которая автоматически преобразует английский текст в азбуку Морзе и наоборот.
    7. Напишите программу, которая находит самую длинную палиндромную подстроку заданной строки. Постарайтесь быть максимально эффективными!
    8. Подумайте о хорошем интерфейсе для списка. Какие операции вам обычно нужны? Возможно, вы захотите изучить интерфейс списка на своем языке и на некоторых других популярных языках для вдохновения.
    9. Реализуйте интерфейс списка, используя фиксированный кусок памяти, скажем, массив размером 100. Если пользователь хочет добавить в ваш список больше, чем умещается в памяти, вы должны выдать какую-то ошибку, например, вы можете выбросить исключение. если ваш язык это поддерживает.
    10. Улучшите вашу предыдущую реализацию, чтобы в вашем списке можно было хранить произвольное количество элементов. Например, вы можете выделять все большие и большие куски памяти по мере роста вашего списка, копировать старые элементы и освобождать старое хранилище.Вам, вероятно, также следует со временем освободить эту память, если ваш список уменьшится настолько, что он больше не понадобится. Подумайте о том, насколько большим должен быть новый кусок памяти, чтобы ваша производительность не снизилась из-за выделения памяти. Например, увеличение размера на 1 элемент — плохая идея.
    11. Если вы правильно выбрали рост в предыдущей задаче, вы обычно не будете распределять ресурсы очень часто. Однако на добавление в большой список иногда уходит много времени. В некоторых приложениях это может быть проблематично.Вместо этого попробуйте выделить новые блоки памяти для новых элементов. Поэтому, когда ваш список полон и пользователь хочет что-то добавить, выделите новый кусок из 100 элементов вместо копирования всех элементов в новый большой кусок. Подумайте, где вести учет имеющихся у вас блоков. Различные стратегии ведения бухгалтерского учета могут значительно изменить характеристики вашего списка.
    12. Реализуйте двоичную кучу. Один раз использовать список в качестве базовой структуры данных и один раз реализовать двоичное дерево, связанное с указателем.Используйте его для реализации сортировки по куче.
    13. Реализовать несбалансированное двоичное дерево поиска.
    14. Реализуйте сбалансированное двоичное дерево поиска по вашему выбору. Мне больше всего нравятся (a, b) -деревья.
    15. Сравните производительность вставки, удаления и поиска в несбалансированном дереве поиска с сбалансированным деревом поиска и отсортированным списком. Подумайте о хороших входных последовательностях. Если вы реализовали (a, b) -дерево, подумайте о хороших значениях a и b.

    Продвинутый

    1. Для двух строк напишите программу, которая эффективно находит самую длинную общую подпоследовательность.
    2. Для массива с числами напишите программу, которая эффективно отвечает на запросы вида: «Какое ближайшее большее значение для числа в позиции и ?», Где расстояние — это разница в индексах массива. Например, в массиве [1,4,3,2,5,7] ближайшее большее значение для 4 равно 5. После предварительной обработки линейного времени вы сможете отвечать на запросы в постоянное время.
    3. Для двух строк напишите программу, которая выводит кратчайшую последовательность вставок и удалений символов, которые превращают одну строку в другую.
    4. Напишите функцию, которая умножает две матрицы вместе. Сделайте его максимально эффективным и сравните производительность с отточенной библиотекой линейной алгебры для вашего языка. Возможно, вы захотите прочитать об алгоритме Штрассена и о влиянии кэша ЦП. Попробуйте различные схемы расположения матриц и s

    .

    10 шагов к решению проблемы программирования | Валинда Чан

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

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

    Вы не можете решить проблему, которую не понимаете. Есть разница между проблемой и проблемой, которую, как вы думаете, вы решаете. Легко начать читать первые несколько строк задачи и предполагать остальное, потому что это похоже на то, что вы видели в прошлом. Если вы делаете даже такую ​​популярную игру, как Палач, обязательно прочтите все правила, даже если вы играли в нее раньше.Однажды меня попросили сделать игру типа Hangman, которую я понял, что это «Evil Hangman», только после того, как я прочитал инструкции (это была уловка!).

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

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

     function selectEvenNumbers () {
    // здесь ваш код
    }

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

    • Как компьютер может определить четное число? Разделите это число на 2 и посмотрите, равен ли его остаток 0.
    • Что я передаю в эту функцию? Массив
    • Что будет содержать этот массив? Одно или несколько чисел
    • Каковы типы данных элементов в массиве? Номера
    • Какова цель этой функции? Что я возвращаю в конце этой функции? Цель состоит в том, чтобы взять все четные числа и вернуть их в виде массива.Если нет четных чисел, вернуть пустой массив.

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

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

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

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

     [1] 
    [1, 2]
    [ 1, 2, 3, 4, 5, 6]
    [-200,25]
    [-800,1, 2000, 3,1, -1000,25, 42, 600]

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

    Давайте пройдемся по первому массиву [1]

    1. Посмотрите на единственный элемент в массиве [1]
    2. Определите, четный ли он. Это не
    3. Обратите внимание, что в этом массиве больше нет элементов
    4. Определите, нет ли четных чисел в этом предоставленном массиве
    5. Верните пустой массив

    Давайте пройдемся по массиву [1, 2]

    1. Посмотрите на первый элемент в массиве [1, 2]
    2. Это 1
    3. Определите, четный ли он.Это не
    4. Посмотрите на следующий элемент в массиве
    5. Это 2
    6. Определите, четный ли он. Это четное значение
    7. Создайте массив с четными числами и добавьте 2 к этому массиву
    8. Обратите внимание, что в этом массиве больше нет элементов
    9. Вернуть массив четных чисел , который равен [2]

    I повторите это еще несколько раз. Обратите внимание, как шаги, которые я записал для [1] , немного отличаются от [1, 2] .Поэтому я стараюсь пройти пару разных сетов. У меня есть несколько наборов с одним элементом, некоторые с числами с плавающей запятой вместо целых чисел, некоторые с несколькими цифрами в элементе, а некоторые с отрицательными числами на всякий случай.

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

    1. Создайте функцию selectEvenNumbers
    2. Создайте новый пустой массив evenNumbers , где я храню четные числа, если они есть
    3. Пройдите по каждому элементу в массиве [1, 2]
    4. Найдите первый элемент
    5. Определите, делится ли оно даже на 2.Если он четный, я добавляю это к evenNumbers
    6. Найдите следующий элемент
    7. Повторите шаг # 4
    8. Повторите шаги # 5 и # 4, пока в этом массиве больше не останется элементов
    9. Вернуть массив evenNumbers , независимо от того, есть ли в нем что-нибудь

    Этот подход может напоминать вам математическую индукцию в том смысле, что вы:

    1. Докажите, что это верно для n = 1 , n = 2 , ...
    2. Предположим, что это верно для n = k
    3. Докажите, что это верно для n = k + 1

    Пример псевдокода

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

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

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

    Вот пример псевдокода, который содержит больше слов:

     function selectEvenNumbers создает массив evenNumbers и устанавливает его равным пустому массиву для каждого элемента в этом массиве 
    , посмотрите, является ли этот элемент четным
    , если элемент четный (если есть остаток при делении на 2)
    добавить к этому массиву evenNumbers return evenNumbers

    Вот пример псевдокода с меньшим количеством слов:

     function selectEvenNumbersevenNumbers = [] for i = 0 to i = length of evenNumbers 
    if (element% 2 === 0)
    добавить к этому массиву evenNumbersreturn evenNumbers

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

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

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

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

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

     selectEvenNumbers ([1]) 
    selectEvenNumbers ([1, 2])
    selectEvenNumbers ([1, 2, 3, 4, 5, 6])
    selectEvenNumbers ([- 200.25])
    selectEvenNumbers ([- 800.1, 2000 , 3.1, -1000.25, 42, 600])

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

     function selectEvenNumbers (arrayofNumbers) {let evenNumbers = [] 
    console.log (evenNumbers) // Я удаляю это после проверки вывода
    console.log (arrayofNumbers) // Я удаляю это после проверки вывода}

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

     // функция selectEvenNumbers 
    функция selectEvenNumbers (arrayofNumbers) { // evenNumbers = []
    let evenNumbers = [] // для i = от 0 до i = длина четных чисел
    for (var i = 0; i // if (element% 2 === 0)
    if (arrayofNumbers [i]% 2 === 0) { // добавляем к этому массиву evenNumbers
    evenNumbers.push (arrayofNumbers [i])
    }
    } // вернуть четные числа
    вернуть четные числа
    }

    Я избавился от псевдокода, чтобы избежать путаницы.

     function selectEvenNumbers (arrayofNumbers) {
    let evenNumbers = [] for (var i = 0; i if (arrayofNumbers [i]% 2 === 0) {
    evenNumbers.push ( arrayofNumbers [i])
    }
    } return evenNumbers
    }

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

    Вы, наверное, заметили, что упрощение и оптимизация — повторяющиеся темы.

    «Простота — необходимое условие надежности».

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

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

     function selectEvenNumbers (arrayofNumbers) {
    let evenNumbers = arrayofNumbers.filter (n => n% 2 === 0)
    return evenNumbers
    }

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

    Вот несколько вопросов, о которых следует помнить:

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

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

    — Джеральд Джей Сассман и Хэл Абельсон, авторы книги «Структура и интерпретация компьютерных программ»

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

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

    «Самым эффективным средством отладки по-прежнему остается тщательная продумка в сочетании с разумно размещенными операторами печати».

    — Брайан В. Керниган, профессор компьютерных наук Принстонского университета

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

    Держитесь подальше от комментариев, например:

    // Это массив. Пройдитесь по нему.

    // Это переменная

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

    • Для чего нужен этот код?
    • Что он делает?

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

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

    — Дядя Боб Мартин, инженер-программист и соавтор Agile Manifesto

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

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

    — Майкл Джозефсон, основатель Института этики Джозефа и Эдны Джозефсон

    .

Добавить комментарий

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