Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Религиозные войны > Что лучше изучать С,С++ или С# ?


Автор: Samuil 6.10.2006, 04:46
Привет!
Хочу начать изучать С, не знаю что выбрать: С,С++,С# я с ними вообще не знаком, расскажите плиз в чем у них отличия, Буду искренне благодарен smile 

Автор: Daevaorn 6.10.2006, 08:14
Samuil, 
Кратко:
С - язык уже достатчно старый, в основном сейчас для системного программирования применяется
С++ - тоже не мололодой, но развивающийся и дающий большие возможности для программиста
С# - новый язык внедояемы Microsoft. Применяется для разработки под платформу .NET. Вобрал в себя много достоиинст как С++, так и Java. Очень перспективный.

Выбирать для освоения можно любой, изходя из потребностей.
Ссылки:
http://ru.wikipedia.org/wiki/%D0%A1%D0%B8_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29
http://ru.wikipedia.org/wiki/C%2B%2B
http://ru.wikipedia.org/wiki/C_Sharp

Автор: EvgenZ 6.10.2006, 09:25
Как говорил мне препод, С# - это плагиат JAVA, если знаешь Java, то знаешь C#

Автор: Samuil 6.10.2006, 10:31
А .Net для чего нужен?, И мне нужен такой язык чтоб под систему и под смарты можно было б писать что посоветуете?

Автор: keksus 6.10.2006, 10:33
Сами языки, Java и C#, действительно очень похожи. В тоже время выучить непосредственно язык времени много не занимает и толку много не дает. Надо освоиться хотя бы со стандартными библиотеками, а они, увы, различаются достаточно сильно, не говоря уже про кучу технологий, на них основанных.

Добавлено @ 10:35 
.NET это виндовоз. А C++ и Java языки переносимые.

Автор: BreakPointMAN 6.10.2006, 10:49
Цитата(keksus @  6.10.2006,  11:33 Найти цитируемый пост)
.NET это виндовоз. 

Не только... smile Уже.

Автор: Daevaorn 6.10.2006, 13:33
Цитата(Samuil @  6.10.2006,  11:31 Найти цитируемый пост)
И мне нужен такой язык чтоб под систему и под смарты можно было б писать что посоветуете? 

Тогда С# для тебя в самый раз

Автор: MAKCim 6.10.2006, 15:01
Цитата

А C++ и Java языки переносимые. 

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

Не только... 

Пока разработчик не будет продвигать продукт на другие платформы говорить об его идентичности продуктам сторонних разработчиков не приходится. Я хочу сказать что в .NET под M$ будут появляться новые возможности, которых просто не будет долгое время в других реализациях (Mono, dotGNU, ...), а это уже не гуд
Цитата

расскажите плиз в чем у них отличия, Буду искренне благодарен

Ну С - процедурный язык без поддержки на уровне синтаксиса ООП
С++ - мультипарадигменный язык, включающий множество возможностей для написания программ в разных стилях, более типобезопасный чем С + поддержка, как и С, практически на всех платформах
C# - один из языков .NET. По синтаксису схож с С/С++. В остальном они различаются (специфика платформы .NET)

Я бы выбрал С/С++ & Java

Автор: reCoder 6.10.2006, 16:48
Цитата

Я бы выбрал С/С++ & Java


Поддерживаю.



Вообщем, друг мой, выберай C++. Начинай его осваивать, и все остальные языки будут легче в изучении. Зная C/C++ как основу это большой плюс, темболее хорошо владеть C++ это хорошее качество. Это показывает твое понимание технологии программирования.

После этого уже можешь выбирать отрасль уже, например между C# и Java. Я конечно за Java.

Удачи  smile 

Автор: Samuil 7.10.2006, 04:19
Спасибо большое, дело в том в java2SE и java2ME я программирую, но этого моло smile , и надо браться за изучение Си!

Автор: MAKCim 7.10.2006, 10:06
Цитата

и надо браться за изучение Си! 

Тогда С++, если припрет в UNIX программировать -> C (можно и на С++, но С - роднее  smile ). Мое мнение С учить после С++

Автор: Exception 7.10.2006, 22:43
А почему ты решил, что "надо изучать Си"? С# куда ближе к той же Яве, чем к С/С++. Так что почему бы тебе не остановиться на Яве?

Автор: Samuil 8.10.2006, 15:44
Java в смартах имеет намного меньше возможностей чем Си предложение,
в Windows не идет без JRE, а Си идет везде!

Автор: MAKCim 8.10.2006, 15:44
Цитата

ак что почему бы тебе не остановиться на Яве? 

Цитата

Спасибо большое, дело в том в java2SE и java2ME я программирую, но этого моло


Автор: Samuil 9.10.2006, 18:08
ТО что можно сделать на си то нельзя сделать на java и наоборот, В таком случае зачем нам учится?

Автор: mr.DUDA 9.10.2006, 18:17
Цитата(Samuil @  9.10.2006,  18:08 Найти цитируемый пост)
ТО что можно сделать на си то нельзя сделать на java и наоборот, В таком случае зачем нам учится?

Дедушка Ленин вам завещал учиться, вот почему.
эх, молодёжь, молодёжь  smile 

З.Ы. холивар "Java vs. NET" уже кстати давно закончился. Решили, что жаба делает дотнет за счёт кроссплатформенности и open source, а дотнет делает жабу за счёт тесной связки с сервисами виндовоза (не им. ввиду windows services, а сервисы вообще - технологии доступа к данным, WMI, WinAPI etc.). А так в принципе одно и то же (C# и Java - почти близнецы... почти). Посему, решили что и то и другое - те же яйца только с разных сторон. Аминь.

Автор: Xenon 9.10.2006, 18:40
mr.DUDA, сейчас начнется ... ты с яйцами так не шути smile

Автор: Samuil 10.10.2006, 10:46
Не я не говорю конкретно насчет Си№ а вообще о Си smile 

Автор: mr.DUDA 10.10.2006, 11:38
Цитата(Samuil @  10.10.2006,  10:46 Найти цитируемый пост)
Не я не говорю конкретно насчет Си№ а вообще о Си

Что-то я не понял: как можно смешивать Си-подобные языки в одну кашу ? Ведь тогда и между Java, C#, PHP и C++ разницы нет.

Автор: Samuil 13.10.2006, 22:17
Ну извините просто нис одним из си подобных я даже близко не знаком smile 

Автор: 02077461 16.10.2006, 12:14
Сначала определись для чего тебе нужен язык. Изучать язык для того, что бы изучать бессмысленно.
Если ты хочешь привыкнуть к логике, то наверное идеально было бы начать с Pascal. Если ты хочешь программировать "для смартов" то для создания приложений а-ля jNotepad подойдет тебе и Java.
Язык это всего лишь унструмент, нужна цель. Могу тебе сказать, если есть вермя, займись расширением кругозора, и тогда не будут возникать вопросы, типа чем бы занятся.

Автор: Exception 19.10.2006, 04:03
Изучи brainfuck тогда уж.
PS Просто все си-подобные языки похожи друг на друга только синтаксисом, и сравнивать их - это как сравнивать лампочку и шкаф.

Автор: bytes 8.11.2006, 23:18
С/C++ ...потом Ява! smile

Автор: alir 10.11.2006, 14:47
Цитата
Что лучше изучать С,С++ или С#

Вот как раз в такой последовательности и изучай. smile  К такому пути подвигает политика MS.

Автор: Sun 10.11.2006, 15:21
Цитата(alir @  10.11.2006,  11:47 Найти цитируемый пост)
Вот как раз в такой последовательности и изучай. smile  К такому пути подвигает политика MS. 

Нет, M$ больше любит продвигать путь QBasic\VBasic\VBasic.Net  smile Была бы их воля - закосили бы давно и С и С++ (скоро закосят). C# - это просто продвинутый бейсик  smile В .Net 3.0 уже появились конструкции
Код

var intArr = new[] {1,2,3,4} ;

Вам это ничего не напоминает?  smile 

Автор: Exception 10.11.2006, 17:59
Цитата(Sun @  10.11.2006,  16:21 Найти цитируемый пост)
В .Net 3.0 уже появились конструкции

var intArr = new[] {1,2,3,4} ;

Вам это ничего не напоминает?


1) В C# 3.0. Это будет .NET 3.5 (да-да, я тоже считаю их именование версий идиотским).

2) Вообще-то, это пишется так:

Код

var intArr = {1, 2, 3, 4} ;


3) Этот код не значит, что переменная не имеет типа, просто компилятор сам его вычисляет на основе присваиваемого выражения. IntelliSense работает как с нормально объявленной переменной.

4) Type inference (это так называется) не нужно применять где попало. В C++ есть перегрузка оператора =, и что, это плохо? Да, если ты её применяешь где попало, ничего хорошего не выйдет. А применять с умом её тебе никто не запретит. Например, если тип длинный и состоит из кучи вложенных generic-ов (а ля IEnumerable<Foo<Bar>>), а также для поддержки анонимных типов.

P.S. Кстати, как данная конструкция связана с бейсиком и каким именно?

Автор: Sun 10.11.2006, 21:24
Цитата(Exception @  10.11.2006,  14:59 Найти цитируемый пост)
P.S. Кстати, как данная конструкция связана с бейсиком и каким именно?

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

VT_EMPTY    [V]   [P]    nothing
VT_NULL    [V]   [P]    SQL style Null
VT_I2    [V][T][P][S]    2 byte signed int
VT_I4    [V][T][P][S]    4 byte signed int
VT_R4    [V][T][P][S]    4 byte real
VT_R8    [V][T][P][S]    8 byte real
VT_CY    [V][T][P][S]    currency
VT_DATE    [V][T][P][S]    date
VT_BSTR    [V][T][P][S]    OLE Automation string
VT_DISPATCH    [V][T][P][S]    IDispatch *
VT_ERROR    [V][T]   [S]    SCODE
VT_BOOL    [V][T][P][S]    True=-1, False=0
VT_VARIANT    [V][T][P][S]    VARIANT *
VT_UNKNOWN    [V][T]   [S]    IUnknown *
VT_DECIMAL    [V][T] [S]    16 byte fixed point
VT_I1    [T]    signed char
VT_UI1    [V][T][P][S]    unsigned char
VT_UI2    [T][P]    unsigned short
VT_UI4    [T][P]    unsigned short
VT_I8    [T][P]    signed 64-bit int
VT_UI8    [T][P]    unsigned 64-bit int
VT_INT    [T]    signed machine int
VT_UINT    [T]    unsigned machine int
VT_VOID    [T]    C style void
VT_HRESULT    [T]    Standard return type
VT_PTR    [T]    pointer type
VT_SAFEARRAY    [T]    (use VT_ARRAY in VARIANT)
VT_CARRAY    [T]    C style array
VT_USERDEFINED    [T]    user defined type
VT_LPSTR    [T][P]    null terminated string
VT_LPWSTR    [T][P]    wide null terminated string
VT_FILETIME    [P]    FILETIME
VT_BLOB    [P]    Length prefixed bytes
VT_STREAM    [P]    Name of the stream follows
VT_STORAGE    [P]    Name of the storage follows
VT_STREAMED_OBJECT    [P]    Stream contains an object
VT_STORED_OBJECT    [P]    Storage contains an object
VT_BLOB_OBJECT    [P]    Blob contains an object
VT_CF    [P]    Clipboard format
VT_CLSID    [P]    A Class ID
VT_VECTOR    [P]    simple counted array
VT_ARRAY    [V]    SAFEARRAY*
VT_BYREF    [V]    void* for local use

В бэйсик это безобразие очень активно используется. Насчет .NET 3.5 врать не буду (пока его не щупал). Но моё чутье подсказывает что это одного поля ягода. 

Ты кстати уверен что тип определяется только во время компиляции и не может быть определен во время выполнения? Неужто конструкции вида
Код

var foo(var v)
{
  return DoSomething(v);
}

невозможны?

Автор: Sun 10.11.2006, 22:07
Почитал про var и понял что это все-таки не Variant. Похоже во время выполнения программы ему подсунуть неизвестный тип не удасться. Видимо это действительно как и было заявлено тип для анонимных классов. Тогда респект! Снимаю шляпу  smile 

Автор: unsigned 21.12.2006, 00:52
ИМХО для начинающего освоить сначала С и по практиковаться на нем,
а С++ это разширенные С ,так что его изучение пойдет ка по маслу веслом!

Автор: nerezus 21.12.2006, 09:15
Цитата

а С++ это разширенные С ,так что его изучение пойдет ка по маслу веслом! 
 Что за бред? Это совершенно другой язык, и их ничего не связывает кроме синтаксиса!

Автор: MAKCim 21.12.2006, 14:32
Цитата

Что за бред? Это совершенно другой язык, и их ничего не связывает кроме синтаксиса!

В большинстве случаев совместимость снизу-вверх есть

Автор: SergeCpp 21.12.2006, 16:48
http://www.research.att.com/~bs/sibling_rivalry.pdf

http://www.research.att.com/~bs/new_learning.pdf

Bjarne Stroustrup

Автор: nerezus 21.12.2006, 21:36
Цитата

В большинстве случаев совместимость снизу-вверх есть 
 Снизу вверх - это от С к С++ или наоборот?  smile 
Я сначала С++ учил, а только потом С =)

Если считать, что от С к С++, то это же просто потому, что у них общая часть синтаксиса =)
Но подходы то к программированию в корне разные  smile 

Автор: mr.DUDA 21.12.2006, 23:01
Цитата(Sun @  10.11.2006,  21:07 Найти цитируемый пост)
Почитал про var и понял что это все-таки не Variant. Похоже во время выполнения программы ему подсунуть неизвестный тип не удасться. Видимо это действительно как и было заявлено тип для анонимных классов. Тогда респект! Снимаю шляпу

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

Автор: MAKCim 21.12.2006, 23:15
Цитата

Снизу вверх - это от С к С++ или наоборот?

в большинстве случаев сырцы на С компилируются С++-компилятором
используя extern "C" можно использовать либы, написанные на С

Добавлено @ 23:16 
Цитата

Я сначала С++ учил, а только потом С =)

имхо, так и надо делать

Автор: Выхухоль 9.10.2008, 17:41
Цитата

ИМХО для начинающего освоить сначала С и по практиковаться на нем,
а С++ это разширенные С ,так что его изучение пойдет ка по маслу веслом! 


Могет запоздало но все таки скажу... товарищ Либерти писал (цитировать не буду) шо  изучать С перед С++ не просто не желательно..а вообщем не канающе..

Начет выбора языка: в твоем случае, если я правильно понял лучше те юзать С++, так как .NET нуно ставить на винду (В XP ее нэт, а это я вам скажу сино впаривает с внедрением приложений) , естесно если ты опять тот же С++ не будешь юзать как С++.NET

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

Автор: QryStaL 9.10.2008, 17:58
http://reddevnews.com/news/print.aspx?editorialsid=10250

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)