Вопрос, которй меня волнует уже года 3, а внятного ответа еще не находил или хотя бы аргументов )
Итак С++ — мощная низкоуровневая пушка с кучей возможностей, на этом звере написано почти все крутое и самое сложное )
Код на С++ быстрее и эффективнее остальных, "С++ дает программисту свободу выбора, даже если это даст ему возможность выбирать неправильно."(Вики)
В общем требует четкого понимания что ты делаешь
к примеру:
ты должен знать почему второй вариант быстрее первого
1)void printArray(vector<int>)
2)void printArray(const vector<int>&)
ты должен знать что быстрее for(...;++iterator или iterator ++)
ты должен понимать почему в цикле нельзя определять переменные, а должен их выносить на уровень выше
и еще кучи всяких особенностей
+ контроль использования памяти
в твоих руках мощный механизм, которым нужно управлять только с умом
.. и в связи с этим обучение С++ программиста стоит дороже и есть сложнее, тогда
почему же на фоне .NET/Java у С++ ниже зп ??? ну где справедливость )
Маленькая статистика — но все же она везде практические в таком порядке,
с++ девелоперы стоят на одной линии с php кодерами
F>Маленькая статистика — но все же она везде практические в таком порядке, F>с++ девелоперы стоят на одной линии с php кодерами
Важна не ценность С++ девелопера самого по себе, а то, за сколько продается софт, который он производит. Если на Java создаются решения, которые продаются за большие деньги, то и стоимость программистов будет повыше.
Здравствуйте, fromegg, Вы писали:
F>Вопрос, которй меня волнует уже года 3, а внятного ответа еще не находил или хотя бы аргументов ) F>Итак С++ — мощная низкоуровневая пушка с кучей возможностей, на этом звере написано почти все крутое и самое сложное ) F>Код на С++ быстрее и эффективнее остальных, "С++ дает программисту свободу выбора, даже если это даст ему возможность выбирать неправильно."(Вики)
Всё это абсолютно нерелевантно стоимости работы программиста. Работодателю не важно, насколько крут инструмент, его интересует результат.
Каков процент проектов (или даже — какова их доля рынка), где мощь и крутотень С++ необходимы?
F>Маленькая статистика — но все же она везде практические в таком порядке, F>с++ девелоперы стоят на одной линии с php кодерами
"Невидимая рука рынка" (с)
Не претендую на истину, лишь выскажу предположение: многое из того, что раньше писалось на С++ стали писать на других языках =>
спрос на программистов С++ упал, а на программистов на этих "других языка" вырос.
F>ты должен знать почему второй вариант быстрее первого F>1)void printArray(vector<int>) F>2)void printArray(const vector<int>&)
F>ты должен знать что быстрее for(...;++iterator или iterator ++)
Мой фейспалм Вы наткнулись на список заблуждений про С++ ?
....
F>почему же на фоне .NET/Java у С++ ниже зп ??? ну где справедливость )
1. Нет справедливости , это из сказок. Или справедливость есть , но она другая.
Здравствуйте, _Obelisk_, Вы писали:
_O_>Здравствуйте, fromegg, Вы писали:
F>>Маленькая статистика — но все же она везде практические в таком порядке, F>>с++ девелоперы стоят на одной линии с php кодерами
_O_>Важна не ценность С++ девелопера самого по себе, а то, за сколько продается софт, который он производит. Если на Java создаются решения, которые продаются за большие деньги, то и стоимость программистов будет повыше.
в голове только один образ
преподаватель в вузе:
Ребята мы не будем учить с++ и использовать следующие 4 семестра, зачем ломать себе мозг и платят то этим специалистам меньше чем другим,
осваивать будем к примеру питон и за 1 семестр, он прекрасен удобен и всемогущ
Дело вот в чем: крутизна языка С++ нужна в двух-трех процентах проектов.
И в этих проектах С++ только часть, притом не самая важная — рулит знание предметной области.
Другими словами, мощь языка нужна только для по настоящему нетривиальных программ.
Кто всё это освоил, получает от 150 тысяч.
Те — же, кто прочитал две книжки и думает все, обламывается.
Это не Java, где основная сложность в изучении туевой хучи фреймворков.
Здравствуйте, fromegg, Вы писали:
F>ты должен знать почему второй вариант быстрее первого F>1)void printArray(vector<int>) F>2)void printArray(const vector<int>&)
Просто из интереса, сколько раз надо обратиться к каждому элементу массива int, чтобы копирование стало дешевле косвенных обращений? Раз пять.
#include <tchar.h>
#include <windows.h>
#include <iostream>
#include <vector>
template<typename T>
int f(int count, T v)
{
int acc(0);
for (size_t i(0), size(v.size()); i != size; ++i)
for (int j(0); j != count; ++j)
acc ^= v[i];
return acc;
}
template<typename T>
LONGLONG time_f(size_t count)
{
std::vector<int> v(10000);
LARGE_INTEGER start, finish;
::QueryPerformanceCounter(&start);
f<T>(count, v);
::QueryPerformanceCounter(&finish);
return finish.QuadPart - start.QuadPart;
}
int _tmain(int argc, _TCHAR* argv[])
{
for (int i(0); i != 16; ++i)
{
int iterCount(100);
LONGLONG a(0), b(0);
for (int j(0); j != iterCount; ++j)
{
a += time_f<std::vector<int> >(i);
b += time_f<const std::vector<int> &>(i);
}
std::cout << i << ' ' << a/iterCount << ' ' << b/iterCount << '\n';
}
return 0;
}
Здравствуйте, Don Reba, Вы писали:
DR>Здравствуйте, fromegg, Вы писали:
F>>ты должен знать почему второй вариант быстрее первого F>>1)void printArray(vector<int>) F>>2)void printArray(const vector<int>&)
DR>Просто из интереса, сколько раз надо обратиться к каждому элементу массива int, чтобы копирование стало дешевле косвенных обращений? Раз пять.
DR>
DR>
DR>int _tmain(int argc, _TCHAR* argv[])
DR>{
DR> for (int i(0); i != 16; ++i)
DR> {
DR> int iterCount(100);
DR> LONGLONG a(0), b(0);
DR> for (int j(0); j != iterCount; ++j)
DR> {
DR> a += time_f<std::vector<int> >(i);
DR> b += time_f<const std::vector<int> &>(i);
DR> }
DR> std::cout << i << ' ' << a/*/iterCount*/ << ' ' << b/*/iterCount*/ << '\n';
DR> }
DR> return 0;
DR>}
DR>
Что я делаю не так, кроме того что a и b не делю на iterCount?
Здравствуйте, Don Reba, Вы писали:
DR>Здравствуйте, samius, Вы писали:
S>>Что я делаю не так, кроме того что a и b не делю на iterCount?
DR>Видимо, используешь более умный компилятор. Можно попробовать сделать acc глобальным или инициализировать v ненулевыми значениями.
да, с глобальным acc стало лучше
Еще изменил основной цикл в main
Здравствуйте, fromegg, Вы писали:
F>Вопрос, которй меня волнует уже года 3, а внятного ответа еще не находил или хотя бы аргументов ) F>Итак С++ — мощная низкоуровневая пушка с кучей возможностей, на этом звере написано почти все крутое и самое сложное )
это утверждение "россия — родина слонов". далеко не все крутое и сложное пишется на плюсах.
F>Код на С++ быстрее и эффективнее остальных, "С++ дает программисту свободу выбора, F>даже если это даст ему возможность выбирать неправильно."(Вики)
быстрота и эффективность кода нужна далеко не везде. скорость написания кода зачастую намного важнее. а свободу программиста работодатели предпочитают ограничивать.
F>В общем требует четкого понимания что ты делаешь
в общем случае так происходит всегда.
вы не поверите, но четкое понимание необходимо даже для работы с питоном.
например,
a = [-1,0,1];
c = a;
del c[1];
print a
печатает:
-1, 1
а вот:
a = [-1,0,1];
c = a[:];
del c[1];
print a
печатает:
-1, 0, 1
и без учета этой фичи (о которой не в каждом букваре, кстати, написано) можно получить очень неожиданный эффект, угробив чужие данные.
F> ты должен понимать почему в цикле нельзя определять переменные, а должен их выносить на уровень выше F> и еще кучи всяких особенностей
используйте профилировщик или смотрите в сгенерированный компилятором ассемблерный код.
F>в твоих руках мощный механизм, которым нужно управлять только с умом F>.. и в связи с этим обучение С++ программиста стоит дороже и есть сложнее, тогда F>почему же на фоне .NET/Java у С++ ниже зп ??? ну где справедливость )
наверное потому, что пытаются управлять этим сложным инструментом без ума. где расположены переменные программиста не должно парить и в первую очередь следует оптимизировать программу на уровне алгоритмов и структур данных. вообще есть хорошая поговорка -- покажи мне свои структуры данных и я скажу кто ты.
F>Маленькая статистика — но все же она везде практические в таком порядке, F>с++ девелоперы стоят на одной линии с php кодерами
а сколько получают пилоты истребителей? а их обучение обходится _намного_ дороже.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, 0x7be, Вы писали:
0>Здравствуйте, fromegg, Вы писали:
0> Работодателю не важно, насколько крут инструмент, его интересует результат.
если "крутость" инструмента это "лучший результат за меньшее время", то работодателю это очень даже интересно. вот только си++ под это определение попадает с очень большими оговорками.
F>>Маленькая статистика — но все же она везде практические в таком порядке, F>>с++ девелоперы стоят на одной линии с php кодерами 0>"Невидимая рука рынка" (с)
...или статистика неправильная. если брать php, то мы увидим, что карьерный рост и максимальная планка зарплаты очень ограничены. с одной стороны стена, с другой -- пропасть. а вот у си/си++/java программистов в этом плане возможностей намного больше.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, fromegg, Вы писали:
F> Ребята мы не будем учить с++ и использовать следующие 4 семестра, зачем ломать себе мозг F> и платят то этим специалистам меньше чем другим, осваивать будем к примеру питон и F> за 1 семестр, он прекрасен удобен и всемогущ
не надо наезжать на питон. в качестве учебного языка питон очень даже ничего. во всяком случае в питоне общности, а в плюсах -- частности.
и потом, язык ни разу не уперся. самое сложное это алгоритмы, протоколы, стандарты... допустим, мы пишем дефрагментатор. системная составляющая это фигня. а вот задача как собрать мак. фрагментов за мин. перемещений -- это вам не баран чихнул.
или, например, антивирус. его быстродействие определяется не тем, где расположены переменные в цикле, а глубиной курений теории графов, конечных автоматов и прочей алгоритмизацией.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, fromegg, Вы писали:
F>Вопрос, которй меня волнует уже года 3, а внятного ответа еще не находил или хотя бы аргументов )
Фишка не столько в языке, сколько в предметной области.
Java — это практически всегда (по крайней мере если смотреть на валовый продукт) корпоративный софт, всякое банковское ПО и прочий аутсорс. Более или менее однородная и нормально оплачиваемая отрасль.
На плюсах же достаточно большой объем занимают:
1. Геймдев — где по неизвестным науке доширак! доширак! доширак! причинам платят мало при том что народ еще и овертаймит регулярно.
2. Embedded — где, по-видимому, есть определенное количество старичков на помоечку! на помоечку! на помоечку!, которые не успевают апгрейдить себя/место работы/скиллы в быстро изменяющемся мире.
Что такое "учить С++"? Вы что, текст стандарта наизусть заучиваете что ли? Что в С++ есть такого, что требовало бы больше месяца на изучение? Не парадигма ООП, не техники оптимизации, не архитектура ОС и WinAPI, не сторонние библиотеки, а именно сам язык С++.
F>Итак С++ — мощная низкоуровневая пушка с кучей возможностей, на этом звере написано почти все крутое и самое сложное )
Что, по вашему мнению, в С++ низкоуровнего и о какой куче возможностей, которых нет в других языках, идет речь?
F>Код на С++ быстрее и эффективнее остальных
Как вы понимаете "эффективнее" и чем это отличается от "быстрее"?
F>В общем требует четкого понимания что ты делаешь
А какая область человеческой деятельности не требует четкого понимания что ты делаешь? На каком языке можно писать программы в стиле "что-то как-то само собой получилось, не знаю даже как это вышло"?
F>ты должен знать почему второй вариант быстрее первого F>1)void printArray(vector<int>) F>2)void printArray(const vector<int>&)
Копирование занимает время. Это справедливо для любого языка и на первый взгляд не выглядит черной магией "невероятно, но один вариант почему-то быстрее другого, кааак они этого добились??"
F>ты должен знать что быстрее for(...;++iterator или iterator ++)
Вы удивитесь насколько у компилятора есть свое мнение по этому поводу.
F>ты должен понимать почему в цикле нельзя определять переменные, а должен их выносить на уровень выше
Любой современный компилятор сделает это за вас.
F>и еще кучи всяких особенностей
Приведенное выше — это особенности? И, видимо, наиболее сложные в плане изучения?
F>+ контроль использования памяти
Сделал new — сделай delete. Что в этом эзотерического, переводящего С++ в разряд чего-то элитарного?
F>почему же на фоне .NET/Java у С++ ниже зп ??? ну где справедливость )
Потому что, несмотря на кажущуюся простоту этих языков, на них решают более сложные и денежные задачи.
В университетах нормальных стран не учат С++, там учат концепциям программирования. А потом дают домашнее задание "реализовать учебный проект на языке Х" и сам язык изучается как нечто фоновое и чисто утилитарное.
Здравствуйте, мыщъх, Вы писали:
М>Здравствуйте, 0x7be, Вы писали:
0>>Здравствуйте, fromegg, Вы писали:
0>> Работодателю не важно, насколько крут инструмент, его интересует результат. М>если "крутость" инструмента это "лучший результат за меньшее время", то работодателю это очень даже интересно. вот только си++ под это определение попадает с очень большими оговорками.
В том-то и дело, что тут под крутизной понимается нечто иное, чем "лучший результат за меньшее время".
Некогда одна эпическая личность писала "умение героически выстрелить себе в ногу с помощью своего же инструмента, центися разве что у прыщавых сосок, но никак не работадателем".
Вот и все.
Здравствуйте, fromegg, Вы писали:
F>преподаватель в вузе:
F>Ребята мы не будем учить с++ и использовать следующие 4 семестра, зачем ломать себе мозг и платят то этим специалистам меньше чем другим, F>осваивать будем к примеру питон и за 1 семестр, он прекрасен удобен и всемогущ F>
Хреновый преподаватель, который строит курс на изучении конкретного языка. Язык студент освоить и сам может, надо ориентироваться на суть программирования — алгоритмы, структуры данных, методологии и прочее. А на чем их демонстрировать — дело десятое. Python тут вполне себе неплох.