Сучасна диджитал-освіта для дітей — безоплатне заняття в GoITeens ×
Mazda CX 30
×

Изучение С++ или чего-нибудь другого

Всем привет, учусь на 3-м курсе универа, немного учил C++ на парах, азы, знакомство с ООП, синтаксис. С++ учил на 1-2-м курсах, сейчас немного призабыл язык (думаю не состоит труда прочить несколько книжек и вспомнить азы).

Интересует такой вопрос: есть желание найти роботу junior разработчика, стоит ли взяться за изучение того же С++ или начать другой язык учить с 0?

Конкретно веб разработка не интересует, больше по душе написание ПО, приложений (я так думаю), ну или что-то попроще как для первой работы. Что бы вы посоветовали? Если изучать С++, то с чего лучше начать, что 100% нужно уметь для того чтобы получить оффер? И сколько это займет времени?

Всем буду очень благодарен за адекватные советы.

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn

Найкращі коментарі пропустити

Дам хороший совет, который дал бы самому себе на 3м курсе. Попади на стажировку в Google/Amazon/Facebook/Microsoft/Netflix/etc

RTFM:
1) Подтянуть алгоритмы. Рекомендую firecode.io и книжку Седжвика. 90% вопросов на собеседованиях в лидерах мирового IT это задачи по алгоритмам.
2) Поучаствовать в Google Summer of Code летом, это программа для студентов, которая поможет поработать над настоящим open source проектом и даст хорошую строчку в резюме.
3) Осенью зааплаиться к ним на стажировку, предварительно составив резюме, где обязательно описать свою работу над опен сорс проектами и желательно о bachelor thesis.
4) Успешно пройти интервью в целевой компании.
5) Добазариться с деканатом, о досрочной сдаче сессии.
6) Едешь на стажировку на 3 месяца в Америку/Европу/куда-предложат
7) ??????
8) PROFIT!!!

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

p.s. Крайне рекомендую выучить Python или Java, ибо C++ не везде котируется, ну и основы сетей (TCP, HTTP, DNS).

Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Воззрите как пишут настоящие си++ жаба программисты!

bugs.openjdk.java.net/browse/JDK-8193559

Дабы не обязательно ходить по линку залышу в нетленку сам код и тута ибо дрожити!!!

// Possibly the ugliest for loop the world has seen. C++ does not allow
// multiple types in the declaration section of the for loop. In this case
// we are only dealing with pointers and hence can cast them. It looks ugly
// but macros are ugly and therefore it's fine to make things absurdly ugly.
#define DO_JAVA_THREADS(LIST, X) \
    for (JavaThread *MACRO_scan_interval = (JavaThread*)(uintptr_t)PrefetchScanIntervalInBytes, \
    *MACRO_list = (JavaThread*)(LIST), \
    **MACRO_end = ((JavaThread**)((ThreadsList*)MACRO_list)->threads()) + ((ThreadsList*)MACRO_list)->length(), \
    **MACRO_current_p = (JavaThread**)((ThreadsList*)MACRO_list)->threads(), \
    *X = (JavaThread*)prefetch_and_load_ptr((void**)MACRO_current_p, (intx)MACRO_scan_interval); \
    MACRO_current_p != MACRO_end; \
    MACRO_current_p++, \
    X = (JavaThread*)prefetch_and_load_ptr((void**)MACRO_current_p, (intx)MACRO_scan_interval))

Оригинальный патч где это внесено:

hg.openjdk.java.net/...​/rev/8d15b1369c7a#l41.475

Слава Б-гу это уже фиксят

я тоже люблю макросы :)

#define CHECK_ADD_QUALI(name) \
if (m_oColumnInfoVector.isColumn(CMatchListGridStringBuilder::CTE_##name)) { \
size_t nColNum = m_oColumnInfoVector.getColumnNumber(CMatchListGridStringBuilder::CTE_##name); \
bool bAttached (false); \
std::map<size_t, const CMyASCIIString_EF*>* pmapIdText = getIdTextMapForFilling(nColNum, 0, bAttached); \
assert(pmapIdText && pmapIdText->empty()); \
addToIdTextMap(pmapIdText, 0, CMyASCIIString_EF::emptyString(), true, bAttached); \
sTextToAdd.clear(); sTextToAdd.appendCharAndTerminator('Q'); \
addToIdTextMap(pmapIdText, 1, sTextToAdd, false, bAttached); }

це якийсь машинно генерований код?

Не поверишь цэ внутре джавы так ))

там что внутри, что снаружи...

вопрос хто так пышэ?
то АІ чи реальні пацани?

кот должен буть «сэлфэксплэйнт», то якийсь лемко накамєнтіл

Реальні пацани та по ссілкє спісок учасників є ))

ЗЫ: можеш дажи написать їм лічно і залошить скажеш я разрішив.

каллєтівний разум!!!
один би таке ніасіліл

Як у классічном анегдоді «один!? та їх тут тисячі!!!» доречі ото і спісок тоже є ))

db.openjdk.java.net/people

ЗЫ: ну ок «тисячи» то типа фигурально как художественная цытата.

Та нормально усе читаится, можна прынимать

нужно сказать что это все таки С, в крестах подобное пишется по другому

Сможешь переписать красиво? )) Я только с долей шутки кстати отличная задача на «переписать красиво» причём даже паттерн какой-нибудь принннём! декоратор?

внезапно
#define DO_JAVA_THREADS(LIST, X) for(auto X:LIST)

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

Эти нормы окончательно ушли лет 5 назад. Сейчас даже GCC частично написан на плюсах, Clang — полностью. Если где-то нет нормального компилятора, то кросс-компиляция работает не хуже. Хорошо разработанных платформ для кросс-компиляции сейчас более чем достаточно.
То же самое касается GNU autotools, которые рассчитаны на начальный старт на машине, где даже шелла нормального нет, есть только тупой огрызок. Но для новых проектов их расчехлять бессмысленно.

это шо за гавно такое шо для него gcc и шланг не собирает? мне только очень экзотические микропроцессоры встречались но там такие компиляторы были шо жаба всеравно бы не собралась

Если приложения то C/C++/C#

если приложения то C/C++/C# вполне

Если хочешь интересные и дорогие задания, то учи современный С++. Быстрее, чем на плюсах, не сделать. Кроме очевидных низкоуровневых инструментов повышения скорости (вплоть до инструкций векторизации типа AVX), у тебя есть полный контроль над выделением памяти, а это, по моим наблюдениям, bottleneck производительности в большинстве приложений. Собственно, не раз уже было, когда клиент приносит мне свои модули на Python и наблюдает, как скорость выполнения растет в сотни раз! А ведь это понижает стоимость вычислений и задержку ответа на облаке => профит.

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

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

Майерс в русском переводе это нечто. Именно благодаря русскому переводу Майерса я перестал читать переводы технической литературы.
Из перевода книги More Effective C++: «the new operator» => «новый оператор».
Нуачо, с точки зрения гуманитария всё правильно.

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

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

кто знае електроніку,

тот может что хочешь знать, уметь и тп.

Учи что нравится, и всех шли подальше. Успех прийдет если делаеш, что любиш.

делаешЬ, любишЬ.
нє блогодарі.

Turbo Pascal? Ты серьезно ? Видимо таким девам кроме как редактором каментов больше делать нечего. Мне тебя жаль.

Дякую за співчуття. Ти дуже чуйний.
Але не сприймай все так серйозно.
В тому числі і коменти.

А я бы взял проект на TP чисто напоржать

Знал бы ты какие рэйты на ТР, ты бы так не ржал..

... и как редко они выпадают.

Turbo Pascal? Ты серьезно ?

Турбо-Паскаль — это прекрасно! Хотя, лично я полюбляю Турбо-C++ (и Турбо-Вижн на нём).

Турбо-ВИжн не особо далеко ушёл от любой современной «оконной системы» так что его полагаю вполне можно конвертировать под сегодня кстати был такой у паскаля... ага точно OWL сам не вспомнил нашёл методом последовательных приближений научного тыка.

ru.wikipedia.org/...​ki/Object_Windows_Library

вполне можно конвертировать

tvision.sourceforge.net

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

по крайней мере он новее Ады на целых 2 года. :-)

Всё-таки Ada 2012 содержит такие вкусности, как контракты, инварианты типов, ...

Это самая идиотская из текущих фич русского языка — в 1918-м все эти Ъ в конце слов убрали, а тут почему-то забыли. Пора давно отменять. (Тем более в версии для Украины.)

Это самое идиотское оправдание собственной неграмотности, что я когда-либо видел.

Тем более запомнить элементарно, даже для разработчика:
cs5.pikabu.ru/...​2/1444413250149491240.gif

Это самое идиотское оправдание собственной неграмотности, что я когда-либо видел.
Тем более запомнить элементарно, даже для разработчика: cs5.pikabu.ru/...​2/1444413250149491240.gif

-ш/-шь 2л.ед.ч. не имеет никакого отношения к -тся/-ться.

Когда научитесь читать — можете возвращаться. Пока что эта тема не для вашего уровня.

Да я просто уверен, что если ты мягкий знак после шипящих не осилил, то и с правильной расстановкой тся/ться у тебя проблемы.

Ах, ещё и «просто уверен»... значит, я правильно оценил.

Зря так думаете. Ответите почему в украинском языке мягкий знак при спряжении глаголов во втором лице единственного числа настоящего времени не ставится, а в русском языке ставится?

Отношение не имеет, но выглядит «в коде» так же страшно.

Я тоже где-то так думал, пока не всмотрелся в один знаменитый текст:

"""
Приходишь к приятелю, внимательно слушаешь его, идешь на [censored]. По возвращении оттуда ставишь компилятор, компилишь gzip.. Ругается.. Ищешь gcc, находишь, компилишь gcc, компилишь gzip, распаковываешь архив, компилишь tuucp. УРА! Теперь все работает! Пишешь письмо, получаешь ответ, пытаешься прочитать.. Выясняешь что восьмой бит порезан, пишешь вопрос, получаешь ответ, идешь на [censored]. Возвращаешься оттуда с sendmail, сносишь mmdf, ставишь сендмейл, пишешь вопрос.. ждешь ответа.. ждешь ответа.. Материшься. Замечаешь что пишешь с кривого адреса. Ищешь libresolv, компилишь, заменяешь.
Пишешь письмо, ждешь ответа.. ждешь ответа.. прибиваешь
зависший сендмейл. Материшься. Пишешь письмо, ждешь ответа.. Получаешь! Запускаешь слип, ложишься спать. Просыпаешься, материшься, убиваешь залипший slattach, перезапускаешь слип, пинг не идет.
Материшься, ребутаешься, Запускаешь слип. Втыкаешь
эзернетовскую карту. Настраиваешь роутинг. Материшься. Сносишь routed, выкачиваешь gated, компилишь. Не компилится. Пишешь письмо.. [ну про письмо все уже поняли]. Получаешь скомпиленый gated. Запускаешь. Выясняешь что в нем только RIP, а тебе надо OSPF. Материшься. Находишь конфиг для gated’a, добавляешь ospf, компишишь, запускаешь..
После одиннадцатого зависания материшься, ищешь EBF,
материшься, материшься, материшься.. находишь EBF, комментаришь запуск gated’a. Материшься, пишешь скрипт на установку статического роутинга. Материшься. Припаиваешь к кнопке ресет сигнал DCD от модема.
"""

Ну и так далее.

Вот после того, как я в этом тексте поудалял все лишние -ь, он стал выглядеть более-менее по-человечески :)

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

А мне, пожалуйста разрешение писать жы и шы с буквой Ы! %)

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

Если честно я бы б наоборот ы э отменил устаёт писать их в транскрипциях с иноземного ))

Да-да, а еще:
По рзелульаттам илссеовадний одонго анлигйсокго унвиертисета, не иеемт
занчнеия, в кокам пряокде рсапожолены бкувы в солве. Галвоне, чотбы
преавя и пслоендяя бквуы блыи на мсете. Осатьлыне бкувы мгоут селдовтаь
в плоонм бсепордяке, все-рвано ткест чтаитсея без побрелм.
Пичрионй эгото ялвятеся то, что мы не чиатем кдаужю бкуву по
отдльенотси, а все солво цликеом.

Китайцы сразу решили вопрос письменности заделав иероглифы ))

Мне интересно как они их набирают с клавиатуры? Кто-то видел клавиатуры со всеми десятками тысяч иероглифов? Или сколько их там всего?

Самый типовой метод на сейчас выглядит так: на каждый знак (кстати, китаисты очень не любят слово «иероглиф»)
1) набирается три латинских буквы (близких к его пиньинь, но бывает и совсем от фонаря)
2) всплывает мини-менюха, в которой выбирается нужный знак
ну и продолжать до успеха.
(что показательно — мало того что знаки надо знать, так ещё и их романизацию)

А недавно на GT была статья про их пишущие машинки, рекомендую вместе с комментариями, если это интересно.

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

Они у них ещё и контекстно зависимы насколько я их вообще понимаю (возможно нинасколько гы но цифры читать мог же ж).

Кстати да простой мув переходи на украинский! профитЪ.

Pro tip! Рідна мова! Жі ші? Seriously? ться? No problem! Шиплячі у кінці? Ти не повіриш!

«Пообтершись в корридорах оффисов, в будующем мы станем сведующими и прийдём к тому, что в наших текстах будет учавствовать всё меньшее колличество лишних букв.» ©

Ответ в стиле путающих тся/ться.

Ответ в стиле ниасиливших букварь.

Конкретно веб разработка не интересует, больше по душе написание ПО, приложений (я так думаю), ну или что-то попроще как для первой работы.

Хочешь писать для декстопа — осваивай C#.

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

Чел ведь написал, что «веб разработка не интересует», а по душе приложения.

Если под «приложениями» имеется в виду десктоп — то он нынче существует лишь в одном варианте: винда + C# (Winforms, wpf).

P.S. Впрочем, допускаю, что аутсорсинговым формошлёпам — десктоп действительно в разработку не передают. Т.к. дело непростое.

что ж ты это говно мамонта вспомнил, а делфи забыл? еще с++ мфц есть, хз в каком оно состоянии на сегодня, правда

Проекты под МФЦ кстати есть

Для C++ есть Qt. Приятный современный фреймворк, от которого (в отличие от мфц) не тошнит.

х.з. сурово критичной разницы нет кроме разве что мфц сугубо виндоус специфик а кьют типа «сугубо кьют специфик» только когда у него встречаются реальные платформы вдруг всплывает и вин-апи хвосты и cocoa и чёрт в ступе.

в Qt все «хвосты» в виде платформ-абстракт плагинов. хочешь новую платформу — сделай плагин

Ещё ощутимая разница в удобстве работы с фреймворком. Кьют куда легче для понимания. С ним просто приятнее работать. Что также отражается на скорости разработки и стоимости поддержки проекта.

да просто открыть и сравнить доку на кьют и на андроид фреймворк. такое ощущение, что доку на андроид делали по принципу: «на, от?%;:сь»

что ж ты это говно мамонта вспомнил

C# - говно мамонта? Или wpf?

Ох, уж эти индусские формошлёпы-«архитекты»... :)

у тебя дефицит внимания что ли? окей, напомню что разговор шел про десктоп на шарпе

Ну да. Я тебе даже простой вопрос по этому поводу задал:

C# - говно мамонта? Или wpf?

А ты, вместо ответа — всё кривляешься,...

разговор шел про десктоп на шарпе

Та ты не кривляйся. Напиши прямо: «C# и wpf — говно мамонта».

Чтобы дурь индусских формошлёпов-«архитектов» была всем видна.

зачем мне повторять за глупцом, мысли которого я не разделяю?

Так что же ты имел в виду, под «говном мамонта»? Разве не это «винда + C# (Winforms, wpf).» ?

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

третий раз я писать не буду

Та всё с тобой и твоей писаниной давно ясно, индусский формошлёп-«архитект». :)

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

с твоей репутацией форумного дурачка

По поводу своей репутации у тебя и ещё пары здешних недоразвитых клоунов-формошлёпов — я особо не переживаю. :)

то он нынче существует лишь в одном варианте: винда + C# (Winforms, wpf).

Вообще-то UWP всё остальное формально устарето.

доля рынка мелкомягких мобилок менее 1% — так что UWP не взлетит...

А как магазин аппликух под сам десктоп? Аппле же ж работает? К тому же ж там не совсем мобилки скорее «планшеты для бизнес-аппликух».

UWP далеко не только под мобилки, но и под десктопную Windows 10. Беда в другом — в ентерпрайзе ещё полно Windows 7 / Windows 8, где выбор в плане .NET разработки только из WPF и WinForms.

С другой стороны, как это ни удивительно, есть такие области (например, медицина), где сертифицированы для использования современные Windows планшеты (и только они), на которых UWP очень даже хорошо заходит.

использования современные Windows планшеты

Что такое енти «современные Windows планшеты»? Ах да, это же вымирающий вид, с долей рынка менее 1%. :)

В общем, не взлетит. Т.к. для десктопа (где сплошь винда) — UWP в сравнении с wpf это ацтой. А мобильных мелкомягких клиентов в природе не существует — соответственно, там пасутся совсем иные технологии (часто C++/Qt).

Что такое енти «современные Windows планшеты»? Ах да, это же вымирающий вид, с долей рынка менее 1%. :)

mspoweruser.com/...​-reaches-16-market-share

Windows tablets on the other hand saw increased shipments to 10.1 million units and 16% market share, within spitting distance of Apple’s 20.6% market share

А у вас откуда дровишки про долю ПЛАНШЕТОВ в 1%? Про смартфоны от MS такую цифру видел, но это две большие разницы.

Т.к. для десктопа (где сплошь винда) — UWP в сравнении с wpf это ацтой.

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

мобильных мелкомягких клиентов в природе не существует

Да вы что? :)
А на это что скажете: itpeernetwork.intel.com/...​e-clinical-grade-devices

соответственно, там пасутся совсем иные технологии (часто C++/Qt).

Очень усомнюсь в слове «часто», если мы только не про полумёртвую Blackberry. Скорей уж чаще там пасётся какой-нибудь react native. Но вот чтобы на iOS или Android выбирали C++/Qt вместо родных языков и платформ разработки — не видел такого ни разу. Просто C++ — видел, запросто встречается в модулях, для которых критична производительность и потребление ресурсов. Но интерфейс-то, при этом, всё равно сделан родными средствами, или на React Native.

Но вот чтобы на iOS или Android выбирали C++/Qt вместо родных языков и платформ разработки — не видел такого ни разу.

полно. удешевляет разработку намного

Готов поверить, если «на борту» уже есть готовые С++ / Qt разработчики, которым достаточно осилить только специфику разработки под мобильные устройства на уже знакомой платформе.

Но, вместе с тем, рискну утверждать, что на рынке iOS / Android разработчиков искать, всё же, проще.

искать то проще, но вот мейнтейнить вот это вот все потом — страх и ужас

...но зачем удешевлять разработку, когда можно срубить с заказчика в полтора-два раза больше? ;)

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

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

На Flutter посмотрим, смущает, что там Python, который не отличается быстротой. Моторола лет пять назад пыталась сделать нечто аналогичное на основе Ruby, тормозило просто адски

насколько я понял, там Дарт для морды и плюсы под капотом
Dart очень похож на QML, btw

Воу. И правда. Не знаю, в каком это сне мне там Python приснился.

Правда, как я понял, у них пока нет декларативной разметки UI типа JSX в React Native. Надеюсь, к релизу допилят.

Dart очень похож на QML, btw

Хм... посмотрел в Википедии пример QML, очень уж близкого сходства с примерами в Flutter не увидел. Может, не туда смотрел?

собсно Дарт и есть декларативная разметка UI. сходство с QML скорее не синтаксическое, а идеологическое: декларативный язык с пропертями, сигналами и тп
я правда, глубоко не смотрел, может чтото не так понял

Ну я бы, всё же, сказал, что в отечественном аутсорсе Qt/C++ не в фаворе именно из-за дефицита и дороговизны специалистов.

А другие кросс-платформенные решения, удешевляющие разработку — тот же React Native — как раз, проталкиваются на ура.

Ну я бы, всё же, сказал, что в отечественном аутсорсе Qt/C++ не в фаворе именно из-за дефицита и дороговизны специалистов.

Какая разница от какой суммы маржу рисовать?

if (сумма + маржа > ожидания_заказчика_по_рейту) {
  throw epic_fail;
}
Windows tablets on the other hand saw increased shipments to 10.1 million units and 16% market share, within spitting distance of Apple’s 20.6% market share

Приводить оценку продаж за последний квартал, в качестве доли рынка (т.е. продаж за всё время/количества устройств в пользовании) — это, конечно, ново. :)

А что касается усомнений насчёт C++/Qt — многие современные и востребованные на западе вещи/решения, не доходят до аутсорсинга к формошлёпам в Африку.

П.С. Не взлетит, в общем. Просто, через годик-другой мелкомягкие забьют и на таблеты тоже — как уже забили на телефоны.

Приводить оценку продаж за последний квартал, в качестве доли рынка (т.е. продаж за всё время/количества устройств в пользовании) — это, конечно, ново. :)

Так или иначе, имеем положительную динамику в 19% роста за год, что явно не соотносится с вашими утверждениями.

П.С. Не взлетит, в общем. Просто, через годик-другой мелкомягкие забьют и на таблеты тоже — как уже забили на телефоны.

Оу, слова не мальчика, но аналитика :)
«Запомните этот твит»? © ;)

Так или иначе, имеем положительную динамику в 19% роста за год

Да, прирост 19% от нуля — это дофига. :)

Смотри динамику здесь: gs.statcounter.com/...​et-share/tablet/worldwide

Видишь долю мелкомягких? Продолжай пребывать в оптимизме. :)

С чего бы мне доверять этой динамике как единственно верной?

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

Основная целевая аудитория Windows планшетов — это корпоративные (!) пользователи, которые те сайты, на которых установлен скрипт statcounter, могут вообще не посещать, либо этот скрипт рубится на корню корпоративным файрволлом.

А вот глядя сюда:
www.strategyanalytics.com/...​q1-2017?slid=409996&spg=4

видим несколько более оптимистичную картину:

Tablet Market Dynamics by Operating System
...
Windows shipments fell 2% year-on-year at 6.3 million units in Q1 2017, from 6.4 million in Q1 2016. Even still, Windows market share climbed 1 percentage point year-on-year to 15%.

Так что не на 19%, но на 15% соглашусь :)

Основная целевая аудитория Windows планшетов — это корпоративные (!) пользователи

Это где же ты видел «корпоративные таблеты»? :)

Я много где бывал, по всяким германским корпорациям (типа Сименса) — «корпоративных таблетов» нигде не видел. Зачем таблеты, когда у всех по корпоративному лэптому (с виндой, понятное дело)?
Даже не уверен, что таблеты можно списать как «бизнес-расход» без каких-то особых извращений (лэптопы списываются без проблем).

В общем, доля рынка мелкомягких «корпоративных таблетов» в 0.25% — лично для меня выглядит вполне реалистично. Да и таблеты те, похоже, отмирают — по мере того, как лэптопы становятся всё более ультра-тонкими и ультра-лёгкими.
А лэптоп — означает винда/десктоп, соотвенно C#/WPF.

Дам хороший совет, который дал бы самому себе на 3м курсе. Попади на стажировку в Google/Amazon/Facebook/Microsoft/Netflix/etc

RTFM:
1) Подтянуть алгоритмы. Рекомендую firecode.io и книжку Седжвика. 90% вопросов на собеседованиях в лидерах мирового IT это задачи по алгоритмам.
2) Поучаствовать в Google Summer of Code летом, это программа для студентов, которая поможет поработать над настоящим open source проектом и даст хорошую строчку в резюме.
3) Осенью зааплаиться к ним на стажировку, предварительно составив резюме, где обязательно описать свою работу над опен сорс проектами и желательно о bachelor thesis.
4) Успешно пройти интервью в целевой компании.
5) Добазариться с деканатом, о досрочной сдаче сессии.
6) Едешь на стажировку на 3 месяца в Америку/Европу/куда-предложат
7) ??????
8) PROFIT!!!

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

p.s. Крайне рекомендую выучить Python или Java, ибо C++ не везде котируется, ну и основы сетей (TCP, HTTP, DNS).

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

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

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

Да и вопросы на собеседовании в основном идут на знание технологий этой области.

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

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

C++ Video Streaming Engineer
Job Summary

You’ll be responsible for the development of an ultra low latency video streaming solution used for bidirectional communication/conferencing, which works reliably in different network conditions.
Qualifications and Skills

Extensive practical knowledge of one or more of the common streaming protocols — RTP/RTCP, RTSP, SIP, SDP
Understanding of multiple media codecs is a plus — H264, H265
Knowledge of Image/Video Processing or GPU programming is a plus
Deep understanding of network programming, VoIP and Video over IP
Experience with Asterisk, WebRTC, Freeswitch is a plus
Experience in developing scalable distributed systems
Problem-solving skills, ability to dive deep to find the root of the problem
Solid knowledge of debuggers, profilers and other tools for the technologies he owns.
Strong foundation in OO Design and multithreaded applications
Experience in network troubleshooting
Fluency in UNIX environment
Embedded development is a plus
Experience with AWS is a plus
English communication skills (speak, read, write)

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

Без строчки в резюме никто никогда не будет спрашивать

В смысле? Что должно быть в резюме?

Без реального опыта нет смысла обсуждать

Путанно излагаешь, как настоящий плюсовик.

А если действительно битовые маски используются в коде активно? Например, быстро перебрать все сочетания, ... Опять же, если знать основые идеи, то легко вспомнить на собеседовании...

Садится чел и надрачивается простите за неделю с приёмкой экзамена по факту и всё готовый высококвалифицированный активный применятель битовых масок в коде профитЪ.

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

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

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

2) это очень простой вопрос начинается он с того что «комфортный код» уже написан и надо только продолжать в том же ж духе ничего изобретать не надо иначе это несколько другой навык и другая история если же ж вы (здесь обобщение) нанимаете специалиста неспособного за неделю освоить уже наработанные практики по битовым маскам ну тогда не знаю справедливости ради таких у меня тоже было... в основном на руководящих ролях от лида и выше... #trollface

Обычно нужно придумать алгоритм, и битовые маски это один из инструментов. Если у человека мало опыта в его применении, то он будет выбирать более привычный ему инструментарий и структуры.

Ну и действительно, ты думаешь, что человек, который не имеет никакого опыта в работе с битами через неделю сможет писать в таком стиле?

static inline U64 next_combination(U64 current)
{
    U64 first_one = current & -current;
    U64 head = current + first_one;
    uint64_t tail = (head ^ current) / (first_one << 2);
    return head | tail;
}

Нет, это получение следующего лексикографического сочетания. Простая битовая логика.

Т.е. вы ищете сразу эксперта в лексикографическом сочетании? И много их?

Простая битовая логика.

(к) (тм)

О! Это идея. Надо дописать в резюме строчку «специалист по сочетаниям, перестановкам и факториалам». Вдруг кто-то ищет?

Как бы это объяснить. Позиция предполагает знание определенной и довольно большой предметной области, из чего следует :
1. Знание этой области предполагает и знание битовых масок и кое-чего посложней.
2. Пробелы в знании языка намного легче поправимы, чем незнание предметной области.

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

ОК я нашёл RTFM:

graphics.stanford.edu/~seander/bithacks.html

Этот собеседователь испортился несите следующий! (к) (тм)

Кієв, десь в пєрдях за фейковою станцією метро «Львівськ брама»?
Ключова фраза:

low latency video streaming solution

Посилай нах.

Судя по Гуглу это этот ваш хваленный Ринг.

нэе, це там про кого на прекрасном.ит була стаття про хрюшу на большом круглом шарє.

На большом круглом шаре это какой-то мобайл. Просто мне эту историю из первых рук приносили.

Ты не прав в других местах такого г. ещё больше море «плюсы» только начинают добираться до этого места и это отдельно плохо но история таки не про то выносить могут чем угодно вот например «опыт в BLE» причём ещё и в годах а если нет то таки реально отношение как:

Без реального опыта нет смысла обсуждать

На этом месте может быть что угодно от слова вообще зависит от того что у людей в голове кто ищет со спеками в голове те всегда найдут что там в голове искать.

«опыт в BLE» причём ещё и в годах

Ну это просто дурачки. А вот устраивать дискуссии вокруг заведомо высосанных из пальца проблем, вроде приоритета операторов или «Войны и мира» в деструкторе это именно с++ дао.

А вот устраивать дискуссии вокруг заведомо высосанных из пальца

=>

Ну это просто дурачки.

«А каждый несчастный несчастен по-своему» (к) старый классик

приоритета операторов

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

«Войны и мира» в деструкторе

А вот это важно. В больших проектах со сложными иерархиями наследования, если человек хреново понимает порядок вызова конструкторов/деструкторов или не знает, какие функции из деструкторов вызывать не стоит (и почему) — он неизбежно напорется на грабли и не будет понимать, почему его код крашится.

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

А что там сложного? Цепочка в одну сторону и цепочка в другую. Главное не забывать о виртуальности деструктора.

Вот именно, что особо сложного ничего здесь нет, если понимать, как эти вещи вообще работают.

Вот именно, что особо сложного ничего здесь нет, если понимать, как эти вещи вообще работают.

Правило простое — не плести кружев в деструкторе. Если вдруг надо — быть готовым объянить почему задачу нельзя решить с помощью RAII/smart pointer.

«Войны и мира» в деструкторе

лично видел как в деструкторе стоял wait на conditional variable а человек который его туда поставил был отнюдь не джуником и говорил что это нормально так делать

лично видел как в деструкторе стоял wait на conditional variable а человек который его туда поставил был отнюдь не джуником и говорил что это нормально так делать

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

мир не идеален, а по поводу пуст и виртуален есть сомнения

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

Идеальный деструктор — виртуален и пуст

в меморіз

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

Кстати, привет стандартному std::future: он в деструкторе тоже ждёт, пока поток (если фьючер создавался через std::async) завершится. Чуваки в комитете по стандартизации знают толк.

в стандарте написано may block и только начиная с С++14, скорее всего кто то не смог реализовать без блока, MSVC смогли например.

По факту на всех мейнстримных платформах асинхронные фьючеры (полученные из std::async с параметром std::launch::async) будут блочиться в деструкторе.
И на MSVC тоже. Только что проверил в 2015 студии: вот такой код ideone.com/BiYIxO выполняется 6 секунд, а не 2 (как было бы, если бы фьючеры не ждали в деструкторе).

Если вы найдёте платформу, где этого не происходит (и мой пример кода выполняется за 2 секунды) — дайте знать.

Ну я сразу же ж сохранил все future на будущее и получил 2 секунд и вообще если честно не понимаю чего ты ждал от будущего котого даже отменить нельзя кроме как сиди жди результата ))

Кто сказал, что я ждал чего-то другого?)

Видимо твоё ожидание выполнения примера кода 2 секунд

Если вы найдёте платформу, где этого не происходит (и мой пример кода выполняется за 2 секунды) — дайте знать.

Не. Я отвечал на комментарий выше, чтобы проиллюстрировать, что такие фьючеры таки ждут в деструкторе.

Честно говоря тема дискуссии крайне абстрактна собственно с чего я и начинал «кто вообще есть ЦА буст» есть «state of art» либы Intel TBB есть MS PPL зачем кушать то другое готорое ну совсем говнецо ну х.з. говнецо и говнецо что его пробовать?

Хорошая аргументация, достойна эксперта. Надеюсь, какой-нибудь автор книги по многопоточному программированию на плюсах с использованием TBB или PPL возьмёт эту цитату в качестве эпиграфа :)

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

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

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

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

Потому как написав сперва три ожидания будущего подряд и стало тоже ок я начал это масштабировать я эксперт понимаешь я чую запах говнеца это и есть «экспертиза» это и есть «аргументация эксперта» и как только я начал его масштабировать я тут же ж столкнулся с тем что ожидать будущего можно только одного их принципиально нельзя ждать «любого из» либо «просто всех» вау сказал я себе какая хорошая либа какой классный запах говнеца!

Потому что на абстрактной не знаю я из чего сделанной и каких параметров системе ideone оно всё ещё неплохо но вот на моей «домашне-рабочей» vs2015 и что-то там i3 «просто 2000» у меня уже не получается уже для «базового» примера у меня выходит от 2001 до 2011 а ожидание всех будущих просто подряд сразу же ж добавляет +3 мс а не дофига ли!? первое что думает «аргументация эксперта» но дальше понятно интереснее.

На 4-х «кейзах» всё ещё «в пределах основной нормы» а на 8-ми там уже от 2615 до 2631. На ideone что интересно стабильно 2000. На 12-ти ideone всё равно 2000 моя система даёт уже от 3238 до 3255.

Мне стало интересно где предел ideone и уже на 16-ти оно выдало runtime error опытным путём до 15-ти включительно всё ещё работает с тем же ж 2000. Моя система на 16-ти «сдвигается» до 3880 +/-.

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

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

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

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

Но можно написать

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

и начать «об этом говорить»

Кто сказал, что я ждал чего-то другого?)

Так тоже бывает об этом и речь как «человеческом факторе» он прекрасно проявляет себе не только на собеседованиях.

Тоже говнецо но с ним уже сильно сложнее.

Но тоже можно. Наверное. Только пива приходится больше и переходить на крепкое.

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

Попробую хоть частично ответить на то, что я понял.

В моём представлении, настоящие эксперты не оперируют понятиями типа «говнецо» (если это не высказывание своих личных эмоций коллегам на курилке).
Эксперты приводят преимущества и недостатки той или иной технологии в сравнении с другими на конкретных примерах. Обосновывают, почему в контексте конкретной задачи вот эта технология подойдёт лучше, чем вон та. И понимают, что далеко не везде «недостатки» вроде «2003 мс вместо 2000» являются таковыми, поскольку их критичность также зависит от решаемой проблемы.

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

в стандарте написано may block и только начиная с С++14, скорее всего кто то не смог реализовать без блока, MSVC смогли например.

Вызов async(...) без сохранения результата в именованную переменную будет создавать объект типа future и тут же его уничтожать, вызывая деструктор.
А последний async из моего примера (после которого явно идёт wait) выполняет практически то же самое ожидание, только уже явно.
Если бы фьючеры в деструкторах не ждали, мой код выполнился бы за 2 секунды. Но они ждут, поэтому он выполняется за 6.
Собственно, это я и хотел проиллюстрировать. Не более.

Без контекста не ясно в чем проблема

Не уйдёт. Ибо на протяжении 10 лет (а это минимум, сколько понадобится плюсам, чтобы «уйти из списка актуальных языков») там учить нечего. За годик-полтора все эти технические нюансы преспокойно можно разобрать. Особенно если автор — студент.

Про «виды конструкторов» забавно. Ещё б сказали про виды целочисленных типов (int, short, long, ...) — мол, их много и поэтому их надо будет долго учить :)

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

Чтобы быть более-менее на уровне — лет 5 придется положить. И как раз попасть на нисходящий тренд.

Ещё б сказали про виды целочисленных типов (int, short, long, ...) — мол, их много и поэтому их надо будет долго учить :)

Мосье видимо не сталкивался с портированием и кросс-платформенным программированием.
А там столько граблей в траве разложено.

Сталкивался. Да, там веселья хватает. Но при чём здесь «виды конструкторов»?

Про будущий нисходящий тренд вещают не менее 15-ти лет.

и то, это было до того, как комитет начал активно продвигать плюшки в язык

Про будущий нисходящий тренд вещают не менее 15-ти лет.

Так он уже в разгаре. С одной стороны часть проектов уже откатилось на plain old C, с другой стороны всякие Go и Rust нацелены именно на эту нишу. Выстрелят они, или появятся что-то новое неизвестно, но неповоротливое поделие нынешнего С++ индустрии не нужно и его выпилят в обозримые сроки. (Саппорта конечно останется еще лет на 20).

Он уже не менее 15-ти лет «в разгаре» ;)

плюсы никогда не уйдут из этого списка по вполне очевидным причинам

много авна мамонта от кожедрочеров ждет суппорта

ху зе фреак из «кожедрочеры»?

Я уж подумал, это про Кожаева))))

Бібліотека STL, як отченаш. Boost. Qt, якщо віконні додатки під різні платформи писати.
Якщо хочеш писати під вінду вчи С#.
А взагалі на джуна треба знати все.
Ну і те що для всіх мов актуально — алгоритми, структури даних, патерни проектування.

За какой период времени можно это(в смысле то что нужно для первой роботы) усвоить, если заняться этим?

Не став такі питання і не слухай тих, хто на них відповідає. Це залежить тільки від тебе. Якщо ти вже вивчав програмування тобі буде значно легше. Якщо є вільних місяців 4 можеш справитись. А взагалі двічі подумай. Вчити с++ важко. Тримай рейтинг мов, може допоможе. www.google.com.ua/...​ews/tiobe-march-2018/amp

А за какое время можно выкопать яму 3×3х3 метра?

выкопать яму 3×3×3 метра

это любой сможет.
а вот 3×3х3×3 пускай выкопает

это любой сможет.

А в якому ґрунті яму? Пісок чи глина, а може граніт? Чи треба підготовка для місця копки? Може там джунглі або асфальт, а може й мінне поле. А якщо яма на океанському дні, а якщо на астероїді)?

Это уже сеньорские вопросы =)

У вас размерность попутана, с каких пор время в метрах измеряется? Явно с физикой не в ладах были.

ну, началось. Реквайрментов не хватает, как обычно.

Это просто яма в 4-мерном пространстве.

Ну, если верить теории струн, то яма может быть и в 11-мерном пространстве.

А если верить питонистам, то и в 1024 мерном — непредел.

1. Почему яма не может быть в четырехмерном пространстве, измеряемом в метрах во всех измерениях?

2. Почему три базисных вектора не могут задаваться в метрах, а четвертый в секундах? Тогда его объем будет измеряться в (с•м^3)

Boost

Страннейшая в своём роде на сегодняшний день вещь она как бы и в момент своего появления в начале 2000-х была «скорее для гиков» но видимо там и осталась конечно что-то она там «предвосхитила» вот на прошлой неделе принял новую порцию продакшин кода и пока копал «на посмотреть» тут же ж нашёл такой себе BOOST_FOREACH ну таки да просто в глаза бросилось употребляется по коду весьма активно из чего надо понимать и весь код «сверх актуальный инновационный на свои годы годный шмат легаси» а идишь ты до сих пор поддерживается (boost 1.65.1 я проверил) такой себе «привет из 2004-го».

Помнится на момент 2004/2005-го была мощная новая вещь boost::function / boost::bind но сегодня она уже в std:: какого-либо смысла в бусте на сегодняшний день... да и более того крайне осторожном использовании и в прошлом — лично я никак не вижу.

ЗЫ: Boost.Regex разве что ))

ЗЫ: Boost.Regex разве что ))

std::regex?

О! ты только что убил буст ))

Неожиданная новость — основные прикольные вещи из буста перетягивают в стандарты!!!

Всё ещё очень полезны boost::small_vector / boost::static_vector.
Эта тема была достаточно популярной довольно долгое время — наконец-то её пропихнули хотя бы в буст.
Ведь стандартные векторы не имеют права иметь никаких small size оптимизаций, а на практике не хочется каждый раз аллоцировать динамическую память, если знаешь, что в 90% случаев количество элементов в векторе не превысит N.

Для парсинга всяких конфигов удобно юзать boost::property_tree.

Перегрузки стандартных алгоритмов, принимающие диапазон вместо пары итераторов, пусть и не приносят ничего нового, зато делают код более читабельным (задолбало постоянное дублирование имени контейнера и спам «.begin() / .end()», когда я просто хочу вызвать алгоритм для всех его элементов).

Пока стандарт C++17 не добрался до компиляторов / реализаций std на продакшене, также выручают boost::optional и boost::variant.

В общем, есть ещё полезные вещи в бусте.

ЗЫ: Boost.Regex разве что ))

В проекте, который я сейчас ковыряю — spirit, tokenizer, iostreams, format, trim из алгоритмов, static_assert, dynamic_bitset, mpl. И всё вроде нужно :)

Учи Qt и boost::asio

Напиши чат на блокчейне и тебя сразу примут

и boost::asio

Также весьма занимательная вещь в себе по моему нескромному мнению лучше понимать сокеты «внутре» а asio «скорее образно» вот как раз сорцы «проекта на блокчейне» так её там таки нет хотя таки да в описаниях вакансий периодически встречается.

Напиши чат на блокчейне и тебя сразу примут

 В психушку? :-)

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