Стоит ли мне учить delphi после C# ради смены работы?
=======================================================

 Сейчас занимаюсь тем, что пишу кроссплатформенный back - end для web приложений на .NET Core. Недавно предложили работу в очень крупной компании, но только с изучением Delphi и Oracle для разработки настольных программ и использования внутри компании. По з/п и стабильности выиграю. Стоит ли мне это делать и насколько сложно и перспективно учить Delphi после C#? 

 Не бойтесь Дельфей. Например, меня большой опыт как на С++/C# так и на Дельфях.  

Современные Дельфи по сути мало чем отличаются от C#. У них даже похожие названия многих библиотечных классов и похожие названия методов в class helper-ах. Дженерики тоже очень похожи.  

Есть и атрибуты как в C#, а так же добавили похожий RTTI и рефлексию.   

Даже такой класс как TStringBuilder есть, хотя на Дельфях он практически и не нужен, поскольку Дельфи позволяют прямое и очень быстрое манипулирование символами строки или частями строки как и C++.  

В последней версии Дельфей даже появилась возможность объявления переменных по месту с самовыведением типа (аналог auto на C++ или var на C#)  
  
**Плюсы Дельфей в сравнении с C#:**  

- Найтив для любой поддерживаемой платформы (при использовании библиотеки FMX) с отсутствием подтормаживания на JIT компиляцию. При компоновке по умолчанию вы получаете готовый к запуску исполняемый фаил (exe-шник в случае Win), который не нуждается в установке каких-либо дополнительных фреймворков или runtime-библиотек.  

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

- В разы меньшее потребление памяти на аналогичных задачах.  

- Возможность прямого доступа к памяти. Возможность работы с указателями на любые структуры в любой момент. Не нужно заморачиваться с unsafe блоками на C# для повышения быстродействия, которые все равно имеют ограничения.  

- Более гибкая работа с конструкторами, деструкторами и свойствами классов.   

- Наличие некоторых удобных языковых чисто паскалевских или object-паскалевских конструкций как то, например, возможность более удобного присвоения result в функциях наравне c exit(...) (аналог return в C#);  

конструкции"set of" или "class of", прямых аналогов которых нет в C#. Например, "class of" решает половину вопросов рефлексии без собственно применения медленного механизма рефлексии.  

- Возможность процедурного программирования. Не нужно городить статические классы только ради пары-тройки методов. А так же вложенные процедуры/функции.   

- Прямой доступ к родному API без особых заморочек (хоть для Win, хоть для POSIX) и почти бесшовная работа с COM и ActiveX.  

- Гораздо более легкий доступ к исходному коду стандартной библиотеки и более простой способ пройтись по ней в момент отладки.  

- Возможность писать куски кода прямо на ассемблере в 32х или 64х битном коде (если очень надо, конечно).  

- Очень хорошие компоненты доступа к большому числу баз данных прямо из коробки (FireDAC).  

- Паскалевская структура unit-ов c раздельным объявлением и реализацией (что ближе к разделению на заголовочные и имплементационные части C++), а так же необходимость объявления сверху вниз все же способствует более строгому и грамотному подходу к архитектуре в большом проекте, хотя и безусловно требует больше писанины и планирования (как отчасти и на C++).  
  
**Минусы Дельфей по сравнению с C#:**  

- необходимость ручной очистки памяти за исключением строк/записей/и интерфейсов (что, наверное, по началу самое страшное для программистов с менеджет сред). Почти везде необходим try-finally, ну и компоненты типа madExcept тут в помощь. Зато нет порой трудноуловимых утечек, например, из-за ссылок на статические классы как в C#;  

- Как следствие Дельфи требуют более хорошего понимания принципов работы с памятью, а так же хорошего понимания работы ARC механизма для строк и особенно для интерфейсов, где этот механизм можно явно перекрывать. И особенно в свете наличия таких новых атрибутов для ARC механизма как [Weak] и [Unsafe].   

- более многословный и архаичный синтаксис begin...end вместо {...} / := вместо = / необходимость отделения объявления от имплементации и т.п.; оператор case of ( аналог switch в C#) не допускает выбор по строчному значению / оператор for позволят только прямой или обратный проход по счетчику или по экземплярам коллекции (аналог foreach); нет префиксно-постфикстных инкрементов/декрементов типа ++/-- (хотя есть операторы Inc/Dec, которые напрямую транслируются в соответствующие быстрые ассемблерные команды)  

- Много исключений и выкрутасов для обратной совместимости (хотя далеко и не так много как на C++). Например, классически строки индексируются с 1 для совместимости с древними короткими AnsiString,   

но при этом новые компиляторы для мобилок индексируют их с 0. Поэтому, либо нужно писать разный код для десктопа и мобилок, применяя блоки {$IFDEF ... } в коде, либо пользоваться новыми helper-ами для строк.   

- Из-за необходимости классического объявления сверху-вниз и отделения объявления от имплементации существует проблема т.н. circular reference которая требует более продуманного чем для C# дизайна классов или объединения их в одном юните  

- нет развитых Лямда-выражений (есть только анонимные функции)  

- нет удобного LINQ (особенно недостает LINQ for Object)  

- Стандартная библиотека менее всеобъемлющая чем на С#.  

- Нет такого навороченного dataset-а на стороне клиента как на C# (хотя, от его использования многие через некоторое время и так отказываются в пользу самописных или сторонних т.н. объектов бизнес-логики)  

- Более сложный подход к просмотру содержимого объекта в момент отладки. В VS это удобнее и информативнее, а на Дельфи очень часто приходится приводить к нужному классу ручками.  
  

Дельфи сейчас менее востребованы чем C#. Поскольку во внутри-корпоративном и бизнес-секторе в основном их вытеснил C#.   

Но на десктопе полно еще проектов и на Дельфях. Например утилиты Auslogics или серьезный пакет Altum Designer и т.п. Много осталось проектов как раз в индустриальном секторе, отчасти потому, что на Дельфях очень просто в рамках приложения спуститься на более низкий уровень доступа к памяти и кода вплоть до чистого ассемблера как и на C++, но при этом одновременно проще писать и прикладное ПО (без необходимости постоянной прямой работы с указателями). 

 Учить Delphi имеет смысл, если это останется твоим единственным и последним местом работы.  

Поменять место потом будет гораздо сложно.  

C# намного лучше в плане перспектив 

 Delphi стоит изучать. На нем можно очень много вещей сделать. Лично я делал: срм, игры, видеоконтроль приложение на php backend, веб приложения и мобильные приложения на Android. Delphi похоронили те, кто им никогда не занимался. Но скорость разработки десктопных приложение на нем всегда выше, чем на любом другом языке 

 На Delphi вакансий меньше, сам язык простой, думаю легко выучить, если есть база( ООП, GUI - компоненты,SQL, везде одно и тоже почти)  

Если перспектива проработать в компании долго высока, то почему бы и нет. Если меньше года, то имеющийся опыт никуда не денется, думаю. Но после 5 лет в другое место устроится будет сложнее.   

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

 Delphi давно умер, видимо, вам придётся дорабатывать и сопровождать жуткое легаси, потому и выигрыш по зарплате. Я б не пошёл. 

 Ни в коем случае не делайте этого. Это будет начало короткого пути к полной вашей деградации как специалиста. 

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

Просто разрабы (которые delphi), ни разу не ставили себе целью делать что-то бесплатным, только в 19-м году (спустя почти 20 лет разработки самого delphi) выпустили таки бесплатную редакцию.   
  

У них вполне себе была попытка и .NET загрести под свою RAD... но что-то пошло не так и этого не случилось, по крайней мере т.н. 8-я версия была первой и последней средой для .NET.   
  

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

Если конкретнее, то знание внутренней кухни, умение писать компоненты - дорогого стоит.  
  

Можете на почту чиркануть (в профиле), я вам накидаю инфы и мб помогу чем с начинанием, а вы мне все тоже самое только шарпу))  
  

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

Стеба ради, вот это написано на Delphi: [prime.fmsoft.net/demo/desktop/mdemo65.dll](http://prime.fmsoft.net/demo/desktop/mdemo65.dll) 

 Сказать что Delphi только для формошлепства это все равно что сказать что php для заполнения формы фидбэка:).да delphi одно время сдавал позиции но сейчас это так , это кроссплатформенный инструмент просто эффективные менеджеры ИТ ехСССР как всегда отстают от майнстрима погуглите idera, Embarcadero Delphi Rio10.3.2 а затравку видео про ХЕ7<https://youtu.be/tjp-joRc2y0> а после был ХЕ8 ХЕ10 Веrlin Tokio Rio 

 Смотря что подразумевается под работой с Delphi. Если "формошлепство" - тогда это невыгодный размен. Если иначе, то почему бы и нет. Опять же смотря какое количество легаси в этой фирме имеется.  

Delphi язык легкий для изучения. Все что можно сделать на C# можно сделать и на delphi.   

Я не агитирую, выбирать все равно Вам) 

 Если речь о современном Delphi, то да, стоит. Но вот если вас зовут на поддержку легаси конца 90-х годов, с какой-нибудь Delphi 2, то наверное не стоит. И дело тут даже не в языке как таковом, а в легаси - с ним лучше не связываться ни на каком языке. 

 Лучше уж тогда выучить Cobol. С ним Вы найдёте работу в любой европейской стране. Но станете вымирающим видом. 

 Все зависит от того, как видишь свои будущие 10 лет.  
  

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

Хочешь быть на волне - изучай актуальные ЯП, за которые хорошо платят 

 Это очень спорно. Я раньше разрабатывал на vcl на ++ а мой коллега писал интегрируемое со мной По на delphi и мы оба перешли на C# и не он не я не хотим возвращаться назад. В C# есть простота и лаконечность помоему. Delphi достаточно сильный язык, но по мне лучше переходить тогда на стек c++ vcl или там firemanky уже. От этого больше профита и api для этих фреймворков одинаковое. Но я бы на delphi не пошёл. 

 Что там изучать, если владете C# проблем нет. Pl/sql тотже синтаксис 

 Как и в любой области, где количество специалистов падает, их зарплата растёт. Но постепенно сокращается и количество вакансий.   
  

И да, на нынешнем этапе для Дельфистов больше предлагают поддерживать или портировать всяческое легаси. Шансы начать писать что-то новое в связи с развитием Дельфи начинают расти, но пока они в зачаточном состоянии... И не факт, что вырастут.