GotAI.NET

Форум: Проблемы искусственного интеллекта

 

Регистрация | Вход

 Все темы | Новая тема Стр.17 (40)<< < Пред. | След. > >>   Поиск:  
 Автор Тема: На: Кароч решил я снова заняться программированием
daner
Сообщений: 4633
На: Кароч решил я снова заняться программированием
Добавлено: 14 июл 22 9:50
Цитата:
Автор: Ω
Чето тоже не получилось от туда качнуть, страница с рекламой какая то. Лучше гуггл-драйв, дробокс, или менее "модный" сервис вроде https://my-files.su/

От https://hdd.tomsk.ru/desk/plqyzssj сюда качнул, дешево и сердито.

Ну, что сказать…

Если Вы хотели "научить" как делать веб сервера, то задача выполнена на двойку, при всём уважении. Ваш код это скорее этакое бравирование новомодными фичами с++ от 14 и выше версии, да ещё плюс бустом, который по общему мнению, как же по мягче это сказать… для эстетов языка. То есть без мануала не догадаешься почему так вывернулись, а в правильном языке всё должно быть интуитивно понятно, по крайней мере к этому нужно стремиться, но не в бусте, где весь новый "сахар" и архитектурные патттерны сразу же юзаются где надо или нет и даже простые вещи сделаны как то уж очень витеевато.

Это всё делает код тяжелым для восприятия, словно речи Эммануила Канта, даже для тех кто лет 10 назад был топовым спецом по С++. Над простой по бинес-логике алгоритмом придётся корпеть в 2-3 раза дольше, чем можно было бы. Вопрос зачем ???

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



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

я не собирался никому показывать какой-то там класс. так как я JS не знаю, мне было интересно попробовать как он будет отражать внутренне состояние объекта в с++. этот сервер написан буквально за 10 минут, так как мне более всего удобно писать, т.е. на с++14. ну и если сервер уже был, то почему-бы им не поделиться с Иваном, раз уж он пытается найти какие-то примеры. уже после, я переписал сервер на с98 (тоже, просто побаловаться и поностальгировать), но Ивану он уже не потребовался (и да, тоже с boost, так как любой в своем уме, использует либо boost, либо qt, программируя на с++).

и очень смешно про 5 лет boost-a, так как я его уже лет 10 использую и почти 80% из него перешло в стандарт с++. и что-то даже в голову не приходит ни одна библиотека, которая его не использует. О, вспомнил, OpenCV не использует.
[Ответ][Цитата]
IvanVlaskin1976
Сообщений: 15438
На: Кароч решил я снова заняться программированием
Добавлено: 14 июл 22 9:54
вот мой, не намного длинней, зато полноценный


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<netdb.h>
#include<time.h>
#include<unistd.h> // close()
#include<arpa/inet.h> // inet_ntop
#include<sys/socket.h>

// http://localhost:8000

#define SERVER_PORT "8000"
#define MAX_CONNECTION 1000

typedef enum {
eHTTP_UNKNOWN = 0,
eHTTP_CONNECT,
eHTTP_DELETE,
eHTTP_GET,
eHTTP_HEAD,
eHTTP_OPTIONS,
eHTTP_PATCH,
eHTTP_POST,
eHTTP_PUT,
eHTTP_TRACE
}eHTTPMethod;

typedef struct {
eHTTPMethod type;
char path[255];
}sHTTPHeader;

// Client

int create_socket(const char *apstrPort) {
struct addrinfo hints;
struct addrinfo *servinfo;
struct addrinfo *p;

memset(&hints, 0, sizeof(hints));
// IPv4 or IPv6
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;

int r=getaddrinfo(NULL, apstrPort, &hints, &servinfo);
if( r != 0) {
fprintf(stderr,"error getaddrinfo()\n");
return -1;
}

int sock;
int yes;
for(p = servinfo; p != NULL; p = p->ai_next) {
sock = socket(p->ai_family, p->ai_socktype, p->ai_protocol);
if(sock == -1)
continue;
if(setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1) {
fprintf(stderr,"error setsockopt\n");
close(sock);
freeaddrinfo(servinfo); // all done with this structure
return -2;
}
if(bind(sock, p->ai_addr, p->ai_addrlen) == -1) {
close(sock);
continue;
}
break;
}
freeaddrinfo(servinfo); // all done with this structure

if(p == NULL) {
fprintf(stderr,"failed to find address\n");
return -3;
}

if(listen(sock, MAX_CONNECTION) == -1) {
fprintf(stderr,"error listen\n");
return -4;
}

return sock;
}

void *get_client_addr(struct sockaddr *sa) {
if(sa->sa_family == AF_INET) {
return &(((struct sockaddr_in*)sa)->sin_addr);
}
else {
return &(((struct sockaddr_in6*)sa)->sin6_addr);
}
}

void http_request(int aSock) {
const int request_buffer_size = 65536;
char request[request_buffer_size];

int bytes_recvd = recv(aSock, request, request_buffer_size - 1, 0);

if(bytes_recvd < 0) {
fprintf(stderr,"error recv\n");
return;
}
request[bytes_recvd] = '\0';

printf("request:\n%s\n",request);

sHTTPHeader req;
parse_http_request(request, &req);

if(req.type == eHTTP_GET) {
send_massage(aSock,"sensor 1: 10<br> sensor 2: 20<br><a href=\"http://yandex.ru\">YANDEX</a><br><a href=\"http://google.com\">GOOGLE</a><FORM METHOD=POST ACTION=file01>text<INPUT NAME=\"test1\" VALUE=\"test2\" TYPE=\"text\"><BR>Submit:<INPUT NAME=\"submit1\" VALUE=\"Submit2\" TYPE=\"submit\"><BR></FORM>");
}
else {
send_404(aSock);
}

}

void parse_http_request(const char *apstrRequest, sHTTPHeader *apHeader) {
int type_length = 0;
char type[255] = {0};
int index = 0;

apHeader->type = eHTTP_UNKNOWN;

sscanf(&apstrRequest[index], "%s", type);
type_length = strlen(type);

if(type_length == 3) {
if(type[0] == 'G' && type[1] == 'E' && type[2] == 'T')
apHeader->type = eHTTP_GET;
index += type_length + 1;
sscanf(&apstrRequest[index], "%s", apHeader->path);
}
if(type_length == 4) {
if(type[0] == 'P' && type[1] == 'O' && type[2] == 'S' && type[3] == 'T')
apHeader->type = eHTTP_POST;
index += type_length + 1;
sscanf(&apstrRequest[index], "%s", apHeader->path);
printf("zrequest:\n");
}
}

void send_massage(int aSock, const char *apstrMessage) {
char buffer[65536] = { 0 };

strcat(buffer,"HTTP/1.1 200 OK\n\n");
strcat(buffer,"<h1>");
strcat(buffer,apstrMessage);
strcat(buffer,"</h1>");

int len = strlen(buffer);
send(aSock, buffer, len, 0);
}

void send_404(int aSock) {
const char *buffer = "HTTP/1.1 404 \n\n";
int len = strlen(buffer);
send(aSock, buffer, len, 0);
}


int main() {
int sock;

sock = create_socket(SERVER_PORT);
if(sock<0) {
fprintf(stderr,"error create socket\n");
return -1;
}

printf("server created!\n");

struct sockaddr_storage client_addr;
int client_d;
//char client_ip
while(1) {

socklen_t s_size = sizeof(client_addr);
client_d = accept(sock, (struct sockaddr*)&client_addr, &s_size);

if(client_d == -1) {
fprintf(stderr,"error accept\n");
return -1;
}

// char ip[INET_ADDRSTRLEN];
char ip[46];
inet_ntop(client_addr.ss_family, get_client_addr((struct sockaddr *)&client_addr), ip, sizeof ip);
printf("server: got connection from %s\n", ip);

// read
http_request(client_d);

close(client_d);
}
return 0;
}
[Ответ][Цитата]
daner
Сообщений: 4633
На: Кароч решил я снова заняться программированием
Добавлено: 14 июл 22 10:02
Цитата:
Автор: IvanVlaskin1976
истину глаголишь боярин
он меня на этом ещё хотел заставить программировать
у меня чуть мозги на бекрень от такого кода не встали


с чего вы взяли, что я собирался обучать вас с++14? максимум, что я собирался вам объяснить, это как вашу программу к нему прикрутить.
[Ответ][Цитата]
daner
Сообщений: 4633
На: Кароч решил я снова заняться программированием
Добавлено: 14 июл 22 10:16
Цитата:
Автор: IvanVlaskin1976


я ж сказал, я
$ su сделал
и уже потом
# apt install cmake
он выдал ошибку
какая разница вообще sudo или su ?


ну для инстоляции никакой.
если вы в кнопиксе это делали, то возможно там apt вообще нет.
причем скорее всего нет, он же вроде не дебиановский.
[Ответ][Цитата]
IvanVlaskin1976
Сообщений: 15438
На: Кароч решил я снова заняться программированием
Добавлено: 14 июл 22 10:16
Акстись, якобы не хотел меня программированию учить уму разуму
Цитата:
Автор: daner
потому вы и не можете справится даже с небольшой сложностью, так как не следуете, простым правилам программирования.
Я не могу вам здесь в форуме лекбез устраивать, но я бы мог объяснить вам как правильно построить вашу программу, в личной беседе. Еще раз предлагаю вам переговорить ... ну скажем 20-30 минут, думаю хватит. Это нужно ВАМ, а не мне.

Цитата:
Автор: daner
мораль я вам читать не собирался. я собирался ПОМОЧЬ разобраться как нужно организовать код и справиться с растущей сложностю. заметьте, бесплатно! ну нет, так нет.
[Ответ][Цитата]
IvanVlaskin1976
Сообщений: 15438
На: Кароч решил я снова заняться программированием
Добавлено: 14 июл 22 10:18
Цитата:
Автор: daner
ну для инстоляции никакой.
если вы в кнопиксе это делали, то возможно там apt вообще нет.
причем скорее всего нет, он же вроде не дебиановский.

Я делал это в хвалёном Kubuntu, будь он не ладен
Глюкозавр
[Ответ][Цитата]
daner
Сообщений: 4633
На: Кароч решил я снова заняться программированием
Добавлено: 14 июл 22 10:21
Цитата:
Автор: IvanVlaskin1976

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



ну и? я где-то написал, что собираюсь учить вас С++14? за 20 минут?
"организовать код", не связанно с языком программирования.
[Ответ][Цитата]
daner
Сообщений: 4633
На: Кароч решил я снова заняться программированием
Добавлено: 14 июл 22 10:23
Цитата:
Автор: IvanVlaskin1976
Я делал это в хвалёном Kubuntu, будь он не ладен
Глюкозавр


надо на ошибку смотреть, что бы понять, что вы там накосячили.
[Ответ][Цитата]
IvanVlaskin1976
Сообщений: 15438
На: Кароч решил я снова заняться программированием
Добавлено: 14 июл 22 10:30
ой беда печаль
похоже не удастся организовать Веб сервер с УЭС функциями - ведь каждый раз тогда странички из файлов придётся читать, а это угроза системе и тормоза
Блин, похоже придётся все странички в программу портировать
Геморой
[Ответ][Цитата]
daner
Сообщений: 4633
На: Кароч решил я снова заняться программированием
Добавлено: 14 июл 22 10:41
Цитата:
Автор: IvanVlaskin1976

ой беда печаль
похоже не удастся организовать Веб сервер с УЭС функциями - ведь каждый раз тогда странички из файлов придётся читать, а это угроза системе и тормоза
Блин, похоже придётся все странички в программу портировать
Геморой


геморой это то, что вы не слушаете советы от тех, у кого все работает.
[Ответ][Цитата]
IvanVlaskin1976
Сообщений: 15438
На: Кароч решил я снова заняться программированием
Добавлено: 14 июл 22 10:49
Цитата:
Автор: daner
геморой это то, что вы не слушаете советы от тех, у кого все работает.

какие претензии
ваш пример даже не скомпилировался
работает у него
[Ответ][Цитата]

Сообщений: 32
На: Кароч решил я снова заняться программированием
Добавлено: 14 июл 22 11:04
Цитата:
Автор: daner




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

я не собирался никому показывать какой-то там класс. так как я JS не знаю, мне было интересно попробовать как он будет отражать внутренне состояние объекта в с++. этот сервер написан буквально за 10 минут, так как мне более всего удобно писать, т.е. на с++14. ну и если сервер уже был, то почему-бы им не поделиться с Иваном, раз уж он пытается найти какие-то примеры. уже после, я переписал сервер на с98 (тоже, просто побаловаться и поностальгировать), но Ивану он уже не потребовался (и да, тоже с boost, так как любой в своем уме, использует либо boost, либо qt, программируя на с++).

и очень смешно про 5 лет boost-a, так как я его уже лет 10 использую и почти 80% из него перешло в стандарт с++. и что-то даже в голову не приходит ни одна библиотека, которая его не использует. О, вспомнил, OpenCV не использует.
Я Вам так скажу, на любой конторе большинство просто "разработчики", середнячки, любители трендов и новых фишек, но без фанатизма, пишут по 50-100 строк в день, молятся на ООП, паттерны, командную работу и всё такое. А есть кодеры старой школы, которые могут отжигать в кураже и по 1000-2000 строк в день рабочего кода высокой сложности, который и быстрее и проще того что делает первая группа, таких мало очень и эти парни не используют в коде новые фишки если можно без них, ну или это не сократит код в разы, не привнеся никаких побочек.

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

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

Я сам бустом пользуюсь, приходится, но кроме плюсов знаю ещё яву, питон, яваскрипт, и тп. потому могу сравнивать и критиковать. В плюсах(stl, bost, etc) очень многое можно сделать как в яве и питоне, а сделано существенно более витеевато и это нельзя оправдать "большими возможностями", просто те кто кодили ещё и на яве однозначно скажут что эти "большие возможности" просто НЕНУЖНЫ, они редки, а когда понадобятся то проще самому набросать кастомную функцию, чем мириться со всяким итераторами и кучей параметров в функциях или боже упаси архитектурными патеррнами, всякими билдерами и фабриками((((((

Нужно что то эзотерическое, лепи сам из битов и указателей что угодно, с конструкторами, деструкторами и подсчетом ссылок, а готовые либы должны быть как в питоне и яве — ОЧЕВИДНЫМИ, без лазанья по мануалам иначе ценность их резко падает.
[Ответ][Цитата]
гость
185.220.103.*
На: Кароч решил я снова заняться программированием
Добавлено: 14 июл 22 11:22
Цитата:
Автор: IvanVlaskin1976

вот мой, не намного длинней, зато полноценный


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<netdb.h>
#include<time.h>
#include<unistd.h> // close()
#include<arpa/inet.h> // inet_ntop
#include<sys/socket.h>

// http://localhost:8000

#define SERVER_PORT "8000"
#define MAX_CONNECTION 1000

typedef enum {
eHTTP_UNKNOWN = 0,
eHTTP_CONNECT,
eHTTP_DELETE,
eHTTP_GET,
eHTTP_HEAD,
eHTTP_OPTIONS,
eHTTP_PATCH,
eHTTP_POST,
eHTTP_PUT,
eHTTP_TRACE
}eHTTPMethod;

typedef struct {
eHTTPMethod type;
char path[255];
}sHTTPHeader;

// Client

int create_socket(const char *apstrPort) {
struct addrinfo hints;
struct addrinfo *servinfo;
struct addrinfo *p;

memset(&hints, 0, sizeof(hints));
// IPv4 or IPv6
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;

int r=getaddrinfo(NULL, apstrPort, &hints, &servinfo);
if( r != 0) {
fprintf(stderr,"error getaddrinfo()\n");
return -1;
}

int sock;
int yes;
for(p = servinfo; p != NULL; p = p->ai_next) {
sock = socket(p->ai_family, p->ai_socktype, p->ai_protocol);
if(sock == -1)
continue;
if(setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1) {
fprintf(stderr,"error setsockopt\n");
close(sock);
freeaddrinfo(servinfo); // all done with this structure
return -2;
}
if(bind(sock, p->ai_addr, p->ai_addrlen) == -1) {
close(sock);
continue;
}
break;
}
freeaddrinfo(servinfo); // all done with this structure

if(p == NULL) {
fprintf(stderr,"failed to find address\n");
return -3;
}

if(listen(sock, MAX_CONNECTION) == -1) {
fprintf(stderr,"error listen\n");
return -4;
}

return sock;
}

void *get_client_addr(struct sockaddr *sa) {
if(sa->sa_family == AF_INET) {
return &(((struct sockaddr_in*)sa)->sin_addr);
}
else {
return &(((struct sockaddr_in6*)sa)->sin6_addr);
}
}

void http_request(int aSock) {
const int request_buffer_size = 65536;
char request[request_buffer_size];

int bytes_recvd = recv(aSock, request, request_buffer_size - 1, 0);

if(bytes_recvd < 0) {
fprintf(stderr,"error recv\n");
return;
}
request[bytes_recvd] = '\0';

printf("request:\n%s\n",request);

sHTTPHeader req;
parse_http_request(request, &req);

if(req.type == eHTTP_GET) {
send_massage(aSock,"sensor 1: 10<br> sensor 2: 20<br><a href=\"http://yandex.ru\">YANDEX</a><br><a href=\"http://google.com\">GOOGLE</a><FORM METHOD=POST ACTION=file01>text<INPUT NAME=\"test1\" VALUE=\"test2\" TYPE=\"text\"><BR>Submit:<INPUT NAME=\"submit1\" VALUE=\"Submit2\" TYPE=\"submit\"><BR></FORM>");
}
else {
send_404(aSock);
}

}

void parse_http_request(const char *apstrRequest, sHTTPHeader *apHeader) {
int type_length = 0;
char type[255] = {0};
int index = 0;

apHeader->type = eHTTP_UNKNOWN;

sscanf(&apstrRequest[index], "%s", type);
type_length = strlen(type);

if(type_length == 3) {
if(type[0] == 'G' && type[1] == 'E' && type[2] == 'T')
apHeader->type = eHTTP_GET;
index += type_length + 1;
sscanf(&apstrRequest[index], "%s", apHeader->path);
}
if(type_length == 4) {
if(type[0] == 'P' && type[1] == 'O' && type[2] == 'S' && type[3] == 'T')
apHeader->type = eHTTP_POST;
index += type_length + 1;
sscanf(&apstrRequest[index], "%s", apHeader->path);
printf("zrequest:\n");
}
}

void send_massage(int aSock, const char *apstrMessage) {
char buffer[65536] = { 0 };

strcat(buffer,"HTTP/1.1 200 OK\n\n");
strcat(buffer,"<h1>");
strcat(buffer,apstrMessage);
strcat(buffer,"</h1>");

int len = strlen(buffer);
send(aSock, buffer, len, 0);
}

void send_404(int aSock) {
const char *buffer = "HTTP/1.1 404 \n\n";
int len = strlen(buffer);
send(aSock, buffer, len, 0);
}


int main() {
int sock;

sock = create_socket(SERVER_PORT);
if(sock<0) {
fprintf(stderr,"error create socket\n");
return -1;
}

printf("server created!\n");

struct sockaddr_storage client_addr;
int client_d;
//char client_ip
while(1) {

socklen_t s_size = sizeof(client_addr);
client_d = accept(sock, (struct sockaddr*)&client_addr, &s_size);

if(client_d == -1) {
fprintf(stderr,"error accept\n");
return -1;
}

// char ip[INET_ADDRSTRLEN];
char ip[46];
inet_ntop(client_addr.ss_family, get_client_addr((struct sockaddr *)&client_addr), ip, sizeof ip);
printf("server: got connection from %s\n", ip);

// read
http_request(client_d);

close(client_d);
}
return 0;
}
А Власкин видать не такой дурень как кажется. Может будет ещё толк, хотя после 46 уже очень врядле, жизнь уже идёт к закату
[Ответ][Цитата]
daner
Сообщений: 4633
На: Кароч решил я снова заняться программированием
Добавлено: 14 июл 22 11:23
Цитата:
Автор: Ω

Я Вам так скажу, на любой конторе большинство просто "разработчики", середнячки, любители трендов и новых фишек, но без фанатизма, пишут по 50-100 строк в день, молятся на ООП, паттерны, командную работу и всё такое. А есть кодеры старой школы, которые могут отжигать в кураже и по 1000-2000 строк в день рабочего кода высокой сложности, который и быстрее и проще того что делает первая группа, таких мало очень и эти парни не используют в коде новые фишки если можно без них, ну или это не сократит код в разы, не привнеся никаких побочек.

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

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

Я сам бустом пользуюсь, приходится, но кроме плюсов знаю ещё яву, питон, яваскрипт, и тп. потому могу сравнивать и критиковать. В плюсах(stl, bost, etc) очень многое можно сделать как в яве и питоне, а сделано существенно более витеевато и это нельзя оправдать "большими возможностями", просто те кто кодили ещё и на яве однозначно скажут что эти "большие возможности" просто НЕНУЖНЫ, они редки, а когда понадобятся то проще самому набросать кастомную функцию, чем мириться со всяким итераторами и кучей параметров в функциях или боже упаси архитектурными патеррнами, всякими билдерами и фабриками((((((

Нужно что то эзотерическое, лепи сам из битов и указателей что угодно, с конструкторами, деструкторами и подсчетом ссылок, а готовые либы должны быть как в питоне и яве — ОЧЕВИДНЫМИ, без лазанья по мануалам иначе ценность их резко падает.


да вы не останавливайтесь. ваши рассуждения о строках кода в ден, прямо ой как показывают вашу квалификацию.
к слову сказать, я не фанат сразу использовать все новое. поэтому пишу не на С++20, а на С++14, да и перешел на них постепенно, за пару лет. но двигаться в перед надо, если вы хотите оставаться в профессии. как я уже писал, я тоже много работал и на java и на python и на с#, так что тоже могу сравнивать. И уж как эти языки меняются, с++ даже и не снилось. Они не просто меняются, они еще и не всегда обратно совместимы.
[Ответ][Цитата]
Tester64
Сообщений: 1910
На: Кароч решил я снова заняться программированием
Добавлено: 14 июл 22 11:52
Цитата:
Автор: Ω

Я Вам так скажу, на любой конторе большинство просто "разработчики", середнячки, любители трендов и новых фишек, но без фанатизма, пишут по 50-100 строк в день, молятся на ООП, паттерны, командную работу и всё такое.

50 строк в день???
50 - 2 консольных экрана в ДОСе! Это 1-1.5 экрана в обычной IDE! Не хилая "продуктивность" ))))

В строках никогда не мерял, но в "активные" (успешные) сутки писал до 300-400 кб нового кода.

У меня в IDE часто встроены "заготовки кода" (мои любимые патерны заготовил) где на 3-5 символов получаю по 5-10 строк кода. Самая большая заготовка где-то на 25-30 строк.

100 строк кода в сутки - это когда "ну совсем не прет сегодня работать - видимо пора взять выходной"
[Ответ][Цитата]
 Стр.17 (40)1  ...  13  14  15  16  [17]  18  19  20  21  ...  40<< < Пред. | След. > >>