Ладно, ок. Факты про .NET в обмен на лайки. 5 уже было, долайкивайте сюда.

favorite 56
message 124

1. C# и .NET сделал @Microsoft . Как ни странно, он иногда делают вещи, которые работают и работают весьма неплохо. Невероятный факт имхо.

2. Многие считают что C# и Java - это вот примерно одно и то же. На самом деле кроме архитектурно похожих платформ, общего нет почти ничего

3. В C# и Java разные naming conventions. Вот шарповые (официальные!): https://t.co/fiXN3foeoH Бесит когда люди их не соблюдают

Ну типа знаете, приходят и такие.. начинают писать методы camelCase-ом, или букву I перед интерфейсами забывают ставить. Брр... Бесит!

4. Всеми любимый @StackOverflow сделан на C# и https://t.co/Pq76t3gBOo MVC. Сюрприз, правда? Они еще свой ORM попутно написали

5. У C# превосходный, прямо-таки встроенный в язык и платформу интероп с C++ и COM. Знавал людей, которые DirectShow-графы на шарпе делали

Это примерно как взять декодер mp3, написанный на C++ и просто так из C# заюзать. Помните про это когда кто-то скажет "для C# нет библиотек"

6. Все говорят что на C# мало что сделаешь. На самом деле сделать можно почти все, что душа пожелает, кроме, наверное, микроконтроллеров

Изволите web? ASP .NET (MVC) к вашим услугам (еще и TypeScript докинут в подарок)

Изволите мобильне аппликухи прототипировать? Xamarin вам в помощь. Но только прототипировать. В итоге все равно скатываешься в натив

Изволите медиапрограммирование для винды? Широкий интероп с COM и P/Invoke просто жаждет чтобы вы его потрогали своими руками

Желаете десктопные приложения? Вот вам Windows Forms, WPF или даже CEF (эдакий Electron с C#-бекендом) на выбор.

Распределенные вычисления? Я в них не верю и знаю о них мало - поэтому вот вам https://t.co/qv9UrmqSVX

7. (7 лайков было) С кроссплатформенностью у C# исторически сложные отношения, но с приходом Сатья Наделла в MS все стало заметно лучше

До этого был mono, сделанный энтузиастами реверс-инженерами (которые немного смотрели в иcходники .NET 2.0 - они доступны для скачивания)

Работал mono через пень-колоду и доставлял пользователям БОЛЬ, а линуксоидам - БАТТХЕРТ. Потом на нем сделали Xamarin и продали MS

Сатья Наделла вообще выступает за всеобщую открытость и дал добро сделать .NET Core, который типа официальный .NET под Linux.

Но и тут без лулзов не обошлось. Команд разработки там несколько и они сначала начали брать пример с nodejs-хайповой молодежи.

Как следствие - в .NET Core был абсолютно уродский тулсет и project.json. Ближе к релизу ребята выдохнули и вернулись к csproj-файлам

8. (а не, 8). Короче есть MSBuild. И это - сборщик .NET-проектов. Остальные инструменты (NAnt, NMake) - это от лукавого.

.csproj файлы, которые C#-проекты, которые создает студия - это на самом деле ни что иное как сборочный скрипт для MSBuild. Такие дела.

Следствие - их очень даже можно и иногда нужно править руками. Или даже писать самому с нуля. Там внутри несложный XML.

Есть целая библиотека дополнительных target-ов для MSBuild-а (https://t.co/NamVDw0ZTR). Они вот разве что планету вертеть не умеют

Само собой, таргеты для MSBuild-а можно дописывать руками. На C#. Делается это весьма несложно

9. В .NET есть оффлайновый JIT. Называется Ngen.exe. https://t.co/71sXjhPDX4 Живите с этим.

11. LINQ - все его знают и любят, да. Немногие знают что в https://t.co/4DdJlHxc2L LINQ имеет чуть более расширенный синтаксис нежели в C#

10. Вообще помимо C# достаточно популярен https://t.co/4DdJlHxc2L. Особенно в США. Почему так происходит - загадка, но многие с него прутся

12. Еще в https://t.co/4DdJlHxc2L есть литеральные даты (в смысле что их можно сделать const и вкомпилить). В C# - нет. вот_это_поворот.jpg

13. Многие вещи в C# появились из-за необходимости кровавого интеропа с плюсами и COM-интерфейсами (Office например, DirectShow)

Например структуры (struct). Круто описать структуру в C#, создать её, взять её адрес и передать плюсовой external-функции с [DllImport]

Например dynamic-и. Круто сделать Activator.CreateInstance по type GUID-у и запустить какой-нибудь MS Excel, не объявляя доп. интерфейсов

А именно - есть Skip/Take и Distinct.

Ну в смысле они итак есть, но в https://t.co/4DdJlHxc2L - встроены в язык

Например указатели и unsafe. Круто что они вообще есть. Но в большинстве случаев класса Marshal и структуры IntPtr хватает за глаза.

@StackOverflow https://t.co/mVie0DyYEZ Джефф вот регулярно пишет как они от этого счастливы/не счастливы. Dapper - тот самый ORM.

14. Пакетный менеджер для .NET - NuGet. Когда-то в нем лежали JS-фреймворки, но сейчас фронтенд переехал на npm/yarn. MVC-разрабы выдохнули

15. В 2016 году Microsoft занял первое место по кол-ву контрибьюторов на GitHub-е обогнав Facebook и Google. https://t.co/2zlOGL97Iy

Причина? Выкинули на Github разработку .NET Core и сопутствующих инструментов.

16. Удивительно но, lambda expressions в C# реализованы, работают и используются вот вообще не так как в Java. Что-то близкое было в Scala

17. Лайфхак для тех, кто в теме по MVC и Razor-у. Прикиньте, как можно оказывается:

18. Продолжая странного C#-кода тред. Да, так тоже можно! Но это конечно полный съезд крыши

19. Множественного наследования в C# нет. Но есть поведенческие примеси (extension-методы для интерфейсов). Весь LINQ - это вот оно

20. Можно объявить extension-методы с одинаковыми this и именами, положить в разные ns. Теперь эти ns - аналог тайпклассов из Scala. Магия!

21. Последний писк моды от мира .NET - это .NET Standard. Типа вы собираете dll-ку под .NET Standard и её можно использовать //...

...// в любом приложении на любой платформе. То есть хотите - в виндовую WinForms пихайте, хотите - в никсовое приложение на MVC Core

Ну т.е. от версии .net/core она не зависит - главное чтобы версия поддерживала выбранный вами стандарт. Удобно!

Рид море хере: https://t.co/4BsHsKSpRm

22. MS Azure - оч удобный хостинг для .NET-проектов. Интегрируется прямо из Visual Studio. Есть бесплатные планы и очкрутой саппорт

Это как Amazon-овские продукты, только от MS. Местами выходит сильно дешевле. Ребята работающие в команде Azure признаются что там внутри ад

23. Считается что асинхронный I/O - это привилегия node.js. Хрен. В C# есть async/await (TPL) как раз для этого.

До этого были асинхронные делегаты (BeginInvoke/EndInvoke), но использовать было дюже неудобно. Сейчас вроде норм, но тоже есть нюансы

24. Этим фактом будет замечательный видос про использование C#, Razor и WebAssembly. https://t.co/512MMQEa3m Посмотрите, это очешуенно!

25. В C# есть деструкторы! Испугались? Расслабьтесь. Это всего лишь аналог Finalize из Java. Но выглядит как деструктор!

С ними связана история про dispose pattern и GC, очень любят спрашивать на собеседованиях. Подготовьтесь, почитайте: https://t.co/g2zHKab8Zg

26. RavenDB написана на C#. Правда работает оно из рук вон плохо, но это повод сказать "смотрите, на C# тоже пишут СУБД, а не только на go!"

На самом деле не только Raven, но еще и вот такое вот: https://t.co/fnBCh32l4D

27. #Javabutthurt Фреймворки для локализации в .NET не распространены. Почему? Потому что инструменты локализации даются из коробки (resx)

28. #Javabutthurt Так же написать что-то вроде Joda-Time никому не придет в голову. Тулсет для работы с датами - самый лучший, из коробки

https://t.co/NzIKJFVMkx Как ни странно, DateTime.

https://t.co/d2SqExqzBR на примере Windows Forms

29. Если вам быстро нужна рандомная строка в C# - делайте Guid.NewGuid().ToString(). Я ж не один так делаю, правда?

30. Windows Phone не так плох, как вам кажется. Нет, ну правда. Я пользуюсь 650 люмией 4й год, а она как в первый день работы.

А еще обязательно гляньте что такое Windows Continuum. https://t.co/YdOFcdQarv например тут. Ну круто же! И это я про HoloLens молчу

31. Не про .NET, но из того же огорода. Думаете nodejs - это bleeding edge? Сорян, значит вы просто слишком молоды и не помните WSH

https://t.co/7cJDEaWdfm Как концепт запуска JavaScript (на самом деле JScript) вне браузера появилось оно в Windows 95.

И юзалось не для запуска серверов и асинхронного I/O, а для админи-ия серверов на Windows. Эдакий PowerShell, когда это не было мейнстримом

32. Вдогонку: вы не поверите, но и аналог Electron-а был вот где-то в те времена: https://t.co/KDBOOdzixg

Это еще до того, как появился XUL! Воистину, все лучшее изобретено в застенках @RusMicrosoft до нас :)

33. Кто не знает (да епт, все знают!) одно время у .NET был свой flash - Silverlight. https://t.co/icO4pBZwRP

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

...// - люди тупо не захотели ставить себе еще один flash. Ну и с DRM и видео они очзря заморочились. А если б не вы*бывались - были бы //..

...// примерно как Adobe AIR сейчас. Но время ушло. Однако я успел приобщиться к SL и скажу, что сие весьма годно (шутка ли, WPF в браузере)

К тому же вполне себе кроссплатформенно. Но! Абсолютно идиотский WCF RIA для клиент-серверной коммуникации. Он убивал неплохой экспириенс

С другой стороны идея "изучил XAML - можешь делать ВСЕ" вполне себе жизнеспособна и хороша. В общем реализация подкачала. Ниасилили

А потом и уход от NPAPI в сторону JS окончательно угробил идею. Requiescat In Pace. Бтв, поддержка и апдейды продлены до 2021 года

Ну в смысле security-апдейты, а не новые фичи.

34. У Java-истов есть Scala. У .NET-чиков есть nemerle. Только Scala живет и здравствует, а nemerle - не очень.

Суть nemerle в квазицитировании. Это короче как макросы (#define из C++), но только строго типизированные. Там даже if-а нет. Он - макрос

Сделали его ребята из Вроцлавского университета (зачем - неясно). Ныне курируется JetBrains-ом. Кстати, @JetBrainsRu, как оно там поживает?

@JetBrainsRu Вне зависимости от текущего статуса, о nemerle принято вздыхать, мечтательно закатывать глаза и ныть когда же квазицитирование будет в C#

35. Секрет Полишинеля: в C# есть 3 недок-х ключевых слова: __makeref, __refvalue и __arglist. Так как это секрет, я про них не расскажу

35. Продолжаем #Javabutthurt. XML-конфиги на C# делаются так же средствами из коробки - см. https://t.co/c1iVK4e6vI например

37. Roslyn - это компилятор C#, написанный на C#. https://t.co/wkUGxQdbjT В его issues ведутся дискуссии о дальнейшем развитии C#

Танцу... Простите, участвуют все желающие!

38. Для глубокого статического анализа C#-кода есть StyleCop: https://t.co/7kB6M60j5d Все хочу на студентов натравить, руки не доходят

Был еще FxCop, но с выпуском Visual Studio 2012, он перестал быть отдельной утилитой и переехал в студию. VS Code Analyzis теперь называется

39. Кстати о тулсете. XMLDOC - это Javadoc в C#. Примечателен тем, что ложится в отдельную XML-ину и может использоваться независимо от кода

Само собой, есть генератор HTML-документации из XMLDOC-а. Doxygen, Sandcastle. Doxy не пробовал, а Sandcastle неплох.

Генерирует для вашей поделки кусок MSDN-а. Но так или иначе я считаю что ни XMLDOC ни Javadoc для хорошей документации недостаточно.

Приступить к работе с XMLDOC предельно просто: встаньте курсором над вашим классом/методом и наберите "///"

Где-то тут был твит от @redmoonstudio про "Resurrect me here". Да, объект в деструкторе можно воскресить.Читайте тут https://t.co/q2tE2Tayqe

@redmoonstudio Но если вы НА САМОМ ДЕЛЕ делаете это в вашем коде, то лучше вызывайте скорую заранее

40. Самый дискуссионный факт. Про общую стилистику. Microsoft в .NET придерживается идеологии "one true way".

Ну то есть если вам надо что-то сделать, то существует ровно один способ это сделать. А именно: какие-то краеугольные вещи MS пишет сам

ASP .NET MVC, EntityFramework, JSON-сериализатор, парсер XML и все в таком духе. И часто у вас нет выбора во фреймфорках

Не всегда конечно - JSON-сериализатор у MS не получился и его место занял Newtonsoft.Json, который переименовался в https://t.co/acS4ibPv9t

ORM вот тоже. EntityFramework обоснованно многих не устраивает (хотя он очень удобен). Появляется Dapper, NHibernate и другие.

Но вот корневые штуки вроде ASP .NET MVC никто все же не переписывает. Нету здесь JBoss-а и Tomcat-a.

То есть я хочу сказать, что если вы решили разработать что-то для .NET, то чаще всего вам не надо ходить и выбирать стек. Он известен

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

То есть выбор-то у вас конечно есть, но зачем его делать, если все лучшее - в топах Nuget-а и/или написано самим Microsoft?

Вам остается определиться с мелочами - использовать Automapper или нет, какой IoC-фреймворк взять и т.п.

41. .NET-код крутится в виртуальной машине. Для неё из сорцов генерится IL - промежуточный код. Это все знают. Однако IL можно писать руками

Не руками конечно, а программно. System.Reflection.Emit к вашим услугам. С ним вы можете наколбасить в памяти dll-ку и сохранить в файл

Умные люди (Castle.DynamicProxy например) используют оный для конструирования proxy-классов в рантайме. Достаточно занятно

43. У Microsoft есть Dynamics CRM. Если кратко - это такой SAP/1C, только от MS. Сам я под него не писал, но люди рассказывают что ад

Само собой, разработка под него ведется на C#/.NET

Со слов людей из бизнеса, его внедрение стоит как сбитый боинг. Зачастую то, что надо проще написать руками на .NET

(Я несколько дней тут имел наглость поработать, так что не писал. Звиняйте, продолжим жешь.)

44. Продолжая тему корп. продуктов MS: абсолютно крут Exchange Server. Тут тебе и почта с веб-интерфейсом, и контакты и календари и скайп

45. Свой apache у MS тоже есть. Называется IIS: Internet Information Services. Поставить его на вашу домашнюю винду, кстати, проще чем апач

Панель управления - Программы и компоненты - Включение или отключение компонентов Windows - Службы IIS - там найдете что надо - нажмите ОК

46. Для разработки на ASP .NET MVC со студией поставляется IIS Express - маленький IIS, который запускается по нажатию F5 сам

47. @muradovm меня опередил. Есть так же Sharepoint - как по мне, штука мутная и напоминает швейцарский нож, у которого грабли выдвигаются

@muradovm Если грубо обобщать - это нечто, которое совмещает в себе корпоративный портал, шеринг файлов, организацию личных кабинетов корп сотрудников

@muradovm Да еще вдобавок интегрируется в Office. Я с этой фиговиной знаком ну очень поверхностно. Свои задачи она решает, но для разработчиков - ад

48. Если вы хотите несложную CMS на C# в Joomla-стиле - вам понравится Orchard: https://t.co/iBiqNkMgaz

49. Да и вообще качните на досуге Web Platform Installer: https://t.co/sddgjfxmQu Там много чего интересного ставится в 1 клик, уверяю

50. Если вы - бешеный фанат Sublime-а, но вас не устраивает его платность - взгляните на Visual Studio Code https://t.co/l1fuZ39a35

VS Code has grabbed Twitter username that you dreamed about: @code

51. Надо написать что-то хорошее про .NET Core. Много надежд на версию 2 (пока не тыкал). Скажу лишь что оно действительно кроссплатформенно

Вот например мой Lattice, портированный на .NET Core, запущенный под бубунтой в VMWare. Оно поднялось за 3 минуты

Вообще тулсет пока по-прежнему бажноват (dotnet.exe периодически выписывает кренделя). Но он теперь console-friendly.

>