Как технарю из России стать программером в США за 150К

User avatar
Abappy
Уже с Приветом
Posts: 2555
Joined: 26 Sep 2002 15:45
Location: North-East of NA

Re: Как технарю из России стать программером в США за 150К

Post by Abappy »

hogzie wrote: Язык требует больше дисциплины и понимания основ. Поэтому учите основы, ребята...
Да! (Засучивая рукава) Кто-то тут ещё не согласен с тем, что самые эффективные программы можно написать ТОЛЬКО в машинных кодах (ну в крайнем случае на ассемблере, хотя и это уже профанация) ... а ?
User avatar
hogzie
Уже с Приветом
Posts: 1166
Joined: 13 Jul 2010 18:13
Location: Bay Area

Re: Как технарю из России стать программером в США за 150К

Post by hogzie »

crypto5 wrote:Я нигде не писал про "memory manager более продвинутый", я дискутировал на тему одной фичи: реализации отдельных куч для каждого потока, которая судя по графикам tcmalloc и jemalloc дает хорошие бенефиты в многопоточных нагруженных приложениях, поэтому все тирады по поводу андроида, умных указателей, сборщика мусора и т.д. тут не причем.
Все при том. Суть одна. По определению сделать что-то более эффективным на уровне выше невозможно. В лучшем (и частном) случае можно сделать одинаково эффективно. Но не более того. Ходить по кругу не буду.
User avatar
hogzie
Уже с Приветом
Posts: 1166
Joined: 13 Jul 2010 18:13
Location: Bay Area

Re: Как технарю из России стать программером в США за 150К

Post by hogzie »

Abappy wrote:
hogzie wrote: Язык требует больше дисциплины и понимания основ. Поэтому учите основы, ребята...
Да! (Засучивая рукава) Кто-то тут ещё не согласен с тем, что самые эффективные программы можно написать ТОЛЬКО в машинных кодах (ну в крайнем случае на ассемблере, хотя и это уже профанация) ... а ?
Никто не против. И основы в виде архикектуры CPU и GPU (желательно) тоже никто не отменял. Если уж взялся за ремесло, копай до конца. За ассемблер можно в лоб получить. Это святое. :D
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Как технарю из России стать программером в США за 150К

Post by crypto5 »

hogzie wrote:
crypto5 wrote:Я нигде не писал про "memory manager более продвинутый", я дискутировал на тему одной фичи: реализации отдельных куч для каждого потока, которая судя по графикам tcmalloc и jemalloc дает хорошие бенефиты в многопоточных нагруженных приложениях, поэтому все тирады по поводу андроида, умных указателей, сборщика мусора и т.д. тут не причем.
Все при том. Суть одна. По определению сделать что-то более эффективным на уровне выше невозможно. В лучшем (и частном) случае можно сделать одинаково эффективно. Но не более того. Ходить по кругу не буду.
Какой уровень выше? Или Вы считаете что менеджер памяти в JRE имплементирован на джава?
In vino Veritas!
User avatar
Abappy
Уже с Приветом
Posts: 2555
Joined: 26 Sep 2002 15:45
Location: North-East of NA

Re: Как технарю из России стать программером в США за 150К

Post by Abappy »

hogzie wrote: По определению сделать что-то более эффективным на уровне выше невозможно. В лучшем (и частном) случае можно сделать одинаково эффективно. Но не более того. Ходить по кругу не буду.
Со всем уважением - это именно в частном случае - "абсолютно эффективной" реализации сделать на уровне выше ЛУЧШЕ чем на уровне ниже - невозможно. А в нашем несовершенном мире заполненном людьми с разной степенью искривления конечностей, используемых ими для написания кода - на ура (готов спорить на любые деньги, что самый совершенный на сегодняшний момент мемори менеджер ни разу не интегрирован в чипсет :) и даже не написан на ассемблере )
User avatar
RobinF
Уже с Приветом
Posts: 3975
Joined: 04 Jun 2002 17:35

Re: Как технарю из России стать программером в США за 150К

Post by RobinF »

nightmare2 wrote:
ddv wrote: В любом случае C# это язык для другой ниши, а не язык следующего поколения который должен заменить C++.
А кто занимал эту нишу раньше?
Что заменили Java и .net?
Cobol и Visual Basic соответсвенно. В комплекте с SQL еще и пачку т.н. "4GL" от аксесса до oracle forms (правда - плохо заменили, трудоемкость - особенно на жабе - повысилась).
User avatar
RobinF
Уже с Приветом
Posts: 3975
Joined: 04 Jun 2002 17:35

Re: Как технарю из России стать программером в США за 150К

Post by RobinF »

Zombie416 wrote:
ddv wrote:Ничего он не заменяет...не надо сравнивать языки которые компилируются в байт код и языки компилируемые в NATIVE код. И уровень производительности у них совсем разные...
Вообще-то CLR байт-код компилируется в нативный код перед исполнением. И при аналогичном качестве оптимизатора (сравнивая MS VC++ и MS VC++/CLR), скорость исполнения практически идентична, как ни удивительно (правда так было не всегда).
Аналогичного отимизатора у Java/C# просто не может быть. Сборка Release билда нормального проекта на C++ идет часами на многокоровой машине со SCSI-дисками - Link Time Code Generation и Profile Guided Optimization (когда сначала собираются юнит тесты критических к скорости участков с инструментированием, потом гонятся, потом на основании прогона сборка идет опять) вещи не быстрые. Если запуск Java или .NET программы будет занимать столько времени... хотя и теперь они пускаются медленнее чем ДОС-программы на PC XT с дискеты. :D

Но проблема даже не в этом. Совсем не в этом.

Code: Select all

class Edge {
  short x1, y1, x2, y2;
public:
 Edge():x1(-1),y1(-1),x2(-1),y2(-1){}
  virtual short getLength() const ...
//...еще виртуальные методы
};
vector<Edge> edges(1000000); //[1]
На С++ в [1] выполняется ОДНА аллокация. Оверхед по памяти не более 16 байт.

Тест №1
Перепишите это на Java или C# с использованием ArrayList (можно generic, один фиг это just syntax sugar). Посчитайте количество аллокаций (больше миллиона, не так ли). Посчитайте оверхед по памяти. Прогоните инициализацию этого массива 1000 раз и померяете время. Код и цифры в студию.

Тест №2
Замените определение Edge на

Code: Select all

class Point {
  short x, y;
public:
 Point():x(-1),y(-1){}
 friend class Edge;
};
class Edge {
  Point a, b;
  virtual short getLength() const ...
//...еще виртуальные методы
};
Посчитайте те же метрики опять (3 миллиона аллокаций с копейками и тп).
Постройте тренд увеличения оверхеда по мере увеличения сложности объектно-ориентированной структуры.

Тест №3
Покажите где в C++ понадобилось ручное управление памятью, указатели, появилась хоть одна лишняя строчка кода? Теперь посмотрите на Java/C#.
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Как технарю из России стать программером в США за 150К

Post by crypto5 »

RobinF wrote:
Zombie416 wrote:
ddv wrote:Ничего он не заменяет...не надо сравнивать языки которые компилируются в байт код и языки компилируемые в NATIVE код. И уровень производительности у них совсем разные...
Вообще-то CLR байт-код компилируется в нативный код перед исполнением. И при аналогичном качестве оптимизатора (сравнивая MS VC++ и MS VC++/CLR), скорость исполнения практически идентична, как ни удивительно (правда так было не всегда).
Аналогичного отимизатора у Java/C# просто не может быть. Сборка Release билда нормального проекта на C++ идет часами на многокоровой машине со SCSI-дисками - Link Time Code Generation и Profile Guided Optimization (когда сначала собираются юнит тесты критических к скорости участков с инструментированием, потом гонятся, потом на основании прогона сборка идет опять) вещи не быстрые. Если запуск Java или .NET программы будет занимать столько времени... хотя и теперь они пускаются медленнее чем ДОС-программы на PC XT с дискеты. :D

Но проблема даже не в этом. Совсем не в этом.

Code: Select all

class Edge {
  short x1, y1, x2, y2;
public:
 Edge():x1(-1),y1(-1),x2(-1),y2(-1){}
  virtual short getLength() const ...
//...еще виртуальные методы
};
vector<Edge> edges(1000000); //[1]
На С++ в [1] выполняется ОДНА аллокация. Оверхед по памяти не более 16 байт.

Тест №1
Перепишите это на Java или C# с использованием ArrayList (можно generic, один фиг это just syntax sugar). Посчитайте количество аллокаций (больше миллиона, не так ли). Посчитайте оверхед по памяти. Прогоните инициализацию этого массива 1000 раз и померяете время. Код и цифры в студию.

Тест №2
Замените определение Edge на

Code: Select all

class Point {
  short x, y;
public:
 Point():x(-1),y(-1){}
 friend class Edge;
};
class Edge {
  Point a, b;
  virtual short getLength() const ...
//...еще виртуальные методы
};
Посчитайте те же метрики опять (3 миллиона аллокаций с копейками и тп).
Постройте тренд увеличения оверхеда по мере увеличения сложности объектно-ориентированной структуры.

Тест №3
Покажите где в C++ понадобилось ручное управление памятью, указатели, появилась хоть одна лишняя строчка кода? Теперь посмотрите на Java/C#.
Только это все не отменяет того факта что очень далеко не всем нужно создавать 1 млрд обьектов в секунду, и что у С++ девелоперов нету hibernate, spring и struts.
In vino Veritas!
User avatar
RobinF
Уже с Приветом
Posts: 3975
Joined: 04 Jun 2002 17:35

Re: Как технарю из России стать программером в США за 150К

Post by RobinF »

nightmare2 wrote: Зато C# могут выучить все, а C++ только особо одаренные.
8O
:o

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

Понанимают таких - после чего кода становится в 10 раз больше чем нужно по цене 5x (потому что такие "программисты" делают кучу copy-and-paste и применяют кучу ненужных паттернов), с в 10 раз большим количеством багов и в 10 раз более дорогим сопровождением, не говоря уж про скорость и память...

С++ конечно так себе но... If anything, язык его заменяющий должен быть в 10 раз сложнее в освоении, чтоб тест на знание языка сразу отсеивал "программистов". С++ отсеивает только 80% таковых. ;)
User avatar
Abappy
Уже с Приветом
Posts: 2555
Joined: 26 Sep 2002 15:45
Location: North-East of NA

Re: Как технарю из России стать программером в США за 150К

Post by Abappy »

RobinF wrote: С++ конечно так себе но... If anything, язык его заменяющий должен быть в 10 раз сложнее в освоении, чтоб тест на знание языка сразу отсеивал "программистов". С++ отсеивает только 80% таковых. ;)
C++0x решит наши проблемы :)
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Как технарю из России стать программером в США за 150К

Post by crypto5 »

RobinF wrote:
nightmare2 wrote: Зато C# могут выучить все, а C++ только особо одаренные.

С++ конечно так себе но... If anything, язык его заменяющий должен быть в 10 раз сложнее в освоении, чтоб тест на знание языка сразу отсеивал "программистов". С++ отсеивает только 80% таковых. ;)
Вопрос только отсеиваются ли.. :oops:
In vino Veritas!
User avatar
Abappy
Уже с Приветом
Posts: 2555
Joined: 26 Sep 2002 15:45
Location: North-East of NA

Re: Как технарю из России стать программером в США за 150К

Post by Abappy »

crypto5 wrote:
RobinF wrote:
nightmare2 wrote: Зато C# могут выучить все, а C++ только особо одаренные.

С++ конечно так себе но... If anything, язык его заменяющий должен быть в 10 раз сложнее в освоении, чтоб тест на знание языка сразу отсеивал "программистов". С++ отсеивает только 80% таковых. ;)
Вопрос только отсеиваются ли.. :oops:
crypto5 - не сомневайтесь - отсеиваются ... 80% а то и больше , но остаётся вполне достаточно. :lol:
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Как технарю из России стать программером в США за 150К

Post by crypto5 »

Abappy wrote:
crypto5 wrote:
RobinF wrote:
nightmare2 wrote: Зато C# могут выучить все, а C++ только особо одаренные.

С++ конечно так себе но... If anything, язык его заменяющий должен быть в 10 раз сложнее в освоении, чтоб тест на знание языка сразу отсеивал "программистов". С++ отсеивает только 80% таковых. ;)
Вопрос только отсеиваются ли.. :oops:
crypto5 - не сомневайтесь - отсеиваются ... 80% а то и больше , но остаётся вполне достаточно. :lol:
Тут вот еще кстати какая проблема появлятеся, предположим есть два часа пособеседовать кандидата, в случае джавы за это время можно и про всякие многопоточности поговорить, и про базы данных, и про паттерны, и про веб дев, т.е. на выходе получается вполне готовый к улучшению мира человек, а в С++ чувствуется только дойдем до того почему вызов конструктора из конструктора плохая идея(согласно hogzie джуниорский вопрос).
In vino Veritas!
User avatar
RobinF
Уже с Приветом
Posts: 3975
Joined: 04 Jun 2002 17:35

Re: Как технарю из России стать программером в США за 150К

Post by RobinF »

zzhou wrote: NASA марсоходом на Яве управляет. Ничего они в технологиях не понимают!
http://discuss.fogcreek.com/joelonsoftw ... Replies=29
The Mars Rover software is not written in Java as some dumbass mentioned - that is a practice nav-aid used on the earth end to test and plan Rover travels - they use VxWorks from Wind River for the actual Rover firmware. In case you missed it, Wind River was all over the place with press releases mentioning the fact when the Rover woke up on schedule and started moving around as directed using their stuff.
User avatar
RobinF
Уже с Приветом
Posts: 3975
Joined: 04 Jun 2002 17:35

Re: Как технарю из России стать программером в США за 150К

Post by RobinF »

zzhou wrote: На С++ всё можно реализовать. Но только в Яве оно уже есть. Уже работает. Во всех приложениях.

Т.е. написать библиотеку умных указателей на С++ можно. Я уверен что многие сишники за неё радостно возьмутся - в рамках разработки рабочего места кассира. И угробят на доводку этого менеджера памяти времени больше чем на само рабочее место кассира.
Зачем? Не говоря уж про "умные указатели" которые есть во всех библиотеках и последнем C++ (да и имплементируются в несколько строк), в QT, например, есть и сборщик мусора - но не обязательный, а только для тех случаев когда детерминированное разрушение объектов не нужно (а оно нужно часто, если хотеть чтоб все хорошо и быстро работало).

Return to “Работа и Карьера в IT”