Что выбрать новичку: C# или F#

Чем различаются C# и F#, для чего они используются и что проще и перспективнее учить новичку.

Эта статья для тех, кто только выбирает свой первый язык программирования. Во время поисков вы могли встретить упоминания о C# и F#. У них много общего (в том числе и названия похожи), но и различий тоже достаточно. Рассказываем, как понять, какой из них лучше подходит именно вам.

C# и F# — это языки программирования из семейства .NET. Оба языка разрабатываются компанией Microsoft, одинаково компилируются и поддерживаются одними и теми же платформами. Даже производительность у них практически на одном уровне. Однако они всё равно достаточно сильно различаются.

Евгений Кучерявый

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


Отличия F# и C#

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

В C# используется императивная (англ. imperative — приказ, повелительное наклонение) парадигма. В ней программист пишет инструкции для компьютера, то есть отдает ему приказы. Чтобы делать это было удобнее, используются объекты — это называется объектно-ориентированным программированием:

  • Консоль (объект), выведи надпись (инструкция)!
  • Калькулятор, умножь числа!
  • Клиент, отправь запрос серверу!
  • Сервер, подключись к базе данных!

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

var x = 5 + 5; //Программа выполнит команду сложения и сохранит в переменную x сумму двух чисел
Console.WriteLine(x); //Программа обращается к объекту Консоль, чтобы он вывел значение переменной x. Эта инструкция выполняется, но никакое значение не сохраняется

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

В F# разработчик использует декларативную парадигму и функциональное программирование. В F# вместо инструкций — выражения, которые всегда возвращают какое-то значение. Разработчик не отдает приказы, а описывает проблему, способ ее решения (функцию) и ожидаемый результат. То есть нужно сказать программе, что делать, а решит задачу она сама.

C#

int Fac(int n)
{
	if(n < 2)
	{
		return 1;
	}
	else
	{
		return n * Fac(n - 1);
	}
}

F#

  
  
let rec fac n =
    if n < 2 then 1 
    else n * fac(n - 1)


В примере выше показано получение факториала в C# и F#. В обоих фрагментах кода есть конструкция if-else, которая позволяет изменять ход выполнения программы в зависимости от того, было ли соблюдено условие. В C# с помощью этой конструкции указываются какие-то действия (в данном случае используется оператор return, который возвращает значение), а в F# — значения, которые будут возвращены.

Для чего они используются

Оба языка можно использовать для разработки:

  • сайтов;
  • программ для компьютеров;
  • мобильных приложений;
  • игр;
  • скриптов и так далее.

В целом языки универсальны. Например, несмотря на то что работать с пользовательским интерфейсом лучше с помощью объектов, для этой задачи вполне подойдет и F#, потому что в нем тоже есть поддержка ООП.

Однако всё же есть задачи, когда стоит предпочесть тот или иной язык:

  • F# лучше использовать для написания бизнес-логики, которая требует серьезных вычислений (в том числе и для работы с Big Data и машинным обучением).
  • C# больше подходит для разработки интерфейсов, работы с графикой или же написания логики, в которой нужно работать с объектами. Например, функциональное программирование вряд ли подойдет для создания игры, потому что в ней много сущностей (персонажи, предметы, декорации). Именно поэтому среди разработчиков игр более популярен C#.

Кроме того, достаточно распространена практика, когда UI (пользовательский интерфейс) написан на C#, а бизнес-логика — на F#.

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

Что учить новичку

Несмотря на то что парадигмы различаются, новичкам одинаково легко учить и C#, и F#. Если человек никогда не программировал и еще не успел привыкнуть к объектно- или функционально-ориентированной разработке, то никаких проблем не будет. Наоборот, сложности могут возникнуть у тех, кто уже освоился с одной из парадигм и теперь видит написание приложений через определенную призму.

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

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

Если же вам больше по душе C#, то записывайтесь на курс «Профессия C#-разработчик» — там вы не только узнаете азы языка, но и поработаете над проектами, которые сможете добавить в портфолио.

Курс

Профессия C#-разработчик


130 часов — и вы научитесь писать программы на языке, созданном Microsoft. Вы создадите 5 проектов для портфолио, даже если до этого никогда не программировали. После обучения — гарантированное трудоустройство.

Хочешь получать крутые статьи по программированию?
Подпишись на рассылку Skillbox