LINUX.ORG.RU

С чего начать новичку?

 , ,


0

4

Подскажите! Имею базовые знания C++, знаю ООП парадигму. Очень интересуюсь opensource. С чего начать разработку под линукс? Есть Linux-API, который позволяет взаимодействовать с ядром оперционной системы, но все это 90 процентов воды. Как вы начинали разрабатывать под линукс? Дайте советы по материалам, группам где можноо найти единомышленников

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

masa ★★★
()

Чтобы начать разрабатывать под Линукс нужно начать разрабатывать под Линукс. Говорят, в хоббийном программировании самое сложное найти себе задачу по силам. Без задачи всё это чтение не имеет особого смысла.

urxvt ★★★★★
()

Есть Linux-API

Очень интересно.

но все это 90 процентов воды

Даже не смешно.

По теме, вот держи мануал по ЦЕРНовскому ROOT, освоишь немного плюсы, ну заодно и простенький анализ данных.

luke ★★★★★
()

Забей или учи дальше. Погляди видео тех кто в универе это осваивал - там книжек пару десятков наверное стоит освоить от и до и тогда да, добро пожаловать в разработку новичком. Думаешь кому-то интересен человек не до конца освоивший иностранный язык и неспособный на нем толком разговаривать? Тут то же самое, только все усложнилось со временем довольно изрядно. Потом еще не забудь конкурентное программирование освоить и прочие ништяки типа распределенных вычислений. В линуксе то Си доминирует, ну еще Ржавой вот продвигают как типа безопасный достаточно. Плюсы это для маньяков с мозгами и никому не интересно освоишь ли ты плюсы, если даже с Си проблемы и опыта на нуле. Вот это системное программирование. Плюсы прикладное типа драйверов видеокарт и игр и пофиг вообще что ты там в императивном стиле монстрячишь, если куча затыков будет тормозить работу программы, причем часть из них могут быть фундаментальными проблемами. Плюсы это в разы более развороченная чем любая другая фиготень из разряда программирования и тащить тебя на себе мало кто станет. Разве что заморочки помогут решить. Но если ты тупой, то тебе никакие плюсы не помогут заретушировать это дело. 90 процентов воды это то что нужно для понимания - знания, то есть теория, а не практика. И ты пока годишься лишь в практиканты. Быстро и четко тебя учить никто не будет - на деле ты быстро встрянешь и все равно придется ворочать тоннами разного уровня продуманности подходами. Ты если даже за неделю книжку освоишь, то уже прогресс. Помножь это на пару десятков книг сколько это будет по времени просто въехать в тему. Линукс тут сбоку окажется, если ты будешь писать переносимый универсальный код. Тут не просто так потешаются над твоим странным желанием. Если ты сможешь пол годика адово учить и все запомнить, получив какой-то навык - уже довольно круто. Вот только когда ты столкнешься с трудностями выручать тебя будет уже в основном теория. Да, учат часто намеренно длинным образом, но понимание за день не складывается и нужно время, чтобы теория улеглась в мозгах даже для гениев схватывающих на лету. Применить они ее не смогут, а лишь всосут как промокашки.

anonymous
()

У тебя не написано, что ты знаешь из инструментов. Изучи документацию к компилятору GCC, какие у него есть ключи командной строки и зачем они ему. Затем изучи autotools (прочитай её документацию), она старая и ужасная, зато после будет выбор.

Saakx
()

С чего начать разработку под линукс?

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

Ygor ★★★★★
()

Как вы начинали разрабатывать под линукс?

Нашёл ошибку, исправил, отправил патч.
Что-то улучшил, отправил патч…

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

группам где можноо найти единомышленников

Не здесь. :)

dataman ★★★★★
()

С чего начать разработку под линукс?

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

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

Lrrr ★★★★★
()
Ответ на: комментарий от AZJIO

Ну 8ч - это минимум. Я этим хотел указать, что нужно именно работать по этой специальности. Иначе банально времени не хватит.

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 1)
Ответ на: комментарий от Reset

Чтобы чему-то научиться, нужно этим заниматься. Что значит «не поможет»? А что поможет? Не заниматься программированием? Заниматься менее 8ч в день? На сколько меньше?

Излагай свои мысли в очевидной и лаконичный форме.

@lovesan тебя тоже касается.

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 1)

С заданными входными данными могу посоветовать что-нибудь написать, используя С++ Asio.

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

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

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

anonymous
()
Ответ на: комментарий от rumgot

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

seiken ★★★★★
()
Последнее исправление: seiken (всего исправлений: 1)

Найди себе проекты, которые тебе интересны, небольшой, средней и высокой сложности и разрабатывай.

И/Или влейся в другие.

Тогда у тебя будет мотивация не бросить это всё.

Я когда изучал Си, то написал консольную игру в «Дурака», самого простого, не подкидного.

anonymous
()
  • Чтоб разрабатывать под X, надо знать как устроен X.
  • Чтоб разрабатывать под Linux, надо знать как устроен Linux.

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

С внешним миром процесс общается без ООП.

Для начала разработки под Linux, требуется как минимум изучить общую модель UNIX. А это на выбор:

  • Таненбаум: Операционные Системы
  • Таненбаум: Minix
  • Столяров: Введение в ОС. МГУ 2006 год

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

P.S.

OОП - это ОСНОВНОЙ инструмент дизайна крупных систем, рекомендую ознакомиться с POODR от Sendi Metz, там даны основные принципы проектирования под любую реализацию ООП (наследования, прототипы, композиция). Еще важно разобраться с принципами функционирования Компьютерных Сетей.

lbvf50txt
()
Последнее исправление: lbvf50txt (всего исправлений: 3)
Ответ на: комментарий от seiken

Даже такой циник, как я, поставил клоуна к такому наглому комменту.

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

u-235
()
Ответ на: комментарий от u-235

А мы на LOR не ради TC, а ради сообщества. Чем больше людей на своем старте изучат устройство ОС сразу, тем меньше будет «кризисов среднего возраста».

Мне написать 2 абзаца не сложно: Таненбаум, Столяров, Литкод. А кому-то эти слова спасут семью и избавят от нервных срывов.

lbvf50txt
()
Ответ на: комментарий от seiken

А что там тогда? Прикладное программирование? Высокоуровневый редактор диаграмм?

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

Если брать другие языки, кроме С и C++, то там как раз стараются, по-возможности, абстрагироваться от конкретной платформы. У C++ тоже есть такая возможность через asio. Почему бы и не воспользоваться?

anonymous
()

Linux Kernel Development

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

anonymous_sama ★★★★★
()
Ответ на: комментарий от seiken

«Реальная работа», «Офис» - могут быть «галерой», могут быть «продуктовой фирмой», а могут быть «Яндекс». Из «галеры» в «Яндекс» практически не подняться, задолбают рутиной, времени на изучение теории востребованной в разработке не будет. А будет изматывающее рисование кнопок на очередном фреймворке.

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

P.S.

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

Можно пойти другим путём взять книги Таненбаума, там +/- тоже самое, в чем-то лучше, в чем-то хуже. Столяров он по мимо общей архитектуры еще дает прикладные советы по CLI, Shell, Make, Vim и так далее. Что на 0 уровне - важно. Таненбаум понятней объясняет архитектуру ОС.

Наверно, лучший вариант это Таненбаум+Столяров тогда они друг друга будут дополнять.

P.P.S.

Столяров доходит до объяснения императивного и декларативного программирования. Таненбаум, на сколько мне известно, работает по теме 2-го тома Столярова, но делает это более основательно и подробно. В целом формула: Таненбаум+Столяров+Leetcode.

lbvf50txt
()
Последнее исправление: lbvf50txt (всего исправлений: 3)
Ответ на: комментарий от lbvf50txt

P.P.P.S.

С полного 0: Столяров+Leetcode+Таненбаум. Так как Столяров - хороший «школьный учитель» и дает введение именно по тому как написать первый «Hello World!».

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

lbvf50txt
()
Последнее исправление: lbvf50txt (всего исправлений: 1)
Ответ на: комментарий от lbvf50txt

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

u-235
()
Ответ на: комментарий от u-235

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

Прям с 0, да один только Столяров объясняет как работать с UNIX, что такое переменная интерпретатора, а что такое переменная окружения. Рассказывает про устройство чисел с плавающей запятой и сопутствующим этому устройству неточностям.

Он реально сколотил хорошую базу для новичка. Но она не достаточна, надо расширять навыки через Leetcode и как минимум самостоятельное изучение Python+SQL.

P.S.

Можно дать пачку книг. Но плюс Столярова в том, что самое необходимое в одном месте. Раз и всё. Его конечно подклинивает к концу во время борьбы с многопоточностью, но «можно пренебречь». Это материал 3-4 курса когда студент уже сам разберется, а на начальном этапе до 6 части включительно в трехтомнике Столярова некчему предаться. Это конкретный, добротный, хороший ВУЗ на твердую 5+.

lbvf50txt
()
Последнее исправление: lbvf50txt (всего исправлений: 3)
Ответ на: комментарий от lbvf50txt

Многопоточность и прочее конкурентное выполнение это задачи с подходом предельной сложности. Все равно что кластером дать управлять новичку или облаком. Ну поставит он программу облака на свой комп. Это же не то же самое что высоко нагруженные системы, которые должны работать слаженно с балансировкой нагрузки и быстрым откликом в реальном времени, имея сложнейшее внутреннее устройство. Его подход сложен из-за устройства языков скорее всего и потому это выглядит как подколбашивание и подклинивание. Столяров судя по описанию весьма хорош, но есть и другие подходы. Любителям функционального программирования будет весело эти муки на почитать. Haskell вон возьмите или Clojure, если хочется чего-то занятного. Питон с SQL это уровень дуболомов традиционщиков ради упрощения разработки методом ее замедления. Это вам не Elixir с его фишечками с дебагом чего там происходит на оборудовании в виртуальной машине. Это как обывателей много - вот вам и питонистов много. Писать просто. Ради этого книги читать - сомнительное дело. Быстро и на системном уровне - Си. Даже плюсы не втащили в линукс, потому что там нужен высокий уровень всего. А потом всякие отморозки типа компании Маска спрашивают вопросы на собеседовании чего делать когда лодка тонет. Как будто от этого код станет работать быстрее и программист должен вот это в программистском стиле решать. Инструментов до фига. Специалистов старательно не готовят. Обежать кучу всего, чтобы понять что это гора хлама тоже время, но наверное стоит его потратить, чтобы знать наверняка чем стоит заниматься. Ну типа APL вот есть, программировать на нем хочется логику работы программы, а потому что пошли все на фиг например. Почему нет? APL нравится - ну так вперед. Чего не хватает можно и на другом языке дописать. Программист может быть как сеньор Робинзон на своем острове - учить можно самостоятельно.

anonymous
()
Ответ на: комментарий от dimgel

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

rumgot ★★★★★
()
Ответ на: комментарий от seiken

у реальной работы есть фича - оптимизация под эту вот конкретную реальную работу - как следствие растёт важность адекватности работы желаемой траектории в ойти

т.е практика важна как культивация параллельно теор знаний осваиваемой области иначе «забудте чему учились в универе вспоминайте школу/дет_сад»

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

qulinxao3 ★☆
()
Ответ на: комментарий от rumgot

Для полноценного роста в IT требуется и Leetcode и Мерджить проекты. Любая односторонняя практика это путь в социальный тупик: Только мерждить - «гребец на галере», только Leetcode - «тепличный олимпиадник».

Ходят на двух ногах: одна практика, вторая теория. Когда в форуме кто-то голопанит «только практика» - он предлагает прыгать только на левой ноге, а кто-то кричит (но таких как правило нет) только «Leetcode» - он предлагает прыгать на только на правой ноге.

Мир IT комплексный: надо и Практику, и Leetcode, и Архитиектуру, и устройство ОС, и принципы Компьютерных Сетей. Требуется гармоничное развитие.

А теперь важное:

Для системного программирования в Linux еще плюс ко всему надо Таненбаума/Столярова как необходимую теорию. Одного С++ и примерного понимания принципов ООП для разработки именно под Linux не достаточно. Это уже к TC и моим рекомендациям конкретно в этом треде.

lbvf50txt
()
Последнее исправление: lbvf50txt (всего исправлений: 2)

c ознакомлением история выч теха

включая табуляторы холерита и обзор физики твёрдого тела позволившей транзистор после wwII

ну и почти не устранимую дилемму на учётные задачи и на вычислительные и долгое существование буквально отличных аппаратно числодробилок vs символьно_бухгалтерских

ну и классические эссе

например

Бахман Программист Навигатор <- статья про noSQL ещё до появления SQL (как и setL Шварца) понятней становится почему структуры[хранения] данных и алгоритмы [мультидоступа] не нужно знать 95%

qulinxao3 ★☆
()
Ответ на: комментарий от lbvf50txt

Только мерждить - «гребец на галере»

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

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

Для полноценного роста в IT требуется и Leetcode и Мерджить проекты

Еще одно ничем не подтвержденное утверждение от тебя. Еще раз: это дрочиво не во вред конечно, но это, как метко @qulinxao3 выразился, как приправа: есть - хорошо, нет - ничего старшного. LetCode и подобные - это бизнес проект, который зарабатывает бабло, это его основная цель. Что все так в них уверовали? - Мне не понятно. Кроме как ачивки заработать и по-фаниться. Понятно, что алгоритмы знать нужно и нужно уметь их применять и задачи решать нужно уметь. Но это можно и в универе делать и в книгах есть задачи и в реальных проектах тоже. По мне так просто распиаренная инфоцыганская хрень.

К тому же вот полюбопытствовал я зашел на их сайт и вижу такой C++ код на главной странице (Binary Tree):

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */

string treeNodeToString(TreeNode* root) {
    if (root == nullptr) {
      return "[]";
    }

    string output = "";
    queue<TreeNode*> q;
    q.push(root);
    while(!q.empty()) {
        TreeNode* node = q.front();
        q.pop();

        if (node == nullptr) {
          output += "null, ";
          continue;
        }

        output += to_string(node->val) + ", ";
        q.push(node->left);
        q.push(node->right);
    }
    return "[" + output.substr(0, output.length() - 2) + "]";
}

void trimLeftTrailingSpaces(string &input) {
    input.erase(input.begin(), find_if(input.begin(), input.end(), [](int ch) {
        return !isspace(ch);
    }));
}

void trimRightTrailingSpaces(string &input) {
    input.erase(find_if(input.rbegin(), input.rend(), [](int ch) {
        return !isspace(ch);
    }).base(), input.end());
}

TreeNode* stringToTreeNode(string input) {
    trimLeftTrailingSpaces(input);
    trimRightTrailingSpaces(input);
    input = input.substr(1, input.length() - 2);
    if (!input.size()) {
        return nullptr;
    }

    string item;
    stringstream ss;
    ss.str(input);

    getline(ss, item, ',');
    TreeNode* root = new TreeNode(stoi(item));
    queue<TreeNode*> nodeQueue;
    nodeQueue.push(root);

    while (true) {
        TreeNode* node = nodeQueue.front();
        nodeQueue.pop();

        if (!getline(ss, item, ',')) {
            break;
        }

        trimLeftTrailingSpaces(item);
        if (item != "null") {
            int leftNumber = stoi(item);
            node->left = new TreeNode(leftNumber);
            nodeQueue.push(node->left);
        }

        if (!getline(ss, item, ',')) {
            break;
        }

        trimLeftTrailingSpaces(item);
        if (item != "null") {
            int rightNumber = stoi(item);
            node->right = new TreeNode(rightNumber);
            nodeQueue.push(node->right);
        }
    }
    return root;
}

void prettyPrintTree(TreeNode* node, string prefix = "", bool isLeft = true) {
    if (node == nullptr) {
        cout << "Empty tree";
        return;
    }

    if(node->right) {
        prettyPrintTree(node->right, prefix + (isLeft ? "│   " : "    "), false);
    }

    cout << prefix + (isLeft ? "└── " : "┌── ") + to_string(node->val) + "\n";

    if (node->left) {
        prettyPrintTree(node->left, prefix + (isLeft ? "    " : "│   "), true);
    }
}

int main() {
    string line;
    while (getline(cin, line)) {
        TreeNode* root = stringToTreeNode(line);
        prettyPrintTree(root);
    }
    return 0;
}

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

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 1)