Учу Си, посоветуйте куда устроиться получше. (Лучшая работа, Си)

Работа в сфере ИТ и не только: обсуждение, поиск работы, поиск сотрудников

Модераторы: Hoblin, Модераторы разделов

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение drBatty »

sciko писал(а):
28.10.2013 01:39
я говорил об использовании C++ в процедурном стиле.

Вот про это и говорил drBatty

я говорил не про это. Я говорил про смешивание стилей. Поясню: ИМХО можно писать "на С++ в процедурном стиле", в этом ИМХО нет ничего плохого, это НЕ быдлокод. Но это, ИМХО, и не С++. Быдлокод, это когда вы пишете в процедурном стиле, а потом внезапно впихиваете в качестве параметра функции объект класса с виртуальными методами. Вот это -- быдлокод. Или когда у вас публичный виртуальный метод принимает указатель void* непонятно на что(даже если вам оно и понятно, то это всё равно быдлокод, ибо засунуть в такой метод можно всё что угодно).
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение drBatty »

sciko писал(а):
28.10.2013 01:39
Это простой для вас, т.к. вы знаете bash. А для человека, не знакомого с bash -- это разрыв шаблона, равно как и ФП.

если вы не знаете хорошо какой-то скриптовый ЯП вроде bash/perl, и/или вы не можете уверенно писать программы на ФП(CL к примеру) -- вон из профессии. Из вас может получится отличный художник или инженер. Или дворник. Я не знаю. Но точно -- не программист.
sciko писал(а):
28.10.2013 01:39
Асм нужен только тому, кто с железом будет иметь дело.

если вы не знаете ассемблер == вы не читали Кнута. Вон из профессии.
sciko писал(а):
28.10.2013 01:39
Да и тогда не красиво получиться: 4, а не 3 языка.

если 100 для вас "не красиво", а 2^2-1 -- "красиво", вон из профессии. Число "3" -- ущербное. Если при написании кода у вас появляется число 3 -- значит вы что-то сделали не так. (возможно конечно, что это не баг, а фича. Тогда вы -- гениальный программист :)
sciko писал(а):
28.10.2013 01:39
Не согласен. В идеале художник и маляр одинаковой квалификации должны за месяц получать одинаково.

м... Это уже какая-то политэкономика. Вы меня извините, но эти лекции я благополучно проспал в своё время. Возможно вы правы.

NickLion писал(а):
28.10.2013 05:24
drBatty, если я его правильно понял, говорил о смешении в одом коде разных подходов, например, обычных указателей и ручного удаления, умных указателей, строк char* и std::string, и др. В таком виде я согласен, это обычно быдлокод. Но не использование процедурного стиля в C++.

именно так.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

sciko
Сообщения: 1744
Статус: Ъ-участник
ОС: Debian/Ubuntu/etc

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение sciko »

NickLion писал(а):
28.10.2013 05:24
В C++ из отличий будет только необходимость явного приведения типов.
Будете юзать static_cast или C-Style?
Если первое, то вам не кажется, что это уже концепция C++, а не C?
Если второе, то как будет бороться с тем, что преобразование в C и C-Style в C++ немного различаются? Гонять всё в void* и обратно?

NickLion писал(а):
28.10.2013 05:24
О сборке C компилером забыть. Ненужные концепции из C++ не использовать.
Тогда это получиться не "писать на С++ как на С", а "использовать С++ без классов, шаблонов и STL". ИМХО это так же глупо, как в Haskell писать всё в монаде IO или в Дельфях весь функционал снести в 1 функцию.

NickLion писал(а):
28.10.2013 05:24
C++ мультипарадигменный язык, включает и процедурный подход.

А ещё в С+11 есть возможности для функционального программирования. Только вот писать в функциональном стиле никто не будет. Потому что это так же глупо.

NickLion писал(а):
28.10.2013 05:24
Тогда ещё что-то из разряда Prolog надо.
Да кроме Prolog особо распространённого ничего и нет.
Я согласен, что можно было включить, если бы не один факт: логические и функциональные ЯП очень похожи, т.к. используют одну концепцию. Только в ФЯП программа описывается как z_1, ... , z_n = f(x_1, ... , x_m), а в ЛЯП -- как F(x_1, ... , x_m, z_1, ... , z_n)=0. Именно поэтому ЛЯП и любят скрещивать с ФЯП.

drBatty писал(а):
28.10.2013 08:31
char* это контейнер, в котором лежит маленькое число, обычно -128..127.
В char* лежит не число, а указатель размером с указатель ^_^
Причём это указатель именно на строку, а не на что-то другое.

drBatty писал(а):
28.10.2013 08:31
Вовсе не обязательно, что это именно первая буква

Естественно. Ведь это может быть вторая, третья и т.п. буквы. Но в любом случае это будет строка.
drBatty писал(а):
28.10.2013 08:31
именно строки, да ещё и ASCIIZ.

Данные, на которые указывает char*, компилер будет интерпретировать именно как строку, причём оканчивающуюся именно нулём, но без указания кодировки. А ваше мнение компилеру как-то не интересно.

drBatty писал(а):
28.10.2013 10:15
Но точно -- не программист.

Вот именно! Не программист, а кодер. Не художник, а маляр. Но как я говорил, маляры тоже нужны.

drBatty писал(а):
28.10.2013 10:15
если вы не знаете ассемблер == вы не читали Кнута.
И наоборот, если вы читали Кнута и знаете MIX/MMIX-асм, то вы не знаете асм. Такие дела.

Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение NickLion »

sciko писал(а):
28.10.2013 21:07
NickLion писал(а):
28.10.2013 05:24
В C++ из отличий будет только необходимость явного приведения типов.
Будете юзать static_cast или C-Style?
Если первое, то вам не кажется, что это уже концепция C++, а не C?
Если второе, то как будет бороться с тем, что преобразование в C и C-Style в C++ немного различаются? Гонять всё в void* и обратно?

Второе. Немного различается лежит в области множественного наследования, его не будет, так что и проблем не будет.

sciko писал(а):
28.10.2013 21:07
Тогда это получиться не "писать на С++ как на С", а "использовать С++ без классов, шаблонов и STL". ИМХО это так же глупо, как в Haskell писать всё в монаде IO или в Дельфях весь функционал снести в 1 функцию.

А ещё в С+11 есть возможности для функционального программирования. Только вот писать в функциональном стиле никто не будет. Потому что это так же глупо.

Это не глупо. Это нормально. ООП иногда излишне и процедурный стиль вполне покрывает задачи. Да, я согласен, что в таком случае стоит писать на "чистом" C, но если приходится взаимодействовать с C++ библиотекой, я возьму C++ и напишу на нём в процедурном стиле. И совсем не буду чувствовать себя глупо.

sciko писал(а):
28.10.2013 21:07
В char* лежит не число, а указатель размером с указатель ^_^
Причём это указатель именно на строку, а не на что-то другое.

Нет, это указатель на символ, а не на строку. Но так как в C/C++ любой указатель одновременно можно понимать как указатель на последовательность, то его можно понимать как строку. Например, null-terminated строку. Впрочем, не обязательно.
Спасибо сказали:

FlySnake
Сообщения: 992
ОС: openSUSE

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение FlySnake »

sciko писал(а):
28.10.2013 21:07
drBatty писал(а):
28.10.2013 08:31
char* это контейнер, в котором лежит маленькое число, обычно -128..127.
В char* лежит не число, а указатель размером с указатель ^_^
Причём это указатель именно на строку, а не на что-то другое.

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

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение drBatty »

sciko писал(а):
28.10.2013 21:07
В char* лежит не число, а указатель размером с указатель ^_^
Причём это указатель именно на строку, а не на что-то другое.

что-то вы ерунду какую-то городите:

Код: Выделить всё

char x = 17;// маленькое целое число
char *p = &x;// указатель на маленькое целое число
(*p)++;// 17+1=>18
p[0]++;// ещё это массив из одного эл-та.

тип char это тот же int, единственная разница между ними, что у char'а размер ==1 по определению, а у int'а размер не определён, известно лишь что он не меньше char'а, и обычно это родной размер данной архитектуры(но не всегда, например в amd64 сейчас не так).

А char* -- указатель на целое число char, и не более того. А безусловные "строки" живут только в вашей фантазии.
sciko писал(а):
28.10.2013 21:07
Естественно. Ведь это может быть вторая, третья и т.п. буквы. Но в любом случае это будет строка.

у меня выше никакая не строка. А число 17.
sciko писал(а):
28.10.2013 21:07
Данные, на которые указывает char*, компилер будет интерпретировать именно как строку, причём оканчивающуюся именно нулём, но без указания кодировки. А ваше мнение компилеру как-то не интересно.

ЯННП
sciko писал(а):
28.10.2013 21:07
Вот именно! Не программист, а кодер. Не художник, а маляр. Но как я говорил, маляры тоже нужны.

такие -- не нужны. Ну во всяком случае C/C++ не для них. Есть ведь php/C#.
sciko писал(а):
28.10.2013 21:07
И наоборот, если вы читали Кнута и знаете MIX/MMIX-асм, то вы не знаете асм. Такие дела.

бред какой-то. MIX -- это типичный ассемблер. Как можно знать ассемблер, и не знать ассемблер одновременно? Или вы сейчас к словам придираетесь, и про MIXAL говорите?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение drBatty »

NickLion писал(а):
28.10.2013 21:18
Но так как в C/C++ любой указатель одновременно можно понимать как указатель на последовательность, то его можно понимать как строку.

правильнее сказать: последовательность _чисел_ типа char. То, что ваша программа интерпретирует данные числа как какие-то символы какого-то алфавита -- это трудности исключительно вашей программы, и к C не имеет отношения. Как и то, что _вы_ считаете концом строки символ '\0'. Библиотечные функции могут как следовать таким соглашениям(strcmp(3)), так и НЕ следовать (memcmp(3)). Ну и конечно strcmp(3) сравнивает на самом деле ЧИСЛА, а вовсе не строки. Это только из-за правильного выбора ASCII можно считать последовательности char'ов -- строками.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение NickLion »

drBatty писал(а):
28.10.2013 23:23
правильнее сказать: последовательность _чисел_ типа char.

Да, конечно. Символ, как тип данных = код, число. А не глиф, и даже не символ в какой-то кодировке. Это же не Java. :)

drBatty писал(а):
28.10.2013 23:23
Как и то, что _вы_ считаете концом строки символ '\0'

Да, насчёт необязательности null-terminated я говорил. В той же std::string имеется char*, но указывает он не на null-terminated строку: длина хранится отдельно.

drBatty писал(а):
28.10.2013 23:23
так и НЕ следовать (memcmp(3))

Вот здесь, немного мимо, memcpy использует void*.
Спасибо сказали:

Kopilov
Сообщения: 821
ОС: [K]Ubuntu, Debian

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение Kopilov »

NickLion писал(а):
29.10.2013 09:59
Да, конечно. Символ, как тип данных = код, число. А не глиф, и даже не символ в какой-то кодировке.

Т.е. "символ в какой-то кодировке" -- это уже не число? А что, по-Вашему? Кодировка (совместно со шрифтами) для того и нужна, чтобы представлять символы (глифы) в виде чисел (однобайтовых или многобайтовых)

NickLion писал(а):
29.10.2013 09:59
Это же не Java. :)

А в ней что не так? Там единственная особенность: для символов внутри JVM всегда используется одна кодировка (UTF16) и она нигде не указывается -- указывается (или берётся системная по-умолчанию) только входная и выходная при всевозможных операциях ввода-вывода (например, при генерации строки из массива байтов и наоборот). А сами символы (переменные char и их массив в String) -- вполне себе числа :)
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение drBatty »

NickLion писал(а):
29.10.2013 09:59
Вот здесь, немного мимо, memcpy использует void*.

на самом деле это char. В качестве доказательства посмотрите на число этих void*. Как известно, размер void* не определён, но memcpy обрабатывает вполне определённое количество этих void*. Равное числу char'ов. Тип void* там только для удобства, что-бы вручную не преобразовывать скажем int* -> char*.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение drBatty »

Kopilov писал(а):
29.10.2013 12:09
Т.е. "символ в какой-то кодировке" -- это уже не число?

с т.з. ЯП C/C++, не существует никаких особых "символов", кроме чисел типа char.

Т.е. никаких "строк" не существует, а существуют лишь массивы из целых чисел, которые могут быть использованы как "строки". Причём даже два вида таких массивов есть: типа char, и типа wchar_t, которые в gcc трактуются сейчас как целые числа в 32 бита. Конечно, вы можете трактовать как строки что угодно, например массив 64х целых чисел, в каждом из которых лежит ровно 8 символов ASCII. Но и то, и другое, и третье, это всё ваши допущения. С т.з. C/C++ нет никакой разницы, "символ" это или "число". Машинный код не изменяется от того, что вы будете считать char'ы не буквами, а числами. Компилятор этого не только не учитывает, но и не может знать, и соответственно учитывать. Т.е. компилятор обрабатывает char* как указатель на число(на числа).
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
deadhead
Сообщения: 1913
Статус: zzz..z

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение deadhead »

drBatty писал(а):
28.10.2013 10:15
Число "3" -- ущербное. Если при написании кода у вас появляется число 3 -- значит вы что-то сделали не так. (возможно конечно, что это не баг, а фича. Тогда вы -- гениальный программист :)

#include <stdio.h>
int main (void) {
int mask = (1 << 1) | (1 << 0);
printf("%d ... oops!\n", mask);
return 0;
}
[x] close
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение drBatty »

deadhead писал(а):
29.10.2013 14:36
int mask = (1 << 1) | (1 << 0);

что-то вы сделали не так...

Да и вообще непонятно, что и комы вы хотели доказать? Для меня и компилятора ваша строчка эквивалентна

Код: Выделить всё

int mask = 3;
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
deadhead
Сообщения: 1913
Статус: zzz..z

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение deadhead »

drBatty писал(а):
29.10.2013 14:47
Да и вообще непонятно, что и комы вы хотели доказать? Для меня и компилятора ваша строчка эквивалентна
видимо оттого что вы с битовыми операциями дел не имели...
drBatty писал(а):
28.10.2013 10:15
Вон из профессии.
;)
[x] close
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение drBatty »

deadhead писал(а):
29.10.2013 17:38
видимо оттого что вы с битовыми операциями дел не имели...

скорее наоборот. Для меня это выглядит как для вас такой код:

Код: Выделить всё

int x = 2*2;
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Kopilov
Сообщения: 821
ОС: [K]Ubuntu, Debian

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение Kopilov »

drBatty писал(а):
29.10.2013 14:01
Kopilov писал(а):
29.10.2013 12:09
Т.е. "символ в какой-то кодировке" -- это уже не число?

с т.з. ЯП C/C++, не существует никаких особых "символов", кроме чисел типа char.

Полностью согласен. С т.з. ЯП Java, как ни странно, тоже.

Я только не смог понять, что имел ввиду NickLion в утверждении "Символ, как тип данных = код, число. А не символ в какой-то кодировке." Из этого следует, что символ в какой-то кодировке не есть число (а что?)
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение drBatty »

Kopilov писал(а):
29.10.2013 21:04
Я только не смог понять, что имел ввиду NickLion в утверждении "Символ, как тип данных = код, число. А не символ в какой-то кодировке." Из этого следует, что символ в какой-то кодировке не есть число (а что?)

спор был вот с этим ложным утверждением:
sciko писал(а):
28.10.2013 21:07
В char* лежит не число, а указатель размером с указатель ^_^
Причём это указатель именно на строку, а не на что-то другое.

так вот в char*p лежит именно число. Т.е. в том смысле, что тип *p == целое число, обычно из диапазона -128..127. Размер (в смысле sizeof) данного числа по стандарту равен 1(единица). Да, его можно интерпретировать как "символ", и как "первый символ строки ASCIIZ". Но эта интерпретация к самому ЯП не относится. Разве что к некоторым функциям из стандартной библиотеки. Кодировки тут наверное при том, что в отличных кодировках от ASCII, не ASCII символы больше 127, но как известно, в 99.999% случаев, тип char никогда не принимает значения >127. Т.е. строго говоря, даже в какой-нить KOI8-R, символ "ф" НЕ имеет отображения в char(это связано с тем, что константы в C/C++ имеют тип int, в том числе и символьные). Ну и кроме того, "я" < "а", т.е. сортировка по алфавиту тоже поломана.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение NickLion »

Kopilov писал(а):
29.10.2013 21:04
Я только не смог понять, что имел ввиду NickLion в утверждении "Символ, как тип данных = код, число. А не символ в какой-то кодировке." Из этого следует, что символ в какой-то кодировке не есть число (а что?)

Я имел в виду, что это число не связывается стандартом языка с каким-либо определённым символом. Данную связь и определяет кодировка. На PC 48 — это '0', а на другой машине может быть совершенно другое.

Kopilov писал(а):
29.10.2013 21:04
С т.з. ЯП Java, как ни странно, тоже.

А вот и нет. Java определяет использование Unicode. Поэтому 48 там всегда '0'.

drBatty писал(а):
29.10.2013 21:55
первый символ строки ASCIIZ

Правильнее говорить null-terminated, потому что ASCIIZ подразумевает null-terminated ASCII. А вот C ничего не говорит об ASCII.
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение drBatty »

NickLion писал(а):
30.10.2013 11:36
Правильнее говорить null-terminated, потому что ASCIIZ подразумевает null-terminated ASCII. А вот C ничего не говорит об ASCII.

ну ASCIIZ говорит как раз об nul-terminated
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение NickLion »

drBatty писал(а):
30.10.2013 11:50
ну ASCIIZ говорит как раз об nul-terminated

Да, но ASCIIZ неверно. Потому что может быть не ASCII. ASCIIZ — всегда null-terminated, но не всегда null-terminated — ASCIIZ. Например, в Linux мы часто используем UTF-8-Z (если можно так назвать). А eddy, наверное всё ещё KOI8-R-Z. Но даже эти кодировки частично совместимы с ASCII, что в общем случае всё равно не так.
Спасибо сказали:

Аватара пользователя
deadhead
Сообщения: 1913
Статус: zzz..z

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение deadhead »

drBatty писал(а):
29.10.2013 17:58
скорее наоборот.
хм... может быть тогда разъясните, что же все же ущербно - Ваше "число 3" или Ваше "наоборот"?
[x] close
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение drBatty »

deadhead
ну начнём с того, что число 3 таки ваше. Уже вы за него должны ответить.
ну вы ведь его написали, или я что-то путаю?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
deadhead
Сообщения: 1913
Статус: zzz..z

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение deadhead »

drBatty писал(а):
30.10.2013 12:37
ну начнём с того, что число 3 таки ваше. Уже вы за него должны ответить.
Увольте, сударь
drBatty писал(а):
28.10.2013 10:15
Число "3" -- ущербное. Если при написании кода у вас появляется число 3 -- значит вы что-то сделали не так.
держать ответ ;)
[x] close
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение drBatty »

deadhead
что вы этим хотите сказать?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение drBatty »

deadhead
что касается тройки, оно просто так из ниоткуда не появляется. Скорее всего, вы это число взяли "от балды", что конечно характеризует качество вашего кода.

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

Я пишу так:

Код: Выделить всё

int x = 3;// TODO в этом быдлокоде я задаю x равным трём
// ибо точно не знаю, чему оно должно быть равно


И вместо 3 я обычно беру что-нить более оригинальное, например одну третью, она очевидно в целых числах равна 0x55555555. Но лучше 1/7, которая 0x24924924.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
deadhead
Сообщения: 1913
Статус: zzz..z

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение deadhead »

drBatty писал(а):
31.10.2013 11:03
Т.е. это место в вашей программе не просто быдлокод, а хорошо замаскированный быдлокод, который так вот сразу и не заметишь.
ну так не имея элементарно опыта работы с битовыми операциями не мудрено не заметить... ;)

drBatty писал(а):
31.10.2013 11:03
И вместо 3 я обычно беру что-нить более оригинальное, например одну третью, она очевидно в целых числах равна 0x55555555. Но лучше 1/7, которая 0x24924924.
ага... для теста младших двух бит самое то! браво, маэстро!! ;)

впрочем
drBatty писал(а):
28.10.2013 10:15
вон из профессии.

[x] close
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение drBatty »

deadhead писал(а):
31.10.2013 17:05
ну так не имея элементарно опыта работы с битовыми операциями не мудрено не заметить...

т.е. вы признаёте, что цель быдлокода == обман?

теперь подумайте, КОГО вы обманываете?

deadhead писал(а):
31.10.2013 17:05
ага... для теста младших двух бит самое то! браво, маэстро!! ;)

уж если обмазываться битами, то всеми 32я или сколько там их у вас... А юзать пару битов из 32х как-то не очень экономично ИМХО. Ну и потом, ваши 1,1 ничем не лучше и не хуже моих 0,0.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
deadhead
Сообщения: 1913
Статус: zzz..z

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение deadhead »

drBatty писал(а):
31.10.2013 20:04
т.е. вы признаёте, что цель быдлокода == обман?
если, уважаемый читатель, не в силах осознать написанного ввиду отсутствия необходимых знаний, а тем более и опыта, то все в его глазах будет выглядеть "быдлокодом" и "ущербным"... обманывает, к сожалению, читатель только себя, ибо принимает свое мнение как истинно верное, но страшно не это ..страшно когда такой читатель начинает поучать окружающих - выдавая свое "ущербное" мнение за "авторитетное" с далеко идущими выводами...

drBatty писал(а):
31.10.2013 20:04
уж если обмазываться битами, то всеми 32я или сколько там их у вас...
а кстати, сколько? какого Ваше экспертное мнение? ;)

drBatty писал(а):
31.10.2013 20:04
А юзать пару битов из 32х как-то не очень экономично ИМХО.
а что об этом думает, скажем, компилятор? :)
[x] close
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение drBatty »

deadhead писал(а):
01.11.2013 10:36
если, уважаемый читатель, не в силах осознать написанного ввиду отсутствия необходимых знаний, а тем более и опыта

вы передёргиваете. Возмём другой пример быдлокода: когда вы вместо ВСЕГО используете goto. Т.е. ВСЕ циклы/условия/функции вы делаете через goto. Очевидно, что данный быдлокод будет невозможно прочитать. Вы мне тоже скажите на мои претензии: "учи матчасть, ламо! goto часть стандарта C!", так?

Можно долго спорить на тему, что можно, а что нельзя, и только одно очевидно: всякие goto и обмазывание битами сильно снижает читаемость программы. Да, иногда это всё даёт какой-то профит. Иногда даже читаемость повышает

Вот например в вашем случае

Код: Выделить всё

int mask = (1<<1)|(1);
do{
  x &= mask;
  mask <<= 2;
  mask |= (y1<1)|y0
}while(...);

в данном примере переменная mask на самом деле == две переменные, это y1 и y0. Потому есть смысл и инициализировать y1,y0, но можно и сразу mask вот таким вот способом. Ибо это не тройка, это две битовые переменные, обе true.
deadhead писал(а):
01.11.2013 10:36
то все в его глазах будет выглядеть "быдлокодом" и "ущербным"... обманывает себя, к сожалению, читатель, ибо принимает свое мнение как истинно верное, но страшно не это ..страшно когда такой читатель начинает поучать окружающих - выдавая свое "ущербное" мнение за "авторитетное" с далеко идущими выводами...

я просто по опыту знаю. Опыт у меня большой. Тупо по времени. Про тройки -- чисто эмпирическое знание. Оно не выводится из теории, а только из практики. Такого рода опыта и правил даже обезьяна нахватается, если её заставить читать МНОГО кода. Т.ч. моей заслуги тут немного.
deadhead писал(а):
01.11.2013 10:36
а кстати, сколько? какого Ваше экспертное мнение? ;)

не определено. Таково моё экспертное мнение по данному вопросу. Вы ещё на ноль попросите меня поделить. А лучше не меня, а любого математика, с тем понтом, что "да ты г-но, а не математик!".
deadhead писал(а):
01.11.2013 10:36
А юзать пару битов из 32х как-то не очень экономично ИМХО.

а что об этом думает, скажем, компилятор? :)

компилятор об этом ничего не думает. Он думать не умеет. За то умеют думать разработчики компилятора. Так вот, их мнение просто(касаемо gcc) -- если программист хочет по два бита обрабатывать, то значит есть какой-то особый резон на то. И значит НАДО делать так, и никак иначе. Может это прототип, который так легче отлаживать? А может у программиста _всего_ два бита, и ему параллельно? Так тоже бывает. Однако, в обоих этих случаях обычно берут тип int, который тоже работает как двух битовая переменная. Причём без всяких обмазываний битовыми операциями. Вы можете проверить этот момент, выражение y1*2 + y0 работает точно также, как выражение y1<<1 | y0. Ну и зачем тут сдвиг и операция ИЛИ? Как раз тут случай преждевременной оптимизации, о которой писал Кнут: компилятор сам поменяет умножение на сдвиг, если на целевой платформе это быстрее (что, кстати говоря, далеко не факт)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
deadhead
Сообщения: 1913
Статус: zzz..z

Re: Учу Си, посоветуйте куда устроиться получше.

Сообщение deadhead »

drBatty писал(а):
01.11.2013 11:06
Возмём другой пример быдлокода:
Вы уходите от первоначальной линии - утверждению что "число 3 ущербно". У меня нет никакого желания опускаться до обсуждения абстрактного "быдлокода", кое вы пытаетесь мне навязать.
drBatty писал(а):
01.11.2013 11:06
не определено. Таково моё экспертное мнение по данному вопросу.
так отчего же вы столь же экспертно заявляете
drBatty писал(а):
31.10.2013 20:04
уж если обмазываться битами, то всеми 32я или сколько там их у вас...
? ;)
drBatty писал(а):
01.11.2013 11:06
я просто по опыту знаю. Опыт у меня большой. Тупо по времени.
ну просто безапелляционный аргумент... простите, но больше чем у кого? в чем? и причем тут время? ;)
drBatty писал(а):
01.11.2013 11:06
Однако, в обоих этих случаях обычно берут тип int, который тоже работает как двух битовая переменная.
ну так в чем экономия-то?
[x] close
Спасибо сказали: