×Закрыть

Что нужно знать, чтобы работать C++ разработчиком?

Какие знания необходимы, чтобы устроиться на должность junior? Какие книги прочитать? Где искать информацию? Где получить опыт?

LinkedIn

Лучшие комментарии пропустить

В принципі, тема дуже обсосана, як на форумі так і в інтернеті і цей пост свідчить, що ви або не дуже вмієте шукати інформацію або трішки лінивий. Але я все ж напишу, сподіваюсь, буде корисно:

— Англійська.
— Вміти реалізовувати(на папірці на співбесіді) більшість базових алгоритмів а-ля сортування, реверс стрічки, список і т.д.
— Добре знати теорію, наслідування, віртуальні деструктори, перевизначення і т.д.
Багато інтерв"юєрів(особливо не дуже досвідченних) люблять задрочувати до дірок різні питання з вказівниками і ссилками(що це таке, де, для чого, вказівник на вказівник, константний вказівник, вказівник на константу і т.д. )
— Знати будову і принципи роботи основних контейнерів, алгоритмів, ітераторів з СТЛ.
— Якщо вакансія вимагає 11/14 стандарт — відповідно орієнтуватися у всіх основних нових фішках.
— Доволі часто питають різні багатопотокові штуки, навіть якщо вакансія не вимагає.
— Патерни, спитають 95%. Скоріше за все, попросять реалізувати на папірці сінглтон і/або фабрику.
— Часто просять прислати ссилку на свій приклад коду або дають тестове завдання. В цьому випадку будуть звертати увагу на наступне(окрім очевидного, що б код працював): вміти писати ЧИСТИЙ КОД, що це таке, прочитайте тут: www.hyade.com/...​85-978-5-496-00487-9.html

P.S. Шановні інтерв«юєри, якщо ви впізнали себе в цьому списку, будь-ласка, щось міняйте або просто не копіюйте питання один в одного.
Моделюйте проблему і попросіть людину її вирішити, а не цей булшіт «чим ссилка відрізняється від вказівника», «для чого потрібен віртуальний деструктор» і т.д.

Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

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

плюс учится гораздо быстрее

Интересно за сколько можно освоить какой-нибудь Angular ну хотя бы на уровне пусть даже не основных концепций но чисто практик применения без особого понимания «глубины» (конечно если такового достаточной таки для «работы тьма» и «порога вхождения»)?

А че не за полчаса?

Обожаю такие вопросы)) Это зависит от человека, конкретного человека, его уровня обучаемости и то как быстро он схватывает новую информацию. Но так в прикид, что за недельки 3-4 можно привести знания Ангуляра до джуновских и попрактиковаться. При условии что в день не меньше 4х часов уделять. Но это сугубо мое мнение.

Коменти не читав. Вже пропонували не вчити С++ і вибрати щось інше просте?
Попереджу створення нової теми про вибір робочого ноутбука: купляй MacBook Pro (Retina, 13-inch, Late 2013) .

C++ разработчиком
робочого ноутбука

13-inch

— Омг....))))

це такі станарти ДОУ :)

ІДЕ-шка + Гіт консоль чи гуі + власне написана десктопна прога, консоль чи гуі — і це все на 13-inch?

ок, бачу ви сарказм не зрозуміли.

Йому просто ноут продати треба :)

А без макбука какой же ж смузихлёб?

Ха уменя один из ноутбуков рабочих 13 дюймовый :) Вобщем может быть только с хорошей докстанцией

Какие книги прочитать?

Я начинал с Лафоре. Говорят, есть даже норм перевод.
Потом советую прочитать Страуструпа.
В последнем издании есть одиннадцатые плюсы.
Затем берись за Мейерса (#1, #2, #3). А вообще его можно параллельно изучать.
Ну а дальше уже инженерия: Кент Бек, Мартин Фаулер, Эндрю Хант, Дядюшка Боб.
Много референсов есть в книге Макконнелла.

Где искать информацию?

stackoverflow, cplusplus, isocpp, разные блоги топовых специалистов.

Где получить опыт?

Придумай себе задачу. И решай ее. Разного рода хоум-мейд тулзы.
Я в свое время написал челику дипломный. Что-то вроде первого «серьезного» опыта.

И главное:

Какие знания необходимы, чтобы устроиться на должность junior?

Нужна предметная область. «Голые» плюсы никого не интересуют.
Опять же, ищи себя, пили интересующие тебя штуки.

На джуна могут взять и с «голыми», например, в эмбеддед или телеком.
Будут спрашивать линукс, многопоточность, design patterns, структуры данных и алгоритмы, могут спросить про оптимизации.

Я тоже начинал с Лафоре!!!
Учебник — супер, но интересный факт — я 5 лет писал на джаве, а теперь на Go.

www.parashift.com/c -faq-lite/index.html — мне в свое время очень помогло.

И немного в сторону — Философия Джава ( Эккель ) - для понимания сути ООП, причем не вся книга а примерно первая половина.

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

Что нужно знать, чтобы работать C++ разработчиком?

Теорему пифогора

А как же теорема Ла-Гранжа?

Формула конечных приращений или теорема Лагра́нжа о среднем значении:
www.youtube.com/watch?v=GwDClnIBUIg

Теорема необходимости теоремы Лагранжа в С++ сводится к теореме Эскобара о применимости утиной типизации в оценке отношений критерием генотранспортной системы.

Джаву! 8-)

Почему именно С++?
Ответ на этот вопрос может дать подсказки о том, что делать дальше. И, возможно, ответ неверен, и начинать стоит с чего-то другого.

о, якраз в тему
dou.ua/forums/topic/21252
Если ли смысл уходить с C++\Qt в C#+WPF ?
Добрый день ! Так сложилось что я пишу под десктоп и делаю я это хорошо, более того мне такая работа очень нравится, в основном это С++ и Qt, но мне предложили работу в Харькове (я сам из Запорожья), на стеке .NET и именно : C#\WPF и

!!очень хорошую оплату труда!!

работать C++ разработчиком?

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

Ви дуже помиляєтесь в кожному рядку.

Добавлю еще направление для с++: счетные части в ML. Но это не здесь, а в америках, китаях да израилях.

Мдааа, и где такие берутся)))

А потом всплывает юзание эн-квадратной сортировки вместо линейного поиска максимума.
m.habrahabr.ru/post/333782

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

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

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

2 + 2 это тоже матан. Тут вопрос где остановится )

Что нужно знать, чтобы работать C++ разработчиком?

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

Вообще-то, понимая как работают указатели, можно и на ассемблере писать. Искусство программировать — это УЙТИ от понимания как работают не только указатели, но и вообще вся второстепенная херня, и как можно скорее перейти к бизнес-логике.

Почему так: цена ошибки, вероятность ошибки, выгода результата, сроки результата.
Чем меньше низкоуровневой логики пишется «с нуля», тем факапов меньше. А результат на низком уровне получить сложно и очень дорого. Мало того, он не виден до последней секунды реализации.

Так что учи мат.часть. Потому как есть сомнения что ты когда-либо писал Hello world.

и как можно скорее перейти к бизнес-логике.

Бизнес-логику можно и на бейсике писать. Нo чел хочет быть разработчиком C++

Искусство программировать — это УЙТИ от понимания как работают не только указатели, но и вообще вся второстепенная херня, и как можно скорее перейти к бизнес-логике.

Так не получается. Закон дырявых абстракций.

Искусство программировать — это УЙТИ от понимания как работают не только указатели, но и вообще вся второстепенная херня

Скоріше навпаки, знання того як все працює дає багато переваг, навіть якщо код пишеться високорівневий.

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

float adc;
int adc_val = read_adc(4); //read new adc value
adc=0.8*adc+0.2*adc_val;
В результаті використання флоат, цей рядок «з’їсть» більшу половину ресурсів.

якщо написати іншим способом:
adc_val= read_adc(4) ; //read new adc value
adc=(8 * adc)/10 + (2 * adc_val)/10;

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

Звичайно це специфічна задача, але мораль в тому, що якщо не знати основ, то матимемо калькулятори які працюють нормально тільки на 4 ядрах та гігабайтами RAM....

i де тут С++ шугар?

read new adc

ловлевельний ловлевел

"

Звичайно це специфічна задача,

" А сахарок — то для проектів на 1М рядків, щоб не скопититись, допилюючи 100500 разів if-else в чисте Сі.

для проектів на 1М рядків

старi унилi говно проекти?

1М == унилі?
Унилі — це якраз без сахарка.

ловлевельний ловлевел

буде якщо написати так:

adc_val = ADCH; // read new adc value from ADC register :)

як правило тре зчитати два регiстра

так. результат 10 біт
2 старших біти будуть в ADCH
8 молодших в ADCL,

але якщо встановити біт ADLAR, результат ADC буде 8-ний, і буде зберігатись в ADCH

думаю що cаме так, але С++ тут нiяким боком не тулиться

dou.ua/...​rums/topic/21246/#1149939

работать C++ разработчиком?

а смысл?
лов-левел — на чистом С,
бизнес-логика пишется на других языках,
ну разве что в игрострой

213 вакансий в категории Java (i нiяких смарт указателiв)
jobs.dou.ua/vacancies/?category=Java
зарплатник ДОУ привести, чим сам пасмотриш?

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

А QA ще більше, і ??
Давай ще зарплатник з різницею більшою, ніж шумовий рівень.

В джаве GC на рекурсию клинит уже выяснили. #trollface

о Джавi, вспомнилося, що чуваки обнаружили, що GC тормозить занадто apk, то зробили свiй меморi пул с об"ектами (лунапарк з шлюхами) й вийшло почтi як в стилi C++

бизнес-логика пишется на других языках,
ну разве что в игрострой

Не поверишь там в этих местах (бизнес-логика) скрипты всякие навроде lua...

ну разве что в игрострой

Дык и в игрострое же ж скрипты всякие там вот же ж об чом! ))

так С++ воопще непонятно для чого

Чтобы сшить вместе lua с opengl и cuda какой-нибудь ну и GC самописный зато предсказуемый (и поддерживающий рекурсию гыгыгы).

Карочи сам движок вотЪ.

GC

о_О,
я таким булувався для подтирання за С++ гуру,
ибо внезапно на роутерi С++ app веде себе не так як на десктопi (тече сцуко пам"ять)

Ну да долго ли умеючи х.як х.як «теперь у нас втроенная убунта из десктопного дистра!» стой чувак зачем чувак есть же ж нормальные сборки для этого «астанавитесь!» та не всё норм «и в продакшен!» (к) (тм)

ЗЫ: GC то фигня когда-то я писал гейдев ну на совсем низком уровне не таком конечно низком как шрЁдеры но преобразование памяти «из системного куда-то вверх» было приннём приннём так вот в один интересный момент сурово закопавшись в попытки понять совместное взаимодействие пары применённых фреймворков и движков я вдруг обнаружил (с удивлением признаю за что и люблю всё ещё эту профессию есть чему удивляться несмотря на годы) ... ещё один (здесь custom) memory allocator. И ещё один! Всего что-то штук 6+ я их там нарыл специально тупо начал «по коду грипать».

Вот вы тут говорите «указатели» а вот я видел код в котором не ставилась разница (автор видимо не понимал тупо приводил одно к другому напрямую) между FILE и дескриптором OS API и объектами std::stream like.

я видел код в котором не ставилась разница (автор видимо не понимал тупо приводил одно к другому напрямую) между FILE и дескриптором OS API и объектами std::stream like.

нижче пишуть, що надо виучить «розумнi вказiвники», та не знати горя

Брехня! (к) (тм)

ЗЫ: кстати я даже не поленился заглянуть ну мало ли до чего техника дошла (к) (тм) так вот...

template< class Y, class Deleter, class Alloc > shared_ptr(...)

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

«Не здав!» (к) (тм)

1.

(8 * adc)/10 + (2 * adc_val)/10

=>

((8 * adc) + (2 * adc_val))/10

2.

((8 * adc) + (2 * adc_val))/10

=>

(4 * adc + adc_val)/5

3.
Замало контексту але є в мене думка що можна звести до попереднього обрахунку adc і накопичувати лише значення read_adc(...);

зразу видно що Xперт, мабуть, ще й матан знаеш

Ну если общий множитель в Родине теперь «матан» то таки да «пропало всё!» (к) (тм) ))

Все можна оптимізувати. Метою мого посту було показати що може трапитись якщо не знати нюансів...

Метою мого посту було показати що практика показує сценарій «а це що таке?» «а тут бла-бла-бла»:

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

(к)

— «ага ага зараз глянемо так це нафіг це пофіг тут трохи зробимо математичних перетворень тут на пальцях оцінимо реальну точність нашої моделі і наявного обладнання... так так так... карочі тут множ на 3 і викидай всю цю „економію“ нафіг!» (к)

ЗЫ: я вже час від часу наводив той приклад з власної історії у якості прикладу коли був я колись студентом розумним але ледачим тож різні там «лаби» і таки інше вже «доздавав» напередодні різних заліків а не тоді коли потрібно було і ото сиджу я на одному такому щоб не збрехати щось з теоретичної механіки здається роблю відповідно лабу дивлюся на прибор (штангенциркуль як пригадую ага ага) дивлюся на завдання а там за умовами задачі точніть яку потрібно визначити трохи не та трохи на порядок чи то на два перевищує точніть наявних засобів (штангенциркуля ага ага як хто не знаю точніть прибора визначається як половина найменшого ділення його шкали) ну «софт-скіли» на той час вже мав які мав досвід навіть з іноземцями тож кличу лаборанта так і так кажу якась фігня от тут не вийде від слова взагалі він швиденько переглянув (тоді ще лаборанти були вчені і то просто розумні люди) поглянув так на мене каже «а що ти тут узагалі робиш?» поставив залік каже «зайдеш потім до препода він тобі усе інше підпише з зачоткою я передам» отакої було «економії ресурсів і швидкості виконання» така собі баєчка як писав великий український поет Пушкін «добрим молодцам урок».

Приклад взято із цієї статті : tqfp.org/...​ciya-kontroller-fena.html

Цікавенька штука дивлюся дякую!

Upd: ну я так и думал там оно «ни с боку припёку» как сам фильтр «ну шоб було положено где-то написано такое было» так и «оптимизация его до целочисленных».

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

Я вибачаюсь, але якщо цей рядок зіжре половину ресурсу, то може краще на асемблері? Чи принаймні почитати на асемблері що вийшло.

Я вже не кажу, скільки зіжре твоя неявна трансформація char[] -> signed int.
До речі, чи часто доводиться встановлювати нову напругу? Я гадаю, що не дуже. То може ВИКОРИСТАТИ ту грьобану половину ресурса? Бо якщо ти помилився в своєму «ефективному» коді — можеш спалити всю серію пристроїв, і дізнатися це вже від споживачів. А якщо використав І ОДРАЗУ ВІДДАВ половину ресурсу — то хоч і 100% використай, якщо справу зроблено. Чи в тебе залізяка паралельно контролює запуск космічного човна?

Я вже не кажу, скільки зіжре твоя неявна трансформація char[] -> signed int.
До речі, чи часто доводиться встановлювати нову напругу?

Стаття не моя, тому деталей не знаю
А де та трансформація в знаковий тип? Тай не розумію для чого, значення з адс йдуть додатні.

В ембеддел також є стадії дебагу, тестування, прототипування.

В 8-них мікроконтроллерах флоат емулюється, оскільки та нема апаратного блоку для таких операцій.

Формат знаковий, якщо не вказано інше.
Немає нічого поганого в емулюванні. Навіть якщо ви витратите 14 операцій замість однієї — яке це має значення для 30Mhz проца? Вибачте, скільки разів в секунду ви ту напругу вимірюєте? Якщо багато (це реле напруги) — так, треба переводити в бінариний формат із фіксованою (умовною) комою. Якщо це НЕ реле напруги — краще написати зрозумілий код.

В avr gcc по замовчуанню беззнаковий, (хоча і налаштуваннях можна задати знаковий)

Частот проца 16 мгц.

Справа не тільки і кількост
і команд процесора, а ще в викорастані рам.

При нагоді зроблю компіляцію для двох випдків і продемонстую лог

Краще продемонструй увесь код та ТЗ. Спочатку код, окремим постом на ДОУ, і завданням вгадати яке було ТЗ. Через 3 доби викласти справжнє ТЗ. Оцінити, наскільки можна читати твій код :)

PS. Постав стабілітрон :)

Ще раз повторюю, ні код ні розроблений девайс не мій :)
в одному із повідомлень є ссилка на статтю автора подєлки

Я бы вообще-то сказал, что эквивалентом исходной операции будет

adc = (8 * adc + 2 * adc_val) / 10;
иначе много случаев, когда результат будет на 1 меньше.
Но это можно списать на спешку написания комментария.

В остальном — скорее согласен, при специфике подобных ограничений. Для среднего же использования x86 или ARM в телефоне это уже малосущественно — плавучка гарантированно есть и вполне быстрая — конверсия по ~5 тактов, умножение где-то столько же — вполне сравнимо с целочисленным вариантом.

то матимемо калькулятори які працюють нормально тільки на 4 ядрах та гігабайтами RAM....

Это уже преувеличение. Калькулятор можно до такого довести только намеренно :) но вот потратить раз в 5 больше минимума — (под мегабайт каждого ресурса) — вполне реально.

Вообще-то, понимая как работают указатели, можно и на ассемблере писать.

без розуміння вказівників, не пройдете жодної співбесіди на С++

Нічо подібного там треба знати за virtual table.

Вам ніколи не давали завдання написати фунцію що переставляє навпаки значення змінних? Хоча можливо таке завдання більше до С відноситься, ніж до С++

Якщо вам таке дали, використайте тимчасову змінну. Якщо через це вас не прийняли — вам туди і не треба, бо контора бюрократично-шизофренічна.
Чому так: окрім сугубо спортивного інтересу вигоди це «програмування» не дає жодної. Але гарантовано, спроба робити логіку через дупу — означає код, який дуже важко прочитати, ще важче — не помилитися, чи знайти помилку (автор так само може помилитися).

Припустимо, ви — не геній, і не вмієте (чи краще сказати не хочете) міняти дві змінні без використання третьої. І вас поставили писати ну дууууууууууууже часто використовуваний код, наприклад BootLoader windows. Через зайву змінну процесор виконає зайву операцію (що до речі, не факт). Всього, за весь час існування, ваш код буде використано 10 000 000 000 разів. Шалені збитки, якщо перерахувати на час чекання людей!!!

А тепер... просто запустіть цю операцію 10 млрд разів. Без циклу, бо цикл це значно більше операцій. Скільки секунд займе виконання? Менше 1 сек. Тобто,ви витратили свій час на навчання цій дибільній теорії заради сукупної вигоди в 1 сек машинного часу. Якщо випити пива займає 10 хвилин — скільки всього дибільних теорій ви можете НЕ ВЧИТИ, НЕ ПИСАТИ, І НЕ ДЕБАЖИТИ — а просто писати простий і зрозумілий код.

Мораль: не наймайте теоретиків. Хіба що мити вікна. Але аж ніяк не займатися персоналом — найважливішу функцію в організації.

Якщо вам таке дали, використайте тимчасову змінну — так, тимчасова змінна використовується, але в середині функції. А вказівники там для того щоб працювати з оригіналам значень, а не їх копіями...

Поняття «оригінал» і «копія» — досить умовні. Коли ви пишете
int a = 100500;
int b = a;
Чи ви впевнені, що &a ≠ &b ?

Моя відповідь — виключно залежить від компілятора. І навіть різні версії того самого компілятора дадуть різний результат. Ба більше, для деяких примітивних типів значення має ДЕ САМЕ в коді ви розмістили вираз.

В Java із цим значно простіше — воно завжди об′єкт, і якщо тільки ви самі не викликали .clone() - це той самий об′єкт. :)

Скомпілюйте наступний код і подивіться що буде в кожному випадку:
int a = 1;

void changeVal (int k){ k = 10;}
changeVal (a); -》 a = 1 так, як працювали з копією

void changeVal (int* k) {*k =10;}
changeVal (&a); -》a = 10; так, як працювали з оригіналом

Мораль, треба мати поняття про вказівник на C++, а використовувати його чи ні це вже залежить від розробника, і задачі яку треба зробити

это си.. В С++ есть ссылки

Но никто не отменял там указатели.

Чим високорівніша мова тим все простіше, тут я згодний на 100%

Чи ви впевнені, що &a ≠ &b ?

Да

В Java із цим значно простіше — воно завжди об′єкт

Нет (примитивные типы не объекты)

В теорії — так. А перевір, буде цікаво :)

В Java примітивні типи — також об′єкти. Не віриш — reflect допоможе прозріти.

В Java ще цікавіше:
String шо_то = «xyйня»;
String шо_это = «xyйня»;
if(шо_то == шо_это) System.out.println("Ескобар, скажи йому...");

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

Моя відповідь — виключно залежить від компілятора.

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

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

Поэтому в коде типа

int a = 100500;
int b = a;
foo(&a, &b);
где foo не инлайнится — 100%, что a и b будут уложены по разным адресам.

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

Ба більше, для деяких примітивних типів значення має ДЕ САМЕ в коді ви розмістили вираз.

Это не «для некоторых примитивных типов», это для всех типов и, в принципе, для всех компиляторов, но особенно — с SSA (к которым относятся почти все современные широкоиспользуемые). Но см. выше про ограничения — компилятор не имеет права переоптимизировать так, чтобы нарушить базовую семантику.

И хороший язык тот — в котором НАХРЕН НЕ НАДО всё это знать. А если про это спрашивают на каждом первом собесе — то либо собеседователи инфантильные дятлы, либо отсутствует опыт прикладного программирования. Чаще и то, и другое.

И в С++ работать с указателями — мягко скажем плохой тон. Да, это можно делать, но только в тех местах когда, где выгода очевидна. А основной код, которого сотни тысяч строк — надо писать на обыкновенных переменных, без выґибонов.

И хороший язык тот — в котором НАХРЕН НЕ НАДО всё это знать.

Так и в C++ не надо. Достаточно знать то, что адреса не спутаются, и что компилятор соптимизирует почти всё, что можно.

И в С++ работать с указателями — мягко скажем плохой тон.

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

А основной код, которого сотни тысяч строк — надо писать на обыкновенных переменных, без выґибонов.

Тогда C++ не нужен, задача для другого языка. Фортрана, например.

Колись досить давно певно десь на початку 2000-х я «на папірці» на співбеседі написав реалізацію функції «для розвертання рядка тексту навиворіт» якою і користуюся дотепер для цих же ж цілей щоразу ще й зазначаючи «а тут можна ще використати супер-оптимізовану-співбесідно-орієнтовану функцію для переставляння навпаки значеннь змінних і заощадити ще 1 байт...» (к) (тм)

ЗЫ: і я не те щоб можу написати сі++ на сі я ще досі час від часу тоє маю в коді рівня «продакшен»... ))

Навпаки, із розумінням вказівників не пройдете.
Приклад: чим відрізняється абстрактний клас від інтерфейса? «Правильна відповідь» — та хєрня, яку грудасте тьолко вичитала в підручнику (і ще вгадай, по якому саме вони вчать джунів). А реально? Коли ти в руках тримаєш цю віртуальну таблицю :)

Ще улюблене питання — ексепшени. Ти бачив, як саме працює викид ексепшена? А як — вильот за межі стека? А тепер спробуй вгадати, яку «правильну» гіпотезу вивчив 23-річний «архітектор»?

Знання вказівників не взаємовиключає інших знань :)

Але знання мат.частини виключає притягнуту за вуха «теорію», чи краще сказати релігію від писак пафосних книжок з гарними обкладинками та в кращому разі джунівською кваліфікацією автора.

template
any(ValueType&& value
, typename boost::disable_if >::type* = 0 // disable if value has type `any&`
, typename boost::disable_if >::type* = 0) // disable if value has type `const ValueType&&`
: content(new holder< typename decay::type >(static_cast(value)))
{
}
Не очень похоже на шарп=)

немного криво скопировано просто, а так вот=):
valelab4.ucsf.edu/...​oost_1_55_0/boost/any.hpp

C/C++ пользуют для переносимости (в т.ч). А такой «C++» не будет компилироваться на 90% компиляторов, а на половине из оставшихся будет генерить код с багами.

В Ольгино проблема найти нормального программиста чтоле?

«18-тилетний C++ Senior Expert» дэтектед :)

Boost, конечно, вечно шагает на один шаг дальше в пропасть, но Вы как-то уж очень негативно к ним относитесь.
Обычно оно таки работает на 90% компиляторов и, если собралось, то без багов :)

А по моему это признак того, что товарищ залетный (не знать про буст и т.д.)

Знать — необязательно означает пользовать.
Ты, будучи джуном, когда-нибудь это поймёшь — когда выберешься за рамки уютненького мирка msvc и gcc.

Це не є тим, що треба знати, щоб взяли на роботу.

Могу продать «Qt 4.8 профессиональное программирование на С++»

Могу подарить книгу Г. Шилдт, «Самоучитель С++», 3-е издание

В принципі, тема дуже обсосана, як на форумі так і в інтернеті і цей пост свідчить, що ви або не дуже вмієте шукати інформацію або трішки лінивий. Але я все ж напишу, сподіваюсь, буде корисно:

— Англійська.
— Вміти реалізовувати(на папірці на співбесіді) більшість базових алгоритмів а-ля сортування, реверс стрічки, список і т.д.
— Добре знати теорію, наслідування, віртуальні деструктори, перевизначення і т.д.
Багато інтерв"юєрів(особливо не дуже досвідченних) люблять задрочувати до дірок різні питання з вказівниками і ссилками(що це таке, де, для чого, вказівник на вказівник, константний вказівник, вказівник на константу і т.д. )
— Знати будову і принципи роботи основних контейнерів, алгоритмів, ітераторів з СТЛ.
— Якщо вакансія вимагає 11/14 стандарт — відповідно орієнтуватися у всіх основних нових фішках.
— Доволі часто питають різні багатопотокові штуки, навіть якщо вакансія не вимагає.
— Патерни, спитають 95%. Скоріше за все, попросять реалізувати на папірці сінглтон і/або фабрику.
— Часто просять прислати ссилку на свій приклад коду або дають тестове завдання. В цьому випадку будуть звертати увагу на наступне(окрім очевидного, що б код працював): вміти писати ЧИСТИЙ КОД, що це таке, прочитайте тут: www.hyade.com/...​85-978-5-496-00487-9.html

P.S. Шановні інтерв«юєри, якщо ви впізнали себе в цьому списку, будь-ласка, щось міняйте або просто не копіюйте питання один в одного.
Моделюйте проблему і попросіть людину її вирішити, а не цей булшіт «чим ссилка відрізняється від вказівника», «для чого потрібен віртуальний деструктор» і т.д.

Какие книги прочитать?

очень много, вот на старости лет пришлось читать
dou.ua/forums/topic/21238

Где искать информацию

гугл, msdn, форумы

Где получить опыт?

саморазвитие, никто тебя не научит, кроме себя самого

PS, Работы по плюсам на Украине очень мало, а для джунов еще меньше

Не на Украине а В Украине. Остальное верно. Ну и вхождение в плюсы очень длительное. Язык излишне сложен.

Ну да после того как заставили явно указывать тип возвращаемого значения функции main(...) уже не торт... ((

Цимес же ж как раз в том что можно поэтапно и в целом правильно было замечено в одной правильной статье на тему (немоей) «вовсе не нужно знать досконально теорию и нюансы реализации шаблонов чтобы писать в коде std::list».

ЗЫ: кажись последнее было кстати из опыта построения внутренних курсов по си++ в Яндексе (деятельность которой запрещена на территории РФ УССР Новой Украины).

Да. Но «сениоры 22 лет» имеют список вопросов во всякими дебрями и очень любят их спрашивать. А прописав 20 лет на этих самых, уже тупо не помнишь что такое полиморфизм и с чем его едят.

что такое полиморфизм

Карочи я знаю убойный ответ (увы не сам придумал тупо спёр только с «чистого кода» кажется) так вот «полиморфизм» это «паттерн ООП» фишка всего лишь в том что в «ООП языках» он (паттерн) реализован на уровне языка но суть-то от этого не меняется.

ЗЫ: но ответ ещё не пробовал лето же ж а я на море!

Я что такое паттерны узнал пару лет назад. До этого как-то без этого ценного знания программировал.

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

Да все я использовал, но не знал этой штуки названия есть.

Боюсь представить себе результат подобного «программирования»

А чего представлять, если все работает и работает стабильно?

А изменения в логику легко вносить?

Да конечно. То что ТЗ может радикально поменяться в совершенно нежданный момент, далеко не новость.

Еще раз, если не понятно. Я просто много и давно изобретал велосипеды. Потому что понятия не имел что все уже изобретено и поименовано. Единственное чего мне подсказали это sigletone.

очень мало,

 — не шибко верное утверждение, если смотреть на раздел «Работа»

PS, Работы по плюсам на Украине очень мало

Неправда

работы на плюсах всегда предостаточно. Почему вы так боитесь c++?

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

а глядя на что не очкуете? Может дело не в языках?

намек понял, С++ для молодых и быстрообучаемых

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

А какой язык сгодится для медленнообучаемых?

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

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

У ПХП внизу Зенд он на сях более того даже PECL принннём! ))

Сколько пхпшников в него заглядывало?)

Я не знаю я не такой. ))

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

в двох С та С++xx (шо зовсiм не одне й те саме) в деяких додатково STL , Boost, Qt
A не за докуя тре знати, а отримувати вiдносно менше?
Bкладуватися в довготермiнову стратегiю вивчення та використання С++ не ефективне рiшення.

А в каком языке можно войти в индустрию без знаний фреймворков и библиотек?

Шановний, перечитуем повiльно, шевелячи губами:
«A не за докуя тре знати, а отримувати вiдносно менше?
Bкладуватися в довготермiнову стратегiю вивчення та використання С++ не ефективне рiшення.»

Нещасні вказівники, СТЛ і огризки Буста — то є задокуя?
«Не той тепер Миргород»

а до чого тут вказiвники?

ОК, розумні стандартизовані вказівники. Афігеть як задофіга знань.

Та видно, що людина роками відкладає кірпічі у всі С++ теми на доу)) То якась душевна травма.

хочу вберегти молодь травання психiку хрестами

кірпічі

GN: цегла

тiпа smart pointers?
а в якому стандартi?
++03
++11
++14
++17

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

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

так точно, прийнамні в Польщі в аутсорсі саме так

Не согласен по поводу msdn.
Если при работе не ползуешься студией/мелкософтовским компилером, или вообще под линухом на gcc пишешь ,то по поводу С++ на мсдн лучше не заглядывать.

От себя могу добавить полезные ресурсы:
www.cplusplus.com
en.cppreference.com

Первый, попроще и лучше для новичка.

Подписаться на комментарии