2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3  След.
 
 Re: Переквалификация из научной работы в пром. программирование
Сообщение19.11.2015, 01:24 
Аватара пользователя


07/02/12
1403
Питер
tolstopuz в сообщении #1074731 писал(а):
Какие именно "современные языки" вы противопоставляете C++? Java, C#, Python, Ruby, Haskell, Scala, Rust, Go? Какие средства этих языков помогают написать тетрис для ios за два часа, но отсутствуют в C++?

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

что касается вашего вопроса, его следовало бы разбить на два - какой язык и какой набор библиотек (среда). по языку я склоняюсь к C++ по разным причинам. готов обсудить его преимущество например, перед первыми двумя кандидатами в вашем списке - Java и C#, иначе будет слишком много букв. по набору библиотек я склоняюсь к платформо-независимым решениям, ибо все неоднодневные и независимые от конкретной партии проекты так или иначе к этому стремятся.
tolstopuz в сообщении #1074731 писал(а):
Я знаю одно средство, объединяющее эти языки, но отсутствующее в C++. Это модульность.

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

-- 19.11.2015, 01:33 --

tolstopuz в сообщении #1074731 писал(а):
Этот код написан на питоне. Код на Java 8 и на Scala примерно так же лаконичен. Как это выглядело бы на C++?

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

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

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

 Профиль  
                  
 
 Re: Переквалификация из научной работы в пром. программирование
Сообщение19.11.2015, 01:42 
Заслуженный участник


31/12/05
1407
bondkim137 в сообщении #1074736 писал(а):
как наиболее универсальный язык, на котором решается наибольшее количество серьезных задач
...
большинство готовых библиотек написано на нем.
...
приблизительно так же лаконично. может быть, чуть немного более громоздко в синтаксисе.
нужно лишь адаптировать/написать/дописать необходимый фреймворк.
А я-то надеялся на интересное конструктивное обсуждение...

-- Чт ноя 19, 2015 01:50:31 --

bondkim137 в сообщении #1074736 писал(а):
по набору библиотек я склоняюсь к платформо-независимым решениям, ибо все неоднодневные и независимые от конкретной партии проекты так или иначе к этому стремятся.
...
По-моему, модульность - это вообще локальная проблема. Причем кросс-платформенная.

Вы спорите с воображаемым оппонентом, сидящим под одной платформой.

Вот пример модульности.

Код:
$sudo pip install -U nltk
$python
>>> import nltk
>>> nltk.help.upenn_tagset('NN')
NN: noun, common, singular or mass
    common-carrier cabbage knuckle-duster Casino afghan shed thermostat
    investment slide humour falloff slick wind hyena override subhumanity
    machinist ...


Первая строка устанавливает модуль, вторая использует его в программе (в данном случае в REPL - интерактивном шелле). Как аналогичные действия делаются в C++?

 Профиль  
                  
 
 Re: Переквалификация из научной работы в пром. программирование
Сообщение19.11.2015, 01:52 
Аватара пользователя


07/02/12
1403
Питер
tolstopuz в сообщении #1074737 писал(а):
А я-то надеялся на интересное конструктивное обсуждение...

ну а что вы хотите? упрекнуть язык программирования C++ (голый) в том, что на нем в три строки не пишутся распределенные вычисления? да, не пишутся. для этого нужно поработать над соответсвующим инструментарием. потом пишутся в те же три строки.
у меня ферма под рукой, сейчас там 109 серверов почти на 4 терагерца суммарно по ядрам. загружена она кодом, работающем на C++. могу дать руку своего директора на отсечение, что работает она достаточно эффективно и никакое из высокоуровневых средств не сможет уложиться в сотню серверов, выполняя аналогичные задачи

-- 19.11.2015, 01:55 --

tolstopuz в сообщении #1074737 писал(а):
Первая строка устанавливает модуль, вторая использует его в программе (в данном случае в REPL - интерактивном шелле). Как аналогичные действия делаются в C++?

мне кажется, это вообще мимо и никакого отношения к программированию не имеют

 Профиль  
                  
 
 Re: Переквалификация из научной работы в пром. программирование
Сообщение19.11.2015, 02:10 
Заслуженный участник


31/12/05
1407
bondkim137 в сообщении #1074736 писал(а):
а вот как вы на спарке напишите эффективную реализацию декодера видеоформата vp8
Не буду даже брать Spark и напишу на C++.
bondkim137 в сообщении #1074736 писал(а):
гравитационную задачу для миллиона элементов на миллион шагов в общем случае
Если она хорошо векторизуется, напишу на Spark+NumPy. Если плохо векторизуется, но все же хорошо распараллеливается, выкину Spark и возьму что-нибудь с MPI, может, тот же C++. Если надо посчитать на одном компьютере, все выкину и возьму C++.
bondkim137 в сообщении #1074736 писал(а):
или хотя бы получение списка online-друзей в facebook при миллиарде пользователей, миллионе входов/выходов в секунду и тысяче друзей у каждого среднего пользователя?
Очень сильно зависит от бюджета на железо и разработчиков. В любом случае постараюсь свести код на низкоуровневых языках к минимуму.

А вы представляете себе биллинг на C++? Мне однажды такой достался. Год переписывали на Python.

Все просто. НЕТ универсального языка. Производительность готовой программы НЕ является единственным критерием оценки решения. Сценарии использования языков программирования и сред бывают очень разными.

Я вообще считаю, что C++ сейчас - нишевый язык, как ассемблер двадцать лет назад. На нем можно писать не очень большие куски кода, которыми потом можно управлять из более высокоуровневых языков. Но это мое личное, экстремистское мнение.

Может вообще оказаться, что самые распространенные вакансии вокруг топикстартера - это 1С и PHP, а самая интересная работа - написание сайтов.

Я бы посоветовал ему не хардкор на C++, а интерактивную, исследовательскую работу в средах типа Matlab или Jupyter, типа модной сейчас профессии data scientist. При этом больше возможностей применить свой математический и физический бэкграунд и меньше требований как к разработчику. Только вот таких вакансий у нас в стране мало.

 Профиль  
                  
 
 Re: Переквалификация из научной работы в пром. программирование
Сообщение19.11.2015, 02:16 
Заслуженный участник
Аватара пользователя


01/09/13
4318
tolstopuz в сообщении #1074737 писал(а):
Вот пример модульности.

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

Вот понадобилось мне, например, почту отсылать... Поставил curl, добавил инклуд в h-файле своего класса, написал пару моих специфичных обёрток - всё...

 Профиль  
                  
 
 Re: Переквалификация из научной работы в пром. программирование
Сообщение19.11.2015, 02:18 
Заслуженный участник


31/12/05
1407
bondkim137 в сообщении #1074738 писал(а):
для этого нужно поработать над соответсвующим инструментарием. потом пишутся в те же три строки.
Я специально выделил пункт о передаче замыканий на другие компьютеры. Я не раз думал, как бы это выглядело на C++ без раздувания кода в несколько раз, и так и не придумал.
bondkim137 в сообщении #1074738 писал(а):
у меня ферма под рукой, сейчас там 109 серверов почти на 4 терагерца суммарно по ядрам. загружена она кодом, работающем на C++.
Я и говорю, что задачи бывают очень разные. У меня кластер на 130 серверов с петабайтом данных, и мне важнее иметь возможность интерактивно запускать запросы, чтобы сначала придумать код, проанализировать его поведение на реальных данных, а потом уже собрать из интерактивных кусочков целую программу и выложить в продакшн.
tolstopuz в сообщении #1074737 писал(а):
мне кажется, это вообще мимо и никакого отношения к программированию не имеют
Комитет по стандартизации C++ с вами не согласен.

http://www.youtube.com/watch?v=ND-TuW0KIgg

-- Чт ноя 19, 2015 02:35:07 --

Geen в сообщении #1074743 писал(а):
Поставил curl, добавил инклуд в h-файле своего класса, написал пару моих специфичных обёрток - всё...
Там все функции inline?

Возьмем, например, MeTA toolkit как прямой аналог упомянутого мной nltk. Знаете, с чего начинается его установка под ubuntu?

https://meta-toolkit.org/setup-guide.html

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

 Профиль  
                  
 
 Re: Переквалификация из научной работы в пром. программирование
Сообщение19.11.2015, 02:36 
Аватара пользователя


07/02/12
1403
Питер
tolstopuz в сообщении #1074742 писал(а):
А вы представляете себе биллинг на C++? Мне однажды такой достался. Год переписывали на Python.

У меня именно такой сейчас под рукой, достался по наследству.
Но вроде не так страшно, довольно таки неплохо написан.

tolstopuz в сообщении #1074742 писал(а):
Все просто. НЕТ универсального языка. Производительность готовой программы НЕ является единственным критерием оценки решения. Сценарии использования языков программирования и сред бывают очень разными.

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

tolstopuz в сообщении #1074742 писал(а):
Я вообще считаю, что C++ сейчас - нишевый язык, как ассемблер двадцать лет назад. На нем можно писать не очень большие куски кода, которыми потом можно управлять из более высокоуровневых языков. Но это мое личное, экстремистское мнение.

У ассемблера много чего очень полезного нет, что есть у C++.
Например, темплейты и самовызывающиеся деструкторы (c), а также строгая типизация и множественное (в т.ч. виртуальное) наследование структур, исключения..

tolstopuz в сообщении #1074742 писал(а):
Я бы посоветовал ему не хардкор на C++, а интерактивную, исследовательскую работу в средах типа Matlab или Jupyter, типа модной сейчас профессии data scientist.

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

 Профиль  
                  
 
 Re: Переквалификация из научной работы в пром. программирование
Сообщение19.11.2015, 02:48 
Заслуженный участник


31/12/05
1407
tolstopuz в сообщении #1074742 писал(а):
Согласен, тут вы спорите с виртуальным аппонентом, я вроде и высказывал обратной точки зрения
Я отвечал на эту фразу:
bondkim137 в сообщении #1074718 писал(а):
Я бы поставил вопрос наоборот - речь скорее о целесобразности применять что-то еще сверху C++. Чего вам, например, остро не хватает в C++, что есть где-либо еще?
И на повторение слова "эффективность".

А вопрос с передачей замыканий через границу процесса в языке без рефлексии меня все равно интересует. Очень уж хочется сделать удобный C++-интерфейс к Spark.

 Профиль  
                  
 
 Re: Переквалификация из научной работы в пром. программирование
Сообщение19.11.2015, 02:51 
Аватара пользователя


07/02/12
1403
Питер
tolstopuz в сообщении #1074744 писал(а):
У меня кластер на 130 серверов с петабайтом данных, и мне важнее иметь возможность интерактивно запускать запросы, чтобы сначала придумать код, проанализировать его поведение на реальных данных, а потом уже собрать из интерактивных кусочков целую программу и выложить в продакшн.

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

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

-- 19.11.2015, 02:54 --

tolstopuz в сообщении #1074747 писал(а):
А вопрос с передачей замыканий через границу процесса в языке без рефлексии меня все равно интересует. Очень уж хочется сделать удобный C++-интерфейс к Spark.

можно свой скрипт придумать и использовать его из C++, а также интерпретировать его с помощью C++. я так часто делаю :D
по вашему примеру подумаю

 Профиль  
                  
 
 Re: Переквалификация из научной работы в пром. программирование
Сообщение19.11.2015, 03:06 


17/10/08

1313
Извиняюсь, что вклиниваюсь.

1. Нужно знать стандарты моделирования
* UML (читал в 90-х кажется эту книгу http://static.my-shop.ru/product/pdf/110/1096643.pdf) - потребуется практически наверняка. Наиболее часто используется диаграмма классов.
* Полезны будут IDEF0, IDEF1X - бизнес/базы данных

2. Нужно знать основные технологии разработки ПО. Чаще всего пользуются
* waterfall
* agile
Это понадобится, чтобы понимать свое место в команде

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

4. Что касается языков - как уже сказано, это не самое сложное. (Бизнес-)требования, библиотеки, протоколы, используемые при разработке системы, и т.п. - вот это просто ужас. Читал как-то "картографию" ПО одного из банков - перечень используемых бизнес-приложений и их краткое описание. Т.к. приложений было несколько сотен, прочитал не все. В реальности приходится все это дело поддерживать и развивать. Если попадете в бизнес-сферу - то это просто бесконечный ворох непонятно чего, которое динамично развивается. Важно чтобы мозг не треснул.

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

 Профиль  
                  
 
 Re: Переквалификация из научной работы в пром. программирование
Сообщение19.11.2015, 03:14 
Аватара пользователя


07/02/12
1403
Питер
mserg в сообщении #1074749 писал(а):
Извиняюсь, что вклиниваюсь.

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

и переквалификацию можно будет считать успешной

 Профиль  
                  
 
 Re: Переквалификация из научной работы в пром. программирование
Сообщение19.11.2015, 03:33 
Заслуженный участник


31/12/05
1407
bondkim137 в сообщении #1074748 писал(а):
можно свой скрипт придумать и использовать его из C++, а также интерпретировать его с помощью C++. я так часто делаю :D
Да-да, десятое правило Гринспена.

Цитата:
Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp.


bondkim137 в сообщении #1074750 писал(а):
я бы добавил нулевым пунктом структуры и алгоритмы, томы кнута и олимпиадные студенческие задачки.

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

Том 4А я прочитал, точнее, пролистал в этом году. Забавно, но такое ощущение, что автор - вечный ребенок. Из полезного - нашел в упражнениях решение мучавшего меня 30 лет вопроса об эффективной реализации игры "Жизнь" на логических функциях.

 Профиль  
                  
 
 Re: Переквалификация из научной работы в пром. программирование
Сообщение19.11.2015, 03:51 
Аватара пользователя


07/02/12
1403
Питер
tolstopuz в сообщении #1074751 писал(а):
Может, не надо Кнута? В школе (80-е) я читал его с удовольствием, но сейчас предложил бы ну хотя бы Кормена.

Согласен. Сначала лучше Кормена. А потом Кнута! :D

-- 19.11.2015, 04:15 --

tolstopuz в сообщении #1074751 писал(а):
Да-да, десятое правило Гринспена.

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

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

 Профиль  
                  
 
 Re: Переквалификация из научной работы в пром. программирование
Сообщение19.11.2015, 15:30 
Аватара пользователя


07/02/12
1403
Питер
tolstopuz в сообщении #1074751 писал(а):
Из полезного - нашел в упражнениях решение мучавшего меня 30 лет вопроса об эффективной реализации игры "Жизнь" на логических функциях.

Я когда ассемблер x86 изучал, у Зубкова эту реализацию видел. Действительно летало, даже на весь экран и даже 16 лет назад.

 Профиль  
                  
 
 Re: Переквалификация из научной работы в пром. программирование
Сообщение19.11.2015, 16:24 
Заслуженный участник


31/12/05
1407
bondkim137 в сообщении #1074874 писал(а):
Я когда ассемблер x86 изучал, у Зубкова эту реализацию видел. Действительно летало, даже на весь экран и даже 16 лет назад.

(Оффтоп)

Нет, Зубков до такого не додумался, у него все просто:

Код:
   mov   al,byte ptr [di+1]   ; в AL вычисляется сумма
   add   al,byte ptr [di-1]   ; значений восьми соседних ячеек,
   add   al,byte ptr [di+319]   ; при этом в младших четырех
   add   al,byte ptr [di-319]   ; битах накапливается число
   add   al,byte ptr [di+320]   ; соседей
   add   al,byte ptr [di-320]
   add   al,byte ptr [di+321]
   add   al,byte ptr [di-321]

Лет тридцать назад я прочитал в книге "Этюды для программистов" примечание переводчика, где говорилось о логической формуле с девятью входами и одним выходом, позволяющей обрабатывать клетки параллельно. Году так в 1990 я сделал на этом принципе реализацию life для "Микроши" (8080) с полем 128x64, тоже летало. Но формула у меня была сложнее, чем хотелось бы.

В этом году я снова взялся за эту задачу, на этот раз уже с помощью VLSI-оптимизаторов. Получилось красивое решение из сумматоров, полусумматоров и одной волшебной схемки. Через несколько месяцев я с удивлением нашел его у Кнута в упражнении 7.1.3-167(a). А в упражнении 7.1.3-167(b) есть офигительная конструкция, использующая еще и потоковость, то есть знающая, что на входе массивы и потому содержащая не только AND, OR, NOT и XOR, но и SHL и SHR.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу Пред.  1, 2, 3  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group