Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > с чего начать?С или С++?


Автор: Torrero 14.11.2006, 14:11
Много уважаемые программисты!!!у меня к вам небольшой вопрос,но сначала предисловие:я тока поступил в универ,есть такой предмет у нас "программирование"...хотел начать самостоятельно учить,нашел книжку,начал читать,читал ровно до того когда увидел приведенный пример какйто программы и увидел что у него мало схожести с тем что мы учим...кароче выяснилось что мы учим не  С++ а просто С.Теперь сам вопрос:что мне делать найти книжку по С и начать с него или забить на него и проосто начать самому С++ учить...
   Подскажите плиз,очень нужен ваш совет!!! smile 
 З.Ы.очень прошу чтобы вы приводили аргументы,а не просто писали в 3-х словах...  smile 

Автор: chaos 14.11.2006, 14:21
Torrero, у нас в универе тоже читали Си, но мне было пофиг smile я все писал на С++ и препод всегда с интересом смотрел на различные 
Код

class
typename
cout << ..... << endl;
.....
 smile

Автор: Torrero 14.11.2006, 14:24
Цитата(chaos @ 14.11.2006,  14:21)
Torrero, у нас в универе тоже читали Си, но мне было пофиг smile я все писал на С++ и препод всегда с интересом смотрел на различные 
Код

class
typename
.....
 smile

понимаеш меня интересует понадобиться ли он вообще?или лучще забить на Си как в свое время в школе на паскаль 

Автор: chaos 14.11.2006, 14:27
С++ это же вроде как улучшеный Си так что.... делай выводы

Автор: Romikgy 14.11.2006, 14:49
Цитата(Torrero @  14.11.2006,  13:24 Найти цитируемый пост)
как в свое время в школе на паскаль

ну и зря , имхо настоящий программист должен знать не только С или С++ , но еще много чего!
имхо разница между С и С++ есть , но на начальных этапах освоения не сильно важна, и лучше идти от простого (С) к сложному (С++) и дальше, дальше, дальше

Автор: EvgenZ 14.11.2006, 14:58
Я начал сразу с С++ с нуля, тоесть первую прогу я написал в формате С++. Теперь я понимаю С++ и понимаю С, а тот кто пишет на С, не зная плюсов, нифига не понимает С++.

Автор: Romikgy 14.11.2006, 15:05
Цитата(EvgenZ @  14.11.2006,  13:58 Найти цитируемый пост)
а тот кто пишет на С, не зная плюсов, нифига не понимает С++. 

не факт!

Автор: Frage 14.11.2006, 15:23
На уровне "Hello world!" разницы нет практически никакой. Когда дойдет (на втором годе работы над большим проектом) вся мощь ООП, тогда и будет видна разница.   

Автор: Torrero 14.11.2006, 15:55
Народ а посоветуйте плиз хорошую книжку по С,для тех кто хочет начать с нуля!!!

Автор: Romikgy 14.11.2006, 16:21
Цитата(Torrero @  14.11.2006,  14:55 Найти цитируемый пост)
Народ а посоветуйте плиз хорошую книжку по С,для тех кто хочет начать с нуля!!! 

http://forum.vingrad.ru/topic-33456.html
Цитата(Frage @  14.11.2006,  14:23 Найти цитируемый пост)
Когда дойдет (на втором годе работы над большим проектом) вся мощь ООП, тогда и будет видна разница.    

имхо любой проект можно сделать и без ООП, но с ним проще 

Автор: Romikgy 14.11.2006, 17:02
http://proklondike.com/cpp0.html

Автор: JUmPER 14.11.2006, 17:13
по словам Джоэля Спольски, начинать надо с Си без плюсов

Автор: JackYF 14.11.2006, 18:02
JUmPER, ИМХО потом придется переучиваться многому...

Автор: Romikgy 14.11.2006, 18:06
Цитата(JackYF @  14.11.2006,  17:02 Найти цитируемый пост)
переучиваться

не пере- , а до- , имхо smile

Автор: JackYF 14.11.2006, 18:14
Нет, пере...
Например - объявление функций в стиле С:

Код

int func() int a, int b
{
 ...
}

Не помню точно, но что-то типа этого...

Абсолютно неприменимо в С++.

Я уверен, это не единственный пример...
В основном, конечно, доучиваться...

Но может кому-то не надо работать с потоками, файлами в старом стиле...

Автор: Любитель 14.11.2006, 18:21
В C99 принято использовать объявления, типичные для плюсов (хотя совместимость со старыми вроде остаётся).

Автор: MAKCim 14.11.2006, 18:38
Начинать надо с С++ - это факт, после С - трудно избавиться от С-ых привычек решения определенного круга задач, которые в С++ решаются по-другому (не скажу более эффективно, но нагляднее точно). В итоге получается и не С, и не С++, а что то среднее. Зная же С++, перейти на С не сложно, потому как С++-ые привычки не переносимы на С по объективным причинам  smile 

Автор: Kuvaldis 14.11.2006, 18:50
MAKCim, 
Цитата

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

Автор: MAKCim 14.11.2006, 19:04
Цитата

Не мог бы ты вкратце сию мысль пояснить? 

может быть не так выразился
Цитата

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

EQU
После С избавится от С-ого стиля программирования сложно, из-за чего происходит смешение языков С и С++, что, имхо, нехорошо

Автор: Rockie 14.11.2006, 21:48
Цитата(JUmPER @  14.11.2006,  17:13 Найти цитируемый пост)
по словам Джоэля Спольски, начинать надо с Си без плюсов

А еще Джоэль Спольски сторонник венгерской нотации и ярый противник использования исключений в программах smile

Автор: Romikgy 14.11.2006, 22:10
Цитата(JackYF @  14.11.2006,  17:14 Найти цитируемый пост)
Например - объявление функций в стиле С:

знаешь , когда я учил си (чистый) уже такого вызова ф_ций не было , а я начинал еще на турбо си 2.0 , под дос.

Цитата(MAKCim @  14.11.2006,  17:38 Найти цитируемый пост)
не скажу более эффективно, но нагляднее точно)

Согласен с MAKCim , но с одним отклонением , есть задачи которые эффективнее пишутся на С++, но есть задачи которые эффективнее пишутся на С,
т.е. для каждой задачи имхо делать выбор , хотя 'na эффективность и невелика smile 
Цитата(Kuvaldis @  14.11.2006,  17:50 Найти цитируемый пост)
Не мог бы ты вкратце сию мысль пояснить?

имхо простой пример работы со строками в чистом си, имхо, это char *, и все ф_ции это "внешне" описаные,
в С++ это класс и (почти ) все что надо уже есть в классе!
Цитата(MAKCim @  14.11.2006,  18:04 Найти цитируемый пост)
з-за чего происходит смешение языков С и С++, что, имхо, нехорошо 

может ты и прав, но на мой взгляд симбиоз, это лучше чем что то одно 
Одна голова хорошо , а две лучше (с) фолковые пиплы smile

Автор: FiMa1 15.11.2006, 11:11
Г.Шилдт начинает одну из своих книг по С++ с фразы: Эта книга подразумевает что вы уже знаете С. Если нет, то, пожалуйста, сначала выучите этот язык, а потом переходите к чтению этой книги.... smile 

Автор: Rodman 15.11.2006, 11:16
Цитата(FiMa1 @  15.11.2006,  11:11 Найти цитируемый пост)
Эта книга подразумевает что вы уже знаете С

Так точно... 

С++ можно начинать без С, но тогда а его изучение уйдет больше времени чем сначала выучить С а за ним С++..

Автор: FiMa1 15.11.2006, 11:55
Torrero, вы писали:
Цитата

понимаеш меня интересует понадобиться ли он вообще?или лучще забить на Си как в свое время в школе на паскаль  

Гради Буч отвечает: 
Цитата

«Объектно-ориентированный анализ и проектирование отражают ЭВОЛЮЦИОННОЕ, а не РЕВОЛЮЦИОННОЕ развитие проектирования; новая методология не порывает с прежними методами, а строится с учетом предшествующего опыта...
При попытках использовать такой язык, как С++, в качестве традиционного, алгоритмически ориентированного, мы не только теряем его внутренний потенциал — скорее всего результат будет даже хуже, чем при использовании обычного языка С...
Дать электродрель плотнику, который не слышал об электричестве, значит использовать ее в качестве молотка. Он согнет несколько гвоздей и разобьет себе пальцы, потому что электродрель мало пригодна для замены молотка». 

Автор: EvgenZ 16.11.2006, 10:37
Читая книжку "С++  для чайников" или "С++ с нуля" все равно дается структурное программирование, поэтому ИМХО учить по книге С незачем. 

Автор: JackYF 16.11.2006, 14:14
Цитата(FiMa1 @  15.11.2006,  11:55 Найти цитируемый пост)

«Объектно-ориентированный анализ и проектирование отражают ЭВОЛЮЦИОННОЕ, а не РЕВОЛЮЦИОННОЕ развитие проектирования; новая методология не порывает с прежними методами, а строится с учетом предшествующего опыта...
При попытках использовать такой язык, как С++, в качестве традиционного, алгоритмически ориентированного, мы не только теряем его внутренний потенциал — скорее всего результат будет даже хуже, чем при использовании обычного языка С...
Дать электродрель плотнику, который не слышал об электричестве, значит использовать ее в качестве молотка. Он согнет несколько гвоздей и разобьет себе пальцы, потому что электродрель мало пригодна для замены молотка». 


Интересно мне, что он (Гради Буч) имеет в виду по поводу потери эффективности? Желательно более-менее конкретный пример...

Автор: MAKCim 16.11.2006, 17:07
Цитата

есть задачи которые эффективнее пишутся на С++

Cкорее быстрее, имхо, а не эффективнее
Цитата

может ты и прав, но на мой взгляд симбиоз, это лучше чем что то одно 
Одна голова хорошо , а две лучше (с) фолковые пиплы

Не согласен
Я просто смысла не вижу выбирать, например, язык разработки - С++, а некоторые вещи писать на С. Если такая необходимость возникла, может не стоило выбирать С++?
Цитата

Г.Шилдт начинает одну из своих книг по С++ с фразы: Эта книга подразумевает что вы уже знаете С. Если нет, то, пожалуйста, сначала выучите этот язык, а потом переходите к чтению этой книги.... 

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

Автор: drLans 19.11.2006, 22:49
Советую читать книгу Х. Дейтела, П. Дейтела "Как программировать на C++".
Все ясно, понятно, структурировано.  smile 

Автор: Xenon 20.11.2006, 00:19
Kuvaldis,  ну, например, после перехода сишника на С++ он с упорством маньяка продолжает использовать макросы вместо const smile

Автор: Kuvaldis 20.11.2006, 00:56
Xenon, 
Цитата

Kuvaldis,  ну, например, после перехода сишника на С++ он с упорством маньяка продолжает использовать макросы вместо const smile

Ага, подсматривал за мной!!!! smile  (я уже отучился) smile 

Страуструп (знаете такого?)
Код

Чем лучше программист знает С, тем труднее будет для него при программировании
на С++ отойти от стиля программирования на С.  Так он теряет потенциальные 
реимущества С++. Поэтому советуем просмотреть раздел "Отличия от С" в справочном 
уководстве ($$R.18).  Здесь мы только укажем на те места, в которых использование
дополнительных возможностей С++ приводит к лучшему решению, чем программирование
на чистом С. Макрокоманды практически не нужны в С++: используйте const ($$2.5) 
или enum ($$2.5.1), чтобы определить поименованные константы; используйте inline 
($$4.6.2), чтобы избежать расходов ресурсов, связанных с вызовом функций; используйте
шаблоны типа ($$8), чтобы задать семейство функций и типов. Не описывайте
переменную, пока она действительно вам не понадобится, а тогда ее можно сразу
инициализировать, ведь в С++ описание может появляться в любом месте, где допустим
оператор. Не используйте malloc(), эту операцию лучше реализует new ($$3.2.6).  ВМЕСТО
realloc() ИСПОЛЬЗУЙТЕ vector (это только в третьем специальном издании написано) 
бъединения нужны не столь часто, как в С, поскольку альтернативность в структурах 
еализуется с помощью производных классов. Старайтесь обойтись без объединений, но
если они все-таки нужны, не включайте их в основные интерфейсы; используйте 
безымянные объединения ($$2.6.2).  Старайтесь не использовать указателей типа void*,
арифметических операций с указателями, массивов в стиле С и операций приведения. 
Если все-таки вы используете эти конструкции, упрятывайте их достаточно надежно в
какую-нибудь функцию или класс.  

P.S. Воть незаметно и 500 постов пришло...

Автор: Антоха 20.11.2006, 01:22
Цитата(Torrero @  14.11.2006,  15:55 Найти цитируемый пост)
Народ а посоветуйте плиз хорошую книжку по С,для тех кто хочет начать с нуля!!! 

http://openlib.org.ua/ru/books/id/12/
Как программировать на C    Авторы: Х. М. Дейтел, П. Дж. Дейтел
45 мегов правда, но книжка хорошая! smile И понятнее, чем затёртый до дыр Брайан Керниган и Деннис Ритчи(Язык программирования C). Кстати там тоже есть.
Цитата(MAKCim @  14.11.2006,  19:04 Найти цитируемый пост)
После С избавится от С-ого стиля программирования сложно, из-за чего происходит смешение языков С и С++, что, имхо, нехорошо 

Учите стихи, как говорила моя учительница по литературе, они развивают память smile Будете лучше помнить и реже будете путаться что С, а что С++! smile
Цитата(FiMa1 @  15.11.2006,  11:11 Найти цитируемый пост)
Г.Шилдт начинает одну из своих книг по С++ с фразы: Эта книга подразумевает что вы уже знаете С. Если нет, то, пожалуйста, сначала выучите этот язык, а потом переходите к чтению этой книги....

Во-во, именно эта фраза меня сразу и толкунла к тому чтобы изучать я сначала начал всётаки С. Это разумнее как мне кажется! Ну конечно, как говорилось выше, смотря для каких целей Ва  это нужно.
Цитата(Rodman @  15.11.2006,  11:16 Найти цитируемый пост)
С++ можно начинать без С, но тогда а его изучение уйдет больше времени чем сначала выучить С а за ним С++.. 

В самую точку! smile

Автор: JackYF 20.11.2006, 14:33
Цитата(Антоха @  20.11.2006,  01:22 Найти цитируемый пост)
С++ можно начинать без С, но тогда а его изучение уйдет больше времени чем сначала выучить С а за ним С++.. 

В самую точку! smile


ИМХО не согласен.

Автор: FiMa1 15.5.2007, 15:51
Доброе всем времечко суток!
Приношу извинения, если поднял, по общему мнению уже решенно-бородатый топик... Преследуемая цель - избежать появления новых вопросов на данную тему. Ориентировано на новичков.
Все сказанное ниже, разумеется имхо, разумеется оспариваемое...
Вопрос, поставленный топикстартером в принципе производный от вопроса "посоветуйте какую лучше книгу читать по программированию - С или С++?". Ниже будет понятно почему.
Но прежде ответьте мне на один простой вопрос - что я НЕ БУДУ знать о языке Си, если начну с изучения руководства по С++? Ответ только один - НИЧЕГО, в смысле, фактически, вы будете знать и язык Си! Почему? Да потому что язык С++ полностью впитал в себя язык Си (здесь улюлюканья), ну или почти полностью. Да назовите мне хоть одну книгу по С++, которая начиналась бы сразу же, к примеру, с тем "Классы", "Инкапсуляция", "Шаблоны типа и производные классы"..? Думаю вы затруднитесь назвать таковые.
Вот вам хоть содержание небезызвестной книги "Язык Си" под авторством КР:
--------------------------------------------------------------------------------
Глава 1. Обзор языка
1.1 Начнем, пожалуй
1.2 Переменные и арифметические выражения
1.3 Инструкция for
1.4 Именованные константы
1.5 Ввод-вывод символов
1.5.1 Копирование файла
1.5.2 Подсчет символов
1.5.3 Подсчет строк
1.5.4 Подсчет слов
1.6 Массивы
1.7 Функции
1.8 Аргументы. Вызов по значению
1.9 Символьные массивы
1.10 Внешние переменные и область видимости
--------------------------------------------------------------------------------
Глава 2. Типы, операторы и выражения
2.1 Имена переменных
2.2 Типы и размеры данных
2.3 Константы
2.4 Объявления
2.5 Арифметические операторы
2.6 Операторы отношения и логические операторы
2.7 Преобразования типов
2.8 Операторы инкремента и декремента
2.9 Побитовые операторы
2.10 Операторы и выражения присваивания
2.11 Условные выражения
2.12 Приоритет и очередность вычислений
--------------------------------------------------------------------------------
Глава 3. Управление
3.1 Инструкции и блоки
3.2 Конструкция if-else
3.3 Конструкция else-if
3.4 Переключатель switch
3.5 Циклы while и for
3.6 Цикл do-while
3.7 Инструкции break и continue
3.8 Инструкция goto и метки
--------------------------------------------------------------------------------
Глава 4. Функции и структура программы
4.1 Основные сведения о функциях
4.2 Функции, возвращающие нецелые значения
4.3 Внешние переменные
4.4 Области видимости
4.5 Заголовочные файлы
4.6 Статические переменные
4.7 Регистровые переменные
4.8 Блочная структура
4.9 Инициализация
4.10 Рекурсия
4.11 Препроцессор языка Си
4.11.1 Включение файла
4.11.2 Макроподстановка
4.11.3 Условная компиляция
--------------------------------------------------------------------------------
Глава 5. Указатели и массивы
5.1 Указатели и адреса
5.2 Указатели и аргументы функций
5.3 Указатели и массивы
5.4 Адресная арифметика
5.5 Символьные указатели функции
5.6 Массивы указателей, указатели на указатели
5.7 Многомерные массивы
5.8 Инициализация массивов указателей
5.9 Указатели против многомерных массивов
5.10 Аргументы командной строки
5.11 Указатели на функции
5.12 Сложные объявления
--------------------------------------------------------------------------------
Глава 6. Структуры
6.1 Основные сведения о структурах
6.2 Структуры и функции
6.3 Массивы структур
6.4 Указатели на структуры
6.5 Структуры со ссылками на себя
6.6 Просмотр таблиц
6.7 Средство typedef
6.8 Объединения
6.9 Битовые поля
--------------------------------------------------------------------------------
Глава 7. Ввод и вывод
7.1 Стандартный ввод-вывод
7.2 Форматный вывод (printf)
7.3 Списки аргументов переменной длины
7.4 Форматный ввод (scanf)
7.5 Доступ к файлам
7.6 Управление ошибками (stderr и exit)
7.7 Ввод-вывод строк
7.8 Другие библиотечные функции
7.8.1 Операции со строками
7.8.2 Анализ класса символов и преобразование символов
7.8.3 Функция ungetc
7.8.4 Исполнение команд операционной системы
7.8.5 Управление памятью
7.8.6 Математические функции
7.8.7 Генератор случайных чисел


Что из этого я НЕ БУДУ знать, начав с руководства по Си++???
Подавляющее большинство книг по С++ начнется с ключевых понятий, включая понятия переменных, констант, типов и операций с ними, указателей и т.д. и т.п. А разве не это же Вы будете изучать открыв и книгу по "чистому" Си?
Будут ли хоть какие-то отличия если я начну с руководства по Си, а не по по Си++ (ООП не в счет)?
  • Объявление вида
    Код
    int f();

    вы будете понимать как
    Код
    int f(...);

    То есть о типах агрументов ничего не известно. А в C++ как
    Код
    int f(void);

    То есть функция не имеет аргументов.
  • Память, к примеру, под 10 целых переменных Вы будете выделять так
    Код
    int *ip = (int *) malloc( 10 * sizeof( int ) );

    или так (что проще – выбирать вам ;))
    Код
    int *ip = (int *) calloc( 10, sizeof( int ) );
  • Вместо
    Код
    int *pi  = new int[10];

  • Выводить в стандартный поток вывода Вы будете так
    Код
    printf( "One plus two is %d\n", 1 + 2 );

    Вместо
    Код
    cout << "One plus two is " << 1 + 2 << endl;
Что проще – выбирать вам ;) и т.д.....

Здесь я не хочу выступать в роли ярого противника языка Си, более того, в силу некоторых обстоятельств, я сам с него начинал, однако я хочу указать, что всю функциональность языка Си вы сможете иметь либо в том же, либо в еще более улучшенном виде в Си++. Не стоит также забывать, что и malloc и printf вы также сможете использовать и в Си++. Потому что язык С++ полностью впитал в себя язык Си... Встретив malloc или printf где-то в коде вы легко найдете описание для этих функций и будете использовать их без каких-либо затруднений. Ведь к тому времени вы уже будете знать из руководства по СИ++ что такое функция в Си и как с ней работать.
Есть ли преимущества С++ по сравнению с Си (ООП не в счет)? Здесь повторю уже вышеприведенное, сказанное когда-то господином Страустрапом:
  • Макрокоманды практически не нужны в С++: используйте const или enum;
  • Чтобы определить поименованные константы; используйте inline;
  • чтобы избежать расходов ресурсов, связанных с вызовом функций; используйте шаблоны типа, чтобы;
  • Задать семейство функций и типов;
  • Не описывайте переменную, пока она действительно вам не понадобится, а тогда ее можно сразу инициализировать, ведь в С++ описание может появляться в любом месте, где допустим оператор;
  • Не используйте malloc(), эту операцию лучше реализует new;
  • Объединения нужны не столь часто, как в С, поскольку альтернативность в структурах реализуется с помощью производных классов;
  • Старайтесь не использовать указателей типа void*, арифметических операций с указателями, массивов в стиле С и операций приведения. Если все-таки вы используете эти конструкции, упрятывайте их достаточно надежно в какую-нибудь функцию или класс;
  • связывание в стиле С возможно для функции на С++, если она описана со спецификацией extern "C";
Даже если Вы сейчас многого не понимаете из вышеприведенных терминов, не трудно заметить, что в Си++ многое предстает в более безопасном виде, а это значит, что меньше времени Вы будете проводить в отладке...
Таким образом, друзья, моё имхо в том, что начинать надо с хорошей книги по Си++, по-моему мнению для новичка одной из таковых можно считать Х. М. Дейтел, П. Дж. Дейтел "Как программировать на C++" (вы сможете её найти в сети ;) или Г. Шилдт "Теория и практика C++".

Уфф, ну и накатал. Жду комментариев. Всем большое спасибо!

Автор: Daevaorn 15.5.2007, 15:55
Цитата(FiMa1 @  15.5.2007,  16:51 Найти цитируемый пост)
Что из этого я НЕ БУДУ знать, начав с руководства по Си++???

идеологию процедурного программирования.

Автор: FiMa1 15.5.2007, 16:06
Цитата(Daevaorn @ 15.5.2007,  15:55)
Цитата(FiMa1 @  15.5.2007,  16:51 Найти цитируемый пост)
Что из этого я НЕ БУДУ знать, начав с руководства по Си++???

идеологию процедурного программирования.

Материал из Википедии — свободной энциклопедии
Цитата
Процеду́рное программи́рование — это парадигма программирования, основанная на концепции вызова процедуры. Процедуры, также известны как подпрограммы, методы или функции (это не математические функции, но функции, подобные тем, которые используются в функциональном программировании). Процедуры просто содержат последовательность шагов для выполнения. В ходе выполнения программы любая процедура может быть вызвана из любой точки, включая саму данную процедуру.

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

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

Процедурные языки программирования Ада (язык общего назначения), Бейсик, Си, C++...

В новой версии Си++ не стало функций? Больше нет возможности повторного использования одного и того же кода из нескольких мест программы без его копирования? Теперь в Си++ это реализовано через использование goto? В нем больше нет модульности? Пожалуйста, не говори да...

Автор: adLucem 15.5.2007, 16:38
FiMa1, 

Откройте Страуструп Язык программирования С++, специальное издание параграф 1.6 страница 49 и прочитайте действительно авторитетное мнение, в котором вам доходчиво объяснят зачем нужен С и почему его учат.

Автор: JackYF 15.5.2007, 17:06
Лично я не понял цели этого длинного повествования.


FiMa1, кому ты и что хочешь доказать? Себе - пожалуйста.
С++-никам? Так они с тобой согласятся в большинстве.
С-никам? Так они будут дальше использовать только или почти С, потому что они к нему привыкли/он им больше нравится/личные предпочтения инструментов работы с консолью, файлами, памятью и т.п./нежелание переучиваться/они пишут ядро Линуха/ ит.д.

Автор: FiMa1 15.5.2007, 17:20
Цитата(adLucem @ 15.5.2007,  16:38)
Откройте Страуструп Язык программирования С++, специальное издание параграф 1.6 страница 49 и прочитайте действительно авторитетное мнение, в котором вам доходчиво объяснят зачем нужен С и почему его учат.

adLucem, спасибо! Я не раз перечитал этот пункт книги, прежде чем создавать пост..

Цитирую, для тех у кого нет под рукой издания:
"В качестве базового языка для С++ был выбран С, потому что он:
[1] является многоцелевым, лаконичным и относительно низкоуровневым языком;
[2] подходит для решения большинства системных задач;
[3] исполняется везде и на всем;
[4] стыкуется со средой программирования UNIX.
Но эти же описания, можно отнести и к Си++, т.к. Си стал базой Си++!

Скажу следующее, я НЕ ПРИЗЫВАЮ НЕ УЧИТЬ СИ! Об этом и не говорит сам Страустрап когда пишет "Чем лучше вы знаете С, тем труднее вам будет избежать программирования на С++"
"Язык Си остается подмножеством языка Си++" - стр. 45 того же руководства Страустрапа. Поэтому "Знание Си не является обязательным для из изучения Си++" пишет он на означенной Вами стр. 49.
Всемогущий Биарне не счел нужным развивать дискуссии на эту тему более. Однако, сказав, ключевую фразу ЯЗЫК СИ ОСТАЕТСЯ ПОДМНОЖЕСТВО ЯЗЫКА СИ++.
Вам придется учить Си в любом случае, иначе никак. Но нужно уствоить, что ВЫ БУДЕТЕ ЗНАТЬ СИ, и ВЗЯВ РУКОВОДСТВО ПО СИ++ (можно одно из вышеперечисленных). Из любого из таких руководств Вы получите знание Си и плавно начнете изучение языка Си++.

Добавлено через 6 минут и 55 секунд
Цитата(JackYF @ 15.5.2007,  17:06)
FiMa1, кому ты и что хочешь доказать? Себе - пожалуйста. С++-никам? Так они с тобой согласятся в большинстве.

Да, JackYF, в этом ты прав. Одной из целей я преследую самому разобраться в сабжевом вопросе.
Цитата
С-никам? Так они будут дальше использовать только или почти С, потому что они к нему привыкли/он им больше нравится/личные предпочтения инструментов работы с консолью, файлами, памятью и т.п.

А вот здесь прошу отличия "чистого" С от Си++ от Сишников в студию. Все отличия языков сводятся по большому счету к разницам реализации по работе с файлами, консолью, памятью на уровне отдельных функций. Не забываем, что эти все функции Си можно использовать в Си++.

Автор: Hurricane 15.5.2007, 17:49
Цитата

С-никам? Так они будут дальше использовать только или почти С, потому что они к нему привыкли/он им больше нравится/личные предпочтения инструментов работы с консолью, файлами, памятью и т.п.

Даже не в этом беда. Они будут и дальше _думать_ как в С. Передавать тип объекта в функцию и выполнять действия в зависимости от него. Их будет угнетать необходимость аксессоров и закрытых членов классов - ведь в С это все доступно. Они еще долго после перехода на С++ не будут пользоваться передачей по ссылке, заменяя ее передачей по указателю, проверяя его каждый раз на NULL и городя жуткие конструкции многоэтажных if'ов (хотел написать - элегантно решая их с помощью goto, но сейчас опять полетят гнилые помидоры  smile ), или плодить ненужные экземпляры объектов, передавая их копии. Прочитав чуть ли не в первый день изучения плюсов о перегруженных и виртуальных методах, они еще долго будут проектировать классы без их использования, или вставлять такие конструкции "просто так", "чтобы было". Спросите меня, откуда я это знаю.

Но несмотря на все это, если бы я еще раз проходил изучение языков с нуля, я бы опять начал с С  smile .

Автор: FiMa1 16.5.2007, 09:01
Цитата(Hurricane @ 15.5.2007,  17:49)
Но несмотря на все это, если бы я еще раз проходил изучение языков с нуля, я бы опять начал с С.

Моя позиция такова - да, безусловно, начинать надо с Си, но с подробной книгой по Си++ в руках. Что Вы выигрываете? Изучив Си, в первой половине книги, Вы плавно переходите к изучению Си++ из уст того же самого автора, а это значит, согласно изложению к которому Вы уже успели привыкнуть за время работы с книгой, т.е. изложению, по всей вероятности более уже для Вас понятному.
После того, как Вы осилите курс полностью, Вы можете открыть любое руководство по, так называемому "чистому" Си, и, перелистав его, ознакомиться с манерой работы с файлами, потоками вв/выв, памятью и т.д. в "чистом" Си. На этот момент времени Вы будете уже полностью подкованы и на знакомство с "чистым" Си у Вас уйдет не более недели. Т.о., по-моему мнению, такой подход позволит сэкономить уйму лишнего времени для новичка.
Спасибо всем и извините, если задел кого-то своими "умозаключениями".

Автор: adLucem 16.5.2007, 09:38
Цитата(FiMa1 @  16.5.2007,  07:01 Найти цитируемый пост)
начинать надо с Си, но с подробной книгой по Си++ в руках


Корень всех зол - преждевременная оптимизация.

Автор: nerezus 16.5.2007, 09:55
Цитата

Моя позиция такова - да, безусловно, начинать надо с Си, но с подробной книгой по Си++ в руках. Что Вы выигрываете? Изучив Си, в первой половине книги
 Мм, а я бы не стал покупать книгу с названием "C/C++". И купил я себе книгу только по C++. Естественно никаких scanf и т.д. там не описывается(и считаю это правильным). И никакой C там не описывается. Примеры таких книг: та же книга Страуструпа, Джесс Либерти и т.д.

Да и собственно библиотеки C++ лишены таких недостатков библиотек C, типа статичных переменных в функциях и т.д.

Автор: FiMa1 16.5.2007, 10:05
Цитата(adLucem @ 16.5.2007,  09:38)
Корень всех зол - преждевременная оптимизация.

Ок, тогда почему надо начинать именно с "чистого" Си? Хотя бы для того, что бы двигаться последовательно, скажете Вы? Но ведь и сам Си нельзя считать основой основ. Си вырос от Би, но Би вырос от A (в смысле ассемблера ;) В свою очередь, язык А появился в тот момент, когда надоело писать "программы" в двоичных кодах......
Таким образом, чтобы придерживаться истории развития языков и отследить это самое развитие, не упустив ни одного момента новичку логичнее начать с написания программ, как минимум, на ассемблере...
Опять же НЕ ГОВОРЮ, ЧТО АССЕМБЛЕРА ЗНАТЬ НЕ НУЖНО! Наоборот, его знать просто необходимо, хотя бы для лучшего понимания архитектуры ЦПУ и еще по 100 и одной важной причине. Но переходить к изучению Ассемблера нужно на более поздних этапах, начав с высокого уровня. Т.о. я сторонник движения от простого к сложному.

Автор: dizzy1984 16.5.2007, 12:45
Изучайте и то и другое! smile 

Автор: Vyacheslav 16.5.2007, 15:01
Цитата(Rockie @  14.11.2006,  21:48 Найти цитируемый пост)
А еще Джоэль Спольски сторонник венгерской нотации и ярый противник использования исключений в программах 

Тут кто-то примеры хотел о вредных привычках, перешедших от С? smile
Можно еще вспомнить, как при переходе с С на С++ больно бьет по рукам более строгая типизация С++.

Цитата(Антоха @  20.11.2006,  01:22 Найти цитируемый пост)
Во-во, именно эта фраза меня сразу и толкунла к тому чтобы изучать я сначала начал всётаки С. Это разумнее как мне кажется! Ну конечно, как говорилось выше, смотря для каких целей Ва  это нужно.

А я начинал с С ( С++ тогда  в СССР  был в ввиде экзотики типа С with classes) , а потом перешел на С++. И могу сказать, что если пред Вами нет задач, для которых нужен С, то ну его нафиг. Будет только мешать.


Автор: JackYF 16.5.2007, 15:03
Цитата(dizzy1984 @  16.5.2007,  12:45 Найти цитируемый пост)
Изучайте и то и другое! smile 


Кстати, тоже верно.

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

Автор: FiMa1 16.5.2007, 16:00
Цитата(JackYF @ 16.5.2007,  15:03)
Цитата(dizzy1984 @  16.5.2007,  12:45 Найти цитируемый пост)
Изучайте и то и другое! smile 

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

Если перечитать внимательно написанное мной, то будет понятно, что "Изучайте и то и другое" я подразумевал на протяжении всего своего повествования. ПОСТУПИТЬ ИНАЧЕ У ВАС И НЕ ПОЛУЧИТСЯ! Вы, по-любому должны изучить Си, но вопрос о последовательности, которую выбрать:
' "чистый" Си ' -> ' Си++ '
или
' Си как подмножество Си++ ' -> Си++.
Я за последний вариант. Кроме того, я указывал, что обязательно необходимо после этого перечитать и книгу по "чистому" Си, чтобы знать как некоторые из функциональностей реализованы в нём.

Автор: kirjanov 16.5.2007, 20:22
если крутиться вокруг kernel development то С++ ваще нафиг не сдался. 

Автор: nerezus 16.5.2007, 21:00
Цитата

если крутиться вокруг kernel development то С++ ваще нафиг не сдался. 
 А если вокруг прикладнухи, то C ваще нафиг не сдался. 

А все потому, что это разные языки.

Автор: FiMa1 17.5.2007, 11:56
Цитата(kirjanov @ 16.5.2007,  20:22)
если крутиться вокруг kernel development то С++ ваще нафиг не сдался.

Цитата
А если вокруг прикладнухи, то C ваще нафиг не сдался.

Учить только "чистый" Си или только Си++ - это уже совершенно другой вопрос. Мое мнение - нужно учить оба языка и, крайне желательно, также выучить ассемблер.
В целом же вышеприведенное изложение, как было указано, ориентированно на новичков. На данном этапе эти самые новички понятия не имеют с какой стороны подступиться к прикладнухе или, более того, kernel development. По-моему мнению, успешно пройдя весь курс ' Си как подмножество Си++ ' -> Си++ -> 'Чистый Си' -> Ассемблер, они смогут успешно справиться с любой из этих задач.

Автор: adLucem 17.5.2007, 12:12
FiMa1, А вы сами то выучили С или С++, вы кого-нибудь учили С или С++, вы вообще понимаете о чем говорите? Хватит разглагольствовать о путях и дорогах, в которых вы ничего не понимаете. любой академический план строится по схеме от простого к сложному и если академический план включает Ассемблер, С и С++, то изучаться они будут именно в таком порядке. Если академический план включает только С++, то только его и будут учить.

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

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

Автор: FiMa1 17.5.2007, 12:20
Цитата(adLucem @ 17.5.2007,  12:12)
FiMa1, А вы сами то выучили С или С++, вы кого-нибудь учили С или С++, вы вообще понимаете о чем говорите? Хватит разглагольствовать о путях и дорогах, в которых вы ничего не понимаете.

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

Автор: JackYF 17.5.2007, 14:35
Цитата(adLucem @  17.5.2007,  12:12 Найти цитируемый пост)
А вы сами то выучили С или С++, вы кого-нибудь учили С или С++, вы вообще понимаете о чем говорите?

Слишком резко, не находишь?

Цитата(adLucem @  17.5.2007,  12:12 Найти цитируемый пост)
сли академический план включает Ассемблер, С и С++, то изучаться они будут именно в таком порядке.


Если академический план будет включать все три дисциплины, то ты утверждаешь, что они непременно будут учиться в порядке "Ассемблер", затем "С", затем "С++". Я правильно тебя понял?

Автор: adLucem 17.5.2007, 14:56
Цитата(JackYF @  17.5.2007,  12:35 Найти цитируемый пост)
Слишком резко, не находишь?


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

Цитата(JackYF @  17.5.2007,  12:35 Найти цитируемый пост)

Если академический план будет включать все три дисциплины, то ты утверждаешь, что они непременно будут учиться в порядке "Ассемблер", затем "С", затем "С++". Я правильно тебя понял?


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

То же самое относительно аппаратуры (несколько утрировано):
1. Фундаментальные дисциплины
2. Архитектура
3. Периферия

Если быть более точным то программа идет следующим образом (касательно компьютерной инженерии):
1. Pascal
2. Assembler
3. C
4. C++
5. etc

Для программистов (связанные специальности изучают только С++ или VB, а на данный момент постепенно мигрируют в сторону .NET, в частности из-за преимуществ VB) программа зачастую не включает ни Ассемблера ни С (кроме системных программистов).

Автор: FiMa1 17.5.2007, 15:06
Цитата(adLucem @ 17.5.2007,  14:56)
мнение должно обосновываться источниками или опытом.

Да, опыта, действительно маловато. За ним, собственно, и приходят порой на подобные форумы (и если мои посты выглядели порой заносчиво, опять же извиняйте..). И из-за недостатка последнего (то бишь опыта) оставалось ссылаться на авторитетных авторов. Мнение г-на Страустрапа было указано, по-моему, оно не расходится с моим (по крайней мере понял позицию Страустрапа именно так).
В универе учил языки в последовательности Paskal -> Assembler x51. Факультет "Радиотехнический", специальность "Приборы и методы контроля качества и диагностики". После этого самостоятельного учил Си, сейчас по-тихоньку изучаю Си++. Незавимо от этого, считаю, что этот путь целесообразней было бы проходить в том порядке, к которому нас подводит г-н Страустрап (описано выше).

Автор: JackYF 17.5.2007, 15:09
Цитата(adLucem @  17.5.2007,  14:56 Найти цитируемый пост)
Вежливые люди - трусы


Если тебя наступили на ногу в трамвае, то в таком случае ты предлагаешь на него/нее обязательно наорать?

Абсолютно не согласен. Хотя это тема для отдельного обсуждения, ты прав.



Цитата(adLucem @  17.5.2007,  14:56 Найти цитируемый пост)

1. Pascal
2. Assembler
3. C


Что-то я не понял закономерности... Pascal легче, чем Ассемблер? Или С легче, чем Ассемблер?



Цитата(adLucem @  17.5.2007,  14:56 Найти цитируемый пост)
Да, если программа включает все три дисциплины (или более)

Ну вот. По моему реальному опыту (чему меня пытались/ются учить в моем "любимом" универе) мы учили вначале Pascal, затем С/С++, затем Ассемблер. Нестыковка. Прошлые курсы учили так же само, академический план по этим дисциплинам был тот же.

Автор: adLucem 17.5.2007, 15:21
Pascal дает азы программирования. Это чисто академический язык (из которого произвели коммерческого мутанта Delphi) и он дает возможность обучить теории программирования с минимальными затратами на изучение языка программирования, при этом давая очень широкие возможности в области написания программного обеспечения (опять же академического направления). Поэтому, например, в США Pascal является частью школьной программе и в университетах не используется. То есть он закладывает базовые понятия о программировании.


Цитата(JackYF @  17.5.2007,  13:09 Найти цитируемый пост)
Ну вот. По моему реальному опыту (чему меня пытались/ются учить в моем "любимом" универе) мы учили вначале Pascal, затем С/С++, затем Ассемблер. Нестыковка. Прошлые курсы учили так же само, академический план по этим дисциплинам был тот же.

Какая у вас была специальность (полное название)? Какой университет не имеет значения.

Автор: JackYF 17.5.2007, 15:35
Цитата(adLucem @  17.5.2007,  15:21 Найти цитируемый пост)
Какая у вас была специальность (полное название)

Почему была? И сейчас есть. В плане, что студент я.

Программное обеспечение автоматизированных систем.

Автор: adLucem 17.5.2007, 15:54
Цитата(JackYF @  17.5.2007,  13:35 Найти цитируемый пост)
Программное обеспечение автоматизированных систем

Если вы учите С++ в рамках курса объектно-ориентированное программирование, а Ассемблер позднее как системное программирование, то ситуация таже что и с Pascal - многие полагают, что С++ - это лучший пример объектно-ориентированного языка (?) и дают его раньше. Если вы учите в обратном порядке то в рамках каких дисциплин.

Я давал пример относительно инженерии (и системных программистов), поэтому чтобы рассматривать другие специальность нужно учитывать уйму особенностей (вплоть до директив Министерства).

Автор: Hurricane 17.5.2007, 16:21
Цитата(adLucem @  17.5.2007,  07:21 Найти цитируемый пост)
Pascal дает азы программирования. Это чисто академический язык (из которого произвели коммерческого мутанта Delphi) ... 

Это правда.
Цитата(adLucem @  17.5.2007,  07:21 Найти цитируемый пост)
...и он дает возможность обучить теории программирования с минимальными затратами на изучение языка программирования, при этом давая очень широкие возможности в области написания программного обеспечения (опять же академического направления). ... 

А это - спорный вопрос. Вы бы определились - либо "академический язык", либо "очень широкие возможности". Коммерческие продукты типа TurboPascal или Delphi эти широкие возможности имеют, академический вариант - скорее нет.
Цитата(adLucem @  17.5.2007,  07:21 Найти цитируемый пост)
...Поэтому, например, в США Pascal является частью школьной программе и в университетах не используется. То есть он закладывает базовые понятия о программировании.

А это - чушь. Я же вам не рассказываю, что изучают в школах и университетах Украины. Не рассказывайте и вы мне.  smile 

Автор: JackYF 17.5.2007, 18:34
Цитата(adLucem @  17.5.2007,  15:54 Найти цитируемый пост)
С++ - это лучший пример объектно-ориентированного языка (?) и дают его раньше.


Как раз объектно-ориентированное программирование нам еще нам еще "не давали". Короче, наши академические планы составлены не знаю кем. ИМХО.

Автор: FiMa1 17.5.2007, 18:55
Мда, не понятно мне только причем тут академический план, директивы Министерства.... Была процитирована позиция конкретного человека - Страустрапа! Потом пришел adLucem, ему, похоже, не указ даже столь авторитетные люди, ведь он академик, перечитываюший Ницше и к тому же не трус! Он не "молол ерунду", но рассказал об эфемерные замках и философии.....
Возможно, я и уступаю adLucem в опыте программирования и, как результат, сморозил немало глупостей, но, уж извините за оффтоп, скажу просто по-человечески: adLucem, Вы бы не так заносчиво на поворотах.

Автор: Romikgy 17.5.2007, 20:43
adLucem,  можно вопрос вы что преподавательв ВУЗе?

Автор: Daevaorn 17.5.2007, 20:46
А у нас в институте на первом курсе был pascal и то сквозь пальцы. И всё, больше ни программирования, ни компов вообще не было. Вот такsmile

Автор: nickless 17.5.2007, 21:00
У нас на первом курсе SML был (функциональный язык), на втором C++, но про ООП почти ничего не было (специализированные лекции правда есть), a те, кто сейчас на втором курсе, учат яву по книге "objects first" или что-то в этом роде и С/С++ у них в программе вообще не будет... это имхо просто неправильно, они же потом одного вида указателей боятся будут smile 

Автор: nerezus 17.5.2007, 21:26
Цитата

С++ - это лучший пример объектно-ориентированного языка
 Не факт ) В большинстве книг по ООП в качестве примера используют именно Java. Я даже специально открыл директорию с книгами по теории, чтобы в этом убедиться )

Цитата

Как раз объектно-ориентированное программирование нам еще нам еще "не давали".
 Если бы все знали только то, что им «давали», то никто бы нирена ничего не знал. То, что ты должен знать, ты выбираешь сам.
А препод наш в ООП имхо шарит примерно так же, как я в [придумать что-то невероятное]. Хотя системное он знает отлично.
P.S. А предыдущий препод на парах вообще читал что-то из серии «Java для чайников».

Автор: Lomir 17.5.2007, 22:27
У нас в универе на 1 семестре С++ как подмножество С, в Biulder'e и с формами.
На 2 семесте С++ типо как обьектное програмирование, тока до обьектного там как до китая... За весь семестр прошли всякие списки, перегрузку операторов и "наследование" (Тоже Biulder).
На 2 курсе Java (еще незнаю что будет толком).
Далее, после 2 курса идет специлизация и в зависимости от направления бывают или асм или ООП или что-то другое...
Более тупой программы чем у нас - пока невидел smile

П.С. А за изучение в таком порядке: С как подмножество С++ -> C++. Потом если понадобится можно бегло прочитать пару книжек по чистоку С.

Автор: Samotnik 17.5.2007, 22:27
Гы
А у нас так за 3 года прочитали лекции по C, C++, Visual C++, MFC, Java, SQL
Вод.
Но в итоге пришел к тому, что надо чтото одно выбирать, а все сразу учить не нужно. Просто не возможно афигенно шарить во всех языках!!!

Автор: JackYF 18.5.2007, 01:14
Цитата(nerezus @  17.5.2007,  21:26 Найти цитируемый пост)
Если бы все знали только то, что им «давали», то никто бы нирена ничего не знал. То, что ты должен знать, ты выбираешь сам.


Блин... Ну вроде же не зря я написал "не давали" в кавычках. Нет, таки нашелся человек smile Ну вроде бы я уже не первый раз на форуме, что-то писал, насчет чего-то мы спорили... Понятно, что 95% программистких знаний я добываю сам, вне универа. И уж тем более насчет ООП.

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

Цитата(Samotnik @  17.5.2007,  22:27 Найти цитируемый пост)
Просто не возможно афигенно шарить во всех языках!!! 


Ну офигенно шарить в одном языке тоже ой как нелегко smile

Автор: FiMa1 18.5.2007, 08:50
Цитата(nerezus @ 17.5.2007,  21:26)
А препод наш в ООП имхо шарит примерно так же, как я.

Вот именно, преподавателям (да и академикам), так же свойственно иногда ошибаться, ведь они тоже люди.
Сейчас прохожу курс Си++, разумеется, возникает много вопросов как у новичка. У преподавателя же не всегда находятся ответы (или нет времени на них, ведь время занятий ограниченно), и это нормально! (один дурак задаст столько вопрос, что ни один умный не ответит. Кто-то..). Тогда я прихожу сюда - на forum.vingrad.ru. И здесь в доходчивой и уважительной форме мне объяснят сложное на доступном языке. Здесь умные люди терпимы к глупостям новичков и стараются быть уважительны к ним и, поверьте, это отнюдь не признак трусости. Причем умный здесь не обязательно означает академик или проффессор, это может быть, к примеру, простой студент. Взять хоть и JackYF, который не раз давал новичкам очень полезные советы и при этом не спешил затоптать их.
Цитата
Lomir: П.С. Я за изучение в таком порядке: С как подмножество С++ -> C++. Потом если понадобится можно бегло прочитать пару книжек по чистоку С.

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

Автор: vinter 18.5.2007, 09:38
Цитата(Samotnik @  17.5.2007,  22:27 Найти цитируемый пост)
 C, C++, Visual C++, MFC, Java, SQL

из выше перечисленного списка, можно знать все языки, тем более что там их всего 4, три из которых похожи, а четвертый язык запросов - не так сложен.
у нас было так, первый курс был С, на втором был Асм, а потом куча разных предметов, которые к программированию отношения не имеют, но программки под них писать надо, т.е пошло само обучение. Кто-то там гоаворил что прогрпамма должна начинаться с асма, я так не считаю, мне асм как я зык думаю не пригодится но он дал мне, более ясную картину того что я делал на С, теже указатели, память и т.д. Сначала надо это прочувствовать на высоком уровне чтобы потом изучить глубже. А Pascal, я считаю вообще не нужен. 

Автор: nerezus 18.5.2007, 17:14
Цитата

тем более что там их всего 4, три из которых похожи
 Ну и чем похожи Java и C?  smile   smile

Автор: Daevaorn 18.5.2007, 17:26
Цитата(nerezus @  18.5.2007,  18:14 Найти цитируемый пост)
Ну и чем похожи Java и C?

синтаксисом чуть-чуть

Автор: nerezus 18.5.2007, 18:55
Daevaorn, синтаксисом или все-таки кейвордами? )
А так синтаксисом все современные ООП языки похожи ) и тут я бы сказал, что джава намного больше даже на паскаль по синтаксису похожа, чем на C.

Автор: Daevaorn 18.5.2007, 19:00
Цитата(nerezus @  18.5.2007,  19:55 Найти цитируемый пост)
 синтаксисом или все-таки кейвордами? )

они часть оного

Автор: MAKCim 18.5.2007, 19:25
каждой задаче свой язык
спор бесполезен

Автор: JackYF 19.5.2007, 00:46
Цитата(nerezus @  18.5.2007,  18:55 Найти цитируемый пост)
что джава намного больше даже на паскаль по синтаксису похожа, чем на C.


Не знаю, имхо на паскаль Java ничуть не похожа.

Автор: dizzy1984 21.5.2007, 07:14
Цитата(Daevaorn @  18.5.2007,  21:00 Найти цитируемый пост)
Цитата(nerezus @  18.5.2007,  19:55 )    
 синтаксисом или все-таки кейвордами? )    

они часть оного


Синтаксис и ключевые слова не связанные вещи.
Синтаксис - это набор правил написания, ключевые слова - зарезервированные слова, которые нельзя использовать в качестве идентификаторов.

Автор: Daevaorn 21.5.2007, 07:25
Цитата(dizzy1984 @  21.5.2007,  08:14 Найти цитируемый пост)
Синтаксис и ключевые слова не связанные вещи.Синтаксис - это набор правил написания, ключевые слова - зарезервированные слова, которые нельзя использовать в качестве идентификаторов.

ты хоть понял, что написал?smile

Автор: dizzy1984 21.5.2007, 07:58
Да, я понял.
Понял ли ты что ты писал? smile 

Автор: Daevaorn 21.5.2007, 08:08
Цитата(dizzy1984 @  21.5.2007,  08:58 Найти цитируемый пост)
Да, я понял.

трагично.
Цитата(dizzy1984 @  21.5.2007,  08:58 Найти цитируемый пост)
Понял ли ты что ты писал? 

абсолютно.

Автор: dizzy1984 21.5.2007, 08:22
Цитата(Daevaorn @  21.5.2007,  10:08 Найти цитируемый пост)
абсолютно.

Не слишком информативно, но ладно.

Поясню свою мысль.
Любой язык имеет алфавит, который состоит из символов.
Минимальный распозноваемый набор символов называется лексема.
Применимо к ЯП, лексема может быть ключевым словом.
Одновременно с алфавитом существуют также правила, в соответствии с которыми из символов строятся выражения.
Они формируют синтаксис языка.
Синтаксис не включает лексемы, следовательно синтаксис не включает ключевые слова...

Автор: nerezus 21.5.2007, 08:35
dizzy1984, мм, afaik, синтаксис включает в себя лексику и семантику и еще прочие радости )
т.е. тут не один смысл у слова )

Автор: dizzy1984 21.5.2007, 08:50
Цитата(nerezus @  21.5.2007,  10:35 Найти цитируемый пост)
dizzy1984, мм, afaik, синтаксис включает в себя лексику и семантику и еще прочие радости )
т.е. тут не один смысл у слова )

Неа чувак, smile  лексика и семантика - понятия одного уровня с синтаксисом.
Лексика это набор лексем, семантика - это "логика" выражения.
Не стоит мешать все в одну кучу.smile 
Так, скажем, выражение 
Код

/*a=*/3+2;

1)корректно с точки зрения синтаксиса (для С/C++)
2)но хромает с точки зрения семантики (результат никуда не записывается)
3)и содержит 4 лексемы "3", "2", "+", [edit] ; [/edit]

P.S Вообще сказать что синтаксис включает лексемы значит выдать с головой свое непонимание.

Автор: nerezus 21.5.2007, 09:07
Цитата

P.S Вообще сказать что синтаксис включает лексемы значит выдать с головой свое непонимание.
 почему ты так считаешь? ))
P.S. предвижу возможный вопрос. отвечу: Да, я писал транслятор. И интерпретатор тоже.

Автор: Daevaorn 21.5.2007, 09:45
Цитата(dizzy1984 @  21.5.2007,  09:22 Найти цитируемый пост)
Поясню свою мысль.Любой язык имеет алфавит, который состоит из символов.Минимальный распозноваемый набор символов называется лексема.Применимо к ЯП, лексема может быть ключевым словом.Одновременно с алфавитом существуют также правила, в соответствии с которыми из символов строятся выражения.Они формируют синтаксис языка.Синтаксис не включает лексемы, следовательно синтаксис не включает ключевые слова...

Ты пояснил так, что сам противоречишь себе. Символы и формируют лексемы, а следовательно и ключевые слова. И из этих слов строятся выражения. Они в свою очередь, по твоей же теории, подчиняются правилам, которые являются синтаксисом.
Ну  а если отойти от теории, то советую посмотреть стандарт языка С++, где во всех syntax notation'ах есть ключевые слова (было бы странно,если бы их там не было...smile )

Автор: dizzy1984 21.5.2007, 10:18
Противоречия нет.
Опять то же непонимание.
Моя мысль до тебя все же не дошла.
Если предложение на языке состоит из лексем и есть правила описывающие корректность использования лексем, то, несомненно, правила не могут быть описаны без использования лексем. Это так. Но вот утверждать что правила "включают" будет равносильно утверждению что ты, кушая утром кашу с помощью ложки эту ложку "включаешь". Вместо отношения "включения" здесь идет отношение "использование" и разница существенна.
Цитата(Daevaorn @  21.5.2007,  11:45 Найти цитируемый пост)
Ну  а если отойти от теории, то советую посмотреть стандарт языка С++, где во всех syntax notation'ах есть ключевые слова (было бы странно,если бы их там не было... )

То же самое. Они используются, но не содержатся.

Автор: Daevaorn 21.5.2007, 10:32
Цитата(dizzy1984 @  21.5.2007,  11:18 Найти цитируемый пост)
Противоречия нет.Опять то же непонимание.Моя мысль до тебя все же не дошла.

Цитата(dizzy1984 @  21.5.2007,  11:18 Найти цитируемый пост)
То же самое. Они используются, но не содержатся.

Спорить не буду. Биться о стену сомоуверенного заблуждения не люблю.

Автор: dizzy1984 21.5.2007, 10:49
Цитата(Daevaorn @  21.5.2007,  12:32 Найти цитируемый пост)
Спорить не буду.

Не спорь, не стоит
Цитата(Daevaorn @  21.5.2007,  12:32 Найти цитируемый пост)
Биться о стену сомоуверенного заблуждения не люблю

Тогда и я биться не стану, поберегу голову.

Автор: Artemios 21.5.2007, 11:44
Цитата(adLucem @  17.5.2007,  13:12 Найти цитируемый пост)
FiMa1, А вы сами то выучили С или С++, вы кого-нибудь учили С или С++, вы вообще понимаете о чем говорите? Хватит разглагольствовать о путях и дорогах, в которых вы ничего не понимаете. любой академический план строится по схеме от простого к сложному и если академический план включает Ассемблер, С и С++, то изучаться они будут именно в таком порядке. Если академический план включает только С++, то только его и будут учить.

То, что спускает нам МинОбр в качестве плана -- зачастую такой бред...

Цитата(dizzy1984 @  21.5.2007,  09:22 Найти цитируемый пост)
Синтаксис не включает лексемы, следовательно синтаксис не включает ключевые слова...

Да.
любой ЯП -- это формальный язык.
Формальный язык определяется формальной грамматикой -- тройкой множеств -- терминальные "символы", нетерминальные, правила вывода.
Формальный язык -- это множество всех терминальных цепочек, выводимых из заданной грамматики.
Под синтаксисом же формального языка обычно понимают не корректное множество терминальных цепочек (лексем), а саму "структуру" языка -- нетерминалы и правила вывода. 
Два языка изоморфны при существовании изоморфизма (взаимнооднозначного соответствия) между соответствующими множествами терминалов, нетерминалов, правил. Легко заметить, что эти языки хоть и представлены, как различные множества терминальных цепочек, но сами цепочки строятся по одним и тем же правилам, то есть синтаксис (структура) один и тот же (с точностью до изоморфности). Как пример -- операторные скобки в различных ЯП -- могут представляться различными наборами терминальных символов, но синтаксически это одни и те же операторные скобки.
Для ЯП  в основном изоморфизмов не наблюдается, чаще всего пересечения и включения. Так, Pascal до появления в нем элементов ООП я бы назвал подмножеством C.

Автор: Vyacheslav 21.5.2007, 12:54

Цитата(JackYF @  17.5.2007,  15:09 Найти цитируемый пост)
По моему реальному опыту (чему меня пытались/ются учить в моем "любимом" универе) мы учили вначале Pascal, затем С/С++, затем Ассемблер

У Вас очень грамотные преподаватели.  Виртовский паскаль являясь весьма строгим языком приучает к дисциплине программирования. После него голова уже не пойдет пойдет кругом от свободы С и этой свободой будут пользоваться достаточно обоснованно, не превращая  код в кашу .
Поэтому, если бы я составлял программы обучения, то при необходимости изучить процедурыные языки я бы предложил именно таку последовательность Pascal ->C
Что касается С++, то он сам по себе довольно строго типизированный язык и вполне самодостаточен.
Поэтому ООП можно начинать с него. И если нет других подводов для изучения С, то его просто можно пропустить. И я соглашусь с Страструпом, что предварительное хорошее знание С  при изучении С++  это скорее помеха, чем преимущество.

Автор: JackYF 21.5.2007, 16:17
Цитата(Vyacheslav @  21.5.2007,  12:54 Найти цитируемый пост)
У Вас очень грамотные преподаватели. 

На эту фразу могу только улыбнуться smile.

Цитата(Vyacheslav @  21.5.2007,  12:54 Найти цитируемый пост)
Виртовский паскаль являясь весьма строгим языком приучает к дисциплине программирования. После него голова уже не пойдет пойдет кругом от свободы С и этой свободой будут пользоваться достаточно обоснованно, не превращая  код в кашу .


Мне паскаль ничего не дал, кроме отвращения. Что после Бейсика, что после С/С++. Так что мое имхо с этой фразой несогласно.



Автор: dizzy1984 21.5.2007, 16:47
Цитата(Artemios @  21.5.2007,  13:44 Найти цитируемый пост)
Под синтаксисом же формального языка обычно понимают не корректное множество терминальных цепочек (лексем), а саму "структуру" языка -- нетерминалы и правила вывода. 

О чем и речь. 
Как я сказал вначале - синтаксис и ключевые слова не связанные вещи.
Цитата(Artemios @  21.5.2007,  13:44 Найти цитируемый пост)
 Легко заметить, что эти языки хоть и представлены, как различные множества терминальных цепочек, но сами цепочки строятся по одним и тем же правилам, то есть синтаксис (структура) один и тот же (с точностью до изоморфности).

Т.е могут быть 2 одинаковых синтаксиса работающих с разными лексемами, чего не может быть если бы лексемы были частью синтаксиса.
Но ведь г-н Daevaorn никогда не ошибается.
Модераторы не умеют ошибаться, а если и делают это - тут же признают свою ошибку.

Автор: Vyacheslav 21.5.2007, 19:41
Цитата(JackYF @  21.5.2007,  16:17 Найти цитируемый пост)
Мне паскаль ничего не дал, кроме отвращения. Что после Бейсика, что после С/С++. Так что мое имхо с этой фразой несогласно.

Да ради бога smile   
 Бейсик? smile  Язык, цель которого была только в одном - привлечь к программированию непрофессионалов. Это если вы это о VB.  

Ну а  если Ваша фраза касается классического Бейсика, то делаю вывод, что Вы в программировании так ничего и не поняли smile Либо не писали на этом Бейсике. Вариант выбирайте сами.
Во-всяком случае упоминание Бейсика в данном контексте выглядит весьма забавно.

Кстати о С/C++. Нет такого языка smile Есть процедурный язык С  и есть язык ООП С++.   И про фразу классика о С как подмножества С++ лишний упоминать на данный момент не имеет смысла. Да было время, когда С++ был   "С with classes", "классная" надстройка в котором реализовывалось с помощью препроцессора, но это время давно прошло. Возможно оно придет опять:поговаривают же о необходимости вернуть C/C++ compatibility на уровне стандартов. Но пока этого нет.  
И Страструп о "языке С/C++" высказался весьма однозначно. Вернее высказался о тех, кто считает, что существует такой язык
Цитата

There is no language called "C/C++". The phrase is usually used by people who don't have a clue about programming (e.g. HR personnel and poor managers). Alternatively, it's used by people who simple do not know C++ (and often not C either). 

smile

Так что еще раз повторюсь. Если Вы не собираетесь заниматься процедурным  программированием, то можно смело начинать с С++.
Если же знания о процедурном программировании Вам необходимы( а они необходимы в любом случае), то лучше начинать обучение  с Pascal. 
Начинать изучение процедурного языка с "С" глупо. Слишком много там сделано для того, чтобы нарушать правила, а не соблюдать.  Плата за полную свободу. Следовательно для начала эти правила должны сформироваться в голове. Вот Pascal как раз и предназначался для этого: учиться  программировать правильно. 

Цитата(JackYF @  21.5.2007,  16:17 Найти цитируемый пост)
На эту фразу могу только улыбнуться 

Снисходительно?  Над Виртом тоже.?   Если Вы не в курсе, Вирт создавал Pascal исключительно  в целях обучения  студентов программированию. Но язык оказался настолько хорошим, что получил довольно широкое распространение.  И не  вина языка, что сменилась мода и на смену процедурному програмированию  пришел ООП. 


Автор: Samotnik 21.5.2007, 20:30
гы
тема интересная, ну что я могу сказать по этому поводу.  Каг я считаю:
Если хош быть си програмерам, то нуна начинать с простого си, затем как подучил нуна передвигаться(обязятельно) на обьектно-ориентированное программирование т.е. си++. Т.к. практика показывает, када устраиваешся на работу, то на собеседовании спрашивают именно по этому виду прогр-ния(популярностью пользуются вопросы типа: наследование, вирт. наследование, вирт функции, подсчитать колво байт при обьявлении в классе  переменных, методов, ну и тд)
Вод.
Затем если хош программировать под винду то нуна переходить на  MFC а лучше всего на .NET, C#, там идет чистое программирование под виндос.
Вод.
Популярностью пользуется так же джава, но это как говориться совсем другая история.....

Автор: zkv 21.5.2007, 20:57
Цитата(Samotnik @  21.5.2007,  20:30 Найти цитируемый пост)
Если хош быть си програмерам,

Цитата(Samotnik @  21.5.2007,  20:30 Найти цитируемый пост)
нуна передвигаться(обязятельно) на обьектно-ориентированное программирование т.е. си++.

??
или я недопонял что то в вашем "сленге"?

Цитата(Samotnik @  21.5.2007,  20:30 Найти цитируемый пост)
MFC а лучше всего на .NET, C#, там идет чистое программирование под виндос

задумался что же такое "чистое программирование под виндос". 
Цитата(Samotnik @  21.5.2007,  20:30 Найти цитируемый пост)
Популярностью пользуется так же джава, но это как говориться совсем другая история.....

Спасибо, что не стали рассказывать другую историю smile

Поддерживаю точку зрения, что начинать нужно с Паскаля.  smile

Автор: Xenon 21.5.2007, 21:19
zkv, а почему с Паскаля-то? Я, видимо, вообще не разбираюсь, раз мне кажется, что все равно ... Просто, на мой взгляд, начав с С/С++ перед тобой другие горизонты открываются, ибо много С-подобных языков, на которые попроще будет переходить человеку знающему С/С++, а не Паскаль ... А по-сути одно и тоже smile По крайней мере я не считаю себя ущербным программистом только потому, что я сразу начал с С++. Единственное, до этого был VB, который помог привлечь к программированию в те далекие года (лет 15 было), правда я быстро забросил. Но если бы даже и не было VB в моей жизни, то ничего бы не случилось ... все было бы также smile

Автор: zkv 21.5.2007, 21:38
Цитата(Xenon @  21.5.2007,  21:19 Найти цитируемый пост)
zkv, а почему с Паскаля-то? 

во-первых он не такой "страшный" синтаксисом для новичка как С/ С++ smile
во-вторых:
Цитата(Vyacheslav @  21.5.2007,  12:54 Найти цитируемый пост)
Виртовский паскаль являясь весьма строгим языком приучает к дисциплине программирования.


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

Еще хуже, по моему, обучаться процедурному программированию на С++ (такое бывает smile, судя по тому же Центру Помощи), когда чел использует конструкции типа cout<<"Hello world!"; и когда его спрашиваешь, а что такое cout, он резонно заявляет, что это оператор вывода, а на начальном этапе, ты ему при всем желании не сможешь объяснить, что cout - это глобальный объект класса ostream, а в этом классе перегружен оператор побитового сдвига влево и  т.д. 

Потом, когда человек будет готов к изучению ООП,  думаю не столь важно, какой именно язык изучать - C++/C#/Java/Delphi и пр.

Автор: Xenon 21.5.2007, 21:40
zkv, просто, сужу по себе, у меня таких вопросов не возникает и я себя не считаю гением, конечно же ... Просто нужно брать хороший учебник и учить, перечитывая главу 2-3 раза. Тогда уже точно не будешь считать cout << одним большим оператором вывода smile Везде стараться надо.
А ты сам с чего начинал и вообще какая хронология изучения языков у тебя?

Автор: skyboy 21.5.2007, 21:53
у меня дорога лежала так: Бейсик "Микроша"(комп такой был советский) -> Паскаль -> Delphi. Потом уже был С++ и Java. Исходя из своего опыта, полностью согласен с мнением "для обучения Паскаль - лучше" smile

Автор: zkv 21.5.2007, 22:24
Цитата(Xenon @  21.5.2007,  21:40 Найти цитируемый пост)
А ты сам с чего начинал и вообще какая хронология изучения языков у тебя? 

smile 
самая первая вычислительная машина, попавшая в мои руки - советский калькулятор МК51 (вроде эта модель, хотел в инете фото найти - не получилось), ограничение в 100 шагов и рассчет таких операций как sin и cos по нескольку секунд давали неплохой стимул к оптимизации, с Бейсиком после этого не составило труда разобраться, потом Паскаль, изучил до уровня написания "тетриса" под ДОС, вскользь прошелся по Асму (мог написать простейшую программку для реального режима процессора на masm), чуть чуть Фортрана (77-й вроде) - помогал товарищу сдавать экзамен smile, сейчас изучаю С++ (попутно пытаясь применять знания на практике), естественно "за компанию" знакомишься с С smile

Автор: Xenon 21.5.2007, 22:47
zkv, а если бы начал сразу с паскаля что-нибудь изменилось бы? smile

Автор: Anikmar 21.5.2007, 22:56
Цитата(zkv @  21.5.2007,  22:24 Найти цитируемый пост)
самая первая вычислительная машина, попавшая в мои руки - советский калькулятор МК51 

Вам повезло - с современной техники начинали. Я начинал с Б3-21. 60 команд, регистры только в стеке (вернее даже не в стеке а по кольцу крутятся).  smile 

Автор: Artemios 21.5.2007, 23:19
Цитата(dizzy1984 @  21.5.2007,  17:47 Найти цитируемый пост)
Т.е могут быть 2 одинаковых синтаксиса работающих с разными лексемами, чего не может быть если бы лексемы были частью синтаксиса.
Но ведь г-н Daevaorn никогда не ошибается.
Модераторы не умеют ошибаться, а если и делают это - тут же признают свою ошибку.

dizzy1984, полегче на поворотах. Для математика это естественно: отождествлять изоморфные элементы, абстрагироваться от частностей. Но не все же математики. А программист-нематематик видит перед собой синтаксис языка, заданный в конкретной БНФ. И видит всё те же "конкретные до невозможности" терминалы, как элементы БНФ. И что ему еще остается думать?

Цитата(zkv @  21.5.2007,  22:38 Найти цитируемый пост)
изучение следует начинать с процедурного программирования, и я с этим согласен

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

Автор: Xenon 21.5.2007, 23:38
А может лучше все учить поступательно? smile Хотя ООП, все-таки, наверное, лучше потом ... Ну в нормальных учебниках по С++ примерно так и идет - сначала базовые понятия, процедурное программирование, а затем только ООП

Автор: nerezus 22.5.2007, 07:12
Хм, а почему не учить бы сразу то, что нужно? )

Я вот жадею, что начал с C, а не с C++ =\

Автор: JackYF 22.5.2007, 09:40
Цитата(Vyacheslav @  21.5.2007,  19:41 Найти цитируемый пост)
Бейсик? smile  Язык, цель которого была только в одном - привлечь к программированию непрофессионалов. Это если вы это о VB.  

Ну а  если Ваша фраза касается классического Бейсика, то делаю вывод, что Вы в программировании так ничего и не поняли smile Либо не писали на этом Бейсике. Вариант выбирайте сами.
Во-всяком случае упоминание Бейсика в данном контексте выглядит весьма забавно.


Под Бейсиком имелось в виду и QBasic 4.5, и VB 6.0.
Вывод о том, что в программировании я ничего не понял - вот это забавно. smile


Цитата(Vyacheslav @  21.5.2007,  19:41 Найти цитируемый пост)
Снисходительно?  Над Виртом тоже.?   Если Вы не в курсе, Вирт создавал Pascal исключительно  в целях обучения  студентов программированию. Но язык оказался настолько хорошим, что получил довольно широкое распространение.


Нет, не снисхотидельно. Вообще-то, если заглянуть назад, то улыбнулся я над фразой "У вас очень грамотные преподаватели".
Если по математике и сходным наукам хороших преподавателей у нас действительно много, то по программированию их почти нет.
Вирт тут вообще ни при чем. Не его же вина, что мне не нравится Паскаль. А фразу про "язык оказался настолько хорошим" я уже где-то слышал.

Но это я от темы отвлекся, извините за оффтоп.

Автор: MAKCim 22.5.2007, 13:08
Цитата(nerezus @  22.5.2007,  07:12 Найти цитируемый пост)
Хм, а почему не учить бы сразу то, что нужно? )

 smile 

Автор: bsa 22.5.2007, 15:05
Поддерживаю тех, кто считает, что начинать надо с Си, а не С++. Хотя, полностью согласен, что некоторое время работы на паскале (в школе, например) перед изучением Си только на пользу пойдет.
Но, хочу отметить, что большой опыт работы на языке Си вредит изучению С++. Поэтому считаю, что между изучением Си и С++ не должно быть большой паузы.

Кому интересно моя история такова: BASIC -> Z80 ASM -> PASCAL -> X86 ASM ->C -> C++ Builder -> C++

К сожалению, структура билдера так развращает, что назвать "это" C++, язык не поворачивается.

И еще раз повторяю. Имея большой опыт работы на Си (или на билдеровском С++), обучиться С++ очень тяжело. По себе знаю.

Автор: Rockie 22.5.2007, 16:06
Цитата(nerezus @  22.5.2007,  07:12 Найти цитируемый пост)
Хм, а почему не учить бы сразу то, что нужно? )


nerezus, к сожалению не всегда знаешь, что тебе нужно)


Автор: Hurricane 22.5.2007, 18:04
Цитата(Rockie @ 22.5.2007,  08:06)
Цитата(nerezus @  22.5.2007,  07:12 Найти цитируемый пост)
Хм, а почему не учить бы сразу то, что нужно? )


nerezus, к сожалению не всегда знаешь, что тебе нужно)

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

Это я к чему? Начиная с какого-то времени (опыта), язык становится больше инструментом, а на первый план выходит проектирование, дизайн. Если он удачный - тогда и код писать легко, если нет - там и отличное знание языка мало помогает, приходится все по ходу переделывать или разные извраты городить.

Я совсем недавно на этом форуме, но уже вижу, что добрая половина вопросов в разных разделах - что-то типа "как с помощью средств языка бороться с плохим дизайном". Подход ИМХО изначально неправильный и почти никогда не дающий решение проблемы.

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

Автор: nerezus 22.5.2007, 21:16
Цитата

ришлось программировать на Perl, подвернулась просто ну очень хорошая работа.
 Подвернулась 1 раз — подвернется и еще, но в более радужных вариантах. Я бы не стал кодить на языке, к которому у меня отвращение.

Цитата

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

Автор: Hurricane 22.5.2007, 22:02
Цитата(nerezus @  22.5.2007,  13:16 Найти цитируемый пост)
Цитата

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

 Подвернулась 1 раз — подвернется и еще, но в более радужных вариантах. Я бы не стал кодить на языке, к которому у меня отвращение.

 smile  Как это там было? "Любовь приходит и уходит, а кушать хочется всегда"? Можно и всю жизнь прождать, и ничего не подвернется. А можно попытаться выйти на новый более высокий уровень, и в знаниях-опыте, и в работе.

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

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

Цитата(nerezus @  22.5.2007,  13:16 Найти цитируемый пост)
В том то и прикол, что надо наметить цель и идти к ней. А не лишь пытаться это сделать.(фраза откуда-то из НЛП   )

Разницу улавливаешь? У тебя ключевое слово - "идти", а у меня - "наметить". Ничуть не умаляя важности слова "идти".  smile 

Автор: Vyacheslav 23.5.2007, 18:38
Цитата(bsa @  22.5.2007,  15:05 Найти цитируемый пост)
Поддерживаю тех, кто считает, что начинать надо с Си, а не С++.

Цитата(bsa @  22.5.2007,  15:05 Найти цитируемый пост)
Имея большой опыт работы на Си , обучиться С++ очень тяжело. По себе знаю. 


И как первая фраза согласуется со второй?  smile Или Вы сами наступили на грабли и сейчас тяните других за собой?

Цитата(bsa @  22.5.2007,  15:05 Найти цитируемый пост)
К сожалению, структура билдера так развращает, что назвать "это" C++, язык не поворачивается.


smile А мне както совсем опыт работы на С++ Builder не мешал знать С++. Наоборот, помогал, освободить мозги от нудного создания интерфейса и сосредоточить  усилия непосредственно на функционале

Добавлено через 4 минуты и 44 секунды
Цитата(Hurricane @  22.5.2007,  18:04 Найти цитируемый пост)
Поэтому выскажу крамольную мысль - может быть есть смысл фокусироваться не на изучении тонкостей языков, а на основах дизайна?

Предлагаете плохой стиль программирования лечить дизайном? smile

Автор: JackYF 23.5.2007, 18:58
Цитата(Vyacheslav @  23.5.2007,  18:38 Найти цитируемый пост)
Предлагаете плохой стиль программирования лечить дизайном? smile


Лучше сразу делать все в лучшем свете, и все.



Цитата(bsa @  22.5.2007,  15:05 Найти цитируемый пост)
К сожалению, структура билдера так развращает, что назвать "это" C++, язык не поворачивается.

Тут +1. Билдер развращает за счет того, что содержит кучу не ANSI-расширений и ключевых слов вне стандарта. Доками по тому же Билдеру явно приветствуется такой код, а потом оказывается, что ведь функционал, даже не имеющий к GUI никакого отношения, зависит от VCL. Чего только AnsiString стоит.

Цитата(Vyacheslav @  23.5.2007,  18:38 Найти цитируемый пост)
И как первая фраза согласуется со второй? 

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

Цитата(Vyacheslav @  23.5.2007,  18:38 Найти цитируемый пост)
сосредоточить  усилия непосредственно на функционале

Кстати, а функционал пишете в зависимости от VCL или без оной?

Автор: Vyacheslav 23.5.2007, 20:24
Цитата(JackYF @  23.5.2007,  18:58 Найти цитируемый пост)
Кстати, а функционал пишете в зависимости от VCL или без оной?

Вы считаете, что в VCL не позволяет использовать STL и свои "чистые классы"? Для того чтобы написать программу у меня все есть: стандарт, который определяет, все то , что не касается расширений, и документация по VCL и расширениям, в которой кстати четко заявлено, что не следует путать С++ классы с VCL классами, ибо это совершенно разные вещи  и в некторых случаях они ведут себя по разному.

Цитата(JackYF @  23.5.2007,  18:58 Найти цитируемый пост)
Тут +1. Билдер развращает за счет того, что содержит кучу не ANSI-расширений и ключевых слов вне стандарта

Стандарт не запрещает  расширения smile . 
Беда не в том, что есть расширения, которые облегчают процесс программирования и предназначены для в основном поддержки парадигмы визуального программирования.. Беда в том, что есть люди, которые кроме  этого облегченного процесса не желают ничего знать глубже. Но причем тут Билдер? Не виноваты же автомобили, за то, что некоторые  из нас разучились бегать. Я полагаю, что количество хороших программистов в процентоном отношении во времени  постоянно. Просто  остальные , те которые особо не вникали, во времена  царствования командной строки и MultiEdit  ставновились просто  программистами, что называется, так себе, а во времена , когда программа может быть создана путем пары кликов,  становятся ламерами-кликальщиками. По-моему , большой разницы между ними нет. 
И если человек, перед тем, как воспользоваться различными "подпорками", научится программировать правильно, то  эти "подпорки" просто послужат повышению эффективности  работы, а код написанный им будет безупречен, неважно, что они использует VCL или MFC.
Если же этот базис в свое время не был получен, то есть вероятность, что программист так  и останется "xромым". Но в каждом конкретном случае это зависит от человека.
Но  я, например, утверждаю следущее. Что если Вы изучаете самостоятельно процедурное программирование, то "С"  не "подвинет" Вас писать правильно, а Pascal - "подвинет", ибо для того и создавался этот строгий язык.  То же самое и  ООП и С++. Взявшись за чистый С++, Вы возможно и научитесь писать правильно даже , если это С++Builder.  Но если обучение начнется с клепания форм на том же С++Builder, то вероятность того, что Вы правильно будет создавать свои программы, ичпользуя парадигму ООП будет резко стремиться к нулю.
 




Автор: bsa 23.5.2007, 21:43
Я нисколько не умоляю достоинств Билдера. Это лучшая среда быстрого создания оконных приложений под Windows (а может и вообще) из виданных мною. Но. Лично мне знакомство с ним навредило. Так как сначала (после Си) у меня был "C with classes" (это borland c++ 3.1), а затем я перешел на этот билдер. А в билдере в основном именно процедурное программирование идет (хотя эти процедуры являются методами класса формы).
Короче. Считаю, что знакомство с билдером для неокрепшего программистского ума вредно. А для профессионала - это отличный инструмент.

Автор: JackYF 24.5.2007, 01:59
Цитата(Vyacheslav @  23.5.2007,  20:24 Найти цитируемый пост)
Вы считаете, что в VCL не позволяет использовать STL и свои "чистые классы"?

Нет, конечно. Но многие пишут в зависимости от VCL и думают, что так и надо и это есть С++. А потом - бац, в других средах ничего не работает...

Цитата(Vyacheslav @  23.5.2007,  20:24 Найти цитируемый пост)
Беда в том, что есть люди, которые кроме  этого облегченного процесса не желают ничего знать глубже.

Тут +1.

Цитата(Vyacheslav @  23.5.2007,  20:24 Найти цитируемый пост)
И если человек, перед тем, как воспользоваться различными "подпорками", научится программировать правильно, то  эти "подпорки" просто послужат повышению эффективности  работы, а код написанный им будет безупречен, неважно, что они использует VCL или MFC.
Если же этот базис в свое время не был получен, то есть вероятность, что программист так  и останется "xромым". Но в каждом конкретном случае это зависит от человека.

Тоже +1. Но! Ежели изначально писать под консоль, например, то намного меньше вероятность, что программист (если не бросит свое дело) станет кликальщиком по формам.


Цитата(Vyacheslav @  23.5.2007,  20:24 Найти цитируемый пост)
Но  я, например, утверждаю следущее. Что если Вы изучаете самостоятельно процедурное программирование, то "С"  не "подвинет" Вас писать правильно, а Pascal - "подвинет", ибо для того и создавался этот строгий язык. 

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

Цитата(Vyacheslav @  23.5.2007,  20:24 Найти цитируемый пост)
Но если обучение начнется с клепания форм на том же С++Builder, то вероятность того, что Вы правильно будет создавать свои программы, ичпользуя парадигму ООП будет резко стремиться к нулю.

Чистый +1.

Цитата(bsa @  23.5.2007,  21:43 Найти цитируемый пост)
Но. Лично мне знакомство с ним навредило.

В этом вопросе у меня двойственность... с одной стороны, и мне тоже довольно-таки навредило. В вопросах знания языка и стандартной runtime lib. С другой стороны, сейчас это хороший инструмент (вернее, изученная мною часть) у меня в кармане для Rapid Application Development, и бывает, что он оказывается полезным.

Автор: FelikZ 24.5.2007, 22:45
Torrero, если тебе действительно важно и нужно то, что лучше - учи C++,
если же надо просто хорошо учится универе выучи "C" и не парь себе моск с C++... 


Вы страшные люди! Зачем так человека нагрузили! Человек просто спросил:
что мне делать найти книжку по С и начать с него или забить на него и проосто начать самому С++ учить...
А вы сделали из мухи слона! Ну и что, что он написал объяснить ему не в трех словах - что теперь читать ему
всю историю C и C++?


Автор: adLucem 25.5.2007, 16:49
Цитата(Vyacheslav @  23.5.2007,  18:24 Найти цитируемый пост)
Стандарт не запрещает  расширения


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

Цитата(Vyacheslav @  23.5.2007,  18:24 Найти цитируемый пост)
"С"  не "подвинет" Вас писать правильно, а Pascal - "подвинет"


Да, и вполне логично, что академический язык учит, а промышленный не предназначен для этого.

-------------------------------

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

Причем С и С++ принципиально используются в различных областях. С на данный момент является "переносимым ассемблером", в то же время С++ большей частью используется как ООП язык.

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

Также С++ стал успешным и заложил фундамент успеха Java, C# и так далее благодаря тому, что сам не был "чистым" ООП языком, на что также указывает Страуструп, говоря что С++ реализует ряд парадигм (включая структурную, процедурную, объектно-ориентированную и так далее), то есть он полностью включает подмножество С, но не является его конкурентом.

Следствием этого является, что на данный момент С является одной из парадигм, реализуемой С++. Поэтому в общем случае можно начинать изучение именно С++, если рассматривать его как многоцелевой язык и в дальнейшем специализироваться в отдельных областях (например, при необходимости низкоуровневого программирования изучать С, при  необходимости высокоуровневого программирования STL и boost, при необходимости полного перехода к парадигме ООП - Java или C#).

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

Автор: JackYF 25.5.2007, 17:00
Цитата(adLucem @  25.5.2007,  16:49 Найти цитируемый пост)
Да, и вполне логично, что академический язык учит, а промышленный не предназначен для этого.

Мдя. Опять не согласен.

Автор: Vyacheslav 25.5.2007, 18:00
Цитата(adLucem @  25.5.2007,  16:49 Найти цитируемый пост)
Стандарт это набор фиксированных требованию к тому к этот стандарт выполняет

А я что то утверждал другое? 
Цитата

A conforming implementation may have extension, provided they do not alter the behavior of any well-formed programm. Implementations are required to diagnose programs that use such extension that are ill-fomed according to this International Standard.



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