- Mini-HOWTO по языкам программирования
- Risto S. Varanka
- Перевод: Александр Ермолаев, SWSoft Pte Ltd.
- 1. Введение
- 1.1. Новые версии этого документа
- 1.2. Copyright
- 1.3. License
- 1.3.1. Requirements of Modified Works
- 1.4. Авторские права
- 1.5. ОТВЕТСТВЕННОСТЬ
- 1.6. Связь с автором
- 1.7. Благодарности
- 1.8. Ссылки
- 2. Языки программирования
- 2.1. Принятые обозначения
- 2.2. Основные языки
- 2.3. Shell программирование
- 2.4. Другие языки
- 2.5. Ссылки
- 3. Средства разработки GUI
- 3.1. Принятые обозначения
- Изучите необходимый минимум Linux, чтобы быть продуктивным
- Почему современные бизнес-аналитики должны знать Linux
- Фундаментальная единица Linux: «оболочка»
- Изучаем несколько важных концептов
- Командный синтаксис
- Псевдонимы директорий
- Полезная информация
- STDIN / STDOUT
- Конвейер (piping)
- Шаблоны поиска (wildcards)
- Завершение с помощью tab
- Выход
- Что я помню из команд bash
- Читайте также
- Продвинутые и не часто используемые команды
- Никогда не останавливайтесь:
Mini-HOWTO по языкам программирования
Risto S. Varanka
Перевод: Александр Ермолаев, SWSoft Pte Ltd.
Краткое сравнение основных языков программирования в Linux, а также библиотек для создания графических интерфейсов пользователя (GUIs) в Linux.
1. Введение
Linux можно назвать интерактивнай операционной системой, потому что она позволяет пользователям учавствовать в ее разработке. Для большинства начинающих разработчиков многие существующие языки программирования могут показаться очень сложными. Этот документ поможет вам разобраться в их преимуществах и недостатках (которые я отметил).
Моей целью не является выявление оптимального языка. Каждый из них является инструментом для решения определенных задач. Вы можете о них узнать у своих знакомых, но такая информация будет довольно спорной. Воспользовавшись главой, содержащей ссылки, вы можете самостоятельно получить информацию об этих языках.
Существует целая плеяда языков и библиотек для Linux, этот документ затрагивает лишь некоторые из них. Я постарался быть беспристрастным, но не смог сделать обозрение всех языков. Так как мои рассуждения основываются на личном опыте, то я бы посоветовал серьезным разработчикам заглянуть и на официальные сайты.
Этот документ один из последних добавлений в LDP, поэтому я еще не получил отзывов о его содержании. Тем не менее, надеюсь, он будет полезен всем интересующимся программированием в Linux, в особенности, начинающим. Знак вопроса в таблицах означает недостаток сведений. Если вы ей владеете, то проинформируйте меня об этом.
1.1. Новые версии этого документа
Вы можете найти последние версии по адресу http://www.helsinki.fi/
1.2. Copyright
Copyright (c) 2000 Risto Varanka.
1.3. License
The following license terms apply to all LDP documents, unless otherwise stated in the document. The LDP documents may be reproduced and distributed in whole or in part, in any medium physical or electronic, provided that this license notice is displayed in the reproduction. Commercial redistribution is permitted and encouraged. Thirty days advance notice via email to the author(s) of redistribution is appreciated, to give the authors time to provide updated documents.
1.3.1. Requirements of Modified Works
All modified documents, including translations, anthologies, and partial documents, must meet the following requirements:
The modified version must be labeled as such.
The person making the modifications must be identified.
Acknowledgement of the original author must be retained.
The location of the original unmodified document be identified.
The original author’s (or authors’) name(s) may not be used to assert or imply endorsement of the resulting document without the original author’s (or authors’) permission.
In addition it is requested that:
The modifications (including deletions) be noted.
The author be notified by email of the modification in advance of redistribution, if an email address is provided in the document.
As a special exception, anthologies of LDP documents may include a single copy of these license terms in a conspicuous location within the anthology and replace other copies of this license with a reference to the single copy of the license without the document being considered «modified» for the purposes of this section.
Mere aggregation of LDP documents with other documents or programs on the same media shall not cause this license to apply to those other works.
All translations, derivative documents, or modified documents that incorporate any LDP document may not have more restrictive license terms than these, except that you may require distributors to make the resulting document available in source format.
1.4. Авторские права
Авторские права на русский перевод этого текста принадлежат © 2000 SWSoft Pte Ltd. Все права зарезервированы.
Этот документ является частью проекта Linux HOWTO.
Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но так или иначе автор текста и автор перевода желали бы знать о таких дистрибутивах.
Все переводы и производные работы, выполненные по документам Linux HOWTO должны сопровождаться этой заметкой об авторских правах. Это делается в целях предотвращения случаев наложения дополнительных ограничений на распространение документов HOWTO. Исключения могут составить случаи получения специального разрешения у координатора Linux HOWTO с которым можно связаться по адресу приведенному ниже.
Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: , или к координатору русского перевода Linux HOWTO компании SWSoft Pte Ltd. по адресу
1.5. ОТВЕТСТВЕННОСТЬ
ЭТОТ ДОКУМЕНТ ОХВАТЫВАЕТ ОЧЕНЬ БОЛЬШУЮ И ПОСТОЯННО МЕНЯЮЩУЮСЯ ОБЛАСТЬ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ. ПО ЭТОЙ ПРИЧИНЕ, ИНФОРМАЦИЯ В ЭТОМ ДОКУМЕНТЕ МОЖЕТ БЫТЬ НЕВЕРНОЙ ИЛИ УСТАРЕВШКЙ. ИСПОЛЬЗУЙТЕ ЭТОТ ДОКУМЕНТ И ИНФОРМАЦИЮ, В НЕМ СОДЕРЖАЩУЮСЯ, ИСКЛЮЧИТЕЛЬНО НА СВОЙ СТРАХ И РИСК. АВТОР НЕ ДАЕТ НИКАКИХ ГАРАНТИЙ, ПРЯМЫХ ИЛИ КОСВЕННЫХ.
1.6. Связь с автором
Вы можете послать свои отзывы и предложения автору по адресу: risto.varanka@helsinki.fi.
Домашняя страничка автора находится по адресу http://www.helsinki.fi/
1.7. Благодарности
Я благодарен нескольким людям, которые консультировали меня по вопросам различных языков. Эти консультации дали мне возможность рассмотреть все языки с точки зрения различных сторон применения. В особенности, я бы хотел поблагодарить людей из чата RCNet #linux: Morphy, Bluesmurf, Vadim, Zonkˆ, Rikkus и других, чьи имена я, к сожалению, не помню. Большое спасибо Stig Erik Sandoe за полезные советы и комментарии.
1.8. Ссылки
Исчерпывающий список библиотек и инструментов разработчика обеспечения в Linux:
The Hacker FAQ Это еще один интересный текст написанный Eric S. Raymond. Он написан для новичков в разработке программного обеспечения в Linux. Там затронуты аспекты культурного и психологического плана, в связи с разработкой программного обеспечения с общедоступными исходными текстами.
LDP documents покрывают общие темы программирования, включая Reading List HOWTO и Руководство разработчика в Linux (Linux Programmer’s Guide) — еще несколько написаны на более узкие темы.
2. Языки программирования
C, Lisp и Perl являются традиционными языками программирования в системе GNU/Linux; Python, PHP, Java и C++ присоединились к их числу совсем недавно.
2.1. Принятые обозначения
Указывает, насколько язык удовлетворяет потребности людей с небольшим опытом программирования. Язык, отмеченный «да», должен быть прост для изучения новичком.
Как быстро ваши приложения будут работать, когда вы выпустите их в виде готового продукта. Эффективность зависит более от личных навыков алгоритмического программирования, чем от фактического языка. Как правило, C, C++ и Fortran являются иногда необходимыми, потому что они могут решать больше задач, в отличии от других языков — с другой стороны они могут быть неприменимы для достижения желаемой цели. (Одна идея для тестирования языков состояла в том, чтобы осуществить простой алгоритм сортировки во всех из них, а затем сравнивать продолжительность выполнения задания. Кто-нибудь хочет помочь мне в этом?)
ООП, Объектно-ориентированное программирование против других парадигм
Объектно-ориентированное программирование — важная составляющая программирования, которая получает все большее распространение. В объектно-ориентированном программировании, структуры данных и алгоритмы интегрированы в модули, часто называемые классами. ООП часто контрастирует с процедурным программированием (которое использует разделение алгоритмов и структуры данных). Это строго не зависит от языка: вы можете осуществлять ООП на языках, не причисляемых к объектно-ориентированным (C например), и программирование в процедурном стиле на языках, причисляемых к ОО. Я причислил к объектно-ориентированным языки, которые имеют специальные особенности или расширения, чтобы облегчить ООП. Функциональные языки (Lisp например) являются иным — среди других, функциональное программирование — надмножество ООП. Логическое программирование (Prolog), также называемое декларативным программированием, с другой стороны, не связано с иными типами программирования, в подобном смысле.
RAD, Быстрая разработка приложений
Многое зависит от инструментальных средств, которые вы используете, а не от языка. Имеется HOWTO по инструментам разработки GUI для Linux, хотя уже устаревшее. С хорошим графическим инструментом вы можете быстро разрабатывать приложения. Иногда RAD основан на многократном использовании готового кода, тем более что свободно распространяемое ПО — хорошая основа для этого.
Области, в которых наиболее часто используется данный язык программирования. Другие области существуют, но в них применение данного языка не так ярко выражено.
Дополнительная информация относительно языка, «диалекты».
2.2. Основные языки
2.3. Shell программирование
Оболочки — это также важная среда программирования. Я не охватил эту область, потому что не до конца понимаю ее. Знание shell важно для любого, кто регулярно работает на Linux, особенно для системных администраторов. Имеются подобия между shell программированием и созданием скриптов (сценариев) — часто они могут достигать тех же самых целей, и вы можете выбирать между родной оболочкой и скрипт-языком. Среди наиболее популярных оболочек можно отметить bash, tcsh, csh, ksh и zsh. Вы можете получить основную информацию по вашей оболочке с помощью команды man например, man bash.
2.4. Другие языки
Другие языки: AWK, SED, Smalltalk, Eiffel, ADA, Prolog, assembler, Objective C, Logo, Pascal (p2c конвертер)
2.5. Ссылки
Общий информационный сайт по языкам программирования, большое количество информации и мнений.
3. Средства разработки GUI
Стандартные графические подсистемы для UNIX и Linux, называемые X(иксами), имеют свои собственные библиотеки для разработки GUI. Они обеспечивают программный интерфейс на низком уровне для X, но довольно сложны в использовании. Они, конечно, хороши для старых приложений, но в настоящее время используются GTK+ и Qt, так как их используют две популярные среды — GNOME и KDE.
3.1. Принятые обозначения
Общее название или аббревиатура библиотеки.
Подходит ли библиотека для начинающего программиста.
Различные лицензии для различных средств (инструментов) разработки GUI имеют практическое значение. Лицензии GTK+ и TK позволят вам разрабатывать приложения с открытыми исходными текстами и без них, без оплаты за лицензию. Лицензия Motif требует оплаты, лицензия QT требует оплаты, если вы распространяете приложения без исходных текстов.
Язык, который наиболее часто используется со средствами разработки.
Другие языки, которые могут использовать комплект инструментов.
Приложения, использующие библиотеку.
Дополнительная информация по средствам разработки.
Источник
Изучите необходимый минимум Linux, чтобы быть продуктивным
Разные операционные системы длительное время обслуживают различные аудитории: Windows — бизнес-профессионалов, Mac — творческих, а Linux — разработчиков. Разработчикам ОС такой тип рыночного спектра сильно упростил концепцию продукта, технические требования, пользовательский опыт и направление рынка. Однако, он также ужесточил нормы рабочего пространства, что деформировало отдельных пользователей под узкие, непересекающиеся области: у бизнесменов нет возможности заглянуть в творческий процесс, а у разработчиков нет представления о проблемах бизнеса.
В реальности знания и опыт — динамичны, они охватывают несколько дисциплин и сфер деятельности. Представление о том, что «можно иметь способности только к чему-то одному» — это не руководство к овладению мастерством, а попытка справиться с преждевременной оптимизацией. Узнать о том, в чём вы хорошо разбираетесь можно только когда вы попробовали себя в нескольких разных вопросах. И может оказаться, что у вас есть способности ко многим видам деятельности.
Для современных бизнес-аналитиков особенно актуален вопрос ликвидации пробела между бизнесом и разработкой. Бизнес-аналитики должны быть двухплатформенными, способными использовать командную строку, доступную только на Linux (или в macOS), но при этом уметь извлекать широкие возможности из Microsoft Office в Windows. Очевидно, что мир Linux пугает тех, у кого образование в сфере бизнеса. К счастью, как и в большем количестве вопросов, вам необходимо изучить 20% информации, чтобы выполнить 80% работы. Вот мои 20%.
Почему современные бизнес-аналитики должны знать Linux
Благодаря своим open source корням, Linux выиграл от вкладов тысяч разработчиков за всё время его существования. Они построили программы и утилиты, чтобы упростить работу не только себе, но и тем программистам, которые последовали за ними. В результате open source разработка создала эффект сетевой выгоды: чем больше разработчики строили утилиты на оригинальной платформе, тем больше других разработчиков могло влиять на эти утилиты, чтобы писать собственные программы.
В результате получился огромный пакет программ и утилит (то есть софт), который был написан на Linux и под Linux. Большая часть его никогда не портировалась в Windows. Один из примеров — популярная система контроля версий (VCS), которая называется git. Разработчики могли написать софт под Windows, но они этого не сделали. Они написали его для работы в командной строке, для Linux, потому что Linux — экосистема, в которой уже были все необходимые инструменты.
Если вдаваться в подробности, разработка на Windows ведёт к двум основным проблемам:
- Базовые задачи, вроде парсинга файлов, рабочего планирования и поиска текста используются чаще, чем запуск утилиты командной строки.
- Языки программирования (Python, C++) и связанные с ними библиотеки выкидывают ошибки, потому что они ожидают конкретных параметров Linux или специфических локаций файловой системы.
Если собрать всё вместе, это выльется в трату времени на переписывание базовых инструментов, которые уже доступны в Linux, они позволят избежать ошибок совместимости с ОС. Тут нет никаких сюрпризов — экосистема Windows просто не была задумана и спроектирована под нужды разработки софта.
Теперь давайте рассмотрим базовые идеи Linux.
Фундаментальная единица Linux: «оболочка»
Shell (оболочка, также известная как терминал, консоль или командная строка) — это текстовый интерфейс пользователя, через который команды отправляются машине. На Linux, по-умолчанию, язык оболочки называется bash. В отличие от Windows-пользователей, которые в своём большинстве используют навигацию «навести-кликнуть» по окну, Linux-разработчики привязаны к клавиатуре и пишут команды в оболочке. Хоть этот переход далёк от естественного для тех, у кого нет бэкграунда в программировании, плюсы разработки в Linux сильно перевешивают изначальное вложение в обучение.
Изучаем несколько важных концептов
В сравнении с достаточно зрелым языком программирования, bash имеет всего несколько основных концептов, которые необходимо выучить. Как только вы охватите это, остаток bash — простое запоминание. Я переформулирую понятней: хорошо разбираться в bash значит запомнить 20-30 команд и их часто используемые аргументы.
Linux кажется непроницаемым для тех, кто не касается разработки, из-за способа, которым разработчики (не напрягаясь) извергают эзотерические команды терминала, когда им захочется. Правда в том, что они хорошо знают только несколько десятков команд — за всем более сложным они так же (как и все смертные) обращаются в Google.
Опуская мелкие загвоздки, стоящие на пути, вот главные концепты в bash.
Командный синтаксис
Команды соответствуют синтаксису:
Например, в ‘grep -inr’, grep — это команда (для поиска текстовой строки) и -inr это флаги/аргументы, которые меняют то, что grep выполняет по умолчанию. Единственный способ понять, что это значит, поискать что-то о них через Google или просто ввести ‘man grep’. Я рекомендую выучить команды и их самые используемые аргументы: слишком обременительно помнить, что делает каждый флаг.
Псевдонимы директорий
- Текущая директория (где я?): .
- Родительская директория текущей директории: ..
- Домашняя директория пользователя:
Например, чтобы поменять текущую директорию на родительскую директорию нужно ввести: cd ..
Таким же способом, чтобы скопировать файл, расположенный в «/path/to/file.txt» в текущую директорию, нужно ввести cp /path/to/file.txt . (заметьте, что в конце команды точка). Поскольку это всего лишь псевдонимы, вместо них может использоваться реальное имя пути.
Полезная информация
У нас есть курс по операционным системам. Зарегистрированные пользователи могут пройти его бесплатно. Другие бесплатные курсы можно найти по ссылке.
STDIN / STDOUT
Всё, что вы пишите в окне и подтверждаете (с помощью ENTER), называется стандартным вводом (STDIN).
Всё, что программа выводит в ответе в терминал (например текст из файла), называется стандартным выводом (STDOUT)
Конвейер (piping)
Pipe принимает STDOUT от команды слева от pipe и превращает его в STDIN для команды справа от pipe.
пример: echo ‘test text’ | wc -l
Символ «больше» принимает STDOUT от команды слева и записывает/перезаписывает в новый файл справа
пример: ls > tmp.txt
Два символа «больше» принимают STDOUT от команды слева и добавляют к новому или существующему файлу справа.
пример: date >> tmp.txt
Шаблоны поиска (wildcards)
Можете представить это как символ % в SQL. Например, можно написать WHERE first_name LIKE ‘John%’ , чтобы найти любые позиции, где данные начинаются с имени John.
В bash можно написать John* . Если вы хотите вывести список всех файлов в какой-то папке, заканчивающихся на «.json», пишете : ls *.json
Завершение с помощью tab
Bash часто завершает команды сам, по определённой логике, если вы начинаете вводить команду и нажимаете TAB.
Однако, стоит попробовать что-то вроде zsh или fish для автозаполнения, потому что запоминать команды и все их параметры очень сложно. Более того, эти инструменты применят автозаполнение, основываясь на вашей истории используемых команд.
Выход
Иногда вы застреваете в какой-нибудь программе и не можете оттуда выйти. Это очень часто повторяющееся событие для новичков в Linux, которое невероятно демотивирует. Часто выход происходит с помощью чего-то, содержащего q. Хорошо бы запомнить то, что будет написано ниже и использовать, когда вы в ловушке.
Что я помню из команд bash
Это те команды, которые я использую чаще всего в Linux (начиная от самых часто используемых к самым редко используемым). Как я уже писал раньше, знание всего горстки команд поможет выполнять большой набор необходимых программируемых задач.
- cd
изменить директорию - ls -lha вывести директорию в виде списка (подробного)
- vim или nano редактор командной строки
- touch
создать новый пустой файл - cp -R
скопировать файл или директорию (и всё их содержимое) - mv
переместить или переименовать файл - rm
удалить файл - rm -rf
удалить файл или папку без возможности восстановления [использовать аккуратно!] - pwd вывести текущую рабочую директорию
- cat или less или tail или head -n10
вывести в STDOUT содержимое файла - mkdir
создать пустую директорию - grep -inr
найти строку в любом файле этой директории или дочерних директориях
column -s, -t отобразить разделенный запятыми файл в виде столбцов
ssh
tree -LhaC 3 показать структуру директории на 3 уровнями вглубь (с размерами файлов и включая скрытые директории)
htop (или top ) диспетчер задач
pip install —user
pushd . ; popd ; dirs; cd — push/pop/view директорию в стек + изменить обратно на последнюю директорию
sed -i «s/
find . -type f -name ‘*.txt’ -exec sed -i «s/
tmux new -s session, tmux attach -t session создать новую сессию терминала без создания нового окна [продвинутый уровень]
wget загрузить веб-страницу или веб-ресурс
curl -X POST -d «
find вывести список всего содержимого директории и её дочерних директорий рекурсивно
Читайте также
Продвинутые и не часто используемые команды
Я считаю хорошей практикой хранить список команд, которые полезны в определённых ситуациях, даже если подобные ситуации случаются редко (например, какой процесс блокирует конкретный сетевой порт). Вот несколько нестандартных команд, которые у меня всегда под рукой:
- lsof -i :8080 вывести список дескрипторов открытых файлов ( -i — флаг для сетевых интерфейсов)
- netstat | head -n20 вывести список открытых интернет/UNIX сокетов и связанной с ними информации
- dstat -a транслировать текущий диск, сеть, активность CPU и другое
- nslookup найти hostname для удалённого IP-адреса
- strace -f -e отследить системные вызовы программы ( -e — флаг для фильтрования конкретных системных вызовов)
- ps aux | head -n20 вывести текущие активные процессы
- file проверить тип файла (например исполняемый, бинарный, текстовый файл с кодировкой ASCII)
- uname -a информация о ядре ОС
- lsb_release -a информация об ОС
- hostname проверить hostname текущего компьютера (например, название, чтобы другие компьютеры могли иметь доступ к вашему)
- pstree визуализировать форки процессов
- time исполнить команду и составить статистику о том, сколько времени потребовалось на исполнение
- CTRL + z ; bg; jobs; fg отправить процесс в текущий tty в background и обратно на передний план
- cat file.txt | xargs -n1 | sort | uniq -c посчитать количество уникальных слов в файле
- wc -l количество строк в файле
- du -ha показать размер на диске для директорий и их содержимого
- zcat вывести содержимое заархивированного текстового файла
- scp скопировать файл с удалённого на локальный сервер или наоборот
- man
показать инструкцию, (т.е. документацию) для команды (но скорее всего легче использовать Google)
Никогда не останавливайтесь:
В программировании говорят, что нужно постоянно учиться даже для того, чтобы просто находиться на месте. Развивайтесь с нами — на Хекслете есть сотни курсов по разработке на разных языках и технологиях
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.
Источник