2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1, 2, 3, 4, 5, 6, 7 ... 11  След.
 
 Re: Моя производительность в написании программ
Сообщение27.09.2010, 11:34 
creative в сообщении #349144 писал(а):
но в день пишу максимум строк 20

то-есть прога на 40000 строк может занять не один год, это медленно.
В набивочные дни вы должны выбивать 500-600 строк в день как минимум.

 
 
 
 Re: Моя производительность в написании программ
Сообщение27.09.2010, 19:57 
master в сообщении #356610 писал(а):
В набивочные дни вы должны выбивать 500-600 строк в день как минимум.
Это когда всё ясно и всё под рукой. Вы условия смотрели?

 
 
 
 Re: Моя производительность в написании программ
Сообщение28.09.2010, 00:21 
arseniiv в сообщении #356723 писал(а):
master в сообщении #356610 писал(а):
В набивочные дни вы должны выбивать 500-600 строк в день как минимум.
Это когда всё ясно и всё под рукой. Вы условия смотрели?

Вот глянул в условия задачи:

creative в сообщении #349144 писал(а):
в день пишу максимум строк 20, а всё остальное время думаю как сделать лучше. То есть рабочий процесс выглядит так: подумал, попил чаю, написал пару строк, посмотрел youtube, пришла в голову новая мысль, удалил пару строк, прогулялся, написал пару строк. За 9 часовой рабочий день набирается 20 строк кода

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

Хотя, конечно, 500-600 в день -- явный перебор. Это только если заказчику надобно мозги запудрить.

 
 
 
 Re: Моя производительность в написании программ
Сообщение28.09.2010, 00:31 
ewert в сообщении #356823 писал(а):
Хотя, конечно, 500-600 в день -- явный перебор.
Копи-пастом - легко!

 
 
 
 Re: Моя производительность в написании программ
Сообщение28.09.2010, 06:21 
venco в сообщении #356825 писал(а):
Копи-пастом - легко!

копи-паст не считается, ручками.
ewert в сообщении #356823 писал(а):
Хотя, конечно, 500-600 в день -- явный перебор. Это только если заказчику надобно мозги запудрить.

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

 
 
 
 Re: Моя производительность в написании программ
Сообщение28.09.2010, 10:12 
О чём спор вообще? У каждого человека свои задачи, измерять производительность в решении которых строками кода совершенно нельзя. Во-первых, языки программирования разные. Во-вторых, кто-то по 10 операторов в строке пишет. В третьих, на ассемблере можно много за день написать.

Например, когда я решаю очередную задачу, то 2 тысячи строк на C++ без копипаста пишу за полдня. Этому предшествует несколько часов размышлений о том, как программа должна выглядеть. Сама программа после этого работает пару недель/месяцев, потом пишется новая. А копипаст не люблю, он мешает: проще переписать кусок, чем исправлять его, рискуя совершить ошибку.

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

Короче говоря, производительность в написании программ строками кода не измеряется. Вообще непонятно чем она измеряется.

 
 
 
 Re: Моя производительность в написании программ
Сообщение28.09.2010, 10:18 
Аватара пользователя
ewert в сообщении #356823 писал(а):
Это как-то немыслимо. Нормальный рабочий процесс примерно таков: накропал строк пятьдесят, потом штук сорок стёр и остальные десять переделал, попил чайку, добавил ещё полсотни, примерно столько же стёр, скорректировал оставшееся и т.д. Постепенно, со скоростью десятка-двух строк в час-другой -- код нарастает.

Хотя, конечно, 500-600 в день -- явный перебор. Это только если заказчику надобно мозги запудрить.


А если это первая программа > 1000 строк и вторая, которую я написал не для себя (первая была около 500 строк) и весь дизайн программы и API которые нужно использовать я изучал по ходу написания программы. Язик C я знал давно, но всё что я раньше писал это маленькие программки не более 200 строк без использования какого либо API. И ещё одно требование, программа не должна содержать ни одного существенного бага, то есть должна быть полностью стабильна. С такими условиями тоже маленькая производительность?

 
 
 
 Re: Моя производительность в написании программ
Сообщение28.09.2010, 10:41 
Господа!

Мы так ни до чего не договоримся. Ведь уже был пример, показывающий, что производительность может меняться от нуля до нескольких сот строк в день. См. post349425.html#p349425

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

С учетом сказанного, предлагается

Задача 1 (Ханойская башня). Имеются три стержня (номера 1, 2, 3). На стержень 1 надеты $n$ колец разных диаметров так, что меньшие лежат на больших. Требуется переставить их на стержень 2, используя стержень 3 в качестве вспомогательного. Ограничение: меньшие кольца разрешается класть только на большие.

Напишите программу, которая генерирует искомую последовательность ходов. Каждый ход - это пара чисел $(\alpha, \beta)$, где $\alpha$ - номер стержня, с которого снимается верхнее кольцо, $\beta$ - номер стержня, на который это кольцо кладется.

Приступайте, господа программисты. И сообщите нам, сколько строк в Вашей программе, на каком языке, сколько времени писали прогу. Сообщите также важный фактор - Вы знали уже решение этой задачи или нет?

 
 
 
 Re: Моя производительность в написании программ
Сообщение28.09.2010, 11:32 
Цитата:
Задача 1 (Ханойская башня).
...................
Приступайте, господа программисты. И сообщите нам, сколько строк в Вашей программе, на каком языке, сколько времени писали прогу. Сообщите также важный фактор - Вы знали уже решение этой задачи или нет?


Решение не знал. Придумал за 2 минуты. Код - 25 строк (из них 8 - сама функция, решающая задачу). Писал 4 минуты (долго из-за того, что задумался как назвать переменные). Дело в том, что это простая задача. То есть это не совсем честно.

-- Вт сен 28, 2010 11:44:53 --

Язык забыл дописать: cpp.

-- Вт сен 28, 2010 11:56:28 --

2 vek88,

По поводу Вашей задачи о мудрецах. Похожую видел на олимпиаде по программированию. Через 10 минут её решила половина участников. Ещё через 10 - остальные. Такого рода задачи радикально отличаются от написания софта или какого-нибудь блога/форума на php. Подавляющее большинство программистов софта как-раз её решить не смогут, однако те, кто быстро справляется с математикой часто не умеют решать софтовые задачи. Например, бинарный поиск 90% народу не напишет.

То есть несправедливо измерять производительность абстрактными задачами. Её вообще чем-то конкретным едва ли можно измерить. Каждый человек заточен под свой класс задач.

 
 
 
 Re: Моя производительность в написании программ
Сообщение28.09.2010, 11:58 
Аватара пользователя
решение на common lisp:
http://paste.lisp.org/display/114977

hanoi-ops генерит искомый список перемещений, hanoi-visual рисует состояние башен на каждом ходу.
код, который "занимается делом" - 5 строк. решение знал, оно тривиальное. сделал за ~10 минут

так что задача явно не подходит. vek88, давайте другую :)

 
 
 
 Re: Моя производительность в написании программ
Сообщение28.09.2010, 12:16 
allchemist писал(а):
так что задача явно не подходит. vek88, давайте другую :)

Да ну, зачем? Эти задачи ничего не показывают... Нужно делить людей на классы по задачам, которые они умеют решать по роду своей деятельности, а потом каждому предлагать что-то ему близкое. Например, дайте задачу написать визуализатор к Ханойским Башням для мобильника, скажем Siemens M-65. Я точно не напишу, зато один школьник, мой знакомый, мог бы сделать довольно быстро.

Задачи, которые тут предлагаются - это скорее из области Computer Science, но никак не программирование в том виде, в котором его привыкли считать.

 
 
 
 Re: Моя производительность в написании программ
Сообщение28.09.2010, 12:25 
Аватара пользователя
Цитата:
Эти задачи ничего не показывают

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

 
 
 
 Re: Моя производительность в написании программ
Сообщение28.09.2010, 12:28 
Аватара пользователя
Решение знал, так как решал подобную задачу из книги по математике.

Итого ~1 ч 10 минут и 29 строк (если считать без пустых строк):

* общая схема перестановок
* кодинг
* отладка

Сам код:

код: [ скачать ] [ спрятать ]
Используется синтаксис C
#include <stdio.h>
#include <stdlib.h>

char   num;
char  *tower;

void display_state(void)
{
        int i;

        for (i = num - 1; i >= 0; i--) printf("%d", tower[i] + 1);
        printf("\n");
}

void move(int diskn, char src, char dst)
{
        int m = 0;
        while (m == src || m == dst) m++;

        if (diskn) move(diskn - 1, src, m);
        tower[diskn] = dst;
        display_state();
        if (diskn) move(diskn - 1, m, dst);
}

int main(int argc, char **argv)
{
        if (argc != 2) return 1;

    num = atoi(argv[1]);
    if (num <= 0) return 1;

        tower = calloc(num, sizeof(char));
        display_state();
        move(num - 1, 0, 2);

        return 0;
}
 


Пример результата:

Код:
# ./a.out 4
1111
1112
1132
1133
1233
1231
1221
1222
3222
3223
3213
3211
3311
3312
3332
3333


Каждая позиция тут принадлежит диску (слева самые большой диск -> справа самый маленький диск), а цифра размещение диска на колышке (то есть номер колышка). Например:

132

Означает: диск 3 (самый большой) на колышке 1, диск 2 (средний) на колышке 3, диск 3 (самый маленький) на колышке 2.

Надеюсь, что программа работает правильно.

Да, я тормоз... :-(

 
 
 
 Re: Моя производительность в написании программ
Сообщение28.09.2010, 12:47 
Ну, раз все начали коды выкладывать, вот мой, вдруг кому понадобится...

код: [ скачать ] [ спрятать ]
Используется синтаксис C++
#include <stdio.h>
#include <stdlib.h>

int n;

FILE * out = stdout;

void Put ( int HowMany, int From, int To, int Tmp ) {
        if ( HowMany == 0 ) {
                return;
        }
        Put ( HowMany - 1, From, Tmp, To );
        fprintf ( out, "(%d, %d)\n", From, To );
        Put ( HowMany - 1, Tmp, To, From );
}

int main ( int argc, char * argv [ ] ) {
        if ( argc < 2 ) {
                fprintf ( out, "Usage %s N\n", argv [ 0 ] );
                return 1;
        }
        n = atoi ( argv [ 1 ] );
        Put ( n, 1, 2, 3 );
        return 0;
}


-- Вт сен 28, 2010 12:49:45 --

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

 
 
 
 Re: Моя производительность в написании программ
Сообщение28.09.2010, 13:48 
Может, подойдёт задача написания интерпретатора простого языка?

 
 
 [ Сообщений: 157 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7 ... 11  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group