C++ или Java?

Добрый вечер. Всех с наступающим Новым годом, или уже наступившим.

Хочу записаться на курсы, так как специальность которую получу в конце 2018-го не устраивает.

Очень интересуюсь Web-направлением, так же к Desktop’у не являюсь равнодушным.

Начиная с техникума и по сей день, знаком с Pascal, Delphi и Visual Basic, PHP, JavaScript. Знаю HTML и CSS.

Теперь к языкам в названии. Если дать два похожих кода, например сложение массивов на C++ и Java, сразу смогу сказать/показать где какой язык использовался. Jav’у изучал до раздела Наследования и Полиморфизма, то есть немного затронул ООП. C++ тут если быть честным с самим собой +/-, ради интереса изучал.

Сейчас же точно решил идти к цели. Вот с чего начать ... Тут пояснения нужны, с чем столкнусь, над чем придется страдать при изучении, где применяется.

Хочу заниматься сложными системами, например Банковскими, тут Java так понимаю. Есть курсы где по окончанию дают Java SE, где то Java EE. Лично я считаю, лучше хотя бы Java SE освоить прилично. Если не прав, поправьте.

Так же есть Java ME, промежуточный. Можно ли с Java SE начитать разбираться с Java EE в моем случае? Или для Web-направления в Java ME не стоит углубляться?

Порог входа в Java высокий, знаю, однако меня это не останавливает.

Теперь С++. Его синтаксис мне нравится как и в Java, даже местами больше импонирует. Чего стоит не надобность ставить операторные скобки для «else». Если брать чисто язык, его изучал до раздела Ссылок и Указателей. Его мощь знаю, правда на словах, постах и видео, так же и о трудности использования. Горю желанием сам поработать. Есть Но, курсов не много. Порог повыше чем в Java.

Так понимаю, если бы я проработал с Java 3-4 года, тогда бы мне стоило попробовать себя в С++, сейчас же трудно очень будет. Опять же меня это не пугает. Почему именно эти языки выбрал, хочу сложные задачи решать, не Искусственный интеллект создать конечно.

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

Помогите советом, своим опытом, знаниями. Может кто сравнит языки между собой более обширно.
Так же подскажите Курсы в Харькове по данным языкам. Спасибо.

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

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

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

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

на плюсах приходится выбирать из нескольких одинаково красивых (уродливых) вариантов архитектуры и подходов. есть несколько стандартов. старый попроще, на нем бородатые старые эмбедеры пишут для всяких железок. новые сильно раздуты (С++ — это спрут, полученный путём пришивания лишних ног собаке; а число «11» в названии «C++11» означает количество ног, которые они пришили к С++ для получения более совершенного спрута) и используются задротами чтобы попустить джуна на собеседовании. также отрасли применения: игродел, высоконагруженные системы, распознавание и трекинг образов на видео. людей мало, поэтому работа есть, но часто не по профилю из-за большой области применения. зарплата на джаве несколько выше (+20%) чем на плюсах

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

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

Коли розпочинала цікавитися програмуваннями також була на роздоріжжі через можливості обрати тої чи іншої мови програмування зупинилася на Java.Відвідувала безліч форумів та безкоштовних занять щоб зрозуміти чи буде підйомною для мене це. Але чесно кажучи Java уже більше півроку можу сказати це все залежить від самої людини як вона себе змотивує та як буде працювати. Навчалася сама та відвідувала курси. Плюс курсів що тобі все структуровано пояснюють та якщо ти чогось не знають підкажуть як вирішити, також якщо ці курси викладають програмісти, а не просто викладачі. Чесно коли шукала курси багато перебирала бо уже мала певні розуміння по Java. На курсі познайомилася з хлопцем який на C++ уже працює більше ніж 4 років замовлення є, робота є, але можливості обмежені, у світі програмування завжди потрібно вчитися та бути в курсі новинок. Сподіваюся що це буде не перша мова яку я вивчу, так кажуть що коли вивчу Java це буде на все життя сподіваюся так не буде. На першому заняття на курсах нам викладач сказав легко не буде, але ваші старання будуть оцінені вами коли ви будете на вершині й будете ставити перед собою нову вершину, а за печами буде уже безліч подоланих вершин. Мотивація це головне та підтримка...Навчайтесь...

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

Таблица умножения, пропорции, отрицательные числа. Это все очень важно в веб-разработке. Следует обязательно повторить.

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

Такая вот еще просьба. Помогите план составить, что в какой очередности учить, ваш совет.
Например: язык, фреймворк, платформа...

Кто с каким языком в названии знаком, его и расмпишите, как вы видите процесс изучения.

Предметна область важлива. Її за вас ніхто не обере. Що робити хочете, ці мови багато для чого використовують. По мові раджу нагуглити якийсь класичний підручник, взяти з нього зміст і гуглити по темам з нього (бо теми всюди фігово написані, як на мене, в гуглі краще).
І в програмуванні голове — практика. Ви можете не знати усю мову, але ви повинні вміти робити завдання. І, до речі, вчіться гуглити, якщо дещо насобачитись, то рівень порад доу обходиться доволі легко.

В первую очередь Питон — на нем легко научиться программировать и написать свою первую игрушку. И понять, что именно нравится / не нравится, хочется / не хочется делать.
Потом, набравшись самоуверенности (сам написал игрушку, и она работает), учим что угодно, что нравится, пишем еще одну игрушку уже на новом языке, ходим на собеседования, и устраиваемся на работу.
Суть в том, что на Питоне можно тренироваться в разы (раз в 5) быстрее, чем на С++, и он намного легче, поэтому быстрее будут результаты и меньше шанс схватить депресняк и пойти работать грузчиком.
Если сидеть все время дома и кодить, на Питон уйдет 2-3 месяца, затем на С++ после Питона — еще 6 месяцев. Потом на хождение по собеседованиям и доучивание надо заложить еще 2-6 месяцев.
По вечерам 1-2 раза в неделю вообще ничего не будет. Надо садиться и заниматься каждый день несколько часов.

Вы игры разрабатываете, или как пример за игры написали?

Чувак ты задаёшь уже слишком много вопросов и все они неправильные возьми уже покодь что-нибудь.

Мне было интересно тренироваться на игрушках. Если Вам больше нравится что-то другое — пишите другое. Народ пробует сайты, мессенджеры, планировщик доходов/расходов.

Я пробовал части сайта, там форма регистрации, личный кабинет...
Чат так же пробовал реализовать, по примерам все, чтоб в голове сложить пазл, как все работает. PHP и JavaScript больше использовал.

Такой еще вопрос, для С++ разработчика на GitHub нужно портфолио создать для собеседования?

Еще вопрос. Во соцсеть ВКонтакте, Facebook работают на PHP. Однако PHP транслируется в С++ для более быстрой работы.

Телеграмм так же использует С++.

Значит С++ применим для Web-индустрии, или это не совсем тот С++?

С++ используется в embedded и high load. High load может быть на десктопе (фотошоп, браузер или игрушка) или на бекенде (data layer). Последний случай — как раз сервера мегакорпораций. Но для обычного интернет-магазина в этом нет смысла. Слишком дорого и медленно в разработке и тестировании. Зато будет летать по сравнению с питоном или джавой, если правильно написано.

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

Из C++ делаются куски Data Layer (вроде поисковых механизмов, кешей, кастомной базы данных). Сам кусок — это бинарь, запускаемый или прилинкованный к nginx или еще как-то в систему. Для выкатывания гасится nginx, заменяются бинари в папке, с которой он работает, и nginx поднимается опять (это все делает админский скрипт). Если интерфейс не поменялся — на этом закончили. Если поменялся — то огребать будем так же, как и с любым другим языком.
Если кусок новой версии начал часто падать — автоматом или вручную запускается тот же скрипт, который откатывает папку на прошлую версию.

Здесь люди забывают про Go. Не нужно пейсать батл-нек на C++, лучше писать всё полностью на Go, и ещё низкоуровневое api на C.

Якщо все хочеш С++, то я би радив починати з Qt,
там багато чого подібного до Java, тобто вхід легше, і Qt більш-менш кросплатформенний та універвсальний

В вакансиях по большей части Qt и встречал в требованиях. Если мой город брать.

Для старта карьеры свой город рассматриваю. За год может все изменится.

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

Java

0. Java core

1. Ищешь на хабре статью по сотрировке массивов. И собственно пишешь реализации.

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

2.1 Переписываешь сотрировки с использованием интерфейса, и делаешь параметризированные тесты. И всегда стараешься на все писать тесты, будет лень, будешь думать зачем оно надо.. Но пиши. Надо.

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

4. Добавляешь jdbc, сохранение с бд наборов и результатов. Сюда же работу с maven, github. С этого момента все выкладываешь на github, желательно с командной строки, желательно с ветками, желательно почитать что-то типа pro git

5. Добавляешь регистрацию/авторизацию, без фреймворков.

6. Переписываешь с jstl

7. Переписываешь сортировки с stream, понимаешь зачем тесты.

8. Начинаешь учить hibernate. Заменяешь свою реализацию с jdbc на hibernate.

9. А теперь веб часть надо тоже потестить, например с помощью selenium

10. Делаешь к своему функционалу rest api. Бонус — авторизация через jwt и oauth2. Раз влезли в oauth2 можешь поиграться с авторизацией через соц сети и доступ к их ресурсам через api соц. сетей.

11. Spring. Без spring boot. Делаешь без авторизации на spring mvc свои массивы, потом добавляешь spring data для сохранения в БД. Потом добавляешь spring security для авторизации. Потом добавляешь rest и jwt. Крайне желательно все это с помощью того же спринга тестировать. Как бонус можешь добавить thymeleaf.

12. Если web очень интересен, можешь освоить основы angular и/или vue, точно не помешает.

13.

через год пиздуй в крупную компанию, HeadHunter, например и ты будешь получать такие суммы, что любая баба будет течь при одном упоминании твоей зарплаты.
знаком с Pascal, Delphi и Visual Basic, PHP, JavaScript. Знаю HTML и CSS.

По моему всё очевидно — прямая дорога в веб, поднатаскаешься и можно начинать джаву учить.

Если дать два похожих кода, например сложение массивов на C++ и Java, сразу смогу сказать/показать где какой язык использовался.

А толку? Работа программиста — это не угадывание на каком языке написан код.
По поводу JavaME, JavaSE и JavaEE — у тебя явно не правильное представление о редакциях джавы. МЕ — расшифровывается как micro edition — редакция из которой выпилены очень многие вещи и виртуальная машина размером с код на ассемблере (утрированно конечно), на этой редакции раньше выходили игры на нокиах (и не только). Standard Edition — сам язык со всеми плюшками, на этой редакции пишется андроид и десктоп. JavaEE — это прежде всего принципы и набор дополнительных библиотек для работы ынтерпрайзы, используется только в больших ынтерпрайз проектах ибо иначе — пушкой по воробьям.

Чего стоит не надобность ставить операторные скобки для «else».

Ты не поверишь — но в джаве они тоже не обязательны, но как и в С++ — блок else в таком случае будет ограничен одной строкой.

Порог повыше чем в Java.

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

Его мощь знаю

Любой язык мощный если уметь им пользоваться. Например питон успешно используют в BigData и MachineLearning.

Так понимаю, если бы я проработал с Java 3-4 года, тогда бы мне стоило попробовать себя в С++

Тут ты отчасти прав, например мне хватило 1 года с джавой что бы начать учить С++ и периодически писать на нём (для себя конечно).
Вообще — мой тебе совет — относись к джаве как к супер-убер-пупер строго типизированной версии С++, тогда будет проще оценить. Мне, например, было намного проще изучить сначала джаву, а потом С++, так как джава не позволяет делать много вещей, чем формирует правильный ход мыслей. И ещё одно — тут тебе советовали про андроид — просто имей ввиду что андроид приложения хоть и пишутся на джаве, но это далеко не та джава что на бекэде.

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

Расшифровки аббревиатур знаю. В моем понимании Standart edition это десктоп приложения. Micro edition это Android. Enterprise это веб.

За Micro edition написал, что можно не углубляться, из-за мысли, что если с помощью Enterprise создаю банковскую систему, нужно учесть, что система будет взаимодействовать с мобильными и десктопными приложениями. Для этого надо что-то написать в коде, что мне предстоит узнать.
Мои поверхностные понимания.

Примеры с синтаксисом привел, чтоб показать, что не полный ноль в том, о чем спрашиваю.

В результате показал, что 0. Суть С++ в ссылках и указателях. Без них ничего не знаешь.

если с помощью Enterprise создаю банковскую систему

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

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

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

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

— в вебе доминирует джава

— средняя ЗП по Украине выше в джаве

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

— с джавой можно метнуться в андроид, в случае чего

— на курсы идти не советую. coursera.org и погнал с базовых курсов. CS50, алгоритмы и потом уже по языкам.

— с джавой можно метнуться в андроид, в случае чего

Теоретически но это как бы не совсем та джава и нужен отдельно андроид без него никакой джавы не будет вообще (в отличие кстати от «той джавы») ну и на худой конец есть JNI ))

Огромное спасибо за конструктивный комментарий!

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

Мне учится еще год в уверситете, с курсами легче немного будет обучатся, совмесно с само дообучением (выполнение домашних заданий, изучение прочих ресурсов...).

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

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

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

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

Источник: личный опыт работы, начиная со 2го курса.
P.S. до сих пор учусь.

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

Минус для меня в курсах, что они вечерние.
На которые собираюсь они с 18:00-21:00, два раза в неделю.

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

Хороший программист должен всегда быть в тренде, или придет более шустрый и займет место под солнцем.

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

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

Что значит «привычка хорошо учится» ? У нас в стране всего несколько мест, где стоит учится и тратить на это все свое время.

Полезный навык не только инженерам — уметь расставлять приоритеты.

Быть в тренде

== отзываться на просьбы хрюш, ходить на собесы

С товарищем есть интернет-магазин, на CMS, тоесть используется PHP. Были моменты когда нужны были доработки, знаний языка не было, поГуглив находил ответы. С подобным поиском информации проблем не имею. Не идеальный английский только, и трата времени на перевод не понятного.

Тренд не курсов имел ввиду, а самого программиста, его навык, знания...
На курсах работают программисты с опытом 4-5 лет в сфере и талонтом доносить информацию. Переделывать(дополнять) программу обучения трудоемкий процесс, и долгий. В тренде держать материал сложновато, вот донести информацию которая актуальная можно. Мое мнение.

Учится хорошо, когда в зачетки хорошие отметки. Не скажу что это много времени занимает.

Понятия не имею, как сертификаты на собеседовании в IT-компании влияют на результат прохождения собеседования.

Никак не влияют. Вообще.

Если вы senior, сертификат роли не сыграет. Навыки и опыт.

Junior’у все в бой бросать надо. С первого раза всеравно не выйдет пройти.

C++ или Java?

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

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

Ну вот видите, это ещё один фактор, повышающий рейты программистов на коболе. Скоро они на вес золота будут.

сейчас бы в 2к18 такие вопросы задавать

Коментар порушує правила спільноти і видалений модераторами.

Коментар порушує правила спільноти і видалений модераторами.

Учтите, что очень часто не С++, а С/С++ (что в сумме даёт рейтинг выше джавы).

учтите, С не С++, а С++ не С, а С++С не Java

C подмножество С++. Нельзя знать С++ и не знать С.

C подмножество С++

WAT?

Нельзя знать С++ и не знать С.

можно, доказано приплюснутими

Важный комментарий о С++. Да, в вакансиях так и пишут С/С++. Лет пять назад (по словам с форумов), сначала нужно было освоить С, после переходить к С++. Люди вправду проходили данный путь.

Сейчас же эта тенденция есть, или С++ уже не есть «дополнением» своего предка?

Вообще говоря редкий программист сейчас может одинаково хорошо писать и на С и С++.

рєдкій праграмізд ваабщє можєт харашо пісать, єто касаєццо любога ЯП

В собственно языке С нет ничего сложного. Сложно программирование на нем — почти всегда требуется понимание особенностей железа и компилятора.

Да, С один из самых простых языков на рынке, потому что самый старый.
Нет, если писать на С логику, то компилятор и железо знать не надо. Просто обычно логику пишут на плюсах (или Питоне/Джаве, кто не обленится делать переходник), а С оставляют как тонкую прослойку над железом. Но реально логику на С писать можно, не зная железа и компилера (за исключением извращений вроде 16-битных DSP, но туда плюсы вообще не влазят).

Java нравится больше, только из-за того, что больше теоретической информации имею.

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

А подебажить?

Зато полезно на будущее.

Я не умею до сих пор)

Смешной пример, все же было, на Visual Basic когда сортировку Пузырьком и т.д. не получалась, именно по новой переписывал файл.

И находил ошибки.

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

Самое веселое, когда этот ключик включают в пятницу вечером и отправляют на прод

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

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

Первые три предложения скорее всего обо мне.

Это в безопытном состоянии. Вот так почитывать формы и сообщества, меньше ошибок в практике будет.

Похоже на сказку, реализовать её в моих интересах.

Зато в результате для С++ программистов остаются интересные садомазозадачи, которые в других языках реализуются библиотеками «из коробки», кстати, тоже написанными на С или С++.

когда попадають приплюснуті віндузятніки в ембедед, то їх работа — натягіваніє сови на глобус, і 99,99% епік фейл

Когда ембедеры начинают писать на С++ эпик фейл такой же.

тому я хрюш з неембед вакансій мяхко посилаю,
но вообщето в аутсосі, траблешутінг і бахфіксінх, поетому надо в общєм чітатєлі, а нє пєйсатєлі.
Пєйсатєлів вистачає, понапишуть, потім шукають хтоби то пєйсатєльсво порозгрєбау (прачітау, паняу, пафіксіу, переписау палюдськи шоб работала как надо і без вийо в сорсах)

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

так отож,
так що С ніяк не подмножество С++

Когда ембедеры начинают писать

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

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

Вне эмбеддеда я такое наблюдал только с похапистами, пытающимися в мобайл.

Нонешние «простые железяки» мощнее десктопных компов 80х-90х

А там где железяка сложная там часто уже С с классами, ибо в pure C утонешь.

А сложные железяки мощнее десктопных компов 00-х.

Была ли там архитектура или нет?

1GHz проц, 1GB RAM, рахітектура на патернах захльобується при 500Kbit CAN bus (приблизно 6Кбайт за секунду).
О_о

спадщина от приплюснутих джавістів (кажуть два покоління вже змінилося, і от тепер будуть рішати, чи ставити костилі, чи нарешті переписати ще раз)

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

Совтваре-паттерно-хейтерность возникла в этой стране из-за того, что вопросами про паттерны отсеивали людей, которые лет 30 кодили в одиночку и знали каждую отдельную макаронину своего кода. А тут внезапно оказалось, что очкастый синьор (который годиться собеседоваемому в сыновья) загоняет по всем статьям и спрашивает про паттерны! Тут нужно как-то примериться с собой, например, заявив «паттерны не нужны, паттерны оверхед, мой дед кодал без паттернов и паттерны только для 23-х летних синьоров».

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

Больше всего мне когда-то понравился «визитор» на одной конторе, на котором код был построен, но он его не использовал, а все стукались ко всем по своим интерфейсам — такой спагетти-код.

Кстати, это типичный код эмбеддера, да. Только они даже книжки не читают, а сразу «х/к-х/к и в продакшен».

Оверхед от кривой архитектуры, созданный людьми, которые в жизни только лишь знают от корки до корки шаблоны на три своих любимых патерны (и все три почему-то Александерску) значительно больше. Очень сложно объяснять кастомеру, что такое write-only code, и почему вроде-бы почти работающий софт нужно полностью переписать.

Я такое наблюдал еще только с жавистами пытающимися в ємбеддед.

А вони тобі будуть доводити, чому твій код кал на рівні заліза) Ви дуже про аллокації думаєте, коли пишете, наприклад?

А вони тобі будуть доводити, чому твій код кал на рівні заліза)

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

Ви дуже про аллокації думаєте, коли пишете, наприклад?

Аллокации — это часть архитектуры, и думать нужно об архитектуре

Аллокации — это часть архитектуры, и думать нужно об архитектуре

STL — это тоже часть архитектуры? Или у вас в архитектуре кастомные аллокаторы прописаны?

Для STL как раз прописано поведение, когда аллокаторы вызываются.

Ну и по-моему очевидно, что между массивом и std::vector есть разница, которая решается на уровне архитектуры

Ну и по-моему очевидно, что между массивом и std::vector есть разница, которая решается на уровне архитектуры

По-моему, очевидно, что использование массива или stl::vector является деталью имплементации и не имеет отношения к архитектуре приложения.

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

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

Эту вот локальную задачу можно по разному выделить и по разному сформулировать.

Конкретный пример: Active Record vs DAO. И то, и другое в первую очередь занимаются взаимодействием БД. Но первом случае, по всей системе растягиваются (фактические) запросы к БД; во втором все запросы группируются в одном месте. Т.е. алгоритм решения вполне конкретной задачи влияет на всю систему.

Нет. В данном случае в архитектуре системы либо присутствует DAO как модуль, либо нет. При чем если нет, то потом можно огребать. Кроме того, в интерфейсах модулей, которые могут быть прописаны в архитектуре, передаваемым типом данных может быть ссылка на объект или хендл в DAO, закешированные данные объекта, либо Active Record. Это тоже будет как-то влиять на общую картину, и будет зависеть от модели потоков исполнения.
А вот как заимплеменчен список открытых объектов в DAO или список полей в Active Record, и что там под капотом — массив, вектор или хеш таблица — никого не волнует и к архитектуре отношения не имеет. Так же, в принципе, как и метод доступа к базе изнутри DAO / Active Record.

Расскажите, что с себя тесты представляют. Тесты работы программы. Какую литературу смотреть?

Вообще не ко мне — не использую. Предпочитаю ассерты (offensive programming). Хотя, для алгоритмов, тесты хороши.

Типы тестов:
1) Юнит-тесты — гоняют отдельный класс во все дырки и пытаются гарантировать, что он не падает и правильно себя ведет. Хороши для проверки работоспособности алгоритмов и чтобы убедиться, что ты не сломал чужой код, когда в него влез грязными руками.
2) Интеграционные тесты — поверяют куски программы на жизнеспособность. Нужны для того, чтобы убедиться, что изменения в одном модуле не сломали всю систему из-за того, что другие модули от него чего-то ожидают, а он этого не делает (нарушение контракта при неизменном интерфейсе).
3) Автотесты — программа целиком запускается под скриптом, который делает вид, что он пользователь и мучает программу. Чтобы убедиться, что все более-менее работает в реальных условиях.
4) Нагрузочное тестирование — проверка, сколько пользователей может выдержать сервер.
5) Тестирование безопасности — попытка взломать или перегрузить сервер направляя на него много плохого трафика.
6) Тестирование отказоустойчивости — в продакшне вырубаются сервера и смотрят, как система восстанавливается от сбоев (Netflix).

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

Литературы куча — конкретно не подскажу.

Да, прошу прощения, не вы упоминали автотесты, промахнулся кнопкой.

Однако ваш ответ помог. Спасибо.

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

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

Ну так напиши для ТС правильное мнение.
У меня сказывается специфика изучения С++ по книжке C++ in Action, которая пропагандирует Offensive Programming. В жизни оно пока не подводило.

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

Нет. В данном случае в архитектуре системы либо присутствует DAO как модуль, либо нет. При чем если нет, то потом можно огребать. Кроме того, в интерфейсах модулей, которые могут быть прописаны в архитектуре, передаваемым типом данных может быть ссылка на объект или хендл в DAO, закешированные данные объекта, либо Active Record.

Т.е. алгоритм решения задачи взаимовлияет на архитектуру: другой алгоритм = другая архитектура.

А вот как заимплеменчен список открытых объектов в DAO или список полей в Active Record, и что там под капотом — массив, вектор или хеш таблица — никого не волнует и к архитектуре отношения не имеет. Так же, в принципе, как и метод доступа к базе изнутри DAO / Active Record.

В зависимости от реализации (массив, вектор или хеш таблица) скорость и расход оперативы, а также возможные интерфейсы будет различным. Например, операция удаления элементов может работать за линейное время, за константное время либо за линейное-время-но-уметь-делать-batch-delete. Это вопросы архитектуры

Т.е. алгоритм решения задачи взаимовлияет на архитектуру: другой алгоритм = другая архитектура.

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

возможные интерфейсы будет различным

А вот это уже en.wikipedia.org/wiki/Leaky_abstraction
Идея интерфейса в том, чтобы остальные модули не заморачивались с деталями реализации данного модуля, и не зависели от нее. При нормальной архитектуре (что не всегда достигается) модуль можно переписать, не сильно зацепив остальное. То есть, перейти с вектора на хеш таблицу так, что этого никто не заметит. Суть архитектуры в абстрагировании модулей от внутренних деталей друг друга, а Вы эти детали выносите наружу. Что же тогда будет, если требования поменяются? Весь проект переписывать?

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

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

Суть архитектуры в абстрагировании модулей от внутренних деталей друг друга

Суть архитектуры — это разбивка задачи на модули и написание/создание требований к этим модулям

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

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

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

Я считаю, что хорошая архитектура отличается от плохой тем, что хорошая переживает достаточно большое количество изменений требований и защищает от зависимостей от железа и библиотек (Vendor lock-in). Для этого нужно абстрагироваться от деталей. Плохая архитектура не переживает изменения требований или компонентов.

Так, це реалії. На старті проекта задача — намалювати максимально гнучку систему, яка б одночасно була:
1) зручною для написання
2) модульною, щоб будь-який компонент можна було замінити, майже не зачепивши інших
3) універсальною, щоб з крокодила зробити метелика, якщо замовник забажає
4) влазила в залізо за розміром та використанням ресурсів

Костилі втикати доведеться в будь-якому разі. Найперші полізуть під час первинної розробки — тому що знайдуться певні деталі, котрі не були передбачені на старті (коли малювали архітектуру). Головне — щоб ці костилі не зшивали кілька потоків вкупу. Тоді — капець, архітектура не вижила. Якщо костиль між шматками коду в одному потоці — то погано, але не смертельно. Можна переписати інтерфейси між ними. Костилі всередині одного модуля — то звичайна справа. Коли їх стає занадто багато, і новий костиль вже не влазить — модуль треба переписувати. І отут теж архітектура використовується для того, щоб переписування одного модуля не зачепило всі інші, і не довелося переписувати геть усе.

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

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

Т.е. менять архитектуру

Да, кусочек архитектуры — интерфейс между двумя модулями. Но если до такого дожили — значит, изначально данная архитектура была недостаточно хорошей для совокупности сложности задачи и времени жизни проекта. Если от этого высокоуровневая архитектура (разбивка на потоки и модули) не посыпется — ок. Если посыпется — so it goes.

На доу много подобных тем, почтай..

Есть даже программа, что и за чем учить самостоятельно в java

Вопрос что выбрать, java или с++ сродни, какой автомобиль выбрать, седан или кроссовер. Это твой выбор, на уровне ноль, как у тебя сейчас, тебе без разницы сложность освоения. Если поиск работы не решает, то выбирай, что больше нравится. Вопрос, где выше зп тебя не будет волновать еще лет 5 наверное, а что будет по зп и языкам через 5 лет, никто не знает.

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

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

О каких трудностях в C++ идёт речь? В C++ нет никаких трудностей, только геморность есть. Геморность.

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

основная идеология развития этого языка, хотя это скорее плата за то

бред

что на нём можно делать вообще всё что угодно

миф

и при том на столько эффективно, насколько это возможно.

ерунда

Теперь С++... Если брать чисто язык, его изучал до Ссылок и Указателей.

В смысле книжку пролистали до главы Ссылки и Указатели? Тогда однозначно джава!

Если быть точным: Переменные и типы данных; конструкторы; циклы; методы; массивы....
По книгам не разу не учил какой либо язык.

массивы

Массивы очень важная фича особенно их конструкторы.

И деструкторы.

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

Изучать нужно програмирование а не языки програмированния. Просто задумайтесь что ИМЕННО вы собираетесь разрабатывать на С++.

Что я прочитал 1 января?)

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

Промониторь рынок, подумай чем хочешь заниматься...

C++

Главное — практика

прочитал только заголовок, JAVA!

Какого тебе не празднуется ? Новый Год же ?

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

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

Нет, просто джуны джависты по пол-года работу найти не могут. С плюсами, вроде, попроще.

Вон на том же ж ДОУ:

— Java 243 работ
— C++ 96 работ

даже PHP 328 работ и даже Python 123 работ как-то «вроде попроще» не выглядит плюс наверняка там на «плюсы» все «миддл+ и выше».

Сравниваем:
jobs.dou.ua/...​nds/?category=C++&exp=0-1
С++ 6 откликов на джуновую вакансию
jobs.dou.ua/...​ds/?category=Java&exp=0-1
Java 30 откликов на джуновую вакансию
jobs.dou.ua/...​/?category=Python&exp=0-1
Python 13 откликов на джуновую вакансию

По неджуновым выигрывает Embedded jobs.dou.ua/...​rends/categories/2017-12 1.4 отклика на вакансию

Вопрос довольно интересный я думаю одной общей статистики мало интересен также технический срез этих 30 а также общее количество мест куда можно попробоваться ещё. Вместе с тем также интересен уровень сложности который нужно преодолеть непосредственно по предмету чтобы чисто технически стать «топ 5%» из тех 30 вполне возможно усилий и личных ресурсов для этого требуется существенно меньше чем в других языках а становясь «топ 3%» из общей массы автоматически выбиваешься в «гарантированные 1 человек на все доступные места» конечно ещё остаются копроративные заморочки и софт скиллы.

Но это только одна сторона вопроса ведь стратегия полагается долговременная скажем не менее 10 лет и тут классический банальный вопрос «кем вы видите себя через 5 лет?» имеет уже вполне конкретные очертания «а ну ок сделал вайти вайти а что я буду делать вайти через 5 лет? через 10 лет?»

Конечно язык можно и сменить но «планировать» такое заранее на этапе «вайти вайти лишь бы вайти» не кажется мне разумной стратегией.

а становясь «топ 3%» из общей массы автоматически выбиваешься в «гарантированные 1 человек на все доступные места»

нифига, когда джун умнее интервьювера, обычно он интервью не проходит

Конечно язык можно и сменить но «планировать» такое заранее на этапе «вайти вайти лишь бы вайти» не кажется мне разумной стратегией.

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

нифига, когда джун умнее интервьювера, обычно он интервью не проходит

Я не имею в виду «умнее интервьюера» я имею в виду «умнее 30+ остальных на место». Ну и опять таки задумываясь стратегически и заранее планируя следующий шаг переход на +500 имеет смысл подготовиться к тому что

умнее интервьювера, обычно он интервью не проходит

— но при этом таки быть и таки пройти ))

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

Ну я бы так не сказал ни первое ни второе.

плюси ідуть к ... Коболу ... с соотвєтсвующімі паслєдствіями

Краще викинь з голови ідею про

Курсы в Харькове по данным языкам

. Курсера, едекс — курси кращих технічних вузів світу. Заодно технічна англійська підтягнеться. А якщо вона і так на непоганому рівні — додаткова практика не помішає.

Тяжело тебе будет чувак ! Я тебе рекомендую идти в Python или Ruby on Rails, так быстрее будет ...

Руби в меня зашел как ножик в растопленное масло... и не заметил как уже 4ый день кодил на Руби... а 4 дня назад просто решил включить видео лектора на Ютюбе ) Язык отличный! Но Джава изящный ) Мне и Джава и Руби нравится.

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

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

на плюсах приходится выбирать из нескольких одинаково красивых (уродливых) вариантов архитектуры и подходов. есть несколько стандартов. старый попроще, на нем бородатые старые эмбедеры пишут для всяких железок. новые сильно раздуты (С++ — это спрут, полученный путём пришивания лишних ног собаке; а число «11» в названии «C++11» означает количество ног, которые они пришили к С++ для получения более совершенного спрута) и используются задротами чтобы попустить джуна на собеседовании. также отрасли применения: игродел, высоконагруженные системы, распознавание и трекинг образов на видео. людей мало, поэтому работа есть, но часто не по профилю из-за большой области применения. зарплата на джаве несколько выше (+20%) чем на плюсах

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

Побольше бы вот таких комментариев. Спасибо!

причем такой, чтобы уже после програмер (без больших ) мог его саппортить.

золоті слова
В жізні, правда, ах да увы...
1. шото пошло не так..
2. Хьюстон, у нас праблэмы!
3. Надо вызывать санитаров\ассенизаторов\аутсорсеров...

если бы я проработал с Java 3-4 года, тогда бы мне стоило попробовать себя в С++

нет, это значило бы пол-года сидения без денег на время обучения и падение зарплаты в 3-4 раза (уход с синьора на джуна)

Go как раз для тебя

Не проканает, там тоже повсеместно работа с указателями, как в C++.

Ну это уже, как говорится, второй вопрос.

Умные указатели для кого выдумали? Ещё в C++11 сделали возможность упрятать это всё под unique_ptr и shared_ptr + weak_ptr, и тем самым облегчили жизнь всему народу.

Умные указатели для кого выдумали?

Для любителей наступать на грабли отрубать руки отстреливать ноги пилить кишки.

ЗЫ: от арифметики это всё равно не избавляет зато например shared_ptr зомби которого как бы убили из хранилища но который на самом деле в это время всё ещё занят на работе ну чистая классика «сделали возможность упрятать всё под всему народу облегчиться».

shared_ptr зомби

Что-что?

Во-первых, чел ещё обычные указатели не освоил. Во-вторых, GC в C++ нет и не будет, а насколько костыли типа shared_ptr позаимствованные из boost облегчают жизнь, обсуждать неуместно.

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