2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4, 5, 6, 7 ... 11  След.
 
 Re: Моя производительность в написании программ
Сообщение27.09.2010, 11:34 
Заблокирован


12/08/09

1284
Самодуровка
creative в сообщении #349144 писал(а):
но в день пишу максимум строк 20

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

 Профиль  
                  
 
 Re: Моя производительность в написании программ
Сообщение27.09.2010, 19:57 
Заслуженный участник


27/04/09
28128
master в сообщении #356610 писал(а):
В набивочные дни вы должны выбивать 500-600 строк в день как минимум.
Это когда всё ясно и всё под рукой. Вы условия смотрели?

 Профиль  
                  
 
 Re: Моя производительность в написании программ
Сообщение28.09.2010, 00:21 
Заслуженный участник


11/05/08
32166
arseniiv в сообщении #356723 писал(а):
master в сообщении #356610 писал(а):
В набивочные дни вы должны выбивать 500-600 строк в день как минимум.
Это когда всё ясно и всё под рукой. Вы условия смотрели?

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

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

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

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

 Профиль  
                  
 
 Re: Моя производительность в написании программ
Сообщение28.09.2010, 00:31 
Заслуженный участник


04/05/09
4587
ewert в сообщении #356823 писал(а):
Хотя, конечно, 500-600 в день -- явный перебор.
Копи-пастом - легко!

 Профиль  
                  
 
 Re: Моя производительность в написании программ
Сообщение28.09.2010, 06:21 
Заблокирован


12/08/09

1284
Самодуровка
venco в сообщении #356825 писал(а):
Копи-пастом - легко!

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

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

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


26/01/10
959
О чём спор вообще? У каждого человека свои задачи, измерять производительность в решении которых строками кода совершенно нельзя. Во-первых, языки программирования разные. Во-вторых, кто-то по 10 операторов в строке пишет. В третьих, на ассемблере можно много за день написать.

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

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

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

 Профиль  
                  
 
 Re: Моя производительность в написании программ
Сообщение28.09.2010, 10:18 
Аватара пользователя


01/04/10
910
ewert в сообщении #356823 писал(а):
Это как-то немыслимо. Нормальный рабочий процесс примерно таков: накропал строк пятьдесят, потом штук сорок стёр и остальные десять переделал, попил чайку, добавил ещё полсотни, примерно столько же стёр, скорректировал оставшееся и т.д. Постепенно, со скоростью десятка-двух строк в час-другой -- код нарастает.

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


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

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


15/10/09
1344
Господа!

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

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

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

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

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

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

 Профиль  
                  
 
 Re: Моя производительность в написании программ
Сообщение28.09.2010, 11:32 


26/01/10
959
Цитата:
Задача 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 
Аватара пользователя


20/12/08
236
изниоткуда
решение на common lisp:
http://paste.lisp.org/display/114977

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

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

 Профиль  
                  
 
 Re: Моя производительность в написании программ
Сообщение28.09.2010, 12:16 


26/01/10
959
allchemist писал(а):
так что задача явно не подходит. vek88, давайте другую :)

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

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

 Профиль  
                  
 
 Re: Моя производительность в написании программ
Сообщение28.09.2010, 12:25 
Аватара пользователя


20/12/08
236
изниоткуда
Цитата:
Эти задачи ничего не показывают

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

 Профиль  
                  
 
 Re: Моя производительность в написании программ
Сообщение28.09.2010, 12:28 
Аватара пользователя


01/04/10
910
Решение знал, так как решал подобную задачу из книги по математике.

Итого ~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 


26/01/10
959
Ну, раз все начали коды выкладывать, вот мой, вдруг кому понадобится...

код: [ скачать ] [ спрятать ]
Используется синтаксис 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 
Заслуженный участник


27/04/09
28128
Может, подойдёт задача написания интерпретатора простого языка?

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 157 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7 ... 11  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group