2014 dxdy logo

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

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




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


12/03/11
688
Полагаю, здесь немало таких людей, которые переквалифицировались из научной работы (математика/физика) в промышленное программирование в IT-компаниях. Меня интересует следующее: какие основные вещи надо выучить на C/C++, чтобы начать? Интересуют в том числе конкретные материалы, книжки, какая-либо информация...

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


01/08/06
3053
Уфа
Промышленное программирование очень разное. Даже перечислять не берусь. Если рассматривать величину спроса, то программисты на C/C++ довольно востребованы. Более перспективными выглядят программисты на C#, Java, PHP, Ruby. Но и на редких и экзотических языках вполне можно найти свою нишу, если Вы владеете ими в совершенстве.

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

Ну и конкретный совет всё-таки дам. Можно поискать в Интернете по ключевым словам "вопросы на собеседовании C++". Можно на сайте http://www.quizful.net/test пройти пару тестов.

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


06/07/11
5627
кран.набрать.грамота
DLL в сообщении #1074531 писал(а):
Меня интересует следующее: какие основные вещи надо выучить на C/C++, чтобы начать?
Проще всего узнать это, зайдя на сайты для поиска работы. В России в основном это hh.ru.
Если интересует что-то конкретное, то можно посмотреть на сайтах крупных компаний, которые этим конкретным занимаются.

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


07/08/06

3474
Вопрос немного напоминает следующий. "Я бы хотел работать в группе математиков в области поиска аналитического решения дифференциальных уравнений. Какие формальные обозначения мне необходимо освоить для этого?". Как правило, на изучение языка на хорошем уровне уходит месяца три (по своему опыту). Сложности изучения собственно языка - это наименьшие сложности.

Кроме самого языка Вам потребуется знание популярных библиотек - это на порядок больший объём информации. Потом - знание основных шаблонов проектирования, т.е. просто писать код недостаточно, надо уметь видеть ситуацию в целом и в перспективе: как написать код таким образом, чтобы при дальнейшем развитии приложения не пришлось всё переписывать заново из-за переусложнения кода из-за неудачно выбранного подхода. Сюда же - знание различных стандартов (например - IEEE по представлению чисел с плавающей точкой), кстати, Вам полезно почитать описание стандарта C++ ("ANSI C++ Standart").

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

Ну и умение работать в команде и т.д.. Лучше, конечно, смотреть в ту сторону, где квалификация математика будет востребована. Кроме собственно программистов в больших компаниях существуют аналитики - специалисты, знакомые с предметной областью, архитекторы, отвечающие за поддержание архитектуры системы в целом, тестировщики, внедренцы. Все эти люди могут не писать код вообще (архитекторы всё же должны иметь представление), несмотря на то, что заняты в одной компании. Посмотрите, например, RUP (Rational Unified Process) - там определены основные этапы разработки ПО, определены роли участников и стандартизованы основные документы и диаграммы, используемые при этом.

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


07/02/12
1403
Питер
worm2 в сообщении #1074533 писал(а):
Если рассматривать величину спроса, то программисты на C/C++ довольно востребованы. Более перспективными выглядят программисты на C#, Java, PHP, Ruby.


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

А современные языки и средства разработки, помогающие написать тетрис для ios за два часа, в больших серьезных задачах теряют свою эффективность.

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


27/04/09
28128
Сильное заявление.

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


20/08/14
11136
Россия, Москва
bondkim137 в сообщении #1074581 писал(а):
А современные языки и средства разработки, помогающие написать тетрис для ios за два часа, в больших серьезных задачах теряют свою эффективность.
Согласен с этим. Пока встроенных инструментов, множества их взаимодействий и их эффективности хватает для решения задачи - всё просто и быстро. Так и бывает дя специально подобранных примеров. Но для сколь нибудь сложной (или необычной) задачи ничего этого не хватает - и утыкаешься в ограниченность готовых инструментов.

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


31/12/05
1480
bondkim137 в сообщении #1074581 писал(а):
Мне кажется, что программисту, вышедшему из математиков, наиболее комфортно будет в C++.

А современные языки и средства разработки, помогающие написать тетрис для ios за два часа, в больших серьезных задачах теряют свою эффективность.
Это ложная дихотомия. В 90-е действительно был период противопоставления "голого" C++ и "визуальных сред" типа Delphi и VB, но это противопоставление давно утратило актуальность.

Сейчас огромный выбор современных языков на все случаи жизни, для тех же математиков удобны C++, Python(+SciPy), Matlab, R.

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


30/01/09
6648
Язык С++ действительно до сих пор не потерял актуальность. Многие программные продукты были написаны ещё в те времена, когда этот язык считался основным среди профессионалов. Некоторые программные продукты (игровые движки, к примеру) тесно взаимодействуют с DirectX и тоже используют С++. Но топикстартеру для начала надо посмотреть по объявлениям, какие языки более востребованы в тех местах, где он живёт.

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


07/02/12
1403
Питер
мат-ламер в сообщении #1074673 писал(а):
Язык С++ действительно до сих пор не потерял актуальность. Многие программные продукты были написаны ещё в те времена, когда этот язык считался основным среди профессионалов.

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

-- 18.11.2015, 21:24 --

tolstopuz в сообщении #1074668 писал(а):
Это ложная дихотомия. В 90-е действительно был период противопоставления "голого" C++ и "визуальных сред" типа Delphi и VB, но это противопоставление давно утратило актуальность.

Пардон, а что такое "голый C++" и почему он должен противостоять "визуальным средам" ?

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


27/04/09
28128
bondkim137 в сообщении #1074693 писал(а):
По крайней мере, на нем в процессе разработки можно создать необходимый себе инструментарий - что и происходит со сложными проектами. А более высокоуровневые языки вынуждены ограничивать программиста
Неужели C++ не вынужден ограничивать своего пользователя? (И притом лишь он — как такое могло исторически сложиться?)

Из-за краткости и общности формулировок даже непонятно, к чему можно привести контраргументы, и стоит ли. Допустим, не устраивает динамическая типизация — тогда сейчас всё равно есть языки со статической более свободной гибкой/выразительной, чем у C++. Скорость исполнения — ну, когда нужно оптимизировать что-то до конца, не только в нём доступны вставки ассемблера/C/иногда и C++. А в лиспах и некоторых других языках есть более гибкие, чем у доставшегося C++ от C препроцессора, макросы, если нужен DSL. (И много прочего.) По-моему, в любом случае, необходимость писать весь проект на одном только C++ нуждается в обосновании более подробном, чем это здесь было сделано.

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


07/02/12
1403
Питер
arseniiv в сообщении #1074712 писал(а):
Неужели C++ не вынужден ограничивать своего пользователя?

У C++ imho больше проблем связано с тем, что он дает слишком уж много свободы.
И программисты лезут туда, куда им лезть рано.
arseniiv в сообщении #1074712 писал(а):
(И притом лишь он — как такое могло исторически сложиться?)

Нет, он не один. Он просто самый яркий представитель семейства компилируемых языков без надзирателей вроде интерпретатора или сборщика мусора.
arseniiv в сообщении #1074712 писал(а):
Из-за краткости и общности формулировок даже непонятно, к чему можно привести контраргументы, и стоит ли. Допустим, не устраивает динамическая типизация

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

arseniiv в сообщении #1074712 писал(а):
По-моему, в любом случае, необходимость писать весь проект на одном только C++ нуждается в обосновании более подробном, чем это здесь было сделано.

О такой необходимости никто и не говорит. Я бы поставил вопрос наоборот - речь скорее о целесобразности применять что-то еще сверху C++. Чего вам, например, остро не хватает в C++, что есть где-либо еще?

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


27/04/09
28128
bondkim137 в сообщении #1074718 писал(а):
Чего вам, например, остро не хватает в C++, что есть где-либо еще?
Я им уже давно не пользуюсь, так что нормальной критики не наскребу (но она ведь давно есть :roll: ).

Хотя бы упомянутые макроопределения — как показывает Template Haskell, они могут хорошо относиться к типам, и, как видно ещё много где, не быть просто синтаксическими заменами. Компилятор мог бы вылавливать больше ошибок при их использовании.

-- Чт ноя 19, 2015 01:32:09 --

Ну и ещё мне теперь много где не хватает решётки типов как в Ceylon. Вряд ли её стоит ожидать в новой версии стандарта C++.

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


07/02/12
1403
Питер
arseniiv в сообщении #1074724 писал(а):
Я им уже давно не пользуюсь, так что нормальной критики не наскребу

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

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


31/12/05
1480
bondkim137 в сообщении #1074693 писал(а):
Пардон, а что такое "голый C++" и почему он должен противостоять "визуальным средам" ?
Это завуалированная форма вопроса "что такое современные языки и средства разработки, помогающие написать тетрис для ios за два часа, и почему они должны противостоять C++".

Какие именно "современные языки" вы противопоставляете C++? Java, C#, Python, Ruby, Haskell, Scala, Rust, Go? Какие средства этих языков помогают написать тетрис для ios за два часа, но отсутствуют в C++?

Я знаю одно средство, объединяющее эти языки, но отсутствующее в C++. Это модульность. Оно действительно помогает быстрее написать программу, использующую готовую функциональность, предоставляемую модулями, написанными другими разработчиками. Оно избавляет от возни с отдельным подключением библиотек и заголовочных файлов и километровых makefile.

Только вот не то в C++ 17, не то в следующую за ней версию стандарта вводят модульность, что еще через несколько лет превратит язык для профессионалов-хардкорщиков в свалку недоделанных тетрисов для ios.

-- Чт ноя 19, 2015 00:40:56 --

bondkim137 в сообщении #1074729 писал(а):
Лучше, наверное, конкретный пример разобрать.
Я это к тому, что многие отсутсвующие фичи, так сказать, на самом деле, достаточно легко заменяются альтернативными паттернами.
Вот мне, например, нравится Spark. Я пишу:

Код:
error = np.asarray(parsedValData
                   .map(lambda lp: (lp.label, averageTrainYear))
                   .map(lambda (l, p): squaredError(l, p))
                   .collect())


Все эти map собираются в дерево вычислений и оптимизируются, тут для C++ проблем нет - в наш век сугубо экзистенциональный ленивые вычисления не пишет только, простите за каламбур, ленивый. В результате, начав выполняться на одной машине, это дерево вместе с копией моего кода едет на кластер, на котором разбит на 100 машин массив из миллиарда строк. Каждая машина пропускает через это дерево свои 10 миллионов строк, доходит до листьев, а в них написано: вызвать лямбду. С реальными значениями внешних переменных (например, averageTrainYear, значение которой присвоено в предыдущей строке). Естественно, лямбда должна выполниться на ста машинах, иначе весь смысл кластеризации пропадает.

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

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

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



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

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


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

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