Drive your career as React Developer with Symphony Solutions!
×Закрыть

Муки выбора ЯП

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

В чем дело?
Хочу вАйти (строго говоря, я уже в нем, QA, но пресытился).

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

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

И в чем затруднение?
Несмотря на то, что я примерно очертил круг интересов, выбор ЯП как первого шага пока что боль.
Как все происходило последние пару дней:
1. Почитав, прикинул, что iOS-development мне интереснее всего, опыт работы с яблочками есть. Теперь надо выбрать, что изучать — Objective C или Swift. Индусы с аналогичных тем на ин. форумах бодро рапортуют, что свифт весьма простой, можно смело его изучать, в идеале — оба. Ок, читаю дальше, прихожу к выводу, что выбор мой так себе — рынок значительно уже, необходим рано или поздно недешевый Mac, плюс многие занимаются именно своими проектами, что не прельщает, и, что главное, совсем зелени вроде меня они все равно не так «легки».
2. Полез читать дальше, все-таки не один айос интересен. На повестке JS и С#. Оба популярны и востребованы, под мои цели подходят. Но как первые языки их жестко критикуют и высмеивают агитаторов. Про PHP читаю много нехорошего, и это не совсем то, что хотелось бы. И вообще в обсуждениях на эту тему кромешный ад, рекомендуют ну все подряд, я в полной прострации. Советуют Питон, потому что простой. Советуют С/С++. Советуют Паскаль...
3. Резюмируя — я боюсь потерять время, изучая фундамент, и боюсь стать говноспециалистом, выучив модное и потом кучу лет доучивать что-то из основ. Это не планируется как хобби, я не могу позволить себе долго смаковать теорию (при этом понимая, что без нее никуда), цель прежде всего работать. В разных комментах часто сквозит мысль, что не язык главное, это всего лишь инструмент, а общее понимание, но в абстрактной теории будет ли интересно это изучать?

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

LinkedIn

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

Сейчас такое время, что знать одного языка недостаточно, имхо. Иначе не поспеешь за поездом.
Более того, опытному программисту неважно, на каком языке писать: стоит ему лишь почитать немного про синтаксис, как можно начинать с ним работать.
Я это к тому, что неважно, какой ты выберешь язык. Он все равно не будет твоим единственным, если ты продолжишь развиваться как программист.

Задай себе вопрос по-другому: что я хочу, для начала, сделать? Исходя из этого, выбирай язык.
Хочешь веб приложение? Попробуй начать с JS.
Что-то из софта под Windows? Попробуй C# (или Qt, но там C++, зато не только Windows)
Под андроид? Бери Java или Kotlin.
Под iOS? Swift (или Objective-C, если нравится синтаксис)
С игр не начинай, имхо. Писать грамотно игры — это значит разбираться в лоу-левел вещах, а-ля GL или D3D, понимать работу видеокарты и как вообще устроен графический пайплайн. На изучение этого ты потратишь 5+ лет. Со своими знаниями ты сможешь писать только скрипты в существующих движках, а это будет только отуплять тебя как программиста.

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

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

Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Советуют Питон, потому что простой. Советуют С/С++. Советуют Паскаль...

кстати, а Бейсик советовали?)
например, ru.wikipedia.org/wiki/FreeBASIC или ru.wikipedia.org/wiki/Gambas (только для линуксов) или (наиболее популярный) VB.NET
з.ы. для

мобайл

есть www.b4x.com (Basic for Android, iOS и IoT + есть версия для джавы), а для

Геймдев тоже привлекает,

есть DarkBasic ru.wikipedia.org/wiki/DarkBASIC

А сколько по ним вакансий?
Да и бейсик не проще и не лучше питона. И при этом парадигмы бейсика устарели уже лет 25-30 назад.

Насчет вакансий не знаю, не проще питона — согласен. А насчет парадигм бейсика, например, на сколько я понял по статье из википедии про FreeBasic — в него добавили много современных возможностей по сравнению с классическим бейсиком, а VB.NET — так это практически равный си-шарпу по возможностям язык (ибо на той же платформе работает).

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

З.Ы. а так я сам за питон)

На повестке JS и С#. Оба популярны и востребованы, под мои цели подходят. Но как первые языки их жестко критикуют и высмеивают агитаторов.

ИМХО, при правильном подходе и подборе материалов (книг и т.д.). Вполне как первые языки.

Советуют Питон, потому что простой. Советуют С/С++. Советуют Паскаль...

Питон как первый язык — да.
С/С++ — ИМХО нет.
Паскаль — ИМХО только если FreePascal и PascalABC.NET.

Почитав, прикинул, что iOS-development мне интереснее всего, опыт работы с яблочками есть. Теперь надо выбрать, что изучать — Objective C или Swift.

а можно внезапно C# и Xamarin)

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

изучение фундамента ИМХО не являеться потерей времени, ибо все уходящее, а музыка основы — вечное)

Cтосовно iOS, Swift, як перша мова програмування, як на мене — не найкраща ідея, і знову таки, це суб’єктивно, але стартувати краще з Objective-C, а десь за 2-3 тижні, коли більш-менш орієнтуєшься в UIKit, паралельно починати розбиратися з Swift.

Синтаксис — не главное. Выбирайте область, в которой хотелось бы начать работать. Часто в ней используется не один язык. Например, мобильные приложения: это, во-первых, выбор — iOS или Андроид, во-вторых, нативное приложение или гибридное, а уже потом — Swift vs ObjC, ReactNative vs Cordova.
Также выбор стоит между работой в среде Вындовз, *nix или OS. И этот — не самый малозначительный (не обращайте внимание на цену макбуков: пока макбук устареет, Вам прийдется поменять парочку винбуков).
Подумайте, что хотелось бы программировать: энтерпрайз, системы, лохоматы, кликбейты, порносайты, магазины, социалочки.
Оцените число вакансий (но это условность; например, ангуляр 1.х проектов уже к счастью мало, но и желающих совсем нет; так что — паритет)
А уже потом поинтересуйтесь, на чем пишут в интересующей Вас области.
Могу с уверенностью предположить, что в течение пяти лет Вам прийдется выучить минимум еще один синтаксис в дополнение к выбранному.

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

Так совсем зелёному и область выбрать невозможно.
Поэтому начинают таки с языка — чтобы набрать представление об областях работы.

Про PHP читаю много нехорошего

А вы почитайте хорошее: www.phptherightway.com

Да нормальный язык для своих задач.

Нет, ни разу не нормальнй

Фейсбуку нормальный, Андрею Батыеву — нет. Наверно проблема в вас

Фейсбуку нормальный

На самом деле нет, они вроде пытались с похапе слезть

Решили, что на плюсах лучше будет

Исходя из моего видения нынешней конъюнктуры местного рынка и предпочтений ТС, посоветую выучить один из, в порядке предпочтения:
— Python
— JS
— Java (Android или QA Automation)
— PHP
— C# (Enterprise)
— Java (Enterprise)
Все они великолепны как в качестве первого языка, так и единственного.
Главное язык выучить основательно, по толковой книжке, от корки до корки, а другие какие-то основы (шаблоны проектирования, алгоритмы, сети или еще что) можно и потом, когда уже есть работа, если вдруг будет желание.

Точно с голым языком без фреймворков работа для джуна найдется?

Под изучением языка сейчас само собой подразумевают и изучение одного из его топовых фреймворков.

С джуна спрос невелик, но он тоже есть.
В общем случае, любой язык требует дополнительно знаний фреймворков, однако в плане затрат времени и усилий есть нюансы.
Если, например, говорить о Python, то знания языка — это 70% времени на подготовку.
Остальные 30% — это освоить Django, Flask, SQLAlchemy, virtualenv, pip, git, py.test, nose, а также основы Linux CLI, SQL, HTML, CSS, JS, из которых только SQL, JS и Django займут по неделе, а остальное по день-два максимум.
Т.е., для джуна на питоне (без предыдущего опыта в программировании) трех месяцев подготовки (полный день) должно быть более-менее достаточно, и из этих трех месяцев только один на фреймворки и вспомогательные вещи.
Еще проще дело обстоит с Java для QA Automation, т.к. сам язык для данного сценария выучить довольно просто, а потом за неделю дополнить эти знания теми же основами HTML/CSS, плюс Селениум.

Django, Flask, SQLAlchemy, virtualenv, pip, git, а также основы Linux CLI, SQL, HTML, CSS, JS, из которых только SQL, JS и Django займут по неделе, а остальное по день-два максимум.
Еще проще дело обстоит с Java для QA Automation, т.к. сам язык для данного сценария выучить довольно просто, а потом за неделю дополнить эти знания теми же основами HTML/CSS, плюс Селениум.

А где тег #sarcazm? )
или вы это на полном серьезе пишите?

На полном серьезе. Консультировал, помогал, наблюдал.
По сути, джуну надо отлично знать только основной ЯП. В остальном можно плавать и барахтаться, не критично.
А обратите внимание, что у ТС еще и

английский upper

, — с первой работой вообще проблем не будет.

QA automation НЕ легче, чем джуниор веб бекенд.
там еще нюансы по теории тестирования, и окружению, которые не всегда джуниор дев программисту нужны.

Вполне возможно. Селениум-тесты писал, хоть теорию тестирования читать не приходилось, не знаю, какой там объем. Но я никогда и не был QA, просто процесс на одном из проектов в какой-то период времени был таков, что девелоперы должны были писать acceptance тесты для основных сценариев. И кстати, я и на других проектах наблюдал подобное: девелоперов иногда ненадолго, а иногда на целые месяцы подключают к написанию acceptance тестов.

оу-оу-оу, сэр....
это была намеренная антиреклама, или лось фотзефак?))

конторы, чего же еще?

Большинство компаний, где я работал, выполняет десятки, а то и сотни проектов, многие из которых связаны между собой разве что общностью компании-заказчика. Каждый проект, по сути, сам для себя решает, какие виды тестов, в какой пропорции и в каком количестве писать, так что бессмысленно о компании судить по конкретному проекту.
Я не раз встречал, что у отдельных девелоперов к отдельным видам тестов глубокая неприязнь: одни в принципе не признают интеграционных тестов, в то время как другие доказывают, что они самые полезные.
Я лично спокойно отношусь к написанию любых видов тестов, от unit до acceptance.

я про вот это

девелоперов иногда ненадолго, а иногда на целые месяцы подключают к написанию acceptance тестов.

сорри, а кокого это делают разрабы?
економия?
не. unit тесты, ок, это то что любой разраб должен делать, если ему дают на это эстимейт

Я в решениях такого уровня не участвую, но могу предположить, что многое зависит от объема работ. Когда объём невелик, то можно поручить работу другой компании; можно привлечь консалтера на время: можно решить задачу внутренним силами. Когда объём работ значительный, то скорее всего, выгоднее нанять автоматизатора на постоянной основе. Но это только мои догадки.

а иногда на целые месяцы

я именно про вот это
все остальное мне глаза не режет

Я смотрю на такие вещи со своей девелоперской колокольни. Это самый обычный код, к тому же очень простой, а платят за него ровно столько же, как за любой другой. Писать его — одно сплошное удовольствие: все предсказуемо, линейно, никаких промашек с эстимейтами. А если он еще и на груви или джитоне, так вообще супер: можно что-то новое для себя почерпнуть, не напрягаясь.

Не видел ничего в теории тестирования, что не было бы понятным. Может, за 10 лет появилось что-то новое.

Судя по тому что вы писали, вы достаточно далеки от понимания теории тестирования ))))

да, настолько далек, что работал тестировщиком, и пару месяцев лидил команду)

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

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

это вы на Савина намекаете? )))))

Нет, читал какие-то 2 или 3 заграничных книжки, но уже не помню авторов.

Если вдруг вспомните случайно — напишите пожалуйста ))

не вспомню — 11 лет прошло

хм, сколько ваши услуги стоят, я бы хотел за пару недель наконец-то выучить Java+Selenium/Selenide на достаточном уровне, чтобы не копипастить код для автотестов )

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

Главное язык выучить основательно, по толковой книжке, от корки до корки
SQL, JS и Django займут по неделе

как от так?

SQL — первые 160, максимум 190 страниц Грабера.
JS — питонщику-джуну не надо даже jquery знать, или на что же указывает this, достаточно синтаксиса. Неделя с головой на почитать и побаловаться.
Django — Ваш эстимейт?

— ну по Django я соглашусь — неделя норм, а вот то что JS ему недели с головой хватит — очень сильно сомневаюсь ибо

гуманитарное образование

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

Я прошел и провел множество собеседований.
Спрашивают ли SQL и JS на собеседовании? Практически всегда.
Учитывают ли при принятии решения о приеме на работу? Крайне редко, по крайней мере в Киеве.
Оговорюсь, я джавист, и не исключаю, что с питонщика джаваскрипт и SQL требуют строже. Но что-то я сомневаюсь.
Мы ведь ведем речь о банальном войти в айти, верно? По-моему, джуну хватит и основ.

я вобщем то о той же джаве, где на собесе может попасться и простенькую DB задизайнить и запросик состряпать не самый простой и про нормализации расказать и страничку верстануть и на джиэсике немного попедалить ну и еще на много милых и приятных уху вопросов ответить )))
хотя может и отстал от жизни и счас такое не спрашивают, но буду признателен ( для общего развития) за список вопросов которые спрашиваете Вы ))) можно или тут или в IN )

Я всегда спрашиваю эти вещи, но для полноты картины. Большинство джавистов отвечают на 2 балла из 10 по SQL. Я вообще не учитываю знания SQL при принятии решения. Никак. Джавист должен отлично знать джаву, спринг, шаблоны, английский, JPA, плюс специфичные для конкретной вакансии вещи. А SQL они не знают, да и бог с ним.

Вообще, если учащемуся не помогать а предоставить самому себе, — и пусть барахтается, то конечно, обучение любой сфере может занять в полтора-два раза больше времени.
Банальное поставит линукс — настроить ИДЕшку, мускул и т.п. у человека может занять пропасть времени, не говоря уже о том, чтобы пояснить какой-то термин или помочь разобраться в сложном моменте.
Однако если все поставить и настроить, что у спеца обычно занимает меньше часа, и быть доступным по скайпу или в двух шагах на протяжении нескольких месяцев, обучение проходит очень гладко.

Java не бери. В современном аутсорсном программировании сам язык 2-5%, все остальное — что-то другое. Как в задаче коммивояжера путь строится от конца, для начала пойми куда ты хочешь попасть и оттуда строй себе путь к точке где ты находишься сейчас.

Тоже Qa. Автоматизацию учил на Java. Когда задумался о разработке то сразу знал, что хочу только веб. Начались муки выбора Php, Java(так как уже была хоть какая-то база, и в принципе язык нравится) или Python. Сделал маленький домашний проект на Django. И вопросы сами отпали. Не знаю, найду ли работу на Django, но сейчас уже планирую более большой и сложный проект на нем.

Python це сучасний PHP. Краще б вже Java вчив

Java был и остается любимым языком. Но для веба я выбрал Django.

Python це сучасний PHP.

Це як?

,kzm,
сколько можно клонировать эти топики?
1. Поиском по форуму пользоваться умеешь?
2. Как можно пересытиться QA в 25? Начни автоматизировать, смотреть код, разбираться в том что ты вообще тестируешь
3. Если просто QA не по душе, выучи то что по душе. Здесь никто вместо тебя ничего не сможет решить. Этим комментом тоже можешь подтереться. Или ты не ожидал что тебе скажут «без разницы какой язык учить»?

сколько можно клонировать эти топики?

Пока каждый топик собирает по +100 комментов будут продолжать клонировать. Это же еще один лишний повод поспорить о языках программирования.

Это же еще один лишний повод поспорить о языках программирования

С++ Г0ВН0,
C# - ГОРАЗДО ЛУЧШЕ !
— Ну чё, налетай на меня, злой «приплюснутый» человек :)

та ладно (let the srach begins)
ниправда ниразу)))

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

Главное, в ТА не задержаться при этом. У меня нет примеров даже уже мидл ТА, перешедшего в разработку без потери в зарплате. Чем больше опыта ТА, тем больше потеряет человек при переходе, потому что с опытом у ТА больше нужны навыки тестирования, а не разработки.
Короче, непонятно, зачем нужно это промежуточное звено нужно. Хочет в чистую разработку — пусть идет. ТА будет тратой времени.

#include <iostream>
int main()
{
    for (int i = 0; i < 300; i++)
        std::cout << i << " " << i * 12345678 << std::endl;
}
Вот когда осознаешь, что здесь бесконечный цикл может быть, тогда тебе в с++.
Вот когда осознаешь

я бы заменил на когда нагуглишь. А то как-то сильновато по оптимизации циклов новичков дрючить — не ?

А каким тегом ты текст выделяешь?
UPD: дошло, code

Это к тому, что его может ждать в С и C++. Множество обильно и тщательно разложенных граблей, как коллегами, так и компиляторами.
И причем тут дрючка — это компилятор. Я, например, про этот прикол не знал, пока в инете не наткнулся.

Нет. Конечно, на компилер каждый раз думаешь, но за 10 лет 2-3 раза видел с ним проблемы, и то в экзотических ситуациях и с редкими компилерами. Обычно натыкаешься на свои собственные грабли, или незнание как библиотека работает.

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

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

GCC c -О2 и ты словил бесконечный цикл. Сколько времени проблему выяснять будешь?
Учти, что в твоем случае код будет другой и ты долго протрахаешься, пока не посмотришь, что же там компилятор нагенерил. И тут всплывает необходимость знания асма.
А после полезешь в инет и обнаружишь, что народ уже ловил подобные проблемы и будешь минут 30 громко ругаться матом.

Дебаггер найдет цикл за 3 минуты, как только будет сценарий зависания.
В жизни такого не видел, поэтому считаю ситуацию из серии «метеоритом по голове попало».
Даже если попало, фиксится случайными изменениями кода. На проекте для 16-битного DSP народ так и делал. Но такая платформа — экзотика, и компилер неоттесчен.

Дебаггер найдет цикл за 3 минуты

Это для опытного приплюснутого, а для новичка — это совсем не 3 минуты, а много дней.

компилер неоттесчен

Это ты про GCC?

Ну в ембедеде с компиляторами обычно проще, там у разрабов компиляторов нет времени на супер-долбанутые оптимизации.

Это для опытного приплюснутого, а для новичка — это совсем не 3 минуты, а много дней.

Что, так сложно запустить под эклипсом, остановить поток и посмотреть стек? Это надо делать еще на уровне пет-проекта, а не на работе за деньги.

Это ты про GCC?

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

Ну я сталкивался во всех студиях, сс (или как он там был) для AIX. В GCC пока не ловил. Я сейчас больше в матлабе сижу. А при портировании пишу максимально просто и аккуратно. Стараюсь писать так, чтобы всё проверить или упасть.
Ну исправляешь код в итоге так, что бы ожидаемо работал под всеми целевыми компиляторами с учетом их версий.
Но это то, что ждет того, кто сунется в С или С++.

Эт че, на восьмибитке? А там 300 не порежет?

Это GCC какой-то из последних версий с -O2.

Бага. -o3 нормально работало раньше.

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

Я не осознал. Посвяти в дзен, а?

И тут тебя поджидает следующий прикол, что многие разрабы компиляторов полагаются на x+1 > x.
И так далее, множество тщательно разложенных граблей, которые тебя будут бить по лбу.
И с разыменованием NULL и вообще любого левого указателя.
А еще не забыть про выравнивание.

При разыменовывании 0 большая часть систем падает через SIGSEGV. Если откастить 0 к инстансу класса и вызвать у него виртуальный метод — скорее всего получишь SIGILL так как оффсет метода в таблице виртуальных методов уводит адрес обращения от 0.

Вообще — это все экзотика, такие грабли собираются на практике первые 5 лет, затем их знаешь на память. Если бы С и С++ были сложными — их никто бы не учил, и все писали бы на ассемблере.

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

При разыменовывании 0 большая часть систем падает через SIGSEGV

А в кернеле был офигенный баг/сплоит. Из-за того что не падало и из-за того, что гцц проверки убирал

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

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

Сколько коммитов в кернеле? А вляпался один. И опыт не помог.
Это все равно что «не ходи на улицу, там террористы бывают»

Нет, это к сложности языков С и С++. Но другого выбора нет. Посему самые упоротые идут в С и С++ и ловят грабли лбом периодически.

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

Вы в упор не замечаете что «вайти» ещё не этим парится... Какая разница сколько факов вы тут приведёте как опытный разраб — человеку на это ещё рано смотреть имхо

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

Это предупреждение сработает в 0.1% случаев. В 99.9% не надо заморачиваться.

И этот случай окажется завтра. А послезавтра другой — всё зависит только от твоего везения.
Да в среднем не часто на такие приколы нарываешься, но каждые такие грабли — это долгий вынос мозга.
Как я помню когда-то продолбался c MS приколом с long double.

Боюсь, что в джаве куда больше граблей с совместимостью версий библиотек (типа DLL hell), во фронтенде — с браузерами, в бекенде — с базами данных и сетью. С и С++ как раз самые предсказуемые.

Я сталкивался. По сути разницы в аде либ ни для какого языка нет.

Дык вы ж и о хорошем предупредите :) Вот у меня знакомый плюсовик на 7к в Киеве живёт — неплохо — да?

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

Я не о спорах. Я о всесторонней подаче информации. Я не думаю, что ТС интересовался лично вашими предпочтениями или моими. Ему интереснее всесторонняя подача. Что знал о плюсах в Киеве — написал. Пусть сам решает, нравится или нет.

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

Здраво, вопросов нет. Помните тот анекдот про медведя, который «Главное не боятся!» :)

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

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

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

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

А как же всем нравится кастовать с С стиле

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

Так говоришь будто что-то плохое)

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

Зато какие классные истории! Вот, например, когда под дебаггером креш через SIGSEGV, при этом функции на стеке видно, а локальные переменные в половине функций на стеке посмотреть нельзя — дебаггер говорит, что память недоступна.

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

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

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

Я тоже мемсетил, потом 2 часа сам мучался, позвал начальника. Тот глянул, говорит «мемсет»?. Потерял пол-дня, запомнил надолго. И что, пол-дня это такая проблема? Вот последние грабли мы пол-года отлавливали. И ничего.

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

Signed integer overflow — это UB

.

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

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

А еще веселее с разными старшими и младшими байтами в разных процах. Помню от железяки по сом порту должны приходить флоаты, причем не пакетами, а просто подряд. Читаем, херня какая-то. Хорошо я вспомнил про endian, развернул, правда пока вспомнил ручками битики в число перевел пару раз. О, ура, числа похожие на правду пошли. Дока, понятно отсутсвовала, как оно, блин, данные шлет. Точнее было написано, что 4 байтовый флоат. Эта хрень выдавала силу землетрясения. Такая болванка в пару мм на тонкой проволочке и лазеры на нее светят. Если колебания больше чего-то робот должен был срочно прекратить все операции и закрыть корзину с пластинами и выключиться.

Я тоже, пока не почитал в инете. Глаза мои на лоб от такой баго-фичи залезли.

➜ /tmp g++ main.cpp -O2 main.cpp: In function ‘int main()’: main.cpp:5:38: warning: iteration 174 invokes undefined behavior [-Waggressive-loop-optimizations] std::cout << i << " " << i * 12345678 << std::endl; ^~~~~~~~ main.cpp:4:23: note: within this loop for (int i = 0; i < 300; i++) gcc version 6.3.0 20170406 (Ubuntu 6.3.0-12ubuntu2)
В мене немає безкінечного циклу. dumpz.org/2702002

gcc version 6.3.0 20170406

Ассемблерный выхлоп покажите

Вибачте.
Є безкінечний цикл. Я думав що коли g++ кидає варнінг, то він не генерує бінарник :D

С какой радости? Только в случае ошибок. Но там есть какой-то ключик варнинги ошибками считать.
А теперь возьми любой проект средних размеров с гитхаба и посмотри сколько там варнингов. Про проприетарный код и не говорю — там вообще мрак обычно.
А еще куча варнингов просто мусор. И прагмами их блокируют.

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

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

С такими большими массивами надо быть осторожным. На мелких не играет роли.

Если у тебя 16 бит, то массив и не такой уж большой будет. С 32 побольше с 64 еще больше. Но тут уже всплывают размеры int в конкретном случае.
А некоторые еще в либах свои типы integer вводят со своим их объявлением.
Это еще без плавающих. Там такое же веселье — кучи ключиков компилятора и флагов FPU.
В общем С и С++ это только для определенной укуренной категории людей.

Тут же выше ссылка на объяснение на SO.

Там ничего не понятно

Signed integer overflow — это UB

Убивал бы стандартизаторов и писателей компиляторов за это.

Это можно исправить большим кол-во ворнингов. Также еще нужно выучить разницу между size_t и int и ptrdiff_t

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

Signed integer overflow — это UB

Стандарт расчитан на максимальную скорость на 100500 разных экзотических платформ. Ограничения могут покоцать скорость.

Ну я считаю, что если оптимизация в данном случае опасна, то не надо ее делать. Всё одно от оптимизатора ты получишь в лучшем случае 10% выйгрыша, а при изменении алгоритма и 500% и 1000% можешь получить.
Нахрена мне его оптимизация циклов при умножении матриц, если я могу написать (или заюзать) блочный многопоточный алгоритм и получу большой выйгрыш. Если такой умный оптимизатор, то просто выдай ворнинг, что этот цикл имеет смысл векторизовать.

Да, больше думать придется програмеру, но, имхо, это лучше, когда компилятор фигню соберет.

В 99.9% компилер работает. 999 счастливых прогеров, выпустивших релиз в срок, оправдывают одного не выпустившего в срок.

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

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

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

Вот когда осознаешь, что здесь бесконечный цикл может быть, тогда тебе в с++.

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

Как можно оптимизировать «undefined behavior», то есть когда на этапе компиляции неизвестно что будет происходить?

Второй вопрос — а сху яли здесь неизвестное поведение? Тоже мне, святой грааль, автор компилятора не знает что дргуой автор написал компилятору для целочисленного переполнения? Процессор сцуко знает что делать при переполнении, это чучело — не знает, зато лезет оптимизировать.

«Реанімаційний пакет реформ» для Самипомогите часом не он писал? Там тоже по ходу бесконечный цикл.

Ну так вот же по Слову Божьему Стандарту

Signed integer overflow — это UB

А уголовное дело... Читал Соглашение? Там есть «AS IS». Так что утрись.
Но я не против автора сей оптимизации втихаря просто прибить в темном переулке.

Но может существует какой проц, что не устанавливает флаг при переполнении для signed integer? А не знаю всех вариантов процессоров в мире. Тут ембедеры тусуются, могут подсказать.
Так что твой тестик для сложения интов нынче UB. Юзайте граждане ассемблер, велком в 50-е прошлого века. А С++ нынче становиться изуродованной Java.
И может зря я гоню на С, там может быть всё нормально, а не UB. Но блин матричную арифметику на С делать — это полный пипец. На С++ осилили только после 30 лет юзания С++. И то только две приличных либы eigen да armadillo.

Муки вибору мене шматували два роки тому. Було тоді майже 29 років. Пробував WEB. JS ніасіліл і CSS моя головна біль. Нема чуйки прекрасного
ІТ-мудреці кажуть Python досить легкий для вайті-в-айті. На Курсері знайшов розрекламований курс Мічіганського Універу. Через кілька уроків наткнувся на помилку, яка ввела в ступор. Роблю як написано, а не працює. Звісно досвіду тоді зеро і я забив. Вже була думка, що не холопська то справа код девелопувати.
Але через кілька днів я зібрався з думками і вирішив дати бій своїй ліні, виникаючим помилкам і таки змусити консоль видати мій довгоочікуваний «Hello World».
Я поняття не мав, що хочу розробляти в майбутньому. Хотілось щось універсальне, ібо ЯП — цель, а нє срєдство.
Маючи на руках Андроїд, вирішив спробувати всюдисущу Java і спробувати щось склепати для телефону.
З того часу на мене посипалися Java, Android SDK, XML, JSON, Servlets, Maven, Gradle, Git, GitHub, over 9000 different libraries, etc.
Скажу точно, що не пошкодував. Тепер є бачення, чим я хочу займатися далі. А головне, тільки строго типізована Java дозволила повкладати в голові більш-менш як користуватися тим всім добром. JS в цьому випадку адове зло. Саме Java допомогла трохи вкурити той ЖабаСкрипт.
То особисто мій шлях вайті-в-айті.

Мій тобі рецепт: придумай свій pet-project, вибери для нього стек технологій і починай реалізовувати. Гарантую страшний говнокод, але це дозволить тобі розчехлити ЯП, гуглінг, варіанти розв’язання проблем, яких знань/навичок не вистачає і т.д.

Успіхів!

В далёком будущем — можно переключиться на любой язык, была бы задача интересной.
В ближайшей перспективе — надо исходить из того что интересно и за что платят.
JavaScript — веб и платят.
Java — энтерпрайз и платят.
C# - энтерпрайз и юнити и платят.
С++ — только для упоротых (без обид, 10 лет опыта, сам такой был)

Ну и математику — нет причин не почитывать. В 20+ лет школьную программу можно пройти за пару дней/недель и убедиться что там была ерунда, на самом деле. А потом взять ВУЗовский учебник и изгонять из себя гуманитария :)

Жаль уже редактировать нельзя.
...
Java — энтерпрайз и андроид и платят.
...

Если тяжело выбрать ЯП, возьми самый популярный.

Сейчас такое время, что знать одного языка недостаточно, имхо. Иначе не поспеешь за поездом.
Более того, опытному программисту неважно, на каком языке писать: стоит ему лишь почитать немного про синтаксис, как можно начинать с ним работать.
Я это к тому, что неважно, какой ты выберешь язык. Он все равно не будет твоим единственным, если ты продолжишь развиваться как программист.

Задай себе вопрос по-другому: что я хочу, для начала, сделать? Исходя из этого, выбирай язык.
Хочешь веб приложение? Попробуй начать с JS.
Что-то из софта под Windows? Попробуй C# (или Qt, но там C++, зато не только Windows)
Под андроид? Бери Java или Kotlin.
Под iOS? Swift (или Objective-C, если нравится синтаксис)
С игр не начинай, имхо. Писать грамотно игры — это значит разбираться в лоу-левел вещах, а-ля GL или D3D, понимать работу видеокарты и как вообще устроен графический пайплайн. На изучение этого ты потратишь 5+ лет. Со своими знаниями ты сможешь писать только скрипты в существующих движках, а это будет только отуплять тебя как программиста.

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

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

Ну на С++ нельзя вообще не говнокодить.
Нет и не может быть в мире человека, что не наговнокодит на С++.
И самое поганое, что без него тоже никак.
Т.е. или говнокодишь на С++ или некому будет писать матлибы и подобное.
Все языки верхнего уровня все одно юзают говнокод на С++. А там может быть всё, что угодно.

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

Хотя тебе прямой пусть в автотестеры.

строго говоря, я уже в нем, QA, но пресытился

Эт ж как Вы, батенька, умудрились пересытиться QA, не зная программирования ( читаем: тестируя что-то , не понимая как оно работает)?

А вообщем то спасибо, если бы не Вы, инженеры по качеству не так высоко ценились бы )

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

Вообще-то, если знаешь, как оно работает, то нормально не потестишь. Для этого тестировщики и есть. И если знаешь, как оно работает, то сам можешь такое писать, и зарабатываешь в разы больше.

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

Агонь)

Для этого тестировщики и есть

Прекрасный ТехЛид )

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

Серьезно? )

А у вас программисты за собой сами тестят) В ночное время, чтобы успевать фичи пилить)

У нас хорошие разработчики, они все успевают во время рабочего дня)

На повестке JS и С#. Оба популярны и востребованы, под мои цели подходят

Были бы конкретные цели — не было бы этих потуг...

Пошла Машенька по грибы, да по ягоды. Вернулась ни с чем. Потому что надо ставить перед собой конкретные цели ))

Ну с грибами/ягодками там не столько цели важны, сколько соотв. скилл. Но в данном-то случае... Ну напиши конкретно: хочу больше бабла. Или там «хочу чтобы попроще и побыстрее». Все равно заклюют, но глядишь хотя-бы пара советов по делу и проскочит. А вот это вот сношание мозга в стиле «хочу туда, не знаю куда»... Да и вообще, в 25 лет переживать, как бы чего лишнего случайно не выучить — это какой-то кромешный писец, ябсказал.

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

C# или Джава — нормально, как для 1-го языка.
«плюсы» могут быть сложноваты.
За остальную интернет-хипстерщину ничего не получишь, т.к. будешь конкурировать с индусами за еду.

Иди гуляй, сказочник Мы вам позвоним.

Выбирай C++, лучше всего последний стандарт (C++17) и не слушай деграднутых

А куди потім йти з тим C++17 людині без технічної освіти?

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

Он даже верит, что мы поняли что такое ЯП по заголовку. Но мы-то знаем

Может ему сразу разбежаться быстро на крыше и сигануть с нее. Крышу желательно повыше выбрать.
Вот сколько багов в этом коде:

#include <iostream>
int main()
{
    for (int i = 0; i < 300; i++)
        std::cout << i << " " << i * 12345678 << std::endl;
}

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

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