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

ddv
Уже с Приветом
Posts: 481
Joined: 04 Jul 2005 17:07
Location: Москва->Staten Island NY

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

Post by ddv »

zzhou wrote:Но вот как надо извращатся в С чтобы XML разобрать или до БД добраться - это я видел.
При наличии соответствующих библиотек никаких извращений. А без них и на c# будет не сладко.

В любом случае C# это язык для другой ниши, а не язык следующего поколения который должен заменить C++.
nightmare2
Уже с Приветом
Posts: 7187
Joined: 31 Jan 2005 15:06
Location: GA

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

Post by nightmare2 »

ddv wrote:
zzhou wrote:Но вот как надо извращатся в С чтобы XML разобрать или до БД добраться - это я видел.
При наличии соответствующих библиотек никаких извращений. А без них и на c# будет не сладко.

В любом случае C# это язык для другой ниши, а не язык следующего поколения который должен заменить C++.
А кто занимал эту нишу раньше?
Что заменили Java и .net?
Ниша C/C++ будет сокращаться, но конечно останется что-то.
Когда-то говорили что настоящие пацаны пишут только на ассемблере. :-)
Vaiyo A-O, A Home Va Ya Ray, Vaiyo A-Rah, Jerhume Brunnen G!
nightmare2
Уже с Приветом
Posts: 7187
Joined: 31 Jan 2005 15:06
Location: GA

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

Post by nightmare2 »

Brazen wrote:
ddv wrote:
nightmare2 wrote: char *flump ( ) [3] /* функция, возвращающая указатель на 3-элементный массив типа char */
char *flimp[3] ( ) /* 3-элементный массив указателей на функцию, которая возвращает тип char */
У меня лично мозги тормозят когда я такое читаю в коде.
Полагаю, что я не в одиночестве.
Указатель на массив типа char - это char* . Поэтому char *flump ( ) [3] - это функция, возвращающая 3-элементный массив указателей на char. А в языке c/c++ не предусмотренны функции возвращающие массив.
char *flimp[3] ( ) - тоже неверное написание. Нужно писать char (*flimp[3]) ( ).
Тае что если мозги тормозят на этом - значит это не ваше.
Нет такого типа char*. Насчет кипения мозгов: Бочков и Субботин все очень просто и понятно изложили (я вообще предпочитаю их компактную книжку Кернигану с Ритчи):
При интерпретации составных описателей сначала рассматриваются квадратные скобки и круглые скобки, расположенные справа от идентификатора. Квадратные и круглые скобки имеют одинаковый приоритет. Они интерпретируются слева направо. После них справа налево рассматриваются звездочки, расположенные слева от идентификатора. Спецификация типа рассматривается на последнем шаге после того, как описатель уже полностью проинтерпретирован. Для изменения действующего по умолчанию порядка интерпретации описателя можно использовать внутри него круглые скобки.
Смотрим примеры:

char *flump()[3] -- flump - это
char *flump()[3] -- функция
char *flump()[3] -- возвращающая трехэлементный массив
char *flump()[3] -- указателей
char *flump()[3] -- на char

Насчет char *flimp[3] ( ) Бочков и Субботин отметили:
С одним идентификатором можно образовать множество различных комбинаций признаков типа массив, указатель или функция. Некоторые комбинации недопустимы. Например, массив не может содержать в качестве элементов функции, а функция не может возвращать массив или функцию.
Действительно, чтобы был массив указателей на функцию, нужно поставить скобки, как сказал ddv:

flimp -- flimp - это
flimp[3] -- трехэлементный массив
*flimp[3] -- указателей
(*flimp[3])() -- на функцию, здесь меняем порядок интерпретации с помощью скобок
char (*flimp[3])() -- возвращающую char

Читайте это: http://progbook.ru/c/180-bochkov_yazyk_ ... ya_si.html Все предложения по делу. Ни одного выкинуть нельзя. Очень хорошее, концентрированное, при этом грамотное (технически и с точки зрения русского языка) изложение.
Спасибо за книгу, обязательно почитаю.
Vaiyo A-O, A Home Va Ya Ray, Vaiyo A-Rah, Jerhume Brunnen G!
nightmare2
Уже с Приветом
Posts: 7187
Joined: 31 Jan 2005 15:06
Location: GA

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

Post by nightmare2 »

Zombie416 wrote:
ddv wrote:Можно...но через одно место. А манипуляция данными нужна не только в драйверах.
Конечно если писать только ASP.NET или GUI приложения, то этого и не нужно.
Через какое место?

Убожество C# в основном в упрощенном наследования, и как следствие убогих темплейтах. С манипуляцией данными там все нормально, примерно как в C. Включая структуры известно как расположенные в памяти и т.д.
Кстати новый язык "D" тоже не имеет множественного наследования.
http://en.wikipedia.org/wiki/D_(programming_language)
Как Вы думаете почему?
Vaiyo A-O, A Home Va Ya Ray, Vaiyo A-Rah, Jerhume Brunnen G!
ddv
Уже с Приветом
Posts: 481
Joined: 04 Jul 2005 17:07
Location: Москва->Staten Island NY

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

Post by ddv »

nightmare2 wrote: А кто занимал эту нишу раньше?
Что заменили Java и .net?
Ниша C/C++ будет сокращаться, но конечно останется что-то.
Когда-то говорили что настоящие пацаны пишут только на ассемблере. :-)
В плане веб приложений вы и сами знаете чью нишу они занимают, и на C++ веб страницы мало кто писал. А ниша GUI принадлежала RAD средствам разработки http://en.wikipedia.org/wiki/List_of_ra ... ment_tools
Zombie416
Уже с Приветом
Posts: 8881
Joined: 17 Jun 2003 04:41

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

Post by Zombie416 »

nightmare2 wrote:Кстати новый язык "D" тоже не имеет множественного наследования.
http://en.wikipedia.org/wiki/D_(programming_language)
Как Вы думаете почему?
Ну таких новых языков навалом, 99% заканчивают жизнь в корзине. Почему? Такой дизайн.

Одиночное наследование проще в понимании и реализации. Правда, совсем уйти от него не получилось, и часть проблем решается интерфейсами. Но при этом все равно теряется существенная часть функциональности и выразительности, и то что в C++ аккуратно получается с темплейтами, на C/C#/Java/... приходится решать средствами Copy/Paste или препроцессором. Ну и, в сравнении с C++, C# - овское решение с отложенными деструкторами, которое склонировали с Java, чревато протеканием ресурсов, сюрпризами с потоками, кучей ненужных try/finally и прикручиванием постфактум ржавыми болтами всяких "critical finalizers".

А так, практически все что можно написать на C, можно написать на C#. И многое из того что пишется на C++, тоже можно написать на C#. Не "в принципе", а эквивалентный код практически построчно. И с близкой производительностью причем. Драйвера писать вполне можно (и пишут).
Zombie416
Уже с Приветом
Posts: 8881
Joined: 17 Jun 2003 04:41

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

Post by Zombie416 »

ddv wrote:В любом случае C# это язык для другой ниши, а не язык следующего поколения который должен заменить C++.
Это язык для той же ниши, и в огромном количестве случаев он заменяет C++ очень успешно. Естественно, не в 100%. Как и ассемблер хоронят уже десятилетиями.

Чем проект больше, компонентов, людей/кода в нем больше, тем преимущества С#/Java над C++, C++ над C, C над ассемблером, становятся очевиднее.
ddv
Уже с Приветом
Posts: 481
Joined: 04 Jul 2005 17:07
Location: Москва->Staten Island NY

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

Post by ddv »

Zombie416 wrote:Это язык для той же ниши, и в огромном количестве случаев он заменяет C++ очень успешно. Естественно, не в 100%. Как и ассемблер хоронят уже десятилетиями.
Чем проект больше, компонентов, людей/кода в нем больше, тем преимущества С#/Java над C++, C++ над C, C над ассемблером, становятся очевиднее.
Ничего он не заменяет...не надо сравнивать языки которые компилируются в байт код и языки компилируемые в NATIVE код. И уровень производительности у них совсем разные...И не надо меня убеждать что 15 мегабайт оперативной памяти для Hello World приложения на C# это нормально. Мне уже хватает убогих ATI утилит которые с переходом на .NET невозможно использовать из за огромного объема используемой памяти и ресурсов. А уж про скорость я вообще молчу...когда на каждом шагу вы создаете десятки объектов, проверяете сотню типов на соответствие и т.п.
А GUI приложения на Java под Windows это вообще только для энтизиастов типа ORACLE....с каждым приложением приходится ставить отдельную Java машину, потому что их десятки не совместимых между собой разновидностей.
ddv
Уже с Приветом
Posts: 481
Joined: 04 Jul 2005 17:07
Location: Москва->Staten Island NY

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

Post by ddv »

Zombie416 wrote:А так, практически все что можно написать на C, можно написать на C#. И многое из того что пишется на C++, тоже можно написать на C#. Не "в принципе", а эквивалентный код практически построчно. И с близкой производительностью причем. Драйвера писать вполне можно (и пишут).
Вы вообще C++ то знаете??? Какое можно??? Там нет ни темплейтов, ни множественного наследования, ни указателей...Я могу вам скинуть пример на C++ который вы фиг переведете на C# без полного его переписывания.
Ну и приведите мне пример ДРАЙВЕРА который написан на C#.
Zombie416
Уже с Приветом
Posts: 8881
Joined: 17 Jun 2003 04:41

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

Post by Zombie416 »

ddv wrote:Вы вообще C++ то знаете??? Какое можно??? Там нет ни темплейтов, ни множественного наследования, ни указателей...Я могу вам скинуть пример на C++ который вы фиг переведете на C# без полного его переписывания.
Ну и приведите мне пример ДРАЙВЕРА который написан на C#.
Вообще-то знаю, да. А Вы про C#, похоже, где-то слышали.

Есть в С# и темплейты, и указатели, и примитивное множественное наследование через интерфейсы (что, конечно, неудобно т.к. не позволяет наследовать более одной реализации, но часто достаточно), и указатели на функции (ака delegates), и структуры с известным расположением полей в памяти (что полезно для interop-а), и лямбды, и еще целая куча всего. И более того, работаю в проекте где есть идентичный код на C++ + STL и на C#, совпадающий практически построчно, причем производительность имеет значение.

А драйвера, если уж на то пошло, имеется масса оснований писать именно на managed языках. Примеры драйверов на Sing#, что есть C# подпиленный напильником, можно в http://singularity.codeplex.com/ посмотреть.
ddv
Уже с Приветом
Posts: 481
Joined: 04 Jul 2005 17:07
Location: Москва->Staten Island NY

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

Post by ddv »

Zombie416 wrote:Есть в С# и темплейты, и указатели, и примитивное множественное наследование через интерфейсы.
Есть темплейты??? Поэтому вы и программируете на C# что даже не можете понять чем отличаются темплейты от generics которые есть в c#. http://blogs.msdn.com/b/csharpfaq/archi ... lates.aspx
C++ templates are sometimes used for a technique known as template metaprogramming. There is no way to do this in C#.
ddv
Уже с Приветом
Posts: 481
Joined: 04 Jul 2005 17:07
Location: Москва->Staten Island NY

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

Post by ddv »

Zombie416 wrote: И более того, работаю в проекте где есть идентичный код на C++ + STL и на C#, совпадающий практически построчно, причем производительность имеет значение.
STL на C# совпадающий построчно???? Пример использования std::vector,std::list,std::map на C# в студию :D . В месте с benchmark..
Zombie416
Уже с Приветом
Posts: 8881
Joined: 17 Jun 2003 04:41

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

Post by Zombie416 »

ddv wrote:Ничего он не заменяет...не надо сравнивать языки которые компилируются в байт код и языки компилируемые в NATIVE код. И уровень производительности у них совсем разные...
Вообще-то CLR байт-код компилируется в нативный код перед исполнением. И при аналогичном качестве оптимизатора (сравнивая MS VC++ и MS VC++/CLR), скорость исполнения практически идентична, как ни удивительно (правда так было не всегда).

У C# выразительные средства победнее, наличие reflection и отсутствие const-ов выкручивает оптимизатору руки, и в итоге получается помедленнее процентов на 50-100%, если писал человек знающий особенности обоих языков. Что для очень многих приложений, которые не занимаются чисто вычислительной работой, а в основном ждут ответа у моря/пользователя/базы данных, некритично совершенно. Ну и да, с C++ часто больше оптимизационных возможностей, т.е. есть шанс сделать good enough до того как плюнуть и начинать писать на ассемблере.

Повторюсь, преимущества C#/Java начинают проявляться не в программе hello world, а когда есть множество библиотек и интерфейсов, которые надо собирать в кучу.
А уж про скорость я вообще молчу...когда на каждом шагу вы создаете десятки объектов, проверяете сотню типов на соответствие и т.п.
Где-то такие же аргументы и про C++ можно послушать от людей которые ну не осилили...

Как написано, так и будет. Можно создавать, можно не создавать. Если сравнивать код на C# написанный идиотом который и про boxing-unboxing не слыхивал, и чем отличается struct от class в C# не слыхивал, и то же написанное человеком представляющим что он делает, то отличия в производительности будут на порядки.
Zombie416
Уже с Приветом
Posts: 8881
Joined: 17 Jun 2003 04:41

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

Post by Zombie416 »

ddv wrote:STL на C# совпадающий построчно???? Пример использования std::vector,std::list,std::map на C# в студию :D . В месте с benchmark..
List<T>, LinkedList<T>, Dictionary<T> . Бенчмарки идентичные практически, я проверял, и вы тоже можете.

Примерно теже заблуждения, из серии "мне рабинович напел", про C# и Java у меня тоже когда-то были. Проходят с изучением матчасти тыскыть hands on. Если человек умеет и знает что делает - то и на C#/Java будет быстро работать в 90% случаев. А если не умеет - будет жаловаться что язык не тот, и ОС не та, и компилятор плох, и вообще невиноватая я... Для чего и надо, собственно, C++/C с указателями учить. И ассемблер тоже.
Zombie416
Уже с Приветом
Posts: 8881
Joined: 17 Jun 2003 04:41

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

Post by Zombie416 »

ddv wrote:Есть темплейты??? Поэтому вы и программируете на C# что даже не можете понять чем отличаются темплейты от generics которые есть в c#. http://blogs.msdn.com/b/csharpfaq/archi ... lates.aspx
Да куда уж мне понять-то... Я на C/C++ всего-то лет как 20 пишу... :old:

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