LINUX.ORG.RU

С++ с чего начинать реальную работу

 ,


3

6

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

Не так давно решил уйти из админства и податься в программисты. Очень нравится мне С/С++, но вот ведь незадача, непонятно что именно делать дальше. Суть проблемы в том, что во всех книгах описаны основные функции, циклы, классы и так далее, обычная программа не более 30-40 строк. То есть получается следующее:

1) Учим по книге синтаксис 2) ??? 3) Работаем на крупном проекте

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



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

1) Начать свой мелкий-средний проект. У тех кто начинает программистом, к моменту начала карьеры их накапливаются сотни. Игрушки, всякие полезные утилиты, прототипы, тестовые проекты для изучения сторонних библиотек и т.д. Что-то из этого считается полезным другим, выкладывается на github, это даёт дополнительную мотивацию разрабатывать, улучшать, сохранять совместимость и прислушиваться к багрепортам. Также постепенно на таких проектах оттачивается владением современными технологиями и средствами разработки (правильное оформление проекта, правильное ведение истории в VCS, сборочная система, тесты, документация, CI, статический анализ, покрытие и т.д.). В итоге такие проекты становятся веским аргументом при устройстве на работу, а часто и поводом для предложения вакансии.

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

slovazap ★★★★★
()

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

Либо у проекта есть структура, которую можно понять при некоторой усидчивости. Либо это именно куча файлов, которую понимать не нужно :)

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

Вот к примеру не так давно слышал что студенты писали свой торрент клиент, на C, такое можно реализовать на C++?

Такое нужно реализовать на C++. На C писать прикладное ПО медленно, небезопасно и просто вредно.

Вакансий С и Linux практически нет

Ну это не совсем правда - те же nginx, postgrespro постоянно зовут, а ещё какие-то конторы которые пишут драйвера под linux и freebsd для своего железа. Тот же Яндекс, там насколько я знаю половина российских коммитеров FreeBSD работает. Но это всё, правда, скорее всего не для жуниоров, и да, по С++ вакансий гораздо больше, что логично.

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

Я смотрю по Минску. А насчет JavaScript, это вроде как для веба, а меня от веб программирования просто воротит, я не знаю почему и в чем моя проблема, простите если кого-то задел, но просто не мое это. Раньше на перле скрипты писал, мне это нравилось, а потом изменения на проекте и я внезапно понял, что перла я последние месяцев 8 вообще не видел, все сидел и графические окошечки тыкал, потом понял, что разрабы перла вообще никому не нужны и неожиданно для себя посмотри на С/С++. А, смотрел еще на яву, но почему-то С/С++ нравится гораздо больше

Kronick
() автор топика
Ответ на: комментарий от Kronick

С/С++ нравится гораздо больше

Ну тогда читай TC++PL 4rd edition и спроектируй C++ API какой-нибудь библиотеки по всем канонам ООП, например :-) Удачи! :-)

anonymous
()

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

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

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

Kronick
() автор топика

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

Kronick
() автор топика

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

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

ровно так же как лямбды С++11 ни разу бустом не пахнут :)

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

Не его, а комитет-стайл переделку,

И много отличий?

DarkEld3r ★★★★★
()

Напиши текстовую игрушку.

trex6 ★★★★★
()

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

CatsCantFly
()

Пиши велосипед какой-нибудь: текстовый редактор, графический редактор, плеер, RSS-читалка, TODO-планировщик. Можешь глянуть код в популярных программах под Linux после своей реализации и сравнить как там решались проблемы.

P.S. Если не читал следующие книги, то обязательно прочти:

1. Эрик Реймонд «Исскуство программирование под Unix»

2. Б. Керниган, Р. Пайк «Практика программирования»

3. Стив МакКонелл «Совершенный код»

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

Очень нравится мне С/С++

чем нравится?

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

«Хотелось бы начать с небольшого дисклеймера. Всегда найдутся люди, которые пишут на C++ последние лет 20, и потому (1) они искренне считают язык простым и понятным, (2) им не хочется учить что-то новое, ведь их и здесь неплохо кормят. Это, собственно, и есть так называемый C++ головного мозга. Далее я предполагаю, что читатель не страдает от этого недуга и не утратил трезвость восприятия и открытость мышления по каким-либо иным причинам.» (с)

Приемы демагога аж в преамбуле :)

Алсо регистор в урле и «хакирская» иконка — понт засчитан. Аффтар типичная «илитка головного моска». И мазохист: http://eax.me/cygwin/ сигвин для кроссплатформы — это п-ц головного моска :)

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

Xlib, естественно. Или команды tektronix в эмуляции xterm.

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

А чем это консольное приложение «не реальное»? Вот gcc, например - реальное приложение?

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

Зря ты идеализируешь работу погромистов. Она нервная и противная.

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

Пишу на C++ последние лет 20. Люто его ненавидел вплоть до c++11. Теперь я его искренне считаю простым и понятным. C++ изменился, привыкай.

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

о! опять нас радует анонимус со смайликами, осиливший С, но умудрившийся не осилить С++. как дела? glibc обновил?

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

а там нужна физика

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

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

где нужно программировать на уровне ОС

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

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

Ну реализуй мне динамический массив из C99.

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

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

Ты больной? Потому что иначе объяснить почему ты перепутал меня с автором цитаты, выделенной кавычками, невозможно :)

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

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

Просто охренительный уровень познаний у лалки.

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

Ржака. Лорчик не перестает радовать клованами. Покажи мне, куда в двигателе, допустим, последних BMW, пихать «полноценное управляющее устройство»?

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

Ну непохоже же _1 на []

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

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

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

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

Спасибо, кэп. Ты сегодня в ударе.

Ну так, asio, в отличии от лямбд, отлично в качестве библиотеки жить может. Возвращаемся к изначальному вопросу: много в стандартном asio отличий от бустового будет?

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

Полагаю, достаточно, чтоб код пришлось переписывать :)

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

На C писать прикладное ПО медленно, небезопасно и просто вредно.

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

Iron_Bug ★★★★★
()

пока что у тебя каша в голове и ты путаешь тёплое с мягким.
консоль у тебя почему-то ассоциируется с «простым» ПО. хотя всё сложное серверное и бэкендное ПО никогда не имеет никаких гуёв, именно потому, что оно должно работать быстро и надёжно. гуй к любому серверу прикручивается на раз и его как раз частенько пишут таджики от программирования, от которых не требуется никаких особых умений. а с применением Qt наклёпано столько гомна, что его уже девать некуда. причём это не столько проблема Qt, сколько проблема квалификации кодопейсателей, когда доморощенные формошлёпы часто даже не понимают, что происходит под ковром этой самой культи. а для понимания нужно очень хорошее знание основ. которое как раз и развивают книги типа K&R и Страуструпа.
в области С/C++ совершить скачок от начинающего студента к разработчику крупных проектов довольно сложно. при желании и старании лет через десять тебя допустят до серьёзного кода. а до этого будешь писать мелкие задачки, тесты, всякую мелочёвку, которая помогает при разработке и тестировании. а если будешь ползать по поверхности и клепать формочки в креаторе - так и останешься на уровне рисовальщика формочек.
вообще, чтобы работать с какой-то областью (и особенно это касается сетей), нужно читать очень много документации по предмету. безотносительно к языкам программирования. надо понимать, как работают сетевые протоколы и как обрабатываются пакеты. а это куда сложнее, чем программирование на каком-либо языке само по себе. так что если хочешь работать с сетью - в первую очередь бери книги по сетям и читай до просветления. пока ты это читаешь и изучаешь, С и С++ уж как-нибудь освоишь.

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

Быть ленивым и тратить время на то что может и должен делать за тебя язык - разные вещи. А насчёт понимания - привет хотя бы банальному переполнению буффера из glibc. А мне почему-то кажется там понимают в языке куда больше чем ты.

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

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

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

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

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

Kronick
() автор топика
Ответ на: комментарий от Iron_Bug

что происходит под ковром этой самой культи. а для понимания нужно очень хорошее знание основ. которое как раз и развивают книги типа K&R и Страуструпа.

Первая - та, что беленькая с синенькой буквой «C» на обложке - классика :-) Вторая - та толстенная, что с бушующим океаном, - это больше для ремесленников :-) А хорошее знание основ развивают книги типа SICP, HtDP, Programming Languages: Application and Interpretation :-) Если уж охота глазеть на цепепе, можно почитать Elements of Programming :-) А ещё не плохо бы почитать про денотационную семантику, например :-)

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

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

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

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

Знаем мы таких профессионалов, которые чтобы две строки склеить пишут страницу проверок что им malloc NULL не вернул. Ну пишите коли пишется, других только плохому учить не надо.

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

На цепепе, да ещё если по канонам ООП, ты этот тетрис будешь неделю сначала проектировать, рисуя квадратики, соединяя их чёрточками - типа иерархии наследования

Какая нафиг иерархия наследования между текстурками? :) Ты игры писал вообще?

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

Какая нафиг иерархия наследования между текстурками? :)

Какие нафиг текстурки? :-) Человек выучил азы цепепе и ООП, пришёл устраиваться на работу программистом :-) Ему выкатывают задание - «напиши как ты нам тетрис» :-) И тут он забывает ООП и цепепе и начинает работать с текстурками :-) Лол :-)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.