LINUX.ORG.RU

Востребованность программистов-математиков

 ,


4

6

Добрый день.

Решил вкатиться в программирование. В приличные конторки не пошел (я не умею программировать, только в алгоритмистику могу), а вот в нии сделал тестовое задание и попал на работу. Пока на испытательный срок.

Получил первый проект, две недели отработал. Насколько я понял, назвать мою работу «программированием» сложно. Скорее это решение некоторых сложных физических задач численными методами. Программирование занимает лишь часть времени, значительная часть (и не только у меня, но даже у коллег-докторов) - изучение мануалов или разработка нового (скорее «подработка старого») численного метода для задачи.

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

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

Заранее спасибо.

Ответ на: комментарий от anonymous

Ты короче сам за хвост себя ловишь, что характерно для софистической демагогии

Слив засчитан.

anonymous
()
Ответ на: комментарий от somequest1

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

Все за гендерное неравенство!

den73 ★★★★★
()
Ответ на: комментарий от anonymous

то как мы можем доверять уравнениям ньютоновской механики доказывающими, что Луна не упадет на Землю?

это проблема физики а не математики

Математика строгая потому что при заданных рамках дает строгий вывод. А вот построить эти рамки так чтобы они более менее реалистично отражали взаимодействие Луны и Земли - это задача теоретической физики.

alpha ★★★★★
()
Ответ на: комментарий от Shadow

при чём тут шаблоны? как ты будешь изображать бесконечность в виде нулей и единиц? и нахрена клиенту ответ типа «бесконечность»? клиент всегда хочет получить конкретную цифру - сколько. в этом состоит смысл вычислений. в реальном мире бесконечности никого не интересуют.

Iron_Bug ★★★★★
()
Ответ на: комментарий от beastie

сам процесс там довольно прост и алгоритмизируется без применения серьёзного математического аппарата. а вот упихивание кода в образ и оптимизация - там начинается уже более серьёзная математика. в принципе, можно написать «тупой» компилятор, который ничего не оптимизирует и не пытается минимизировать объём кода. тогда не нужно никаких особых математических библиотек.

Iron_Bug ★★★★★
()
Ответ на: комментарий от somequest1

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

А тебе зачем? Хочешь стать программистом?

Stil ★★★★★
()
Ответ на: комментарий от Iron_Bug

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

Shadow ★★★★★
()
Ответ на: комментарий от anonymous

чувак, ты что прачечную на пути в магазин нашёл?

anonymous
()

нужно, конечно. у нас сейчас половина команды - математики, вторая - программисты с хорошей математической подготовкой. и мы не НИИ

jtootf ★★★★★
()
Ответ на: комментарий от Iron_Bug

нельзя написать «компилятор вообще».

можно. последовательно уточняя.

Tutorial on Metacompilers на основе META II

что происходит: в PDF 1964-го года разобрана трансляция в мнемоники какой-то машины.

тут последовательно переписывается эта машина на JavaScript.

можно взять любой язык, вообще-то. и использовать какое-то Literate Programming средство для воспроизводимости (типа reproducible research)

anonymous
()
Ответ на: комментарий от Iron_Bug

а вот упихивание кода в образ и оптимизация - там начинается уже более серьёзная математика.

видел пару PDF про раскладку переменных по регистрам не раскраской графа, а муравьиными алгоритмами или генетическим программированием. где-то в раёне nanopass framework, ЕМНИП, для обеспечения composablity таких проходов

в принципе, можно написать «тупой» компилятор, который ничего не оптимизирует и не пытается минимизировать объём кода. тогда не нужно никаких особых математических библиотек.

в принципе, он уже написан:

1. FASM + FASMLIB кроссплатформная Win/Lin. обёртки макросами поверх своей стд. библиотеки, типа кроссплатформное API.

2. Оберон тот же, хотя там есть сборка мусора и какая-то оптимизация. есть старый досовский компилятор «оберс» на ассемблере, где оберон реализован макросами + простой трансляцией генерит .com досовские. исходники на украинском, довольно интересные. под современный FASM/JWASM/MASM вроде бы никто не портировал ещё.

3. та же Modula-2 к оберону.

4. HLA, aka «Hi-Level Assembly». транслируется в асм (fasm/masm/gas, в HLA v3 есть свой бекенд, как в FASM и т.п.: сразу бинарник, линкер не нужен) из паскалеподобного языка.

но это ассемблер, в котором можно писать типа

                mov (this.key, eax);
		mov (eax, attrebx.id);
		mov (type_int, attrebx.atype);
		mov( var_tc, attrebx.tc );
		mov( 0, attrebx.function );

есть циклы, ветвления (хотя такие HLL инструкции во многих ассемблерах есть)

есть даже ООП и GUI библиотека на нём (HOWL)

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

и стандартная библиотека типа STL. занавес!

генерирует это «кроссплатформный ассемблер» с 0 зависимостями кроме своей стд. библиотеки, из «высокоуровневого ассемблера»

оптимизации, как я понимаю, особой в выражениях нету. поэтому это всё-таки ассемблер.

5. например ASMC — форк JWASM с MASM-подобным синтаксисом. функции в си-синтаксисе типа printf(«hello, %s», «world»), обёртки макросами. на нём написан свой нортон коммандер — Doszip Commander в таком вот стиле. его стд. библиотека фактически аналог libc, asmlib и т.п.

6. MasmBasic тред — бейсик макросами в ассемблер, получается типа HLA.

сюда же: PureBasic, с кодогенерацией через FASM, inline асмом и богатой стд. библиотекой кроссплатформной, IdleWild-Lang — бейсик на Хаскеле парсер комбинаторами, транслируется через FASM, есть OpenGL библиотека, пытается быть совместимым с BlitzBasic.

тут и ниже — подробнее

понятное дело, что оптимизации в таком вот язычке никакой. поэтому это по сути всё равно ассемблер, только высокоуровневый.

anonymous
()
Ответ на: комментарий от anonymous

чтобы написать компилятор, нужно ТЗ и это уже конкретизация задачи. компилятор всегда привязан к архитектуре и к языку. причём эта пара всегда конкретная.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

а вот упихивание кода в образ и оптимизация - там начинается уже более серьёзная математика.

не всегда она там нужна. вот например, fasmg. макросами реализованы через include мнемоники различных процессоров, принципиально разных, и emit сразу в опкоды

например, fasmg.zip в examples — AVR, 8051, x86, java class file :)

fasmgwin.zip из этого треда — winAPI, Win64/Win32, resource секция макросами fasmg

z80 на fasmg, UEFI ebc bytecode на fasmg, UEFI hello world

при этом при всём fasmg — простой ассемблер, разве что язык макросов довольно гибкий, ну и за 100+ проходов можно там раскрыть все макросы :)))

ну то есть, подозреваю что опять же оптимизации особой нет.

хотя вот например, SolASM (парсер обрабатывает 300.000 строк в секунду), HLA v3 (260.000 строк в секунду, парсер на memory mapped files и таблицах на двоичных деревьях, при этом расширяемый)

подозреваю, что при такой скорости ему будет всё равно — бинарники будут генерироваться за полсекунды. в HLA v3 есть в примерах какой-то тест с 4 млн строк — бинарник генерируется за десятые доли секунды.

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

anonymous
()
Ответ на: комментарий от Iron_Bug

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

инкрементально и итеративно, постепенно уточняя.

anonymous
()
Ответ на: комментарий от anonymous

я лично больше всего люблю nasm. хотя на fasm тоже много чего интересного и полезного написано.

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

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

например, с кода виртуальной машины (или автокода реальной 64-го года) переписывают эту машину под другой язык (например, JavaScript).

то есть, по ТЗ реализован достаточно гибкий метаязык. перенацеливаемый.

anonymous
()
Ответ на: комментарий от Iron_Bug

в ассемблерах говорить о «кроссплатформенности» весьма странно.

отчего же? вот например, fasmlib — вполне себе кроссплатформенная.

приложение, что характерно (в examples/fasm/portable/.../main.inc) выглядит одинаково: стандартный boilerplate на обёртках

которые кроссплатформенные и раскрываются по-разному под Windows/Linux, 32/64 bits и т.п. в разных конфигурациях

ещё тот же Doszip Commander, например — достаточно большое приложение.

а использование библиотек общего назначения, да ещё и кроссплатформенных - это уже некоторое отступление от оптимизации

ну код там всё равно превращается в вызов API, так что становится похожим на интерпретатор API-вызовов.

так что оптимизации там никакой. в нормальном компиляторе выражения по-нормальному оптимизированы. то же LTO, PGO например.

anonymous
()
Ответ на: комментарий от anonymous

например, если этот пример с META II переписать не на JavaScript, а на другой язык:

  • fasm + его макросы с match
  • fasmg + его более гибкие макросы
  • MasmBasic + inline asm
  • cicada-nyphm, форт на fasm-е (чем любопытен: написан в Literate Programming стиле, в org-mode org-babel-tangle: из этого «компендиума» скриптами собирается tangle нужный код)

то получим простой такой «компилятор своего языка в ассемблер».

кстати, в Literate Programming стиле если это всё записать для воспроизводимости, можно лучше автоматизировать.

тогда: метаязык, на котором написана такая Literate Programming среда — это метаметаязык для метакомпилятора (с описанием грамматики), который метаязык для целевого, объектного языка (конечного, в который компилируется).

то есть, получается в духе теории метасистемных переходов В. Турчина, про суперкомпиляцию, прогонку и т.п: специализация интерпретатора (метаязыка) — это компилятор (целевого языка).

а потом на этой башне метаязыков (метациклической в смысле «Гёдель, Эшер, Бах») — накрутить тут всякое: инкрементально и аддитивно, последовательно уточняя.

опять же, А. Тарский и первая теорема об истине, тоже про метаязык и объектный язык.

anonymous
()
Ответ на: комментарий от Iron_Bug

да и кроссплатформенность там лишь внутри одной архитектуры.

ну в fasmlib вроде бы есть Win/Lin, а с 32/64 гвоздями прибито. есть ещё над чем поработать.

или в духе Literate Programming из метаязыка параметризовывать конфигурацию разными дефайнами, раскрывающимися в разные, но однотипные куски.

была такая книжка, Горбунов-Посадов про расширяемые программы.

он там предлагал «гнёзда расширения». готовый вариант этого — Literate Programming «куски кода», с метапеременными, параметризованными дефайнами времени компиляции.

anonymous
()
Ответ на: комментарий от Iron_Bug

кстати, вот у Турчина с рефалом и суперкомпиляцией, прогонкой — это и есть «компилятор вообще», в наиболее общем виде (до специализации)

формулой «проекции Футамуры-Турчина»

anonymous
()
Ответ на: комментарий от Iron_Bug

'make tangle' по правилам из этого Makefile, конфигурации и «блоков кода»/«гнёзд расширения» (+begin_src fasm ... :tangle cicada-nymph.fasm) из кусочков отсюда собирает через tangle.el (ещё есть такое: orgMk) целевой cicada-nymph.fasm, который компилирует, собирает и тестирует примеры

в духе Literate DevOps видео слайды

то есть:

1. код метаязыка в cicada-nymph.org 2. тесты в core.org 3. конфигурация в planform-configuration.inc 4. код целевого языка в cicada-nymph.fasm

через tangle 1 специализируется в 3 целевой 4 и далее в 2, затем компилируется 4, и в нём тестируется 2.

при этом нам не важен конкретный 4, не важен конкретный 2' тестов — он получается какой-то, специализированный и параметризированный какой нужно.

anonymous
()
Ответ на: комментарий от somequest1

локально оптимальным (и ты там тусуешься в какой-то потенциальной яме) или глобально оптимальным?

anonymous
()
Ответ на: комментарий от anonymous

на си

если теперь написать транслятор этого вот


	ADR PROGRAM
OUT1
	TST '*1'
	BF L1
	CL 'GN1'
	OUT
L1

в целевой асм

например, макросами на fasmg — которые будут этот автокод раскрывать в целевой асм x86

то получим универсальный метакомпилятор, кросплатформный подо всё.

anonymous
()
Ответ на: комментарий от anonymous

Ну и как мне по говну вроде «язык - это бесконечное множество строк» написать компилятор?

см. выше.

только тебе нужны разные сорты говна — синтаксис (см. выше) и семантика (без формализации оной будешь изобретать ad-hoc велосипед).

anonymous
()
Ответ на: комментарий от Iron_Bug

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

ну тут скорее нужен какой-то «секретарь», в духе Literate Programming и векторного гипертекстового фидонета поверх него.

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

так что синтез получается теории и практики, но для этого нужна «оснастка».

векторная и гипертекстовая, ога.

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

anonymous
()
Ответ на: комментарий от anonymous

ну тут скорее нужен какой-то «секретарь», в духе Literate Programming и векторного гипертекстового фидонета поверх него.

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

Iron_Bug ★★★★★
()
Ответ на: комментарий от anonymous

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

Лол. Так ты помогаешь мне троллить математиков? Окей.

давай я тебя ещё потроллирую: есть общая теория машин и механизмов, например:

Теория механизмов и машин - научная дисциплина (или раздел науки), которая изучает строение (структуру), кинематику и динамику механизмов в связи с их анализом и синтезом.(И.И.Артоболевский)

Цель ТММ - анализ и синтез типовых механизмов и их систем.

Задачи ТММ: разработка общих методов исследования структуры, геометрии, кинематики и динамики типовых механизмов и их систем.

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

врубаешся, лалка? синтеза и анализа.

то есть, то что механики там себе наизобретали эвристически — вполне себе можно осознать, проанализировать и оптимизировать.

и синтезировать более оптимальный механизм. не делая руками 10500 механических поделок изобретая вундервафли, которые не работают.

синтезируя сразу «полезную» модель, а не абы какую-то там.

anonymous
()
Ответ на: комментарий от somequest1

в смысле целесообразности, другого смысла у оптимальности нет. Это примерно как кратчайший путь из точки в точку, утрированно. Какой еще смысл в это может вкладывать математик?

вот тебе пара смыслов:

1. оптимальный где? в какой области значений? в какой области определения параметров? по каким параметрам?

2. локально оптимальный или глобально оптимальный?

3. где динамическая модель «как было»/«как стало», доказывающая устойчивость и оптимальность?

4. если изменятся параметры из 1., что будем делать?

anonymous
()
Ответ на: комментарий от somequest1

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

это не одно решение, а поверхность решений. между которыми можно выбирать, по каким-то критериям. перемещаясь по этой поверхности.

anonymous
()
Ответ на: комментарий от somequest1

А при чем тут численные методы, если речь шла об оптимальности кода?

оптимальность кода по скорости или по памяти? по плотности кода? по функциональным точкам?

например, оптимальная раскладка переменных по регистрам решается раскраской графов или численными методами на многоугольниках (откуда все эти библиотеки в gcc, polyhedra: ppl, merged to graphite, например)

anonymous
()
Ответ на: комментарий от anonymous

Весь математический мейнстрим построен на неформальной теории множеств. Отсюда и все то смешное говно про бесконечные множества строк.

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

anonymous
()

Такой работы (индустриальная математика) сейчас довольно много, по крайне мере в Москве. Примеры --- вычислительная гидродинамика, теория упругости, перенос излучения и электродинамика, плазма тоже.

Другое дело, что необходим чаще всего как минимум толковый аспирант или молодой к.ф.-м.н. и на хед хантере и прочих чаще всего такие вакансии не пишут --- так как нормальных специалистов мало и круг довольно узкий --- а специалисты по «матану», окончившие ВУЗ и думающие, что зная линейную алгебу (которую они не знают) они знают все, никому не нужны. Зарплаты от 150-200 и выше при соответствующем уровне, причем программирование как таковое --- наименее важный момент. В подобной организации до недавнего времени «вел» двух аспирантов, их ЗП была за 100 на втором году обучения.

Хочешь такое ---- иди в аспирантуру по профильной специальности для начала.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.