письмо юному программисту

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

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

И так, читаем письмо юному программисту.

Привет, мой сыночек.

Очень рад что ты заинтересовался программированием. Много лет мы с мамой боролись с твоей игроманией, много нервов и слёз нам всем стоили часы, месяцы и твоё здоровье, потраченные впустую в телефоне и компьютере. Мощный ноутбук, подаренный тебе в 10 лет, 4 года ждал этого момента, когда ты попросил папу - "настрой мне Windows, я хочу научиться писАть программы". Чтож, отлично, я в очередной раз вычистил весь хлам который накопился после последней переустановки винды. Заодно установил WSL2 и Ubuntu-20.04, благо, Windows с недавних пор отлично дружит с Linux, более простую интеграцию с ВМ (Виртуальной Машиной) трудно придумать.

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

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

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

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

В ВМ Линукс решение проще и надёжнее. Во-первых, Линукс более гибкая и удобная система, например, она видит ФС(Файловую Систему) винды, а вот для Windows увидеть все файлы в Линукс сложно. Кроме того, Линукс, как и прочие Юниксы, это инструментальная система, с помощью стандартных утилит задачка решается за минуты.

Нам понадобится пара утилит updatedb/locate. Первая из них находит и индексирует все файлы в ФС. Индексирует - это значит находит и сохраняет в своей БД(Базе Данных) все имена файлов для быстрого поиска.

Надо эту утилиту запустить таким образом:

... $ sudo updatedb

Пока БД обновляется, мы продолжаем. Поиск выполняется другой полезной утилитой find, именно её в результате запустил скрипт updatedb. Когда все файлы проиндексированы, поиск любого из сотен тысяч файлов в системе выполняется мгновенно, напр., что это у нас только что выполнилось??

... $ locate updatedb

/etc/alternatives/updatedb

/etc/alternatives/updatedb.1.gz

/usr/bin/updatedb

/usr/bin/updatedb.findutils

/usr/share/dlocate/updatedb

/usr/share/man/man1/updatedb.1.gz

/usr/share/man/man1/updatedb.findutils.1.gz

Т.е. locate нашёл и показал список файлов содержащих в имени указанный текст. Точно также можно с помощью locate получить список всех файлов в системе:

... $ locate . >all-files

Обрати внимание на маленькую точку, в ней скрыта особая магия. В этой команде она имеет специальный смысл, означающий любой символ. Т.к. имя файла состоит хотя бы из одного символа, мы можем быть уверены, что locate сохранил в новом файле all-files все доступные в обеих системах файлы. Осталось подсчитать число строк. Ещё одна утилита wc (word count) умеет это делать:

... $ wc -l all-files

553182 all-files

wc умеет считать строки, слова и символы, ключ -l показал только строки. Задачка решена, но расскажу ещё немного о наших утилитах. Первая команда locate вывела нам список из 7 файлов. Мы можем использовать этот список в других командах, если воспользоваться ещё одним магическим символом "|". Это вертикальная черта, или pipe, конвейер, передающий вывод, результат работы команды, на вход следующей команды в конвейере. Давай посмотрим, что это за файлы, имеющие слово updatedb в названии.

... $ locate updatedb|xargs file

/etc/alternatives/updatedb: symbolic link to /usr/bin/updatedb.findutils

/etc/alternatives/updatedb.1.gz: symbolic link to /usr/share/man/man1/updatedb.findutils.1.gz

/usr/bin/updatedb: symbolic link to /etc/alternatives/updatedb

/usr/bin/updatedb.findutils: POSIX shell script, ASCII text executable

/usr/share/dlocate/updatedb: Perl script text executable

/usr/share/man/man1/updatedb.1.gz: symbolic link to /etc/alternatives/updatedb.1.gz

/usr/share/man/man1/updatedb.findutils.1.gz: gzip compressed data, max compression, from Unix, original size modulo 2^32 4977

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

Ещё пример, для закрепления:

... $ locate updatedb|xargs ls -l

lrwxrwxrwx 1 root root 27 фев 8 00:52 /etc/alternatives/updatedb -> /usr/bin/updatedb.findutils

lrwxrwxrwx 1 root root 43 фев 8 00:52 /etc/alternatives/updatedb.1.gz -> /usr/share/man/man1/updatedb.findutils.1.gz

lrwxrwxrwx 1 root root 26 фев 8 00:52 /usr/bin/updatedb -> /etc/alternatives/updatedb

-rwxr-xr-x 1 root root 9108 фев 18 2020 /usr/bin/updatedb.findutils

-rwxr-xr-x 1 root root 3792 янв 22 2017 /usr/share/dlocate/updatedb

lrwxrwxrwx 1 root root 31 фев 8 00:52 /usr/share/man/man1/updatedb.1.gz -> /etc/alternatives/updatedb.1.gz

-rw-r--r-- 1 root root 2089 фев 18 2020 /usr/share/man/man1/updatedb.findutils.1.gz

Первой опцией для xargs стоит ls -l, также важная команда. Она показывает атрибуты файла, т.е. его права доступа, т.н. permissions, владельца/группу, дату/время последнего изменения файла, его имя. Более подробно это и многое другое я рассказал в конспекте [Линукс для начинающих](https://ophilon.github.io/gomelug/articles/konspect.html)

Замечательно, Павлик, что ты выбрал для изучения программирования язык C# (читается си шарп, или ре мажор, кто понимает) и среду разработки Unity. При должном упорстве, везении и воображении с этими инструментами можно повторить успех, например, [Angry Birds](https://habr.com/ru/company/nevosoft/blog/159803/).

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

Языков программирования очень много, ещё больше утилит, решающих небольшую задачу. В решении задачки №1, например, мы воспользовались готовыми командами поиска файлов updatedb/locate и командой подсчёта строк wc. Сделали мы это в командном процессоре bash, автоматически запускаемом при входе в ВМ Линукс. Мы также использовали конвейер, позволяющий из нескольких команд написать простейшую однострочную программку.

Ещё важнее, что только командный процессор, сокращённо шелл (shell), даёт доступ ко всем файлам и установленным программам. Под Windows также есть свой шелл, PowerShell, с похожими на bash возможностями. Оба шелл'а являются полноценными языками программирования, программы на таких языках называются обычно скриптами. Таких скриптов в каждой ОС (Операционной Системе) множество, они неотъемлемая часть системы. Если хочешь понять как работает ОС, обязательно надо научиться хотя бы читать и понимать работу скриптов.

Ещё для тебя задачка №2. Точнее, это сразу 4 задачи с отдельной оплатой.

Задачки не относятся напрямую к программированию, но дают очень важное умение - печатать на клавиатуре вслепую. На клавиатуру не надо смотреть, всё интересное и важное только на экране. Клавишы надо знать пальцами, но знать до автоматизма - см. <https://www.ratatype.ru/>.

Мы с тобой договорились о таких гонорарах - 300 руб. за скорость 150 зн./мин., отдельно за русскую и англ. раскладки, при уровне ошибок < 3%. Эта скорость печати ниже средней 200 зн., так что задача вполне реальна. За скорость 300 зн./мин. гонорар будет 3 тыс. руб. за каждый язык.

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

Источник: https://habr.com/ru/post/586208/


Интересные статьи

Интересные статьи

Привет, Хабр!Меня зовут Дмитрий Матлах. Я тимлид в AGIMA. Мы с коллегами обратили внимание, что в сообществе часто возникает вопрос о том, как совместить на одном проекте Bitrix-компоненты и реактивны...
Статья Программист не должен решать задачи бизнеса вызвала неслабое обсуждение (и даже ответ с прямо противоположным утверждением). И, забавно, что все свелось к догматическим рассуждениям из...
В статье описаны необходимые параметры сервера для оптимальной работы сайта на платформе 1С-Битрикс.
DIY посвящается... Одним из наиболее часто задаваемых вопросов в моей консультационной практике являются вопросы связанные с растворением/склейкой пластмасс с помощью всевозможных органических...
Согласно многочисленным исследованиям поведения пользователей на сайте, порядка 25% посетителей покидают ресурс, если страница грузится более 4 секунд.