Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Выбор языка программирования для новичка  (Прочитано 47555 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Sova777

  • Участник
  • *
  • Сообщений: 208
    • Просмотр профиля
    • Несколько слов о NetBeans C/C++ Pack'е
Re: Выбор языка программирования для новичка
« Ответ #120 : 11 Августа 2008, 17:13:23 »
>А код факториала где?
Использовал библиотеку gmp

>И что с выводом на экран будет?
xxxxxx> gcc fact.c -lgmp
xxxxxx> time -p ./a.out
.............
.............
real 2.14
user 0.55
sys 0.00
xxxxxx> time -p ./a.out > /dev/null
real 0.55
user 0.55
sys 0.00

>А если фибоначчи посчитать?
mpz_fib_ui
« Последнее редактирование: 11 Августа 2008, 17:41:41 от Sova777 »
Пользователь OpenSolaris 2008.11, Ubuntu 8.10, Windows XP. Mac OS X не нравится, стараюсь не использовать.

Оффлайн bigboris

  • Активист
  • *
  • Сообщений: 250
    • Просмотр профиля
Re: Выбор языка программирования для новичка
« Ответ #121 : 11 Августа 2008, 19:16:22 »
Вот именно, библиотеку. Без библиотеки слабо. А на Scheme сам вычислительный код без блевотек хоть факториал, хоть фибоначчи пишется влет в несколько строк. Рекурсия, функциональное программирование!
« Последнее редактирование: 11 Августа 2008, 19:32:25 от bigboris »

Оффлайн S.Tokarev

  • Активист
  • *
  • Сообщений: 415
    • Просмотр профиля
Re: Выбор языка программирования для новичка
« Ответ #122 : 11 Августа 2008, 19:36:41 »
Вот именно, библиотеку. Без библиотеки слабо. А на Scheme сам вычислительный код без блевотек хоть факториал, хоть фибоначчи пишется влет в несколько строк. Рекурсия, функциональное программирование!
Рекурсия почти у всех языков есть.

Оффлайн Sova777

  • Участник
  • *
  • Сообщений: 208
    • Просмотр профиля
    • Несколько слов о NetBeans C/C++ Pack'е
Re: Выбор языка программирования для новичка
« Ответ #123 : 11 Августа 2008, 20:14:44 »
>Без библиотеки слабо.
Нет.
>Рекурсия, функциональное программирование!
Единственное "достоинство" Scheme в данном случаи это оперирование бесконечными числами из коробки. Эту возможность можно достаточно легко реализовать и принять в стандарт C++. Но это просто никому не нужно. А чем плохи библиотеки?
Пользователь OpenSolaris 2008.11, Ubuntu 8.10, Windows XP. Mac OS X не нравится, стараюсь не использовать.

Оффлайн Kwah

  • Старожил
  • *
  • Сообщений: 1442
  • Ubuntu 17.10
    • Просмотр профиля
Re: Выбор языка программирования для новичка
« Ответ #124 : 11 Августа 2008, 23:26:56 »
Вот именно, библиотеку. Без библиотеки слабо. А на Scheme сам вычислительный код без блевотек хоть факториал, хоть фибоначчи пишется влет в несколько строк. Рекурсия, функциональное программирование!
Угу, а также какой-нибудь фтп-сервер или СУБД - тоже в пару строк... Да чего тут мелочиться-то, в несколько строк всё, что пожелает безумный заказчик... Сказочник.

Оффлайн bigboris

  • Активист
  • *
  • Сообщений: 250
    • Просмотр профиля
Re: Выбор языка программирования для новичка
« Ответ #125 : 12 Августа 2008, 03:38:20 »
>Без библиотеки слабо.
Нет.
>Рекурсия, функциональное программирование!
Единственное "достоинство" Scheme в данном случаи это оперирование бесконечными числами из коробки. Эту возможность можно достаточно легко реализовать и принять в стандарт C++. Но это просто никому не нужно. А чем плохи библиотеки?
Думать отучают. Я на таких программистов-библиолюбов насмотрелся. Алгоритм решения квадратного уравнения хрен напишут, зато гуяют по самое немогу из библиотек.
А реализовать можно и на ассемблере все что угодно, тем более что был такой даже объектно-ориентированный у Борланда.

Оффлайн Sova777

  • Участник
  • *
  • Сообщений: 208
    • Просмотр профиля
    • Несколько слов о NetBeans C/C++ Pack'е
Re: Выбор языка программирования для новичка
« Ответ #126 : 12 Августа 2008, 11:16:43 »
>Думать отучают.
А то что Scheme умеет манипулировать бесконечными числами думать не отучает? Таже gmp библиотека умеет складывать, умножать и т.д. большии числа. Если бы я вместо mpz_fac_ui использовал mpz_mul_ui было бы лучше? И я бы стал "думающим" программистам?

Попробовал я написать с нуля функцию реализующую вычисление факториала. К сожалению она работает очень медленно (26 секунд для 100000!, хотя 10000! она считает почти мгновенно). Такие вещи, конечно, написать сразу эффективно непросто. Набросок кода:
#include <stdio.h>
#include <stdlib.h>

#define MAX_BIG_VALUE 1000000000

struct BigInt {
    unsigned long long* value;
    unsigned long length;
};

void big_init(struct BigInt* big_int, unsigned long long value) {
    big_int->value = calloc(1, sizeof (unsigned long long));
    big_int->value[0] = value;
    big_int->length= 1;
}

void big_print(struct BigInt* big_int) {
    long i;
    int flag = 0;
    unsigned long len = big_int->length;
   
    for (i = len - 1; i >= 0; i--) {
        if ((flag == 0) && (big_int->value[i] != 0)) {
            flag = 1;
            printf("%llu", big_int->value[i]);
        } else if (flag == 1) {
            printf("%09llu", big_int->value[i]);
        }
    }
}

void big_multiplication(struct BigInt* big_int, unsigned long long value) {
    unsigned long i;
    unsigned long j;
    unsigned long len = big_int->length;
    for (i = 0; i < len; i++) {
        big_int->value[i] *= value;
    }
    for (i = 0; i < len; i++) {
        if (big_int->value[i] >= MAX_BIG_VALUE) {
            unsigned long long tmp = big_int->value[i] / MAX_BIG_VALUE;
            if ((i + 1) >= len) {
                unsigned long start = big_int->length;
                unsigned long finish = 20 + big_int->length;
                big_int->length += 20;
                //big_int->length++;
                big_int->value = realloc(big_int->value, sizeof(unsigned long long) * big_int->length);
                for (j = start; j < finish; j++)
                    big_int->value[j] = 0;
            }
            big_int->value[i + 1] += tmp;
            big_int->value[i] -= MAX_BIG_VALUE * tmp;
        }
    }
}

int main(int argc, char **argv) {
    struct BigInt big;
    big_init(&big, 1);
    unsigned long long i;
    for (i = 2; i <= 100000; i++) {
        big_multiplication(&big, i);
        //if ((i % 10000) == 0) printf("%llu\n", i);
    }
   
    big_print(&big);
    return EXIT_SUCCESS;
}
Пользователь OpenSolaris 2008.11, Ubuntu 8.10, Windows XP. Mac OS X не нравится, стараюсь не использовать.

Оффлайн Kwah

  • Старожил
  • *
  • Сообщений: 1442
  • Ubuntu 17.10
    • Просмотр профиля
Re: Выбор языка программирования для новичка
« Ответ #127 : 12 Августа 2008, 14:06:26 »
...
А чем плохи библиотеки?
Думать отучают. Я на таких программистов-библиолюбов насмотрелся. Алгоритм решения квадратного уравнения хрен напишут, зато гуяют по самое немогу из библиотек.
А реализовать можно и на ассемблере все что угодно, тем более что был такой даже объектно-ориентированный у Борланда.
Реалии таковы, что современный язык программирования это собственно язык программирования (core language) плюс стандартная библиотека и набор сторонних библиотек для обеспечения дополнительной функциональности.

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

Оффлайн bigboris

  • Активист
  • *
  • Сообщений: 250
    • Просмотр профиля
Re: Выбор языка программирования для новичка
« Ответ #128 : 12 Августа 2008, 14:30:16 »
Код для факториала без всяких библиотек:

(define (factorial n)
  (cond ((= n 0) 1)
           ((= n 1) 1)
           (else (* n (factorial (- n 1))))))

Команда на выполнение:

(factorial 100000)

В интерпретаторе считалось 12 сек. вместе с выводом ВСЕГО числа на экран разом. Сколько времени ушло у меня на написание этого кода думаю понятно. Программировать на общеупотребительных языках после такого тошно.
Ну и есть еще вопросы?
А против библиотек я ничего не имею если они к месту и вовремя. И в Scheme есть библиотеки, Велосипеды изобретать не нужно, чем мне нравится этот язык так это тем что в нем я 90% времени думаю над логикой приложения, а не над проблемами согласования и настройки инструментов реализации этой логики.
Если же хочется на двух или трех стульях сразу усидеть то существует OCaml, не зря мелкомягкие в следующую версию Visual Studio засунут F#.
Инструмент должен быть инструментом а не самоцелью. К сожалению в современном программировании произошел искусственно организованный перекос в инструментальную сторону. Причина проста - погоня за прибылью у производителей инструментов. Усложнение и обновление инструментов заставляет программиста большую часть времени тратить на постижение этих инструментов, а не на их использование. Все эти платные курсы, сертификации, толстые книги по очередной версии, перечитать которые жизни не хватит...
« Последнее редактирование: 12 Августа 2008, 14:57:19 от bigboris »

Оффлайн Kwah

  • Старожил
  • *
  • Сообщений: 1442
  • Ubuntu 17.10
    • Просмотр профиля
Re: Выбор языка программирования для новичка
« Ответ #129 : 12 Августа 2008, 15:00:46 »
bigboris
Спасибо за настойчивость.  Однако, работа с большими числами "из коробки" не может быть основанием для выбора языка программирования при решении задач, в которых большие числа не используются.

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

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

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

Оффлайн bigboris

  • Активист
  • *
  • Сообщений: 250
    • Просмотр профиля
Re: Выбор языка программирования для новичка
« Ответ #130 : 12 Августа 2008, 15:11:36 »
Дык это был просто пример. Можно в таком же духе и модель сложной электрической цепи описать и вообще все что угодно, любые процессы, а не только математические алгоритмы. Но я согласен, что задача определяет инструмент ее решения. просто лиспы это совсем другая парадигма программистского мышления, меня неделю колбасило пока переключился, но потом засасывает необратимо. А вебсервисы для какой-нибудь франчайзы я конечно буду писать на C# в Visual Studio ибо надо быстро тяп-ляп наклепать, особенно когда индусы на пятки наступают.
« Последнее редактирование: 12 Августа 2008, 15:17:02 от bigboris »

Оффлайн Kwah

  • Старожил
  • *
  • Сообщений: 1442
  • Ubuntu 17.10
    • Просмотр профиля
Re: Выбор языка программирования для новичка
« Ответ #131 : 12 Августа 2008, 16:08:12 »
... меня неделю колбасило пока переключился, но потом засасывает необратимо.
...
Ну, мы это уже поняли ;)

Главное, чтобы была база для переключения. Таковая база к собственно языкам программирования не имеет никакого отношения.

Оффлайн bigboris

  • Активист
  • *
  • Сообщений: 250
    • Просмотр профиля
Re: Выбор языка программирования для новичка
« Ответ #132 : 12 Августа 2008, 17:21:15 »
Ну Колмогоровский интернат и далее... Думаю с базой все в порядке.

Оффлайн Kwah

  • Старожил
  • *
  • Сообщений: 1442
  • Ubuntu 17.10
    • Просмотр профиля
Re: Выбор языка программирования для новичка
« Ответ #133 : 12 Августа 2008, 17:24:46 »
Ну Колмогоровский интернат и далее... Думаю с базой все в порядке.
Не сомневаюсь.

Фраза была как бы в поддержку тезиса, двинутого ранее.

Оффлайн S.Tokarev

  • Активист
  • *
  • Сообщений: 415
    • Просмотр профиля
Re: Выбор языка программирования для новичка
« Ответ #134 : 13 Августа 2008, 10:29:18 »
Ну Колмогоровский интернат и далее... Думаю с базой все в порядке.
А в каком году выпускался ?

 

Страница сгенерирована за 0.031 секунд. Запросов: 25.